From 8610d2f56e3b83d46d6d6b5e2c79d326683b050e Mon Sep 17 00:00:00 2001 From: Steven Flintham Date: Tue, 18 Jul 2017 20:37:43 +0100 Subject: [PATCH 1/2] Add CFFB opcode --- src/toolsrc/codegen.c | 2 ++ src/vmsrc/plvm01.s | 9 ++++++--- src/vmsrc/plvm02.s | 9 ++++++--- src/vmsrc/plvm03.s | 9 ++++++--- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/toolsrc/codegen.c b/src/toolsrc/codegen.c index 46ccba5..ca60229 100755 --- a/src/toolsrc/codegen.c +++ b/src/toolsrc/codegen.c @@ -544,6 +544,8 @@ void emit_const(int cval) printf("\t%s\t$00\t\t\t; ZERO\n", DB); else if (cval > 0 && cval < 256) printf("\t%s\t$2A,$%02X\t\t\t; CB\t%d\n", DB, cval, cval); + else if ((cval&0xFF00) >= 0xFF00) + printf("\t%s\t$80,$%02X\t\t\t; CFFB\t%d\n", DB, cval&0xFF, cval&0xFF); else printf("\t%s\t$2C,$%02X,$%02X\t\t; CW\t%d\n", DB, cval&0xFF,(cval>>8)&0xFF, cval); } diff --git a/src/vmsrc/plvm01.s b/src/vmsrc/plvm01.s index 787c59c..1da77d1 100644 --- a/src/vmsrc/plvm01.s +++ b/src/vmsrc/plvm01.s @@ -118,6 +118,7 @@ OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0 !WORD BRNCH,IBRNCH,CALL,ICAL,ENTER,LEAVE,RET,NEXTOP ; 50 52 54 56 58 5A 5C 5E !WORD LB,LW,LLB,LLW,LAB,LAW,DLB,DLW ; 60 62 64 66 68 6A 6C 6E !WORD SB,SW,SLB,SLW,SAB,SAW,DAB,DAW ; 70 72 74 76 78 7A 7C 7E + !WORD CFFB ; 80 82 84 86 88 8A 8C 8E ;* ;* DIV TOS-1 BY TOS ;* @@ -399,12 +400,14 @@ ZERO DEX STA ESTKL,X STA ESTKH,X JMP NEXTOP -CB DEX +CFFB LDA #$FF + !BYTE $2C ; BIT $00A9 - effectively skips LDA #$00, no harm in reading this address +CB LDA #$00 + DEX + STA ESTKH,X +INC_IP LDA (IP),Y STA ESTKL,X - LDA #$00 - STA ESTKH,X JMP NEXTOP ;* ;* LOAD ADDRESS & LOAD CONSTANT WORD (SAME THING, WITH OR WITHOUT FIXUP) diff --git a/src/vmsrc/plvm02.s b/src/vmsrc/plvm02.s index 7aeb36a..eab214e 100755 --- a/src/vmsrc/plvm02.s +++ b/src/vmsrc/plvm02.s @@ -176,6 +176,7 @@ OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E !WORD BRNCH,IBRNCH,CALL,ICAL,ENTER,LEAVE,RET,NEXTOP ; 50 52 54 56 58 5A 5C 5E !WORD LB,LW,LLB,LLW,LAB,LAW,DLB,DLW ; 60 62 64 66 68 6A 6C 6E !WORD SB,SW,SLB,SLW,SAB,SAW,DAB,DAW ; 70 72 74 76 78 7A 7C 7E + !WORD CFFB ; 80 82 84 86 88 8A 8C 8E ;* ;* ENTER INTO BYTECODE INTERPRETER ;* @@ -731,12 +732,14 @@ ZERO DEX STA ESTKL,X STA ESTKH,X JMP NEXTOP -CB DEX +CFFB LDA #$FF + !BYTE $2C ; BIT $00A9 - effectively skips LDA #$00, no harm in reading this address +CB LDA #$00 + DEX + STA ESTKH,X +INC_IP LDA (IP),Y STA ESTKL,X - LDA #$00 - STA ESTKH,X JMP NEXTOP ;* ;* LOAD ADDRESS & LOAD CONSTANT WORD (SAME THING, WITH OR WITHOUT FIXUP) diff --git a/src/vmsrc/plvm03.s b/src/vmsrc/plvm03.s index 4d8f59a..6af00b4 100644 --- a/src/vmsrc/plvm03.s +++ b/src/vmsrc/plvm03.s @@ -223,6 +223,7 @@ OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 !WORD BRNCH,IBRNCH,CALL,ICAL,ENTER,LEAVE,RET,NEXTOP ; 50 52 54 56 58 5A 5C 5E !WORD LB,LW,LLB,LLW,LAB,LAW,DLB,DLW ; 60 62 64 66 68 6A 6C 6E !WORD SB,SW,SLB,SLW,SAB,SAW,DAB,DAW ; 70 72 74 76 78 7A 7C 7E + !WORD CFFB ; 80 82 84 86 88 8A 8C 8E ;* ;* MUL TOS-1 BY TOS ;* @@ -507,12 +508,14 @@ ZERO DEX STA ESTKL,X STA ESTKH,X JMP NEXTOP -CB DEX +CFFB LDA #$FF + !BYTE $2C ; BIT $00A9 - effectively skips LDA #$00, no harm in reading this address +CB LDA #$00 + DEX + STA ESTKH,X +INC_IP LDA (IP),Y STA ESTKL,X - LDA #$00 - STA ESTKH,X JMP NEXTOP ;* ;* LOAD ADDRESS & LOAD CONSTANT WORD (SAME THING, WITH OR WITHOUT FIXUP) From d5f5326962ba90b862c4704353fc9c56ffee5cb5 Mon Sep 17 00:00:00 2001 From: Steven Flintham Date: Wed, 26 Jul 2017 20:22:27 +0100 Subject: [PATCH 2/2] Use opcode $5E for CFFB --- src/toolsrc/codegen.c | 2 +- src/vmsrc/plvm01.s | 3 +-- src/vmsrc/plvm02.s | 3 +-- src/vmsrc/plvm03.s | 3 +-- 4 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/toolsrc/codegen.c b/src/toolsrc/codegen.c index ca60229..b51ca6b 100755 --- a/src/toolsrc/codegen.c +++ b/src/toolsrc/codegen.c @@ -545,7 +545,7 @@ void emit_const(int cval) else if (cval > 0 && cval < 256) printf("\t%s\t$2A,$%02X\t\t\t; CB\t%d\n", DB, cval, cval); else if ((cval&0xFF00) >= 0xFF00) - printf("\t%s\t$80,$%02X\t\t\t; CFFB\t%d\n", DB, cval&0xFF, cval&0xFF); + printf("\t%s\t$5E,$%02X\t\t\t; CFFB\t%d\n", DB, cval&0xFF, cval&0xFF); else printf("\t%s\t$2C,$%02X,$%02X\t\t; CW\t%d\n", DB, cval&0xFF,(cval>>8)&0xFF, cval); } diff --git a/src/vmsrc/plvm01.s b/src/vmsrc/plvm01.s index 1da77d1..956677a 100644 --- a/src/vmsrc/plvm01.s +++ b/src/vmsrc/plvm01.s @@ -115,10 +115,9 @@ OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0 !WORD LNOT,LOR,LAND,LA,LLA,CB,CW,CS ; 20 22 24 26 28 2A 2C 2E !WORD DROP,DUP,PUSHEP,PULLEP,BRGT,BRLT,BREQ,BRNE ; 30 32 34 36 38 3A 3C 3E !WORD ISEQ,ISNE,ISGT,ISLT,ISGE,ISLE,BRFLS,BRTRU ; 40 42 44 46 48 4A 4C 4E - !WORD BRNCH,IBRNCH,CALL,ICAL,ENTER,LEAVE,RET,NEXTOP ; 50 52 54 56 58 5A 5C 5E + !WORD BRNCH,IBRNCH,CALL,ICAL,ENTER,LEAVE,RET,CFFB ; 50 52 54 56 58 5A 5C 5E !WORD LB,LW,LLB,LLW,LAB,LAW,DLB,DLW ; 60 62 64 66 68 6A 6C 6E !WORD SB,SW,SLB,SLW,SAB,SAW,DAB,DAW ; 70 72 74 76 78 7A 7C 7E - !WORD CFFB ; 80 82 84 86 88 8A 8C 8E ;* ;* DIV TOS-1 BY TOS ;* diff --git a/src/vmsrc/plvm02.s b/src/vmsrc/plvm02.s index eab214e..f48e252 100755 --- a/src/vmsrc/plvm02.s +++ b/src/vmsrc/plvm02.s @@ -173,10 +173,9 @@ OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E !WORD LNOT,LOR,LAND,LA,LLA,CB,CW,CS ; 20 22 24 26 28 2A 2C 2E !WORD DROP,DUP,PUSHEP,PULLEP,BRGT,BRLT,BREQ,BRNE ; 30 32 34 36 38 3A 3C 3E !WORD ISEQ,ISNE,ISGT,ISLT,ISGE,ISLE,BRFLS,BRTRU ; 40 42 44 46 48 4A 4C 4E - !WORD BRNCH,IBRNCH,CALL,ICAL,ENTER,LEAVE,RET,NEXTOP ; 50 52 54 56 58 5A 5C 5E + !WORD BRNCH,IBRNCH,CALL,ICAL,ENTER,LEAVE,RET,CFFB ; 50 52 54 56 58 5A 5C 5E !WORD LB,LW,LLB,LLW,LAB,LAW,DLB,DLW ; 60 62 64 66 68 6A 6C 6E !WORD SB,SW,SLB,SLW,SAB,SAW,DAB,DAW ; 70 72 74 76 78 7A 7C 7E - !WORD CFFB ; 80 82 84 86 88 8A 8C 8E ;* ;* ENTER INTO BYTECODE INTERPRETER ;* diff --git a/src/vmsrc/plvm03.s b/src/vmsrc/plvm03.s index 6af00b4..89dec04 100644 --- a/src/vmsrc/plvm03.s +++ b/src/vmsrc/plvm03.s @@ -220,10 +220,9 @@ OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 !WORD LNOT,LOR,LAND,LA,LLA,CB,CW,CS ; 20 22 24 26 28 2A 2C 2E !WORD DROP,DUP,PUSHEP,PULLEP,BRGT,BRLT,BREQ,BRNE ; 30 32 34 36 38 3A 3C 3E !WORD ISEQ,ISNE,ISGT,ISLT,ISGE,ISLE,BRFLS,BRTRU ; 40 42 44 46 48 4A 4C 4E - !WORD BRNCH,IBRNCH,CALL,ICAL,ENTER,LEAVE,RET,NEXTOP ; 50 52 54 56 58 5A 5C 5E + !WORD BRNCH,IBRNCH,CALL,ICAL,ENTER,LEAVE,RET,CFFB ; 50 52 54 56 58 5A 5C 5E !WORD LB,LW,LLB,LLW,LAB,LAW,DLB,DLW ; 60 62 64 66 68 6A 6C 6E !WORD SB,SW,SLB,SLW,SAB,SAW,DAB,DAW ; 70 72 74 76 78 7A 7C 7E - !WORD CFFB ; 80 82 84 86 88 8A 8C 8E ;* ;* MUL TOS-1 BY TOS ;*