Credits#
In de vorige workshop hebben we gezien dat de credits op geheugenadres 2b1 staan. Ga naar search→program text en zoek alle verwijzingen naar 2b1 in de listing.
In de zoekresultaten zelf zien we referenties naar 02b1 zelf, die negeren we. De overigen zijn intererssant.
Volg de JSR naar 5e77 en probeer te begrijpen wat daar aan de hand is.
Drie maal hetzelfde aanroepen en opslaan in DAT_0001 tot en met DAT_0003.
Volg de 5e84.
De code kun je vertalen naar pseudo code:
A=(X)
A>>4
A=<9? Anders A=0
X=X+1
B=(X)
B=<90? Anders B=0
A=A+B
return
(In de volatile ram worden alleen de hoge 4 bits gebruikt)
Deze functie lijkt dus de BCD waarde te lezen voor 2 adressen. Laten we de functie een handigere naam geven. Ik vind het persoonlijk handig om het adres in de funtie te laten staan.
Als je het echt goed wilt aanpakken kun je de functie ook voorzien van parameters en return waarden.
50ec, FUN_get_3xBCD2_to_DAT_3_2_1_5e77(0x2b1) een zet DAT_0003 in A. Voorlopig hernoem ik de FUN_50ec naar FUN_getCredits_50ec Hier is ook de referentie interessant, wie roept dit aan? De credits waarde wordt getest of het niet nul is. De referentie 5122(*) is een tabel. (switches?)
De labels zijn voor ieder bekend stukje aangemaakt en ieder adres wat bekend is krijgt een label en een datatype. Zo krijg je uiteindelijk een leesbare listing van de code.