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?