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:
parent
20a6655c0f
commit
45f32cc5db
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user