Förnöjsam pappa: Värden på stacken till subrutin (21 november, 2022)

Måndagen den 21 november, 2022

Nu handlar det om programmering på Ataris dator med 6502-processor.

Den här veckan har jag funderat på hur jag kan lägga värden på stacken, för att sedan använda dem i en subrutin.

*= 8192
;
; MAIN
;
MAIN
...
; DRAW LINE TO X=159, Y=191
LDA #159
PHA
LDA #191
PHA
JSR DRAWTO
...
; END OF MAIN PROGRAM
RTS
;
; DRAWTO
;
DRAWTO
JMP _DRAWTO
_DRAWTO.RTS
.BYTE 0,0
_DRAWTO
; PULL RETURN ADDRESS FROM STACK
PLA
STA _DRAWTO.RTS+0
PLA
STA _DRAWTO.RTS+1
; PULL Y FROM STACK, COPY TO REG Y
PLA
TAY
; PULL X FROM STACK, COPY TO REG X
PLA
TAX
...
; PUSH RETURN ADDRESS BACK TO STACK
LDA _DRAWTO.RTS+0
PHA
LDA _DRAWTO.RTS+1
PHA
; RETURN FROM SUBROUTINE
RTS

Men jag kan inte komma på något elegant sätt att läsa ut dem inuti subrutinen. Jag behöver göra PLA två gånger för att plocka ut parametrarna från stacken. Om jag använder PLA, får jag först ut återhoppsadressen som JSR lagt på stacken. I exemplet lagrar jag återhoppsadressen i primärminnet, för att sedan lägga tillbaka den.

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com-logga

Du kommenterar med ditt WordPress.com-konto. Logga ut /  Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut /  Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut /  Ändra )

Ansluter till %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.