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

Update ops $40-$4E

This commit is contained in:
David Schmenk 2018-03-24 21:37:52 -07:00
parent 2c9373c962
commit 23779176d2

View File

@ -520,7 +520,7 @@ def compiler(defptr)#0
VX++ // INX
A_IS_TOSL = FALSE
break
is $34
is $34 // DUP
//puts("DUP")
if A_IS_TOSL & TOSL_DIRTY
*codeptr = $D095+(VX<<8) // STA ESTKL,X
@ -554,7 +554,7 @@ def compiler(defptr)#0
// Should never happen
//
//break
is $38
is $38 // ADDI
i++
//puts("ADDI $"); putb(^(bytecode+i))
if not A_IS_TOSL
@ -577,7 +577,7 @@ def compiler(defptr)#0
codeptr = codeptr + 7
A_IS_TOSL = TOSL_DIRTY
break
is $3A
is $3A // SUBI
i++
//puts("SUBI $"); putb(^(bytecode+i))
if not A_IS_TOSL
@ -600,7 +600,7 @@ def compiler(defptr)#0
codeptr = codeptr + 7
A_IS_TOSL = TOSL_DIRTY
break
is $3C
is $3C // ANDI
i++
//puts("ANDI $"); putb(^(bytecode+i))
if not A_IS_TOSL
@ -618,7 +618,7 @@ def compiler(defptr)#0
codeptr = codeptr + 4
A_IS_TOSL = TOSL_DIRTY
break
is $3E
is $3E // ORI
i++
//puts("ORI $"); putb(^(bytecode+i))
if not A_IS_TOSL
@ -634,87 +634,115 @@ def compiler(defptr)#0
A_IS_TOSL = TOSL_DIRTY
break
// ISEQ,ISNE,ISGT,ISLT,ISGE,ISLE,BRFLS,BRTRU ; 40 42 44 46 48 4A 4C 4E
is $40
is $40 // ISEQ
//puts("ISEQ")
if not A_IS_TOSL
*codeptr = $D0B5+(VX<<8) // LDA ESTKL,X
codeptr = codeptr + 2
fin
^codeptr = $D5; codeptr++ // CMP zp,X
^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
^codeptr = $D0; codeptr++ // BNE rel
^codeptr = $07; codeptr++ // +7
^codeptr = $B5; codeptr++ // LDA zp,X
^codeptr = $C0+VX; codeptr++ // ESTKH
^codeptr = $D5; codeptr++ // CMP zp,X
^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
^codeptr = $D0; codeptr++ // BNE rel
^codeptr = $01; codeptr++ // +1
^codeptr = $88; codeptr++ // DEY
^codeptr = $98; codeptr++ // TYA
^codeptr = $94; codeptr++ // STY zp,X
^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
^codeptr = $A0; codeptr++ // LDY #imm
^codeptr = $00; codeptr++ // $00
codeptr=>0 = ($D0D5+$0100)+(VX<<8) // CMP ESTKL+1,X
//^codeptr = $D5; codeptr++ // CMP zp,X
//^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
codeptr=>2 = $07D0 // BNE +7
//^codeptr = $D0; codeptr++ // BNE rel
//^codeptr = $07; codeptr++ // +7
codeptr=>4 = $C0B5+(VX<<8) // LDA ESTKH,X
//^codeptr = $B5; codeptr++ // LDA zp,X
//^codeptr = $C0+VX; codeptr++ // ESTKH
codeptr=>6 = ($C0D5+$0100)+(VX<<8) // CMP ESTKH+1
//^codeptr = $D5; codeptr++ // CMP zp,X
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
codeptr=>8 = $01D0 // BNE +1
//^codeptr = $D0; codeptr++ // BNE rel
//^codeptr = $01; codeptr++ // +1
codeptr=>10 = $9888 // DEY TYA
//^codeptr = $88; codeptr++ // DEY
//^codeptr = $98; codeptr++ // TYA
codeptr=>12 = ($C094+$0100)+(VX<<8) // STY ESTKH+1,X
//^codeptr = $94; codeptr++ // STY zp,X
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
codeptr=>14 = $00A0 // LDY #$00
//^codeptr = $A0; codeptr++ // LDY #imm
//^codeptr = $00; codeptr++ // $00
VX++ // INX
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr = codeptr + 16
A_IS_TOSL = TOSL_DIRTY
break
is $42
is $42 // ISNE
//puts("ISNE")
if not A_IS_TOSL
*codeptr = $D0B5+(VX<<8) // LDA ESTKL,X
codeptr = codeptr + 2
fin
^codeptr = $D5; codeptr++ // CMP zp,X
^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
^codeptr = $D0; codeptr++ // BNE rel
^codeptr = $06; codeptr++ // +6
^codeptr = $B5; codeptr++ // LDA zp,X
^codeptr = $C0+VX; codeptr++ // ESTKH
^codeptr = $D5; codeptr++ // CMP zp,X
^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
^codeptr = $F0; codeptr++ // BEQ rel
^codeptr = $01; codeptr++ // +1
^codeptr = $88; codeptr++ // DEY
^codeptr = $98; codeptr++ // TYA
^codeptr = $94; codeptr++ // STY zp,X
^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
^codeptr = $A0; codeptr++ // LDY #imm
^codeptr = $00; codeptr++ // $00
codeptr=>0 = ($D0D5+$0100)+(VX<<8) // CMP ESTKL+1,X
//^codeptr = $D5; codeptr++ // CMP zp,X
//^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
codeptr=>2 = $06D0 // BNE +6
//^codeptr = $D0; codeptr++ // BNE rel
//^codeptr = $06; codeptr++ // +6
codeptr=>4 = $C0B5+(VX<<8) // LDA ESTKH,X
//^codeptr = $B5; codeptr++ // LDA zp,X
//^codeptr = $C0+VX; codeptr++ // ESTKH
codeptr=>6 = ($C0D5+$0100)+(VX<<8) // CMP ESTKH+1
//^codeptr = $D5; codeptr++ // CMP zp,X
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
codeptr=>8 = $01F0 // BEQ +1
//^codeptr = $F0; codeptr++ // BEQ rel
//^codeptr = $01; codeptr++ // +1
codeptr=>10 = $9888 // DEY TYA
//^codeptr = $88; codeptr++ // DEY
//^codeptr = $98; codeptr++ // TYA
codeptr=>12 = ($C094+$0100)+(VX<<8) // STY ESTKH+1,X
//^codeptr = $94; codeptr++ // STY zp,X
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
codeptr=>14 = $00A0 // LDY #$00
//^codeptr = $A0; codeptr++ // LDY #imm
//^codeptr = $00; codeptr++ // $00
VX++ // INX
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr = codeptr + 16
A_IS_TOSL = TOSL_DIRTY
break
is $44
is $44 // ISGT
//puts("ISGT")
if not A_IS_TOSL
*codeptr = $D0B5+(VX<<8) // LDA ESTKL,X
codeptr = codeptr + 2
fin
^codeptr = $D5; codeptr++ // CMP zp,X
^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
^codeptr = $B5; codeptr++ // LDA zp,X
^codeptr = $C0+VX; codeptr++ // ESTKH
^codeptr = $F5; codeptr++ // SBC zp,X
^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
^codeptr = $50; codeptr++ // BVC rel
^codeptr = $02; codeptr++ // +2
^codeptr = $49; codeptr++ // EOR #imm
^codeptr = $80; codeptr++ // $80
^codeptr = $10; codeptr++ // BPL rel
^codeptr = $01; codeptr++ // +1
^codeptr = $88; codeptr++ // DEY
^codeptr = $98; codeptr++ // TYA
^codeptr = $94; codeptr++ // STY zp,X
^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
^codeptr = $A0; codeptr++ // LDY #imm
^codeptr = $00; codeptr++ // $00
codeptr=>0 = ($D0D5+$0100)+(VX<<8) // CMP ESTKL+1,X
//^codeptr = $D5; codeptr++ // CMP zp,X
//^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
codeptr=>2 = $C0B5+(VX<<8) // LDA ESTKH,X
//^codeptr = $B5; codeptr++ // LDA zp,X
//^codeptr = $C0+VX; codeptr++ // ESTKH
codeptr=>4 = ($C0F5+$0100)+(VX<<8) // SBC ESTKH+1
//^codeptr = $F5; codeptr++ // SBC zp,X
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
codeptr=>6 = $0250 // BVC +2
//^codeptr = $50; codeptr++ // BVC rel
//^codeptr = $02; codeptr++ // +2
codeptr=>8 = $8049 // EOR #$80
//^codeptr = $49; codeptr++ // EOR #imm
//^codeptr = $80; codeptr++ // $80
codeptr=>10 = $0110 // BPL +1
//^codeptr = $10; codeptr++ // BPL rel
//^codeptr = $01; codeptr++ // +1
codeptr=>12 = $9888 // DEY TYA
//^codeptr = $88; codeptr++ // DEY
//^codeptr = $98; codeptr++ // TYA
codeptr=>14 = ($C094+$0100)+(VX<<8) // STY ESTKH+1,X
//^codeptr = $94; codeptr++ // STY zp,X
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
codeptr=>16 = $00A0 // LDY #$00
//^codeptr = $A0; codeptr++ // LDY #imm
//^codeptr = $00; codeptr++ // $00
VX++ // INX
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr = codeptr + 18
A_IS_TOSL = TOSL_DIRTY
break
is $46
@ -723,29 +751,40 @@ def compiler(defptr)#0
*codeptr = $D095+(VX<<8) // STA ESTKL,X
codeptr = codeptr + 2
fin
^codeptr = $B5; codeptr++ // LDA zp,X
^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
^codeptr = $D5; codeptr++ // CMP zp,X
^codeptr = $D0+VX; codeptr++ // ESTKL
^codeptr = $B5; codeptr++ // LDA zp,X
^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
^codeptr = $F5; codeptr++ // SBC zp,X
^codeptr = $C0+VX; codeptr++ // ESTKH
^codeptr = $50; codeptr++ // BVC rel
^codeptr = $02; codeptr++ // +2
^codeptr = $49; codeptr++ // EOR #imm
^codeptr = $80; codeptr++ // $80
^codeptr = $10; codeptr++ // BPL rel
^codeptr = $01; codeptr++ // +1
^codeptr = $88; codeptr++ // DEY
^codeptr = $98; codeptr++ // TYA
^codeptr = $94; codeptr++ // STY zp,X
^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
^codeptr = $A0; codeptr++ // LDY #imm
^codeptr = $00; codeptr++ // $00
codeptr=>0 = ($D0B5+$0100)+(VX<<8) // LDA ESTKL+1,X
//^codeptr = $B5; codeptr++ // LDA zp,X
//^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
codeptr=>2 = $D0D5+(VX<<8) // CMP ESTKL,X
//^codeptr = $D5; codeptr++ // CMP zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr=>4 = ($C0B5+$0100)+(VX<<8) // LDA ESTKH+1,X
//^codeptr = $B5; codeptr++ // LDA zp,X
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
codeptr=>6 = $C0F5+(VX<<8) // SBC ESTKH
//^codeptr = $F5; codeptr++ // SBC zp,X
//^codeptr = $C0+VX; codeptr++ // ESTKH
codeptr=>8 = $0250 // BVC +2
//^codeptr = $50; codeptr++ // BVC rel
//^codeptr = $02; codeptr++ // +2
codeptr=>10 = $8049 // EOR #$80
//^codeptr = $49; codeptr++ // EOR #imm
//^codeptr = $80; codeptr++ // $80
codeptr=>12 = $0110 // BPL +1
//^codeptr = $10; codeptr++ // BPL rel
//^codeptr = $01; codeptr++ // +1
codeptr=>14 = $9888 // DEY TYA
//^codeptr = $88; codeptr++ // DEY
//^codeptr = $98; codeptr++ // TYA
codeptr=>16 = ($C094+$0100)+(VX<<8) // STY ESTKH+1,X
//^codeptr = $94; codeptr++ // STY zp,X
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
codeptr=>18 = $00A0 // LDY #$00
//^codeptr = $A0; codeptr++ // LDY #imm
//^codeptr = $00; codeptr++ // $00
VX++ // INX
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr = codeptr + 20
A_IS_TOSL = TOSL_DIRTY
break
is $48
@ -754,61 +793,82 @@ def compiler(defptr)#0
*codeptr = $D095+(VX<<8) // STA ESTKL,X
codeptr = codeptr + 2
fin
^codeptr = $B5; codeptr++ // LDA zp,X
^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
^codeptr = $D5; codeptr++ // CMP zp,X
^codeptr = $D0+VX; codeptr++ // ESTKL
^codeptr = $B5; codeptr++ // LDA zp,X
^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
^codeptr = $F5; codeptr++ // SBC zp,X
^codeptr = $C0+VX; codeptr++ // ESTKH
^codeptr = $50; codeptr++ // BVC rel
^codeptr = $02; codeptr++ // +2
^codeptr = $49; codeptr++ // EOR #imm
^codeptr = $80; codeptr++ // $80
^codeptr = $30; codeptr++ // BMI rel
^codeptr = $01; codeptr++ // +1
^codeptr = $88; codeptr++ // DEY
^codeptr = $98; codeptr++ // TYA
^codeptr = $94; codeptr++ // STY zp,X
^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
^codeptr = $A0; codeptr++ // LDY #imm
^codeptr = $00; codeptr++ // $00
codeptr=>0 = ($D0B5+$0100)+(VX<<8) // LDA ESTKL+1,X
//^codeptr = $B5; codeptr++ // LDA zp,X
//^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
codeptr=>2 = $D0D5+(VX<<8) // CMP ESTKL,X
//^codeptr = $D5; codeptr++ // CMP zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr=>4 = ($C0B5+$0100)+(VX<<8) // LDA ESTKH+1,X
//^codeptr = $B5; codeptr++ // LDA zp,X
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
codeptr=>6 = $C0F5+(VX<<8) // SBC ESTKH
//^codeptr = $F5; codeptr++ // SBC zp,X
//^codeptr = $C0+VX; codeptr++ // ESTKH
codeptr=>8 = $0250 // BVC +2
//^codeptr = $50; codeptr++ // BVC rel
//^codeptr = $02; codeptr++ // +2
codeptr=>10 = $8049 // EOR #$80
//^codeptr = $49; codeptr++ // EOR #imm
//^codeptr = $80; codeptr++ // $80
codeptr=>12 = $0130 // BMI +1
//^codeptr = $30; codeptr++ // BMI rel
//^codeptr = $01; codeptr++ // +1
codeptr=>14 = $9888 // DEY TYA
//^codeptr = $88; codeptr++ // DEY
//^codeptr = $98; codeptr++ // TYA
codeptr=>16 = ($C094+$0100)+(VX<<8) // STY ESTKH+1,X
//^codeptr = $94; codeptr++ // STY zp,X
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
codeptr=>18 = $00A0 // LDY #$00
//^codeptr = $A0; codeptr++ // LDY #imm
//^codeptr = $00; codeptr++ // $00
VX++ // INX
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr = codeptr + 20
A_IS_TOSL = TOSL_DIRTY
break
is $4A
is $4A // ISLE
//puts("ISLE")
if not A_IS_TOSL
*codeptr = $D0B5+(VX<<8) // LDA ESTKL,X
codeptr = codeptr + 2
fin
^codeptr = $D5; codeptr++ // CMP zp,X
^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
^codeptr = $B5; codeptr++ // LDA zp,X
^codeptr = $C0+VX; codeptr++ // ESTKH
^codeptr = $F5; codeptr++ // SBC zp,X
^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
^codeptr = $50; codeptr++ // BVC rel
^codeptr = $02; codeptr++ // +2
^codeptr = $49; codeptr++ // EOR #imm
^codeptr = $80; codeptr++ // $80
^codeptr = $30; codeptr++ // BMI rel
^codeptr = $01; codeptr++ // +1
^codeptr = $88; codeptr++ // DEY
^codeptr = $98; codeptr++ // TYA
^codeptr = $94; codeptr++ // STY zp,X
^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
^codeptr = $A0; codeptr++ // LDY #imm
^codeptr = $00; codeptr++ // $00
codeptr=>0 = ($D0D5+$0100)+(VX<<8) // CMP ESTKL+1,X
//^codeptr = $D5; codeptr++ // CMP zp,X
//^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
codeptr=>2 = $C0B5+(VX<<8) // LDA ESTKH,X
//^codeptr = $B5; codeptr++ // LDA zp,X
//^codeptr = $C0+VX; codeptr++ // ESTKH
codeptr=>4 = ($C0F5+$0100)+(VX<<8) // SBC ESTKH+1
//^codeptr = $F5; codeptr++ // SBC zp,X
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
codeptr=>6 = $0250 // BVC +2
//^codeptr = $50; codeptr++ // BVC rel
//^codeptr = $02; codeptr++ // +2
codeptr=>8 = $8049 // EOR #$80
//^codeptr = $49; codeptr++ // EOR #imm
//^codeptr = $80; codeptr++ // $80
codeptr=>10 = $0130 // BMI +1
//^codeptr = $30; codeptr++ // BMI rel
//^codeptr = $01; codeptr++ // +1
codeptr=>12 = $9888 // DEY TYA
//^codeptr = $88; codeptr++ // DEY
//^codeptr = $98; codeptr++ // TYA
codeptr=>14 = ($C094+$0100)+(VX<<8) // STY ESTKH+1,X
//^codeptr = $94; codeptr++ // STY zp,X
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
codeptr=>16 = $00A0 // LDY #$00
//^codeptr = $A0; codeptr++ // LDY #imm
//^codeptr = $00; codeptr++ // $00
VX++ // INX
//^codeptr = $95; codeptr++ // STA zp,X
//^codeptr = $D0+VX; codeptr++ // ESTKL
codeptr = codeptr + 18
A_IS_TOSL = TOSL_DIRTY
break
is $4C
is $4C // BRFLS
i++
dest = i + *(bytecode+i)
i++
@ -819,19 +879,26 @@ def compiler(defptr)#0
*codeptr = ($D0B5-$0100)+(VX<<8) // LDA ESTKL-1,X
codeptr = codeptr + 2
fin
^codeptr = $15; codeptr++ // ORA zp,X
^codeptr = $C0-1+VX; codeptr++ // ESTKH-1
^codeptr = $D0; codeptr++ // BNE rel
^codeptr = $03; codeptr++ // +3
^codeptr = $4C; codeptr++ // JMP abs
*codeptr = addrxlate=>[dest]
if not (*codeptr & $8000) // Unresolved address list
addrxlate=>[dest] = codeptr - *jitcodeptr
codeptr=>0 = ($C015-$0100)+(VX<<8) // ORA ESTKH-1,X
//^codeptr = $15; codeptr++ // ORA zp,X
//^codeptr = $C0-1+VX; codeptr++ // ESTKH-1
codeptr=>2 = $03D0 // BNE +3
//^codeptr = $D0; codeptr++ // BNE rel
//^codeptr = $03; codeptr++ // +3
codeptr->4 = $4C // JMP abs
//^codeptr = $4C; codeptr++ // JMP abs
codeptr=>5 = addrxlate=>[dest]
//*codeptr = addrxlate=>[dest]
if not (codeptr->6 & $80) // Unresolved address list
//if not (*codeptr & $8000) // Unresolved address list
addrxlate=>[dest] = codeptr + 5 - *jitcodeptr
//addrxlate=>[dest] = codeptr - *jitcodeptr
fin
codeptr = codeptr + 2
codeptr = codeptr + 7
//codeptr = codeptr + 2
A_IS_TOSL = FALSE
break
is $4E
is $4E // BRTRU
i++
dest = i + *(bytecode+i)
i++
@ -842,16 +909,23 @@ def compiler(defptr)#0
*codeptr = ($D0B5-$0100)+(VX<<8) // LDA ESTKL-1,X
codeptr = codeptr + 2
fin
^codeptr = $15; codeptr++ // ORA zp,X
^codeptr = $C0-1+VX; codeptr++ // ESTKH-1
^codeptr = $F0; codeptr++ // BEQ rel
^codeptr = $03; codeptr++ // +3
^codeptr = $4C; codeptr++ // JMP abs
*codeptr = addrxlate=>[dest]
if not (*codeptr & $8000) // Unresolved address list
addrxlate=>[dest] = codeptr - *jitcodeptr
codeptr=>0 = ($C015-$0100)+(VX<<8) // ORA ESTKH-1,X
//^codeptr = $15; codeptr++ // ORA zp,X
//^codeptr = $C0-1+VX; codeptr++ // ESTKH-1
codeptr=>2 = $03F0 // BEQ +3
//^codeptr = $F0; codeptr++ // BEQ rel
//^codeptr = $03; codeptr++ // +3
codeptr->4 = $4C // JMP abs
//^codeptr = $4C; codeptr++ // JMP abs
codeptr=>5 = addrxlate=>[dest]
//*codeptr = addrxlate=>[dest]
if not (codeptr->6 & $80) // Unresolved address list
//if not (*codeptr & $8000) // Unresolved address list
addrxlate=>[dest] = codeptr + 5 - *jitcodeptr
//addrxlate=>[dest] = codeptr - *jitcodeptr
fin
codeptr = codeptr + 2
codeptr = codeptr + 7
//codeptr = codeptr + 2
A_IS_TOSL = FALSE
break
// BRNCH,SEL,CALL,ICAL,ENTER,LEAVE,RET,CFFB ; 50 52 54 56 58 5A 5C 5E