mirror of
https://github.com/badvision/lawless-legends.git
synced 2025-08-15 06:27:24 +00:00
Fix many VM issues, especially 6502 version. Now boots!
This commit is contained in:
@@ -41,8 +41,12 @@ SRCH = SRC+1
|
|||||||
DST = SRC+2
|
DST = SRC+2
|
||||||
DSTL = DST
|
DSTL = DST
|
||||||
DSTH = DST+1
|
DSTH = DST+1
|
||||||
ESP = DST+2
|
;*
|
||||||
|
;* ASM VARIABLES
|
||||||
|
;*
|
||||||
|
ESP !BYTE 0
|
||||||
end
|
end
|
||||||
|
;
|
||||||
; CALL PRODOS
|
; CALL PRODOS
|
||||||
; SYSCALL(CMD, PARAMS)
|
; SYSCALL(CMD, PARAMS)
|
||||||
;
|
;
|
||||||
@@ -68,12 +72,26 @@ end
|
|||||||
; CALL LOADED SYSTEM PROGRAM
|
; CALL LOADED SYSTEM PROGRAM
|
||||||
;
|
;
|
||||||
asm exec
|
asm exec
|
||||||
LDX #$FE
|
LDA #$00
|
||||||
|
STA IFPL
|
||||||
|
LDA #$BF
|
||||||
|
STA IFPH
|
||||||
|
LDX #$FF
|
||||||
TXS
|
TXS
|
||||||
LDX ESTKSZ/2
|
LDX #ESTKSZ/2
|
||||||
|
BIT ROMEN
|
||||||
JMP $2000
|
JMP $2000
|
||||||
end
|
end
|
||||||
;
|
;
|
||||||
|
; EXIT
|
||||||
|
;
|
||||||
|
asm reboot
|
||||||
|
BIT ROMEN
|
||||||
|
LDA #$00
|
||||||
|
STA $3F4 ; INVALIDATE POWER-UP BYTE
|
||||||
|
JMP ($FFFC) ; RESET
|
||||||
|
end
|
||||||
|
;
|
||||||
; SET MEMORY TO 0
|
; SET MEMORY TO 0
|
||||||
; MEMCLR(ADDR, SIZE)
|
; MEMCLR(ADDR, SIZE)
|
||||||
;
|
;
|
||||||
@@ -181,6 +199,7 @@ asm cout
|
|||||||
ORA #$80
|
ORA #$80
|
||||||
BIT ROMEN
|
BIT ROMEN
|
||||||
JSR $FDED
|
JSR $FDED
|
||||||
|
BIT LCRDEN+LCBNK2
|
||||||
RTS
|
RTS
|
||||||
end
|
end
|
||||||
;
|
;
|
||||||
@@ -196,6 +215,7 @@ asm cin
|
|||||||
STA ESTKL,X
|
STA ESTKL,X
|
||||||
LDY #$00
|
LDY #$00
|
||||||
STY ESTKH,X
|
STY ESTKH,X
|
||||||
|
BIT LCRDEN+LCBNK2
|
||||||
RTS
|
RTS
|
||||||
end
|
end
|
||||||
;
|
;
|
||||||
@@ -219,7 +239,8 @@ asm prstr
|
|||||||
TYA
|
TYA
|
||||||
CMP ESTKL,X
|
CMP ESTKL,X
|
||||||
BNE -
|
BNE -
|
||||||
+ RTS
|
+ BIT LCRDEN+LCBNK2
|
||||||
|
RTS
|
||||||
end
|
end
|
||||||
;
|
;
|
||||||
; PRINT BYTE
|
; PRINT BYTE
|
||||||
@@ -230,6 +251,7 @@ asm prbyte
|
|||||||
BIT ROMEN
|
BIT ROMEN
|
||||||
JSR $FDDA
|
JSR $FDDA
|
||||||
LDX ESP
|
LDX ESP
|
||||||
|
BIT LCRDEN+LCBNK2
|
||||||
RTS
|
RTS
|
||||||
end
|
end
|
||||||
;
|
;
|
||||||
@@ -253,6 +275,7 @@ asm rdstr
|
|||||||
STA ESTKL,X
|
STA ESTKL,X
|
||||||
LDA #$01
|
LDA #$01
|
||||||
STA ESTKH,X
|
STA ESTKH,X
|
||||||
|
BIT LCRDEN+LCBNK2
|
||||||
RTS
|
RTS
|
||||||
end
|
end
|
||||||
asm toupper
|
asm toupper
|
||||||
@@ -266,15 +289,6 @@ asm toupper
|
|||||||
STA ESTKL,X
|
STA ESTKL,X
|
||||||
+ RTS
|
+ RTS
|
||||||
end
|
end
|
||||||
;
|
|
||||||
; EXIT
|
|
||||||
;
|
|
||||||
asm reboot
|
|
||||||
BIT ROMEN
|
|
||||||
LDA #$00
|
|
||||||
STA $3F4 ; INVALIDATE POWER-UP BYTE
|
|
||||||
JMP ($FFFC) ; RESET
|
|
||||||
end
|
|
||||||
def crout
|
def crout
|
||||||
cout($0D)
|
cout($0D)
|
||||||
end
|
end
|
||||||
@@ -303,9 +317,9 @@ def online
|
|||||||
|
|
||||||
params.0 = 2
|
params.0 = 2
|
||||||
params.1 = 0
|
params.1 = 0
|
||||||
params:2 = $2000
|
params:2 = databuff
|
||||||
perr = prodos($C5, @params)
|
perr = prodos($C5, @params)
|
||||||
return $2000
|
return databuff
|
||||||
end
|
end
|
||||||
def open(path, buff)
|
def open(path, buff)
|
||||||
byte params[6]
|
byte params[6]
|
||||||
@@ -492,7 +506,7 @@ end
|
|||||||
|
|
||||||
resetmemfiles()
|
resetmemfiles()
|
||||||
prstr(@version)
|
prstr(@version)
|
||||||
crout();
|
crout()
|
||||||
while 1
|
while 1
|
||||||
prstr(getpfx(@prefix))
|
prstr(getpfx(@prefix))
|
||||||
cmdptr = rdstr($BA)
|
cmdptr = rdstr($BA)
|
||||||
|
@@ -39,11 +39,20 @@ asm exec
|
|||||||
STA IFPH
|
STA IFPH
|
||||||
LDX #$FE
|
LDX #$FE
|
||||||
TXS
|
TXS
|
||||||
LDX ESTKSZ/2
|
LDX #ESTKSZ/2
|
||||||
BIT ROMEN
|
BIT ROMEN
|
||||||
JMP $2000
|
JMP $2000
|
||||||
end
|
end
|
||||||
;
|
;
|
||||||
|
; EXIT
|
||||||
|
;
|
||||||
|
asm reboot
|
||||||
|
BIT ROMEN
|
||||||
|
LDA #$00
|
||||||
|
STA $3F4 ; INVALIDATE POWER-UP BYTE
|
||||||
|
JMP ($FFFC) ; RESET
|
||||||
|
end
|
||||||
|
;
|
||||||
; SET MEMORY TO 0
|
; SET MEMORY TO 0
|
||||||
; MEMCLR(ADDR, SIZE)
|
; MEMCLR(ADDR, SIZE)
|
||||||
;
|
;
|
||||||
@@ -112,6 +121,7 @@ asm cout
|
|||||||
ORA #$80
|
ORA #$80
|
||||||
BIT ROMEN
|
BIT ROMEN
|
||||||
JSR $FDED
|
JSR $FDED
|
||||||
|
BIT LCRDEN+LCBNK2
|
||||||
RTS
|
RTS
|
||||||
end
|
end
|
||||||
;
|
;
|
||||||
@@ -127,6 +137,7 @@ asm cin
|
|||||||
STA ESTKL,X
|
STA ESTKL,X
|
||||||
LDY #$00
|
LDY #$00
|
||||||
STY ESTKH,X
|
STY ESTKH,X
|
||||||
|
BIT LCRDEN+LCBNK2
|
||||||
RTS
|
RTS
|
||||||
end
|
end
|
||||||
;
|
;
|
||||||
@@ -150,16 +161,8 @@ asm prstr
|
|||||||
TYA
|
TYA
|
||||||
CMP ESTKL,X
|
CMP ESTKL,X
|
||||||
BNE -
|
BNE -
|
||||||
+ RTS
|
+ BIT LCRDEN+LCBNK2
|
||||||
end
|
RTS
|
||||||
;
|
|
||||||
; EXIT
|
|
||||||
;
|
|
||||||
asm reboot
|
|
||||||
BIT ROMEN
|
|
||||||
LDA #$00
|
|
||||||
STA $3F4 ; INVALIDATE POWER-UP BYTE
|
|
||||||
JMP ($FFFC) ; RESET
|
|
||||||
end
|
end
|
||||||
def crout
|
def crout
|
||||||
cout($0D)
|
cout($0D)
|
||||||
|
@@ -311,9 +311,7 @@ void emit_header(void)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf("\tJSR\t$3D0\n");
|
printf("\tJMP\t_INIT\t\t\t; MODULE INITIALIZATION ROUTINE\n");
|
||||||
printf("\t%s\t$00\t\t\t; MODULE INITIALIZATION ROUTINE\n", DB);
|
|
||||||
printf("\t%s\t_INIT\t\t\t;\n", DW);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void emit_rld(void)
|
void emit_rld(void)
|
||||||
@@ -493,13 +491,9 @@ void emit_def(char *name, int is_bytecode)
|
|||||||
{
|
{
|
||||||
if (!(outflags & MODULE))
|
if (!(outflags & MODULE))
|
||||||
{
|
{
|
||||||
printf("%s%c\n", name, LBL);
|
//printf("%s%c\n", name, LBL);
|
||||||
if (is_bytecode)
|
if (is_bytecode)
|
||||||
{
|
|
||||||
printf("\tJSR $03D0\n");
|
printf("\tJSR $03D0\n");
|
||||||
printf("\t%s\t$00\n", DB);
|
|
||||||
printf("\t%s\t*+2\n", DW);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void emit_codetag(int tag)
|
void emit_codetag(int tag)
|
||||||
|
@@ -1301,6 +1301,7 @@ int parse_module(void)
|
|||||||
if (scantoken != DONE_TOKEN && scantoken != EOF_TOKEN)
|
if (scantoken != DONE_TOKEN && scantoken != EOF_TOKEN)
|
||||||
{
|
{
|
||||||
emit_start();
|
emit_start();
|
||||||
|
emit_def("_INIT", 1);
|
||||||
prevstmnt = 0;
|
prevstmnt = 0;
|
||||||
while (parse_stmnt()) next_line();
|
while (parse_stmnt()) next_line();
|
||||||
if (scantoken != DONE_TOKEN)
|
if (scantoken != DONE_TOKEN)
|
||||||
|
@@ -18,7 +18,7 @@ int show_state = 0;
|
|||||||
#define BYTE_PTR(bp) ((byte)((bp)[0]))
|
#define BYTE_PTR(bp) ((byte)((bp)[0]))
|
||||||
#define WORD_PTR(bp) ((word)((bp)[0] | ((bp)[1] << 8)))
|
#define WORD_PTR(bp) ((word)((bp)[0] | ((bp)[1] << 8)))
|
||||||
#define UWORD_PTR(bp) ((uword)((bp)[0] | ((bp)[1] << 8)))
|
#define UWORD_PTR(bp) ((uword)((bp)[0] | ((bp)[1] << 8)))
|
||||||
#define TO_UWORD(w) ((w)&0xFFFF)
|
#define TO_UWORD(w) ((uword)((w)))
|
||||||
#define MOD_ADDR 0x1000
|
#define MOD_ADDR 0x1000
|
||||||
#define DEF_CALL 0x0800
|
#define DEF_CALL 0x0800
|
||||||
#define DEF_CALLSZ 0x0800
|
#define DEF_CALLSZ 0x0800
|
||||||
@@ -30,8 +30,8 @@ uword sp = 0x01FE, fp = 0xBEFF, heap = 0x6000, xheap = 0x0800, deftbl = DEF_CALL
|
|||||||
|
|
||||||
#define EVAL_STACKSZ 16
|
#define EVAL_STACKSZ 16
|
||||||
#define PUSH(v) (*(--esp))=(v)
|
#define PUSH(v) (*(--esp))=(v)
|
||||||
#define POP (*(esp++))
|
#define POP ((word)(*(esp++)))
|
||||||
#define UPOP ((uword)(*(esp++)&0xFFFF))
|
#define UPOP ((uword)(*(esp++)))
|
||||||
#define TOS (esp[0])
|
#define TOS (esp[0])
|
||||||
word eval_stack[EVAL_STACKSZ];
|
word eval_stack[EVAL_STACKSZ];
|
||||||
word *esp = eval_stack + EVAL_STACKSZ;
|
word *esp = eval_stack + EVAL_STACKSZ;
|
||||||
@@ -649,7 +649,7 @@ void interp(code *ip)
|
|||||||
* 0x30-0x3F
|
* 0x30-0x3F
|
||||||
*/
|
*/
|
||||||
case 0x30: // DROP : TOS =
|
case 0x30: // DROP : TOS =
|
||||||
esp++;;
|
POP;
|
||||||
break;
|
break;
|
||||||
case 0x32: // DUP : TOS = TOS
|
case 0x32: // DUP : TOS = TOS
|
||||||
val = TOS;
|
val = TOS;
|
||||||
@@ -661,7 +661,8 @@ void interp(code *ip)
|
|||||||
mem_data[sp--] = val;
|
mem_data[sp--] = val;
|
||||||
break;
|
break;
|
||||||
case 0x36: // PULL : TOS = TOSP
|
case 0x36: // PULL : TOS = TOSP
|
||||||
PUSH(mem_data[++sp] | (mem_data[++sp] << 8));
|
PUSH(mem_data[sp] | (mem_data[sp + 1] << 8));
|
||||||
|
sp += 2;
|
||||||
break;
|
break;
|
||||||
case 0x38: // BRGT : TOS-1 > TOS ? IP += (IP)
|
case 0x38: // BRGT : TOS-1 > TOS ? IP += (IP)
|
||||||
val = POP;
|
val = POP;
|
||||||
|
@@ -110,6 +110,17 @@ ESP = DST+2
|
|||||||
CMP #$E0
|
CMP #$E0
|
||||||
BNE -
|
BNE -
|
||||||
;*
|
;*
|
||||||
|
;* MOVE FIRST PAGE OF 'BYE' INTO PLACE
|
||||||
|
;*
|
||||||
|
LDY #$00
|
||||||
|
STY SRCL
|
||||||
|
LDA #$D1
|
||||||
|
STA SRCH
|
||||||
|
- LDA (SRC),Y
|
||||||
|
STA $1000,Y
|
||||||
|
INY
|
||||||
|
BNE -
|
||||||
|
;*
|
||||||
;* LOOK FOR STARTUP FILE
|
;* LOOK FOR STARTUP FILE
|
||||||
;*
|
;*
|
||||||
JSR PRODOS ; OPEN AUTORUN
|
JSR PRODOS ; OPEN AUTORUN
|
||||||
@@ -133,18 +144,11 @@ ESP = DST+2
|
|||||||
JMP NOAUTO
|
JMP NOAUTO
|
||||||
+ LDX READPARMS+6
|
+ LDX READPARMS+6
|
||||||
STX $0280
|
STX $0280
|
||||||
NOAUTO JSR PRODOS
|
JSR PRODOS
|
||||||
!BYTE $CC
|
!BYTE $CC
|
||||||
!WORD CLOSEPARMS
|
!WORD CLOSEPARMS
|
||||||
LDY #$00
|
JMP CMDEXEC ; CALL CM
|
||||||
STY SRCL
|
NOAUTO JMP BYE
|
||||||
LDA #$D1
|
|
||||||
STA SRCH
|
|
||||||
- LDA (SRC),Y ; LOAD FIRST PAGE OF CMD INTO PLACE
|
|
||||||
STA $1000,Y
|
|
||||||
INY
|
|
||||||
BNE -
|
|
||||||
JMP CMDEXEC ; CALL CMD
|
|
||||||
AUTORUN !BYTE 7
|
AUTORUN !BYTE 7
|
||||||
!TEXT "AUTORUN"
|
!TEXT "AUTORUN"
|
||||||
OPENPARMS !BYTE 3
|
OPENPARMS !BYTE 3
|
||||||
@@ -167,12 +171,10 @@ PAGE3 = *
|
|||||||
;*
|
;*
|
||||||
;* PAGE 3 VECTORS INTO INTERPRETER
|
;* PAGE 3 VECTORS INTO INTERPRETER
|
||||||
;*
|
;*
|
||||||
BIT LCRDEN+LCBNK2 ; $03D0 - INTERP ENTRY
|
BIT LCRDEN+LCBNK2 ; $03D0 - DIRECT INTERP ENTRY
|
||||||
JMP INTERP
|
JMP INTERP
|
||||||
CALL3 BIT ROMEN
|
BIT LCRDEN+LCBNK2 ; $03D6 - INDIRECT INTERP ENTRY
|
||||||
CALLADR JSR $0000
|
JMP INTERPX
|
||||||
BIT LCRDEN+LCBNK2
|
|
||||||
RTS
|
|
||||||
}
|
}
|
||||||
VMCORE = *
|
VMCORE = *
|
||||||
!PSEUDOPC $D000 {
|
!PSEUDOPC $D000 {
|
||||||
@@ -182,7 +184,7 @@ VMCORE = *
|
|||||||
OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E
|
OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E
|
||||||
!WORD NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 10 12 14 16 18 1A 1C 1E
|
!WORD NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 10 12 14 16 18 1A 1C 1E
|
||||||
!WORD LNOT,LOR,LAND,LA,LLA,CB,CW,SWAP ; 20 22 24 26 28 2A 2C 2E
|
!WORD LNOT,LOR,LAND,LA,LLA,CB,CW,SWAP ; 20 22 24 26 28 2A 2C 2E
|
||||||
!WORD DROP,DUP,PUSH,PULL,BRLT,BRGT,BREQ,BRNE ; 30 32 34 36 38 3A 3C 3E
|
!WORD DROP,DUP,PUSH,PULL,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 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,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 LB,LW,LLB,LLW,LAB,LAW,DLB,DLW ; 60 62 64 66 68 6A 6C 6E
|
||||||
@@ -193,7 +195,7 @@ OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E
|
|||||||
OPXTBL !WORD ZEROX,ADDX,SUBX,MULX,DIVX,MODX,INCRX,DECRX ; 00 02 04 06 08 0A 0C 0E
|
OPXTBL !WORD ZEROX,ADDX,SUBX,MULX,DIVX,MODX,INCRX,DECRX ; 00 02 04 06 08 0A 0C 0E
|
||||||
!WORD NEGX,COMPX,BANDX,IORX,XORX,SHLX,SHRX,IDXWX ; 10 12 14 16 18 1A 1C 1E
|
!WORD NEGX,COMPX,BANDX,IORX,XORX,SHLX,SHRX,IDXWX ; 10 12 14 16 18 1A 1C 1E
|
||||||
!WORD LNOTX,LORX,LANDX,LAX,LLAX,CBX,CWX,SWAPX ; 20 22 24 26 28 2A 2C 2E
|
!WORD LNOTX,LORX,LANDX,LAX,LLAX,CBX,CWX,SWAPX ; 20 22 24 26 28 2A 2C 2E
|
||||||
!WORD DROPX,DUPX,PUSHX,PULLX,BRLTX,BRGTX,BREQX,BRNEX ; 30 32 34 36 38 3A 3C 3E
|
!WORD DROPX,DUPX,PUSHX,PULLX,BRGTX,BRLTX,BREQX,BRNEX ; 30 32 34 36 38 3A 3C 3E
|
||||||
!WORD ISEQX,ISNEX,ISGTX,ISLTX,ISGEX,ISLEX,BRFLSX,BRTRUX; 40 42 44 46 48 4A 4C 4E
|
!WORD ISEQX,ISNEX,ISGTX,ISLTX,ISGEX,ISLEX,BRFLSX,BRTRUX; 40 42 44 46 48 4A 4C 4E
|
||||||
!WORD BRNCHX,IBRNCHX,CALLX,ICALX,ENTERX,LEAVEX,RETX,NEXTOPX; 50 52 54 56 58 5A 5C 5E
|
!WORD BRNCHX,IBRNCHX,CALLX,ICALX,ENTERX,LEAVEX,RETX,NEXTOPX; 50 52 54 56 58 5A 5C 5E
|
||||||
!WORD LBX,LWX,LLBX,LLWX,LABX,LAWX,DLBX,DLWX ; 60 62 64 66 68 6A 6C 6E
|
!WORD LBX,LWX,LLBX,LLWX,LABX,LAWX,DLBX,DLWX ; 60 62 64 66 68 6A 6C 6E
|
||||||
@@ -205,14 +207,12 @@ OPXTBL !WORD ZEROX,ADDX,SUBX,MULX,DIVX,MODX,INCRX,DECRX ; 00 02 04 06 08 0
|
|||||||
;*
|
;*
|
||||||
;* CLEAR COMMAND LINE LENGTH BYTE IF CALLED FROM 'BYE'
|
;* CLEAR COMMAND LINE LENGTH BYTE IF CALLED FROM 'BYE'
|
||||||
;*
|
;*
|
||||||
LDY DEFCMD
|
BYE LDY DEFCMD
|
||||||
STY $0280 ; SET DEFAULT COMMAND WHEN CALLED FROM 'BYE'
|
STY $0280 ; SET DEFAULT COMMAND WHEN CALLED FROM 'BYE'
|
||||||
- LDA DEFCMD,Y
|
- LDA DEFCMD,Y
|
||||||
STA $0280,Y
|
STA $0280,Y
|
||||||
DEY
|
DEY
|
||||||
BNE -
|
BNE -
|
||||||
LDX #$FE ; LEAVE ROOM FOR COMMAND LINE LENGTH BYTE
|
|
||||||
TXS
|
|
||||||
;*
|
;*
|
||||||
;* MOVE REST OF CMD FROM LANGUAGE CARD
|
;* MOVE REST OF CMD FROM LANGUAGE CARD
|
||||||
;*
|
;*
|
||||||
@@ -256,13 +256,25 @@ START LDA #$00
|
|||||||
STA IFPL
|
STA IFPL
|
||||||
LDA #$BF
|
LDA #$BF
|
||||||
STA IFPH
|
STA IFPH
|
||||||
LDX ESTKSZ/2
|
LDX #$FF
|
||||||
|
TXS
|
||||||
|
LDX #ESTKSZ/2
|
||||||
!SOURCE "cmdexec.a"
|
!SOURCE "cmdexec.a"
|
||||||
}
|
}
|
||||||
;*
|
;*
|
||||||
;* ENTER INTO BYTECODE INTERPRETER
|
;* ENTER INTO BYTECODE INTERPRETER
|
||||||
;*
|
;*
|
||||||
INTERP PLA
|
INTERP STA LCRWEN+LCBNK2 ; WRITE ENABLE LANGUAGE CARD
|
||||||
|
STA LCRWEN+LCBNK2
|
||||||
|
PLA
|
||||||
|
STA IPL
|
||||||
|
PLA
|
||||||
|
STA IPH
|
||||||
|
LDY #$01
|
||||||
|
BNE FETCHOP
|
||||||
|
INTERPX STA LCRWEN+LCBNK2 ; WRITE ENABLE LANGUAGE CARD
|
||||||
|
STA LCRWEN+LCBNK2
|
||||||
|
PLA
|
||||||
STA TMPL
|
STA TMPL
|
||||||
PLA
|
PLA
|
||||||
STA TMPH
|
STA TMPH
|
||||||
@@ -287,7 +299,7 @@ DROP INX
|
|||||||
NEXTOP INY
|
NEXTOP INY
|
||||||
BEQ NEXTOPH
|
BEQ NEXTOPH
|
||||||
FETCHOP LDA (IP),Y
|
FETCHOP LDA (IP),Y
|
||||||
STA *+5
|
STA *+4
|
||||||
JMP (OPTBL)
|
JMP (OPTBL)
|
||||||
;*
|
;*
|
||||||
;* INTERP BYTECODE IN AUX MEM
|
;* INTERP BYTECODE IN AUX MEM
|
||||||
@@ -302,9 +314,13 @@ FETCHOPX SEI
|
|||||||
STA ALTRDON
|
STA ALTRDON
|
||||||
LDA (IP),Y
|
LDA (IP),Y
|
||||||
ORA #$80 ; SELECT OPX OPCODES
|
ORA #$80 ; SELECT OPX OPCODES
|
||||||
STA *+5
|
STA *+4
|
||||||
JMP (OPXTBL)
|
JMP (OPXTBL)
|
||||||
;*
|
;*
|
||||||
|
;* INDIRECT JUMP TO (TMP)
|
||||||
|
;*
|
||||||
|
JMPTMP JMP (TMP)
|
||||||
|
;*
|
||||||
;* ADD TOS TO TOS-1
|
;* ADD TOS TO TOS-1
|
||||||
;*
|
;*
|
||||||
ADD LDA ESTKL,X
|
ADD LDA ESTKL,X
|
||||||
@@ -1592,8 +1608,7 @@ BRFLS INX
|
|||||||
LDA ESTKH-1,X
|
LDA ESTKH-1,X
|
||||||
ORA ESTKL-1,X
|
ORA ESTKL-1,X
|
||||||
BNE NOBRNCH
|
BNE NOBRNCH
|
||||||
BRNCH STY IPY
|
BRNCH LDA IPH
|
||||||
LDA IPH
|
|
||||||
STA TMPH
|
STA TMPH
|
||||||
LDA IPL
|
LDA IPL
|
||||||
+INC_IP
|
+INC_IP
|
||||||
@@ -1606,8 +1621,9 @@ BRNCH STY IPY
|
|||||||
STA IPH
|
STA IPH
|
||||||
LDA TMPL
|
LDA TMPL
|
||||||
STA IPL
|
STA IPL
|
||||||
LDY IPY
|
DEY
|
||||||
JMP FETCHOP
|
DEY
|
||||||
|
JMP NEXTOP
|
||||||
BREQ INX
|
BREQ INX
|
||||||
LDA ESTKL-1,X
|
LDA ESTKL-1,X
|
||||||
CMP ESTKL,X
|
CMP ESTKL,X
|
||||||
@@ -1646,7 +1662,7 @@ IBRNCH LDA IPL
|
|||||||
ADC ESTKH,X
|
ADC ESTKH,X
|
||||||
STA IPH
|
STA IPH
|
||||||
INX
|
INX
|
||||||
JMP FETCHOP
|
JMP NEXTOP
|
||||||
;
|
;
|
||||||
BRTRUX INX
|
BRTRUX INX
|
||||||
LDA ESTKH-1,X
|
LDA ESTKH-1,X
|
||||||
@@ -1659,8 +1675,7 @@ BRFLSX INX
|
|||||||
LDA ESTKH-1,X
|
LDA ESTKH-1,X
|
||||||
ORA ESTKL-1,X
|
ORA ESTKL-1,X
|
||||||
BNE NOBRNCHX
|
BNE NOBRNCHX
|
||||||
BRNCHX STY IPY
|
BRNCHX LDA IPH
|
||||||
LDA IPH
|
|
||||||
STA TMPH
|
STA TMPH
|
||||||
LDA IPL
|
LDA IPL
|
||||||
+INC_IP
|
+INC_IP
|
||||||
@@ -1673,8 +1688,9 @@ BRNCHX STY IPY
|
|||||||
STA IPH
|
STA IPH
|
||||||
LDA TMPL
|
LDA TMPL
|
||||||
STA IPL
|
STA IPL
|
||||||
LDY IPY
|
DEY
|
||||||
JMP FETCHOPX
|
DEY
|
||||||
|
JMP NEXTOPX
|
||||||
BREQX INX
|
BREQX INX
|
||||||
LDA ESTKL-1,X
|
LDA ESTKL-1,X
|
||||||
CMP ESTKL,X
|
CMP ESTKL,X
|
||||||
@@ -1713,29 +1729,31 @@ IBRNCHX LDA IPL
|
|||||||
ADC ESTKH,X
|
ADC ESTKH,X
|
||||||
STA IPH
|
STA IPH
|
||||||
INX
|
INX
|
||||||
JMP FETCHOPX
|
JMP NEXTOPX
|
||||||
;*
|
;*
|
||||||
;* CALL INTO ABSOLUTE ADDRESS (NATIVE CODE)
|
;* CALL INTO ABSOLUTE ADDRESS (NATIVE CODE)
|
||||||
;*
|
;*
|
||||||
CALL +INC_IP
|
CALL +INC_IP
|
||||||
LDA (IP),Y
|
LDA (IP),Y
|
||||||
STA CALLADR+1
|
STA TMPL
|
||||||
+INC_IP
|
+INC_IP
|
||||||
LDA (IP),Y
|
LDA (IP),Y
|
||||||
STA CALLADR+2
|
STA TMPH
|
||||||
LDA IPH
|
LDA IPH
|
||||||
PHA
|
PHA
|
||||||
LDA IPL
|
LDA IPL
|
||||||
PHA
|
PHA
|
||||||
TYA
|
TYA
|
||||||
PHA
|
PHA
|
||||||
JSR CALL3
|
JSR JMPTMP
|
||||||
PLA
|
PLA
|
||||||
TAY
|
TAY
|
||||||
PLA
|
PLA
|
||||||
STA IPL
|
STA IPL
|
||||||
PLA
|
PLA
|
||||||
STA IPH
|
STA IPH
|
||||||
|
STA LCRWEN+LCBNK2 ; WRITE ENABLE LANGUAGE CARD
|
||||||
|
STA LCRWEN+LCBNK2
|
||||||
JMP NEXTOP
|
JMP NEXTOP
|
||||||
;
|
;
|
||||||
CALLX +INC_IP
|
CALLX +INC_IP
|
||||||
@@ -1744,9 +1762,9 @@ CALLX +INC_IP
|
|||||||
+INC_IP
|
+INC_IP
|
||||||
LDA (IP),Y
|
LDA (IP),Y
|
||||||
STA ALTRDOFF
|
STA ALTRDOFF
|
||||||
STA CALLADR+2
|
STA TMPH
|
||||||
PLA
|
PLA
|
||||||
STA CALLADR+1
|
STA TMPL
|
||||||
LDA IPH
|
LDA IPH
|
||||||
PHA
|
PHA
|
||||||
LDA IPL
|
LDA IPL
|
||||||
@@ -1754,13 +1772,15 @@ CALLX +INC_IP
|
|||||||
TYA
|
TYA
|
||||||
PHA
|
PHA
|
||||||
CLI
|
CLI
|
||||||
JSR CALL3
|
JSR JMPTMP
|
||||||
PLA
|
PLA
|
||||||
TAY
|
TAY
|
||||||
PLA
|
PLA
|
||||||
STA IPL
|
STA IPL
|
||||||
PLA
|
PLA
|
||||||
STA IPH
|
STA IPH
|
||||||
|
STA LCRWEN+LCBNK2 ; WRITE ENABLE LANGUAGE CARD
|
||||||
|
STA LCRWEN+LCBNK2
|
||||||
JMP NEXTOPX
|
JMP NEXTOPX
|
||||||
;*
|
;*
|
||||||
;* INDIRECT CALL TO ADDRESS (NATIVE CODE)
|
;* INDIRECT CALL TO ADDRESS (NATIVE CODE)
|
||||||
@@ -1778,18 +1798,22 @@ ICAL LDA ESTKL,X
|
|||||||
PHA
|
PHA
|
||||||
LDY #$00
|
LDY #$00
|
||||||
LDA (TMP),Y
|
LDA (TMP),Y
|
||||||
STA CALLADR+1
|
PHA
|
||||||
INY
|
INY
|
||||||
LDA (TMP),Y
|
LDA (TMP),Y
|
||||||
STA CALLADR+2
|
STA TMPH
|
||||||
|
PLA
|
||||||
|
STA TMPL
|
||||||
CLI
|
CLI
|
||||||
JSR CALL3
|
JSR JMPTMP
|
||||||
PLA
|
PLA
|
||||||
TAY
|
TAY
|
||||||
PLA
|
PLA
|
||||||
STA IPL
|
STA IPL
|
||||||
PLA
|
PLA
|
||||||
STA IPH
|
STA IPH
|
||||||
|
STA LCRWEN+LCBNK2 ; WRITE ENABLE LANGUAGE CARD
|
||||||
|
STA LCRWEN+LCBNK2
|
||||||
JMP NEXTOP
|
JMP NEXTOP
|
||||||
;
|
;
|
||||||
ICALX LDA ESTKL,X
|
ICALX LDA ESTKL,X
|
||||||
@@ -1806,18 +1830,22 @@ ICALX LDA ESTKL,X
|
|||||||
STA ALTRDOFF
|
STA ALTRDOFF
|
||||||
LDY #$00
|
LDY #$00
|
||||||
LDA (TMP),Y
|
LDA (TMP),Y
|
||||||
STA CALLADR+1
|
PHA
|
||||||
INY
|
INY
|
||||||
LDA (TMP),Y
|
LDA (TMP),Y
|
||||||
STA CALLADR+2
|
STA TMPH
|
||||||
|
PLA
|
||||||
|
STA TMPL
|
||||||
CLI
|
CLI
|
||||||
JSR CALL3
|
JSR JMPTMP
|
||||||
PLA
|
PLA
|
||||||
TAY
|
TAY
|
||||||
PLA
|
PLA
|
||||||
STA IPL
|
STA IPL
|
||||||
PLA
|
PLA
|
||||||
STA IPH
|
STA IPH
|
||||||
|
STA LCRWEN+LCBNK2 ; WRITE ENABLE LANGUAGE CARD
|
||||||
|
STA LCRWEN+LCBNK2
|
||||||
JMP NEXTOPX
|
JMP NEXTOPX
|
||||||
;*
|
;*
|
||||||
;* ENTER FUNCTION WITH FRAME SIZE AND PARAM COUNT
|
;* ENTER FUNCTION WITH FRAME SIZE AND PARAM COUNT
|
||||||
|
Reference in New Issue
Block a user