1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2024-08-21 06:29:07 +00:00

fewer and better checks for IP FIXUP

This commit is contained in:
David Schmenk 2018-01-19 17:37:32 -08:00
parent fbcebe9df3
commit f24bb421ec
2 changed files with 198 additions and 134 deletions

View File

@ -55,14 +55,29 @@ INTERP = $03D0
;* ;*
;* INTERPRETER INSTRUCTION POINTER INCREMENT MACRO ;* INTERPRETER INSTRUCTION POINTER INCREMENT MACRO
;* ;*
!MACRO INC_IP { ;!MACRO INC_IP {
INY ; INY
BPL + ; BPL +
INC IPH ; INC IPH
; TYA
; AND #$7F
; TAY
;+
; }
!MACRO FIX_IP {
INC IPH
TYA TYA
AND #$7F AND #$7F
TAY TAY
+ }
!MACRO FIXJMP_IP .TARGET {
BMI +
JMP .TARGET
+ INC IPH
TYA
AND #$7F
TAY
JMP .TARGET
} }
;****************************** ;******************************
;* * ;* *
@ -730,19 +745,29 @@ CFFB LDA #$FF
CB LDA #$00 CB LDA #$00
DEX DEX
STA ESTKH,X STA ESTKH,X
+INC_IP INY
LDA (IP),Y LDA (IP),Y
STA ESTKL,X STA ESTKL,X
JMP NEXTOP JMP NEXTOP
;* ;*
;* LOAD ADDRESS & LOAD CONSTANT WORD (SAME THING, WITH OR WITHOUT FIXUP) ;* LOAD ADDRESS & LOAD CONSTANT WORD (SAME THING, WITH OR WITHOUT FIXUP)
;* ;*
LA = * LA DEX
CW DEX INY ;+INC_IP
INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA ESTKL,X STA ESTKL,X
+INC_IP INY
BMI +
- LDA (IP),Y
STA ESTKH,X
JMP NEXTOP
+ +FIX_IP
BPL -
CW DEX
INY ;+INC_IP
LDA (IP),Y
STA ESTKL,X
INY
LDA (IP),Y LDA (IP),Y
STA ESTKH,X STA ESTKH,X
JMP NEXTOP JMP NEXTOP
@ -750,7 +775,7 @@ CW DEX
;* CONSTANT STRING ;* CONSTANT STRING
;* ;*
CS DEX CS DEX
INY ;+INC_IP INY ;+INC_IP
TYA ; NORMALIZE IP AND SAVE STRING ADDR ON ESTK TYA ; NORMALIZE IP AND SAVE STRING ADDR ON ESTK
CLC CLC
ADC IPL ADC IPL
@ -766,7 +791,7 @@ CS DEX
JMP NEXTOP JMP NEXTOP
; ;
CSX DEX CSX DEX
INY ;+INC_IP INY ;+INC_IP
TYA ; NORMALIZE IP TYA ; NORMALIZE IP
CLC CLC
ADC IPL ADC IPL
@ -875,7 +900,7 @@ LW LDA ESTKL,X
LDY IPY LDY IPY
JMP NEXTOP JMP NEXTOP
; ;
!IF SELFMODIFY { !IF SELFMODIFY {
LBX LDA ESTKL,X LBX LDA ESTKL,X
STA LBXLDA+1 STA LBXLDA+1
LDA ESTKH,X LDA ESTKH,X
@ -920,8 +945,9 @@ LWX LDA ESTKL,X
;* ;*
;* LOAD ADDRESS OF LOCAL FRAME OFFSET ;* LOAD ADDRESS OF LOCAL FRAME OFFSET
;* ;*
LLA +INC_IP LLA INY ;+INC_IP
LDA (IP),Y BMI +
- LDA (IP),Y
DEX DEX
CLC CLC
ADC IFPL ADC IFPL
@ -930,10 +956,12 @@ LLA +INC_IP
ADC IFPH ADC IFPH
STA ESTKH,X STA ESTKH,X
JMP NEXTOP JMP NEXTOP
+ +FIX_IP
BPL -
;* ;*
;* LOAD VALUE FROM LOCAL FRAME OFFSET ;* LOAD VALUE FROM LOCAL FRAME OFFSET
;* ;*
LLB +INC_IP LLB INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STY IPY STY IPY
TAY TAY
@ -944,7 +972,7 @@ LLB +INC_IP
STA ESTKH,X STA ESTKH,X
LDY IPY LDY IPY
JMP NEXTOP JMP NEXTOP
LLW +INC_IP LLW INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STY IPY STY IPY
TAY TAY
@ -957,7 +985,7 @@ LLW +INC_IP
LDY IPY LDY IPY
JMP NEXTOP JMP NEXTOP
; ;
LLBX +INC_IP LLBX INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STY IPY STY IPY
TAY TAY
@ -970,7 +998,7 @@ LLBX +INC_IP
STA ALTRDON STA ALTRDON
LDY IPY LDY IPY
JMP NEXTOP JMP NEXTOP
LLWX +INC_IP LLWX INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STY IPY STY IPY
TAY TAY
@ -987,11 +1015,11 @@ LLWX +INC_IP
;* ;*
;* LOAD VALUE FROM ABSOLUTE ADDRESS ;* LOAD VALUE FROM ABSOLUTE ADDRESS
;* ;*
!IF SELFMODIFY { !IF SELFMODIFY {
LAB INY ;+INC_IP LAB INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA LABLDA+1 STA LABLDA+1
+INC_IP INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA LABLDA+2 STA LABLDA+2
LABLDA LDA $FFFF LABLDA LDA $FFFF
@ -1001,10 +1029,10 @@ LABLDA LDA $FFFF
STA ESTKH,X STA ESTKH,X
JMP NEXTOP JMP NEXTOP
} ELSE { } ELSE {
LAB INY ;+INC_IP LAB INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMPL STA TMPL
+INC_IP INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMPH STA TMPH
STY IPY STY IPY
@ -1016,10 +1044,10 @@ LAB INY ;+INC_IP
LDY IPY LDY IPY
JMP NEXTOP JMP NEXTOP
} }
LAW INY ;+INC_IP LAW INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMPL STA TMPL
+INC_IP INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMPH STA TMPH
STY IPY STY IPY
@ -1033,11 +1061,11 @@ LAW INY ;+INC_IP
LDY IPY LDY IPY
JMP NEXTOP JMP NEXTOP
; ;
!IF SELFMODIFY { !IF SELFMODIFY {
LABX INY ;+INC_IP LABX INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA LABXLDA+1 STA LABXLDA+1
+INC_IP INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA LABXLDA+2 STA LABXLDA+2
STA ALTRDOFF STA ALTRDOFF
@ -1049,10 +1077,10 @@ LABXLDA LDA $FFFF
STA ALTRDON STA ALTRDON
JMP NEXTOP JMP NEXTOP
} ELSE { } ELSE {
LABX INY ;+INC_IP LABX INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMPL STA TMPL
+INC_IP INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMPH STA TMPH
STY IPY STY IPY
@ -1066,10 +1094,10 @@ LABX INY ;+INC_IP
LDY IPY LDY IPY
JMP NEXTOP JMP NEXTOP
} }
LAWX INY ;+INC_IP LAWX INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMPL STA TMPL
+INC_IP INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMPH STA TMPH
STY IPY STY IPY
@ -1087,7 +1115,7 @@ LAWX INY ;+INC_IP
;* ;*
;* STORE VALUE TO ADDRESS ;* STORE VALUE TO ADDRESS
;* ;*
!IF SELFMODIFY { !IF SELFMODIFY {
SB LDA ESTKL,X SB LDA ESTKL,X
STA SBSTA+1 STA SBSTA+1
LDA ESTKH,X LDA ESTKH,X
@ -1126,17 +1154,15 @@ SW LDA ESTKL,X
;* ;*
;* STORE VALUE TO LOCAL FRAME OFFSET ;* STORE VALUE TO LOCAL FRAME OFFSET
;* ;*
SLB +INC_IP SLB INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STY IPY STY IPY
TAY TAY
LDA ESTKL,X LDA ESTKL,X
STA (IFP),Y STA (IFP),Y
LDY IPY LDY IPY
; INX +FIXJMP_IP DROP
; JMP NEXTOP SLW INY ;+INC_IP
JMP DROP
SLW +INC_IP
LDA (IP),Y LDA (IP),Y
STY IPY STY IPY
TAY TAY
@ -1146,11 +1172,11 @@ SLW +INC_IP
LDA ESTKH,X LDA ESTKH,X
STA (IFP),Y STA (IFP),Y
LDY IPY LDY IPY
JMP DROP +FIXJMP_IP DROP
;* ;*
;* STORE VALUE TO LOCAL FRAME OFFSET WITHOUT POPPING STACK ;* STORE VALUE TO LOCAL FRAME OFFSET WITHOUT POPPING STACK
;* ;*
DLB +INC_IP DLB INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STY IPY STY IPY
TAY TAY
@ -1158,7 +1184,7 @@ DLB +INC_IP
STA (IFP),Y STA (IFP),Y
LDY IPY LDY IPY
JMP NEXTOP JMP NEXTOP
DLW +INC_IP DLW INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STY IPY STY IPY
TAY TAY
@ -1172,23 +1198,24 @@ DLW +INC_IP
;* ;*
;* STORE VALUE TO ABSOLUTE ADDRESS ;* STORE VALUE TO ABSOLUTE ADDRESS
;* ;*
!IF SELFMODIFY { !IF SELFMODIFY {
SAB INY ;+INC_IP SAB INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA SABSTA+1 STA SABSTA+1
+INC_IP INY ;+INC_IP
LDA (IP),Y BMI +
- LDA (IP),Y
STA SABSTA+2 STA SABSTA+2
LDA ESTKL,X LDA ESTKL,X
SABSTA STA $FFFF SABSTA STA $FFFF
; INX
; JMP NEXTOP
JMP DROP JMP DROP
+ +FIX_IP
BPL -
} ELSE { } ELSE {
SAB INY ;+INC_IP SAB INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMPL STA TMPL
+INC_IP INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMPH STA TMPH
LDA ESTKL,X LDA ESTKL,X
@ -1196,12 +1223,12 @@ SAB INY ;+INC_IP
LDY #$00 LDY #$00
STA (TMP),Y STA (TMP),Y
LDY IPY LDY IPY
JMP DROP +FIXJMP_IP DROP
} }
SAW INY ;+INC_IP SAW INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMPL STA TMPL
+INC_IP INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMPH STA TMPH
STY IPY STY IPY
@ -1212,25 +1239,25 @@ SAW INY ;+INC_IP
LDA ESTKH,X LDA ESTKH,X
STA (TMP),Y STA (TMP),Y
LDY IPY LDY IPY
JMP DROP +FIXJMP_IP DROP
;* ;*
;* STORE VALUE TO ABSOLUTE ADDRESS WITHOUT POPPING STACK ;* STORE VALUE TO ABSOLUTE ADDRESS WITHOUT POPPING STACK
;* ;*
!IF SELFMODIFY { !IF SELFMODIFY {
DAB INY ;+INC_IP DAB INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA DABSTA+1 STA DABSTA+1
+INC_IP INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA DABSTA+2 STA DABSTA+2
LDA ESTKL,X LDA ESTKL,X
DABSTA STA $FFFF DABSTA STA $FFFF
JMP NEXTOP JMP NEXTOP
} ELSE { } ELSE {
DAB INY ;+INC_IP DAB INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMPL STA TMPL
+INC_IP INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMPH STA TMPH
STY IPY STY IPY
@ -1240,10 +1267,10 @@ DAB INY ;+INC_IP
LDY IPY LDY IPY
JMP NEXTOP JMP NEXTOP
} }
DAW INY ;+INC_IP DAW INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMPL STA TMPL
+INC_IP INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMPH STA TMPH
STY IPY STY IPY
@ -1322,9 +1349,9 @@ BRTRU INX
LDA ESTKH-1,X LDA ESTKH-1,X
ORA ESTKL-1,X ORA ESTKL-1,X
BNE BRNCH BNE BRNCH
NOBRNCH INY ;+INC_IP NOBRNCH INY ;+INC_IP
+INC_IP INY ;+INC_IP
JMP NEXTOP +FIXJMP_IP NEXTOP
BRFLS INX BRFLS INX
LDA ESTKH-1,X LDA ESTKH-1,X
ORA ESTKL-1,X ORA ESTKL-1,X
@ -1390,10 +1417,10 @@ IBRNCH LDA IPL
;* ;*
;* CALL INTO ABSOLUTE ADDRESS (NATIVE CODE) ;* CALL INTO ABSOLUTE ADDRESS (NATIVE CODE)
;* ;*
CALL INY ;+INC_IP CALL INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMPL STA TMPL
INY ;+INC_IP INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMPH STA TMPH
TYA TYA
@ -1417,10 +1444,10 @@ CALL INY ;+INC_IP
LDY #$01 LDY #$01
JMP FETCHOP JMP FETCHOP
; ;
CALLX INY ;+INC_IP CALLX INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMPL STA TMPL
INY ;+INC_IP INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMPH STA TMPH
TYA TYA
@ -1554,7 +1581,7 @@ ENTER LDA IFPH
;* ;*
;* LEAVE FUNCTION ;* LEAVE FUNCTION
;* ;*
LEAVEX INY ;+INC_IP LEAVEX INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
CLC CLC
ADC IFPL ADC IFPL
@ -1571,7 +1598,7 @@ RETX STA ALTRDOFF
PHA PHA
PLP PLP
RTS RTS
LEAVE INY ;+INC_IP LEAVE INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
CLC CLC
ADC IFPL ADC IFPL

View File

@ -74,14 +74,41 @@ NOS = $03 ; TOS-1
;* ;*
;* INTERPRETER INSTRUCTION POINTER INCREMENT MACRO ;* INTERPRETER INSTRUCTION POINTER INCREMENT MACRO
;* ;*
!MACRO INC_IP { ;!MACRO INC_IP {
INY ; INY
BPL + ; BPL +
INC IPH ; SEP #$20 ; 8 BIT A/M
; !AS
; INC IPH
; TYA
; AND #$7F
; TAY
; REP #$20 ; 16 BIT A/M
; !AL
;+
; }
!MACRO FIX_IP {
SEP #$20 ; 8 BIT A/M
!AS
INC IPH
TYA TYA
AND #$7F AND #$7F
TAY TAY
+ REP #$20 ; 16 BIT A/M
!AL
}
!MACRO FIXJMP_IP .TARGET {
BMI +
JMP .TARGET
+ SEP #$20 ; 8 BIT A/M
!AS
INC IPH
TYA
AND #$7F
TAY
REP #$20 ; 16 BIT A/M
!AL
JMP .TARGET
} }
;* ;*
;* ACCUM/MEM SIZE MACROS ;* ACCUM/MEM SIZE MACROS
@ -764,12 +791,12 @@ DUP LDA TOS,S
;* ;*
ZERO PEA $0000 ZERO PEA $0000
JMP NEXTOP JMP NEXTOP
CFFB +INC_IP CFFB INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
ORA #$FF00 ORA #$FF00
PHA PHA
JMP NEXTOP JMP NEXTOP
CB +INC_IP CB INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
AND #$00FF AND #$00FF
PHA PHA
@ -777,16 +804,20 @@ CB +INC_IP
;* ;*
;* LOAD ADDRESS & LOAD CONSTANT WORD (SAME THING, WITH OR WITHOUT FIXUP) ;* LOAD ADDRESS & LOAD CONSTANT WORD (SAME THING, WITH OR WITHOUT FIXUP)
;* ;*
LA = * LA INY ;+INC_IP
CW INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
PHA PHA
+INC_IP INY ;+INC_IP
+FIXJMP_IP NEXTOP
CW INY ;+INC_IP
LDA (IP),Y
PHA
INY ;+INC_IP
JMP NEXTOP JMP NEXTOP
;* ;*
;* CONSTANT STRING ;* CONSTANT STRING
;* ;*
CS INY ;+INC_IP CS INY ;+INC_IP
TYA ; NORMALIZE IP AND SAVE STRING ADDR ON ESTK TYA ; NORMALIZE IP AND SAVE STRING ADDR ON ESTK
CLC CLC
ADC IP ADC IP
@ -796,7 +827,7 @@ CS INY ;+INC_IP
TAY TAY
JMP NEXTOP JMP NEXTOP
; ;
CSX INY ;+INC_IP CSX INY ;+INC_IP
TYA ; NORMALIZE IP TYA ; NORMALIZE IP
CLC CLC
ADC IP ADC IP
@ -911,17 +942,20 @@ LWX TYX
;* ;*
;* LOAD ADDRESS OF LOCAL FRAME OFFSET ;* LOAD ADDRESS OF LOCAL FRAME OFFSET
;* ;*
LLA +INC_IP LLA INY ;+INC_IP
LDA (IP),Y BMI +
- LDA (IP),Y
AND #$00FF AND #$00FF
CLC CLC
ADC IFP ADC IFP
PHA PHA
JMP NEXTOP JMP NEXTOP
+ +FIX_IP
BPL -
;* ;*
;* LOAD VALUE FROM LOCAL FRAME OFFSET ;* LOAD VALUE FROM LOCAL FRAME OFFSET
;* ;*
LLB +INC_IP LLB INY ;+INC_IP
TYX TYX
LDA (IP),Y LDA (IP),Y
TAY TAY
@ -930,7 +964,7 @@ LLB +INC_IP
PHA PHA
TXY TXY
JMP NEXTOP JMP NEXTOP
LLW +INC_IP LLW INY ;+INC_IP
TYX TYX
LDA (IP),Y LDA (IP),Y
TAY TAY
@ -939,7 +973,7 @@ LLW +INC_IP
TXY TXY
JMP NEXTOP JMP NEXTOP
; ;
LLBX +INC_IP LLBX INY ;+INC_IP
TYX TYX
LDA (IP),Y LDA (IP),Y
TAY TAY
@ -950,7 +984,7 @@ LLBX +INC_IP
PHA PHA
TXY TXY
JMP NEXTOP JMP NEXTOP
LLWX +INC_IP LLWX INY ;+INC_IP
TYX TYX
LDA (IP),Y LDA (IP),Y
TAY TAY
@ -964,16 +998,16 @@ LLWX +INC_IP
;* LOAD VALUE FROM ABSOLUTE ADDRESS ;* LOAD VALUE FROM ABSOLUTE ADDRESS
;* ;*
!IF SELFMODIFY { !IF SELFMODIFY {
LAB INY ;+INC_IP LAB INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA LABLDX+1 STA LABLDX+1
LABLDX LDX $FFFF LABLDX LDX $FFFF
TXA TXA
PHA PHA
+INC_IP INY ;+INC_IP
JMP NEXTOP JMP NEXTOP
} ELSE { } ELSE {
LAB INY ;+INC_IP LAB INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMP STA TMP
TYA ; QUICKY CLEAR OUT MSB TYA ; QUICKY CLEAR OUT MSB
@ -981,19 +1015,19 @@ LAB INY ;+INC_IP
LDA (TMP) LDA (TMP)
+ACCMEM16 ; 16 BIT A/M +ACCMEM16 ; 16 BIT A/M
PHA PHA
+INC_IP INY ;+INC_IP
JMP NEXTOP JMP NEXTOP
} }
LAW INY ;+INC_IP LAW INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMP STA TMP
LDA (TMP) LDA (TMP)
PHA PHA
+INC_IP INY ;+INC_IP
JMP NEXTOP JMP NEXTOP
; ;
!IF SELFMODIFY { !IF SELFMODIFY {
LABX INY ;+INC_IP LABX INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA LABXLDX+1 STA LABXLDX+1
STX ALTRDOFF STX ALTRDOFF
@ -1001,10 +1035,10 @@ LABXLDX LDX $FFFF
STX ALTRDON STX ALTRDON
TXA TXA
PHA PHA
+INC_IP INY ;+INC_IP
JMP NEXTOP JMP NEXTOP
} ELSE { } ELSE {
LABX INY ;+INC_IP LABX INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMP STA TMP
TYA ; QUICKY CLEAR OUT MSB TYA ; QUICKY CLEAR OUT MSB
@ -1014,17 +1048,17 @@ LABX INY ;+INC_IP
+ACCMEM16 ; 16 BIT A/M +ACCMEM16 ; 16 BIT A/M
STX ALTRDON STX ALTRDON
PHA PHA
+INC_IP INY ;+INC_IP
JMP NEXTOP JMP NEXTOP
} }
LAWX INY ;+INC_IP LAWX INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMP STA TMP
STX ALTRDOFF STX ALTRDOFF
LDA (TMP) LDA (TMP)
STX ALTRDON STX ALTRDON
PHA PHA
+INC_IP INY ;+INC_IP
JMP NEXTOP JMP NEXTOP
; ;
;* ;*
@ -1060,8 +1094,9 @@ SW TYX
;* STORE VALUE TO LOCAL FRAME OFFSET ;* STORE VALUE TO LOCAL FRAME OFFSET
;* ;*
!IF SELFMODIFY { !IF SELFMODIFY {
SLB +INC_IP SLB INY ;+INC_IP
LDA (IP),Y BMI +
- LDA (IP),Y
AND #$00FF AND #$00FF
CLC CLC
ADC IFP ADC IFP
@ -1070,8 +1105,10 @@ SLB +INC_IP
TAX TAX
SLBSTX STX $FFFF SLBSTX STX $FFFF
JMP NEXTOP JMP NEXTOP
+ +FIX_IP
BPL -
} ELSE { } ELSE {
SLB +INC_IP SLB INY ;+INC_IP
TYX TYX
LDA (IP),Y LDA (IP),Y
TAY TAY
@ -1080,21 +1117,21 @@ SLB +INC_IP
STA (IFP),Y STA (IFP),Y
+ACCMEM16 ; 16 BIT A/M +ACCMEM16 ; 16 BIT A/M
TXY TXY
JMP NEXTOP +FIXJMP_IP NEXTOP
} }
SLW +INC_IP SLW INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
TYX TYX
TAY TAY
PLA PLA
STA (IFP),Y STA (IFP),Y
TXY TXY
JMP NEXTOP +FIXJMP_IP NEXTOP
;* ;*
;* STORE VALUE TO LOCAL FRAME OFFSET WITHOUT POPPING STACK ;* STORE VALUE TO LOCAL FRAME OFFSET WITHOUT POPPING STACK
;* ;*
!IF SELFMODIFY { !IF SELFMODIFY {
DLB +INC_IP DLB INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
AND #$00FF AND #$00FF
CLC CLC
@ -1105,7 +1142,7 @@ DLB +INC_IP
DLBSTX STX $FFFF DLBSTX STX $FFFF
JMP NEXTOP JMP NEXTOP
} ELSE { } ELSE {
DLB +INC_IP DLB INY ;+INC_IP
TYX TYX
+ACCMEM8 ; 8 BIT A/M +ACCMEM8 ; 8 BIT A/M
LDA (IP),Y LDA (IP),Y
@ -1116,7 +1153,7 @@ DLB +INC_IP
TXY TXY
JMP NEXTOP JMP NEXTOP
} }
DLW +INC_IP DLW INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
TYX TYX
TAY TAY
@ -1128,61 +1165,61 @@ DLW +INC_IP
;* STORE VALUE TO ABSOLUTE ADDRESS ;* STORE VALUE TO ABSOLUTE ADDRESS
;* ;*
!IF SELFMODIFY { !IF SELFMODIFY {
SAB INY ;+INC_IP SAB INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA SABSTX+1 STA SABSTX+1
PLA PLA
TAX TAX
SABSTX STX $FFFF SABSTX STX $FFFF
+INC_IP INY ;+INC_IP
JMP NEXTOP +FIXJMP_IP NEXTOP
} ELSE { } ELSE {
SAB INY ;+INC_IP SAB INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMP STA TMP
PLA PLA
+ACCMEM8 ; 8 BIT A/M +ACCMEM8 ; 8 BIT A/M
STA (TMP) STA (TMP)
+ACCMEM16 ; 16 BIT A/M +ACCMEM16 ; 16 BIT A/M
+INC_IP INY ;+INC_IP
JMP NEXTOP +FIXJMP_IP NEXTOP
} }
SAW INY ;+INC_IP SAW INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMP STA TMP
PLA PLA
STA (TMP) STA (TMP)
+INC_IP INY ;+INC_IP
JMP NEXTOP +FIXJMP_IP NEXTOP
;* ;*
;* STORE VALUE TO ABSOLUTE ADDRESS WITHOUT POPPING STACK ;* STORE VALUE TO ABSOLUTE ADDRESS WITHOUT POPPING STACK
;* ;*
!IF SELFMODIFY { !IF SELFMODIFY {
DAB INY ;+INC_IP DAB INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA DABSTX+1 STA DABSTX+1
LDA TOS,S LDA TOS,S
TAX TAX
DABSTX STX $FFFF DABSTX STX $FFFF
+INC_IP INY ;+INC_IP
JMP NEXTOP JMP NEXTOP
} ELSE { } ELSE {
DAB INY ;+INC_IP DAB INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMP STA TMP
+ACCMEM8 ; 8 BIT A/M +ACCMEM8 ; 8 BIT A/M
LDA TOS,S LDA TOS,S
STA (TMP) STA (TMP)
+ACCMEM16 ; 16 BIT A/M +ACCMEM16 ; 16 BIT A/M
+INC_IP INY ;+INC_IP
JMP NEXTOP JMP NEXTOP
} }
DAW INY ;+INC_IP DAW INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
STA TMP STA TMP
LDA TOS,S LDA TOS,S
STA (TMP) STA (TMP)
+INC_IP INY ;+INC_IP
JMP NEXTOP JMP NEXTOP
;* ;*
;* COMPARES ;* COMPARES
@ -1245,16 +1282,16 @@ ISLT PLA
;* ;*
BRTRU PLA BRTRU PLA
BNE BRNCH BNE BRNCH
NOBRNCH INY ;+INC_IP NOBRNCH INY ;+INC_IP
+INC_IP INY ;+INC_IP
JMP NEXTOP +FIXJMP_IP NEXTOP
BRFLS PLA BRFLS PLA
BNE NOBRNCH BNE NOBRNCH
BRNCH TYA ; FLATTEN IP BRNCH TYA ; FLATTEN IP
CLC CLC
ADC IP ADC IP
INY ;+INC_IP INY ;+INC_IP
CLC ; ADD BRANCH OFFSET CLC ; ADD BRANCH OFFSET
ADC (IP),Y ADC (IP),Y
STA IP STA IP
LDY #$01 LDY #$01
@ -1293,7 +1330,7 @@ IBRNCH PLA
;* ;*
;* CALL INTO ABSOLUTE ADDRESS (NATIVE CODE) ;* CALL INTO ABSOLUTE ADDRESS (NATIVE CODE)
;* ;*
CALL INY ;+INC_IP CALL INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
INY INY
BNE EMUSTK BNE EMUSTK
@ -1409,7 +1446,7 @@ EMUSTK STA TMP
;* ;*
;* CALL INTO ABSOLUTE ADDRESS (NATIVE CODE) ;* CALL INTO ABSOLUTE ADDRESS (NATIVE CODE)
;* ;*
CALLX INY ;+INC_IP CALLX INY ;+INC_IP
LDA (IP),Y LDA (IP),Y
INY INY
BNE EMUSTKX BNE EMUSTKX
@ -1573,12 +1610,12 @@ ENTER PEI (IFP) ; SAVE ON STACK FOR LEAVE
;* ;*
;* LEAVE FUNCTION ;* LEAVE FUNCTION
;* ;*
LEAVEX INY ;+INC_IP LEAVEX INY ;+INC_IP
+ACCMEM8 ; 8 BIT A/M +ACCMEM8 ; 8 BIT A/M
LDA (IP),Y ; DEALLOCATE POOL + FRAME LDA (IP),Y ; DEALLOCATE POOL + FRAME
STA ALTRDOFF STA ALTRDOFF
BRA + BRA +
LEAVE INY ;+INC_IP LEAVE INY ;+INC_IP
+ACCMEM8 ; 8 BIT A/M +ACCMEM8 ; 8 BIT A/M
LDA (IP),Y ; DEALLOCATE POOL + FRAME LDA (IP),Y ; DEALLOCATE POOL + FRAME
+ STA TMPL + STA TMPL