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

Clean-up around call/return

This commit is contained in:
Dave Schmenk 2020-06-30 15:16:21 -07:00
parent 337c6557e2
commit 21f926a763

View File

@ -92,44 +92,6 @@ NOS = $03 ; TOS-1
REP #$10 ; 16 BIT X/Y
!AL
}
;*
;* HW STACK <-> ZP STACK COPIES
;*
!MACRO STACKTOZP {
+ACCMEM8 ; 8 BIT A/M
TSC ; MOVE HW EVAL STACK TO ZP EVAL STACK
SEC
SBC HWSP ; STACK DEPTH = (HWSP - SP)/2
LSR ; CARRY BETTER BE CLEAR AFTER THIS
ADC ESP ; ESP - STACK DEPTH
TAX
CPX ESP
BEQ +
TAY
- 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 *
@ -1632,26 +1594,19 @@ ICAL PLA
CALL INY ;+INC_IP
LDA (IP),Y
INY
EMUSTK STA TMP ; CALL THROUGH JMPTMP LATER
EMUSTK STA TMP
TYA ; FLATTEN IP
SEC
ADC IP
STA IP
+ACCMEM8 ; 8 BIT A/M
SEC ; SWITCH TO EMULATION MODE
XCE
!AS
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
SBC HWSP ; STACK DEPTH = (HWSP - SP)/2
CMP #$80
ROR
ADC ESP ; ESP - STACK DEPTH
TAX
TAY
@ -1664,24 +1619,11 @@ EMUSTK STA TMP ; CALL THROUGH JMPTMP LATER
INY
CPY ESP
BNE -
+
!IF DEBUG {
TXA
TSX
CPX HWSP
BEQ +
LDX #$80+'C'
STX $7D0+30
- LDX $C000
BPL -
LDX $C010
+ TAX
}
PEI (IP) ; SAVE INSTRUCTION POINTER
+ PEI (IP) ; SAVE INSTRUCTION POINTER
PHY ; SAVE BASELINE ESP
LDA PSR
PHA
PLP ; CALL IN EMULATION MODE
PLP
JSR JMPTMP
PHP
PLA
@ -1689,44 +1631,26 @@ EMUSTK STA TMP ; CALL THROUGH JMPTMP LATER
SEI
CLC ; SWITCH BACK TO NATIVE MODE
XCE
+ACCMEM16 ; 16 BIT A/M
PLY ; MOVE RETURN VALUES TO HW EVAL STACK
STY ESP ; RESTORE BASELINE ESP
PLA
STA IPL
PLA
STA IPH
!IF DEBUG {
TXA
EOR #$FF
SEC
ADC ESP
CLC
ADC #$80+'0'
STA $7D0+32
}
STA IP
STX TMPL
TSX ; RESTORE BASELINE HWSP
STX HWSP
CPY TMPL
BEQ +
- DEY
LDA ESTKH,Y
PHA
LDA ESTKL,Y
PHA
LDX ESTKH,Y
PHX
LDX ESTKL,Y
PHX
CPY TMPL
BNE -
+ LDX #>OPTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE
!IF DEBUG {
LDY LCRWEN+LCBNK2
LDY LCRWEN+LCBNK2
STX DBG_OP+2
LDY LCRDEN+LCBNK2
LDX #>DBGTBL
}
STX OPPAGE
LDY #$00
+ACCMEM16 ; 16 BIT A/M
JMP FETCHOP
;*
;* INDIRECT CALL TO ADDRESS (NATIVE CODE)
@ -1739,26 +1663,19 @@ ICALX PLA
CALLX INY ;+INC_IP
LDA (IP),Y
INY
EMUSTKX STA TMP ; CALL THROUGH JMPTMP LATER
EMUSTKX STA TMP
TYA ; FLATTEN IP
SEC
ADC IP
STA IP
+ACCMEM8 ; 8 BIT A/M
SEC ; SWITCH TO EMULATION MODE
XCE
!AS
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
SBC HWSP ; STACK DEPTH = (HWSP - SP)/2
CMP #$80
ROR
ADC ESP ; ESP - STACK DEPTH
TAX
TAY
@ -1771,25 +1688,12 @@ EMUSTKX STA TMP ; CALL THROUGH JMPTMP LATER
INY
CPY ESP
BNE -
+
!IF DEBUG {
TXA
TSX
CPX HWSP
BEQ +
LDX #$80+'X'
STX $7D0+30
- LDX $C000
BPL -
LDX $C010
+ TAX
}
PEI (IP) ; SAVE INSTRUCTION POINTER
+ PEI (IP) ; SAVE INSTRUCTION POINTER
PHY ; SAVE BASELINE ESP
STX ALTRDOFF
STA ALTRDOFF
LDA PSR
PHA
PLP ; CALL IN EMULATION MODE
PLP
JSR JMPTMP
PHP
PLA
@ -1798,50 +1702,28 @@ EMUSTKX STA TMP ; CALL THROUGH JMPTMP LATER
STX ALTRDON
CLC ; SWITCH BACK TO NATIVE MODE
XCE
+ACCMEM16 ; 16 BIT A/M
PLY ; MOVE RETURN VALUES TO HW EVAL STACK
STY ESP ; RESTORE BASELINE ESP
PLA
STA IPL
PLA
STA IPH
!IF DEBUG {
TXA
EOR #$FF
SEC
ADC ESP
CLC
ADC #$80+'0'
STA $7D0+32
}
STA IP
STX TMPL
TSX ; RESTORE BASELINE HWSP
STX HWSP
CPY TMPL
BEQ +
- DEY
LDA ESTKH,Y
PHA
LDA ESTKL,Y
PHA
LDX ESTKH,Y
PHX
LDX ESTKL,Y
PHX
CPY TMPL
BNE -
+ LDX #>OPXTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE
!IF DEBUG {
LDY LCRWEN+LCBNK2
LDY LCRWEN+LCBNK2
STX DBG_OP+2
LDY LCRDEN+LCBNK2
LDX #>DBGTBL
}
STX OPPAGE
LDY #$00
+ACCMEM16 ; 16 BIT A/M
JMP FETCHOP
;*
;* JUMP INDIRECT THROUGH TMP
;*
;JMPTMP JMP (TMP)
;*
;* ENTER FUNCTION WITH FRAME SIZE AND PARAM COUNT
;*
ENTER PEI (IFP) ; SAVE ON STACK FOR LEAVE
@ -1850,15 +1732,6 @@ ENTER PEI (IFP) ; SAVE ON STACK FOR LEAVE
INY
LDA (IP),Y
AND #$00FF
!IF DEBUG {
+ACCMEM8 ; 8 BIT A/M
PHA
CLC
ADC #$80+'0'
STA $7D0+31
PLA
+ACCMEM16 ; 16 BIT A/M
}
EOR #$FFFF ; ALLOCATE FRAME
SEC
ADC PP
@ -1896,19 +1769,10 @@ LEAVEX INY ;+INC_IP
STA ALTRDOFF
+ STA TMPL
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
SBC HWSP ; STACK DEPTH = (HWSP - SP)/2
CMP #$80
ROR
ADC ESP ; ESP - STACK DEPTH
TAX
CPX ESP
@ -1921,18 +1785,6 @@ LEAVEX INY ;+INC_IP
INY
CPY ESP
BNE -
!IF DEBUG {
PHX
TSX
CPX HWSP
BEQ +
LDX #$80+'L'
STX $7D0+30
- LDX $C000
BPL -
LDX $C010
+ PLX
}
++ +ACCMEM16 ; 16 BIT A/M
LDY TMPL ; DEALLOCATE POOL + FRAME
TYA
@ -1941,26 +1793,23 @@ LEAVEX INY ;+INC_IP
STA PP
PLA ; RESTORE PREVIOUS FRAME
STA IFP
LDY PSR
PHY
PLP ; RETURN IN EMULATION MODE
RTS
RETX STX ALTRDOFF
RET +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 {
SEC ; SWITCH TO EMULATION MODE
XCE
!AS
LDA PSR
PHA
CLC
ADC #$80+'0'
STA $7D0+31
PLA
}
EOR #$FF
PLP
RTS ; RETURN IN EMULATION MODE
!AL
RETX STX ALTRDOFF
RET SEC ; SWITCH TO EMULATION MODE
XCE
!AS
TSC ; MOVE HW EVAL STACK TO ZP EVAL STACK
SEC
SBC HWSP ; STACK DEPTH = (HWSP - SP)/2
CMP #$80
ROR
ADC ESP ; ESP - STACK DEPTH
TAX
CPX ESP
@ -1973,26 +1822,13 @@ RET +ACCMEM8 ; 8 BIT A/M
INY
CPY ESP
BNE -
!IF DEBUG {
PHX
TSX
CPX HWSP
BEQ +
LDX #$80+'X'
STX $7D0+30
- LDX $C000
BPL -
LDX $C010
+ PLX
}
++ LDA PSR
PHA
PLP ; RETURN IN EMULATION MODE
RTS
PLP
RTS ; RETURN IN EMULATION MODE
;*
;* RETURN TO NATIVE CODE
;*
!AL
NATV TYA ; FLATTEN IP
SEC
ADC IP