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:
parent
fbcebe9df3
commit
f24bb421ec
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user