diff --git a/src/libsrc/apple/jit.pla b/src/libsrc/apple/jit.pla index 36fd32d..bee2bd4 100644 --- a/src/libsrc/apple/jit.pla +++ b/src/libsrc/apple/jit.pla @@ -1563,54 +1563,67 @@ def compiler(defptr)#0 //^codeptr = $B4; codeptr++ // LDY zp,X //^codeptr = $C0+VX; codeptr++ // ESTKH codeptr->5 = $8C // STY abs - codeptr=>7 = *(bytecode+i)+1 + codeptr=>6 = *(bytecode+i)+1 //^codeptr = $8C; codeptr++ // STY abs //*codeptr = *(bytecode+i)+1; codeptr = codeptr + 2 - codeptr=>9 = $00A0 // LDY #$00 + codeptr=>8 = $00A0 // LDY #$00 //^codeptr = $A0; codeptr++ // LDY #imm //^codeptr = $00; codeptr++ // $00 - codeptr = codeptr + 11 + codeptr = codeptr + 10 i++ break // LNOT,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 80 82 84 86 88 8A 8C 8E - is $80 + is $80 // NOT //puts("NOT") if not A_IS_TOSL *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - ^codeptr = $15; codeptr++ // ORA zp,X - ^codeptr = $C0+VX; codeptr++ // ESTKH - ^codeptr = $F0; codeptr++ // BEQ rel - ^codeptr = $02; codeptr++ // +2 - ^codeptr = $A9; codeptr++ // LDA #imm - ^codeptr = $FF; codeptr++ // $FF - ^codeptr = $49; codeptr++ // EOR #imm - ^codeptr = $FF; codeptr++ // $FF - ^codeptr = $95; codeptr++ // STA zp,X - ^codeptr = $C0+VX; codeptr++ // ESTKH + codeptr=>0 = $C015+(VX<<8) // ORA ESTKH,X + //^codeptr = $15; codeptr++ // ORA zp,X + //^codeptr = $C0+VX; codeptr++ // ESTKH + codeptr=>2 = $02F0 // BEQ +2 + //^codeptr = $F0; codeptr++ // BEQ rel + //^codeptr = $02; codeptr++ // +2 + codeptr=>4 = $FFA9 // LDA #$FF + //^codeptr = $A9; codeptr++ // LDA #imm + //^codeptr = $FF; codeptr++ // $FF + codeptr=>6 = $FF49 // EOR #$FF + //^codeptr = $49; codeptr++ // EOR #imm + //^codeptr = $FF; codeptr++ // $FF + codeptr=>8 = $C095+(VX<<8) // STA ESTKH,X + //^codeptr = $95; codeptr++ // STA zp,X + //^codeptr = $C0+VX; codeptr++ // ESTKH //^codeptr = $95; codeptr++ // STA zp,X //^codeptr = $D0+VX; codeptr++ // ESTKL + codeptr = codeptr + 10 A_IS_TOSL = TOSL_DIRTY break - is $82 + is $82 // ADD //puts("ADD") if not A_IS_TOSL *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 = $C085+(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 + VX++ // INX + codeptr = codeptr + 11 A_IS_TOSL = FALSE break is $84 @@ -1619,20 +1632,28 @@ 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 = ($D085+$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 = ($C085+$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 + VX++ // INX + codeptr = codeptr + 13 A_IS_TOSL = FALSE break is $86 // MUL @@ -1661,46 +1682,61 @@ def compiler(defptr)#0 codeptr = codeptr + 2 fin codeptr, VX = resolveX(codeptr, VX) - ^codeptr = $20; codeptr++ // JSR INTERP - *codeptr = $3D0; codeptr = codeptr + 2 - ^codeptr = opcode; codeptr++ // OPCODE - ^codeptr = $C0; codeptr++ // NATV CODE - ^codeptr = $A0; codeptr++ // LDY #imm - ^codeptr = $00; codeptr++ // $00 + codeptr->0 = $20 // JSR INTERP + codeptr=>1 = $3D0 // INTERP + //^codeptr = $20; codeptr++ // JSR INTERP + //*codeptr = $3D0; codeptr = codeptr + 2 + codeptr=>3 = $C000+opcode // OPCODE; NATV CODE + //^codeptr = opcode; codeptr++ // OPCODE + //^codeptr = $C0; codeptr++ // NATV CODE + codeptr=>5 = $00A0 // LDY #$00 + //^codeptr = $A0; codeptr++ // LDY #imm + //^codeptr = $00; codeptr++ // $00 + codeptr = codeptr + 7 A_IS_TOSL = FALSE - break - is $8C + break + is $8C // INCR //puts("INCR") if not A_IS_TOSL *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 = $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 = $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 $8E + is $8E // DECR //puts("DECR") if not A_IS_TOSL *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 = $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 = $02B0 // BCS +2 + //^codeptr = $B0; codeptr++ // BCS rel + //^codeptr = $02; codeptr++ // +2 + codeptr=>5 = $C0D6+(VX<<8) // DEC 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 // NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 90 92 94 96 98 9A 9C 9E