mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-04-07 16:41:59 +00:00
Update ops $A0-$AE
This commit is contained in:
parent
15c779d63b
commit
818a2b14ea
@ -1896,7 +1896,7 @@ def compiler(defptr)#0
|
||||
A_IS_TOSL = FALSE
|
||||
break
|
||||
// BRGT,BRLT,INCBRLE,ADDBRLE,DECBRGE,SUBBRGE,BRAND,BROR ; A0 A2 A4 A6 A8 AA AC AE
|
||||
is $A0
|
||||
is $A0 // BRGT - FOR/NEXT SPECIFIC TEST & BRANCH
|
||||
i++
|
||||
dest = i + *(bytecode+i)
|
||||
//puts("BRGT "); puti(dest)
|
||||
@ -1906,31 +1906,44 @@ 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 = $05; codeptr++ // +5
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
^codeptr = $4C; codeptr++ // JMP abs
|
||||
*codeptr = addrxlate=>[dest]
|
||||
if not (*codeptr & $8000) // Unresolved address list
|
||||
addrxlate=>[dest] = codeptr - *jitcodeptr
|
||||
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 = $0510 // BPL +5
|
||||
//^codeptr = $10; codeptr++ // BPL rel
|
||||
//^codeptr = $05; codeptr++ // +5
|
||||
codeptr=>14 = $E8E8 // INX; INX
|
||||
//^codeptr = $E8; codeptr++ // INX
|
||||
//^codeptr = $E8; codeptr++ // INX
|
||||
codeptr->16 = $4C // JMP abs
|
||||
//^codeptr = $4C; codeptr++ // JMP abs
|
||||
codeptr=>17 = addrxlate=>[dest]
|
||||
//*codeptr = addrxlate=>[dest]
|
||||
if not (codeptr->18 & $80) // Unresolved address list
|
||||
//if not (*codeptr & $8000) // Unresolved address list
|
||||
addrxlate=>[dest] = codeptr + 17 - *jitcodeptr
|
||||
//addrxlate=>[dest] = codeptr - *jitcodeptr
|
||||
fin
|
||||
codeptr = codeptr + 2
|
||||
A_IS_TOSL = FALSE
|
||||
codeptr = codeptr + 19
|
||||
//codeptr = codeptr + 2
|
||||
A_IS_TOSL = FALSE
|
||||
break
|
||||
is $A2
|
||||
is $A2 // BRLT - FOR/NEXT SPECIFIC TEST & BRANCH
|
||||
i++
|
||||
dest = i + *(bytecode+i)
|
||||
//puts("BRLT "); puti(dest)
|
||||
@ -1940,32 +1953,46 @@ def compiler(defptr)#0
|
||||
*codeptr = $D0B5+(VX<<8) // LDA ESTKL,X
|
||||
codeptr = codeptr + 2
|
||||
elsif A_IS_TOSL & TOSL_DIRTY
|
||||
^codeptr = $95; codeptr++ // STA zp,X
|
||||
^codeptr = $D0+VX; codeptr++ // ESTKL
|
||||
*codeptr = $D095+(VX<<8) // STA ESTKL,X
|
||||
codeptr = codeptr + 2
|
||||
//^codeptr = $95; codeptr++ // STA zp,X
|
||||
//^codeptr = $D0+VX; codeptr++ // ESTKL
|
||||
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 = $05; codeptr++ // +5
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
^codeptr = $4C; codeptr++ // JMP abs
|
||||
*codeptr = addrxlate=>[dest]
|
||||
if not (*codeptr & $8000) // Unresolved address list
|
||||
addrxlate=>[dest] = codeptr - *jitcodeptr
|
||||
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 = $0510 // BPL +5
|
||||
//^codeptr = $10; codeptr++ // BPL rel
|
||||
//^codeptr = $05; codeptr++ // +5
|
||||
codeptr=>12 = $E8E8 // INX; INX
|
||||
//^codeptr = $E8; codeptr++ // INX
|
||||
//^codeptr = $E8; codeptr++ // INX
|
||||
codeptr->14 = $4C // JMP abs
|
||||
//^codeptr = $4C; codeptr++ // JMP abs
|
||||
codeptr=>15 = addrxlate=>[dest]
|
||||
//*codeptr = addrxlate=>[dest]
|
||||
if not (codeptr->16 & $80) // Unresolved address list
|
||||
//if not (*codeptr & $8000) // Unresolved address list
|
||||
addrxlate=>[dest] = codeptr + 15 - *jitcodeptr
|
||||
//addrxlate=>[dest] = codeptr - *jitcodeptr
|
||||
fin
|
||||
codeptr = codeptr + 2
|
||||
A_IS_TOSL = FALSE
|
||||
codeptr = codeptr + 17
|
||||
//codeptr = codeptr + 2
|
||||
A_IS_TOSL = FALSE
|
||||
break
|
||||
is $A4
|
||||
is $A4 // INCBRLE - FOR/NEXT SPECIFIC INC & TEST & BRANCH
|
||||
i++
|
||||
dest = i + *(bytecode+i)
|
||||
//puts("INCBRLE "); puti(dest)
|
||||
@ -1977,44 +2004,62 @@ def compiler(defptr)#0
|
||||
*codeptr = $D0B5+(VX<<8) // LDA ESTKL,X
|
||||
codeptr = codeptr + 2
|
||||
fin
|
||||
^codeptr = $18; codeptr++ // CLC
|
||||
^codeptr = $69; codeptr++ // ADC #imm
|
||||
^codeptr = $01; codeptr++ // $01
|
||||
^codeptr = $95; codeptr++ // STA zp,X
|
||||
^codeptr = $D0+VX; codeptr++ // ESTKL
|
||||
^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 = $0169 // ADC #$01
|
||||
//^codeptr = $69; codeptr++ // ADC #imm
|
||||
//^codeptr = $01; codeptr++ // $01
|
||||
codeptr=>3 = $D095+(VX<<8) // STA ESTKL,X
|
||||
//^codeptr = $95; codeptr++ // STA zp,X
|
||||
//^codeptr = $D0+VX; codeptr++ // ESTKL
|
||||
codeptr=>5 = $0290 // BCC +2
|
||||
//^codeptr = $90; codeptr++ // BCC rel
|
||||
//^codeptr = $02; codeptr++ // +2
|
||||
codeptr=>7 = $C0F6+(VX<<8) // INC ESTKH,X
|
||||
//^codeptr = $F6; codeptr++ // INC zp,X
|
||||
//^codeptr = $C0+VX; codeptr++ // ESTKH
|
||||
codeptr, VX = resolveX(codeptr + 9, VX)
|
||||
//
|
||||
// BRLE
|
||||
//
|
||||
codeptr, VX = resolveX(codeptr, VX)
|
||||
^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 = $03; codeptr++ // +3
|
||||
^codeptr = $4C; codeptr++ // JMP abs
|
||||
*codeptr = addrxlate=>[dest]
|
||||
if not (*codeptr & $8000) // Unresolved address list
|
||||
addrxlate=>[dest] = codeptr - *jitcodeptr
|
||||
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 = $0330 // BMI +3
|
||||
//^codeptr = $30; codeptr++ // BMI rel
|
||||
//^codeptr = $03; codeptr++ // +3
|
||||
codeptr->14 = $4C // JMP abs
|
||||
//^codeptr = $4C; codeptr++ // JMP abs
|
||||
codeptr=>15 = addrxlate=>[dest]
|
||||
//*codeptr = addrxlate=>[dest]
|
||||
if not (codeptr->16 & $80) // Unresolved address list
|
||||
//if not (*codeptr & $8000) // Unresolved address list
|
||||
addrxlate=>[dest] = codeptr + 15 - *jitcodeptr
|
||||
//addrxlate=>[dest] = codeptr - *jitcodeptr
|
||||
fin
|
||||
codeptr = codeptr + 2
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
//codeptr = codeptr + 2
|
||||
codeptr=>17 = $E8E8 // INX; INX
|
||||
//^codeptr = $E8; codeptr++ // INX
|
||||
//^codeptr = $E8; codeptr++ // INX
|
||||
codeptr = codeptr + 19
|
||||
A_IS_TOSL = FALSE
|
||||
break
|
||||
is $A6
|
||||
is $A6 // ADDBRLE - FOR/NEXT SPECIFIC ADD & TEST & BRANCH
|
||||
i++
|
||||
dest = i + *(bytecode+i)
|
||||
//puts("ADDBRLE "); puti(dest)
|
||||
@ -2026,47 +2071,65 @@ def compiler(defptr)#0
|
||||
*codeptr = $D0B5+(VX<<8) // LDA ESTKL,X
|
||||
codeptr = codeptr + 2
|
||||
fin
|
||||
^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
|
||||
codeptr->0 = $18 // CLC
|
||||
//^codeptr = $18; codeptr++ // CLC
|
||||
codeptr=>1 = ($D075+$0100)+(VX<<8) // ADC ESTKL+1,X
|
||||
//^codeptr = $75; codeptr++ // ADC zp,X
|
||||
//^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
|
||||
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 = $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
|
||||
//^codeptr = $75; codeptr++ // ADC zp,X
|
||||
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
|
||||
codeptr=>9 = ($C095+$0100)+(VX<<8) // STA ESTKH+1,X
|
||||
//^codeptr = $95; codeptr++ // STA zp,X
|
||||
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
|
||||
codeptr, VX = resolveX(codeptr + 11, VX + 1) //VX++ // INX
|
||||
//
|
||||
// BRLE
|
||||
//
|
||||
codeptr, VX = resolveX(codeptr, VX + 1)
|
||||
^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 = $03; codeptr++ // +3
|
||||
^codeptr = $4C; codeptr++ // JMP abs
|
||||
*codeptr = addrxlate=>[dest]
|
||||
if not (*codeptr & $8000) // Unresolved address list
|
||||
addrxlate=>[dest] = codeptr - *jitcodeptr
|
||||
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 = $0330 // BMI +3
|
||||
//^codeptr = $30; codeptr++ // BMI rel
|
||||
//^codeptr = $03; codeptr++ // +3
|
||||
codeptr->14 = $4C // JMP abs
|
||||
//^codeptr = $4C; codeptr++ // JMP abs
|
||||
codeptr=>15 = addrxlate=>[dest]
|
||||
//*codeptr = addrxlate=>[dest]
|
||||
if not (codeptr->16 & $80) // Unresolved address list
|
||||
//if not (*codeptr & $8000) // Unresolved address list
|
||||
addrxlate=>[dest] = codeptr + 15 - *jitcodeptr
|
||||
//addrxlate=>[dest] = codeptr - *jitcodeptr
|
||||
fin
|
||||
codeptr = codeptr + 2
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
//codeptr = codeptr + 2
|
||||
codeptr=>17 = $E8E8 // INX; INX
|
||||
//^codeptr = $E8; codeptr++ // INX
|
||||
//^codeptr = $E8; codeptr++ // INX
|
||||
codeptr = codeptr + 19
|
||||
A_IS_TOSL = FALSE
|
||||
break
|
||||
is $A8
|
||||
is $A8 // DECBRGR - FOR/NEXT SPECIFIC DEC & TEST & BRANCH
|
||||
i++
|
||||
dest = i + *(bytecode+i)
|
||||
//puts("DECBRGE "); puti(dest)
|
||||
@ -2078,44 +2141,61 @@ def compiler(defptr)#0
|
||||
*codeptr = $D0B5+(VX<<8) // LDA ESTKL,X
|
||||
codeptr = codeptr + 2
|
||||
fin
|
||||
^codeptr = $38; codeptr++ // SEC
|
||||
^codeptr = $E9; codeptr++ // SBC #imm
|
||||
^codeptr = $01; codeptr++ // $01
|
||||
^codeptr = $95; codeptr++ // STA zp,X
|
||||
^codeptr = $D0+VX; codeptr++ // ESTKL
|
||||
^codeptr = $B0; codeptr++ // BCS rel
|
||||
^codeptr = $02; codeptr++ // +2
|
||||
^codeptr = $D6; codeptr++ // DEC zp,X
|
||||
^codeptr = $C0+VX; codeptr++ // ESTKH
|
||||
codeptr->0 = $38 // SEC
|
||||
//^codeptr = $38; codeptr++ // SEC
|
||||
codeptr=>1 = $01E9 // SBC #$01
|
||||
//^codeptr = $E9; codeptr++ // SBC #imm
|
||||
//^codeptr = $01; codeptr++ // $01
|
||||
codeptr=>3 = $D095+(VX<<8) // STA ESTKL,X
|
||||
//^codeptr = $95; codeptr++ // STA zp,X
|
||||
//^codeptr = $D0+VX; codeptr++ // ESTKL
|
||||
codeptr=>5 = $02B0 // BCS +2
|
||||
//^codeptr = $B0; codeptr++ // BCS rel
|
||||
//^codeptr = $02; codeptr++ // +2
|
||||
codeptr=>7 = $C0D6+(VX<<8) // DEC ESTKH,X
|
||||
//^codeptr = $D6; codeptr++ // DEC zp,X
|
||||
//^codeptr = $C0+VX; codeptr++ // ESTKH
|
||||
codeptr, VX = resolveX(codeptr + 9, VX)
|
||||
//
|
||||
// BRGE
|
||||
//
|
||||
codeptr, VX = resolveX(codeptr, VX)
|
||||
//^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
//^codeptr = $D0+VX; codeptr++ // ESTKL
|
||||
^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 = $03; codeptr++ // +3
|
||||
^codeptr = $4C; codeptr++ // JMP abs
|
||||
*codeptr = addrxlate=>[dest]
|
||||
if not (*codeptr & $8000) // Unresolved address list
|
||||
addrxlate=>[dest] = codeptr - *jitcodeptr
|
||||
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,X
|
||||
//^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 = $0330 // BMI +3
|
||||
//^codeptr = $30; codeptr++ // BMI rel
|
||||
//^codeptr = $03; codeptr++ // +3
|
||||
codeptr->12 = $4C // JMP abs
|
||||
//^codeptr = $4C; codeptr++ // JMP abs
|
||||
codeptr=>13 = addrxlate=>[dest]
|
||||
//*codeptr = addrxlate=>[dest]
|
||||
if not (codeptr->14 & $80) // Unresolved address list
|
||||
//if not (*codeptr & $8000) // Unresolved address list
|
||||
addrxlate=>[dest] = codeptr + 13 - *jitcodeptr
|
||||
//addrxlate=>[dest] = codeptr - *jitcodeptr
|
||||
fin
|
||||
codeptr = codeptr + 2
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
//codeptr = codeptr + 2
|
||||
codeptr=>15 = $E8E8 // INX; INX
|
||||
//^codeptr = $E8; codeptr++ // INX
|
||||
//^codeptr = $E8; codeptr++ // INX
|
||||
codeptr = codeptr + 17
|
||||
A_IS_TOSL = FALSE
|
||||
break
|
||||
is $AA
|
||||
is $AA // SUBBRGE - FOR/NEXT SPECIFIC SUB & TEST & BRANCH
|
||||
i++
|
||||
dest = i + *(bytecode+i)
|
||||
//puts("SUBBRGE "); puti(dest)
|
||||
@ -2127,98 +2207,131 @@ 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 = $38; codeptr++ // SEC
|
||||
^codeptr = $F5; codeptr++ // SBC zp,X
|
||||
^codeptr = $D0+VX; codeptr++ // ESTKL
|
||||
^codeptr = $95; codeptr++ // STA zp,X
|
||||
^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
|
||||
^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 = $95; codeptr++ // STA zp,X
|
||||
^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
|
||||
//VX++ //^codeptr = $E8; codeptr++ // INX
|
||||
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 = $38 // SEC
|
||||
//^codeptr = $38; codeptr++ // SEC
|
||||
codeptr=>3 = $D0F5+(VX<<8) // SBC ESTKL,X
|
||||
//^codeptr = $F5; codeptr++ // SBC zp,X
|
||||
//^codeptr = $D0+VX; codeptr++ // ESTKL
|
||||
codeptr=>5 = ($D095+$0100)+(VX<<8) // STA ESTKL+1,X
|
||||
//^codeptr = $95; codeptr++ // STA zp,X
|
||||
//^codeptr = $D0+1+VX; codeptr++ // ESTKL+1
|
||||
codeptr=>7 = ($C0B5+$0100)+(VX<<8) // LDA ESTKH+1,X
|
||||
//^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
|
||||
codeptr=>9 = $C0F5+(VX<<8) // SBC ESTKH,X
|
||||
//^codeptr = $F5; codeptr++ // SBC zp,X
|
||||
//^codeptr = $C0+VX; codeptr++ // ESTKH
|
||||
codeptr=>11 = ($C095+$0100)+(VX<<8) // STA ESTKH+1,X
|
||||
//^codeptr = $95; codeptr++ // STA zp,X
|
||||
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
|
||||
codeptr, VX = resolveX(codeptr + 13, VX + 1) //VX++ // INX
|
||||
//
|
||||
// BRGE
|
||||
//
|
||||
codeptr, VX = resolveX(codeptr, VX + 1)
|
||||
^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
^codeptr = $D0+VX; codeptr++ // ESTKL
|
||||
^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 = $03; codeptr++ // +3
|
||||
^codeptr = $4C; codeptr++ // JMP abs
|
||||
*codeptr = addrxlate=>[dest]
|
||||
if not (*codeptr & $8000) // Unresolved address list
|
||||
addrxlate=>[dest] = codeptr - *jitcodeptr
|
||||
codeptr=>0 = $D0B5+(VX<<8) // LDA ESTKL,X
|
||||
//^codeptr = $B5; codeptr++ // LDA zp,X
|
||||
//^codeptr = $D0+VX; codeptr++ // ESTKL
|
||||
codeptr=>2 = ($D0D5+$0100)+(VX<<8) // CMP ESTKL+1,X
|
||||
//^codeptr = $D5; codeptr++ // CMP 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 = ($C0F5+$0100)+(VX<<8) // SBC ESTKH+1,X
|
||||
//^codeptr = $F5; codeptr++ // SBC zp,X
|
||||
//^codeptr = $C0+1+VX; codeptr++ // ESTKH+1
|
||||
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 = $0330 // BMI +3
|
||||
//^codeptr = $30; codeptr++ // BMI rel
|
||||
//^codeptr = $03; codeptr++ // +3
|
||||
codeptr->14 = $4C // JMP abs
|
||||
//^codeptr = $4C; codeptr++ // JMP abs
|
||||
codeptr=>15 = addrxlate=>[dest]
|
||||
//*codeptr = addrxlate=>[dest]
|
||||
if not (codeptr->16 & $80) // Unresolved address list
|
||||
//if not (*codeptr & $8000) // Unresolved address list
|
||||
addrxlate=>[dest] = codeptr + 15 - *jitcodeptr
|
||||
//addrxlate=>[dest] = codeptr - *jitcodeptr
|
||||
fin
|
||||
codeptr = codeptr + 2
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
^codeptr = $E8; codeptr++ // INX
|
||||
//codeptr = codeptr + 2
|
||||
codeptr=>17 = $E8E8 // INX; INX
|
||||
//^codeptr = $E8; codeptr++ // INX
|
||||
//^codeptr = $E8; codeptr++ // INX
|
||||
codeptr = codeptr + 19
|
||||
A_IS_TOSL = FALSE
|
||||
break
|
||||
is $AC
|
||||
is $AC // BRAND - LOGICAL AND SPECIFIC BRANCH
|
||||
i++
|
||||
dest = i + *(bytecode+i)
|
||||
i++
|
||||
//puts("BRAND "); puti(dest)
|
||||
codeptr, VX = resolveX(codeptr, VX)
|
||||
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
|
||||
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
|
||||
^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+(VX<<8) // ORA ESTKH,X
|
||||
//^codeptr = $15; codeptr++ // ORA zp,X
|
||||
//^codeptr = $C0+VX; codeptr++ // ESTKH
|
||||
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 = $E8; codeptr++ // INX VX++ ???
|
||||
//codeptr = codeptr + 2
|
||||
VX++ // INX
|
||||
codeptr = codeptr + 7
|
||||
A_IS_TOSL = FALSE
|
||||
break
|
||||
is $AE
|
||||
is $AE // BROR - LOGICAL OR SPECIFIC BRANCH
|
||||
i++
|
||||
dest = i + *(bytecode+i)
|
||||
i++
|
||||
//puts("BROR "); puti(dest)
|
||||
codeptr, VX = resolveX(codeptr, VX)
|
||||
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
|
||||
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
|
||||
^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+(VX<<8) // ORA ESTKH,X
|
||||
//^codeptr = $15; codeptr++ // ORA zp,X
|
||||
//^codeptr = $C0+VX; codeptr++ // ESTKH
|
||||
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 = $E8; codeptr++ // INX // VX++ ???
|
||||
//codeptr = codeptr + 2
|
||||
VX++ // INX
|
||||
codeptr = codeptr + 7
|
||||
A_IS_TOSL = FALSE
|
||||
break
|
||||
// ADDLB,ADDLW,ADDAB,ADDAW,IDXLB,IDXLW,IDXAB,IDXAW ; B0 B2 B4 B6 B8 BA BC BE
|
||||
|
Loading…
x
Reference in New Issue
Block a user