1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2025-02-22 00:29:01 +00:00

Clean up stack<->zp copy

This commit is contained in:
David Schmenk 2020-06-30 11:50:01 -07:00
parent 20a6655c0f
commit 45f32cc5db

View File

@ -92,6 +92,54 @@ NOS = $03 ; TOS-1
REP #$10 ; 16 BIT X/Y REP #$10 ; 16 BIT X/Y
!AL !AL
} }
;*
;* HW STACK <-> ZP STACK COPIES
;*
!MACRO STACKTOZP {
+ACCMEM8 ; 8 BIT A/M
TSC ; MOVE HW EVAL STACK TO ZP EVAL STACK
EOR #$FF
SEC
ADC HWSP ; STACK DEPTH = (HWSP - SP)/2
LSR
!IF DEBUG {
PHA
CLC
ADC #$80+'0'
STA $7D0+31
PLA
}
EOR #$FF
SEC
ADC ESP ; ESP - STACK DEPTH
TAY
TAX
CPX ESP
BEQ +
- PLA
STA ESTKL,Y
PLA
STA ESTKH,Y
INY
CPY ESP
BNE -
+
}
!MACRO ZPTOSTACK {
TSX ; RESTORE BASELINE HWSP
STX HWSP
CPY TMPL
BEQ +
TYX
- DEX
LDA ESTKH,X
PHA
LDA ESTKL,X
PHA
CPX TMPL
BNE -
+
}
;****************************** ;******************************
;* * ;* *
;* INTERPRETER INITIALIZATION * ;* INTERPRETER INITIALIZATION *
@ -1594,14 +1642,12 @@ ICAL PLA
CALL INY ;+INC_IP CALL INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
INY INY
EMUSTK STA TMP EMUSTK STA TMP ; CALL THROUGH JMPTMP LATER
TYA ; FLATTEN IP TYA ; FLATTEN IP
SEC SEC
ADC IP ADC IP
STA IP STA IP
SEC ; SWITCH TO EMULATED MODE +ACCMEM8 ; 8 BIT A/M
XCE
!AS
TSC ; MOVE HW EVAL STACK TO ZP EVAL STACK TSC ; MOVE HW EVAL STACK TO ZP EVAL STACK
EOR #$FF EOR #$FF
SEC SEC
@ -1622,11 +1668,11 @@ EMUSTK STA TMP
CPX ESP CPX ESP
BEQ + BEQ +
- PLA - PLA
STA ESTKL,X STA ESTKL,Y
PLA PLA
STA ESTKH,X STA ESTKH,Y
INX INY
CPX ESP CPY ESP
BNE - BNE -
+ +
!IF DEBUG { !IF DEBUG {
@ -1642,16 +1688,17 @@ EMUSTK STA TMP
+ TAX + TAX
} }
PEI (IP) ; SAVE INSTRUCTION POINTER PEI (IP) ; SAVE INSTRUCTION POINTER
PHX ; SAVE BASELINE ESP PHY ; SAVE BASELINE ESP
TYX
LDA PSR LDA PSR
PHA PHA
PLP PLP ; CALL IN EMULATION MODE
JSR JMPTMP JSR JMPTMP
PHP PHP
PLA PLA
STA PSR STA PSR
SEI SEI
CLC ; SWITCH BACK TO NATIVE MODE
XCE
PLY ; MOVE RETURN VALUES TO HW EVAL STACK PLY ; MOVE RETURN VALUES TO HW EVAL STACK
STY ESP ; RESTORE BASELINE ESP STY ESP ; RESTORE BASELINE ESP
PLA PLA
@ -1680,10 +1727,7 @@ EMUSTK STA TMP
PHA PHA
CPX TMPL CPX TMPL
BNE - BNE -
+ CLC ; SWITCH BACK TO NATIVE MODE + LDX #>OPTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE
XCE
+ACCMEM16 ; 16 BIT A/M
LDX #>OPTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE
!IF DEBUG { !IF DEBUG {
LDY LCRWEN+LCBNK2 LDY LCRWEN+LCBNK2
LDY LCRWEN+LCBNK2 LDY LCRWEN+LCBNK2
@ -1693,6 +1737,7 @@ EMUSTK STA TMP
} }
STX OPPAGE STX OPPAGE
LDY #$00 LDY #$00
+ACCMEM16 ; 16 BIT A/M
JMP FETCHOP JMP FETCHOP
;* ;*
;* INDIRECT CALL TO ADDRESS (NATIVE CODE) ;* INDIRECT CALL TO ADDRESS (NATIVE CODE)
@ -1705,14 +1750,12 @@ ICALX PLA
CALLX INY ;+INC_IP CALLX INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
INY INY
EMUSTKX STA TMP EMUSTKX STA TMP ; CALL THROUGH JMPTMP LATER
TYA ; FLATTEN IP TYA ; FLATTEN IP
SEC SEC
ADC IP ADC IP
STA IP STA IP
SEC ; SWITCH TO EMULATION MODE +ACCMEM8 ; 8 BIT A/M
XCE
!AS
TSC ; MOVE HW EVAL STACK TO ZP EVAL STACK TSC ; MOVE HW EVAL STACK TO ZP EVAL STACK
EOR #$FF EOR #$FF
SEC SEC
@ -1733,11 +1776,11 @@ EMUSTKX STA TMP
CPX ESP CPX ESP
BEQ + BEQ +
- PLA - PLA
STA ESTKL,X STA ESTKL,Y
PLA PLA
STA ESTKH,X STA ESTKH,Y
INX INY
CPX ESP CPY ESP
BNE - BNE -
+ +
!IF DEBUG { !IF DEBUG {
@ -1753,18 +1796,19 @@ EMUSTKX STA TMP
+ TAX + TAX
} }
PEI (IP) ; SAVE INSTRUCTION POINTER PEI (IP) ; SAVE INSTRUCTION POINTER
PHX ; SAVE BASELINE ESP PHY ; SAVE BASELINE ESP
TYX
STX ALTRDOFF STX ALTRDOFF
LDA PSR LDA PSR
PHA PHA
PLP PLP ; CALL IN EMULATION MODE
JSR JMPTMP JSR JMPTMP
PHP PHP
PLA PLA
STA PSR STA PSR
SEI SEI
STX ALTRDON STX ALTRDON
CLC ; SWITCH BACK TO NATIVE MODE
XCE
PLY ; MOVE RETURN VALUES TO HW EVAL STACK PLY ; MOVE RETURN VALUES TO HW EVAL STACK
STY ESP ; RESTORE BASELINE ESP STY ESP ; RESTORE BASELINE ESP
PLA PLA
@ -1793,10 +1837,7 @@ EMUSTKX STA TMP
PHA PHA
CPX TMPL CPX TMPL
BNE - BNE -
+ CLC ; SWITCH BACK TO NATIVE MODE + LDX #>OPXTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE
XCE
+ACCMEM16 ; 16 BIT A/M
LDX #>OPXTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE
!IF DEBUG { !IF DEBUG {
LDY LCRWEN+LCBNK2 LDY LCRWEN+LCBNK2
LDY LCRWEN+LCBNK2 LDY LCRWEN+LCBNK2
@ -1806,6 +1847,7 @@ EMUSTKX STA TMP
} }
STX OPPAGE STX OPPAGE
LDY #$00 LDY #$00
+ACCMEM16 ; 16 BIT A/M
JMP FETCHOP JMP FETCHOP
;* ;*
;* JUMP INDIRECT THROUGH TMP ;* JUMP INDIRECT THROUGH TMP
@ -1885,13 +1927,14 @@ LEAVEX INY ;+INC_IP
BEQ ++ BEQ ++
TAY TAY
- PLA - PLA
STA ESTKL,X STA ESTKL,Y
PLA PLA
STA ESTKH,X STA ESTKH,Y
INX INY
CPX ESP CPY ESP
BNE - BNE -
!IF DEBUG { !IF DEBUG {
PHX
TSX TSX
CPX HWSP CPX HWSP
BEQ + BEQ +
@ -1900,9 +1943,8 @@ LEAVEX INY ;+INC_IP
- LDX $C000 - LDX $C000
BPL - BPL -
LDX $C010 LDX $C010
+ + PLX
} }
TYX ; RESTORE NEW ESP
++ +ACCMEM16 ; 16 BIT A/M ++ +ACCMEM16 ; 16 BIT A/M
LDY TMPL ; DEALLOCATE POOL + FRAME LDY TMPL ; DEALLOCATE POOL + FRAME
TYA TYA
@ -1911,19 +1953,12 @@ LEAVEX INY ;+INC_IP
STA PP STA PP
PLA ; RESTORE PREVIOUS FRAME PLA ; RESTORE PREVIOUS FRAME
STA IFP STA IFP
SEC ; SWITCH TO EMULATION MODE LDY PSR
XCE PHY
!AS PLP ; RETURN IN EMULATION MODE
LDA PSR
PHA
PLP
RTS RTS
!AL
RETX STX ALTRDOFF RETX STX ALTRDOFF
RET SEC ; SWITCH TO EMULATION MODE RET +ACCMEM8 ; 8 BIT A/M
XCE
!AS
;+ACCMEM8 ; 8 BIT A/M
TSC ; MOVE HW EVAL STACK TO ZP EVAL STACK TSC ; MOVE HW EVAL STACK TO ZP EVAL STACK
EOR #$FF EOR #$FF
SEC SEC
@ -1944,13 +1979,14 @@ RET SEC ; SWITCH TO EMULATION MODE
BEQ ++ BEQ ++
TAY TAY
- PLA - PLA
STA ESTKL,X STA ESTKL,Y
PLA PLA
STA ESTKH,X STA ESTKH,Y
INX INY
CPX ESP CPY ESP
BNE - BNE -
!IF DEBUG { !IF DEBUG {
PHX
TSX TSX
CPX HWSP CPX HWSP
BEQ + BEQ +
@ -1959,16 +1995,16 @@ RET SEC ; SWITCH TO EMULATION MODE
- LDX $C000 - LDX $C000
BPL - BPL -
LDX $C010 LDX $C010
+ + PLX
} }
TYX
++ LDA PSR ++ LDA PSR
PHA PHA
PLP PLP ; RETURN IN EMULATION MODE
RTS RTS
;* ;*
;* RETURN TO NATIVE CODE ;* RETURN TO NATIVE CODE
;* ;*
!AL
NATV TYA ; FLATTEN IP NATV TYA ; FLATTEN IP
SEC SEC
ADC IP ADC IP