diff --git a/src/libsrc/apple/jit.pla b/src/libsrc/apple/jit.pla index e22301b..7dde7aa 100644 --- a/src/libsrc/apple/jit.pla +++ b/src/libsrc/apple/jit.pla @@ -23,6 +23,15 @@ end const jitcomp = $03E2 const jitcodeptr = $03E4 const codemax = $BEE0 +const estkh8 = $C000 +const estkh = $00C0 +const estkl8 = $D000 +const estkl = $00D0 +const ifpl8 = $E000 +const ifph8 = $E100 +const jmptmp = $00E6 +const tmpl8 = $E700 +const tmph8 = $E800 // // Bytecode interpreter entrypoints // diff --git a/src/libsrc/apple/jit16.pla b/src/libsrc/apple/jit16.pla index e22301b..7dde7aa 100644 --- a/src/libsrc/apple/jit16.pla +++ b/src/libsrc/apple/jit16.pla @@ -23,6 +23,15 @@ end const jitcomp = $03E2 const jitcodeptr = $03E4 const codemax = $BEE0 +const estkh8 = $C000 +const estkh = $00C0 +const estkl8 = $D000 +const estkl = $00D0 +const ifpl8 = $E000 +const ifph8 = $E100 +const jmptmp = $00E6 +const tmpl8 = $E700 +const tmph8 = $E800 // // Bytecode interpreter entrypoints // diff --git a/src/libsrc/jitcore.pla b/src/libsrc/jitcore.pla index ccfc336..ae754ca 100644 --- a/src/libsrc/jitcore.pla +++ b/src/libsrc/jitcore.pla @@ -183,7 +183,7 @@ def compiler(defptr)#0 // codeptr, VX = resolveX(codeptr, VX) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095//+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95//+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin VY = UNKNOWN @@ -226,7 +226,7 @@ def compiler(defptr)#0 if opcode < $20 // CONSTANT NYBBLE //puts("CN $"); putb(opcode/2) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin VX-- // DEX @@ -235,7 +235,7 @@ def compiler(defptr)#0 codeptr = codeptr + 2 VY = 0 fin - *codeptr = $C094+(VX<<8) // STY ESTKH,X + *codeptr = estkh8+$94+(VX<<8) // STY ESTKH,X codeptr = codeptr + 2 if opcode == 0 ^codeptr = $98; codeptr++ // TYA -> LDA #$00 @@ -249,38 +249,38 @@ def compiler(defptr)#0 is $20 // MINUS ONE //puts("MINUS_ONE") if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - VX-- // DEX - codeptr=>0 = $FFA9 // LDA #$FF - codeptr=>2 = $C095+(VX<<8) // STA ESTKH,X + VX-- // DEX + codeptr=>0 = $FFA9 // LDA #$FF + codeptr=>2 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 4 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $22 // BREQ is $24 // BRNE i++ dest = i + *(bytecode+i) i++ - codeptr, VX = resolveX(codeptr, VX + 2) // INX; INX + codeptr, VX = resolveX(codeptr, VX + 2) // INX; INX if not A_IS_TOSL - *codeptr = $D0B5-$0200//+(VX<<8) // LDA ESTKL-2,X + *codeptr = estkl8+$B5-$0200//+(VX<<8) // LDA ESTKL-2,X codeptr = codeptr + 2 fin if opcode == $22 //puts("BREQ "); puti(dest) - codeptr=>2 = $09D0 // BNE +9 - codeptr=>8 = $03D0 // BNE +3 + codeptr=>2 = $09D0 // BNE +9 + codeptr=>8 = $03D0 // BNE +3 else //puts("BRNE "); puti(dest) - codeptr=>2 = $06D0 // BNE +6 - codeptr=>8 = $03F0 // BEQ +3 + codeptr=>2 = $06D0 // BNE +6 + codeptr=>8 = $03F0 // BEQ +3 fin - codeptr=>0 = $D0D5-$0100//+(VX<<8) // CMP ESTKL-1,X - codeptr=>4 = $C0B5-$0200//+(VX<<8) // LDA ESTKH-2,X - codeptr=>6 = $C0D5-$0100//+(VX<<8) // CMP ESTKH-1,X - codeptr->10 = $4C // JMP abs + codeptr=>0 = estkl8+$D5-$0100//+(VX<<8) // CMP ESTKL-1,X + codeptr=>4 = estkh8+$B5-$0200//+(VX<<8) // LDA ESTKH-2,X + codeptr=>6 = estkh8+$D5-$0100//+(VX<<8) // CMP ESTKH-1,X + codeptr->10 = $4C // JMP abs codeptr=>11 = addrxlate=>[dest] if not (codeptr->12 & $80) // Unresolved address list addrxlate=>[dest] = codeptr + 11 - *jitcodeptr @@ -294,44 +294,43 @@ def compiler(defptr)#0 i = i + 2 //puts("LA/CW $"); puth(dest) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - VX-- // DEX - codeptr=>0 = $A9+(dest&$FF00) // LDA #2 = $C095+(VX<<8) // STA ESTKH,X - codeptr=>4 = $A9+(dest<<8) // LDA #>VAL + VX-- // DEX + codeptr=>0 = $A9+(dest&$FF00) // LDA #2 = estkh8+$95+(VX<<8) // STA ESTKH,X + codeptr=>4 = $A9+(dest<<8) // LDA #>VAL codeptr = codeptr + 6 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $28 // LLA i++ j = ^(bytecode+i) //puts("LLA "); puti(^(bytecode+i)) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - VX-- // DEX + VX-- // DEX if VY == j - ^codeptr = $98; codeptr++ // TYA -> LDA #imm - + ^codeptr = $98; codeptr++ // TYA -> LDA #imm else - *codeptr = $A9+(j<<8) // LDA #imm + *codeptr = $A9+(j<<8) // LDA #imm codeptr = codeptr + 2 fin - codeptr->0 = $18 // CLC - codeptr=>1 = $E065 // ADC IFPL - codeptr=>3 = $D095+(VX<<8) // STA ESTKL,X + codeptr->0 = $18 // CLC + codeptr=>1 = ifpl8+$65 // ADC IFPL + codeptr=>3 = estkl8+$95+(VX<<8) // STA ESTKL,X if VY == 0 - codeptr->5 = $98 // TYA -> LDA #00 + codeptr->5 = $98 // TYA -> LDA #00 codeptr = codeptr + 6 else - codeptr=>5 = $00A9 // LDA #$00 + codeptr=>5 = $00A9 // LDA #$00 codeptr = codeptr + 7 fin - codeptr=>0 = $E165 // ADC IFPH - codeptr=>2 = $C095+(VX<<8) // STA ESTKH,X + codeptr=>0 = ifph8+$65 // ADC IFPH + codeptr=>2 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 4 A_IS_TOSL = FALSE break @@ -339,28 +338,28 @@ def compiler(defptr)#0 is $5E // CFFB i++ if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - VX-- // DEX + VX-- // DEX if opcode == $2A //puts("CB $"); putb(^(bytecode+i)) if VY <> 0 - *codeptr = $00A0 // LDY #$00 + *codeptr = $00A0 // LDY #$00 codeptr = codeptr + 2 VY = 0 fin - codeptr=>0 = $C094+(VX<<8) // STY ESTKH,X + codeptr=>0 = estkh8+$94+(VX<<8) // STY ESTKH,X codeptr = codeptr + 2 else //puts("CFFB $FF"); putb(^(bytecode+i)) - codeptr=>0 = $FFA9 // LDA #$FF - codeptr=>2 = $C095+(VX<<8) // STA ESTKH,X + codeptr=>0 = $FFA9 // LDA #$FF + codeptr=>2 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 4 fin - *codeptr = $A9+(^(bytecode+i)<<8) // LDA #imm + *codeptr = $A9+(^(bytecode+i)<<8) // LDA #imm codeptr = codeptr + 2 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $2E // CS i++ @@ -369,21 +368,21 @@ def compiler(defptr)#0 //puts("CS "); //puts(bytecode+i); //puts("-->"); puti(dest) if isule(dest, codemax) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - VX-- // DEX - codeptr=>0 = $A9+((codeptr+9)&$FF00) // LDA #>STRING - codeptr=>2 = $C095+(VX<<8) // STA ESTKH,X - codeptr=>4 = $A9+((codeptr+9)<<8) // LDA #6 = $4C // JMP abs + VX-- // DEX + codeptr=>0 = $A9+((codeptr+9)&$FF00) // LDA #>STRING + codeptr=>2 = estkh8+$95+(VX<<8) // STA ESTKH,X + codeptr=>4 = $A9+((codeptr+9)<<8) // LDA #6 = $4C // JMP abs dest = codeptr + 10 + j codeptr=>7 = dest strcpy(codeptr + 9, bytecode + i) i = i + j fin codeptr = dest - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $32 // DROP2 //puts("DROP2") @@ -396,18 +395,18 @@ def compiler(defptr)#0 is $34 // DUP //puts("DUP") if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 elsif A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $C0B4+(VX<<8) // LDY ESTKH,X - VX-- // DEX - codeptr=>2 = $C094+(VX<<8) // STY ESTKH,X + codeptr=>0 = estkh8+$B4+(VX<<8) // LDY ESTKH,X + VX-- // DEX + codeptr=>2 = estkh8+$94+(VX<<8) // STY ESTKH,X codeptr = codeptr + 4 VY = UNKNOWN - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break //is $36 //puts("DIVMOD") @@ -425,15 +424,15 @@ def compiler(defptr)#0 j = 1 fin if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr->0 = $18 // CLC - codeptr=>1 = $69+(j<<8) // ADC #imm - codeptr=>3 = $0290 // BCC +2 - codeptr=>5 = $C0F6+(VX<<8) // INC ESTKH,X + codeptr->0 = $18 // CLC + codeptr=>1 = $69+(j<<8) // ADC #imm + codeptr=>3 = $0290 // BCC +2 + codeptr=>5 = estkh8+$F6+(VX<<8) // INC ESTKH,X codeptr = codeptr + 7 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $3A // SUBI i++ @@ -445,151 +444,151 @@ def compiler(defptr)#0 j = 1 fin if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr->0 = $38 // SEC - codeptr=>1 = $E9+(j<<8) // SBC #imm - codeptr=>3 = $02B0 // BCS +2 - codeptr=>5 = $C0D6+(VX<<8) // DEC ESTKH,X + codeptr->0 = $38 // SEC + codeptr=>1 = $E9+(j<<8) // SBC #imm + codeptr=>3 = $02B0 // BCS +2 + codeptr=>5 = estkh8+$D6+(VX<<8) // DEC ESTKH,X codeptr = codeptr + 7 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $3C // ANDI i++ //puts("ANDI $"); putb(^(bytecode+i)) if VY <> 0 - *codeptr = $00A0 // LDY #$00 + *codeptr = $00A0 // LDY #$00 codeptr = codeptr + 2 VY = 0 fin if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $29+(^(bytecode+i)<<8) // AND #imm - codeptr=>2 = $C094+(VX<<8) // STY ESTKH,X + codeptr=>0 = $29+(^(bytecode+i)<<8) // AND #imm + codeptr=>2 = estkh8+$94+(VX<<8) // STY ESTKH,X codeptr = codeptr + 4 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $3E // ORI i++ //puts("ORI $"); putb(^(bytecode+i)) if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - *codeptr = $09+(^(bytecode+i)<<8) // ORA #imm + *codeptr = $09+(^(bytecode+i)<<8) // ORA #imm codeptr = codeptr + 2 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $40 // ISEQ is $42 // ISNE if VY <> 0 - *codeptr = $00A0 // LDY #$00 + *codeptr = $00A0 // LDY #$00 codeptr = codeptr + 2 fin if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin if opcode == $40 //puts("ISEQ") - codeptr=>2 = $07D0 // BNE +7 - codeptr=>8 = $01D0 // BNE +1 + codeptr=>2 = $07D0 // BNE +7 + codeptr=>8 = $01D0 // BNE +1 else //puts("ISNE") - codeptr=>2 = $06D0 // BNE +6 - codeptr=>8 = $01F0 // BEQ +1 + codeptr=>2 = $06D0 // BNE +6 + codeptr=>8 = $01F0 // BEQ +1 fin - codeptr=>0 = $D0D5+$0100+(VX<<8) // CMP ESTKL+1,X - codeptr=>4 = $C0B5+(VX<<8) // LDA ESTKH,X - codeptr=>6 = $C0D5+$0100+(VX<<8) // CMP ESTKH+1 - codeptr=>10 = $9888 // DEY; TYA - codeptr=>12 = $C094+$0100+(VX<<8) // STY ESTKH+1,X + codeptr=>0 = estkl8+$D5+$0100+(VX<<8) // CMP ESTKL+1,X + codeptr=>4 = estkh8+$B5+(VX<<8) // LDA ESTKH,X + codeptr=>6 = estkh8+$D5+$0100+(VX<<8) // CMP ESTKH+1 + codeptr=>10 = $9888 // DEY; TYA + codeptr=>12 = estkh8+$94+$0100+(VX<<8) // STY ESTKH+1,X codeptr = codeptr + 14 - VX++ // INX + VX++ // INX VY = UNKNOWN - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $44 // ISGT is $4A // ISLE if VY <> 0 - *codeptr = $00A0 // LDY #$00 + *codeptr = $00A0 // LDY #$00 codeptr = codeptr + 2 fin if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $D0D5+$0100+(VX<<8) // CMP ESTKL+1,X - codeptr=>2 = $C0B5+(VX<<8) // LDA ESTKH,X - codeptr=>4 = $C0F5+$0100+(VX<<8) // SBC ESTKH+1 - codeptr=>6 = $0250 // BVC +2 - codeptr=>8 = $8049 // EOR #$80 + codeptr=>0 = estkl8+$D5+$0100+(VX<<8) // CMP ESTKL+1,X + codeptr=>2 = estkh8+$B5+(VX<<8) // LDA ESTKH,X + codeptr=>4 = estkh8+$F5+$0100+(VX<<8) // SBC ESTKH+1 + codeptr=>6 = $0250 // BVC +2 + codeptr=>8 = $8049 // EOR #$80 if opcode == $44 //puts("ISGT") - codeptr=>10 = $0110 // BPL +1 + codeptr=>10 = $0110 // BPL +1 else //puts("ISLE") - codeptr=>10 = $0130 // BMI +1 + codeptr=>10 = $0130 // BMI +1 fin - codeptr=>12 = $9888 // DEY TYA - codeptr=>14 = $C094+$0100+(VX<<8) // STY ESTKH+1,X + codeptr=>12 = $9888 // DEY TYA + codeptr=>14 = estkh8+$94+$0100+(VX<<8) // STY ESTKH+1,X codeptr = codeptr + 16 - VX++ // INX + VX++ // INX VY = UNKNOWN - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $46 // ISLT is $48 // ISGE if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin if VY <> 0 - *codeptr = $00A0 // LDY #$00 + *codeptr = $00A0 // LDY #$00 codeptr = codeptr + 2 fin - codeptr=>0 = $D0B5+$0100+(VX<<8) // LDA ESTKL+1,X - codeptr=>2 = $D0D5+(VX<<8) // CMP ESTKL,X - codeptr=>4 = $C0B5+$0100+(VX<<8) // LDA ESTKH+1,X - codeptr=>6 = $C0F5+(VX<<8) // SBC ESTKH - codeptr=>8 = $0250 // BVC +2 - codeptr=>10 = $8049 // EOR #$80 + codeptr=>0 = estkl8+$B5+$0100+(VX<<8) // LDA ESTKL+1,X + codeptr=>2 = estkl8+$D5+(VX<<8) // CMP ESTKL,X + codeptr=>4 = estkh8+$B5+$0100+(VX<<8) // LDA ESTKH+1,X + codeptr=>6 = estkh8+$F5+(VX<<8) // SBC ESTKH + codeptr=>8 = $0250 // BVC +2 + codeptr=>10 = $8049 // EOR #$80 if opcode == $46 //puts("ISLT") - codeptr=>12 = $0110 // BPL +1 + codeptr=>12 = $0110 // BPL +1 else //puts("ISGE") - codeptr=>12 = $0130 // BMI +1 + codeptr=>12 = $0130 // BMI +1 fin - codeptr=>14 = $9888 // DEY; TYA - codeptr=>16 = $C094+$0100+(VX<<8) // STY ESTKH+1,X + codeptr=>14 = $9888 // DEY; TYA + codeptr=>16 = estkh8+$94+$0100+(VX<<8) // STY ESTKH+1,X codeptr = codeptr + 18 - VX++ // INX + VX++ // INX VY = UNKNOWN - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $4C // BRFLS is $4E // BRTRU i++ dest = i + *(bytecode+i) i++ - codeptr, VX = resolveX(codeptr, VX + 1) // INX + codeptr, VX = resolveX(codeptr, VX + 1) // INX if not A_IS_TOSL - *codeptr = $D0B5-$0100//+(VX<<8) // LDA ESTKL-1,X + *codeptr = estkl8+$B5-$0100//+(VX<<8) // LDA ESTKL-1,X codeptr = codeptr + 2 fin - codeptr=>0 = $C015-$0100//+(VX<<8) // ORA ESTKH-1,X + codeptr=>0 = estkh8+$15-$0100//+(VX<<8) // ORA ESTKH-1,X if opcode == $4C //puts("BRFLS "); puti(dest) - codeptr=>2 = $03D0 // BNE +3 + codeptr=>2 = $03D0 // BNE +3 else //puts("BRTRU "); puti(dest) - codeptr=>2 = $03F0 // BEQ +3 + codeptr=>2 = $03F0 // BEQ +3 fin - codeptr->4 = $4C // JMP abs + codeptr->4 = $4C // JMP abs codeptr=>5 = addrxlate=>[dest] if not (codeptr->6 & $80) // Unresolved address list addrxlate=>[dest] = codeptr + 5 - *jitcodeptr @@ -604,10 +603,10 @@ def compiler(defptr)#0 //puts("BRNCH "); puti(dest) codeptr, VX = resolveX(codeptr, VX) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095//+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95//+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - codeptr->0 = $4C // JMP abs + codeptr->0 = $4C // JMP abs codeptr=>1 = addrxlate=>[dest] if not (codeptr->2 & $80) // Unresolved address list addrxlate=>[dest] = codeptr + 1 - *jitcodeptr @@ -626,23 +625,23 @@ def compiler(defptr)#0 ^(bytecode+case) = $FE // Flag as NOP case++ if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $C0B4+(VX<<8) // LDY ESTKH,X - codeptr, VX = resolveX(codeptr + 2, VX + 1) // INX + codeptr=>0 = estkh8+$B4+(VX<<8) // LDY ESTKH,X + codeptr, VX = resolveX(codeptr + 2, VX + 1) // INX repeat dest = *(bytecode+case) //puts(" $"); puth(dest) - codeptr=>0 = $C9+(dest<<8) // CMP #imm - codeptr=>2 = $07D0 // BNE +7 - codeptr=>4 = $C0+(dest&$FF00) // CPY #imm - codeptr=>6 = $03D0 // BNE +3 + codeptr=>0 = $C9+(dest<<8) // CMP #imm + codeptr=>2 = $07D0 // BNE +7 + codeptr=>4 = $C0+(dest&$FF00) // CPY #imm + codeptr=>6 = $03D0 // BNE +3 *(bytecode+case) = $FEFE case = case + 2 dest = case + *(bytecode+case) //puts("-->"); puti(dest); putln - codeptr->8 = $4C // JMP abs + codeptr->8 = $4C // JMP abs codeptr=>9 = addrxlate=>[dest] if not (codeptr->10 & $80) // Unresolved address list addrxlate=>[dest] = codeptr + 9 - *jitcodeptr @@ -652,7 +651,7 @@ def compiler(defptr)#0 case = case + 2 j-- until not j - codeptr->0 = $4C // JMP abs + codeptr->0 = $4C // JMP abs codeptr=>1 = addrxlate=>[case] if not (codeptr->2 & $80) // Unresolved address list addrxlate=>[case] = codeptr + 1 - *jitcodeptr @@ -671,10 +670,10 @@ def compiler(defptr)#0 // codeptr, VX = resolveX(codeptr, VX) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095//+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95//+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - codeptr->0 = $20 // JSR abs + codeptr->0 = $20 // JSR abs codeptr=>1 = *(bytecode+i+1) codeptr = codeptr + 3 VY = UNKNOWN @@ -687,18 +686,18 @@ def compiler(defptr)#0 // Pull address off stack // if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $E785 // STA $E7:TMPL - codeptr=>2 = $C0B5+(VX<<8) // LDA ESTKH,X - codeptr=>4 = $E885 // STA $E8:TMPH - codeptr, VX = resolveX(codeptr + 6, VX + 1) // INX + codeptr=>0 = tmpl8+$85 // STA $E7:TMPL + codeptr=>2 = estkh8+$B5+(VX<<8) // LDA ESTKH,X + codeptr=>4 = tmph8+$85 // STA $E8:TMPH + codeptr, VX = resolveX(codeptr + 6, VX + 1) // INX // // Call through TMP // - codeptr->0 = $20 // JSR abs - codeptr=>1 = $00E6 // $E6:JMPTMP + codeptr->0 = $20 // JSR abs + codeptr=>1 = jmptmp // $E6:JMPTMP codeptr = codeptr + 3 VY = UNKNOWN A_IS_TOSL = FALSE @@ -711,12 +710,12 @@ def compiler(defptr)#0 // codeptr, VX = resolveX(codeptr, VX) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095//+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95//+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - codeptr->0 = $20 // JSR abs - codeptr=>1 = directentry // INTERP - codeptr=>3 = $5A + (^(bytecode+i)<<8) // LEAVE CODE AND OPERAND + codeptr->0 = $20 // JSR abs + codeptr=>1 = directentry // INTERP + codeptr=>3 = $5A + (^(bytecode+i)<<8) // LEAVE CODE AND OPERAND codeptr = codeptr + 5 A_IS_TOSL = FALSE break @@ -724,43 +723,43 @@ def compiler(defptr)#0 //puts("RET") codeptr, VX = resolveX(codeptr, VX) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095//+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95//+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - ^codeptr = $60; codeptr++ // RTS + ^codeptr = $60; codeptr++ // RTS A_IS_TOSL = FALSE break is $60 // LB //puts("LB") if VY <> 0 - *codeptr = $00A0 // LDY #$00 + *codeptr = $00A0 // LDY #$00 codeptr = codeptr + 2 VY = 0 fin if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $C095-$0100+(VX<<8) // STA ESTKH-1,X - codeptr=>2 = $C0A1-$0100+(VX<<8) // LDA (ESTKH-1,X) - codeptr=>4 = $C094+(VX<<8) // STY ESTKH,X + codeptr=>0 = estkh8+$95-$0100+(VX<<8) // STA ESTKH-1,X + codeptr=>2 = estkh8+$A1-$0100+(VX<<8) // LDA (ESTKH-1,X) + codeptr=>4 = estkh8+$94+(VX<<8) // STY ESTKH,X codeptr = codeptr + 6 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $62 // LW //puts("LW") if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $C095-$0100+(VX<<8) // STA ESTKH-1,X - codeptr=>2 = $C0A1-$0100+(VX<<8) // LDA (ESTKH-1,X) - codeptr=>4 = $D095+(VX<<8) // STA ESTKL,X - codeptr=>6 = $C0F6-$0100+(VX<<8) // INC ESTKH-1,X - codeptr=>8 = $02D0 // BNE +2 - codeptr=>10 = $C0F6+(VX<<8) // INC ESTKH,X - codeptr=>12 = $C0A1-$0100+(VX<<8) // LDA (ESTKH-1,X) - codeptr=>14 = $C095+(VX<<8) // STA ESTKH,X + codeptr=>0 = estkh8+$95-$0100+(VX<<8) // STA ESTKH-1,X + codeptr=>2 = estkh8+$A1-$0100+(VX<<8) // LDA (ESTKH-1,X) + codeptr=>4 = estkl8+$95+(VX<<8) // STA ESTKL,X + codeptr=>6 = estkh8+$F6-$0100+(VX<<8) // INC ESTKH-1,X + codeptr=>8 = $02D0 // BNE +2 + codeptr=>10 = estkh8+$F6+(VX<<8) // INC ESTKH,X + codeptr=>12 = estkh8+$A1-$0100+(VX<<8) // LDA (ESTKH-1,X) + codeptr=>14 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 16 A_IS_TOSL = FALSE break @@ -769,100 +768,100 @@ def compiler(defptr)#0 j = ^(bytecode+i) //puts("LLB "); puti(j) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - VX-- // DEX + VX-- // DEX if VY <> j - *codeptr = $A0+(j<<8) // LDY #imm + *codeptr = $A0+(j<<8) // LDY #imm codeptr = codeptr + 2 fin - *codeptr = $E0B1 // LDA (IFP),Y + *codeptr = ifpl8+$B1 // LDA (IFP),Y codeptr = codeptr + 2 if j <> 0 - *codeptr = $00A0 // LDY #$00 + *codeptr = $00A0 // LDY #$00 codeptr = codeptr + 2 fin - *codeptr = $C094+(VX<<8) // STY ESTKH,X + *codeptr = estkh8+$94+(VX<<8) // STY ESTKH,X codeptr = codeptr + 2 VY = 0 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $66 // LLW i++ j = ^(bytecode+i) //puts("LLW "); puti(j) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - VX-- // DEX + VX-- // DEX if VY <> j - *codeptr = $A0+((j+1)<<8) // LDY #imm + *codeptr = $A0+((j+1)<<8) // LDY #imm codeptr = codeptr + 2 VY = j else - ^codeptr = $C8; codeptr++ // INY + ^codeptr = $C8; codeptr++ // INY fin - codeptr=>0 = $E0B1 // LDA (IFP),Y - codeptr=>2 = $C095+(VX<<8) // STA ESTKH,X - codeptr->4 = $88 // DEY - codeptr=>5 = $E0B1 // LDA (IFP),Y + codeptr=>0 = ifpl8+$B1 // LDA (IFP),Y + codeptr=>2 = estkh8+$95+(VX<<8) // STA ESTKH,X + codeptr->4 = $88 // DEY + codeptr=>5 = ifpl8+$B1 // LDA (IFP),Y codeptr = codeptr + 7 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $68 // LAB is $6A // LAW dest = *(bytecode+i+1) i = i + 2 if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - VX-- // DEX + VX-- // DEX if opcode == $68 //puts("LAB $"); puth(dest) if VY <> 0 - *codeptr = $00A0 // LDY #$00 + *codeptr = $00A0 // LDY #$00 codeptr = codeptr + 2 VY = 0 fin - *codeptr = $C094+(VX<<8) // STY ESTKH,X + *codeptr = estkh8+$94+(VX<<8) // STY ESTKH,X codeptr = codeptr + 2 else //puts("LAW $"); puth(dest) - codeptr->0 = $AD // LDA abs+1 + codeptr->0 = $AD // LDA abs+1 codeptr=>1 = dest+1 - codeptr=>3 = $C095+(VX<<8) // STA ESTKH,X + codeptr=>3 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 5 fin - codeptr->0 = $AD // LDA abs + codeptr->0 = $AD // LDA abs codeptr=>1 = dest codeptr = codeptr + 3 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $6C // DLB i++ j = ^(bytecode+i) //puts("DLB "); puti(j) if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 A_IS_TOSL = TOS_CLEAN fin if VY <> j - *codeptr = $A0+(j<<8) // LDY #imm + *codeptr = $A0+(j<<8) // LDY #imm codeptr = codeptr + 2 VY = j fin - *codeptr = $E091 // STA (IFP),Y + *codeptr = ifpl8+$91 // STA (IFP),Y codeptr = codeptr + 2 if VY <> 0 - *codeptr = $00A0 // LDY #$00 + *codeptr = $00A0 // LDY #$00 codeptr = codeptr + 2 VY = 0 fin - *codeptr = $C094+(VX<<8) // STY ESTKH,X + *codeptr = estkh8+$94+(VX<<8) // STY ESTKH,X codeptr = codeptr + 2 break is $6E // DLW @@ -870,46 +869,46 @@ def compiler(defptr)#0 j = ^(bytecode+i) //puts("DLW "); puti(j) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin if VY <> j - *codeptr = $A0+((j+1)<<8) // LDY #imm + *codeptr = $A0+((j+1)<<8) // LDY #imm codeptr = codeptr + 2 VY = j else - ^codeptr = $C8; codeptr++ // INY + ^codeptr = $C8; codeptr++ // INY fin - codeptr=>0 = $C0B5+(VX<<8) // LDA ESTKH,X - codeptr=>2 = $E091 // STA (IFP),Y - codeptr->4 = $88 // DEY - codeptr=>5 = $D0B5+(VX<<8) // LDA ESTKL,X - codeptr=>7 = $E091 // STA (IFP),Y + codeptr=>0 = estkh8+$B5+(VX<<8) // LDA ESTKH,X + codeptr=>2 = ifpl8+$91 // STA (IFP),Y + codeptr->4 = $88 // DEY + codeptr=>5 = estkl8+$B5+(VX<<8) // LDA ESTKL,X + codeptr=>7 = ifpl8+$91 // STA (IFP),Y codeptr = codeptr + 9 A_IS_TOSL = TOS_CLEAN break is $70 // SB is $72 // SW if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $C095-$0100+(VX<<8) // STA ESTKH-1,X - codeptr=>2 = $D0B5+$0100+(VX<<8) // LDA ESTKL+1,X - codeptr=>4 = $C081-$0100+(VX<<8) // STA (ESTKH-1,X) + codeptr=>0 = estkh8+$95-$0100+(VX<<8) // STA ESTKH-1,X + codeptr=>2 = estkl8+$B5+$0100+(VX<<8) // LDA ESTKL+1,X + codeptr=>4 = estkh8+$81-$0100+(VX<<8) // STA (ESTKH-1,X) if opcode == $70 //puts("SB") codeptr = codeptr + 6 else //puts("SW") - codeptr=>6 = $C0B5+$0100+(VX<<8) // LDA ESTKH+1,X - codeptr=>8 = $C0F6-$0100+(VX<<8) // INC ESTKH-1,X - codeptr=>10 = $02D0 // BNE +2 - codeptr=>12 = $C0F6+(VX<<8) // INC ESTKH,X - codeptr=>14 = $C081-$0100+(VX<<8) // STA (ESTKH-1,X) + codeptr=>6 = estkh8+$B5+$0100+(VX<<8) // LDA ESTKH+1,X + codeptr=>8 = estkh8+$F6-$0100+(VX<<8) // INC ESTKH-1,X + codeptr=>10 = $02D0 // BNE +2 + codeptr=>12 = estkh8+$F6+(VX<<8) // INC ESTKH,X + codeptr=>14 = estkh8+$81-$0100+(VX<<8) // STA (ESTKH-1,X) codeptr = codeptr + 16 fin - VX = VX + 2 // INX; INX + VX = VX + 2 // INX; INX A_IS_TOSL = FALSE break is $74 // SLB @@ -917,27 +916,27 @@ def compiler(defptr)#0 i++ j = ^(bytecode+i) if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin if VY <> j - *codeptr = $A0+(j<<8) // LDY #imm + *codeptr = $A0+(j<<8) // LDY #imm codeptr = codeptr + 2 VY = j fin - codeptr=>0 = $E091 // STA (IFP),Y + codeptr=>0 = ifpl8+$91 // STA (IFP),Y if opcode == $74 //puts("SLB "); puti(j) codeptr = codeptr + 2 else //puts("SLW "); puti(j) - codeptr->2 = $C8 // INY - codeptr=>3 = $C0B5+(VX<<8) // LDA ESTKH,X - codeptr=>5 = $E091 // STA (IFP),Y + codeptr->2 = $C8 // INY + codeptr=>3 = estkh8+$B5+(VX<<8) // LDA ESTKH,X + codeptr=>5 = ifpl8+$91 // STA (IFP),Y codeptr = codeptr + 7 VY++ fin - VX++ // INX + VX++ // INX A_IS_TOSL = FALSE break is $78 // SAB @@ -946,21 +945,21 @@ def compiler(defptr)#0 i = i + 2 //puts("SAW $"); puth(dest) if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr->0 = $8D // STA abs + codeptr->0 = $8D // STA abs codeptr=>1 = dest if opcode == $78 - //puts("SAB $"); puth(*(bytecode+i)) + //puts("SAB $"); puth(dest) codeptr = codeptr + 3 else - codeptr=>3 = $C0B5+(VX<<8) // LDA ESTKH,X - codeptr->5 = $8D // STA abs+1 + codeptr=>3 = estkh8+$B5+(VX<<8) // LDA ESTKH,X + codeptr->5 = $8D // STA abs+1 codeptr=>6 = dest+1 codeptr = codeptr + 8 fin - VX++ // INX + VX++ // INX A_IS_TOSL = FALSE break is $7C // DAB @@ -969,25 +968,25 @@ def compiler(defptr)#0 i = i + 2 //puts("DAW $"); puth(*(bytecode+i)) if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 A_IS_TOSL = TOS_CLEAN fin - codeptr->0 = $8D // STA abs + codeptr->0 = $8D // STA abs codeptr=>1 = dest if opcode == $7C - //puts("DAB $"); puth(*(bytecode+i)) + //puts("DAB $"); puth(dest) codeptr = codeptr + 3 if VY <> 0 - *codeptr = $00A0 // LDY #$00 + *codeptr = $00A0 // LDY #$00 codeptr = codeptr + 2 VY = 0 fin - *codeptr = $C094+(VX<<8) // STY ESTKH,X + *codeptr = estkh8+$94+(VX<<8) // STY ESTKH,X codeptr = codeptr + 2 else - codeptr=>3 = $C0B4+(VX<<8) // LDY ESTKH,X - codeptr->5 = $8C // STY abs+1 + codeptr=>3 = estkh8+$B4+(VX<<8) // LDY ESTKH,X + codeptr->5 = $8C // STY abs+1 codeptr=>6 = dest+1 codeptr = codeptr + 8 VY = UNKNOWN @@ -996,48 +995,48 @@ def compiler(defptr)#0 is $80 // NOT //puts("NOT") if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $C015+(VX<<8) // ORA ESTKH,X - codeptr=>2 = $02F0 // BEQ +2 - codeptr=>4 = $FFA9 // LDA #$FF - codeptr=>6 = $FF49 // EOR #$FF - codeptr=>8 = $C095+(VX<<8) // STA ESTKH,X + codeptr=>0 = estkh8+$15+(VX<<8) // ORA ESTKH,X + codeptr=>2 = $02F0 // BEQ +2 + codeptr=>4 = $FFA9 // LDA #$FF + codeptr=>6 = $FF49 // EOR #$FF + codeptr=>8 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 10 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X break is $82 // ADD //puts("ADD") if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr->0 = $18 // CLC - codeptr=>1 = $D075+$0100+(VX<<8) // ADC ESTKL+1,X - codeptr=>3 = $D095+$0100+(VX<<8) // STA ESTKL+1,X - codeptr=>5 = $C0B5+(VX<<8) // LDA ESTKH,X - codeptr=>7 = $C075+$0100+(VX<<8) // ADC ESTKH+1,X - codeptr=>9 = $C095+$0100+(VX<<8) // STA ESTKH+1,X + codeptr->0 = $18 // CLC + codeptr=>1 = estkl8+$75+$0100+(VX<<8) // ADC ESTKL+1,X + codeptr=>3 = estkl8+$95+$0100+(VX<<8) // STA ESTKL+1,X + codeptr=>5 = estkh8+$B5+(VX<<8) // LDA ESTKH,X + codeptr=>7 = estkh8+$75+$0100+(VX<<8) // ADC ESTKH+1,X + codeptr=>9 = estkh8+$95+$0100+(VX<<8) // STA ESTKH+1,X codeptr = codeptr + 11 - VX++ // INX + VX++ // INX A_IS_TOSL = FALSE break is $84 // SUB //puts("SUB") if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $D0B5+$0100+(VX<<8) // LDA ESTKL+1,X - codeptr->2 = $38 // SEC - codeptr=>3 = $D0F5+(VX<<8) // SBC ESTKL,X - codeptr=>5 = $D095+$0100+(VX<<8) // STA ESTKL+1,X - codeptr=>7 = $C0B5+$0100+(VX<<8) // LDA ESTKH+1,X - codeptr=>9 = $C0F5+(VX<<8) // SBC ESTKH,X - codeptr=>11 = $C095+$0100+(VX<<8) // STA ESTKH+1,X + codeptr=>0 = estkl8+$B5+$0100+(VX<<8) // LDA ESTKL+1,X + codeptr->2 = $38 // SEC + codeptr=>3 = estkl8+$F5+(VX<<8) // SBC ESTKL,X + codeptr=>5 = estkl8+$95+$0100+(VX<<8) // STA ESTKL+1,X + codeptr=>7 = estkh8+$B5+$0100+(VX<<8) // LDA ESTKH+1,X + codeptr=>9 = estkh8+$F5+(VX<<8) // SBC ESTKH,X + codeptr=>11 = estkh8+$95+$0100+(VX<<8) // STA ESTKH+1,X codeptr = codeptr + 13 - VX++ // INX + VX++ // INX A_IS_TOSL = FALSE break is $86 // MUL @@ -1063,7 +1062,7 @@ def compiler(defptr)#0 // codeptr, VX = resolveX(codeptr, VX) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095//+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95//+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin codeptr->0 = $20 // JSR INTERP @@ -1076,34 +1075,34 @@ def compiler(defptr)#0 is $90 // NEG //puts("NEG") if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin if VY <> 0 - *codeptr = $00A0 // LDY #$00 + *codeptr = $00A0 // LDY #$00 codeptr = codeptr + 2 VY = 0 fin - codeptr=>0 = $3898 // TYA -> LDA #$00; SEC - codeptr=>2 = $D0F5+(VX<<8) // SBC ESTKL,X - codeptr=>4 = $D095+(VX<<8) // STA ESTKL,X - codeptr->6 = $98 // TYA -> LDA #00 - codeptr=>7 = $C0F5+(VX<<8) // SBC ESTKH,X - codeptr=>9 = $C095+(VX<<8) // STA ESTKH,X + codeptr=>0 = $3898 // TYA -> LDA #$00; SEC + codeptr=>2 = estkl8+$F5+(VX<<8) // SBC ESTKL,X + codeptr=>4 = estkl8+$95+(VX<<8) // STA ESTKL,X + codeptr->6 = $98 // TYA -> LDA #00 + codeptr=>7 = estkh8+$F5+(VX<<8) // SBC ESTKH,X + codeptr=>9 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 11 A_IS_TOSL = FALSE break is $92 // COMP //puts("COMP") if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $FF49 // EOR #$FF - codeptr=>2 = $D095+(VX<<8) // STA ESTKL,X - codeptr=>4 = $C0B5+(VX<<8) // LDA ESTKH,X - codeptr=>6 = $FF49 // EOR #$FF - codeptr=>8 = $C095+(VX<<8) // STA ESTKH,X + codeptr=>0 = $FF49 // EOR #$FF + codeptr=>2 = estkl8+$95+(VX<<8) // STA ESTKL,X + codeptr=>4 = estkh8+$B5+(VX<<8) // LDA ESTKH,X + codeptr=>6 = $FF49 // EOR #$FF + codeptr=>8 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 10 A_IS_TOSL = FALSE break @@ -1124,36 +1123,36 @@ def compiler(defptr)#0 j = $55 wend if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr->0 = j // OP - codeptr->1 = $D0+$01+VX // ESTKL+1,X - codeptr=>2 = $D095+$0100+(VX<<8) // STA ESTKL+1,X - codeptr=>4 = $C0B5+(VX<<8) // LDA ESTKH,X - codeptr->6 = j // OP - codeptr->7 = $C0+$01+VX // ESTKH+1,X - codeptr=>8 = $C095+$0100+(VX<<8) // STA ESTKH+1,X + codeptr->0 = j // OP + codeptr->1 = estkl+$01+VX // ESTKL+1,X + codeptr=>2 = estkl8+$95+$0100+(VX<<8) // STA ESTKL+1,X + codeptr=>4 = estkh8+$B5+(VX<<8) // LDA ESTKH,X + codeptr->6 = j // OP + codeptr->7 = estkh+$01+VX // ESTKH+1,X + codeptr=>8 = estkh8+$95+$0100+(VX<<8) // STA ESTKH+1,X codeptr = codeptr + 10 - VX++ // INX + VX++ // INX A_IS_TOSL = FALSE break is $9E // IDXW //puts("IDXW") if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr->0 = $0A // ASL - codeptr=>1 = $C036+(VX<<8) // ROL ESTKH,X - codeptr->3 = $18 // CLC - codeptr=>4 = $D075+$0100+(VX<<8) // ADC ESTKL+1,X - codeptr=>6 = $D095+$0100+(VX<<8) // STA ESTKL+1,X - codeptr=>8 = $C0B5+(VX<<8) // LDA ESTKH,X - codeptr=>10 = $C075+$0100+(VX<<8) // ADC ESTKH+1,X - codeptr=>12 = $C095+$0100+(VX<<8) // STA ESTKH+1,X + codeptr->0 = $0A // ASL + codeptr=>1 = estkh8+$36+(VX<<8) // ROL ESTKH,X + codeptr->3 = $18 // CLC + codeptr=>4 = estkl8+$75+$0100+(VX<<8) // ADC ESTKL+1,X + codeptr=>6 = estkl8+$95+$0100+(VX<<8) // STA ESTKL+1,X + codeptr=>8 = estkh8+$B5+(VX<<8) // LDA ESTKH,X + codeptr=>10 = estkh8+$75+$0100+(VX<<8) // ADC ESTKH+1,X + codeptr=>12 = estkh8+$95+$0100+(VX<<8) // STA ESTKH+1,X codeptr = codeptr + 14 - VX++ // INX + VX++ // INX A_IS_TOSL = FALSE break is $A0 // BRGT - FOR/NEXT SPECIFIC TEST & BRANCH @@ -1163,23 +1162,22 @@ def compiler(defptr)#0 //puts("BRGT "); puti(dest) codeptr, VX = resolveX(codeptr, VX) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095//+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95//+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $D0B5+$0100//+(VX<<8) // LDA ESTKL+1,X - codeptr=>2 = $D0D5//+(VX<<8) // CMP ESTKL,X - codeptr=>4 = $C0B5+$0100//+(VX<<8) // LDA ESTKH+1,X - codeptr=>6 = $C0F5//+(VX<<8) // SBC ESTKH - codeptr=>8 = $0250 // BVC +2 - codeptr=>10 = $8049 // EOR #$80 - codeptr=>12 = $0510 // BPL +5 - codeptr=>14 = $E8E8 // INX; INX - codeptr->16 = $4C // JMP abs - codeptr=>17 = addrxlate=>[dest] - if not (codeptr->18 & $80) // Unresolved address list - addrxlate=>[dest] = codeptr + 17 - *jitcodeptr + codeptr=>0 = estkl8+$B5+$0100//+(VX<<8) // LDA ESTKL+1,X + codeptr=>2 = estkl8+$D5//+(VX<<8) // CMP ESTKL,X + codeptr=>4 = estkh8+$B5+$0100//+(VX<<8) // LDA ESTKH+1,X + codeptr=>6 = estkh8+$F5//+(VX<<8) // SBC ESTKH + codeptr=>8 = $0250 // BVC +2 + codeptr=>10 = $8049 // EOR #$80 + codeptr=>12 = $0310 // BPL +3 + codeptr->14 = $4C // JMP abs + codeptr=>15 = addrxlate=>[dest] + if not (codeptr->16 & $80) // Unresolved address list + addrxlate=>[dest] = codeptr + 15 - *jitcodeptr fin - codeptr = codeptr + 19 + codeptr = codeptr + 17 A_IS_TOSL = FALSE break is $A2 // BRLT - FOR/NEXT SPECIFIC TEST & BRANCH @@ -1189,25 +1187,24 @@ def compiler(defptr)#0 //puts("BRLT "); puti(dest) codeptr, VX = resolveX(codeptr, VX) if not A_IS_TOSL - *codeptr = $D0B5//+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5//+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 elsif A_IS_TOSL & TOS_DIRTY - *codeptr = $D095//+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95//+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $D0D5+$0100//+(VX<<8) // CMP ESTKL+1,X - codeptr=>2 = $C0B5//+(VX<<8) // LDA ESTKH,X - codeptr=>4 = $C0F5+$0100//+(VX<<8) // SBC ESTKH+1 - codeptr=>6 = $0250 // BVC +2 - codeptr=>8 = $8049 // EOR #$80 - codeptr=>10 = $0510 // BPL +5 - codeptr=>12 = $E8E8 // INX; INX - codeptr->14 = $4C // JMP abs - codeptr=>15 = addrxlate=>[dest] - if not (codeptr->16 & $80) // Unresolved address list - addrxlate=>[dest] = codeptr + 15 - *jitcodeptr + codeptr=>0 = estkl8+$D5+$0100//+(VX<<8) // CMP ESTKL+1,X + codeptr=>2 = estkh8+$B5//+(VX<<8) // LDA ESTKH,X + codeptr=>4 = estkh8+$F5+$0100//+(VX<<8) // SBC ESTKH+1 + codeptr=>6 = $0250 // BVC +2 + codeptr=>8 = $8049 // EOR #$80 + codeptr=>10 = $0310 // BPL +3 + codeptr->12 = $4C // JMP abs + codeptr=>13 = addrxlate=>[dest] + if not (codeptr->14 & $80) // Unresolved address list + addrxlate=>[dest] = codeptr + 13 - *jitcodeptr fin - codeptr = codeptr + 17 + codeptr = codeptr + 15 A_IS_TOSL = FALSE break is $A4 // INCBRLE - FOR/NEXT SPECIFIC INC & TEST & BRANCH @@ -1216,7 +1213,7 @@ def compiler(defptr)#0 dest = i + *(bytecode+i) i++ if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin if opcode == $A4 @@ -1224,36 +1221,36 @@ def compiler(defptr)#0 // INCR // //puts("INCBRLE "); puti(dest) - codeptr->0 = $18 // CLC - codeptr=>1 = $0169 // ADC #$01 - codeptr=>3 = $D095+(VX<<8) // STA ESTKL,X - codeptr=>5 = $0290 // BCC +2 - codeptr=>7 = $C0F6+(VX<<8) // INC ESTKH,X + codeptr->0 = $18 // CLC + codeptr=>1 = $0169 // ADC #$01 + codeptr=>3 = estkl8+$95+(VX<<8) // STA ESTKL,X + codeptr=>5 = $0290 // BCC +2 + codeptr=>7 = estkh8+$F6+(VX<<8) // INC ESTKH,X codeptr, VX = resolveX(codeptr + 9, VX) else // // ADD // //puts("ADDBRLE "); puti(dest) - codeptr->0 = $18 // CLC - codeptr=>1 = $D075+$0100+(VX<<8) // ADC ESTKL+1,X - codeptr=>3 = $D095+$0100+(VX<<8) // STA ESTKL+1,X - codeptr=>5 = $C0B5+(VX<<8) // LDA ESTKH,X - codeptr=>7 = $C075+$0100+(VX<<8) // ADC ESTKH+1,X - codeptr=>9 = $C095+$0100+(VX<<8) // STA ESTKH+1,X - codeptr, VX = resolveX(codeptr + 11, VX + 1) // INX + codeptr->0 = $18 // CLC + codeptr=>1 = estkl8+$75+$0100+(VX<<8) // ADC ESTKL+1,X + codeptr=>3 = estkl8+$95+$0100+(VX<<8) // STA ESTKL+1,X + codeptr=>5 = estkh8+$B5+(VX<<8) // LDA ESTKH,X + codeptr=>7 = estkh8+$75+$0100+(VX<<8) // ADC ESTKH+1,X + codeptr=>9 = estkh8+$95+$0100+(VX<<8) // STA ESTKH+1,X + codeptr, VX = resolveX(codeptr + 11, VX + 1) // INX fin // // BRLE // - codeptr=>0 = $D0B5+$0100//+(VX<<8) // LDA ESTKL+1,X - codeptr=>2 = $D0D5//+(VX<<8) // CMP ESTKL,X - codeptr=>4 = $C0B5+$0100//+(VX<<8) // LDA ESTKH+1,X - codeptr=>6 = $C0F5//+(VX<<8) // SBC ESTKH - codeptr=>8 = $0250 // BVC +2 - codeptr=>10 = $8049 // EOR #$80 - codeptr=>12 = $0330 // BMI +3 - codeptr->14 = $4C // JMP abs + codeptr=>0 = estkl8+$B5+$0100//+(VX<<8) // LDA ESTKL+1,X + codeptr=>2 = estkl8+$D5//+(VX<<8) // CMP ESTKL,X + codeptr=>4 = estkh8+$B5+$0100//+(VX<<8) // LDA ESTKH+1,X + codeptr=>6 = estkh8+$F5//+(VX<<8) // SBC ESTKH + codeptr=>8 = $0250 // BVC +2 + codeptr=>10 = $8049 // EOR #$80 + codeptr=>12 = $0330 // BMI +3 + codeptr->14 = $4C // JMP abs codeptr=>15 = addrxlate=>[dest] if not (codeptr->16 & $80) // Unresolved address list addrxlate=>[dest] = codeptr + 15 - *jitcodeptr @@ -1268,7 +1265,7 @@ def compiler(defptr)#0 dest = i + *(bytecode+i) i++ if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin if opcode == $A8 @@ -1277,14 +1274,14 @@ def compiler(defptr)#0 // //puts("DECBRGE "); puti(dest) if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr->0 = $38 // SEC - codeptr=>1 = $01E9 // SBC #$01 - codeptr=>3 = $D095+(VX<<8) // STA ESTKL,X - codeptr=>5 = $02B0 // BCS +2 - codeptr=>7 = $C0D6+(VX<<8) // DEC ESTKH,X + codeptr->0 = $38 // SEC + codeptr=>1 = $01E9 // SBC #$01 + codeptr=>3 = estkl8+$95+(VX<<8) // STA ESTKL,X + codeptr=>5 = $02B0 // BCS +2 + codeptr=>7 = estkh8+$D6+(VX<<8) // DEC ESTKH,X codeptr, VX = resolveX(codeptr + 9, VX) else // @@ -1292,30 +1289,30 @@ def compiler(defptr)#0 // //puts("SUBBRGE "); puti(dest) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $D0B5+$0100+(VX<<8) // LDA ESTKL+1,X - codeptr->2 = $38 // SEC - codeptr=>3 = $D0F5+(VX<<8) // SBC ESTKL,X - codeptr=>5 = $D095+$0100+(VX<<8) // STA ESTKL+1,X - codeptr=>7 = $C0B5+$0100+(VX<<8) // LDA ESTKH+1,X - codeptr=>9 = $C0F5+(VX<<8) // SBC ESTKH,X - codeptr=>11 = $C095+$0100+(VX<<8) // STA ESTKH+1,X - codeptr, VX = resolveX(codeptr + 13, VX + 1) // INX - *codeptr = $D0B5//+(VX<<8) // LDA ESTKL,X + codeptr=>0 = estkl8+$B5+$0100+(VX<<8) // LDA ESTKL+1,X + codeptr->2 = $38 // SEC + codeptr=>3 = estkl8+$F5+(VX<<8) // SBC ESTKL,X + codeptr=>5 = estkl8+$95+$0100+(VX<<8) // STA ESTKL+1,X + codeptr=>7 = estkh8+$B5+$0100+(VX<<8) // LDA ESTKH+1,X + codeptr=>9 = estkh8+$F5+(VX<<8) // SBC ESTKH,X + codeptr=>11 = estkh8+$95+$0100+(VX<<8) // STA ESTKH+1,X + codeptr, VX = resolveX(codeptr + 13, VX + 1) // INX + *codeptr = estkl8+$B5//+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin // // BRGE // - codeptr=>0 = $D0D5+$0100//+(VX<<8) // CMP ESTKL+1,X - codeptr=>2 = $C0B5//+(VX<<8) // LDA ESTKH,X - codeptr=>4 = $C0F5+$0100//+(VX<<8) // SBC ESTKH+1,X - codeptr=>6 = $0250 // BVC +2 - codeptr=>8 = $8049 // EOR #$80 - codeptr=>10 = $0330 // BMI +3 - codeptr->12 = $4C // JMP abs + codeptr=>0 = estkl8+$D5+$0100//+(VX<<8) // CMP ESTKL+1,X + codeptr=>2 = estkh8+$B5//+(VX<<8) // LDA ESTKH,X + codeptr=>4 = estkh8+$F5+$0100//+(VX<<8) // SBC ESTKH+1,X + codeptr=>6 = $0250 // BVC +2 + codeptr=>8 = $8049 // EOR #$80 + codeptr=>10 = $0330 // BMI +3 + codeptr->12 = $4C // JMP abs codeptr=>13 = addrxlate=>[dest] if not (codeptr->14 & $80) // Unresolved address list addrxlate=>[dest] = codeptr + 13 - *jitcodeptr @@ -1331,27 +1328,27 @@ def compiler(defptr)#0 i++ codeptr, VX = resolveX(codeptr, VX) if not A_IS_TOSL - *codeptr = $D0B5//+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5//+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 elsif A_IS_TOSL & TOS_DIRTY - *codeptr = $D095//+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95//+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $C015//+(VX<<8) // ORA ESTKH,X + codeptr=>0 = estkh8+$15//+(VX<<8) // ORA ESTKH,X if opcode == $AC //puts("BRAND "); puti(dest) - codeptr=>2 = $03D0 // BNE +3 + codeptr=>2 = $03D0 // BNE +3 else //puts("BROR "); puti(dest) - codeptr=>2 = $03F0 // BEQ +3 + codeptr=>2 = $03F0 // BEQ +3 fin - codeptr->4 = $4C // JMP abs + codeptr->4 = $4C // JMP abs codeptr=>5 = addrxlate=>[dest] if not (codeptr->6 & $80) // Unresolved address list addrxlate=>[dest] = codeptr + 5 - *jitcodeptr fin codeptr = codeptr + 7 - VX++ // INX + VX++ // INX A_IS_TOSL = FALSE break is $B0 // ADDLB @@ -1359,29 +1356,29 @@ def compiler(defptr)#0 i++ j = ^(bytecode+i) if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin if VY <> j - *codeptr = $A0+(j<<8) // LDY #imm + *codeptr = $A0+(j<<8) // LDY #imm codeptr = codeptr + 2 VY = j fin - codeptr->0 = $18 // CLC - codeptr=>1 = $E071 // ADC (IFP),Y + codeptr->0 = $18 // CLC + codeptr=>1 = ifpl8+$71 // ADC (IFP),Y if opcode == $B0 //puts("ADDLB "); puti(j) - codeptr=>3 = $0290 // BCC +2 - codeptr=>5 = $C0F6+(VX<<8) // INC ESTKH,X + codeptr=>3 = $0290 // BCC +2 + codeptr=>5 = estkh8+$F6+(VX<<8) // INC ESTKH,X codeptr = codeptr + 7 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X else //puts("ADDLW "); puti(j) - codeptr=>3 = $D095+(VX<<8) // STA ESTKL,X - codeptr=>5 = $C0B5+(VX<<8) // LDA ESTKH,X - codeptr->7 = $C8 // INY - codeptr=>8 = $E071 // ADC (IFP),Y - codeptr=>10 = $C095+(VX<<8) // STA ESTKH,X + codeptr=>3 = estkl8+$95+(VX<<8) // STA ESTKL,X + codeptr=>5 = estkh8+$B5+(VX<<8) // LDA ESTKH,X + codeptr->7 = $C8 // INY + codeptr=>8 = ifpl8+$71 // ADC (IFP),Y + codeptr=>10 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 12 VY++ A_IS_TOSL = FALSE @@ -1392,24 +1389,24 @@ def compiler(defptr)#0 dest = *(bytecode+i+1) i = i + 2 if not A_IS_TOSL - *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X + *codeptr = estkl8+$B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - codeptr=>0 = $6D18 // CLC; ADC abs + codeptr=>0 = $6D18 // CLC; ADC abs codeptr=>2 = dest if opcode == $B4 //puts("ADDAB $"); puth(dest) - codeptr=>4 = $0290 // BCC +2 - codeptr=>6 = $C0F6+(VX<<8) // INC ESTKH,X + codeptr=>4 = $0290 // BCC +2 + codeptr=>6 = estkh8+$F6+(VX<<8) // INC ESTKH,X codeptr = codeptr + 8 - A_IS_TOSL = TOS_DIRTY // STA ESTKL,X + A_IS_TOSL = TOS_DIRTY // STA ESTKL,X else //puts("ADDAW $"); puth(dest) - codeptr=>4 = $D095+(VX<<8) // STA ESTKL,X - codeptr=>6 = $C0B5+(VX<<8) // LDA ESTKH,X - codeptr->8 = $6D // ADC abs + codeptr=>4 = estkl8+$95+(VX<<8) // STA ESTKL,X + codeptr=>6 = estkh8+$B5+(VX<<8) // LDA ESTKH,X + codeptr->8 = $6D // ADC abs codeptr=>9 = dest+1 - codeptr=>11 = $C095+(VX<<8) // STA ESTKH,X + codeptr=>11 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 13 A_IS_TOSL = FALSE fin @@ -1419,27 +1416,27 @@ def compiler(defptr)#0 j = ^(bytecode+i) //puts("IDXLB "); puti(j) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin if VY <> j - *codeptr = $A0+(j<<8) // LDY #imm + *codeptr = $A0+(j<<8) // LDY #imm codeptr = codeptr + 2 fin - *codeptr = $E0B1 // LDA (IFP),Y + *codeptr = ifpl8+$B1 // LDA (IFP),Y codeptr = codeptr + 2 if j <> 0 - *codeptr = $00A0 // LDY #$00 + *codeptr = $00A0 // LDY #$00 codeptr = codeptr + 2 fin - codeptr->0 = $0A // ASL - codeptr=>1 = $0290 // BCC +2 - codeptr=>3 = $18C8 // INY; CLC - codeptr=>5 = $D075+(VX<<8) // ADC ESTKL,X - codeptr=>7 = $D095+(VX<<8) // STA ESTKL,X - codeptr->9 = $98 // TYA - codeptr=>10 = $C075+(VX<<8) // ADC ESTKH,X - codeptr=>12 = $C095+(VX<<8) // STA ESTKH,X + codeptr->0 = $0A // ASL + codeptr=>1 = $0290 // BCC +2 + codeptr=>3 = $18C8 // INY; CLC + codeptr=>5 = estkl8+$75+(VX<<8) // ADC ESTKL,X + codeptr=>7 = estkl8+$95+(VX<<8) // STA ESTKL,X + codeptr->9 = $98 // TYA + codeptr=>10 = estkh8+$75+(VX<<8) // ADC ESTKH,X + codeptr=>12 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 14 VY = UNKNOWN A_IS_TOSL = FALSE @@ -1449,26 +1446,26 @@ def compiler(defptr)#0 j = ^(bytecode+i) //puts("IDXLW "); puti(j) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin if VY <> j - *codeptr = $A0+(j<<8) // LDY #imm + *codeptr = $A0+(j<<8) // LDY #imm codeptr = codeptr + 2 fin - codeptr=>0 = $E0B1 // LDA (IFP),Y - codeptr->2 = $0A // ASL - codeptr=>3 = $E785 // STA $E7:TMPL - codeptr->5 = $C8 // INY - codeptr=>6 = $E0B1 // LDA (IFP),Y - codeptr=>8 = $A82A // ROL; TAY - codeptr=>10 = $E7A5 // LDA $E7:TMPL - codeptr->12 = $18 // CLC - codeptr=>13 = $D075+(VX<<8) // ADC ESTKL,X - codeptr=>15 = $D095+(VX<<8) // STA ESTKL,X - codeptr->17 = $98 // TYA - codeptr=>18 = $C075+(VX<<8) // ADC ESTKH,X - codeptr=>20 = $C095+(VX<<8) // STA ESTKH,X + codeptr=>0 = ifpl8+$B1 // LDA (IFP),Y + codeptr->2 = $0A // ASL + codeptr=>3 = tmpl8+$85 // STA $E7:TMPL + codeptr->5 = $C8 // INY + codeptr=>6 = ifpl8+$B1 // LDA (IFP),Y + codeptr=>8 = $A82A // ROL; TAY + codeptr=>10 = tmpl8+$A5 // LDA $E7:TMPL + codeptr->12 = $18 // CLC + codeptr=>13 = estkl8+$75+(VX<<8) // ADC ESTKL,X + codeptr=>15 = estkl8+$95+(VX<<8) // STA ESTKL,X + codeptr->17 = $98 // TYA + codeptr=>18 = estkh8+$75+(VX<<8) // ADC ESTKH,X + codeptr=>20 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 22 VY = UNKNOWN A_IS_TOSL = FALSE @@ -1478,23 +1475,23 @@ def compiler(defptr)#0 i = i + 2 //puts("IDXAB $"); puth(*(bytecode+i)) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin if VY <> 0 - *codeptr = $00A0 // LDY #$00 + *codeptr = $00A0 // LDY #$00 codeptr = codeptr + 2 fin - codeptr->0 = $AD // LDA abs + codeptr->0 = $AD // LDA abs codeptr=>1 = dest - codeptr->3 = $0A // ASL - codeptr=>4 = $0290 // BCC +2 - codeptr=>6 = $18C8 // INY; CLC - codeptr=>8 = $D075+(VX<<8) // ADC ESTKL,X - codeptr=>10 = $D095+(VX<<8) // STA ESTKL,X - codeptr->12 = $98 // TYA - codeptr=>13 = $C075+(VX<<8) // ADC ESTKH,X - codeptr=>15 = $C095+(VX<<8) // STA ESTKH,X + codeptr->3 = $0A // ASL + codeptr=>4 = $0290 // BCC +2 + codeptr=>6 = $18C8 // INY; CLC + codeptr=>8 = estkl8+$75+(VX<<8) // ADC ESTKL,X + codeptr=>10 = estkl8+$95+(VX<<8) // STA ESTKL,X + codeptr->12 = $98 // TYA + codeptr=>13 = estkh8+$75+(VX<<8) // ADC ESTKH,X + codeptr=>15 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 17 VY = UNKNOWN A_IS_TOSL = FALSE @@ -1504,23 +1501,23 @@ def compiler(defptr)#0 i = i + 2 //puts("IDXAW $"); puth(dest) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = estkl8+$95+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - codeptr->0 = $AD // LDA abs + codeptr->0 = $AD // LDA abs codeptr=>1 = dest - codeptr->3 = $0A // ASL - codeptr=>4 = $E785 // STA $E7:TMPL - codeptr->6 = $AD // LDA abs+1 + codeptr->3 = $0A // ASL + codeptr=>4 = tmpl8+$85 // STA $E7:TMPL + codeptr->6 = $AD // LDA abs+1 codeptr=>7 = dest+1 - codeptr=>9 = $A82A // ROL; TAY - codeptr=>11 = $E7A5 // LDA $E7:TMPL - codeptr->13 = $18 // CLC - codeptr=>14 = $D075+(VX<<8) // ADC ESTKL,X - codeptr=>16 = $D095+(VX<<8) // STA ESTKL,X - codeptr->18 = $98 // TYA - codeptr=>19 = $C075+(VX<<8) // ADC ESTKH,X - codeptr=>21 = $C095+(VX<<8) // STA ESTKH,X + codeptr=>9 = $A82A // ROL; TAY + codeptr=>11 = tmpl8+$A5 // LDA $E7:TMPL + codeptr->13 = $18 // CLC + codeptr=>14 = estkl8+$75+(VX<<8) // ADC ESTKL,X + codeptr=>16 = estkl8+$95+(VX<<8) // STA ESTKL,X + codeptr->18 = $98 // TYA + codeptr=>19 = estkh8+$75+(VX<<8) // ADC ESTKH,X + codeptr=>21 = estkh8+$95+(VX<<8) // STA ESTKH,X codeptr = codeptr + 23 VY = UNKNOWN A_IS_TOSL = FALSE diff --git a/src/vmsrc/apple/soscmd.pla b/src/vmsrc/apple/soscmd.pla index f370a2b..6150543 100755 --- a/src/vmsrc/apple/soscmd.pla +++ b/src/vmsrc/apple/soscmd.pla @@ -23,6 +23,15 @@ const jitcodeptr = $A0F4 const sinterp = $A0F6 const xinterp = $A0F8 const jitinterp = $A0FA +const estkh8 = $C000 +const estkh = $00C0 +const estkl8 = $D000 +const estkl = $00D0 +const ifpl8 = $E000 +const ifph8 = $E100 +const jmptmp = $00E6 +const tmpl8 = $E700 +const tmph8 = $E800 word directentry, indirectentry // // COPY FROM EXT MEM TO MAIN MEM.