Welcome, Guest. Please login or register.


Author Topic: ep128emu debugger probléma (Read 16660 times)

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14776
  • Country: hu
    • http://enterprise.iko.hu/
ep128emu debugger probléma
« 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?

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: ep128emu debugger probléma
« 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.

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14776
  • Country: hu
    • http://enterprise.iko.hu/
Re: ep128emu debugger probléma
« 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 :-)

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14776
  • Country: hu
    • http://enterprise.iko.hu/
Re: ep128emu debugger probléma
« Reply #3 on: 2009.April.21. 16:01:52 »
Úgy tünik most tényleg találtam egy debugger bugot  :oops:

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.



Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: ep128emu debugger probléma
« 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. :) 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.

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14776
  • Country: hu
    • http://enterprise.iko.hu/
Re: ep128emu debugger probléma
« Reply #5 on: 2009.April.21. 16:43:37 »
Az ED5B címre a Step over állítja be a töréspontot. :)
Csak a szegmensszámot felejti el hozzátenni :-)