mirror of
https://github.com/badvision/lawless-legends.git
synced 2024-10-05 03:57:52 +00:00
Merge branch 'master' of https://github.com/badvision/lawless-legends
This commit is contained in:
commit
152fa2bd8b
@ -541,6 +541,11 @@ void emit_const(int cval)
|
||||
else
|
||||
printf("\t%s\t$2C,$%02X,$%02X\t\t; CW\t%d\n", DB, cval&0xFF,(cval>>8)&0xFF, cval);
|
||||
}
|
||||
void emit_conststr(long conststr, int strsize)
|
||||
{
|
||||
printf("\t%s\t$2E\t\t\t; CS\n", DB);
|
||||
emit_data(0, STRING_TYPE, conststr, strsize);
|
||||
}
|
||||
void emit_lb(void)
|
||||
{
|
||||
printf("\t%s\t$60\t\t\t; LB\n", DB);
|
||||
|
@ -450,6 +450,15 @@ int parse_value(int rvalue)
|
||||
// type |= WORD_TYPE;
|
||||
emit_value = 1;
|
||||
}
|
||||
else if (scantoken == STRING_TOKEN)
|
||||
{
|
||||
/*
|
||||
* This is a special case. Just emit the string and return
|
||||
*/
|
||||
emit_conststr(constval, tokenlen - 1);
|
||||
scan();
|
||||
return WORD_TYPE;
|
||||
}
|
||||
else
|
||||
return (0);
|
||||
if (type & CONST_TYPE)
|
||||
|
@ -508,7 +508,7 @@ void call(uword pc)
|
||||
*
|
||||
OPTBL: DW ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E
|
||||
DW NEG,COMP,AND,IOR,XOR,SHL,SHR,IDXW ; 10 12 14 16 18 1A 1C 1E
|
||||
DW NOT,LOR,LAND,LA,LLA,CB,CW,SWAP ; 20 22 24 26 28 2A 2C 2E
|
||||
DW NOT,LOR,LAND,LA,LLA,CB,CW,CS ; 20 22 24 26 28 2A 2C 2E
|
||||
DW DROP,DUP,PUSH,PULL,BRGT,BRLT,BREQ,BRNE ; 30 32 34 36 38 3A 3C 3E
|
||||
DW ISEQ,ISNE,ISGT,ISLT,ISGE,ISLE,BRFLS,BRTRU ; 40 42 44 46 48 4A 4C 4E
|
||||
DW BRNCH,IBRNCH,CALL,ICAL,ENTER,LEAVE,RET,??? ; 50 52 54 56 58 5A 5C 5E
|
||||
@ -639,11 +639,9 @@ void interp(code *ip)
|
||||
PUSH(WORD_PTR(ip));
|
||||
ip += 2;
|
||||
break;
|
||||
case 0x2E: // SWAP : TOS = TOS-1, TOS-1 = TOS
|
||||
val = POP;
|
||||
ea = POP;
|
||||
PUSH(val);
|
||||
PUSH(ea);
|
||||
case 0x2E: // CS: TOS = CONSTANTSTRING (IP)
|
||||
PUSH(ip - mem_data);
|
||||
ip += BYTE_PTR(ip) + 1;
|
||||
break;
|
||||
/*
|
||||
* 0x30-0x3F
|
||||
|
@ -172,7 +172,7 @@ VMCORE = *
|
||||
!ALIGN 255,0
|
||||
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 LNOT,LOR,LAND,LA,LLA,CB,CW,SWAP ; 20 22 24 26 28 2A 2C 2E
|
||||
!WORD LNOT,LOR,LAND,LA,LLA,CB,CW,CS ; 20 22 24 26 28 2A 2C 2E
|
||||
!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 BRNCH,IBRNCH,CALL,ICAL,ENTER,LEAVE,RET,NEXTOP ; 50 52 54 56 58 5A 5C 5E
|
||||
@ -188,6 +188,14 @@ DINTRP PLA
|
||||
PLA
|
||||
ADC #$00
|
||||
STA IPH
|
||||
LDA IFPH
|
||||
PHA ; SAVE ON STACK FOR LEAVE/RET
|
||||
LDA IFPL
|
||||
PHA ; SAVE ON STACK FOR LEAVE/RET
|
||||
LDA PPL ; SET FP TO PP
|
||||
STA IFPL
|
||||
LDA PPH
|
||||
STA IFPH
|
||||
LDY #$00
|
||||
LDA #>OPTBL
|
||||
STA OPPAGE
|
||||
@ -203,6 +211,14 @@ IINTRP PLA
|
||||
LDA (TMP),Y
|
||||
STA IPL
|
||||
DEY
|
||||
LDA IFPH
|
||||
PHA ; SAVE ON STACK FOR LEAVE/RET
|
||||
LDA IFPL
|
||||
PHA ; SAVE ON STACK FOR LEAVE/RET
|
||||
LDA PPL ; SET FP TO PP
|
||||
STA IFPL
|
||||
LDA PPH
|
||||
STA IFPH
|
||||
LDA #>OPTBL
|
||||
STA OPPAGE
|
||||
JMP FETCHOP
|
||||
@ -217,6 +233,14 @@ IINTRPX PLA
|
||||
LDA (TMP),Y
|
||||
STA IPL
|
||||
DEY
|
||||
LDA IFPH
|
||||
PHA ; SAVE ON STACK FOR LEAVE/RET
|
||||
LDA IFPL
|
||||
PHA ; SAVE ON STACK FOR LEAVE/RET
|
||||
LDA PPL ; SET FP TO PP
|
||||
STA IFPL
|
||||
LDA PPH
|
||||
STA IFPH
|
||||
LDA #>OPXTBL
|
||||
STA OPPAGE
|
||||
SEI
|
||||
@ -292,8 +316,10 @@ CMDENTRY = *
|
||||
; INIT VM ENVIRONMENT STACK POINTERS
|
||||
;
|
||||
; LDA #$00 ; INIT FRAME POINTER
|
||||
STA PPL
|
||||
STA IFPL
|
||||
LDA #$BF
|
||||
STA PPH
|
||||
STA IFPH
|
||||
LDX #$FE ; INIT STACK POINTER (YES, $FE. SEE GETS)
|
||||
TXS
|
||||
@ -364,7 +390,7 @@ LCDEFCMD = *-28 ; DEFCMD IN LC MEMORY
|
||||
!ALIGN 255,0
|
||||
OPXTBL !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 LNOT,LOR,LAND,LA,LLA,CB,CW,SWAP ; 20 22 24 26 28 2A 2C 2E
|
||||
!WORD LNOT,LOR,LAND,LA,LLA,CB,CW,CSX ; 20 22 24 26 28 2A 2C 2E
|
||||
!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 BRNCH,IBRNCH,CALLX,ICALX,ENTERX,LEAVEX,RETX,NEXTOP; 50 52 54 56 58 5A 5C 5E
|
||||
@ -668,20 +694,6 @@ LOR LDA ESTKL,X
|
||||
LOR1 INX
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* SWAP TOS WITH TOS-1
|
||||
;*
|
||||
SWAP STY IPY
|
||||
LDA ESTKL,X
|
||||
LDY ESTKL+1,X
|
||||
STA ESTKL+1,X
|
||||
STY ESTKL,X
|
||||
LDA ESTKH,X
|
||||
LDY ESTKH+1,X
|
||||
STA ESTKH+1,X
|
||||
STY ESTKH,X
|
||||
LDY IPY
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* DUPLICATE TOS
|
||||
;*
|
||||
DUP DEX
|
||||
@ -736,6 +748,55 @@ CW DEX
|
||||
STA ESTKH,X
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* CONSTANT STRING
|
||||
;*
|
||||
CS DEX
|
||||
+INC_IP
|
||||
TYA ; NORMALIZE IP AND SAVE STRING ADDR ON ESTK
|
||||
CLC
|
||||
ADC IPL
|
||||
STA IPL
|
||||
STA ESTKL,X
|
||||
LDA #$00
|
||||
TAY
|
||||
ADC IPH
|
||||
STA IPH
|
||||
STA ESTKH,X
|
||||
LDA (IP),Y
|
||||
TAY
|
||||
JMP NEXTOP
|
||||
;
|
||||
CSX DEX
|
||||
+INC_IP
|
||||
TYA ; NORMALIZE IP
|
||||
CLC
|
||||
ADC IPL
|
||||
STA IPL
|
||||
LDA #$00
|
||||
TAY
|
||||
ADC IPH
|
||||
STA IPH
|
||||
LDA (IP),Y
|
||||
TAY ; MAKE ROOM IN POOL AND SAVE ADDR ON ESTK
|
||||
EOR #$FF
|
||||
SEC
|
||||
ADC PPL
|
||||
STA PPL
|
||||
STA ESTKL,X
|
||||
LDA #$FF
|
||||
ADC PPH
|
||||
STA PPH
|
||||
STA ESTKH,X ; COPY STRING FROM AUX MEM BYTECODE TO MAIN MEM POOL
|
||||
- LDA (IP),Y ; ALTRD IS ON, NO NEED TO CHANGE IT HERE
|
||||
STA (PP),Y ; ALTWR IS OFF, NO NEED TO CHANGE IT HERE
|
||||
DEY
|
||||
CPY #$FF
|
||||
BNE -
|
||||
INY
|
||||
LDA (IP),Y ; SKIP TO NEXT OP ADDR AFTER STRING
|
||||
TAY
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* LOAD VALUE FROM ADDRESS TAG
|
||||
;*
|
||||
LB LDA ESTKL,X
|
||||
@ -1455,13 +1516,16 @@ JMPTMP JMP (TMP)
|
||||
ENTER INY
|
||||
LDA (IP),Y
|
||||
PHA ; SAVE ON STACK FOR LEAVE
|
||||
EOR #$FF
|
||||
EOR #$FF ; ALLOCATE FRAME
|
||||
SEC
|
||||
ADC IFPL
|
||||
ADC PPL
|
||||
STA PPL
|
||||
STA IFPL
|
||||
BCS +
|
||||
DEC IFPH
|
||||
+ INY
|
||||
LDA #$FF
|
||||
ADC PPH
|
||||
STA PPH
|
||||
STA IFPH
|
||||
INY
|
||||
LDA (IP),Y
|
||||
ASL
|
||||
TAY
|
||||
@ -1480,13 +1544,16 @@ ENTER INY
|
||||
ENTERX INY
|
||||
LDA (IP),Y
|
||||
PHA ; SAVE ON STACK FOR LEAVEX
|
||||
EOR #$FF
|
||||
EOR #$FF ; ALLOCATE FRAME
|
||||
SEC
|
||||
ADC IFPL
|
||||
ADC PPL
|
||||
STA PPL
|
||||
STA IFPL
|
||||
BCS +
|
||||
DEC IFPH
|
||||
+ INY
|
||||
LDA #$FF
|
||||
ADC PPH
|
||||
STA PPH
|
||||
STA IFPH
|
||||
INY
|
||||
LDA (IP),Y
|
||||
STA ALTRDOFF
|
||||
ASL
|
||||
@ -1506,25 +1573,31 @@ ENTERX INY
|
||||
;*
|
||||
;* LEAVE FUNCTION
|
||||
;*
|
||||
LEAVE PLA
|
||||
CLC
|
||||
ADC IFPL
|
||||
STA IFPL
|
||||
BCS LIFPH
|
||||
RTS
|
||||
LIFPH INC IFPH
|
||||
RET RTS
|
||||
;
|
||||
LEAVEX STA ALTRDOFF
|
||||
CLI
|
||||
PLA
|
||||
LEAVE PLA ; DEALLOCATE POOL + FRAME
|
||||
CLC
|
||||
ADC IFPL
|
||||
STA PPL
|
||||
LDA #$00
|
||||
ADC IFPH
|
||||
STA PPH
|
||||
PLA ; RESTORE PREVIOUS FRAME
|
||||
STA IFPL
|
||||
BCS LIFPH
|
||||
PLA
|
||||
STA IFPH
|
||||
RTS
|
||||
;
|
||||
RETX STA ALTRDOFF
|
||||
CLI
|
||||
RET LDA IFPL ; DEALLOCATE POOL
|
||||
STA PPL
|
||||
LDA IFPH
|
||||
STA PPH
|
||||
PLA ; RESTORE PREVIOUS FRAME
|
||||
STA IFPL
|
||||
PLA
|
||||
STA IFPH
|
||||
RTS
|
||||
VMEND = *
|
||||
}
|
@ -17,11 +17,10 @@ VMZP = ESTK+ESTKSZ
|
||||
IFP = VMZP
|
||||
IFPL = IFP
|
||||
IFPH = IFP+1
|
||||
;IP = IFP+2 ; MOVED TO OVERLAY NEXTOP
|
||||
;IPL = IP
|
||||
;IPH = IP+1
|
||||
;IPY = IP+2
|
||||
IPY = IFP+2
|
||||
PP = IFP+2
|
||||
PPL = PP
|
||||
PPH = PP+1
|
||||
IPY = PP+2
|
||||
TMP = IPY+1
|
||||
TMPL = TMP
|
||||
TMPH = TMP+1
|
||||
|
@ -114,4 +114,5 @@ putln
|
||||
puti(mystruc)
|
||||
putln
|
||||
puts(@constr); puti(constval); putln
|
||||
puts("Hello from in-line string!\n")
|
||||
done
|
||||
|
Loading…
Reference in New Issue
Block a user