Programowanie: Odczyt sygnatury rozkazu BRK lub COP na 65C816
From Atariki
(Różnice między wersjami)
Wersja z dnia 20:18, 6 wrz 2017 KMK (Dyskusja | wkład) ← Previous diff |
Aktualna wersja KMK (Dyskusja | wkład) |
||
Linia 4: | Linia 4: | ||
rep #$10 ;X/Y 16-bit | rep #$10 ;X/Y 16-bit | ||
sep #$20 ;A 8-bit | sep #$20 ;A 8-bit | ||
+ | .iw | ||
+ | .ab | ||
phb ;zachowaj bieżący DBR | phb ;zachowaj bieżący DBR | ||
lda 5,s ;pobierz najstarszy bajt 24-bitowego PC ze stosu | lda 5,s ;pobierz najstarszy bajt 24-bitowego PC ze stosu | ||
Linia 9: | Linia 11: | ||
pha ;odłóż na stos | pha ;odłóż na stos | ||
plb ;pobierz tę wartość do DBR | plb ;pobierz tę wartość do DBR | ||
- | ldy #0xffff ;adresowanie z przekroczeniem granicy segmentu 64k | + | ldy #$ffff ;adresowanie z przekroczeniem granicy segmentu 64k |
lda (3,s),y ;pobierz sygnaturę do akumulatora | lda (3,s),y ;pobierz sygnaturę do akumulatora | ||
plb ;przywróć DBR | plb ;przywróć DBR |
Aktualna wersja
Procedura obsługi przerwania BRK lub COP odczytuje tzw. sygnaturę rozkazu - czyli drugi bajt kodu operacyjnego, stanowiący parametr rozkazu. Rozwiązanie dla trybu natywnego 65C816 zaproponował Andy Werner.
rep #$10 ;X/Y 16-bit sep #$20 ;A 8-bit .iw .ab phb ;zachowaj bieżący DBR lda 5,s ;pobierz najstarszy bajt 24-bitowego PC ze stosu dec ;zmniejsz o 1 pha ;odłóż na stos plb ;pobierz tę wartość do DBR ldy #$ffff ;adresowanie z przekroczeniem granicy segmentu 64k lda (3,s),y ;pobierz sygnaturę do akumulatora plb ;przywróć DBR ... ;tu dalsza część kodu