1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2025-03-25 21:30:44 +00:00

Rework ops $30-$3E

This commit is contained in:
David Schmenk 2018-03-24 17:04:21 -07:00
parent 1bf3c7043f
commit 6cfb957df4

@ -512,16 +512,12 @@ def compiler(defptr)#0
A_IS_TOSL = FALSE
break
// DROP,DROP2,DUP,DIVMOD,ADDI,SUBI,ANDI,ORI ; 30 32 34 36 38 3A 3C 3E
is $30
//puts("DROP")
VX++ //^codeptr = $E8; codeptr++ // INX
A_IS_TOSL = FALSE
break
is $32
is $32 // DROP2
//puts("DROP2")
//^codeptr = $E8; codeptr++ // INX
//^codeptr = $E8; codeptr++ // INX
VX = VX + 2
VX++ // INX
is $30 // DROP
//puts("DROP")
VX++ // INX
A_IS_TOSL = FALSE
break
is $34
@ -529,91 +525,112 @@ def compiler(defptr)#0
if A_IS_TOSL & TOSL_DIRTY
*codeptr = $D095+(VX<<8) // STA ESTKL,X
codeptr = codeptr + 2
else
^codeptr = $B5; codeptr++ // LDA zp,X
^codeptr = $D0+VX; codeptr++ // ESTKL
elsif 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
fin
VX-- //^codeptr = $CA; codeptr++ // DEX
^codeptr = $B4; codeptr++ // LDY zp,X
^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
^codeptr = $94; codeptr++ // STY zp,X
^codeptr = $C0+VX; codeptr++ // ESTKH
^codeptr = $A0; codeptr++ // LDY #imm
^codeptr = $00; codeptr++ // $00
VX-- // DEX
codeptr=>0 = ($C0B4+$0100)+(VX<<8) // LDY ESTKH+1,X
//^codeptr = $B4; codeptr++ // LDY zp,X
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
codeptr=>2 = $C094+(VX<<8) // STY ESTKH,X
//^codeptr = $94; codeptr++ // STY zp,X
//^codeptr = $C0+VX; codeptr++ // ESTKH
codeptr=>4 = $00A0 // LDY #$00
//^codeptr = $A0; codeptr++ // LDY #imm
//^codeptr = $00; codeptr++ // $00
//^codeptr = $B5; codeptr++ // LDA zp,X
//^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
A_IS_TOSL = TOSL_DIRTY
codeptr = codeptr + 6
A_IS_TOSL = TOSL_DIRTY
break
is $36
//is $36
//puts("DIVMOD")
//
// Should never happen
//
break
//break
is $38
i++
//puts("ADDI $"); putb(^(bytecode+i))
if not A_IS_TOSL
^codeptr = $B5; codeptr++ // LDA zp,X
^codeptr = $D0+VX; codeptr++ // ESTKL
*codeptr = $D0B5+(VX<<8) // LDA ESTKL,X
codeptr = codeptr + 2
fin
^codeptr = $18; codeptr++ // CLC
^codeptr = $69; codeptr++ // ADC #imm
^codeptr = ^(bytecode+i); codeptr++
^codeptr = $90; codeptr++ // BCC rel
^codeptr = $02; codeptr++ // +2
^codeptr = $F6; codeptr++ // INC zp,X
^codeptr = $C0+VX; codeptr++ // ESTKH
codeptr->0 = $18 // CLC
//^codeptr = $18; codeptr++ // CLC
codeptr=>1 = $69+(^(bytecode+i)<<8) // ADC #imm
//^codeptr = $69; codeptr++ // ADC #imm
//^codeptr = ^(bytecode+i); codeptr++
codeptr=>3 = $0290 // BCC +2
//^codeptr = $90; codeptr++ // BCC rel
//^codeptr = $02; codeptr++ // +2
codeptr=>5 = $C0F6+(VX<<8) // INC ESTKH,X
//^codeptr = $F6; codeptr++ // INC zp,X
//^codeptr = $C0+VX; codeptr++ // ESTKH
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr = codeptr + 7
A_IS_TOSL = TOSL_DIRTY
break
is $3A
i++
//puts("SUBI $"); putb(^(bytecode+i))
if not A_IS_TOSL
^codeptr = $B5; codeptr++ // LDA zp,X
^codeptr = $D0+VX; codeptr++ // ESTKL
*codeptr = $D0B5+(VX<<8) // LDA ESTKL,X
codeptr = codeptr + 2
fin
^codeptr = $38; codeptr++ // SEC
^codeptr = $E9; codeptr++ // SBC #imm
^codeptr = ^(bytecode+i); codeptr++
^codeptr = $B0; codeptr++ // BCS rel
^codeptr = $02; codeptr++ // +2
^codeptr = $D6; codeptr++ // DEC zp,X
^codeptr = $C0+VX; codeptr++ // ESTKH
codeptr->0 = $18 // CLC
//^codeptr = $38; codeptr++ // SEC
codeptr=>1 = $E9+(^(bytecode+i)<<8) // SBC #imm
//^codeptr = $E9; codeptr++ // SBC #imm
//^codeptr = ^(bytecode+i); codeptr++
codeptr=>3 = $02B0 // BCS +2
//^codeptr = $B0; codeptr++ // BCS rel
//^codeptr = $02; codeptr++ // +2
codeptr=>5 = $C0D6+(VX<<8) // INC ESTKH,X
//^codeptr = $D6; codeptr++ // DEC zp,X
//^codeptr = $C0+VX; codeptr++ // ESTKH
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr = codeptr + 7
A_IS_TOSL = TOSL_DIRTY
break
is $3C
i++
//puts("ANDI $"); putb(^(bytecode+i))
if not A_IS_TOSL
^codeptr = $B5; codeptr++ // LDA zp,X
^codeptr = $D0+VX; codeptr++ // ESTKL
*codeptr = $D0B5+(VX<<8) // LDA ESTKL,X
codeptr = codeptr + 2
fin
^codeptr = $29; codeptr++ // AND #imm
^codeptr = ^(bytecode+i); codeptr++
^codeptr = $94; codeptr++ // STY zp,X
^codeptr = $C0+VX; codeptr++ // ESTKH
codeptr=>0 = $29+(^(bytecode+i)<<8) // AND #imm
//^codeptr = $29; codeptr++ // AND #imm
//^codeptr = ^(bytecode+i); codeptr++
codeptr=>2 = $C094+(VX<<8) // STY ESTKH,X
//^codeptr = $94; codeptr++ // STY zp,X
//^codeptr = $C0+VX; codeptr++ // ESTKH
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr = codeptr + 4
A_IS_TOSL = TOSL_DIRTY
break
is $3E
i++
//puts("ORI $"); putb(^(bytecode+i))
if not A_IS_TOSL
^codeptr = $B5; codeptr++ // LDA zp,X
^codeptr = $D0+VX; codeptr++ // ESTKL
*codeptr = $D0B5+(VX<<8) // LDA ESTKL,X
codeptr = codeptr + 2
fin
^codeptr = $09; codeptr++ // ORA #imm
^codeptr = ^(bytecode+i); codeptr++
codeptr=>0 = $09+(^(bytecode+i)<<8) // ORA #imm
//^codeptr = $09; codeptr++ // ORA #imm
//^codeptr = ^(bytecode+i); codeptr++
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr = codeptr + 2
A_IS_TOSL = TOSL_DIRTY
break
// ISEQ,ISNE,ISGT,ISLT,ISGE,ISLE,BRFLS,BRTRU ; 40 42 44 46 48 4A 4C 4E