Mivel semmi jelét nem láttam annak, hogy rajtam kívül bárki használná, vagy akár csak kipróbálta volna, lehet, hogy a következõ verzióban már nem lesz, illetve az UHU 2.0-s csomagban sem érdemes túl sokat erõltetni a fordítását. Kár, mert szerintem hasznos funkció lett volnaÉn csodálni szoktam miket tudsz varázsolni vele! Én is szívesen varázsolnék csak még nem volt idõm elmélyülni benne :cry: :oops:
Én csodálni szoktam miket tudsz varázsolni vele! Én is szívesen varázsolnék csak még nem volt idõm elmélyülni benne :cry: :oops:
Alapvetõen, hogy kell elképzelni ezt a LUA-t? Gyakorlatilag folyamatosan fut az emulátor mellett?
és ha a debugger elöjön akkor az emu a Z80 PC regisztert és minden mást felfüggeszt ?
Az nem jó azt nem lehet megcsinálni fut a lua háttében/debug bezár lua fut/ futtatom az emuban a programot és a program meghiv egy zxrom cimet 0-3fffh között és akkor elöugrik a debug.
A lua csak akkor fut ha benvan/megnyitvan/ a debugger ablak?
A breakPointCallback függvény utána minden töréspontnál lefut.De ugye jól értem, hogy ezen példa esetén ez magától nem történik meg, hanem kézzel kell töréspontot beállítani?
De ugye jól értem, hogy ezen példa esetén ez magától nem történik meg, hanem kézzel kell töréspontot beállítani?
És ha jól túrom a readme-t, akkor egy teljesen automata LUA-hoz kell az elejére egy setBreakPoint(bptype, addr, priority)?
Nem tudom, hogy ez hasznos-e valakinek, de itt egy részletesebb leírás a Spectrum programok attribútum és I/O mûveleteit figyelõ zxiolog.lua (http://enterpriseforever.com/dlattach.html;topic=132.0;attach=3848) script mûködésérõl:Ezt akartam kérni, csak nem mertelek fárasztani :oops:
Nem tudom, hogy ez hasznos-e valakinek, de itt egy részletesebb leírás a Spectrum programok attribútum és I/O mûveleteit figyelõ zxiolog.lua (http://enterpriseforever.com/dlattach.html;topic=132.0;attach=3848) script mûködésérõl:
valami olyan
if getPC = 0CDh or getPC = 0C3h then
if (getPC+1)+((getPC+2)*256) <= 03FFFh then
zxromcallmap[getPC(),(getPC+1)+((getPC+2)*256)] = true
getPC = getPC +3 ; vagy 2?
end
end
return false
remélem érthetö
Én vagyok béna, vagy tényleg nem mûködik a readme-ben található example, ami a 102-es csatorna nevét írná ki?
Most amikor már kezdek ráérezni az ízére, maradjon!!!
(Ettõl függetlenül egy külön oldalon lehet olyan nagyobb monitor ablak :) )
Tehát akkor már van egy felhasználó :?: :)Itt az elsõ próbálkozás :-)
Itt az elsõ próbálkozás :-)Ez hogyan mûködik, mit kell vele csinálni?
Ez hogyan mûködik, mit kell vele csinálni?Csinálj lemezmûveleteket, aztán nézz be a debugger ablakba. Megállni akkor fog ha a jelenlegi ismereteink szerint ismeretlen FISH hívás történik.
Betöltöttem a debugger luás részébe és runt is nyomtam, de látszólag nem csinál semmit.
Csinálj lemezmûveleteket, aztán nézz be a debugger ablakba. Megállni akkor fog ha a jelenlegi ismereteink szerint ismeretlen FISH hívás történik.
Továbbfejlesztési ötlet: azt is kiírhatná, hogy milyen címrõl történt a hívás :):ds_icon_cheesygrin:
:ds_icon_cheesygrin:
Még egy javítási lehetõség: a címet szegmensszámmal kiírni.Az már bonyolultabb feladat :-)
Az már bonyolultabb feladat :-)
Olyan Print van, ami nem emel sort?
Rövidebb megoldás táblázattalÜgyes :smt038
Még egy javítási lehetõség: a címet szegmensszámmal kiírni.Elvileg megoldva :-)
A szegmensszám lekérdezését egyébként kissé lehet egyszerûsíteni: readIOPort(0xB0 + SHR(cim, 14)) vagy getMemoryPage(SHR(cim, 14)).Sejtettem, hogy tudsz majd új trükköket mondani!
Pontosan mi az, aminek a megoldása a scriptben problémát jelent ?A konkrét kérdés az, hogy ha van az EP memóriában egy 3 bájton tárolt cím, abból hogyan lehet a legegyszerûbben fizikai címet elõállítani?
A konkrét kérdés az, hogy ha van az EP memóriában egy 3 bájton tárolt cím, abból hogyan lehet a legegyszerûbben fizikai címet elõállítani?
Az lehetséges, hogy lefagy az egész emulátor ha sikerül végtelen ciklust csinálnom a LUA-ban?
Igen :oops:Legközelebb gyakrabban nyomogatom a Save-t a Run elött :oops:
Mit lehetne egyszerûbben? :oops:
CPU fogyasztást kijelzõ script (nem tudom, hasznos-e ez valakinek):Szerintem jól fog ez még jönni!
Olyan scriptet lehetne csinálni, ami megmondja, hogy egy subrutin hány órajel ciklus alatt fut le?
Ez ugyan nem ciklusokban, hanem ezredmásodpercekben írja ki, de remélhetõleg használhatóKöszi! A feladatra így is teljesen jó! Arra vagyok kíváncsi, hogy egy bizonyos funkciót különbözõ módokon programozva, melyik a gyorsabb, és mennyi a különbség?
- ha 1, akkor várakozás csak M1 olvasásnál - ez az alapértelmezett mód. Az M1 olvasás a Z80 utasítások elsõ byte-ját jelenti; DDh, EDh, és FDh prefixnél a prefix utáni utasításbyte is M1 olvasásnak számítEz alapján azt vártam, hogy egy sok-sok LDI utasítást tartalmazó rutin jelentõsen lassul az OUT 191,4 hatására. De az össz rutinra nézve kb csak annyi különbség volt mint az LDIR-es változatnál, én bénáztam el valamit, vagy az LDIR is generál minden körben M1 ciklust?
Ez a script a memória várakozások hatásait is jól kell mérje?
Mert egy érdekes anomáliával találkoztam:Ez alapján azt vártam, hogy egy sok-sok LDI utasítást tartalmazó rutin jelentõsen lassul az OUT 191,4 hatására. De az össz rutinra nézve kb csak annyi különbség volt mint az LDIR-es változatnál, én bénáztam el valamit, vagy az LDIR is generál minden körben M1 ciklust?
Az idődiagrammok honnan vannak?
Kicserélném az itt (http://ep128.hu/Sp_Konyv/Z80_sorozat_1.htm) látható rosszabb minőségű képeket.
Az LDIR idõzítése azonos az LDI-vel, ha a végrehajtásával a BC értéke 0-ra csökken. Egyébként még a fent leírt 16 ciklus után van további 5 ciklus, ami gyakorlatilag relatív ugrást végez vissza az LDIR utasításra, amelyet aztán a Z80 újra beolvas a memóriából.Ez megválaszolta a következõnek szánt kérdésemet: mitõl lassul be brutálisan az LDIR, ha az utasítás kódja a videó memóriába kerül. Naivan eddig azt hittem, csak egyszer olvassa be a Z80 :oops: és így akkor megúszhatóak a várakozások.
* subrtimer.lua (http://enterpriseforever.com/dlattach.html;topic=511.0;attach=5305) (0.99 KB - downloaded 5 times.)
itt egy részletesebb leírás a Spectrum programok attribútum és I/O mûveleteit figyelõ zxiolog.lua (http://enterpriseforever.com/dlattach.html;topic=132.0;attach=3848) script mûködésérõl:
Én vagyok ügyetlen, vagy tényleg nem mûködik ez a script a zx128emu-val? :oops:Nem az lehet a gond, hogy a script direct EP128emu-ra készült, és a video memória belapozott állapotát figyeli?
A ROM-ot kijegyzeteli, de a játékot nem:
0296: IOR
03E1: IOW
0548: IOW
054C: IOR
055C: IOW
0562: IOR
05F1: IOR
0601: IOW
1F56: IOR
229B: IOW
Ennyit kapok csak.
Nem az lehet a gond, hogy a script direct EP128emu-ra készült, és a video memória belapozott állapotát figyeli?
if (getMemoryPage(1) == 0xFD or getMemoryPage(1) == 0xFE) and
getMemoryPage(SHR(getPC(), 14)) >= 0x80 then
Közben találtam egy fejlettebb verziót (biztos innen van a fórumról, de nem találom hol volt szó róla :( ) de ez se igazán akar mûködni :oops:
Ezzel pontosan mi a probléma, és milyen célra használtad ?Most mûködik :oops:
Egy portról olvasható értéket hogyan lehet megváltoztatni Luaban?
Nyomtató scriptet szeretnék, és ehhez vissza kéne adni a READY jelet a B5-ös port egyik bitjén.
Meg kell nézni utasításkód alapján, hogy melyik regiszterbe történt az olvasás, és aztán annak értékét módosítani? Vagy van egyszerûbb megoldás?
Ezt sikerült összehoznom, némi másolgatással István korábbi scriptjeibõl :oops:
Mûködik, BASIC-ben sikerült "nyomtatni" a debugger ablakba :)Ez volt az elsõnek kitûzött cél :-)
Ugyanaz fájlba mentéssel.Így most már ezt is sikerült meglesni :-)
Találós kérdés: mi ez?"Sajnos" a kínai karaktereket nem jeleníti meg a gépem. De ha meg is jelenítené, akkor se tudnám elolvasni. :ds_icon_cheesygrin:
"Sajnos" a kínai karaktereket nem jeleníti meg a gépem. De ha meg is jelenítené, akkor se tudnám elolvasni. :ds_icon_cheesygrin:hexeditorban nézd :)
hexeditorban nézd :)Így is kínai volt. Talán a EP80-as nyomtató memóriatérképébõl lehet részlet vagy ilyesmi.
Így is kínai volt. Talán a EP80-as nyomtató memóriatérképébõl lehet részlet vagy ilyesmi.Nagyon hideg, olyan mint ami most kint van :ds_icon_cheesygrin:
Na jó, akkor a megfejtés: így beszél az Eat it Up Speakeasy-n.Nekem ez magas. Akkor mit is csinált az a lua script, amit nem tudtunk megfejteni? És ez a másik mit fordít vissza mire? :oops:
Ez a script visszafordítja a használati útmutatóban (http://gafz.enterpriseforever.com/PDF/SpeakEasy.pdf) található kódokra, így nagyjából már lehet érteni.
Nekem ez magas. Akkor mit is csinált az a lua script, amit nem tudtunk megfejteni?Az lementi azt az adatot, ami a printerportra van kiküldve. Normál esetben, pl egy BASIC LLIST, ez szöveges adat. Viszont a Speakeasy is a nyomtató portra csatlakozik (ez lett volna a megfejtés kulcsa, ha nem nyomtató, akkor mit kötünk még oda?), és pontosan ugyanúgy lehet kiküldeni rá az adatokat, mint egy nyomtatóra. Így ugyanezzel a módszerrel azt is le lehet menteni, hogyan beszél az Eat it Up. A megkapott bájtokat megnézve a Speakeasy könyvében, megkapjuk a szöveget, fõleg, ha valaki ért a nyelvészethez, és tudja, hogy az egyes fonémákat, hogyan kell kiejteni :ds_icon_cheesygrin:
És ez a másik mit fordít vissza mire? :oops:Ez elvégzi a könyvbõl kikeresést, így ilyeneket kapunk eredményként:
200ms Pause
200ms Pause
/HH1/ H
/EH/ E
/LL/ L
/OW/ AU
200ms Pause
200ms Pause
/WW/ W
/EH/ E
/LL/ L
/KK3/ C
/AA/ O
/MM/ M
100ms Pause
/TT2/ T
/UW1/ O
200ms Pause
/IY/ E
/TT1/ T
30ms Pause
50ms Pause
/IH/ I
/TT1/ T
100ms Pause
/AA/ O
/PP/ P
10ms Pause
200ms Pause
/GG2/ G
/EH/ E
30ms Pause
/TT1/ T
100ms Pause
/RR1/ R
/EH/ E
30ms Pause
/DD1/ LD
/IY/ E
200ms Pause
/PP/ P
/LL/ L
/EY/ EI
/ER1/ IR
200ms Pause
/WW/ W
/AO/ AU
/NN1/ N
30ms Pause
200ms Pause
200ms Pause
/HH1/ H
/IH/ I
/TT1/ T
200ms Pause
/FF/ F
/AY/ Y
/ER2/ERR
200ms Pause
/SS/ S
/TT1/ T
/AR/ A
/TT1/ T
100ms Pause
50ms Pause
/IY/ E
/TT1/ T
10ms Pause
Ez elvégzi a könyvbõl kikeresést, így ilyeneket kapunk eredményként:A gyakorlatban hogyan végzi? Futnia kell az Eat It Up játéknak és amikor "duma" van, akkor akciózik a script?
A gyakorlatban hogyan végzi? Futnia kell az Eat It Up játéknak és amikor "duma" van, akkor akciózik a script?Így van, aztán ha benézel a debugger ablakba, ott az eredmény. (Mint a nem fájlba nyomtató printer scriptnél is)
Használata: debuggerben betölteni a scriptet, RUN, majd Continue.Nem próbáltam, de gondolom, a program maga lefagy, mert a Speakeasy mûködése nincs emulálva. De attól még a nyomtatóra küldött adatokat érzékelheti a script.
Nem próbáltam, de gondolom, a program maga lefagy, mert a Speakeasy mûködése nincs emulálva.Nem fagy le, mivel emulálva van, csak hangunk nincs. De amit a gép érzékel belõle (ez gyakorlatilag a Ready jelet jelenti a printerporton) az meg van. (Egyébként valódi gépen valódi nyomtatóra is lehetne speakeasy-zni, ugyanúgy krixkraxok jönnének a papírra, mint abban a text fájlban :-) ha hexdump módba van kapcsolva a nyomtató, akkor láthatóak lennének a kódbájtok.)
printer-file.lua (1.78 kB - letöltve 8634 alkalommal.)Ez hova menti a fájlt, hol jelenik meg?
Ez hova menti a fájlt, hol jelenik meg?Az emulátor könyvtárába.
Az emulátor könyvtárába.Nem rossz!
Apropó, honnan lehet tudni a fájlok sorrendjét. Csak azért kérdezem, mert a kazettákon tartott játékok ezt az információt is hordozzák (mármint a felvételek sorrendjét) ami a RAR fájlokból már hiányzik.Itt van egy LUA script erre a célra. (István example-jéből módosítva.)
Egy olyan lua script érdekelne, ami megmondja, hogy egy adott címen hányszor van a PC 1 mp alatt...
köszi, működik!
a szép kerek 889846 érték hogy jött ki?
Az hogyan oldható meg, hogy a CPU át legyen verve, és az adott bájtot olvassa, nem amit amúgy olvasna a memóriából?
Ez nem tudom, megoldható-e emulátor módosítás nélkül. :oops:És bonyolult módosítás kéne? Talán csak annyi kéne, hogy legyen olyan memória írás a LUA-ban, ami ROM-ba is tud írni. (És akkor lapozásnál be lehet írni az új tartalmat.)
Viszont a játékok saját karakterkészletét csak kódvisszafejtéssel lehet megtalálni.Akkor azt nem lehet úgy kinyerni, hogy amikor megy a játék, elindítani egy LUA scriptet, és úgy elmenteni a karaktermátrixot?
Akkor azt nem lehet úgy kinyerni, hogy amikor megy a játék, elindítani egy LUA scriptet, és úgy elmenteni a karaktermátrixot?Az a probléma, hogy nem lehet tudni hol van az a karaktermátrix. EXOS alatt lehet tudni. Ha az LPT-ben használ karakteres módot a program, azt ki lehet onnan szedni.
Az a problémaArra gondoltam, hogy mint amikor basic programban átírunk karaktereket a set character utasítással, utána akár töröljük is a programot, és a karakterek megmaradnak. És utána magukat a karakterek alakjait mentjük el. (Azok mindig ugyanott vannak, de azt hiszem, EP 64-en valahol máshol vannak.) Tehát a karakterkészletet. Ezt sem lehet gépi kódú programoknál? Azok nem azt a karakterkészletet írják át?
Azok nem azt a karakterkészletet írják át?A gépi kódú programok szempontjából nincs olyan, hogy a karakterkészlet. A program szükségleteitől függően akár több karakterkészlet, akár elvetemülten összekevert formában is tárolódhat, tetszőleges helyen a videó RAM-ban. Amit csak a program elemzésével lehet kideríteni, hol van a NICK memóriájában.
A gépi kódú programok szempontjából nincs olyan, hogy a karakterkészlet. A program szükségleteitől függően akár több karakterkészlet, akár elvetemülten összekevert formában is tárolódhat, tetszőleges helyen a videó RAM-ban. Amit csak a program elemzésével lehet kideríteni, hol van a NICK memóriájában.Itt a a lényeg, hogy nagy valószínűséggel nincs is a videó memóriában!
Az hittem karakteres képernyőmódok vonatkozásában merült fel a kérdés.Igen, ezt próbálom Szipucsunak elmagyarázni, hogy attól, hogy egy játéknak van karakterkészlete, attól az még a megjelenítés szempontjából nem karakteres. A Nick karakteres üzemmódját elég kevés játék használja, A Spectrum meg CPC átiratok egész biztosan nem, mivel azokon a gépeken nincs is ilyen. (A rokon TVC-n sincs.)
A Nick karakteres üzemmódját elég kevés játék használjaMit értesz karakteres üzemmód alatt? Ezek szerint nem arra gondolsz, amikor a set video mode utasításnál nem grafikus, hanem karakteres videolapot készítünk elő. De lehet grafikus videolapra is írni karaktereket, csak azok nem karakterként lesznek ott, a clear font nem állítja vissza az alakjukat ott.
Úgy emléxem, be is lehet tölteni, de gyanúsan az lassabb, mint a copy-paste :DIgen, azt alt+W-vel szoktam. De azt csak load-dal szabad, mert start-ra elromolhat a program. Gond akkor van, ha txt és bas kiterjesztéssel is megvan a program, és nem tudom már, melyik a jobb, a szerkesztés dátuma néha segít. Txt fájlban rá lehet keresni szövegekre és gyorsabban lehet görgetni, ennyi előnye lehet.
Tippem szerint igen, LUA Scripttel BMP-be mondjuk.Csak azért jutott eszembe, mert a Dots and Gems játék pályáiról lehetne egybefüggő térképeket csinálni. Manuálisan kicsit macerás, meg nem is tudom, rászánjam-e ilyenre az időt. A 2. rész egyik pályáján kb. a 120 karakter magas pályát függőlegesen kitölti az Enterprise felirat, arra lennék főleg kíváncsi, hogyan mutat egyben.