mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-03-20 03:31:27 +00:00
Add in-line strings
This commit is contained in:
parent
752f6c7bdb
commit
3f48559d56
@ -479,6 +479,8 @@ def etherServiceIP
|
||||
// What kind of IP protocol is it?
|
||||
//
|
||||
when iphdr->ip_proto
|
||||
is IP_PROTO_TCP
|
||||
break
|
||||
is IP_PROTO_UDP
|
||||
port = @portsUDP
|
||||
if port
|
||||
@ -492,8 +494,6 @@ def etherServiceIP
|
||||
next
|
||||
fin
|
||||
break
|
||||
is IP_PROTO_TCP
|
||||
break
|
||||
is IP_PROTO_ICMP
|
||||
//
|
||||
// Service ICMP packets
|
||||
|
@ -407,15 +407,15 @@ def pokeregs(reg, buf, len)
|
||||
end
|
||||
def peekregs(reg, buf, len)
|
||||
// There is an issue missing data on back-to-back reads
|
||||
// _pokeiow(reg)
|
||||
// return peekdata(buf, len)
|
||||
word i
|
||||
_pokeiow(reg)
|
||||
return peekdata(buf, len)
|
||||
// word i
|
||||
|
||||
len = len - 1
|
||||
for i = 0 to len
|
||||
_pokeiow(reg + i)
|
||||
buf->[i] = _peekio()
|
||||
next
|
||||
// len = len - 1
|
||||
// for i = 0 to len
|
||||
// _pokeiow(reg + i)
|
||||
// buf->[i] = _peekio()
|
||||
// next
|
||||
end
|
||||
def pokeregw(reg, dataw)
|
||||
_pokeiow(reg)
|
||||
|
@ -114,4 +114,5 @@ putln
|
||||
puti(mystruc)
|
||||
putln
|
||||
puts(@constr); puti(constval); putln
|
||||
puts("Hello from in-line string!\n")
|
||||
done
|
||||
|
@ -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);
|
||||
|
@ -16,6 +16,7 @@ void emit_def(char *name, int is_bytecode);
|
||||
int emit_data(int vartype, int consttype, long constval, int constsize);
|
||||
void emit_codetag(int tag);
|
||||
void emit_const(int cval);
|
||||
void emit_conststr(long conststr, int strsize);
|
||||
void emit_lb(void);
|
||||
void emit_lw(void);
|
||||
void emit_llb(int index);
|
||||
|
@ -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)
|
||||
|
@ -2126,6 +2126,10 @@ def emit_const(cval)
|
||||
emit_word(cval)
|
||||
fin
|
||||
end
|
||||
def emit_constr(str, size)
|
||||
emit_op($2E)
|
||||
return emit_data(0, STR_TYPE, str, size)
|
||||
end
|
||||
def emit_lb
|
||||
return emit_op($60)
|
||||
end
|
||||
@ -3151,6 +3155,14 @@ def parse_value(rvalue)
|
||||
// type = type | WORD_TYPE
|
||||
emit_val = TRUE
|
||||
break
|
||||
is STR_TKN
|
||||
//
|
||||
// Special case
|
||||
//
|
||||
emit_constr(constval, tknlen - 1)
|
||||
scan
|
||||
return WORD_TYPE
|
||||
break
|
||||
otherwise
|
||||
return 0
|
||||
wend
|
||||
|
@ -34,8 +34,10 @@ LCBNK1 = $08
|
||||
; 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
|
||||
|
@ -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
|
||||
|
@ -111,7 +111,7 @@ COMP LDA #$FF
|
||||
!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
|
||||
@ -360,20 +360,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
|
||||
@ -428,6 +414,24 @@ 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
|
||||
;*
|
||||
;* LOAD VALUE FROM ADDRESS TAG
|
||||
;*
|
||||
LB LDA ESTKL,X
|
||||
|
@ -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 = *
|
||||
}
|
@ -16,6 +16,7 @@ MEMBANK = $FFEF
|
||||
XPAGE = $1600
|
||||
DROPX = XPAGE+DROP
|
||||
IFPX = XPAGE+IFPH
|
||||
PPX = XPAGE+PPH
|
||||
IPX = XPAGE+IPH
|
||||
TMPX = XPAGE+TMPH
|
||||
SRCX = XPAGE+SRCH
|
||||
@ -60,10 +61,13 @@ DSTX = XPAGE+DSTH
|
||||
STA TMPX ; CLEAR ALL EXTENDED POINTERS
|
||||
STA SRCX
|
||||
STA DSTX
|
||||
STA IFPX ; INIT FRAME POINTER
|
||||
STA PPX ; INIT FRAME & POOL POINTERS
|
||||
STA IFPX
|
||||
LDA #<SEGSTART
|
||||
STA PPL
|
||||
STA IFPL
|
||||
LDA #>SEGSTART
|
||||
STA PPH
|
||||
STA IFPH
|
||||
LDX #ESTKSZ/2 ; INIT EVAL STACK INDEX
|
||||
JMP SOSCMD
|
||||
@ -115,6 +119,14 @@ INTERP 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
|
||||
STY IPX
|
||||
JMP FETCHOP
|
||||
@ -135,6 +147,14 @@ XINTERP 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
|
||||
JMP FETCHOP
|
||||
;*
|
||||
;* INTERNAL DIVIDE ALGORITHM
|
||||
@ -196,7 +216,7 @@ _DIVEX INX
|
||||
!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
|
||||
@ -447,20 +467,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
|
||||
@ -515,6 +521,39 @@ CW DEX
|
||||
STA ESTKH,X
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* CONSTANT STRING
|
||||
;*
|
||||
CS 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
|
||||
@ -971,11 +1010,25 @@ ENTER INY
|
||||
LEAVE PLA
|
||||
CLC
|
||||
ADC IFPL
|
||||
STA PPL
|
||||
LDA #$00
|
||||
ADC IFPH
|
||||
STA PPH
|
||||
PLA ; RESTORE PREVIOUS FRAME
|
||||
STA IFPL
|
||||
BCS LIFPH
|
||||
PLA
|
||||
STA IFPH
|
||||
RTS
|
||||
;
|
||||
RET LDA IFPL ; DEALLOCATE POOL
|
||||
STA PPL
|
||||
LDA IFPH
|
||||
STA PPH
|
||||
PLA ; RESTORE PREVIOUS FRAME
|
||||
STA IFPL
|
||||
PLA
|
||||
STA IFPH
|
||||
RTS
|
||||
LIFPH INC IFPH
|
||||
RET RTS
|
||||
SOSCMD = *
|
||||
!SOURCE "vmsrc/soscmd.a"
|
||||
SEGEND = *
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user