Enterprise Forever  |  :HUN  |  Emulátorok  |  EP128Emu  |  Topic: ep128emu debugger probléma
Author Topic: ep128emu debugger probléma  (Read 2528 times)« previous next »
Zozosoft
EP addict
*
Online Online

Hungary

Posts: 5611


OS:
Windows XP
Browser:
Firefox 3.0.1


View Profile WWW
New Posts
« on: 2008.August.17. 02:18:24 »

A most fölkerült Chickin Chase során belefutottam egy eléggé X-aktás esetbe, ami vagy 1 napi fejtörést okozott...
Konkrétan arról van szó, hogy a "zenei effektek" hol működtek, hol meg nem...
De nem teljesen volt kuka a program, mert más hangok meg szóltak.
Mint késöbb kiderült, ezeket a zenéket megszakítási rutinból játssza le, a lejátszást pedig többek között a 8457H címen lévő változó engedélyezi. És ebbe a változóba kerül rossz érték.
Hogy mikor és hol, az az ep128emu debuggerével próbáltam megkeresni...
...mígnem rájöttem, hogy akkor jó a program, ha használom a debuggert, ha nem, akkor hibás...
Na itt kezdtem el keresni Mulder ügynök telefonszámát

Egész konkrétan: ha még a főmenü megjelenése előtt megállítjuk a programot egy törésponttal, és ott nyomunk egy continue-t, akkor jó lesz.
Alapvetően a program hibája szerintem abból jön, hogy a megszakítások nem pont ugyanúgy időzítve jönnek mint Spectrumon (megszakítási rutinban variálja a változókat). Hogy pontosan hol romlik el a dolog, azt nem tudtam kideríteni, mivel a debugger használata esetén jól működik a program

Azt tippelem, hogy a töréspontnál való megállás/folytatás esetén valami időzítés elcsúszik, ezért működik másként a program.

Illusztrációként itt egy snapshot is:
Ha csak simán elindítjuk a programot az örökéletre vonatkozó kérdésre való válaszolással, akkor hibás lesz, hiányozni fognak a zenék. Ha indulás után (a főmenü alatt) egyből bele nézünk a memóriába, a 8457H címen FFH lesz.
Ha indulás elött beállítunk egy töréspontot, pl 5DC0H (ez a program belépési címe), majd amikor megáll a program nyomunk egy continue-t, akkor jó lesz a program. Ha ekkor nézzük meg a 8457H-t, akkor 03H az értéke.

Végül úgy hídaltam át a problémát, hogy a főmenü elejére belehackeltem, hogy írjon 03-t a 8457H-ra, így a játék működik, csak izgat a kérdés, hogy miért fut másként debugger használatával mint simán?

* chickin.zip (86.54 KB - downloaded 124 times.)
Logged


Enterprise Forever
« on: 2008.August.17. 02:18:24 »

 Logged

IstvanV
EP addict
*
Offline Offline

Posts: 2104

OS:
Linux (Suse)
Browser:
Firefox 2.0.0.6


View Profile
New Posts
« Reply #1 on: 2008.August.17. 13:07:39 »

Ha az örökélet kérdésre 'N' a válasz, akkor azt a billentyűt a program indításkor a zene kikapcsolásának értelmezi (a zene bekapcsolása pedig az 'M' billentyű). Tehát örökélet esetén ('Y') mindig lesz zene. Ha töréspont van beállítva a program elejére, akkor természetesen az 'N' billentyű már nem lesz lenyomva a debugger ablak bezárásakor, és így a zene is bekapcsolva marad. Érdekes módon egyébkent az M/N billentyűk később már nem működnek a menüben, viszont a játékban igen.
Logged

Zozosoft
EP addict
*
Online Online

Hungary

Posts: 5611


OS:
Java Platform Micro Edition
Browser:
Opera 9.50 (Opera Mini 4.1.11355)


View Profile WWW
New Posts
« Reply #2 on: 2008.August.17. 19:39:49 »

Na ez jól megszivatott!
Akkor berakok még egy Music on? kérdést is
Logged


Zozosoft
EP addict
*
Online Online

Hungary

Posts: 5611


OS:
Windows XP
Browser:
Firefox 3.0.8


View Profile WWW
New Posts
« Reply #3 on: 2009.April.21. 16:01:52 »

Úgy tünik most tényleg találtam egy debugger bugot  ds_icon_redface

Előcsalogatás: EXDOS 1.3 ROM-ban állítsuk a töréspontot 20:2d41-re (az EXDOS ROM ED41H címe).
Adjunk ki egy DIR-t vagy más DOS parancsot, az utasítás végrehajtása után áll meg a törésponton.
Elkezdjük debuggolni a rutint, mivel van benne pár CALL ami nem érdekes, a STEP OVER gombot nyomogatva.
Az ED59-es címen van egy JR NZ, amikor erre STEP OVER-t nyomunk, akkor kilép a debuggerből! (Talán azt hiszi, hogy ez is CALL?)
Visszatér a BASIC-ben az EDITOR-hoz. Ha megnyomunk egy gombot, akkor pedig megáll a 0-ás szegmensben ED5B címen, pedig ide nem kértünk töréspontot.


Logged


IstvanV
EP addict
*
Offline Offline

Posts: 2104

OS:
Linux (Suse)
Browser:
Konqueror 3.5.9


View Profile
New Posts
« Reply #4 on: 2009.April.21. 16:19:12 »

Elkezdjük debuggolni a rutint, mivel van benne pár CALL ami nem érdekes, a STEP OVER gombot nyomogatva.
Az ED59-es címen van egy JR NZ, amikor erre STEP OVER-t nyomunk, akkor kilép a debuggerből! (Talán azt hiszi, hogy ez is CALL?)
A Step over/Step into valóban működik a feltételes JR és JP utasításokon is, mert azok gyakran fordulnak elő ciklusokban. Tehát ha egy ciklusból való kilépés a JR vagy JP utasítás feltételétől függ, akkor a megfelelő gombbal át lehet ugrani a ciklust.
Quote
Visszatér a BASIC-ben az EDITOR-hoz. Ha megnyomunk egy gombot, akkor pedig megáll a 0-ás szegmensben ED5B címen, pedig ide nem kértünk töréspontot.
Az ED5B címre a Step over állítja be a töréspontot. Smiley A Step over, Step into, Return, és Step to csak 16 bites (Z80) címekkel működik, és az első három gyakorlatilag a Step to funkcióra épül (tehát beállítanak egy töréspontot a következő utasításra, a feltételes ugró utasítás céljára, vagy a verem tetején található címre; a többi töréspontot figyelmen kívül hagyják, amíg a debugger újra meg nem jelenik). Ez nem igazán bug, hanem inkább korlátozás.
Logged

Zozosoft
EP addict
*
Online Online

Hungary

Posts: 5611


OS:
Windows XP
Browser:
Firefox 3.0.8


View Profile WWW
New Posts
« Reply #5 on: 2009.April.21. 16:43:37 »

Az ED5B címre a Step over állítja be a töréspontot. Smiley
Csak a szegmensszámot felejti el hozzátenni
Logged

Tags:
Enterprise Forever  |  :HUN  |  Emulátorok  |  EP128Emu  |  Topic: ep128emu debugger probléma

Powered by SMF 1.1.2 | SMF © 2006-2007, Simple Machines LLC
Seo4Smf v0.2 © Webmaster's Talks

Template made by Mr.Prise
Page created in 0.109 seconds with 25 queries.
Google visited last this page 2012.May.17. 01:47:27
Follow ep4ever_news on Twitter