lawless-legends/PLASMA/src/plvm02.s

1928 lines
24 KiB
ArmAsm
Raw Normal View History

2014-05-04 23:15:45 +00:00
;**********************************************************
;*
;* SYSTEM ROUTINES AND LOCATIONS
;*
;**********************************************************
;*
;* MONITOR SPECIAL LOCATIONS AND PRODOS MLI
;*
CSWL = $36
CSWH = $37
PROMPT = $33
PRODOS = $BF00
MACHID = $BF98
2014-05-04 23:15:45 +00:00
;*
;* HARDWARE ADDRESSES
;*
KEYBD = $C000
CLRKBD = $C010
SPKR = $C030
2014-05-06 16:43:14 +00:00
LCRDEN = $C080
LCWTEN = $C081
ROMEN = $C082
LCRWEN = $C083
LCBNK2 = $00
LCBNK1 = $08
ALTZPOFF= $C008
ALTZPON = $C009
ALTRDOFF= $C002
ALTRDON = $C003
ALTWROFF= $C004
ALTWRON = $C005
2014-05-04 23:15:45 +00:00
;**********************************************************
;*
;* VM ZERO PAGE LOCATIONS
;*
;**********************************************************
ESTKSZ = $20
ESTK = $C0
ESTKL = ESTK
ESTKH = ESTK+ESTKSZ/2
VMZP = ESTK+ESTKSZ
IFP = VMZP
IFPL = IFP
IFPH = IFP+1
2014-05-07 02:18:36 +00:00
IP = IFP+2
IPL = IP
IPH = IP+1
IPY = IP+2
TMP = IP+3
TMPL = TMP
TMPH = TMP+1
TMPX = TMP+2
NPARMS = TMPL
FRMSZ = TMPH
DVSIGN = TMPX
2014-05-07 02:18:36 +00:00
SRC = $06
SRCL = SRC
SRCH = SRC+1
DST = SRC+2
DSTL = DST
DSTH = DST+1
ESP = DST+2
2014-05-06 16:43:14 +00:00
;**********************************************************
2014-05-04 23:15:45 +00:00
;*
2014-05-06 16:43:14 +00:00
;* INTERPRETER INSTRUCTION POINTER INCREMENT MACRO
2014-05-04 23:15:45 +00:00
;*
2014-05-06 16:43:14 +00:00
;**********************************************************
!MACRO INC_IP {
INY
BNE * + 4
INC IPH
}
2014-05-04 23:15:45 +00:00
;***********************************************
;*
;* INTERPRETER INITIALIZATION
;*
;***********************************************
2014-05-06 16:43:14 +00:00
* = $2000
2014-05-07 02:18:36 +00:00
LDX #$FE
TXS
;*
;* INSTALL PAGE 3 VECTORS
;*
2014-05-06 16:43:14 +00:00
LDY #$10
- LDA PAGE3,Y
2014-05-04 23:15:45 +00:00
STA $03D0,Y
DEY
BPL -
;*
;* MOVE VM INTO LANGUAGE CARD
;*
2014-05-07 02:18:36 +00:00
BIT LCRWEN+LCBNK2
BIT LCRWEN+LCBNK2
LDA #<VMCORE
2014-05-07 02:18:36 +00:00
STA SRCL
LDA #>VMCORE
2014-05-07 02:18:36 +00:00
STA SRCH
LDA #$00
2014-05-07 02:18:36 +00:00
STA DSTL
LDA #$D0
2014-05-07 02:18:36 +00:00
STA DSTH
LDY #$00
2014-05-07 02:18:36 +00:00
- LDA (SRC),Y ; COPY VM+CMD INTO LANGUAGE CARD
STA (DST),Y
INY
BNE -
2014-05-07 02:18:36 +00:00
INC SRCH
INC DSTH
LDA DSTH
CMP #$E0
BNE -
;*
;* LOOK FOR STARTUP FILE
;*
2014-05-07 02:18:36 +00:00
JSR PRODOS ; OPEN AUTORUN
!BYTE $C8
!WORD OPENPARMS
BCC +
JMP NOAUTO
+ LDA REFNUM
STA NLPARMS+1
JSR PRODOS
!BYTE $C9
!WORD NLPARMS
BCC +
JMP NOAUTO
+ LDA REFNUM
STA READPARMS+1
JSR PRODOS
!BYTE $CA
!WORD READPARMS
BCC +
JMP NOAUTO
+ LDX READPARMS+6
STX $01FF
NOAUTO JSR PRODOS
!BYTE $CC
!WORD CLOSEPARMS
LDY #$00
2014-05-07 02:18:36 +00:00
STY SRCL
LDA #$D1
2014-05-07 02:18:36 +00:00
STA SRCH
- LDA (SRC),Y ; LOAD FIRST PAGE OF CMD INTO PLACE
STA $1000,Y
INY
BNE -
LDA #$7F
ADC #$01 ; SET V FLAG
JMP $1007 ; CALL CMD
2014-05-07 02:18:36 +00:00
AUTORUN !BYTE 7
!TEXT "AUTORUN"
OPENPARMS !BYTE 3
2014-05-07 02:18:36 +00:00
!WORD AUTORUN
!WORD $0800
REFNUM !BYTE 0
NLPARMS !BYTE 3
2014-05-07 02:18:36 +00:00
!BYTE 0
!BYTE $7F
!BYTE $0D
READPARMS !BYTE 4
2014-05-07 02:18:36 +00:00
!BYTE 0
!WORD $0200
!WORD $0080
!WORD 0
CLOSEPARMS !BYTE 1
2014-05-07 02:18:36 +00:00
!BYTE 0
2014-05-06 16:43:14 +00:00
PAGE3 = *
!PSEUDOPC $03D0 {
2014-05-04 23:15:45 +00:00
;*
;* PAGE 3 VECTORS INTO INTERPRETER
;*
2014-05-06 16:43:14 +00:00
BIT LCRDEN+LCBNK2 ; $03D0 - INTERP ENTRY
JMP INTERP
2014-05-06 16:43:14 +00:00
CALL3 BIT ROMEN
CALLADR JSR $0000
BIT LCRDEN+LCBNK2
RTS
}
VMCORE = *
!PSEUDOPC $D000 {
;*
;* OPCODE TABLE
2014-05-04 23:15:45 +00:00
;*
2014-05-06 16:43:14 +00:00
OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E
!WORD NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 10 12 14 16 18 1A 1C 1E
2014-05-06 16:43:14 +00:00
!WORD LNOT,LOR,LAND,LA,LLA,CB,CW,SWAP ; 20 22 24 26 28 2A 2C 2E
!WORD DROP,DUP,PUSH,PULL,BRLT,BRGT,BREQ,BRNE ; 30 32 34 36 38 3A 3C 3E
!WORD ISEQ,ISNE,ISGT,ISLT,ISGE,ISLE,BRFLS,BRTRU ; 40 42 44 46 48 4A 4C 4E
!WORD BRNCH,IBRNCH,CALL,ICAL,ENTER,LEAVE,RET,NEXTOP ; 50 52 54 56 58 5A 5C 5E
!WORD LB,LW,LLB,LLW,LAB,LAW,DLB,DLW ; 60 62 64 66 68 6A 6C 6E
!WORD SB,SW,SLB,SLW,SAB,SAW,DAB,DAW ; 70 72 74 76 78 7A 7C 7E
2014-05-04 23:15:45 +00:00
;*
;* OPXCODE TABLE
;*
OPXTBL !WORD ZEROX,ADDX,SUBX,MULX,DIVX,MODX,INCRX,DECRX ; 00 02 04 06 08 0A 0C 0E
!WORD NEGX,COMPX,BANDX,IORX,XORX,SHLX,SHRX,IDXWX ; 10 12 14 16 18 1A 1C 1E
!WORD LNOTX,LORX,LANDX,LAX,LLAX,CBX,CWX,SWAPX ; 20 22 24 26 28 2A 2C 2E
!WORD DROPX,DUPX,PUSHX,PULLX,BRLTX,BRGTX,BREQX,BRNEX ; 30 32 34 36 38 3A 3C 3E
!WORD ISEQX,ISNEX,ISGTX,ISLTX,ISGEX,ISLEX,BRFLSX,BRTRUX; 40 42 44 46 48 4A 4C 4E
!WORD BRNCHX,IBRNCHX,CALLX,ICALX,ENTERX,LEAVEX,RETX,NEXTOPX; 50 52 54 56 58 5A 5C 5E
!WORD LBX,LWX,LLBX,LLWX,LABX,LAWX,DLBX,DLWX ; 60 62 64 66 68 6A 6C 6E
!WORD SBX,SWX,SLBX,SLWX,SABX,SAWX,DABX,DAWX ; 70 72 74 76 78 7A 7C 7E
;*
;* COMMAND PROCESSING
;*
2014-05-07 02:18:36 +00:00
!PSEUDOPC $1000 {
;*
;* CLEAR COMMAND LINE LENGTH BYTE IF CALLED FROM 'BYE'
;*
LDY #$00
LDX #$FE ; LEAVE ROOM FOR COMMAND LINE LENGTH BYTE
TXS
BVS +
STY $01FF ; CLEAR AUTORUN COMMAND WHEN CALLED FROM 'BYE'
;*
;* MOVE REST OF CMD FROM LANGUAGE CARD
;*
+ STY SRCL
STY DSTL
LDA #$D2
STA SRCH
LDA #$11
STA DSTH
BIT LCRDEN+LCBNK2
- LDA (SRC),Y
STA (DST),Y
INY
BNE -
INC SRCL
INC DSTL
LDA SRCL
CMP #$E0
BNE -
;*
;* DEACTIVATE 80 COL CARDS
;*
BIT ROMEN
LDY #4
- LDA DISABLE80,Y
JSR $FDED
DEY
BPL -
BIT $C054 ; SET TEXT MODE
BIT $C051
BIT $C058
JSR $FC58 ; HOME
JMP START
DISABLE80 !BYTE 21, 13, '1', 26, 13
;*
;* JUMP TO INTERPRETER
;*
START LDA #$00
STA IFPL
LDA #$BF
STA IFPH
LDX ESTKSZ/2
!SOURCE "cmdexec.a"
}
;*
;* ENTER INTO BYTECODE INTERPRETER
;*
INTERP PLA
2014-05-04 23:15:45 +00:00
STA TMPL
PLA
STA TMPH
LDY #$03
2014-05-04 23:15:45 +00:00
LDA (TMP),Y
STA IPH
DEY
2014-05-04 23:15:45 +00:00
LDA (TMP),Y
STA IPL
DEY
2014-05-04 23:15:45 +00:00
LDA (TMP),Y
TAY
BEQ FETCHOP
LDY #$00
BEQ FETCHOPX
;*
;* INTERP BYTECODE IN MAIN MEM
;*
2014-05-06 16:43:14 +00:00
NEXTOPH INC IPH
BNE FETCHOP
DROP INX
NEXTOP INY
BEQ NEXTOPH
FETCHOP LDA (IP),Y
STA *+5
JMP (OPTBL)
;*
;* INTERP BYTECODE IN AUX MEM
;*
2014-05-06 16:43:14 +00:00
NEXTOPHX INC IPH
BNE FETCHOPX
DROPX INX
NEXTOPX CLI
INY
BEQ NEXTOPHX
FETCHOPX SEI
2014-05-06 16:43:14 +00:00
STA ALTRDON
LDA (IP),Y
ORA #$80 ; SELECT OPX OPCODES
STA *+5
2014-05-06 16:43:14 +00:00
JMP (OPXTBL)
2014-05-04 23:15:45 +00:00
;*
;* ADD TOS TO TOS-1
;*
ADD LDA ESTKL,X
2014-05-04 23:15:45 +00:00
CLC
ADC ESTKL+1,X
STA ESTKL+1,X
LDA ESTKH,X
ADC ESTKH+1,X
STA ESTKH+1,X
INX
JMP NEXTOP
;
ADDX LDA ESTKL,X
CLC
ADC ESTKL+1,X
STA ESTKL+1,X
LDA ESTKH,X
ADC ESTKH+1,X
STA ESTKH+1,X
INX
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* SUB TOS FROM TOS-1
;*
SUB LDA ESTKL+1,X
2014-05-04 23:15:45 +00:00
SEC
SBC ESTKL,X
STA ESTKL+1,X
LDA ESTKH+1,X
SBC ESTKH,X
STA ESTKH+1,X
INX
JMP NEXTOP
;
SUBX LDA ESTKL+1,X
SEC
SBC ESTKL,X
STA ESTKL+1,X
LDA ESTKH+1,X
SBC ESTKH,X
STA ESTKH+1,X
INX
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* SHIFT TOS-1 LEFT BY 1, ADD TO TOS-1
;*
IDXW LDA ESTKL,X
2014-05-04 23:15:45 +00:00
ASL
ROL ESTKH,X
CLC
ADC ESTKL+1,X
STA ESTKL+1,X
LDA ESTKH,X
ADC ESTKH+1,X
STA ESTKH+1,X
INX
JMP NEXTOP
;
IDXWX LDA ESTKL,X
ASL
ROL ESTKH,X
CLC
ADC ESTKL+1,X
STA ESTKL+1,X
LDA ESTKH,X
ADC ESTKH+1,X
STA ESTKH+1,X
INX
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* INTERNAL MULTIPLY ALGORITHM
2014-05-04 23:15:45 +00:00
;*
_MUL STY IPY
LDY #$00
STY TMPL ; PRODL
STY TMPH ; PRODH
2014-05-04 23:15:45 +00:00
LDY #$10
MUL1 LSR ESTKH,X ; MULTPLRH
2014-05-04 23:15:45 +00:00
ROR ESTKL,X ; MULTPLRL
BCC MUL2
LDA ESTKL+1,X ; MULTPLNDL
CLC
ADC TMPL ; PRODL
STA TMPL
LDA ESTKH+1,X ; MULTPLNDH
ADC TMPH ; PRODH
STA TMPH
MUL2 ASL ESTKL+1,X ; MULTPLNDL
2014-05-04 23:15:45 +00:00
ROL ESTKH+1,X ; MULTPLNDH
DEY
BNE MUL1
INX
LDA TMPL ; PRODL
STA ESTKL,X
LDA TMPH ; PRODH
STA ESTKH,X
LDY IPY
2014-05-04 23:15:45 +00:00
RTS
;*
;* MUL TOS-1 BY TOS
;*
MUL JSR _MUL
JMP NEXTOP
;
MULX JSR _MUL
JMP NEXTOPX
;*
2014-05-04 23:15:45 +00:00
;* INTERNAL DIVIDE ALGORITHM
;*
_NEG LDA #$00
SEC
SBC ESTKL,X
STA ESTKL,X
LDA #$00
SBC ESTKH,X
STA ESTKH,X
RTS
_DIV STY IPY
LDA ESTKH,X
2014-05-04 23:15:45 +00:00
AND #$80
STA DVSIGN
BPL _DIV1
JSR _NEG
2014-05-04 23:15:45 +00:00
INC DVSIGN
_DIV1 LDA ESTKH+1,X
2014-05-04 23:15:45 +00:00
BPL _DIV2
INX
JSR _NEG
2014-05-04 23:15:45 +00:00
DEX
INC DVSIGN
BNE _DIV3
_DIV2 ORA ESTKL+1,X ; DVDNDL
2014-05-04 23:15:45 +00:00
BNE _DIV3
STA TMPL
STA TMPH
RTS
_DIV3 LDY #$11 ; #BITS+1
2014-05-04 23:15:45 +00:00
LDA #$00
STA TMPL ; REMNDRL
STA TMPH ; REMNDRH
_DIV4 ASL ESTKL+1,X ; DVDNDL
2014-05-04 23:15:45 +00:00
ROL ESTKH+1,X ; DVDNDH
DEY
BCC _DIV4
STY ESTKL-1,X
_DIV5 ROL TMPL ; REMNDRL
2014-05-04 23:15:45 +00:00
ROL TMPH ; REMNDRH
LDA TMPL ; REMNDRL
SEC
SBC ESTKL,X ; DVSRL
TAY
LDA TMPH ; REMNDRH
SBC ESTKH,X ; DVSRH
BCC _DIV6
STA TMPH ; REMNDRH
STY TMPL ; REMNDRL
_DIV6 ROL ESTKL+1,X ; DVDNDL
2014-05-04 23:15:45 +00:00
ROL ESTKH+1,X ; DVDNDH
DEC ESTKL-1,X
BNE _DIV5
LDY IPY
2014-05-04 23:15:45 +00:00
RTS
;*
;* NEGATE TOS
;*
NEG LDA #$00
2014-05-04 23:15:45 +00:00
SEC
SBC ESTKL,X
STA ESTKL,X
LDA #$00
2014-05-04 23:15:45 +00:00
SBC ESTKH,X
STA ESTKH,X
JMP NEXTOP
;
NEGX LDA #$00
SEC
SBC ESTKL,X
STA ESTKL,X
LDA #$00
SBC ESTKH,X
STA ESTKH,X
JMP NEXTOPX
;*
;* DIV TOS-1 BY TOS
;*
DIV JSR _DIV
INX
LSR DVSIGN ; SIGN(RESULT) = (SIGN(DIVIDEND) + SIGN(DIVISOR)) & 1
BCS NEG
JMP NEXTOP
;
DIVX JSR _DIV
INX
LSR DVSIGN ; SIGN(RESULT) = (SIGN(DIVIDEND) + SIGN(DIVISOR)) & 1
BCS NEGX
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* MOD TOS-1 BY TOS
2014-05-04 23:15:45 +00:00
;*
MOD JSR _DIV
INX
2014-05-04 23:15:45 +00:00
LDA TMPL ; REMNDRL
STA ESTKL,X
LDA TMPH ; REMNDRH
STA ESTKH,X
LDA DVSIGN ; REMAINDER IS SIGN OF DIVIDEND
BMI NEG
JMP NEXTOP
;
MODX JSR _DIV
2014-05-04 23:15:45 +00:00
INX
LDA TMPL ; REMNDRL
STA ESTKL,X
LDA TMPH ; REMNDRH
STA ESTKH,X
LDA DVSIGN ; REMAINDER IS SIGN OF DIVIDEND
BMI NEGX
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* INCREMENT TOS
;*
INCR INC ESTKL,X
2014-05-04 23:15:45 +00:00
BNE INCR1
INC ESTKH,X
INCR1 JMP NEXTOP
;
INCRX INC ESTKL,X
BNE INCRX1
INC ESTKH,X
INCRX1 JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* DECREMENT TOS
;*
DECR LDA ESTKL,X
2014-05-04 23:15:45 +00:00
BNE DECR1
DEC ESTKH,X
DECR1 DEC ESTKL,X
JMP NEXTOP
;
DECRX LDA ESTKL,X
BNE DECRX1
DEC ESTKH,X
DECRX1 DEC ESTKL,X
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* BITWISE COMPLIMENT TOS
;*
COMP LDA #$FF
2014-05-04 23:15:45 +00:00
EOR ESTKL,X
STA ESTKL,X
LDA #$FF
EOR ESTKH,X
STA ESTKH,X
JMP NEXTOP
;
COMPX LDA #$FF
EOR ESTKL,X
STA ESTKL,X
LDA #$FF
EOR ESTKH,X
STA ESTKH,X
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* BITWISE AND TOS TO TOS-1
;*
BAND LDA ESTKL+1,X
2014-05-04 23:15:45 +00:00
AND ESTKL,X
STA ESTKL+1,X
LDA ESTKH+1,X
AND ESTKH,X
STA ESTKH+1,X
INX
JMP NEXTOP
;
BANDX LDA ESTKL+1,X
AND ESTKL,X
STA ESTKL+1,X
LDA ESTKH+1,X
AND ESTKH,X
STA ESTKH+1,X
INX
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* INCLUSIVE OR TOS TO TOS-1
;*
IOR LDA ESTKL+1,X
2014-05-04 23:15:45 +00:00
ORA ESTKL,X
STA ESTKL+1,X
LDA ESTKH+1,X
ORA ESTKH,X
STA ESTKH+1,X
INX
JMP NEXTOP
;
IORX LDA ESTKL+1,X
ORA ESTKL,X
STA ESTKL+1,X
LDA ESTKH+1,X
ORA ESTKH,X
STA ESTKH+1,X
INX
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* EXLUSIVE OR TOS TO TOS-1
;*
XOR LDA ESTKL+1,X
2014-05-04 23:15:45 +00:00
EOR ESTKL,X
STA ESTKL+1,X
LDA ESTKH+1,X
EOR ESTKH,X
STA ESTKH+1,X
INX
JMP NEXTOP
;
XORX LDA ESTKL+1,X
EOR ESTKL,X
STA ESTKL+1,X
LDA ESTKH+1,X
EOR ESTKH,X
STA ESTKH+1,X
INX
2014-05-06 16:43:14 +00:00
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* SHIFT TOS-1 LEFT BY TOS
;*
SHL STY IPY
LDA ESTKL,X
2014-05-04 23:15:45 +00:00
CMP #$08
BCC SHL1
LDY ESTKL+1,X
STY ESTKH+1,X
LDY #$00
STY ESTKL+1,X
SBC #$08
SHL1 TAY
2014-05-04 23:15:45 +00:00
BEQ SHL3
SHL2 ASL ESTKL+1,X
2014-05-04 23:15:45 +00:00
ROL ESTKH+1,X
DEY
BNE SHL2
SHL3 INX
LDY IPY
2014-05-06 16:43:14 +00:00
JMP NEXTOP
;
SHLX STY IPY
LDA ESTKL,X
CMP #$08
BCC SHLX1
LDY ESTKL+1,X
STY ESTKH+1,X
LDY #$00
STY ESTKL+1,X
SBC #$08
SHLX1 TAY
BEQ SHLX3
SHLX2 ASL ESTKL+1,X
ROL ESTKH+1,X
DEY
BNE SHLX2
SHLX3 INX
LDY IPY
2014-05-06 16:43:14 +00:00
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* SHIFT TOS-1 RIGHT BY TOS
;*
SHR STY IPY
LDA ESTKL,X
2014-05-04 23:15:45 +00:00
CMP #$08
BCC SHR2
LDY ESTKH+1,X
STY ESTKL+1,X
CPY #$80
LDY #$00
BCC SHR1
DEY
SHR1 STY ESTKH+1,X
2014-05-04 23:15:45 +00:00
SEC
SBC #$08
SHR2 TAY
2014-05-04 23:15:45 +00:00
BEQ SHR4
LDA ESTKH+1,X
SHR3 CMP #$80
2014-05-04 23:15:45 +00:00
ROR
ROR ESTKL+1,X
DEY
BNE SHR3
STA ESTKH+1,X
SHR4 INX
LDY IPY
JMP NEXTOP
;
SHRX STY IPY
LDA ESTKL,X
CMP #$08
BCC SHRX2
LDY ESTKH+1,X
STY ESTKL+1,X
CPY #$80
LDY #$00
BCC SHRX1
DEY
SHRX1 STY ESTKH+1,X
SEC
SBC #$08
SHRX2 TAY
BEQ SHRX4
LDA ESTKH+1,X
SHRX3 CMP #$80
ROR
ROR ESTKL+1,X
DEY
BNE SHRX3
STA ESTKH+1,X
SHRX4 INX
LDY IPY
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* LOGICAL NOT
;*
2014-05-06 16:43:14 +00:00
LNOT LDA ESTKL,X
2014-05-04 23:15:45 +00:00
ORA ESTKH,X
2014-05-06 16:43:14 +00:00
BEQ LNOT1
2014-05-04 23:15:45 +00:00
LDA #$FF
2014-05-06 16:43:14 +00:00
LNOT1 EOR #$FF
2014-05-04 23:15:45 +00:00
STA ESTKL,X
STA ESTKH,X
JMP NEXTOP
;
2014-05-06 16:43:14 +00:00
LNOTX LDA ESTKL,X
ORA ESTKH,X
2014-05-06 16:43:14 +00:00
BEQ LNOTX1
LDA #$FF
2014-05-06 16:43:14 +00:00
LNOTX1 EOR #$FF
STA ESTKL,X
STA ESTKH,X
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* LOGICAL AND
;*
LAND LDA ESTKL,X
2014-05-04 23:15:45 +00:00
ORA ESTKH,X
BEQ LAND1
LDA ESTKL+1,X
ORA ESTKH+1,X
BEQ LAND1
LDA #$FF
LAND1 STA ESTKL+1,X
2014-05-04 23:15:45 +00:00
STA ESTKH+1,X
INX
JMP NEXTOP
;
LANDX LDA ESTKL,X
ORA ESTKH,X
BEQ LANDX1
LDA ESTKL+1,X
ORA ESTKH+1,X
BEQ LANDX1
LDA #$FF
LANDX1 STA ESTKL+1,X
STA ESTKH+1,X
INX
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
2014-05-06 16:43:14 +00:00
;* LOGICAL OR
2014-05-04 23:15:45 +00:00
;*
LOR LDA ESTKL,X
2014-05-04 23:15:45 +00:00
ORA ESTKH,X
ORA ESTKL+1,X
ORA ESTKH+1,X
BEQ LOR1
LDA #$FF
LOR1 STA ESTKL+1,X
2014-05-04 23:15:45 +00:00
STA ESTKH+1,X
2014-05-06 16:43:14 +00:00
INX
JMP NEXTOP
;
LORX LDA ESTKL,X
ORA ESTKH,X
ORA ESTKL+1,X
ORA ESTKH+1,X
BEQ LORX1
LDA #$FF
LORX1 STA ESTKL+1,X
STA ESTKH+1,X
2014-05-06 16:43:14 +00:00
INX
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* SWAP TOS WITH TOS-1
;*
SWAP STY IPY
LDA ESTKL,X
2014-05-04 23:15:45 +00:00
LDY ESTKL+1,X
STA ESTKL+1,X
STY ESTKL,X
LDA ESTKH,X
LDY ESTKH+1,X
STA ESTKH+1,X
STY ESTKH,X
LDY IPY
JMP NEXTOP
;
SWAPX STY IPY
LDA ESTKL,X
LDY ESTKL+1,X
STA ESTKL+1,X
STY ESTKL,X
LDA ESTKH,X
LDY ESTKH+1,X
STA ESTKH+1,X
STY ESTKH,X
LDY IPY
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* DUPLICATE TOS
;*
DUP DEX
2014-05-04 23:15:45 +00:00
LDA ESTKL+1,X
STA ESTKL,X
LDA ESTKH+1,X
STA ESTKH,X
JMP NEXTOP
;
DUPX DEX
LDA ESTKL+1,X
STA ESTKL,X
LDA ESTKH+1,X
STA ESTKH,X
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* PUSH FROM EVAL STACK TO CALL STACK
;*
PUSH LDA ESTKL,X
2014-05-04 23:15:45 +00:00
PHA
LDA ESTKH,X
PHA
INX
JMP NEXTOP
;
PUSHX LDA ESTKL,X
2014-05-04 23:15:45 +00:00
PHA
LDA ESTKH,X
2014-05-04 23:15:45 +00:00
PHA
INX
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* PULL FROM CALL STACK TO EVAL STACK
;*
PULL DEX
2014-05-04 23:15:45 +00:00
PLA
STA ESTKH,X
PLA
STA ESTKL,X
JMP NEXTOP
;
PULLX DEX
2014-05-04 23:15:45 +00:00
PLA
STA ESTKH,X
PLA
STA ESTKL,X
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* CONSTANT
;*
ZERO DEX
LDA #$00
2014-05-04 23:15:45 +00:00
STA ESTKL,X
STA ESTKH,X
JMP NEXTOP
CB DEX
2014-05-06 16:43:14 +00:00
+INC_IP
LDA (IP),Y
STA ESTKL,X
LDA #$00
STA ESTKH,X
JMP NEXTOP
;
ZEROX DEX
LDA #$00
STA ESTKL,X
STA ESTKH,X
JMP NEXTOPX
CBX DEX
2014-05-06 16:43:14 +00:00
+INC_IP
LDA (IP),Y
STA ESTKL,X
LDA #$00
STA ESTKH,X
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* LOAD ADDRESS & LOAD CONSTANT WORD (SAME THING, WITH OR WITHOUT FIXUP)
2014-05-04 23:15:45 +00:00
;*
2014-05-06 16:43:14 +00:00
LA = *
CW DEX
2014-05-06 16:43:14 +00:00
+INC_IP
LDA (IP),Y
2014-05-04 23:15:45 +00:00
STA ESTKL,X
2014-05-06 16:43:14 +00:00
+INC_IP
LDA (IP),Y
2014-05-04 23:15:45 +00:00
STA ESTKH,X
JMP NEXTOP
;
2014-05-06 16:43:14 +00:00
LAX = *
CWX DEX
2014-05-06 16:43:14 +00:00
+INC_IP
LDA (IP),Y
STA ESTKL,X
2014-05-06 16:43:14 +00:00
+INC_IP
LDA (IP),Y
STA ESTKH,X
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* LOAD VALUE FROM ADDRESS TAG
;*
LB LDA ESTKL,X
2014-05-04 23:15:45 +00:00
STA TMPL
LDA ESTKH,X
STA TMPH
STY IPY
LDY #$00
LDA (TMP),Y
2014-05-04 23:15:45 +00:00
STA ESTKL,X
STY ESTKH,X
LDY IPY
JMP NEXTOP
LW LDA ESTKL,X
2014-05-04 23:15:45 +00:00
STA TMPL
LDA ESTKH,X
STA TMPH
STY IPY
LDY #$00
LDA (TMP),Y
2014-05-04 23:15:45 +00:00
STA ESTKL,X
INY
LDA (TMP),Y
2014-05-04 23:15:45 +00:00
STA ESTKH,X
LDY IPY
JMP NEXTOP
;
2014-05-06 16:43:14 +00:00
LBX STA ALTRDOFF
LDA ESTKL,X
STA TMPL
LDA ESTKH,X
STA TMPH
STY IPY
LDY #$00
LDA (TMP),Y
STA ESTKL,X
STY ESTKH,X
LDY IPY
JMP NEXTOPX
2014-05-06 16:43:14 +00:00
LWX STA ALTRDOFF
LDA ESTKL,X
STA TMPL
LDA ESTKH,X
STA TMPH
STY IPY
LDY #$00
LDA (TMP),Y
STA ESTKL,X
INY
LDA (TMP),Y
STA ESTKH,X
LDY IPY
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* LOAD ADDRESS OF LOCAL FRAME OFFSET
;*
2014-05-06 16:43:14 +00:00
LLA +INC_IP
LDA (IP),Y
DEX
CLC
ADC IFPL
STA ESTKL,X
LDA #$00
ADC IFPH
STA ESTKH,X
JMP NEXTOP
;
2014-05-06 16:43:14 +00:00
LLAX +INC_IP
LDA (IP),Y
2014-05-04 23:15:45 +00:00
DEX
CLC
ADC IFPL
2014-05-04 23:15:45 +00:00
STA ESTKL,X
LDA #$00
ADC IFPH
2014-05-04 23:15:45 +00:00
STA ESTKH,X
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* LOAD VALUE FROM LOCAL FRAME OFFSET
;*
2014-05-06 16:43:14 +00:00
LLB +INC_IP
LDA (IP),Y
STY IPY
2014-05-04 23:15:45 +00:00
TAY
DEX
LDA (IFP),Y
2014-05-04 23:15:45 +00:00
STA ESTKL,X
LDA #$00
STA ESTKH,X
LDY IPY
JMP NEXTOP
2014-05-06 16:43:14 +00:00
LLW +INC_IP
LDA (IP),Y
STY IPY
2014-05-04 23:15:45 +00:00
TAY
DEX
LDA (IFP),Y
2014-05-04 23:15:45 +00:00
STA ESTKL,X
INY
LDA (IFP),Y
2014-05-04 23:15:45 +00:00
STA ESTKH,X
LDY IPY
JMP NEXTOP
;
2014-05-06 16:43:14 +00:00
LLBX +INC_IP
LDA (IP),Y
STY IPY
TAY
DEX
2014-05-06 16:43:14 +00:00
STA ALTRDOFF
LDA (IFP),Y
STA ESTKL,X
LDA #$00
STA ESTKH,X
LDY IPY
JMP NEXTOP
2014-05-06 16:43:14 +00:00
LLWX +INC_IP
LDA (IP),Y
STY IPY
TAY
DEX
2014-05-06 16:43:14 +00:00
STA ALTRDOFF
LDA (IFP),Y
STA ESTKL,X
INY
LDA (IFP),Y
STA ESTKH,X
LDY IPY
JMP NEXTOP
2014-05-04 23:15:45 +00:00
;*
;* LOAD VALUE FROM ABSOLUTE ADDRESS
;*
2014-05-06 16:43:14 +00:00
LAB +INC_IP
LDA (IP),Y
2014-05-04 23:15:45 +00:00
STA TMPL
2014-05-06 16:43:14 +00:00
+INC_IP
LDA (IP),Y
2014-05-04 23:15:45 +00:00
STA TMPH
STY IPY
LDY #$00
LDA (TMP),Y
2014-05-04 23:15:45 +00:00
DEX
STA ESTKL,X
STY ESTKH,X
LDY IPY
JMP NEXTOP
2014-05-06 16:43:14 +00:00
LAW +INC_IP
LDA (IP),Y
2014-05-04 23:15:45 +00:00
STA TMPL
2014-05-06 16:43:14 +00:00
+INC_IP
LDA (IP),Y
2014-05-04 23:15:45 +00:00
STA TMPH
STY IPY
LDY #$00
LDA (TMP),Y
2014-05-04 23:15:45 +00:00
DEX
STA ESTKL,X
INY
LDA (TMP),Y
2014-05-04 23:15:45 +00:00
STA ESTKH,X
LDY IPY
JMP NEXTOP
;
2014-05-06 16:43:14 +00:00
LABX +INC_IP
LDA (IP),Y
STA TMPL
2014-05-06 16:43:14 +00:00
+INC_IP
LDA (IP),Y
STA TMPH
STY IPY
2014-05-06 16:43:14 +00:00
STA ALTRDOFF
LDY #$00
LDA (TMP),Y
DEX
STA ESTKL,X
STY ESTKH,X
LDY IPY
JMP NEXTOPX
2014-05-06 16:43:14 +00:00
LAWX +INC_IP
LDA (IP),Y
STA TMPL
2014-05-06 16:43:14 +00:00
+INC_IP
LDA (IP),Y
STA TMPH
STY IPY
2014-05-06 16:43:14 +00:00
STA ALTRDOFF
LDY #$00
LDA (TMP),Y
DEX
STA ESTKL,X
INY
LDA (TMP),Y
STA ESTKH,X
LDY IPY
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* STORE VALUE TO ADDRESS
;*
SB LDA ESTKL+1,X
2014-05-04 23:15:45 +00:00
STA TMPL
LDA ESTKH+1,X
STA TMPH
LDA ESTKL,X
STY IPY
LDY #$00
STA (TMP),Y
2014-05-04 23:15:45 +00:00
INX
INX
LDY IPY
JMP NEXTOP
SW LDA ESTKL+1,X
2014-05-04 23:15:45 +00:00
STA TMPL
LDA ESTKH+1,X
STA TMPH
STY IPY
LDY #$00
2014-05-04 23:15:45 +00:00
LDA ESTKL,X
STA (TMP),Y
INY
2014-05-04 23:15:45 +00:00
LDA ESTKH,X
STA (TMP),Y
2014-05-04 23:15:45 +00:00
INX
INX
LDY IPY
JMP NEXTOP
;
SBX LDA ESTKL+1,X
STA TMPL
LDA ESTKH+1,X
STA TMPH
LDA ESTKL,X
STY IPY
2014-05-06 16:43:14 +00:00
STA ALTRDOFF
LDY #$00
STA (TMP),Y
INX
INX
LDY IPY
JMP NEXTOPX
SWX LDA ESTKL+1,X
STA TMPL
LDA ESTKH+1,X
STA TMPH
STY IPY
2014-05-06 16:43:14 +00:00
STA ALTRDOFF
LDY #$00
LDA ESTKL,X
STA (TMP),Y
INY
LDA ESTKH,X
STA (TMP),Y
INX
INX
LDY IPY
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* STORE VALUE TO LOCAL FRAME OFFSET
;*
2014-05-06 16:43:14 +00:00
SLB +INC_IP
LDA (IP),Y
STY IPY
TAY
LDA ESTKL,X
STA (IFP),Y
INX
LDY IPY
JMP NEXTOP
2014-05-06 16:43:14 +00:00
SLW +INC_IP
LDA (IP),Y
STY IPY
2014-05-04 23:15:45 +00:00
TAY
LDA ESTKL,X
2014-05-06 16:43:14 +00:00
STA (IFP),Y
INY
LDA ESTKH,X
2014-05-06 16:43:14 +00:00
STA (IFP),Y
2014-05-04 23:15:45 +00:00
INX
LDY IPY
JMP NEXTOP
;
2014-05-06 16:43:14 +00:00
SLBX +INC_IP
LDA (IP),Y
STY IPY
2014-05-06 16:43:14 +00:00
STA ALTRDOFF
TAY
LDA ESTKL,X
STA (IFP),Y
INX
LDY IPY
JMP NEXTOPX
2014-05-06 16:43:14 +00:00
SLWX +INC_IP
LDA (IP),Y
STY IPY
2014-05-06 16:43:14 +00:00
STA ALTRDOFF
2014-05-04 23:15:45 +00:00
TAY
LDA ESTKL,X
2014-05-06 16:43:14 +00:00
STA (IFP),Y
2014-05-04 23:15:45 +00:00
INY
LDA ESTKH,X
2014-05-06 16:43:14 +00:00
STA (IFP),Y
2014-05-04 23:15:45 +00:00
INX
LDY IPY
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* STORE VALUE TO LOCAL FRAME OFFSET WITHOUT POPPING STACK
;*
2014-05-06 16:43:14 +00:00
DLB +INC_IP
LDA (IP),Y
STY IPY
2014-05-04 23:15:45 +00:00
TAY
LDA ESTKL,X
STA (IFP),Y
LDY IPY
JMP NEXTOP
2014-05-06 16:43:14 +00:00
DLW +INC_IP
LDA (IP),Y
STY IPY
2014-05-04 23:15:45 +00:00
TAY
LDA ESTKL,X
STA (IFP),Y
2014-05-04 23:15:45 +00:00
INY
LDA ESTKH,X
STA (IFP),Y
LDY IPY
JMP NEXTOP
;
2014-05-06 16:43:14 +00:00
DLBX +INC_IP
LDA (IP),Y
STY IPY
2014-05-06 16:43:14 +00:00
STA ALTRDOFF
TAY
LDA ESTKL,X
STA (IFP),Y
LDY IPY
JMP NEXTOPX
2014-05-06 16:43:14 +00:00
DLWX +INC_IP
LDA (IP),Y
STY IPY
2014-05-06 16:43:14 +00:00
STA ALTRDOFF
TAY
LDA ESTKL,X
STA (IFP),Y
INY
LDA ESTKH,X
STA (IFP),Y
LDY IPY
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* STORE VALUE TO ABSOLUTE ADDRESS
;*
2014-05-06 16:43:14 +00:00
SAB +INC_IP
LDA (IP),Y
2014-05-04 23:15:45 +00:00
STA TMPL
2014-05-06 16:43:14 +00:00
+INC_IP
LDA (IP),Y
2014-05-04 23:15:45 +00:00
STA TMPH
LDA ESTKL,X
STY IPY
LDY #$00
STA (TMP),Y
2014-05-04 23:15:45 +00:00
INX
LDY IPY
JMP NEXTOP
2014-05-06 16:43:14 +00:00
SAW +INC_IP
LDA (IP),Y
2014-05-04 23:15:45 +00:00
STA TMPL
2014-05-06 16:43:14 +00:00
+INC_IP
LDA (IP),Y
2014-05-04 23:15:45 +00:00
STA TMPH
STY IPY
LDY #$00
2014-05-04 23:15:45 +00:00
LDA ESTKL,X
STA (TMP),Y
INY
2014-05-04 23:15:45 +00:00
LDA ESTKH,X
STA (TMP),Y
2014-05-04 23:15:45 +00:00
INX
LDY IPY
JMP NEXTOP
;
2014-05-06 16:43:14 +00:00
SABX +INC_IP
LDA (IP),Y
STA TMPL
2014-05-06 16:43:14 +00:00
+INC_IP
LDA (IP),Y
STA TMPH
LDA ESTKL,X
STY IPY
2014-05-06 16:43:14 +00:00
STA ALTRDOFF
LDY #$00
STA (TMP),Y
INX
LDY IPY
JMP NEXTOPX
2014-05-06 16:43:14 +00:00
SAWX +INC_IP
LDA (IP),Y
STA TMPL
2014-05-06 16:43:14 +00:00
+INC_IP
LDA (IP),Y
STA TMPH
STY IPY
2014-05-06 16:43:14 +00:00
STA ALTRDOFF
LDY #$00
LDA ESTKL,X
STA (TMP),Y
INY
LDA ESTKH,X
STA (TMP),Y
INX
LDY IPY
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* STORE VALUE TO ABSOLUTE ADDRESS WITHOUT POPPING STACK
;*
2014-05-06 16:43:14 +00:00
DAB +INC_IP
LDA (IP),Y
2014-05-04 23:15:45 +00:00
STA TMPL
2014-05-06 16:43:14 +00:00
+INC_IP
LDA (IP),Y
2014-05-04 23:15:45 +00:00
STA TMPH
STY IPY
LDY #$00
2014-05-04 23:15:45 +00:00
LDA ESTKL,X
STA (TMP),Y
LDY IPY
JMP NEXTOP
2014-05-06 16:43:14 +00:00
DAW +INC_IP
LDA (IP),Y
2014-05-04 23:15:45 +00:00
STA TMPL
2014-05-06 16:43:14 +00:00
+INC_IP
LDA (IP),Y
2014-05-04 23:15:45 +00:00
STA TMPH
STY IPY
LDY #$00
2014-05-04 23:15:45 +00:00
LDA ESTKL,X
STA (TMP),Y
INY
2014-05-04 23:15:45 +00:00
LDA ESTKH,X
STA (TMP),Y
LDY IPY
JMP NEXTOP
;
2014-05-06 16:43:14 +00:00
DABX +INC_IP
LDA (IP),Y
STA TMPL
2014-05-06 16:43:14 +00:00
+INC_IP
LDA (IP),Y
STA TMPH
STY IPY
2014-05-06 16:43:14 +00:00
STA ALTRDOFF
LDY #$00
LDA ESTKL,X
STA (TMP),Y
LDY IPY
JMP NEXTOPX
2014-05-06 16:43:14 +00:00
DAWX +INC_IP
LDA (IP),Y
STA TMPL
2014-05-06 16:43:14 +00:00
+INC_IP
LDA (IP),Y
STA TMPH
STY IPY
2014-05-06 16:43:14 +00:00
STA ALTRDOFF
LDY #$00
LDA ESTKL,X
STA (TMP),Y
INY
LDA ESTKH,X
STA (TMP),Y
LDY IPY
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* COMPARES
;*
ISEQ STY IPY
2014-05-04 23:15:45 +00:00
LDY #$00
LDA ESTKL,X
CMP ESTKL+1,X
BNE ISEQ1
LDA ESTKH,X
CMP ESTKH+1,X
BNE ISEQ1
DEY
ISEQ1 STY ESTKL+1,X
2014-05-04 23:15:45 +00:00
STY ESTKH+1,X
INX
LDY IPY
JMP NEXTOP
;
ISEQX STY IPY
LDY #$00
LDA ESTKL,X
CMP ESTKL+1,X
BNE ISEQ1
LDA ESTKH,X
CMP ESTKH+1,X
BNE ISEQX1
DEY
ISEQX1 STY ESTKL+1,X
STY ESTKH+1,X
INX
LDY IPY
JMP NEXTOPX
;
ISNE STY IPY
2014-05-04 23:15:45 +00:00
LDY #$FF
LDA ESTKL,X
CMP ESTKL+1,X
BNE ISNE1
LDA ESTKH,X
CMP ESTKH+1,X
BNE ISNE1
INY
ISNE1 STY ESTKL+1,X
2014-05-04 23:15:45 +00:00
STY ESTKH+1,X
INX
LDY IPY
JMP NEXTOP
;
ISNEX STY IPY
LDY #$FF
LDA ESTKL,X
CMP ESTKL+1,X
BNE ISNE1
LDA ESTKH,X
CMP ESTKH+1,X
BNE ISNEX1
INY
ISNEX1 STY ESTKL+1,X
STY ESTKH+1,X
INX
LDY IPY
JMP NEXTOPX
;
ISGE STY IPY
2014-05-04 23:15:45 +00:00
LDY #$00
LDA ESTKL+1,X
CMP ESTKL,X
LDA ESTKH+1,X
SBC ESTKH,X
BVC ISGE1
EOR #$80
ISGE1 BMI ISGE2
2014-05-04 23:15:45 +00:00
DEY
ISGE2 STY ESTKL+1,X
2014-05-04 23:15:45 +00:00
STY ESTKH+1,X
INX
LDY IPY
JMP NEXTOP
;
ISGEX STY IPY
LDY #$00
LDA ESTKL+1,X
CMP ESTKL,X
LDA ESTKH+1,X
SBC ESTKH,X
BVC ISGEX1
EOR #$80
ISGEX1 BMI ISGEX2
DEY
ISGEX2 STY ESTKL+1,X
STY ESTKH+1,X
INX
LDY IPY
JMP NEXTOPX
;
ISGT STY IPY
2014-05-04 23:15:45 +00:00
LDY #$00
LDA ESTKL,X
CMP ESTKL+1,X
LDA ESTKH,X
SBC ESTKH+1,X
BVC ISGT1
EOR #$80
ISGT1 BPL ISGT2
2014-05-04 23:15:45 +00:00
DEY
ISGT2 STY ESTKL+1,X
2014-05-04 23:15:45 +00:00
STY ESTKH+1,X
INX
LDY IPY
JMP NEXTOP
;
ISGTX STY IPY
LDY #$00
LDA ESTKL,X
CMP ESTKL+1,X
LDA ESTKH,X
SBC ESTKH+1,X
BVC ISGTX1
EOR #$80
ISGTX1 BPL ISGTX2
DEY
ISGTX2 STY ESTKL+1,X
STY ESTKH+1,X
INX
LDY IPY
JMP NEXTOPX
;
ISLE STY IPY
2014-05-04 23:15:45 +00:00
LDY #$00
LDA ESTKL,X
CMP ESTKL+1,X
LDA ESTKH,X
SBC ESTKH+1,X
BVC ISLE1
EOR #$80
ISLE1 BMI ISLE2
2014-05-04 23:15:45 +00:00
DEY
ISLE2 STY ESTKL+1,X
2014-05-04 23:15:45 +00:00
STY ESTKH+1,X
INX
LDY IPY
JMP NEXTOP
;
ISLEX STY IPY
LDY #$00
LDA ESTKL,X
CMP ESTKL+1,X
LDA ESTKH,X
SBC ESTKH+1,X
BVC ISLEX1
EOR #$80
ISLEX1 BMI ISLEX2
DEY
ISLEX2 STY ESTKL+1,X
STY ESTKH+1,X
INX
LDY IPY
JMP NEXTOPX
;
ISLT STY IPY
2014-05-04 23:15:45 +00:00
LDY #$00
LDA ESTKL+1,X
CMP ESTKL,X
LDA ESTKH+1,X
SBC ESTKH,X
BVC ISLT1
EOR #$80
ISLT1 BPL ISLT2
2014-05-04 23:15:45 +00:00
DEY
ISLT2 STY ESTKL+1,X
2014-05-04 23:15:45 +00:00
STY ESTKH+1,X
INX
LDY IPY
JMP NEXTOP
;
ISLTX STY IPY
LDY #$00
LDA ESTKL+1,X
CMP ESTKL,X
LDA ESTKH+1,X
SBC ESTKH,X
BVC ISLTX1
EOR #$80
ISLTX1 BPL ISLTX2
DEY
ISLTX2 STY ESTKL+1,X
STY ESTKH+1,X
INX
LDY IPY
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* BRANCHES
2014-05-04 23:15:45 +00:00
;*
BRTRU INX
2014-05-04 23:15:45 +00:00
LDA ESTKH-1,X
ORA ESTKL-1,X
BNE BRNCH
2014-05-06 16:43:14 +00:00
NOBRNCH +INC_IP
+INC_IP
JMP NEXTOP
BRFLS INX
2014-05-04 23:15:45 +00:00
LDA ESTKH-1,X
ORA ESTKL-1,X
BNE NOBRNCH
BRNCH STY IPY
LDA IPH
STA TMPH
LDA IPL
2014-05-06 16:43:14 +00:00
+INC_IP
2014-05-04 23:15:45 +00:00
CLC
ADC (IP),Y
STA TMPL
LDA TMPH
2014-05-06 16:43:14 +00:00
+INC_IP
ADC (IP),Y
STA IPH
LDA TMPL
STA IPL
LDY IPY
JMP FETCHOP
BREQ INX
2014-05-04 23:15:45 +00:00
LDA ESTKL-1,X
CMP ESTKL,X
BNE NOBRNCH
2014-05-04 23:15:45 +00:00
LDA ESTKL-1,X
CMP ESTKL,X
BEQ BRNCH
BNE NOBRNCH
BRNE INX
2014-05-04 23:15:45 +00:00
LDA ESTKL-1,X
CMP ESTKL,X
BNE BRNCH
2014-05-04 23:15:45 +00:00
LDA ESTKL-1,X
CMP ESTKL,X
BEQ NOBRNCH
BNE BRNCH
BRGT INX
2014-05-04 23:15:45 +00:00
LDA ESTKL-1,X
CMP ESTKL,X
LDA ESTKH-1,X
SBC ESTKH,X
BMI BRNCH
BPL NOBRNCH
BRLT INX
2014-05-04 23:15:45 +00:00
LDA ESTKL,X
CMP ESTKL-1,X
LDA ESTKH,X
SBC ESTKH-1,X
BMI BRNCH
BPL NOBRNCH
IBRNCH LDA IPL
CLC
ADC ESTKL,X
STA IPL
LDA IPH
ADC ESTKH,X
STA IPH
INX
JMP FETCHOP
;
BRTRUX INX
LDA ESTKH-1,X
ORA ESTKL-1,X
BNE BRNCHX
2014-05-06 16:43:14 +00:00
NOBRNCHX +INC_IP
+INC_IP
JMP NEXTOPX
BRFLSX INX
LDA ESTKH-1,X
ORA ESTKL-1,X
BNE NOBRNCHX
BRNCHX STY IPY
LDA IPH
STA TMPH
LDA IPL
2014-05-06 16:43:14 +00:00
+INC_IP
CLC
ADC (IP),Y
STA TMPL
LDA TMPH
2014-05-06 16:43:14 +00:00
+INC_IP
ADC (IP),Y
STA IPH
LDA TMPL
STA IPL
LDY IPY
JMP FETCHOPX
BREQX INX
LDA ESTKL-1,X
CMP ESTKL,X
BNE NOBRNCHX
LDA ESTKL-1,X
CMP ESTKL,X
BEQ BRNCHX
BNE NOBRNCHX
BRNEX INX
LDA ESTKL-1,X
CMP ESTKL,X
BNE BRNCHX
LDA ESTKL-1,X
CMP ESTKL,X
BEQ NOBRNCHX
BNE BRNCHX
BRGTX INX
LDA ESTKL-1,X
CMP ESTKL,X
LDA ESTKH-1,X
SBC ESTKH,X
BMI BRNCHX
BPL NOBRNCHX
BRLTX INX
2014-05-04 23:15:45 +00:00
LDA ESTKL,X
CMP ESTKL-1,X
2014-05-04 23:15:45 +00:00
LDA ESTKH,X
SBC ESTKH-1,X
BMI BRNCHX
BPL NOBRNCHX
IBRNCHX LDA IPL
CLC
ADC ESTKL,X
STA IPL
LDA IPH
ADC ESTKH,X
STA IPH
2014-05-04 23:15:45 +00:00
INX
JMP FETCHOPX
2014-05-04 23:15:45 +00:00
;*
;* CALL INTO ABSOLUTE ADDRESS (NATIVE CODE)
;*
2014-05-06 16:43:14 +00:00
CALL +INC_IP
LDA (IP),Y
2014-05-06 16:43:14 +00:00
STA CALLADR+1
+INC_IP
LDA (IP),Y
2014-05-06 16:43:14 +00:00
STA CALLADR+2
LDA IPH
2014-05-04 23:15:45 +00:00
PHA
LDA IPL
PHA
TYA
2014-05-04 23:15:45 +00:00
PHA
2014-05-06 16:43:14 +00:00
JSR CALL3
2014-05-04 23:15:45 +00:00
PLA
TAY
PLA
STA IPL
2014-05-04 23:15:45 +00:00
PLA
STA IPH
JMP NEXTOP
;
2014-05-06 16:43:14 +00:00
CALLX +INC_IP
LDA (IP),Y
2014-05-06 16:43:14 +00:00
PHA
+INC_IP
LDA (IP),Y
2014-05-06 16:43:14 +00:00
STA ALTRDOFF
STA CALLADR+2
PLA
STA CALLADR+1
LDA IPH
PHA
LDA IPL
PHA
TYA
PHA
CLI
2014-05-06 16:43:14 +00:00
JSR CALL3
PLA
TAY
PLA
STA IPL
PLA
STA IPH
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* INDIRECT CALL TO ADDRESS (NATIVE CODE)
;*
ICAL LDA ESTKL,X
2014-05-04 23:15:45 +00:00
STA TMPL
LDA ESTKH,X
STA TMPH
INX
LDA IPH
PHA
LDA IPL
PHA
TYA
2014-05-04 23:15:45 +00:00
PHA
LDY #$00
LDA (TMP),Y
2014-05-06 16:43:14 +00:00
STA CALLADR+1
INY
LDA (TMP),Y
2014-05-06 16:43:14 +00:00
STA CALLADR+2
CLI
2014-05-06 16:43:14 +00:00
JSR CALL3
2014-05-04 23:15:45 +00:00
PLA
TAY
PLA
STA IPL
2014-05-04 23:15:45 +00:00
PLA
STA IPH
JMP NEXTOP
;
ICALX LDA ESTKL,X
STA TMPL
LDA ESTKH,X
STA TMPH
INX
LDA IPH
PHA
LDA IPL
PHA
TYA
PHA
2014-05-06 16:43:14 +00:00
STA ALTRDOFF
LDY #$00
LDA (TMP),Y
2014-05-06 16:43:14 +00:00
STA CALLADR+1
INY
LDA (TMP),Y
2014-05-06 16:43:14 +00:00
STA CALLADR+2
CLI
2014-05-06 16:43:14 +00:00
JSR CALL3
PLA
TAY
PLA
STA IPL
PLA
STA IPH
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* ENTER FUNCTION WITH FRAME SIZE AND PARAM COUNT
;*
2014-05-06 16:43:14 +00:00
ENTER +INC_IP
LDA (IP),Y
2014-05-04 23:15:45 +00:00
STA FRMSZ
2014-05-06 16:43:14 +00:00
+INC_IP
LDA (IP),Y
STA NPARMS
STY IPY
LDA IFPL
2014-05-04 23:15:45 +00:00
PHA
SEC
SBC FRMSZ
STA IFPL
LDA IFPH
2014-05-04 23:15:45 +00:00
PHA
SBC #$00
STA IFPH
2014-05-04 23:15:45 +00:00
LDY #$01
PLA
STA (IFP),Y
2014-05-04 23:15:45 +00:00
DEY
PLA
STA (IFP),Y
2014-05-04 23:15:45 +00:00
LDA NPARMS
BEQ ENTER5
ASL
TAY
INY
ENTER4 LDA ESTKH,X
STA (IFP),Y
2014-05-04 23:15:45 +00:00
DEY
LDA ESTKL,X
STA (IFP),Y
2014-05-04 23:15:45 +00:00
DEY
INX
DEC TMPL
BNE ENTER4
ENTER5 LDY IPY
JMP NEXTOP
;
2014-05-06 16:43:14 +00:00
ENTERX +INC_IP
LDA (IP),Y
STA FRMSZ
2014-05-06 16:43:14 +00:00
+INC_IP
LDA (IP),Y
STA NPARMS
STY IPY
2014-05-06 16:43:14 +00:00
STA ALTRDOFF
LDA IFPL
PHA
SEC
SBC FRMSZ
STA IFPL
LDA IFPH
2014-05-04 23:15:45 +00:00
PHA
SBC #$00
STA IFPH
LDY #$01
2014-05-04 23:15:45 +00:00
PLA
STA (IFP),Y
DEY
2014-05-04 23:15:45 +00:00
PLA
STA (IFP),Y
LDA NPARMS
BEQ ENTERX5
ASL
2014-05-04 23:15:45 +00:00
TAY
INY
ENTERX4 LDA ESTKH,X
STA (IFP),Y
DEY
2014-05-04 23:15:45 +00:00
LDA ESTKL,X
STA (IFP),Y
DEY
2014-05-04 23:15:45 +00:00
INX
DEC TMPL
BNE ENTERX4
ENTERX5 LDY IPY
JMP NEXTOPX
2014-05-04 23:15:45 +00:00
;*
;* LEAVE FUNCTION
2014-05-04 23:15:45 +00:00
;*
LEAVE LDY #$01
LDA (IFP),Y
DEY
2014-05-04 23:15:45 +00:00
PHA
LDA (IFP),Y
STA IFPL
2014-05-04 23:15:45 +00:00
PLA
STA IFPH
RET RTS
;
2014-05-06 16:43:14 +00:00
LEAVEX STA ALTRDOFF
LDY #$01
LDA (IFP),Y
DEY
2014-05-04 23:15:45 +00:00
PHA
LDA (IFP),Y
STA IFPL
2014-05-04 23:15:45 +00:00
PLA
STA IFPH
CLI
RTS
2014-05-06 16:43:14 +00:00
RETX STA ALTRDOFF
CLI
2014-05-04 23:15:45 +00:00
RTS
2014-05-07 02:18:36 +00:00
VMEND = *
}