1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2024-08-25 18:29:11 +00:00

Update ops $90-$9E

This commit is contained in:
David Schmenk 2018-03-26 11:04:45 -07:00
parent 4717e01862
commit 15c779d63b

View File

@ -191,7 +191,7 @@ def compiler(defptr)#0
//
codeptr = *jitcodeptr
VX = 0 // Virtual X register
A_IS_TOSL = FALSE
A_IS_TOSL = FALSE
i = 0
if ^bytecode == $58
//puts("ENTER "); puti(^(bytecode+1)); //putc(',');puti(^(bytecode+2))
@ -221,7 +221,7 @@ def compiler(defptr)#0
if A_IS_TOSL & TOSL_DIRTY
*codeptr = $D095+(VX<<8) // STA ESTKL,X
codeptr = codeptr + 2
A_IS_TOSL = FALSE
A_IS_TOSL = FALSE
fin
codeptr, VX = resolveX(codeptr, VX)
opcode = opcode & $FE
@ -300,7 +300,7 @@ def compiler(defptr)#0
//^codeptr = $C0+VX; codeptr++ // ESTKH
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
A_IS_TOSL = TOSL_DIRTY
A_IS_TOSL = TOSL_DIRTY
break
is $22 // BREQ
i++
@ -413,7 +413,7 @@ def compiler(defptr)#0
fin
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
A_IS_TOSL = TOSL_DIRTY
A_IS_TOSL = TOSL_DIRTY
i++
break
is $28 // LLA
@ -518,18 +518,18 @@ def compiler(defptr)#0
is $30 // DROP
//puts("DROP")
VX++ // INX
A_IS_TOSL = FALSE
A_IS_TOSL = FALSE
break
is $34 // DUP
//puts("DUP")
if A_IS_TOSL & TOSL_DIRTY
*codeptr = $D095+(VX<<8) // STA ESTKL,X
codeptr = codeptr + 2
elsif not A_IS_TOSL
if not A_IS_TOSL
*codeptr = $D0B5+(VX<<8) // LDA ESTKL,X
codeptr = codeptr + 2
//^codeptr = $B5; codeptr++ // LDA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
elsif A_IS_TOSL & TOSL_DIRTY
*codeptr = $D095+(VX<<8) // STA ESTKL,X
codeptr = codeptr + 2
fin
VX-- // DEX
codeptr=>0 = ($C0B4+$0100)+(VX<<8) // LDY ESTKH+1,X
@ -575,7 +575,7 @@ def compiler(defptr)#0
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr = codeptr + 7
A_IS_TOSL = TOSL_DIRTY
A_IS_TOSL = TOSL_DIRTY
break
is $3A // SUBI
i++
@ -598,7 +598,7 @@ def compiler(defptr)#0
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr = codeptr + 7
A_IS_TOSL = TOSL_DIRTY
A_IS_TOSL = TOSL_DIRTY
break
is $3C // ANDI
i++
@ -616,7 +616,7 @@ def compiler(defptr)#0
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr = codeptr + 4
A_IS_TOSL = TOSL_DIRTY
A_IS_TOSL = TOSL_DIRTY
break
is $3E // ORI
i++
@ -631,7 +631,7 @@ def compiler(defptr)#0
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr = codeptr + 2
A_IS_TOSL = TOSL_DIRTY
A_IS_TOSL = TOSL_DIRTY
break
// ISEQ,ISNE,ISGT,ISLT,ISGE,ISLE,BRFLS,BRTRU ; 40 42 44 46 48 4A 4C 4E
is $40 // ISEQ
@ -667,8 +667,8 @@ def compiler(defptr)#0
VX++ // INX
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr = codeptr + 16
A_IS_TOSL = TOSL_DIRTY
codeptr = codeptr + 16
A_IS_TOSL = TOSL_DIRTY
break
is $42 // ISNE
//puts("ISNE")
@ -703,8 +703,8 @@ def compiler(defptr)#0
VX++ // INX
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr = codeptr + 16
A_IS_TOSL = TOSL_DIRTY
codeptr = codeptr + 16
A_IS_TOSL = TOSL_DIRTY
break
is $44 // ISGT
//puts("ISGT")
@ -742,8 +742,8 @@ def compiler(defptr)#0
VX++ // INX
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr = codeptr + 18
A_IS_TOSL = TOSL_DIRTY
codeptr = codeptr + 18
A_IS_TOSL = TOSL_DIRTY
break
is $46
//puts("ISLT")
@ -784,8 +784,8 @@ def compiler(defptr)#0
VX++ // INX
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr = codeptr + 20
A_IS_TOSL = TOSL_DIRTY
codeptr = codeptr + 20
A_IS_TOSL = TOSL_DIRTY
break
is $48
//puts("ISGE")
@ -826,8 +826,8 @@ def compiler(defptr)#0
VX++ // INX
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr = codeptr + 20
A_IS_TOSL = TOSL_DIRTY
codeptr = codeptr + 20
A_IS_TOSL = TOSL_DIRTY
break
is $4A // ISLE
//puts("ISLE")
@ -865,16 +865,15 @@ def compiler(defptr)#0
VX++ // INX
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr = codeptr + 18
A_IS_TOSL = TOSL_DIRTY
codeptr = codeptr + 18
A_IS_TOSL = TOSL_DIRTY
break
is $4C // BRFLS
i++
dest = i + *(bytecode+i)
i++
//puts("BRFLS "); puti(dest)
//VX++ //^codeptr = $E8; codeptr++ // INX
codeptr, VX = resolveX(codeptr, VX + 1)
codeptr, VX = resolveX(codeptr, VX + 1) //VX++ // INX
if not A_IS_TOSL
*codeptr = ($D0B5-$0100)+(VX<<8) // LDA ESTKL-1,X
codeptr = codeptr + 2
@ -903,8 +902,7 @@ def compiler(defptr)#0
dest = i + *(bytecode+i)
i++
//puts("BRTRU "); puti(dest)
//VX++ //^codeptr = $E8; codeptr++ // INX
codeptr, VX = resolveX(codeptr, VX + 1)
codeptr, VX = resolveX(codeptr, VX + 1) //VX++ // INX
if not A_IS_TOSL
*codeptr = ($D0B5-$0100)+(VX<<8) // LDA ESTKL-1,X
codeptr = codeptr + 2
@ -1044,8 +1042,8 @@ def compiler(defptr)#0
codeptr=>3 = $00A0 // LDY #$00
//^codeptr = $A0; codeptr++ // LDY #imm
//^codeptr = $00; codeptr++ // $00
codeptr = codeptr + 5
A_IS_TOSL = FALSE
codeptr = codeptr + 5
A_IS_TOSL = FALSE
i++
break
is $56 // ICAL
@ -1080,8 +1078,8 @@ def compiler(defptr)#0
codeptr=>3 = $00A0 // LDY #$00
//^codeptr = $A0; codeptr++ // LDY #imm
//^codeptr = $00; codeptr++ // $00
codeptr = codeptr + 5
A_IS_TOSL = FALSE
codeptr = codeptr + 5
A_IS_TOSL = FALSE
break
is $5A // LEAVE
i++
@ -1101,8 +1099,8 @@ def compiler(defptr)#0
codeptr=>3 = $5A + (^(bytecode+i)<<8) // LEAVE CODE AND OPERAND
//^codeptr = $5A; codeptr++ // LEAVE CODE
//^codeptr = ^(bytecode+i); codeptr++ // LEAVE OPERAND
codeptr = codeptr + 5
A_IS_TOSL = FALSE
codeptr = codeptr + 5
A_IS_TOSL = FALSE
break
is $5C // RET
//puts("RET")
@ -1113,7 +1111,7 @@ def compiler(defptr)#0
codeptr, VX = resolveX(codeptr, VX)
^codeptr = $60 //RTS
codeptr++
A_IS_TOSL = FALSE
A_IS_TOSL = FALSE
break
is $5E // CFFB
i++
@ -1134,8 +1132,8 @@ def compiler(defptr)#0
//^codeptr = ^(bytecode+i); codeptr++
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr = codeptr + 6
A_IS_TOSL = TOSL_DIRTY
codeptr = codeptr + 6
A_IS_TOSL = TOSL_DIRTY
break
// LB,LW,LLB,LLW,LAB,LAW,DLB,DLW ; 60 62 64 66 68 6A 6C 6E
is $60 // LB
@ -1155,8 +1153,8 @@ def compiler(defptr)#0
//^codeptr = $C0+VX; codeptr++ // ESTKH
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr = codeptr + 6
A_IS_TOSL = TOSL_DIRTY
codeptr = codeptr + 6
A_IS_TOSL = TOSL_DIRTY
break
is $62 // LW
//puts("LW")
@ -1188,8 +1186,8 @@ def compiler(defptr)#0
codeptr=>14 = $C095+(VX<<8) // STA ESTKH,X
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $C0+VX; codeptr++ // ESTKH
codeptr = codeptr + 16
A_IS_TOSL = FALSE
codeptr = codeptr + 16
A_IS_TOSL = FALSE
break
is $64 // LLB
i++
@ -1220,7 +1218,7 @@ def compiler(defptr)#0
//^codeptr = $C0+VX; codeptr++ // ESTKH
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr = codeptr + 2
codeptr = codeptr + 2
A_IS_TOSL = TOSL_DIRTY
break
is $66 // LLW
@ -1315,7 +1313,7 @@ def compiler(defptr)#0
if not A_IS_TOSL
*codeptr = $D0B5+(VX<<8) // LDA ESTKL,X
codeptr = codeptr + 2
A_IS_TOSL = TOSL_CLEAN
A_IS_TOSL = TOSL_CLEAN
fin
if ^(bytecode+i) <> 0
*codeptr = $A0+(^(bytecode+i)<<8) // LDY #imm
@ -1370,7 +1368,7 @@ def compiler(defptr)#0
//^codeptr = $A0; codeptr++ // LDY #imm
//^codeptr = $00; codeptr++ // $00
fin
A_IS_TOSL = TOSL_CLEAN
A_IS_TOSL = TOSL_CLEAN
break
// SB,SW,SLB,SLW,SAB,SAW,DAB,DAW ; 70 72 74 76 78 7A 7C 7E
is $70 // SB
@ -1390,9 +1388,9 @@ def compiler(defptr)#0
//^codeptr = $C0-1+VX; codeptr++ // ESTKH-1
//^codeptr = $E8; codeptr++ // INX
//^codeptr = $E8; codeptr++ // INX
VX = VX + 2 // INX INX
codeptr = codeptr + 6
VX = VX + 2
A_IS_TOSL = FALSE
A_IS_TOSL = FALSE
break
is $72 // SW
//puts("SW")
@ -1426,9 +1424,9 @@ def compiler(defptr)#0
//^codeptr = $C0-1+VX; codeptr++ // ESTKH-1
//^codeptr = $E8; codeptr++ // INX
//^codeptr = $E8; codeptr++ // INX
VX = VX + 2 // INX INX
codeptr = codeptr + 16
VX = VX + 2
A_IS_TOSL = FALSE
A_IS_TOSL = FALSE
break
is $74 // SLB
i++
@ -1453,8 +1451,8 @@ def compiler(defptr)#0
//^codeptr = $A0; codeptr++ // LDY #imm
//^codeptr = $00; codeptr++ // $00
fin
VX++ //^codeptr = $E8; codeptr++ // INX
A_IS_TOSL = FALSE
VX++ // INX
A_IS_TOSL = FALSE
break
is $76 // SLW
i++
@ -1491,7 +1489,7 @@ def compiler(defptr)#0
//^codeptr = $88; codeptr++ // DEY
fin
VX++ // INX
A_IS_TOSL = FALSE
A_IS_TOSL = FALSE
break
is $78 // SAB
i++
@ -1506,7 +1504,7 @@ def compiler(defptr)#0
//*codeptr = *(bytecode+i); codeptr = codeptr + 2
VX++ // INX
codeptr = codeptr + 3
A_IS_TOSL = FALSE
A_IS_TOSL = FALSE
i++
break
is $7A // SAW
@ -1527,9 +1525,9 @@ def compiler(defptr)#0
codeptr=>6 = *(bytecode+i)+1
//^codeptr = $8D; codeptr++ // STA abs
//*codeptr = *(bytecode+i)+1; codeptr = codeptr + 2
VX++ //^codeptr = $E8; codeptr++ // INX
VX++ // INX
codeptr = codeptr + 8
A_IS_TOSL = FALSE
A_IS_TOSL = FALSE
i++
break
is $7C // DAB
@ -1538,7 +1536,7 @@ def compiler(defptr)#0
if not A_IS_TOSL
*codeptr = $D0B5+(VX<<8) // LDA ESTKL,X
codeptr = codeptr + 2
A_IS_TOSL = TOSL_CLEAN
A_IS_TOSL = TOSL_CLEAN
fin
codeptr->0 = $8D // STA abs
codeptr=>1 = *(bytecode+i)
@ -1553,7 +1551,7 @@ def compiler(defptr)#0
if not A_IS_TOSL
*codeptr = $D0B5+(VX<<8) // LDA ESTKL,X
codeptr = codeptr + 2
A_IS_TOSL = TOSL_CLEAN
A_IS_TOSL = TOSL_CLEAN
fin
codeptr->0 = $8D // STA abs
codeptr=>1 = *(bytecode+i)
@ -1597,7 +1595,7 @@ def compiler(defptr)#0
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr = codeptr + 10
A_IS_TOSL = TOSL_DIRTY
A_IS_TOSL = TOSL_DIRTY
break
is $82 // ADD
//puts("ADD")
@ -1613,7 +1611,7 @@ def compiler(defptr)#0
codeptr=>3 = ($D095+$0100)+(VX<<8) // STA ESTKL+1,X
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
codeptr=>5 = $C085+(VX<<8) // LDA ESTKH,X
codeptr=>5 = $C0B5+(VX<<8) // LDA ESTKH,X
//^codeptr = $B5; codeptr++ // LDA zp,X
//^codeptr = $C0+VX; codeptr++ // ESTKH
codeptr=>7 = ($C075+$0100)+(VX<<8) // ADC ESTKH+1,X
@ -1624,9 +1622,9 @@ def compiler(defptr)#0
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
VX++ // INX
codeptr = codeptr + 11
A_IS_TOSL = FALSE
A_IS_TOSL = FALSE
break
is $84
is $84 // SUB
//puts("SUB")
if A_IS_TOSL & TOSL_DIRTY
*codeptr = $D095+(VX<<8) // STA ESTKL,X
@ -1654,7 +1652,7 @@ def compiler(defptr)#0
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
VX++ // INX
codeptr = codeptr + 13
A_IS_TOSL = FALSE
A_IS_TOSL = FALSE
break
is $86 // MUL
is $88 // DIV
@ -1693,7 +1691,7 @@ def compiler(defptr)#0
//^codeptr = $A0; codeptr++ // LDY #imm
//^codeptr = $00; codeptr++ // $00
codeptr = codeptr + 7
A_IS_TOSL = FALSE
A_IS_TOSL = FALSE
break
is $8C // INCR
//puts("INCR")
@ -1715,7 +1713,7 @@ def compiler(defptr)#0
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr = codeptr + 7
A_IS_TOSL = TOSL_DIRTY
A_IS_TOSL = TOSL_DIRTY
break
is $8E // DECR
//puts("DECR")
@ -1737,127 +1735,167 @@ def compiler(defptr)#0
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr = codeptr + 7
A_IS_TOSL = TOSL_DIRTY
A_IS_TOSL = TOSL_DIRTY
break
// NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 90 92 94 96 98 9A 9C 9E
is $90
is $90 // NEG
//puts("NEG")
if A_IS_TOSL & TOSL_DIRTY
*codeptr = $D095+(VX<<8) // STA ESTKL,X
codeptr = codeptr + 2
fin
^codeptr = $98; codeptr++ // TYA -> LDA #$00
^codeptr = $38; codeptr++ // SEC
^codeptr = $F5; codeptr++ // SBC zp,X
^codeptr = $D0+VX; codeptr++ // ESTKL
^codeptr = $95; codeptr++ // STA zp,X
^codeptr = $D0+VX; codeptr++ // ESTKL
^codeptr = $98; codeptr++ // TYA -> LDA #00
^codeptr = $F5; codeptr++ // SBC zp,X
^codeptr = $C0+VX; codeptr++ // ESTKH
^codeptr = $95; codeptr++ // STA zp,X
^codeptr = $C0+VX; codeptr++ // ESTKH
A_IS_TOSL = FALSE
codeptr=>0 = $3898 // TYA -> LDA #$00; SEC
//^codeptr = $98; codeptr++ // TYA -> LDA #$00
//^codeptr = $38; codeptr++ // SEC
codeptr=>2 = $D0F5+(VX<<8) // SBC ESTKL,X
//^codeptr = $F5; codeptr++ // SBC zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr=>4 = $D095+(VX<<8) // STA ESTKL,X
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr->6 = $98 // TYA -> LDA #00
//^codeptr = $98; codeptr++ // TYA -> LDA #00
codeptr=>7 = $C0F5+(VX<<8) // SBC ESTKH,X
//^codeptr = $F5; codeptr++ // SBC zp,X
//^codeptr = $C0+VX; codeptr++ // ESTKH
codeptr=>9 = $C095+(VX<<8) // STA ESTKH,X
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $C0+VX; codeptr++ // ESTKH
codeptr = codeptr + 11
A_IS_TOSL = FALSE
break
is $92
is $92 // COMP
//puts("COMP")
if not A_IS_TOSL
*codeptr = $D0B5+(VX<<8) // LDA ESTKL,X
codeptr = codeptr + 2
fin
^codeptr = $49; codeptr++ // EOR #imm
^codeptr = $FF; codeptr++ // $FF
^codeptr = $95; codeptr++ // STA zp,X
^codeptr = $D0+VX; codeptr++ // ESTKL
^codeptr = $B5; codeptr++ // LDA zp,X
^codeptr = $C0+VX; codeptr++ // ESTKH
^codeptr = $49; codeptr++ // EOR #imm
^codeptr = $FF; codeptr++ // $FF
^codeptr = $95; codeptr++ // STA zp,X
^codeptr = $C0+VX; codeptr++ // ESTKH
A_IS_TOSL = FALSE
codeptr=>0 = $FF49 // EOR #$FF
//^codeptr = $49; codeptr++ // EOR #imm
//^codeptr = $FF; codeptr++ // $FF
codeptr=>2 = $D095+(VX<<8) // STA ESTKL,X
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr=>4 = $C0B5+(VX<<8) // LDA ESTKH,X
//^codeptr = $B5; codeptr++ // LDA zp,X
//^codeptr = $C0+VX; codeptr++ // ESTKH
codeptr=>6 = $FF49 // EOR #$FF
//^codeptr = $49; codeptr++ // EOR #imm
//^codeptr = $FF; codeptr++ // $FF
codeptr=>8 = $C095+(VX<<8) // STA ESTKH,X
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $C0+VX; codeptr++ // ESTKH
codeptr = codeptr + 10
A_IS_TOSL = FALSE
break
is $94
is $94 // AND
//puts("AND")
if not A_IS_TOSL
*codeptr = $D0B5+(VX<<8) // LDA ESTKL,X
codeptr = codeptr + 2
fin
^codeptr = $35; codeptr++ // AND zp,X
^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
^codeptr = $95; codeptr++ // STA zp,X
^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
^codeptr = $B5; codeptr++ // LDA zp,X
^codeptr = $C0+VX; codeptr++ // ESTKH
^codeptr = $35; codeptr++ // AND zp,X
^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
^codeptr = $95; codeptr++ // STA zp,X
^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
VX++ //^codeptr = $E8; codeptr++ // INX
A_IS_TOSL = FALSE
codeptr=>0 = ($D035+$0100)+(VX<<8) // AND ESTKL+1,X
//^codeptr = $35; codeptr++ // AND zp,X
//^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
codeptr=>2 = ($D095+$0100)+(VX<<8) // STA ESTKL+1,X
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
codeptr=>4 = $C0B5+(VX<<8) // LDA ESTKH,X
//^codeptr = $B5; codeptr++ // LDA zp,X
//^codeptr = $C0+VX; codeptr++ // ESTKH
codeptr=>6 = ($C035+$0100)+(VX<<8) // AND ESTKH+1,X
//^codeptr = $35; codeptr++ // AND zp,X
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
codeptr=>8 = ($C095+$0100)+(VX<<8) // STA ESTKH+1,X
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
VX++ // INX
codeptr = codeptr + 10
A_IS_TOSL = FALSE
break
is $96
is $96 // OR
//puts("OR")
if not A_IS_TOSL
*codeptr = $D0B5+(VX<<8) // LDA ESTKL,X
codeptr = codeptr + 2
fin
^codeptr = $15; codeptr++ // ORA zp,X
^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
^codeptr = $95; codeptr++ // STA zp,X
^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
^codeptr = $B5; codeptr++ // LDA zp,X
^codeptr = $C0+VX; codeptr++ // ESTKH
^codeptr = $15; codeptr++ // ORA zp,X
^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
^codeptr = $95; codeptr++ // STA zp,X
^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
VX++ //^codeptr = $E8; codeptr++ // INX
A_IS_TOSL = FALSE
codeptr=>0 = ($D015+$0100)+(VX<<8) // ORA ESTKL+1,X
//^codeptr = $15; codeptr++ // ORA zp,X
//^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
codeptr=>2 = ($D095+$0100)+(VX<<8) // STA ESTKL+1,X
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
codeptr=>4 = $C0B5+(VX<<8) // LDA ESTKH,X
//^codeptr = $B5; codeptr++ // LDA zp,X
//^codeptr = $C0+VX; codeptr++ // ESTKH
codeptr=>6 = ($C015+$0100)+(VX<<8) // ORA ESTKH+1,X
//^codeptr = $15; codeptr++ // ORA zp,X
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
codeptr=>8 = ($C095+$0100)+(VX<<8) // STA ESTKH+1,X
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
VX++ // INX
codeptr = codeptr + 10
A_IS_TOSL = FALSE
break
is $98
is $98 // XOR
//puts("XOR")
if not A_IS_TOSL
*codeptr = $D0B5+(VX<<8) // LDA ESTKL,X
codeptr = codeptr + 2
fin
^codeptr = $55; codeptr++ // EOR zp,X
^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
^codeptr = $95; codeptr++ // STA zp,X
^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
^codeptr = $B5; codeptr++ // LDA zp,X
^codeptr = $C0+VX; codeptr++ // ESTKH
^codeptr = $55; codeptr++ // EOR zp,X
^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
^codeptr = $95; codeptr++ // STA zp,X
^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
VX++ //^codeptr = $E8; codeptr++ // INX
A_IS_TOSL = FALSE
codeptr=>0 = ($D055+$0100)+(VX<<8) // EOR ESTKL+1,X
//^codeptr = $55; codeptr++ // EOR zp,X
//^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
codeptr=>2 = ($D095+$0100)+(VX<<8) // STA ESTKL+1,X
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
codeptr=>4 = $C0B5+(VX<<8) // LDA ESTKH,X
//^codeptr = $B5; codeptr++ // LDA zp,X
//^codeptr = $C0+VX; codeptr++ // ESTKH
codeptr=>6 = ($C055+$0100)+(VX<<8) // EOR ESTKH+1,X
//^codeptr = $55; codeptr++ // EOR zp,X
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
codeptr=>8 = ($C095+$0100)+(VX<<8) // STA ESTKH+1,X
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
VX++ // INX
codeptr = codeptr + 10
A_IS_TOSL = FALSE
break
is $9E
is $9E // IDXW
//puts("IDXW")
if not A_IS_TOSL
*codeptr = $D0B5+(VX<<8) // LDA ESTKL,X
codeptr = codeptr + 2
fin
^codeptr = $0A; codeptr++ // ASL
^codeptr = $36; codeptr++ // ROL zp,X
^codeptr = $C0+VX; codeptr++ // ESTKH
^codeptr = $18; codeptr++ // CLC
^codeptr = $75; codeptr++ // ADC zp,X
^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
^codeptr = $95; codeptr++ // STA zp,X
^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
^codeptr = $B5; codeptr++ // LDA zp,X
^codeptr = $C0+VX; codeptr++ // ESTKH
^codeptr = $75; codeptr++ // ADC zp,X
^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
^codeptr = $95; codeptr++ // STA zp,X
^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
VX++ //^codeptr = $E8; codeptr++ // INX
A_IS_TOSL = FALSE
codeptr->0 = $0A // ASL
//^codeptr = $0A; codeptr++ // ASL
codeptr=>1 = $C036+(VX<<8) // ROL ESTKH,X
//^codeptr = $36; codeptr++ // ROL zp,X
//^codeptr = $C0+VX; codeptr++ // ESTKH
codeptr->3 = $18 // CLC
//^codeptr = $18; codeptr++ // CLC
codeptr=>4 = ($D075+$0100)+(VX<<8) // ADC ESTKL+1,X
//^codeptr = $75; codeptr++ // ADC zp,X
//^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
codeptr=>6 = ($D095+$0100)+(VX<<8) // STA ESTKL+1,X
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
codeptr=>8 = $C0B5+(VX<<8) // LDA ESTKH,X
//^codeptr = $B5; codeptr++ // LDA zp,X
//^codeptr = $C0+VX; codeptr++ // ESTKH
codeptr=>10 = ($C075+$0100)+(VX<<8) // ADC ESTKH+1,X
//^codeptr = $75; codeptr++ // ADC zp,X
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
codeptr=>12 = ($C095+$0100)+(VX<<8) // STA ESTKH+1,X
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
VX++ // INX
codeptr = codeptr + 14
A_IS_TOSL = FALSE
break
// BRGT,BRLT,INCBRLE,ADDBRLE,DECBRGE,SUBBRGE,BRAND,BROR ; A0 A2 A4 A6 A8 AA AC AE
// BRGT,BRLT,INCBRLE,ADDBRLE,DECBRGE,SUBBRGE,BRAND,BROR ; A0 A2 A4 A6 A8 AA AC AE
is $A0
i++
dest = i + *(bytecode+i)
@ -1890,7 +1928,7 @@ def compiler(defptr)#0
addrxlate=>[dest] = codeptr - *jitcodeptr
fin
codeptr = codeptr + 2
A_IS_TOSL = FALSE
A_IS_TOSL = FALSE
break
is $A2
i++
@ -1901,7 +1939,7 @@ def compiler(defptr)#0
if not A_IS_TOSL
*codeptr = $D0B5+(VX<<8) // LDA ESTKL,X
codeptr = codeptr + 2
else
elsif A_IS_TOSL & TOSL_DIRTY
^codeptr = $95; codeptr++ // STA zp,X
^codeptr = $D0+VX; codeptr++ // ESTKL
fin
@ -1925,7 +1963,7 @@ def compiler(defptr)#0
addrxlate=>[dest] = codeptr - *jitcodeptr
fin
codeptr = codeptr + 2
A_IS_TOSL = FALSE
A_IS_TOSL = FALSE
break
is $A4
i++
@ -1974,7 +2012,7 @@ def compiler(defptr)#0
codeptr = codeptr + 2
^codeptr = $E8; codeptr++ // INX
^codeptr = $E8; codeptr++ // INX
A_IS_TOSL = FALSE
A_IS_TOSL = FALSE
break
is $A6
i++
@ -2026,7 +2064,7 @@ def compiler(defptr)#0
codeptr = codeptr + 2
^codeptr = $E8; codeptr++ // INX
^codeptr = $E8; codeptr++ // INX
A_IS_TOSL = FALSE
A_IS_TOSL = FALSE
break
is $A8
i++
@ -2075,7 +2113,7 @@ def compiler(defptr)#0
codeptr = codeptr + 2
^codeptr = $E8; codeptr++ // INX
^codeptr = $E8; codeptr++ // INX
A_IS_TOSL = FALSE
A_IS_TOSL = FALSE
break
is $AA
i++
@ -2129,7 +2167,7 @@ def compiler(defptr)#0
codeptr = codeptr + 2
^codeptr = $E8; codeptr++ // INX
^codeptr = $E8; codeptr++ // INX
A_IS_TOSL = FALSE
A_IS_TOSL = FALSE
break
is $AC
i++
@ -2137,12 +2175,12 @@ def compiler(defptr)#0
i++
//puts("BRAND "); puti(dest)
codeptr, VX = resolveX(codeptr, VX)
if A_IS_TOSL & TOSL_DIRTY
*codeptr = $D095+(VX<<8) // STA ESTKL,X
codeptr = codeptr + 2
else
if not A_IS_TOSL
^codeptr = $B5; codeptr++ // LDA zp,X
^codeptr = $D0+VX; codeptr++ // ESTKL
elsif A_IS_TOSL & TOSL_DIRTY
*codeptr = $D095+(VX<<8) // STA ESTKL,X
codeptr = codeptr + 2
fin
^codeptr = $15; codeptr++ // ORA zp,X
^codeptr = $C0+VX; codeptr++ // ESTKH
@ -2155,7 +2193,7 @@ def compiler(defptr)#0
fin
codeptr = codeptr + 2
^codeptr = $E8; codeptr++ // INX VX++ ???
A_IS_TOSL = FALSE
A_IS_TOSL = FALSE
break
is $AE
i++
@ -2163,12 +2201,12 @@ def compiler(defptr)#0
i++
//puts("BROR "); puti(dest)
codeptr, VX = resolveX(codeptr, VX)
if A_IS_TOSL & TOSL_DIRTY
*codeptr = $D095+(VX<<8) // STA ESTKL,X
codeptr = codeptr + 2
else
if not A_IS_TOSL
^codeptr = $B5; codeptr++ // LDA zp,X
^codeptr = $D0+VX; codeptr++ // ESTKL
elsif A_IS_TOSL & TOSL_DIRTY
*codeptr = $D095+(VX<<8) // STA ESTKL,X
codeptr = codeptr + 2
fin
^codeptr = $15; codeptr++ // ORA zp,X
^codeptr = $C0+VX; codeptr++ // ESTKH
@ -2181,7 +2219,7 @@ def compiler(defptr)#0
fin
codeptr = codeptr + 2
^codeptr = $E8; codeptr++ // INX // VX++ ???
A_IS_TOSL = FALSE
A_IS_TOSL = FALSE
break
// ADDLB,ADDLW,ADDAB,ADDAW,IDXLB,IDXLW,IDXAB,IDXAW ; B0 B2 B4 B6 B8 BA BC BE
is $B0
@ -2208,7 +2246,7 @@ def compiler(defptr)#0
fin
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
A_IS_TOSL = TOSL_DIRTY
A_IS_TOSL = TOSL_DIRTY
break
is $B2
i++
@ -2239,7 +2277,7 @@ def compiler(defptr)#0
else
^codeptr = $88; codeptr++ // DEY
fin
A_IS_TOSL = FALSE
A_IS_TOSL = FALSE
break
is $B4
i++
@ -2257,7 +2295,7 @@ def compiler(defptr)#0
^codeptr = $C0+VX; codeptr++ // ESTKH
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
A_IS_TOSL = TOSL_DIRTY
A_IS_TOSL = TOSL_DIRTY
i++
break
is $B6
@ -2278,7 +2316,7 @@ def compiler(defptr)#0
*codeptr = *(bytecode+i)+1; codeptr = codeptr + 2
^codeptr = $95; codeptr++ // STA zp,X
^codeptr = $C0+VX; codeptr++ // ESTKH
A_IS_TOSL = FALSE
A_IS_TOSL = FALSE
i++
break
is $B8
@ -2314,7 +2352,7 @@ def compiler(defptr)#0
^codeptr = $C0+VX; codeptr++ // ESTKH
^codeptr = $A0; codeptr++ // LDY #imm
^codeptr = $00; codeptr++ // $00
A_IS_TOSL = FALSE
A_IS_TOSL = FALSE
break
is $BA
i++
@ -2351,7 +2389,7 @@ def compiler(defptr)#0
^codeptr = $C0+VX; codeptr++ // ESTKH
^codeptr = $A0; codeptr++ // LDY #imm
^codeptr = $00; codeptr++ // $00
A_IS_TOSL = FALSE
A_IS_TOSL = FALSE
break
is $BC
i++
@ -2378,7 +2416,7 @@ def compiler(defptr)#0
^codeptr = $C0+VX; codeptr++ // ESTKH
^codeptr = $A0; codeptr++ // LDY #imm
^codeptr = $00; codeptr++ // $00
A_IS_TOSL = FALSE
A_IS_TOSL = FALSE
i++
break
is $BE
@ -2411,7 +2449,7 @@ def compiler(defptr)#0
^codeptr = $C0+VX; codeptr++ // ESTKH
^codeptr = $A0; codeptr++ // LDY #imm
^codeptr = $00; codeptr++ // $00
A_IS_TOSL = FALSE
A_IS_TOSL = FALSE
i++
break
is $FE // NOPed out earlier by SELect