Widze, ze zainteresowanie jest duze, ale nikt jeszcze nic nie napisal. Wiec opisze troche dokladniej, o co mi chodzi.
Poniewaz nie znam poprawnych wartosci wektorow przerwan, postanowilem, ze sie tego dowiem i zaczalem analizowac kod procedury dekompresujacej.
I nie rozumiem paru rzeczy. Najpierw przedstawie kod:
0810 SEI
0811 LDX #$FF
0813 TXS
0814 LDY#$00
0816 STY$01
0818 LDX#$CC
081A LDA$0857,X
081D STA$0333,X
0820 LDA $091D,Y
0823 STA$00FF,Y
0826 DEX
0827 BNE$082B
0829 LDX#$01
082B DEY
082C BNE$081A
082E DEC$2E
0830 LDA$2E
0832 CMP#$08
0834 BEQ$0843
0836 DEC$083D
0839 LDA($2D),Y
083B STA$FFFF,Y
083E DEY
083F BNE$0839
0841 BEQ$082E
Jest to poczatek kodu procedury dekompresujacej z wyzej wymienionej gry. Nie ma tam zadnego intra, po dekompresji gra sie uruchamia.
Z tego co sie zdazylem zorientowac, na poczatku znajduje sie prosta petla relokujaca dane.
I teraz mam pytania:
Po pierwsze: po co jest rozkaz DEY komorce $082B? Przeciez do Y zaladowane zostalo 0, wiec co on ma odejmowac?!
Po drugie: jak wiadomo, najwyzszym adresem w C-64 jest FFFF. Gdzie wiec zostana zaladowane dane z petli w komorkach 0839-083f. Przeskocza do $0000???
A poza tym, wydaje mi sie, ze to wlasnie w tym miejscu ustawia sie te nieszczesne wektory przerwan.
Przepraszam za ewentualny brak rozeznania w temacie, ale asemblerem C-64 zaczalem sie bawic niedawno i nie wszystko jest dla mnie jasne.