From 7f46144911d2f96c6736a3c75943a5ab4dba49e1 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Wed, 11 Apr 2018 14:48:21 -0700 Subject: [PATCH] Working 65802 JIT compiler --- PLASMA-BLD2.PO | Bin 143360 -> 143360 bytes PLASMA-SYS2.PO | Bin 143360 -> 143360 bytes src/libsrc/jit16core.pla | 215 +++++++++++++++++---------------------- 3 files changed, 92 insertions(+), 123 deletions(-) diff --git a/PLASMA-BLD2.PO b/PLASMA-BLD2.PO index 926a5646ebb1e31af24b9e96c66b86e1add9a472..0f5e15024faf14462f736205be23dd592922c461 100644 GIT binary patch delta 494 zcmX|-&nrYx6vxlK^O#Y*j+&XI3HfnJnuVp3g)9isXcn5J7YmD#o}I;v_mY$>UZZR* zB+bGCHCeDweoR@+g#0KAQMUdD&-YH6Tc3Nr-*fIg_jK34LhE0lvo1qK3d$G^2+A!4 zyE_x3Bgqk}uHQx>XjjnoPmdX*Z(=P9r@>W2_yr+9glle^B5%rY_KoBsQH%q0!MEkR z=l4Xl3xuhNk|`DAWS`%vwQ6J=SZ)8FR5ROszpZqTrc9J|Nk!Rm=f`JBi;AgrRT$T_ z4Wp)-*q&-8(ucD!mb;?&YE2uo9Gm>~(cO}+enVF)17L`wJztNMQth17Cv-ku*S2CW zr59J@4cbyl#+YO~llMf@yP<${MdVz9b0Y7Agm;WwK8wU5*asfi0b5`LWWXA*K^iOp z{FO5YX2CR=0ApYXO$VsP>4%O(_mbgsAhzHWA75XFxe`i~EVNCq)M1nZ5xOs4KVFwg W55sIwxmbQK&Tvgm$mM*etp5Xewtg`H delta 104 zcmZp8z|ru4V}mLSqu6FO7F%XU;mIlN>ME`gdWL3t0X~ilV8C*ifrH^24@2}(Ng)n~ z#|&V`=Jo8wER6M=8JX@fHu1IbF)rg{5}C%%#6FdY=_k8@kg$lTnD}Hyrk~4Hn0Np~ Cp%~r( diff --git a/PLASMA-SYS2.PO b/PLASMA-SYS2.PO index 01043eb7355c44dd3468a7382477a0e2898c618d..bf5330d61b4e584ad767c7c0ee965ad93c15c833 100755 GIT binary patch delta 6887 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 delta 2081 zcmZWqX>=1+6n^hzl1@sOByHMQDhy59q(!mi9D6(*dpIGPl+;tB6SI zQc=`D7O4wvBaXXPqeKv~EJZ~`1*xc@Epq$*IT}Ka9?W(f5?M==Y zN`k5|&P62})N0C=9cyCo8386U#eY?q+j<%>+UsBox+oPBlazhBMMgtjXwIaxVhdEzjl3&UoDau@I^*5%bFP?=k z>WP&wSxW;dfqa4Zd5cp3lu^cMdug=7kHhG)p1Y25?uxUWI zEX%9OKG)_;VBjel5ru}ROtwmga}MjDz=cFJ;MQm30(OUWqAf`DK&Q(UnRHbSr;BxZ zlYHVlq(lulnJ{B&i>2V^BOU5z02VSN^kvW+Pz9UTWh5>ET%&|bgH;E)xvbyAax-I& z#T7`6mKJ2fjP}NqOu_5@5L|6~a71qii(x{9Etm)gF;PxFd&*P>)Nuw2hcGQ{#f0BY z6cwgQutjm0>=hM)2@^%tMJ}+6W8P=yyNF=Hl<*5C#O(#Eh=rp-cMc|$&mZ7qTm;wR zs8U#ki8grgg65V>F1>8w2=rNu+aPYnNKaepS2*qzC)W#1tZH8~q zZCnkBJ7ZWM82vv{Auy*g)-|XA}?SbC!4u1c` zkB1Kb^m9ae0Stz)95U)V0)$Zu>lR#=5uZW^7sm(Mnpj=;U7;8 k8^i0ggzn7Ik`ca2!xs>BZeD&tp+>7KO5fCJ1Ph`62XF7^AOHXW diff --git a/src/libsrc/jit16core.pla b/src/libsrc/jit16core.pla index 0cbc01f..a04dd93 100644 --- a/src/libsrc/jit16core.pla +++ b/src/libsrc/jit16core.pla @@ -280,10 +280,12 @@ def compiler(defptr)#0 codeptr = codeptr + 2 X_IS_IFP = TRUE fin - codeptr=>0 = $188A // TXA; CLC - codeptr->2 = $69 // ADC #imm - codeptr=>3 = j - codeptr = codeptr + 5 + ^codeptr = $8A; codeptr++ // TXA + if j <> 0 + codeptr=>0 = $6918 // CLC; ADC #imm + codeptr=>2 = j + codeptr = codeptr + 4 + fin A_IS_TOS = TRUE break is $2A // CB @@ -441,8 +443,8 @@ def compiler(defptr)#0 codeptr->0 = $A0 // LDY #$0000 codeptr=>1 = $0000 codeptr->3 = $38 // SEC - codeptr=>4 = $C3+(TOS<<8) // SBC TOS,S - codeptr=>6 = $0250 // BVC +3 + codeptr=>4 = $E3+(TOS<<8) // SBC TOS,S + codeptr=>6 = $0350 // BVC +3 codeptr->8 = $49 // EOR #$8000 codeptr=>9 = $8000 if opcode == $44 @@ -464,10 +466,10 @@ def compiler(defptr)#0 fin codeptr->0 = $A0 // LDY #$0000 codeptr=>1 = $0000 - codeptr=>3 = $E685 // STA TMP + codeptr=>3 = $E785 // STA TMP codeptr=>5 = $3868 // PLA; SEC - codeptr=>7 = $E6E5 // SBC TMP - codeptr=>9 = $0250 // BVC +3 + codeptr=>7 = $E7E5 // SBC TMP + codeptr=>9 = $0350 // BVC +3 codeptr->11 = $49 // EOR #$8000 codeptr=>12 = $8000 if opcode == $46 @@ -567,99 +569,67 @@ def compiler(defptr)#0 A_IS_TOS = FALSE break is $54 // CALL - //puts("CALL $"); puth(*(bytecode+i)) - // - // Call address - // - if A_IS_TOS - ^codeptr = $48; codeptr++ // PHA - fin - codeptr=>0 = $10E2 // SEP #$10 -> 8 BIT X/Y - codeptr->2 = $A9 // LDA #imm - codeptr=>3 = codeptr + 13 - codeptr=>5 = $F285 // STA IP - codeptr->7 = $A0 // LDY #$0000 - codeptr=>8 = $0000 - codeptr->10 = $4C // JMP FETCHOP - codeptr=>11 = $00F1 // FETCHOP - codeptr->13 = $54 // CALL ADDR - codeptr=>14 = *(bytecode+i+1) - codeptr->16 = $C0 // NATV - codeptr = codeptr + 17 - X_IS_IFP = FALSE - A_IS_TOS = FALSE - i = i + 2 - break is $56 // ICAL - //puts("ICAL") - // - // Pull address off stack - // - if A_IS_TOS - ^codeptr = $48; codeptr++ // PHA - fin - codeptr=>0 = $10E2 // SEP #$10 -> 8 BIT X/Y - codeptr->2 = $A9 // LDA #imm - codeptr=>3 = codeptr + 13 - codeptr=>5 = $F285 // STA IP - codeptr->7 = $A0 // LDY #$0000 - codeptr=>8 = $0000 - codeptr->10 = $4C // JMP FETCHOP - codeptr=>11 = $00F1 // FETCHOP - codeptr->13 = $56 // ICAL - codeptr->14 = $C0 // NATV - codeptr = codeptr + 15 - X_IS_IFP = FALSE - A_IS_TOS = FALSE - break is $5A // LEAVE - i++ - //puts("LEAVE "); puti(^(bytecode+i)) - // - // Call into VM - // + is $5C // RET if A_IS_TOS ^codeptr = $48; codeptr++ // PHA fin codeptr=>0 = $10E2 // SEP #$10 -> 8 BIT X/Y codeptr->2 = $A9 // LDA #imm - codeptr=>3 = codeptr + 13 + codeptr=>3 = codeptr + 12 codeptr=>5 = $F285 // STA IP - codeptr->7 = $A0 // LDY #$0000 - codeptr=>8 = $0000 - codeptr->10 = $4C // JMP FETCHOP - codeptr=>11 = $00F1 // FETCHOP - codeptr=>13 = $5A + (^(bytecode+i)<<8) // LEAVE CODE AND OPERAND - codeptr = codeptr + 15 + codeptr=>7 = $00A0 // LDY #$00 + codeptr->9 = $4C // JMP FETCHOP + codeptr=>10 = $00F1 // FETCHOP + codeptr->12 = opcode // OP + when opcode + is $54 // CALL + // + // Call address + // + //puts("CALL $"); puth(*(bytecode+i)) + codeptr=>13 = *(bytecode+i+1) // CALL ADDR + codeptr->15 = $C0 // NATV + codeptr = codeptr + 16 + i = i + 2 + break + is $56 // ICAL + // + // Call address off stack + // + //puts("ICAL") + codeptr->13 = $C0 // NATV + codeptr = codeptr + 14 + break + is $5A // LEAVE + // + // Leave routine + // + i++ + //puts("LEAVE "); puti(^(bytecode+i)) + codeptr->13 = ^(bytecode+i) // LEAVE CODE OPERAND + codeptr = codeptr + 14 + break + is $5C // RET + // + // Quick return from routine + // + //puts("RET") + codeptr = codeptr + 13 + break + wend X_IS_IFP = FALSE A_IS_TOS = FALSE break - is $5C // RET - //puts("RET") - if A_IS_TOS - ^codeptr = $48; codeptr++ // PHA - fin - codeptr=>0 = $10E2 // SEP #$10 -> 8 BIT X/Y - codeptr->2 = $A9 // LDA #imm - codeptr=>3 = codeptr + 13 - codeptr=>5 = $F285 // STA IP - codeptr->7 = $A0 // LDY #$0000 - codeptr=>8 = $0000 - codeptr->10 = $4C // JMP FETCHOP - codeptr=>11 = $00F1 // FETCHOP - codeptr->13 = $5C // RET - codeptr = codeptr + 14 - X_IS_IFP = FALSE - A_IS_TOS = FALSE - break is $60 // LB //puts("LB") if not A_IS_TOS ^codeptr = $68; codeptr++ // PLA fin - codeptr=>0 = $E685 // STA TMP + codeptr=>0 = $E785 // STA TMP codeptr=>2 = $20E2 // SEP #$20 -> 8 BIT ACCUM/MEM - codeptr=>4 = $E6B2 // LDA (TMP) + codeptr=>4 = $E7B2 // LDA (TMP) codeptr=>6 = $20C2 // REP #$20 -> 16 BIT ACCUM/MEM codeptr->8 = $29 // AND #$00FF codeptr=>9 = $00FF @@ -671,9 +641,9 @@ def compiler(defptr)#0 if not A_IS_TOS ^codeptr = $68; codeptr++ // PLA fin - codeptr=>0 = $E685 // STA TMP - codeptr=>4 = $E6B2 // LDA (TMP) - codeptr = codeptr + 6 + codeptr=>0 = $E785 // STA TMP + codeptr=>2 = $E7B2 // LDA (TMP) + codeptr = codeptr + 4 A_IS_TOS = TRUE // PHA break is $64 // LLB @@ -688,7 +658,7 @@ def compiler(defptr)#0 codeptr = codeptr + 2 X_IS_IFP = TRUE fin - codeptr=>0 = $B5+(J<<8) // LDA dp,X + codeptr=>0 = $B5+(j<<8) // LDA dp,X codeptr->2 = $29 // AND #$00FF codeptr=>3 = $00FF codeptr = codeptr + 5 @@ -706,7 +676,7 @@ def compiler(defptr)#0 codeptr = codeptr + 2 X_IS_IFP = TRUE fin - codeptr=>0 = $B5+(J<<8) // LDA dp,X + codeptr=>0 = $B5+(j<<8) // LDA dp,X codeptr = codeptr + 2 A_IS_TOS = TRUE // PHA break @@ -751,7 +721,7 @@ def compiler(defptr)#0 X_IS_IFP = TRUE fin codeptr=>0 = $20E2 // SEP #$20 -> 8 BIT ACCUM/MEM - codeptr=>2 = $55+(J<<8) // STA dp,X + codeptr=>2 = $95+(j<<8) // STA dp,X codeptr=>4 = $20C2 // REP #$20 -> 16 BIT ACCUM/MEM if opcode == $6C //puts("DLB "); puti(j) @@ -777,7 +747,7 @@ def compiler(defptr)#0 codeptr = codeptr + 2 X_IS_IFP = TRUE fin - codeptr=>0 = $55+(J<<8) // STA dp,X + codeptr=>0 = $95+(j<<8) // STA dp,X codeptr = codeptr + 2 if opcode == $6E //puts("DLW "); puti(j) @@ -792,10 +762,10 @@ def compiler(defptr)#0 if not A_IS_TOS ^codeptr = $68; codeptr++ // PLA fin - codeptr=>0 = $E685 // STA TMP + codeptr=>0 = $E785 // STA TMP codeptr->2 = $68 // PLA codeptr=>3 = $20E2 // SEP #$20 -> 8 BIT ACCUM/MEM - codeptr=>5 = $E692 // STA (TMP) + codeptr=>5 = $E792 // STA (TMP) codeptr=>7 = $20C2 // REP #$20 -> 16 BIT ACCUM/MEM codeptr = codeptr + 9 A_IS_TOS = FALSE @@ -805,9 +775,9 @@ def compiler(defptr)#0 if not A_IS_TOS ^codeptr = $68; codeptr++ // PLA fin - codeptr=>0 = $E685 // STA TMP + codeptr=>0 = $E785 // STA TMP codeptr->2 = $68 // PLA - codeptr=>3 = $E692 // STA (TMP) + codeptr=>3 = $E792 // STA (TMP) codeptr = codeptr + 5 A_IS_TOS = FALSE break @@ -883,9 +853,9 @@ def compiler(defptr)#0 if not A_IS_TOS ^codeptr = $68; codeptr++ // PLA fin - codeptr=>0 = $E685 // STA TMP + codeptr=>0 = $E785 // STA TMP codeptr=>2 = $3868 // PLA; SEC - codeptr=>4 = $E6E5 // SBC TMP + codeptr=>4 = $E7E5 // SBC TMP codeptr = codeptr + 6 A_IS_TOS = TRUE break @@ -915,14 +885,13 @@ def compiler(defptr)#0 fin codeptr=>0 = $10E2 // SEP #$10 -> 8 BIT X/Y codeptr->2 = $A9 // LDA #imm - codeptr=>3 = codeptr + 13 + codeptr=>3 = codeptr + 12 codeptr=>5 = $F285 // STA IP - codeptr->7 = $A0 // LDY #$0000 - codeptr=>8 = $0000 - codeptr->10 = $4C // JMP FETCHOP - codeptr=>11 = $00F1 // FETCHOP - codeptr=>13 = $C000+opcode // OPCODE; NATV CODE - codeptr = codeptr + 15 + codeptr=>7 = $00A0 // LDY #$00 + codeptr->9 = $4C // JMP FETCHOP + codeptr=>10 = $00F1 // FETCHOP + codeptr=>12 = $C000+opcode // OPCODE; NATV CODE + codeptr = codeptr + 14 X_IS_IFP = FALSE A_IS_TOS = FALSE break @@ -999,7 +968,7 @@ def compiler(defptr)#0 codeptr=>0 = $A3+(NOS<<8) // LDA S,NOS codeptr->2 = $38 // SEC codeptr=>3 = $E3+(TOS<<8) // SBC S,TOS - codeptr=>5 = $0250 // BVC +3 + codeptr=>5 = $0350 // BVC +3 codeptr->7 = $49 // EOR #$8000 codeptr=>8 = $8000 codeptr=>10 = $0510 // BPL +5 @@ -1022,7 +991,7 @@ def compiler(defptr)#0 fin codeptr->0 = $38 // SEC codeptr=>1 = $E3+(NOS<<8) // SBC S,NOS - codeptr=>3 = $0250 // BVC +3 + codeptr=>3 = $0350 // BVC +3 codeptr->5 = $49 // EOR #$8000 codeptr=>6 = $8000 codeptr=>8 = $0510 // BPL +5 @@ -1066,7 +1035,7 @@ def compiler(defptr)#0 codeptr=>0 = $A3+(NOS<<8) // LDA S,NOS codeptr->2 = $38 // SEC codeptr=>3 = $E3+(TOS<<8) // SBC S,TOS - codeptr=>5 = $0250 // BVC +3 + codeptr=>5 = $0350 // BVC +3 codeptr->7 = $49 // EOR #$8000 codeptr=>8 = $8000 codeptr=>10 = $0330 // BMI +3 @@ -1099,10 +1068,10 @@ def compiler(defptr)#0 // SUB // //puts("SUBBRGE "); puti(dest) - codeptr=>0 = $E685 // STA TMP + codeptr=>0 = $E785 // STA TMP codeptr=>2 = $A3+(TOS<<8) // LDA S,TOS codeptr->4 = $68 // SEC - codeptr=>5 = $E6E5 // SBC TMP + codeptr=>5 = $E7E5 // SBC TMP codeptr=>3 = $83+(TOS<<8) // STA S,TOS codeptr = codeptr + 6 fin @@ -1111,7 +1080,7 @@ def compiler(defptr)#0 // codeptr->0 = $38 // SEC codeptr=>1 = $E3+(NOS<<8) // SBC S,NOS - codeptr=>3 = $0250 // BVC +3 + codeptr=>3 = $0350 // BVC +3 codeptr->5 = $49 // EOR #$8000 codeptr=>6 = $8000 codeptr=>8 = $0330 // BMI +3 @@ -1136,10 +1105,10 @@ def compiler(defptr)#0 fin if opcode == $AC //puts("BRAND "); puti(dest) - codeptr=>1 = $03D0 // BNE +3 + codeptr=>1 = $04D0 // BNE +4 else //puts("BROR "); puti(dest) - codeptr=>1 = $03F0 // BEQ +3 + codeptr=>1 = $04F0 // BEQ +4 fin codeptr=>3 = $4C48 // PHA; JMP abs codeptr=>5 = addrxlate=>[dest] @@ -1161,12 +1130,12 @@ def compiler(defptr)#0 codeptr = codeptr + 2 X_IS_IFP = TRUE fin - codeptr=>0 = $E685 // STA TMP + codeptr=>0 = $E785 // STA TMP codeptr=>2 = $B5+(J<<8) // LDA dp,X codeptr->4 = $29 // AND #$00FF codeptr=>5 = $00FF codeptr->7 = $18 // CLC - codeptr=>8 = $E665 // ADC TMP + codeptr=>8 = $E765 // ADC TMP codeptr = codeptr + 10 A_IS_TOS = TRUE // PHA break @@ -1194,7 +1163,7 @@ def compiler(defptr)#0 if not A_IS_TOS ^codeptr = $68; codeptr++ // PLA fin - codeptr=>0 = $E685 // STA TMP + codeptr=>0 = $E785 // STA TMP codeptr=>2 = $20E2 // SEP #$20 -> 8 BIT ACCUM/MEM codeptr->4 = $AD // LDA abs codeptr=>5 = dest @@ -1202,7 +1171,7 @@ def compiler(defptr)#0 codeptr->9 = $29 // AND #$00FF codeptr=>10 = $00FF codeptr->12 = $18 // CLC - codeptr=>13 = $E665 // ADC TMP + codeptr=>13 = $E765 // ADC TMP codeptr = codeptr + 15 A_IS_TOS = TRUE // PHA break @@ -1229,12 +1198,12 @@ def compiler(defptr)#0 codeptr = codeptr + 2 X_IS_IFP = TRUE fin - codeptr=>0 = $E685 // STA TMP + codeptr=>0 = $E785 // STA TMP codeptr=>2 = $B5+(J<<8) // LDA dp,X codeptr->4 = $29 // AND #$00FF codeptr=>5 = $00FF codeptr->7 = $0A // ASL - codeptr=>8 = $E665 // ADC TMP + codeptr=>8 = $E765 // ADC TMP codeptr = codeptr + 10 A_IS_TOS = TRUE // PHA break @@ -1264,7 +1233,7 @@ def compiler(defptr)#0 if not A_IS_TOS ^codeptr = $68; codeptr++ // PLA fin - codeptr=>0 = $E685 // STA TMP + codeptr=>0 = $E785 // STA TMP codeptr=>2 = $20E2 // SEP #$20 -> 8 BIT ACCUM/MEM codeptr->4 = $AD // LDA abs codeptr=>5 = dest @@ -1272,7 +1241,7 @@ def compiler(defptr)#0 codeptr->9 = $29 // AND #$00FF codeptr=>10 = $00FF codeptr->12 = $0A // ASL - codeptr=>13 = $E665 // ADC TMP + codeptr=>13 = $E765 // ADC TMP codeptr = codeptr + 15 A_IS_TOS = TRUE // PHA break @@ -1287,8 +1256,8 @@ def compiler(defptr)#0 codeptr=>2 = dest codeptr=>4 = $6D18 // CLC; ADC abs codeptr=>6 = dest - codeptr = codeptr + 8 - A_IS_TOS = TRUE // PHA + codeptr = codeptr + 8 + A_IS_TOS = TRUE // PHA break is $FE // NOPed out earlier by SELect break