mirror of
https://github.com/dschmenk/PLASMA.git
synced 2026-04-19 09:23:06 +00:00
local and absolute address ADDs
This commit is contained in:
+139
-2
@@ -652,6 +652,22 @@ void emit_llw(int index)
|
||||
{
|
||||
printf("\t%s\t$66,$%02X\t\t\t; LLW\t[%d]\n", DB, index, index);
|
||||
}
|
||||
void emit_addlb(int index)
|
||||
{
|
||||
printf("\t%s\t$B0,$%02X\t\t\t; ADDLB\t[%d]\n", DB, index, index);
|
||||
}
|
||||
void emit_addlw(int index)
|
||||
{
|
||||
printf("\t%s\t$B2,$%02X\t\t\t; ADDLW\t[%d]\n", DB, index, index);
|
||||
}
|
||||
void emit_idxlb(int index)
|
||||
{
|
||||
printf("\t%s\t$B8,$%02X\t\t\t; IDXLB\t[%d]\n", DB, index, index);
|
||||
}
|
||||
void emit_idxlw(int index)
|
||||
{
|
||||
printf("\t%s\t$BA,$%02X\t\t\t; IDXLW\t[%d]\n", DB, index, index);
|
||||
}
|
||||
void emit_lab(int tag, int offset, int type)
|
||||
{
|
||||
if (type)
|
||||
@@ -680,6 +696,62 @@ void emit_law(int tag, int offset, int type)
|
||||
printf("\t%s\t$6A,$%02X,$%02X\t\t; LAW\t%d\n", DB, offset&0xFF,(offset>>8)&0xFF, offset);
|
||||
}
|
||||
}
|
||||
void emit_addab(int tag, int offset, int type)
|
||||
{
|
||||
if (type)
|
||||
{
|
||||
int fixup = fixup_new(tag, type, FIXUP_WORD);
|
||||
char *taglbl = tag_string(tag, type);
|
||||
printf("\t%s\t$B4\t\t\t; ADDAB\t%s+%d\n", DB, taglbl, offset);
|
||||
printf("_F%03d%c\t%s\t%s+%d\t\t\n", fixup, LBL, DW, type & EXTERN_TYPE ? "0" : taglbl, offset);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("\t%s\t$B4,$%02X,$%02X\t\t; ADDAB\t%d\n", DB, offset&0xFF,(offset>>8)&0xFF, offset);
|
||||
}
|
||||
}
|
||||
void emit_addaw(int tag, int offset, int type)
|
||||
{
|
||||
if (type)
|
||||
{
|
||||
int fixup = fixup_new(tag, type, FIXUP_WORD);
|
||||
char *taglbl = tag_string(tag, type);
|
||||
printf("\t%s\t$B6\t\t\t; ADDAW\t%s+%d\n", DB, taglbl, offset);
|
||||
printf("_F%03d%c\t%s\t%s+%d\t\t\n", fixup, LBL, DW, type & EXTERN_TYPE ? "0" : taglbl, offset);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("\t%s\t$B6,$%02X,$%02X\t\t; ADDAW\t%d\n", DB, offset&0xFF,(offset>>8)&0xFF, offset);
|
||||
}
|
||||
}
|
||||
void emit_idxab(int tag, int offset, int type)
|
||||
{
|
||||
if (type)
|
||||
{
|
||||
int fixup = fixup_new(tag, type, FIXUP_WORD);
|
||||
char *taglbl = tag_string(tag, type);
|
||||
printf("\t%s\t$BC\t\t\t; IDXAB\t%s+%d\n", DB, taglbl, offset);
|
||||
printf("_F%03d%c\t%s\t%s+%d\t\t\n", fixup, LBL, DW, type & EXTERN_TYPE ? "0" : taglbl, offset);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("\t%s\t$BC,$%02X,$%02X\t\t; IDXAB\t%d\n", DB, offset&0xFF,(offset>>8)&0xFF, offset);
|
||||
}
|
||||
}
|
||||
void emit_idxaw(int tag, int offset, int type)
|
||||
{
|
||||
if (type)
|
||||
{
|
||||
int fixup = fixup_new(tag, type, FIXUP_WORD);
|
||||
char *taglbl = tag_string(tag, type);
|
||||
printf("\t%s\t$BE\t\t\t; IDXAW\t%s+%d\n", DB, taglbl, offset);
|
||||
printf("_F%03d%c\t%s\t%s+%d\t\t\n", fixup, LBL, DW, type & EXTERN_TYPE ? "0" : taglbl, offset);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("\t%s\t$BE,$%02X,$%02X\t\t; IDXAW\t%d\n", DB, offset&0xFF,(offset>>8)&0xFF, offset);
|
||||
}
|
||||
}
|
||||
void emit_sb(void)
|
||||
{
|
||||
printf("\t%s\t$70\t\t\t; SB\n", DB);
|
||||
@@ -1436,7 +1508,17 @@ int crunch_seq(t_opseq **seq, int pass)
|
||||
crunched = try_dupify(op);
|
||||
break; // GADDR_CODE
|
||||
case LLB_CODE:
|
||||
if (pass > 0)
|
||||
if ((opnext->code == ADD_CODE) || (opnext->code == INDEXB_CODE))
|
||||
{
|
||||
op->code = ADDLB_CODE;
|
||||
freeops = 1;
|
||||
}
|
||||
else if (opnext->code == INDEXW_CODE)
|
||||
{
|
||||
op->code = IDXLB_CODE;
|
||||
freeops = 1;
|
||||
}
|
||||
if ((pass > 0) && (freeops == 0))
|
||||
crunched = try_dupify(op);
|
||||
break; // LLB_CODE
|
||||
case LLW_CODE:
|
||||
@@ -1454,11 +1536,32 @@ int crunch_seq(t_opseq **seq, int pass)
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ((opnext->code == ADD_CODE) || (opnext->code == INDEXB_CODE))
|
||||
{
|
||||
op->code = ADDLW_CODE;
|
||||
freeops = 1;
|
||||
}
|
||||
else if (opnext->code == INDEXW_CODE)
|
||||
{
|
||||
op->code = IDXLW_CODE;
|
||||
freeops = 1;
|
||||
}
|
||||
if ((pass > 0) && (freeops == 0))
|
||||
crunched = try_dupify(op);
|
||||
break; // LLW_CODE
|
||||
case LAB_CODE:
|
||||
if ((pass > 0) && (op->type || !is_hardware_address(op->offsz)))
|
||||
if ((opnext->code == ADD_CODE) || (opnext->code == INDEXB_CODE))
|
||||
{
|
||||
op->code = ADDAB_CODE;
|
||||
freeops = 1;
|
||||
}
|
||||
else if (opnext->code == INDEXW_CODE)
|
||||
{
|
||||
op->code = IDXAB_CODE;
|
||||
freeops = 1;
|
||||
}
|
||||
if ((pass > 0) && (freeops == 0) &&
|
||||
(op->type || !is_hardware_address(op->offsz)))
|
||||
crunched = try_dupify(op);
|
||||
break; // LAB_CODE
|
||||
case LAW_CODE:
|
||||
@@ -1476,6 +1579,16 @@ int crunch_seq(t_opseq **seq, int pass)
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ((opnext->code == ADD_CODE) || (opnext->code == INDEXB_CODE))
|
||||
{
|
||||
op->code = ADDAW_CODE;
|
||||
freeops = 1;
|
||||
}
|
||||
else if (opnext->code == INDEXW_CODE)
|
||||
{
|
||||
op->code = IDXAW_CODE;
|
||||
freeops = 1;
|
||||
}
|
||||
if ((pass > 0) && (freeops == 0) &&
|
||||
(op->type || !is_hardware_address(op->offsz)))
|
||||
crunched = try_dupify(op);
|
||||
@@ -1720,12 +1833,36 @@ int emit_pending_seq()
|
||||
case LLW_CODE:
|
||||
emit_llw(op->offsz);
|
||||
break;
|
||||
case ADDLB_CODE:
|
||||
emit_addlb(op->offsz);
|
||||
break;
|
||||
case ADDLW_CODE:
|
||||
emit_addlw(op->offsz);
|
||||
break;
|
||||
case IDXLB_CODE:
|
||||
emit_idxlb(op->offsz);
|
||||
break;
|
||||
case IDXLW_CODE:
|
||||
emit_idxlw(op->offsz);
|
||||
break;
|
||||
case LAB_CODE:
|
||||
emit_lab(op->tag, op->offsz, op->type);
|
||||
break;
|
||||
case LAW_CODE:
|
||||
emit_law(op->tag, op->offsz, op->type);
|
||||
break;
|
||||
case ADDAB_CODE:
|
||||
emit_addab(op->tag, op->offsz, op->type);
|
||||
break;
|
||||
case ADDAW_CODE:
|
||||
emit_addaw(op->tag, op->offsz, op->type);
|
||||
break;
|
||||
case IDXAB_CODE:
|
||||
emit_idxab(op->tag, op->offsz, op->type);
|
||||
break;
|
||||
case IDXAW_CODE:
|
||||
emit_idxaw(op->tag, op->offsz, op->type);
|
||||
break;
|
||||
case SB_CODE:
|
||||
emit_sb();
|
||||
break;
|
||||
|
||||
@@ -68,6 +68,14 @@ typedef struct _opseq {
|
||||
#define BROR_CODE 0x324
|
||||
#define CODETAG_CODE 0x0325
|
||||
#define NOP_CODE 0x0326
|
||||
#define ADDLB_CODE 0x0330
|
||||
#define ADDLW_CODE 0x0331
|
||||
#define ADDAB_CODE 0x0332
|
||||
#define ADDAW_CODE 0x0333
|
||||
#define IDXLB_CODE 0x0334
|
||||
#define IDXLW_CODE 0x0335
|
||||
#define IDXAB_CODE 0x0336
|
||||
#define IDXAW_CODE 0x0337
|
||||
|
||||
#define gen_uop(seq,op) gen_seq(seq,UNARY_CODE(op),0,0,0,0)
|
||||
#define gen_op(seq,op) gen_seq(seq,BINARY_CODE(op),0,0,0,0)
|
||||
|
||||
+80
-26
@@ -273,7 +273,8 @@ def crunch_seq(seq, pass)
|
||||
if nextop=>opnext
|
||||
nextopnext = nextop=>opnext
|
||||
when nextopnext->opcode
|
||||
is INDEXB_CODE // ADD_CODE
|
||||
is ADD_CODE
|
||||
is INDEXB_CODE
|
||||
op=>opoffset = op=>opoffset + nextop=>opval
|
||||
freeops = 2
|
||||
break
|
||||
@@ -311,7 +312,8 @@ def crunch_seq(seq, pass)
|
||||
if nextop=>opnext
|
||||
nextopnext = nextop=>opnext
|
||||
when nextopnext->opcode
|
||||
is INDEXB_CODE // ADD_CODE
|
||||
is ADD_CODE
|
||||
is INDEXB_CODE
|
||||
op=>opoffset = op=>opoffset + nextop=>opval
|
||||
freeops = 2
|
||||
break
|
||||
@@ -348,45 +350,97 @@ def crunch_seq(seq, pass)
|
||||
fin
|
||||
break // GADDR_CODE
|
||||
is LLB_CODE
|
||||
if pass
|
||||
when nextop->opcode
|
||||
is ADD_CODE
|
||||
is INDEXB_CODE
|
||||
op->opcode = ADDLB_CODE
|
||||
freeops = 1
|
||||
putc(':')
|
||||
break
|
||||
is INDEXW_CODE
|
||||
op->opcode = IDXLB_CODE
|
||||
freeops = 1
|
||||
putc(';')
|
||||
break
|
||||
wend
|
||||
if pass and not freeops
|
||||
crunched = try_dupify(op)
|
||||
fin
|
||||
break // LLB_CODE
|
||||
is LLW_CODE
|
||||
// LLW [n]:CB 8:SHR -> LLB [n+1]
|
||||
if nextop->opcode == CONST_CODE and nextop=>opval == 8
|
||||
if nextop=>opnext
|
||||
nextopnext = nextop=>opnext
|
||||
if nextopnext->opcode == SHR_CODE
|
||||
op->opcode = LLB_CODE
|
||||
op=>opoffset++
|
||||
freeops = 2
|
||||
break
|
||||
when nextop->opcode
|
||||
is ADD_CODE
|
||||
is INDEXB_CODE
|
||||
op->opcode = ADDLW_CODE
|
||||
freeops = 1
|
||||
putc(':')
|
||||
break
|
||||
is INDEXW_CODE
|
||||
op->opcode = IDXLW_CODE
|
||||
freeops = 1
|
||||
putc(';')
|
||||
break
|
||||
is CONST_CODE
|
||||
// LLW [n]:CB 8:SHR -> LLB [n+1]
|
||||
if nextop=>opval == 8 and nextop=>opnext
|
||||
nextopnext = nextop=>opnext
|
||||
if nextopnext->opcode == SHR_CODE
|
||||
op->opcode = LLB_CODE
|
||||
op=>opoffset++
|
||||
freeops = 2
|
||||
break
|
||||
fin
|
||||
fin
|
||||
fin
|
||||
fin
|
||||
break
|
||||
wend
|
||||
if pass and not freeops
|
||||
crunched = try_dupify(op)
|
||||
fin
|
||||
break // LLW_CODE
|
||||
is LAB_CODE
|
||||
if pass and not is_hardware_address(op=>opoffset)
|
||||
when nextop->opcode
|
||||
is ADD_CODE
|
||||
is INDEXB_CODE
|
||||
op->opcode = ADDAB_CODE
|
||||
freeops = 1
|
||||
putc(':')
|
||||
break
|
||||
is INDEXW_CODE
|
||||
op->opcode = IDXAB_CODE
|
||||
freeops = 1
|
||||
putc(';')
|
||||
break
|
||||
wend
|
||||
if pass and not freeops and not is_hardware_address(op=>opoffset)
|
||||
crunched = try_dupify(op)
|
||||
fin
|
||||
break // LAB_CODE
|
||||
is LAW_CODE
|
||||
// LAW x:CB 8:SHR -> LAB x+1
|
||||
if nextop->opcode == CONST_CODE and nextop=>opval == 8
|
||||
if nextop=>opnext
|
||||
nextopnext = nextop=>opnext
|
||||
if nextopnext->opcode == SHR_CODE
|
||||
op->opcode = LAB_CODE
|
||||
op=>opoffset++
|
||||
freeops = 2
|
||||
break
|
||||
when nextop->opcode
|
||||
is ADD_CODE
|
||||
is INDEXB_CODE
|
||||
op->opcode = ADDAW_CODE
|
||||
freeops = 1
|
||||
putc(':')
|
||||
break
|
||||
is INDEXW_CODE
|
||||
op->opcode = IDXAW_CODE
|
||||
freeops = 1
|
||||
putc(';')
|
||||
break
|
||||
is CONST_CODE
|
||||
// LLW [n]:CB 8:SHR -> LLB [n+1]
|
||||
if nextop=>opval == 8 and nextop=>opnext
|
||||
nextopnext = nextop=>opnext
|
||||
if nextopnext->opcode == SHR_CODE
|
||||
op->opcode = LAB_CODE
|
||||
op=>opoffset++
|
||||
freeops = 2
|
||||
break
|
||||
fin
|
||||
fin
|
||||
fin
|
||||
fin
|
||||
break
|
||||
wend
|
||||
if pass and not freeops and not is_hardware_address(op=>opoffset)
|
||||
crunched = try_dupify(op)
|
||||
fin
|
||||
|
||||
@@ -58,6 +58,10 @@ const DLB_CODE = $6C
|
||||
const DLW_CODE = $6E
|
||||
const SLB_CODE = $74
|
||||
const SLW_CODE = $76
|
||||
const ADDLB_CODE = $B0
|
||||
const ADDLW_CODE = $B2
|
||||
const IDXLB_CODE = $B8
|
||||
const IDXLW_CODE = $BA
|
||||
//
|
||||
// Global address code group
|
||||
//
|
||||
@@ -70,6 +74,10 @@ const SAB_CODE = $78
|
||||
const SAW_CODE = $7A
|
||||
const DAB_CODE = $7C
|
||||
const DAW_CODE = $7E
|
||||
const ADDAB_CODE = $B4
|
||||
const ADDAW_CODE = $B6
|
||||
const IDXAB_CODE = $BC
|
||||
const IDXAW_CODE = $BE
|
||||
//
|
||||
// Relative address code group
|
||||
//
|
||||
|
||||
+72
-12
@@ -120,6 +120,7 @@ OPTBL !WORD CN,CN,CN,CN,CN,CN,CN,CN ; 00 02
|
||||
!WORD LNOT,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 80 82 84 86 88 8A 8C 8E
|
||||
!WORD NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 90 92 94 96 98 9A 9C 9E
|
||||
!WORD BRGT,BRLT,INCBRLE,ADDBRLE,DECBRGE,SUBBRGE,BRAND,BROR ; A0 A2 A4 A6 A8 AA AC AE
|
||||
!WORD ADDLB,ADDLW,ADDAB,ADDAW,IDXLB,IDXLW,IDXAB,IDXAW ; B0 B2 B4 B6 B8 BA BC BE
|
||||
;*
|
||||
;* DIV TOS-1 BY TOS
|
||||
;*
|
||||
@@ -336,17 +337,6 @@ DUP DEX
|
||||
STA ESTKH,X
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* LOGICAL NOT
|
||||
;*
|
||||
LNOT LDA ESTKL,X
|
||||
ORA ESTKH,X
|
||||
BEQ +
|
||||
LDA #$FF
|
||||
+ EOR #$FF
|
||||
STA ESTKL,X
|
||||
STA ESTKH,X
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* ADD IMMEDIATE TO TOS
|
||||
;*
|
||||
ADDI INY ;+INC_IP
|
||||
@@ -387,10 +377,20 @@ ORI INY ;+INC_IP
|
||||
STA ESTKL,X
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* LOGICAL NOT
|
||||
;*
|
||||
LNOT LDA ESTKL,X
|
||||
ORA ESTKH,X
|
||||
BEQ +
|
||||
LDA #$00
|
||||
STA ESTKL,X
|
||||
STA ESTKH,X
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* CONSTANT -1, NYBBLE, BYTE, $FF BYTE, WORD (BELOW)
|
||||
;*
|
||||
MINUS1 DEX
|
||||
LDA #$FF
|
||||
+ LDA #$FF
|
||||
STA ESTKL,X
|
||||
STA ESTKH,X
|
||||
JMP NEXTOP
|
||||
@@ -525,6 +525,36 @@ LLW INY ;+INC_IP
|
||||
LDY IPY
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* ADD VALUE FROM LOCAL FRAME OFFSET
|
||||
;*
|
||||
ADDLB LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LLB
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP ADD
|
||||
ADDLW LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LLW
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP ADD
|
||||
;*
|
||||
;* INDEX VALUE FROM LOCAL FRAME OFFSET
|
||||
;*
|
||||
IDXLB LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LLB
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP IDXW
|
||||
IDXLW LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LLW
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP IDXW
|
||||
;*
|
||||
;* LOAD VALUE FROM ABSOLUTE ADDRESS
|
||||
;*
|
||||
LAB INY ;+INC_IP
|
||||
@@ -556,6 +586,36 @@ LAW INY ;+INC_IP
|
||||
LDY IPY
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* ADD VALUE FROM ABSOLUTE ADDRESS
|
||||
;*
|
||||
ADDAB LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LAB
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP ADD
|
||||
ADDAW LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LAW
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP ADD
|
||||
;*
|
||||
;* INDEX VALUE FROM ABSOLUTE ADDRESS
|
||||
;*
|
||||
IDXAB LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LAB
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP IDXW
|
||||
IDXAW LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LAW
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP IDXW
|
||||
;*
|
||||
;* STORE VALUE TO ADDRESS
|
||||
;*
|
||||
SB LDA ESTKL,X
|
||||
|
||||
+137
-24
@@ -204,21 +204,11 @@ OPTBL !WORD CN,CN,CN,CN,CN,CN,CN,CN ; 00 02
|
||||
!WORD LNOT,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 80 82 84 86 88 8A 8C 8E
|
||||
!WORD NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 90 92 94 96 98 9A 9C 9E
|
||||
!WORD BRGT,BRLT,INCBRLE,ADDBRLE,DECBRGE,SUBBRGE,BRAND,BROR ; A0 A2 A4 A6 A8 AA AC AE
|
||||
!WORD ADDLB,ADDLW,ADDAB,ADDAW,IDXLB,IDXLW,IDXAB,IDXAW ; B0 B2 B4 B6 B8 BA BC BE
|
||||
;*
|
||||
;*
|
||||
;* ENTER INTO BYTECODE INTERPRETER
|
||||
;* INDIRECTLY ENTER INTO BYTECODE INTERPRETER
|
||||
;*
|
||||
DINTRP PLA
|
||||
CLC
|
||||
ADC #$01
|
||||
STA IPL
|
||||
PLA
|
||||
ADC #$00
|
||||
STA IPH
|
||||
LDY #$00
|
||||
LDA #>OPTBL
|
||||
STA OPPAGE
|
||||
JMP FETCHOP
|
||||
IINTRP PLA
|
||||
STA TMPL
|
||||
PLA
|
||||
@@ -415,6 +405,22 @@ OPXTBL !WORD CN,CN,CN,CN,CN,CN,CN,CN ; 00 02
|
||||
!WORD LNOT,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 80 82 84 86 88 8A 8C 8E
|
||||
!WORD NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 90 92 94 96 98 9A 9C 9E
|
||||
!WORD BRGT,BRLT,INCBRLE,ADDBRLE,DECBRGE,SUBBRGE,BRAND,BROR ; A0 A2 A4 A6 A8 AA AC AE
|
||||
!WORD ADDLBX,ADDLWX,ADDABX,ADDAWX,IDXLBX,IDXLWX,IDXABX,IDXAWX ; B0 B2 B4 B6 B8 BA BC BE
|
||||
;*
|
||||
;*
|
||||
;* DIRECTLY ENTER INTO BYTECODE INTERPRETER
|
||||
;*
|
||||
DINTRP PLA
|
||||
CLC
|
||||
ADC #$01
|
||||
STA IPL
|
||||
PLA
|
||||
ADC #$00
|
||||
STA IPH
|
||||
LDY #$00
|
||||
LDA #>OPTBL
|
||||
STA OPPAGE
|
||||
JMP FETCHOP
|
||||
;*
|
||||
;* ADD TOS TO TOS-1
|
||||
;*
|
||||
@@ -685,17 +691,6 @@ SHR STY IPY
|
||||
+ LDY IPY
|
||||
JMP DROP
|
||||
;*
|
||||
;* LOGICAL NOT
|
||||
;*
|
||||
LNOT LDA ESTKL,X
|
||||
ORA ESTKH,X
|
||||
BEQ +
|
||||
LDA #$FF
|
||||
+ EOR #$FF
|
||||
STA ESTKL,X
|
||||
STA ESTKH,X
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* DUPLICATE TOS
|
||||
;*
|
||||
DUP DEX
|
||||
@@ -745,10 +740,20 @@ ORI INY ;+INC_IP
|
||||
STA ESTKL,X
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* LOGICAL NOT
|
||||
;*
|
||||
LNOT LDA ESTKL,X
|
||||
ORA ESTKH,X
|
||||
BEQ +
|
||||
LDA #$00
|
||||
STA ESTKL,X
|
||||
STA ESTKH,X
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* CONSTANT -1, NYBBLE, BYTE, $FF BYTE, WORD (BELOW)
|
||||
;*
|
||||
MINUS1 DEX
|
||||
LDA #$FF
|
||||
+ LDA #$FF
|
||||
STA ESTKL,X
|
||||
STA ESTKH,X
|
||||
JMP NEXTOP
|
||||
@@ -1010,6 +1015,60 @@ LLWX INY ;+INC_IP
|
||||
LDY IPY
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* ADD VALUE FROM LOCAL FRAME OFFSET
|
||||
;*
|
||||
ADDLB LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LLB
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP ADD
|
||||
ADDLBX LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LLBX
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP ADD
|
||||
ADDLW LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LLW
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP ADD
|
||||
ADDLWX LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LLWX
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP ADD
|
||||
;*
|
||||
;* INDEX VALUE FROM LOCAL FRAME OFFSET
|
||||
;*
|
||||
IDXLB LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LLB
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP IDXW
|
||||
IDXLBX LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LLBX
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP IDXW
|
||||
IDXLW LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LLW
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP IDXW
|
||||
IDXLWX LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LLWX
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP IDXW
|
||||
;*
|
||||
;* LOAD VALUE FROM ABSOLUTE ADDRESS
|
||||
;*
|
||||
LAB INY ;+INC_IP
|
||||
@@ -1073,6 +1132,60 @@ LAWX INY ;+INC_IP
|
||||
LDY IPY
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* ADD VALUE FROM ABSOLUTE ADDRESS
|
||||
;*
|
||||
ADDAB LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LAB
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP ADD
|
||||
ADDABX LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LABX
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP ADD
|
||||
ADDAW LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LAW
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP ADD
|
||||
ADDAWX LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LAWX
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP ADD
|
||||
;*
|
||||
;* INDEX VALUE FROM ABSOLUTE ADDRESS
|
||||
;*
|
||||
IDXAB LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LAB
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP IDXW
|
||||
IDXABX LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LABX
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP IDXW
|
||||
IDXAW LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LAW
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP IDXW
|
||||
IDXAWX LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LAWX
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP IDXW
|
||||
;*
|
||||
;* STORE VALUE TO ADDRESS
|
||||
;*
|
||||
SB LDA ESTKL,X
|
||||
|
||||
+63
-27
@@ -149,6 +149,7 @@ OPTBL !WORD CN,CN,CN,CN,CN,CN,CN,CN ; 00 02
|
||||
!WORD LNOT,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 80 82 84 86 88 8A 8C 8E
|
||||
!WORD NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 90 92 94 96 98 9A 9C 9E
|
||||
!WORD BRGT,BRLT,INCBRLE,ADDBRLE,DECBRGE,SUBBRGE,BRAND,BROR ; A0 A2 A4 A6 A8 AA AC AE
|
||||
!WORD ADDLB,ADDLW,ADDAB,ADDAW,IDXLB,IDXLW,IDXAB,IDXAW ; B0 B2 B4 B6 B8 BA BC BE
|
||||
;*
|
||||
;* SYSTEM INTERPRETER ENTRYPOINT
|
||||
;*
|
||||
@@ -451,17 +452,6 @@ DUP DEX
|
||||
STA ESTKH,X
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* LOGICAL NOT
|
||||
;*
|
||||
LNOT LDA ESTKL,X
|
||||
ORA ESTKH,X
|
||||
BEQ +
|
||||
LDA #$FF
|
||||
+ EOR #$FF
|
||||
STA ESTKL,X
|
||||
STA ESTKH,X
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* ADD IMMEDIATE TO TOS
|
||||
;*
|
||||
ADDI INY ;+INC_IP
|
||||
@@ -502,10 +492,20 @@ ORI INY ;+INC_IP
|
||||
STA ESTKL,X
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* LOGICAL NOT
|
||||
;*
|
||||
LNOT LDA ESTKL,X
|
||||
ORA ESTKH,X
|
||||
BEQ +
|
||||
LDA #$00
|
||||
STA ESTKL,X
|
||||
STA ESTKH,X
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* CONSTANT -1, NYBBLE, BYTE, $FF BYTE, WORD (BELOW)
|
||||
;*
|
||||
MINUS1 DEX
|
||||
LDA #$FF
|
||||
+ LDA #$FF
|
||||
STA ESTKL,X
|
||||
STA ESTKH,X
|
||||
JMP NEXTOP
|
||||
@@ -534,6 +534,7 @@ CB LDA #$00
|
||||
BCC +
|
||||
INC IPH
|
||||
+ LDY #$FF
|
||||
CW
|
||||
LA INY ;+INC_IP
|
||||
BMI -
|
||||
DEX
|
||||
@@ -543,14 +544,14 @@ LA INY ;+INC_IP
|
||||
LDA (IP),Y
|
||||
STA ESTKH,X
|
||||
JMP NEXTOP
|
||||
CW DEX
|
||||
INY ;+INC_IP
|
||||
LDA (IP),Y
|
||||
STA ESTKL,X
|
||||
INY
|
||||
LDA (IP),Y
|
||||
STA ESTKH,X
|
||||
JMP NEXTOP
|
||||
;CW DEX
|
||||
; INY ;+INC_IP
|
||||
; LDA (IP),Y
|
||||
; STA ESTKL,X
|
||||
; INY
|
||||
; LDA (IP),Y
|
||||
; STA ESTKH,X
|
||||
; JMP NEXTOP
|
||||
;*
|
||||
;* CONSTANT STRING
|
||||
;*
|
||||
@@ -665,7 +666,7 @@ LLA INY ;+INC_IP
|
||||
;*
|
||||
;* LOAD VALUE FROM LOCAL FRAME OFFSET
|
||||
;*
|
||||
LLB INY ;+INC_IP
|
||||
_LLB INY ;+INC_IP
|
||||
LDA (IP),Y
|
||||
STY IPY
|
||||
TAY
|
||||
@@ -675,8 +676,8 @@ LLB INY ;+INC_IP
|
||||
LDA #$00
|
||||
STA ESTKH,X
|
||||
LDY IPY
|
||||
JMP NEXTOP
|
||||
LLW INY ;+INC_IP
|
||||
RTS
|
||||
_LLW INY ;+INC_IP
|
||||
LDA (IP),Y
|
||||
STY IPY
|
||||
TAY
|
||||
@@ -687,11 +688,29 @@ LLW INY ;+INC_IP
|
||||
LDA (IFP),Y
|
||||
STA ESTKH,X
|
||||
LDY IPY
|
||||
RTS
|
||||
LLB JSR _LLB
|
||||
JMP NEXTOP
|
||||
LLW JSR _LLW
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* ADD VALUE FROM LOCAL FRAME OFFSET
|
||||
;*
|
||||
ADDLB JSR _LLB
|
||||
JMP ADD
|
||||
ADDLW JSR _LLW
|
||||
JMP ADD
|
||||
;*
|
||||
;* INDEX VALUE FROM LOCAL FRAME OFFSET
|
||||
;*
|
||||
IDXLB JSR _LLB
|
||||
JMP IDXW
|
||||
IDXLW JSR _LLW
|
||||
JMP IDXW
|
||||
;*
|
||||
;* LOAD VALUE FROM ABSOLUTE ADDRESS
|
||||
;*
|
||||
LAB INY ;+INC_IP
|
||||
_LAB INY ;+INC_IP
|
||||
LDA (IP),Y
|
||||
STA ESTKH-2,X
|
||||
INY ;+INC_IP
|
||||
@@ -702,8 +721,8 @@ LAB INY ;+INC_IP
|
||||
STA ESTKL,X
|
||||
LDA #$00
|
||||
STA ESTKH,X
|
||||
JMP NEXTOP
|
||||
LAW INY ;+INC_IP
|
||||
RTS
|
||||
_LAW INY ;+INC_IP
|
||||
LDA (IP),Y
|
||||
STA TMPL
|
||||
INY ;+INC_IP
|
||||
@@ -718,7 +737,25 @@ LAW INY ;+INC_IP
|
||||
LDA (TMP),Y
|
||||
STA ESTKH,X
|
||||
LDY IPY
|
||||
RTS
|
||||
LAB JSR _LAB
|
||||
JMP NEXTOP
|
||||
LAW JSR _LAW
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* ADD VALUE FROM ABSOLUTE ADDRESS
|
||||
;*
|
||||
ADDAB JSR _LAB
|
||||
JMP ADD
|
||||
ADDAW JSR _LAW
|
||||
JMP ADD
|
||||
;*
|
||||
;* INDEX VALUE FROM ABSOLUTE ADDRESS
|
||||
;*
|
||||
IDXAB JSR _LAB
|
||||
JMP IDXW
|
||||
IDXAW JSR _LAW
|
||||
JMP IDXW
|
||||
;*
|
||||
;* STORE VALUE TO ADDRESS
|
||||
;*
|
||||
@@ -875,7 +912,6 @@ ISTRU LDA #$FF
|
||||
STA ESTKL+1,X
|
||||
STA ESTKH+1,X
|
||||
JMP DROP
|
||||
;
|
||||
ISNE LDA ESTKL,X
|
||||
CMP ESTKL+1,X
|
||||
BNE ISTRU
|
||||
|
||||
+118
-10
@@ -242,6 +242,7 @@ OPTBL !WORD CN,CN,CN,CN,CN,CN,CN,CN ; 00 02
|
||||
!WORD LNOT,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 80 82 84 86 88 8A 8C 8E
|
||||
!WORD NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 90 92 94 96 98 9A 9C 9E
|
||||
!WORD BRGT,BRLT,INCBRLE,ADDBRLE,DECBRGE,SUBBRGE,BRAND,BROR ; A0 A2 A4 A6 A8 AA AC AE
|
||||
!WORD ADDLB,ADDLW,ADDAB,ADDAW,IDXLB,IDXLW,IDXAB,IDXAW ; B0 B2 B4 B6 B8 BA BC BE
|
||||
;*
|
||||
;* ENTER INTO BYTECODE INTERPRETER - IMMEDIATELY SWITCH TO NATIVE
|
||||
;*
|
||||
@@ -474,6 +475,7 @@ OPXTBL !WORD CN,CN,CN,CN,CN,CN,CN,CN ; 00 02
|
||||
!WORD LNOT,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 80 82 84 86 88 8A 8C 8E
|
||||
!WORD NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 90 92 94 96 98 9A 9C 9E
|
||||
!WORD BRGT,BRLT,INCBRLE,ADDBRLE,DECBRGE,SUBBRGE,BRAND,BROR ; A0 A2 A4 A6 A8 AA AC AE
|
||||
!WORD ADDLBX,ADDLWX,ADDABX,ADDAWX,IDXLBX,IDXLWX,IDXABX,IDXAWX ; B0 B2 B4 B6 B8 BA BC BE
|
||||
!AS
|
||||
DINTRP PHP
|
||||
PLA
|
||||
@@ -719,15 +721,6 @@ DUP LDA TOS,S
|
||||
PHA
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* LOGICAL NOT
|
||||
;*
|
||||
LNOT PLA
|
||||
BNE +
|
||||
PEA $FFFF
|
||||
JMP NEXTOP
|
||||
+ PEA $0000
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* ADD IMMEDIATE TO TOS
|
||||
;*
|
||||
ADDI INY ;+INC_IP
|
||||
@@ -767,6 +760,13 @@ ORI INY ;+INC_IP
|
||||
STA TOS,S
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* LOGICAL NOT
|
||||
;*
|
||||
LNOT PLA
|
||||
BEQ MINUS1
|
||||
PEA $0000
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* CONSTANT -1, NYBBLE, BYTE, $FF BYTE, WORD (BELOW)
|
||||
;*
|
||||
MINUS1 PEA $FFFF
|
||||
@@ -961,6 +961,60 @@ LLWX INY ;+INC_IP
|
||||
TXY
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* ADD VALUE FROM LOCAL FRAME OFFSET
|
||||
;*
|
||||
ADDLB LDX #$60 ; RTS
|
||||
STX NEXTOP
|
||||
JSR LLB
|
||||
LDX #$C8 ; INY
|
||||
STX NEXTOP
|
||||
JMP ADD
|
||||
ADDLBX LDX #$60 ; RTS
|
||||
STX NEXTOP
|
||||
JSR LLBX
|
||||
LDX #$C8 ; INY
|
||||
STX NEXTOP
|
||||
JMP ADD
|
||||
ADDLW LDX #$60 ; RTS
|
||||
STX NEXTOP
|
||||
JSR LLW
|
||||
LDX #$C8 ; INY
|
||||
STX NEXTOP
|
||||
JMP ADD
|
||||
ADDLWX LDX #$60 ; RTS
|
||||
STX NEXTOP
|
||||
JSR LLWX
|
||||
LDX #$C8 ; INY
|
||||
STX NEXTOP
|
||||
JMP ADD
|
||||
;*
|
||||
;* INDEX VALUE FROM LOCAL FRAME OFFSET
|
||||
;*
|
||||
IDXLB LDX #$60 ; RTS
|
||||
STX NEXTOP
|
||||
JSR LLB
|
||||
LDX #$C8 ; INY
|
||||
STX NEXTOP
|
||||
JMP IDXW
|
||||
IDXLBX LDX #$60 ; RTS
|
||||
STX NEXTOP
|
||||
JSR LLBX
|
||||
LDX #$C8 ; INY
|
||||
STX NEXTOP
|
||||
JMP IDXW
|
||||
IDXLW LDX #$60 ; RTS
|
||||
STX NEXTOP
|
||||
JSR LLW
|
||||
LDX #$C8 ; INY
|
||||
STX NEXTOP
|
||||
JMP IDXW
|
||||
IDXLWX LDX #$60 ; RTS
|
||||
STX NEXTOP
|
||||
JSR LLWX
|
||||
LDX #$C8 ; INY
|
||||
STX NEXTOP
|
||||
JMP IDXW
|
||||
;*
|
||||
;* LOAD VALUE FROM ABSOLUTE ADDRESS
|
||||
;*
|
||||
LAB INY ;+INC_IP
|
||||
@@ -1001,7 +1055,60 @@ LAWX INY ;+INC_IP
|
||||
PHA
|
||||
INY ;+INC_IP
|
||||
JMP NEXTOP
|
||||
;
|
||||
;*
|
||||
;* ADD VALUE FROM ABSOLUTE ADDRESS
|
||||
;*
|
||||
ADDAB LDX #$60 ; RTS
|
||||
STX NEXTOP
|
||||
JSR LAB
|
||||
LDX #$C8 ; INY
|
||||
STX NEXTOP
|
||||
JMP ADD
|
||||
ADDABX LDX #$60 ; RTS
|
||||
STX NEXTOP
|
||||
JSR LABX
|
||||
LDX #$C8 ; INY
|
||||
STX NEXTOP
|
||||
JMP ADD
|
||||
ADDAW LDX #$60 ; RTS
|
||||
STX NEXTOP
|
||||
JSR LAW
|
||||
LDX #$C8 ; INY
|
||||
STX NEXTOP
|
||||
JMP ADD
|
||||
ADDAWX LDX #$60 ; RTS
|
||||
STX NEXTOP
|
||||
JSR LAWX
|
||||
LDX #$C8 ; INY
|
||||
STX NEXTOP
|
||||
JMP ADD
|
||||
;*
|
||||
;* INDEX VALUE FROM ABSOLUTE ADDRESS
|
||||
;*
|
||||
IDXAB LDX #$60 ; RTS
|
||||
STX NEXTOP
|
||||
JSR LAB
|
||||
LDX #$C8 ; INY
|
||||
STX NEXTOP
|
||||
JMP IDXW
|
||||
IDXABX LDX #$60 ; RTS
|
||||
STX NEXTOP
|
||||
JSR LABX
|
||||
LDX #$C8 ; INY
|
||||
STX NEXTOP
|
||||
JMP IDXW
|
||||
IDXAW LDX #$60 ; RTS
|
||||
STX NEXTOP
|
||||
JSR LAW
|
||||
LDX #$C8 ; INY
|
||||
STX NEXTOP
|
||||
JMP IDXW
|
||||
IDXAWX LDX #$60 ; RTS
|
||||
STX NEXTOP
|
||||
JSR LAWX
|
||||
LDX #$C8 ; INY
|
||||
STX NEXTOP
|
||||
JMP IDXW
|
||||
;*
|
||||
;* STORE VALUE TO ADDRESS
|
||||
;*
|
||||
@@ -1683,6 +1790,7 @@ DBGTBL !WORD STEP,STEP,STEP,STEP,STEP,STEP,STEP,STEP ; 00 02 04 06 08
|
||||
!WORD STEP,STEP,STEP,STEP,STEP,STEP,STEP,STEP ; 80 82 84 86 88 8A 8C 8E
|
||||
!WORD STEP,STEP,STEP,STEP,STEP,STEP,STEP,STEP ; 90 92 94 96 98 9A 9C 9E
|
||||
!WORD STEP,STEP,STEP,STEP,STEP,STEP,STEP,STEP ; A0 A2 A4 A6 A8 AA AC AE
|
||||
!WORD STEP,STEP,STEP,STEP,STEP,STEP,STEP,STEP ; B0 B2 B4 B6 B8 BA BC BE
|
||||
;*
|
||||
;* DEBUG PRINT ROUTINES
|
||||
;*
|
||||
|
||||
@@ -122,7 +122,7 @@ word heap = $2000
|
||||
byte modid = 0
|
||||
byte modseg[15]
|
||||
word symtbl, lastsym
|
||||
byte perr, terr, lerr
|
||||
byte perr, terr
|
||||
//
|
||||
// Utility functions
|
||||
//
|
||||
@@ -1078,7 +1078,7 @@ def loadmod(mod)#1
|
||||
word addr, defaddr, modaddr, modfix, modofst, modend
|
||||
word deftbl, deflast, codeseg
|
||||
word moddep, rld, esd, sym
|
||||
byte defext, str[16], filename[33]
|
||||
byte lerr, defext, str[16], filename[33]
|
||||
byte header[128]
|
||||
lerr = 0
|
||||
//
|
||||
@@ -1510,7 +1510,6 @@ while 1
|
||||
terr = perr
|
||||
prstr("ERR:$")
|
||||
prbyte(terr)
|
||||
perr = 0
|
||||
else
|
||||
prstr("OK")
|
||||
fin
|
||||
|
||||
+84
-12
@@ -120,6 +120,7 @@ OPTBL !WORD CN,CN,CN,CN,CN,CN,CN,CN ; 00 02
|
||||
!WORD LNOT,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 80 82 84 86 88 8A 8C 8E
|
||||
!WORD NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 90 92 94 96 98 9A 9C 9E
|
||||
!WORD BRGT,BRLT,INCBRLE,ADDBRLE,DECBRGE,SUBBRGE,BRAND,BROR ; A0 A2 A4 A6 A8 AA AC AE
|
||||
!WORD ADDLB,ADDLW,ADDAB,ADDAW,IDXLB,IDXLW,IDXAB,IDXAW ; B0 B2 B4 B6 B8 BA BC BE
|
||||
;*
|
||||
;* DIV TOS-1 BY TOS
|
||||
;*
|
||||
@@ -336,17 +337,6 @@ DUP DEX
|
||||
STA ESTKH,X
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* LOGICAL NOT
|
||||
;*
|
||||
LNOT LDA ESTKL,X
|
||||
ORA ESTKH,X
|
||||
BEQ +
|
||||
LDA #$FF
|
||||
+ EOR #$FF
|
||||
STA ESTKL,X
|
||||
STA ESTKH,X
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* ADD IMMEDIATE TO TOS
|
||||
;*
|
||||
ADDI INY ;+INC_IP
|
||||
@@ -387,10 +377,20 @@ ORI INY ;+INC_IP
|
||||
STA ESTKL,X
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* LOGICAL NOT
|
||||
;*
|
||||
LNOT LDA ESTKL,X
|
||||
ORA ESTKH,X
|
||||
BEQ +
|
||||
LDA #$00
|
||||
STA ESTKL,X
|
||||
STA ESTKH,X
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* CONSTANT -1, NYBBLE, BYTE, $FF BYTE, WORD (BELOW)
|
||||
;*
|
||||
MINUS1 DEX
|
||||
LDA #$FF
|
||||
+ LDA #$FF
|
||||
STA ESTKL,X
|
||||
STA ESTKH,X
|
||||
JMP NEXTOP
|
||||
@@ -525,6 +525,48 @@ LLW INY ;+INC_IP
|
||||
LDY IPY
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* ADD VALUE FROM LOCAL FRAME OFFSET
|
||||
;*
|
||||
ADDLB LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LLB
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP ADD
|
||||
ADDLBX LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LLBX
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP ADD
|
||||
ADDLW LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LLW
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP ADD
|
||||
ADDLWX LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LLWX
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP ADD
|
||||
;*
|
||||
;* INDEX VALUE FROM LOCAL FRAME OFFSET
|
||||
;*
|
||||
IDXLB LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LLB
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP IDXW
|
||||
IDXLW LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LLW
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP IDXW
|
||||
;*
|
||||
;* LOAD VALUE FROM ABSOLUTE ADDRESS
|
||||
;*
|
||||
LAB INY ;+INC_IP
|
||||
@@ -556,6 +598,36 @@ LAW INY ;+INC_IP
|
||||
LDY IPY
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* ADD VALUE FROM ABSOLUTE ADDRESS
|
||||
;*
|
||||
ADDAB LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LAB
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP ADD
|
||||
ADDAW LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LAW
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP ADD
|
||||
;*
|
||||
;* INDEX VALUE FROM ABSOLUTE ADDRESS
|
||||
;*
|
||||
IDXAB LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LAB
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP IDXW
|
||||
IDXAW LDA #$60 ; RTS
|
||||
STA NEXTOP
|
||||
JSR LAW
|
||||
LDA #$C8 ; INY
|
||||
STA NEXTOP
|
||||
JMP IDXW
|
||||
;*
|
||||
;* STORE VALUE TO ADDRESS
|
||||
;*
|
||||
SB LDA ESTKL,X
|
||||
|
||||
Reference in New Issue
Block a user