mirror of
https://github.com/dschmenk/PLASMA.git
synced 2024-08-21 21:29:08 +00:00
Reduce stack usage on (I)CALL
This commit is contained in:
parent
75ecdc237e
commit
7d392f2d42
@ -891,19 +891,19 @@ CALL +INC_IP
|
||||
+INC_IP
|
||||
LDA (IP),Y
|
||||
STA CALLADR+2
|
||||
LDA IPH
|
||||
PHA
|
||||
LDA IPL
|
||||
PHA
|
||||
TYA
|
||||
CLC
|
||||
ADC IPL
|
||||
PHA
|
||||
LDA IPH
|
||||
ADC #$00
|
||||
PHA
|
||||
CALLADR JSR $FFFF
|
||||
PLA
|
||||
TAY
|
||||
STA IPH
|
||||
PLA
|
||||
STA IPL
|
||||
PLA
|
||||
STA IPH
|
||||
LDY #$00
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* INDIRECT CALL TO ADDRESS (NATIVE CODE)
|
||||
@ -913,19 +913,19 @@ ICAL LDA ESTKL,X
|
||||
LDA ESTKH,X
|
||||
STA ICALADR+2
|
||||
INX
|
||||
LDA IPH
|
||||
PHA
|
||||
LDA IPL
|
||||
PHA
|
||||
TYA
|
||||
CLC
|
||||
ADC IPL
|
||||
PHA
|
||||
LDA IPH
|
||||
ADC #$00
|
||||
PHA
|
||||
ICALADR JSR $FFFF
|
||||
PLA
|
||||
TAY
|
||||
STA IPH
|
||||
PLA
|
||||
STA IPL
|
||||
PLA
|
||||
STA IPH
|
||||
LDY #$00
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* ENTER FUNCTION WITH FRAME SIZE AND PARAM COUNT
|
||||
@ -941,9 +941,9 @@ ENTER INY
|
||||
DEC IFPH
|
||||
+ INY
|
||||
LDA (IP),Y
|
||||
BEQ +
|
||||
ASL
|
||||
TAY
|
||||
BEQ +
|
||||
- LDA ESTKH,X
|
||||
DEY
|
||||
STA (IFP),Y
|
||||
|
@ -1429,25 +1429,25 @@ CALL +INC_IP
|
||||
+INC_IP
|
||||
LDA (IP),Y
|
||||
STA TMPH
|
||||
TYA
|
||||
CLC
|
||||
ADC IPL
|
||||
PHA
|
||||
LDA IPH
|
||||
PHA
|
||||
LDA IPL
|
||||
PHA
|
||||
TYA
|
||||
ADC #$00
|
||||
PHA
|
||||
JSR JMPTMP
|
||||
PLA
|
||||
TAY
|
||||
PLA
|
||||
STA IPH
|
||||
PLA
|
||||
STA IPL
|
||||
PLA
|
||||
STA IPH
|
||||
LDA #>OPTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE
|
||||
STA OPPAGE
|
||||
!IF SELFMODIFY {
|
||||
BIT LCRWEN+LCBNK2
|
||||
BIT LCRWEN+LCBNK2
|
||||
}
|
||||
LDY #$00
|
||||
JMP NEXTOP
|
||||
;
|
||||
CALLX +INC_IP
|
||||
@ -1456,29 +1456,29 @@ CALLX +INC_IP
|
||||
+INC_IP
|
||||
LDA (IP),Y
|
||||
STA TMPH
|
||||
TYA
|
||||
CLC
|
||||
ADC IPL
|
||||
PHA
|
||||
LDA IPH
|
||||
PHA
|
||||
LDA IPL
|
||||
PHA
|
||||
TYA
|
||||
ADC #$00
|
||||
PHA
|
||||
STA ALTRDOFF
|
||||
;CLI UNTIL I KNOW WHAT TO DO WITH THE UNENHANCED IIE
|
||||
JSR JMPTMP
|
||||
;SEI UNTIL I KNOW WHAT TO DO WITH THE UNENHANCED IIE
|
||||
STA ALTRDON
|
||||
PLA
|
||||
TAY
|
||||
PLA
|
||||
STA IPH
|
||||
PLA
|
||||
STA IPL
|
||||
PLA
|
||||
STA IPH
|
||||
LDA #>OPXTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE
|
||||
STA OPPAGE
|
||||
!IF SELFMODIFY {
|
||||
BIT LCRWEN+LCBNK2
|
||||
BIT LCRWEN+LCBNK2
|
||||
}
|
||||
LDY #$00
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* INDIRECT CALL TO ADDRESS (NATIVE CODE)
|
||||
@ -1488,25 +1488,25 @@ ICAL LDA ESTKL,X
|
||||
LDA ESTKH,X
|
||||
STA TMPH
|
||||
INX
|
||||
TYA
|
||||
CLC
|
||||
ADC IPL
|
||||
PHA
|
||||
LDA IPH
|
||||
PHA
|
||||
LDA IPL
|
||||
PHA
|
||||
TYA
|
||||
ADC #$00
|
||||
PHA
|
||||
JSR JMPTMP
|
||||
PLA
|
||||
TAY
|
||||
PLA
|
||||
STA IPH
|
||||
PLA
|
||||
STA IPL
|
||||
PLA
|
||||
STA IPH
|
||||
LDA #>OPTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE
|
||||
STA OPPAGE
|
||||
!IF SELFMODIFY {
|
||||
BIT LCRWEN+LCBNK2
|
||||
BIT LCRWEN+LCBNK2
|
||||
}
|
||||
LDY #$00
|
||||
JMP NEXTOP
|
||||
;
|
||||
ICALX LDA ESTKL,X
|
||||
@ -1514,11 +1514,12 @@ ICALX LDA ESTKL,X
|
||||
LDA ESTKH,X
|
||||
STA TMPH
|
||||
INX
|
||||
TYA
|
||||
CLC
|
||||
ADC IPL
|
||||
PHA
|
||||
LDA IPH
|
||||
PHA
|
||||
LDA IPL
|
||||
PHA
|
||||
TYA
|
||||
ADC #$00
|
||||
PHA
|
||||
STA ALTRDOFF
|
||||
;CLI UNTIL I KNOW WHAT TO DO WITH THE UNENHANCED IIE
|
||||
@ -1526,17 +1527,16 @@ ICALX LDA ESTKL,X
|
||||
;SEI UNTIL I KNOW WHAT TO DO WITH THE UNENHANCED IIE
|
||||
STA ALTRDON
|
||||
PLA
|
||||
TAY
|
||||
STA IPH
|
||||
PLA
|
||||
STA IPL
|
||||
PLA
|
||||
STA IPH
|
||||
LDA #>OPXTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE
|
||||
STA OPPAGE
|
||||
!IF SELFMODIFY {
|
||||
BIT LCRWEN+LCBNK2
|
||||
BIT LCRWEN+LCBNK2
|
||||
}
|
||||
LDY #$00
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* JUMP INDIRECT TRHOUGH TMP
|
||||
@ -1559,9 +1559,9 @@ ENTER INY
|
||||
STA IFPH
|
||||
INY
|
||||
LDA (IP),Y
|
||||
BEQ +
|
||||
ASL
|
||||
TAY
|
||||
BEQ +
|
||||
- LDA ESTKH,X
|
||||
DEY
|
||||
STA (IFP),Y
|
||||
|
@ -1048,23 +1048,23 @@ CALL +INC_IP
|
||||
+INC_IP
|
||||
LDA (IP),Y
|
||||
STA CALLADR+2
|
||||
LDA IPX
|
||||
TYA
|
||||
CLC
|
||||
ADC IPL
|
||||
PHA
|
||||
LDA IPH
|
||||
ADC #$00
|
||||
PHA
|
||||
LDA IPL
|
||||
PHA
|
||||
TYA
|
||||
LDA IPX
|
||||
PHA
|
||||
CALLADR JSR $FFFF
|
||||
PLA
|
||||
TAY
|
||||
PLA
|
||||
STA IPL
|
||||
STA IPX
|
||||
PLA
|
||||
STA IPH
|
||||
PLA
|
||||
STA IPX
|
||||
STA IPL
|
||||
LDY #$00
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* INDIRECT CALL TO ADDRESS (NATIVE CODE)
|
||||
@ -1074,23 +1074,23 @@ ICAL LDA ESTKL,X
|
||||
LDA ESTKH,X
|
||||
STA ICALADR+2
|
||||
INX
|
||||
LDA IPX
|
||||
TYA
|
||||
CLC
|
||||
ADC IPL
|
||||
PHA
|
||||
LDA IPH
|
||||
ADC #$00
|
||||
PHA
|
||||
LDA IPL
|
||||
PHA
|
||||
TYA
|
||||
LDA IPX
|
||||
PHA
|
||||
ICALADR JSR $FFFF
|
||||
PLA
|
||||
TAY
|
||||
PLA
|
||||
STA IPL
|
||||
STA IPX
|
||||
PLA
|
||||
STA IPH
|
||||
PLA
|
||||
STA IPX
|
||||
STA IPL
|
||||
LDY #$00
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* ENTER FUNCTION WITH FRAME SIZE AND PARAM COUNT
|
||||
@ -1109,9 +1109,9 @@ ENTER INY
|
||||
STA IFPH
|
||||
INY
|
||||
LDA (IP),Y
|
||||
BEQ +
|
||||
ASL
|
||||
TAY
|
||||
BEQ +
|
||||
- LDA ESTKH,X
|
||||
DEY
|
||||
STA (IFP),Y
|
||||
|
@ -1114,118 +1114,133 @@ CALL +INC_IP
|
||||
LDA (IP16),Y
|
||||
STA TMP
|
||||
+INC_IP
|
||||
EMUSTK STY IPY
|
||||
SEC ; SWITCH TO EMULATED MODE
|
||||
EMUSTK SEC ; SWITCH TO EMULATED MODE
|
||||
XCE
|
||||
!AS
|
||||
TSX ; COPY HW EVAL STACK TO ZP EVAL STACK
|
||||
TXA
|
||||
STY IPY
|
||||
TSC ; MOVE HW EVAL STACK TO ZP EVAL STACK
|
||||
EOR #$FF
|
||||
SEC
|
||||
SBC HWSP
|
||||
ADC HWSP ; STACK DEPTH = (HWSP - SP)/2
|
||||
LSR
|
||||
LDX ESP
|
||||
EOR #$FF
|
||||
SEC
|
||||
ADC ESP ; ESP - STACK DEPTH
|
||||
TAY
|
||||
BEQ +
|
||||
- DEX
|
||||
PLA
|
||||
TAX
|
||||
BRA +
|
||||
- PLA
|
||||
STA ESTKL,X
|
||||
PLA
|
||||
STA ESTKH,X
|
||||
DEY
|
||||
INX
|
||||
+ CPX ESP
|
||||
BNE -
|
||||
+ LDA IP16H
|
||||
PHA
|
||||
LDA IP16L
|
||||
PHA
|
||||
LDA IPY
|
||||
CLC
|
||||
ADC IP16L
|
||||
PHA
|
||||
LDA IP16H
|
||||
ADC #$00
|
||||
PHA
|
||||
PHX
|
||||
TYX
|
||||
JSR JMPTMP
|
||||
PLY ; COPY RETURN VALUES TO HW EVAL STACK
|
||||
PLY ; MOVE RETURN VALUES TO HW EVAL STACK
|
||||
STY ESP
|
||||
PLY
|
||||
PLA
|
||||
STA IP16L
|
||||
PLA
|
||||
STA IP16H
|
||||
CPX ESP
|
||||
BEQ +
|
||||
- LDA ESTKH,X
|
||||
PLA
|
||||
STA IP16L
|
||||
STX TMPL
|
||||
TYX
|
||||
BRA +
|
||||
- DEX
|
||||
LDA ESTKH,X
|
||||
PHA
|
||||
LDA ESTKL,X
|
||||
PHA
|
||||
INX
|
||||
CPX ESP
|
||||
+ CPX TMPL
|
||||
BNE -
|
||||
+ CLC ; SWITCH BACK TO NATIVE MODE
|
||||
CLC ; SWITCH BACK TO NATIVE MODE
|
||||
XCE
|
||||
REP #$20 ; 16 BIT A/M
|
||||
SEP #$10 ; 8 BIT X,Y
|
||||
!AL
|
||||
TSX
|
||||
STX HWSP
|
||||
LDX #>OPTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE
|
||||
STX OP16PAGE
|
||||
LDY #$00
|
||||
JMP NEXTOP16
|
||||
;
|
||||
CALLX +INC_IP
|
||||
LDA (IP16),Y
|
||||
STA TMP
|
||||
+INC_IP
|
||||
EMUSTKX STY IPY
|
||||
SEC ; SWITCH TO EMULATED MODE
|
||||
EMUSTKX SEC ; SWITCH TO EMULATED MODE
|
||||
XCE
|
||||
!AS
|
||||
TSX ; COPY HW EVAL STACK TO ZP EVAL STACK
|
||||
TXA
|
||||
STY IPY
|
||||
TSC ; MOVE HW EVAL STACK TO ZP EVAL STACK
|
||||
EOR #$FF
|
||||
SEC
|
||||
SBC HWSP
|
||||
ADC HWSP ; STACK DEPTH = (HWSP - SP)/2
|
||||
LSR
|
||||
LDX ESP
|
||||
EOR #$FF
|
||||
SEC
|
||||
ADC ESP ; ESP - STACK DEPTH
|
||||
TAY
|
||||
BEQ +
|
||||
- DEX
|
||||
PLA
|
||||
TAX
|
||||
BRA +
|
||||
- PLA
|
||||
STA ESTKL,X
|
||||
PLA
|
||||
STA ESTKH,X
|
||||
DEY
|
||||
INX
|
||||
+ CPX ESP
|
||||
BNE -
|
||||
+ LDA IP16H
|
||||
PHA
|
||||
LDA IP16L
|
||||
PHA
|
||||
LDA IPY
|
||||
CLC
|
||||
ADC IP16L
|
||||
PHA
|
||||
LDA IP16H
|
||||
ADC #$00
|
||||
PHA
|
||||
PHX
|
||||
TYX
|
||||
STX ALTRDOFF
|
||||
;CLI UNTIL I KNOW WHAT TO DO WITH THE UNENHANCED IIE
|
||||
JSR JMPTMP
|
||||
;SEI UNTIL I KNOW WHAT TO DO WITH THE UNENHANCED IIE
|
||||
STX ALTRDON
|
||||
PLY ; COPY RETURN VALUES TO HW EVAL STACK
|
||||
PLY ; MOVE RETURN VALUES TO HW EVAL STACK
|
||||
STY ESP
|
||||
PLY
|
||||
PLA
|
||||
STA IP16L
|
||||
PLA
|
||||
STA IP16H
|
||||
CPX ESP
|
||||
BEQ +
|
||||
- LDA ESTKH,X
|
||||
PLA
|
||||
STA IP16L
|
||||
STX TMPL
|
||||
TYX
|
||||
BRA +
|
||||
- DEX
|
||||
LDA ESTKH,X
|
||||
PHA
|
||||
LDA ESTKL,X
|
||||
PHA
|
||||
INX
|
||||
CPX ESP
|
||||
+ CPX TMPL
|
||||
BNE -
|
||||
+ CLC ; SWITCH BACK TO NATIVE MODE
|
||||
CLC ; SWITCH BACK TO NATIVE MODE
|
||||
XCE
|
||||
REP #$20 ; 16 BIT A/M
|
||||
SEP #$10 ; 8 BIT X,Y
|
||||
!AL
|
||||
TSX
|
||||
STX HWSP
|
||||
LDX #>OPXTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE
|
||||
STX OP16PAGE
|
||||
LDY #$00
|
||||
JMP NEXTOP16
|
||||
|
||||
;*
|
||||
;* INDIRECT CALL TO ADDRESS (NATIVE CODE)
|
||||
;*
|
||||
@ -1260,10 +1275,10 @@ ENTER INY
|
||||
!AS
|
||||
INY
|
||||
LDA (IP16),Y
|
||||
BEQ +
|
||||
ASL
|
||||
TAY
|
||||
BEQ +
|
||||
LDX ESP
|
||||
LDX ESP ; MOVE PARAMETERS TO CALL FRAME
|
||||
- LDA ESTKH,X
|
||||
DEY
|
||||
STA (IFP),Y
|
||||
@ -1284,22 +1299,25 @@ LEAVEX STX ALTRDOFF
|
||||
;CLI UNTIL I KNOW WHAT TO DO WITH THE UNENHANCED IIE
|
||||
LEAVE SEP #$20 ; 8 BIT A/M
|
||||
!AS
|
||||
TSX ; COPY HW EVAL STACK TO ZP EVAL STACK
|
||||
TXA
|
||||
LDX ESP
|
||||
TSC ; MOVE HW EVAL STACK TO ZP EVAL STACK
|
||||
EOR #$FF
|
||||
SEC
|
||||
SBC HWSP
|
||||
ADC HWSP ; STACK DEPTH = (HWSP - SP)/2
|
||||
LSR
|
||||
BEQ +
|
||||
EOR #$FF
|
||||
SEC
|
||||
ADC ESP ; ESP - STACK DEPTH
|
||||
TAY
|
||||
- DEX
|
||||
PLA
|
||||
TAX
|
||||
BRA +
|
||||
- PLA
|
||||
STA ESTKL,X
|
||||
PLA
|
||||
STA ESTKH,X
|
||||
DEY
|
||||
INX
|
||||
+ CPX ESP
|
||||
BNE -
|
||||
+ PLA ; DEALLOCATE POOL + FRAME
|
||||
PLA ; DEALLOCATE POOL + FRAME
|
||||
REP #$20 ; 16 BIT A/M
|
||||
!AL
|
||||
AND #$00FF
|
||||
@ -1316,22 +1334,25 @@ RETX STX ALTRDOFF
|
||||
;CLI UNTIL I KNOW WHAT TO DO WITH THE UNENHANCED IIE
|
||||
RET SEP #$20 ; 8 BIT A/M
|
||||
!AS
|
||||
TSX ; COPY HW EVAL STACK TO ZP EVAL STACK
|
||||
TXA
|
||||
LDX ESP
|
||||
TSC ; MOVE HW EVAL STACK TO ZP EVAL STACK
|
||||
EOR #$FF
|
||||
SEC
|
||||
SBC HWSP
|
||||
ADC HWSP ; STACK DEPTH = (HWSP - SP)/2
|
||||
LSR
|
||||
BEQ +
|
||||
EOR #$FF
|
||||
SEC
|
||||
ADC ESP ; ESP - STACK DEPTH
|
||||
TAY
|
||||
- DEX
|
||||
PLA
|
||||
TAX
|
||||
BRA +
|
||||
- PLA
|
||||
STA ESTKL,X
|
||||
PLA
|
||||
STA ESTKH,X
|
||||
DEY
|
||||
INX
|
||||
+ CPX ESP
|
||||
BNE -
|
||||
+ REP #$20 ; 16 BIT A/M
|
||||
REP #$20 ; 16 BIT A/M
|
||||
!AL
|
||||
LDA IFP ; DEALLOCATE POOL
|
||||
STA PP
|
||||
|
Loading…
Reference in New Issue
Block a user