1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2024-10-18 22:24:28 +00:00

Only adjust frame pointer for ENTER/LEAVE

This commit is contained in:
David Schmenk 2018-01-17 21:13:16 -08:00
parent 3b2c80b718
commit 5ac6a556c8
4 changed files with 119 additions and 166 deletions

View File

@ -26,7 +26,7 @@ OPPAGE = OPIDX+1
INY
BNE *+4
INC IPH
}
}
;*
;* INTERPRETER HEADER+INITIALIZATION
;*
@ -945,7 +945,6 @@ ICALADR JSR $FFFF
;*
ENTER INY
LDA (IP),Y
PHA ; SAVE ON STACK FOR LEAVE
EOR #$FF
SEC
ADC IFPL
@ -970,7 +969,8 @@ ENTER INY
;*
;* LEAVE FUNCTION
;*
LEAVE PLA
LEAVE +INC_IP
LDA (IP),Y
CLC
ADC IFPL
STA IFPL

View File

@ -197,14 +197,6 @@ DINTRP PLA
PLA
ADC #$00
STA IPH
LDA IFPH
PHA ; SAVE ON STACK FOR LEAVE/RET
LDA IFPL
PHA ; SAVE ON STACK FOR LEAVE/RET
LDA PPL ; SET FP TO PP
STA IFPL
LDA PPH
STA IFPH
LDY #$00
!IF SELFMODIFY {
BEQ +
@ -224,14 +216,6 @@ IINTRP PLA
LDA (TMP),Y
STA IPL
DEY
LDA IFPH
PHA ; SAVE ON STACK FOR LEAVE/RET
LDA IFPL
PHA ; SAVE ON STACK FOR LEAVE/RET
LDA PPL ; SET FP TO PP
STA IFPL
LDA PPH
STA IFPH
+ LDA #>OPTBL
STA OPPAGE
!IF SELFMODIFY {
@ -254,14 +238,6 @@ IINTRPX PHP
LDA (TMP),Y
STA IPL
DEY
LDA IFPH
PHA ; SAVE ON STACK FOR LEAVE/RET
LDA IFPL
PHA ; SAVE ON STACK FOR LEAVE/RET
LDA PPL ; SET FP TO PP
STA IFPL
LDA PPH
STA IFPH
LDA #>OPXTBL
STA OPPAGE
STA ALTRDON
@ -1540,7 +1516,11 @@ JMPTMP JMP (TMP)
;*
;* ENTER FUNCTION WITH FRAME SIZE AND PARAM COUNT
;*
ENTER INY
ENTER LDA IFPH
PHA ; SAVE ON STACK FOR LEAVE
LDA IFPL
PHA
INY
LDA (IP),Y
EOR #$FF ; ALLOCATE FRAME
SEC
@ -1571,7 +1551,6 @@ ENTER INY
;*
LEAVEX +INC_IP
LDA (IP),Y
STA ALTRDOFF
CLC
ADC IFPL
STA PPL
@ -1582,6 +1561,7 @@ LEAVEX +INC_IP
STA IFPL
PLA
STA IFPH
RETX STA ALTRDOFF
LDA PSR
PHA
PLP
@ -1598,20 +1578,6 @@ LEAVE +INC_IP
STA IFPL
PLA
STA IFPH
RTS
;
RETX STA ALTRDOFF
LDA PSR
PHA
PLP
RET LDA IFPL ; DEALLOCATE POOL
STA PPL
LDA IFPH
STA PPH
PLA ; RESTORE PREVIOUS FRAME
STA IFPL
PLA
STA IFPH
RTS
RET RTS
VMEND = *
}

View File

@ -130,6 +130,7 @@ INTERP PLA
PLA
ADC #$00
STA IPH
LDA IFPH
PHA ; SAVE ON STACK FOR LEAVE/RET
LDA IFPL
@ -138,6 +139,7 @@ INTERP PLA
STA IFPL
LDA PPH
STA IFPH
LDY #$00
STY IPX
JMP FETCHOP
@ -158,6 +160,7 @@ XINTERP PLA
LDA (TMP),Y
STA IPL
DEY
LDA IFPH
PHA ; SAVE ON STACK FOR LEAVE/RET
LDA IFPL
@ -166,6 +169,7 @@ XINTERP PLA
STA IFPL
LDA PPH
STA IFPH
JMP FETCHOP
;*
;* INTERNAL DIVIDE ALGORITHM
@ -1108,7 +1112,11 @@ ICALADR JSR $FFFF
;*
;* ENTER FUNCTION WITH FRAME SIZE AND PARAM COUNT
;*
ENTER INY
ENTER LDA IFPH
PHA ; SAVE ON STACK FOR LEAVE
LDA IFPL
PHA
INY
LDA (IP),Y
PHA ; SAVE ON STACK FOR LEAVE
EOR #$FF
@ -1138,7 +1146,8 @@ ENTER INY
;*
;* LEAVE FUNCTION
;*
LEAVE PLA
LEAVE +INC_IP
LDA (IP),Y
CLC
ADC IFPL
STA PPL
@ -1149,17 +1158,7 @@ LEAVE PLA
STA IFPL
PLA
STA IFPH
RTS
;
RET LDA IFPL ; DEALLOCATE POOL
STA PPL
LDA IFPH
STA PPH
PLA ; RESTORE PREVIOUS FRAME
STA IFPL
PLA
STA IFPH
RTS
RET RTS
SOSCMD = *
!SOURCE "vmsrc/soscmd.a"
SEGEND = *

View File

@ -265,9 +265,6 @@ DINTRP PHP
PLA
INC
STA IP
PEI (IFP) ; SAVE ON STACK FOR LEAVE/RET
LDA PP ; SET FP TO PP
STA IFP
STX ESP
TSX
STX HWSP
@ -295,10 +292,7 @@ IINTRP PHP
LDA (TOS,S),Y
DEY
STA IP
LDA IFP
STA TOS,S ; SAVE ON STACK FOR LEAVE/RET
LDA PP ; SET FP TO PP
STA IFP
PLA
STX ESP
TSX
STX HWSP
@ -325,10 +319,7 @@ IINTRPX PHP
LDA (TOS,S),Y
DEY
STA IP
LDA IFP
STA TOS,S ; SAVE ON STACK FOR LEAVE/RET
LDA PP ; SET FP TO PP
STA IFP
PLA
STX ESP
TSX
STX HWSP
@ -1542,7 +1533,8 @@ JMPTMP JMP (TMP)
;*
;* ENTER FUNCTION WITH FRAME SIZE AND PARAM COUNT
;*
ENTER INY
ENTER PEI (IFP) ; SAVE ON STACK FOR LEAVE
INY
LDA (IP),Y
AND #$00FF
!IF DEBUG {
@ -1684,10 +1676,6 @@ RET +ACCMEM8 ; 8 BIT A/M
}
TYX
+ACCMEM16
LDA IFP ; DEALLOCATE POOL
STA PP
PLA ; RESTORE PREVIOUS FRAME
STA IFP
SEC ; SWITCH TO EMULATED MODE
XCE
!AS