mirror of
https://github.com/dschmenk/PLASMA.git
synced 2024-10-18 07:24:16 +00:00
Add def prototypes for cmdsys library functions
This commit is contained in:
parent
326482a2a0
commit
255061f75a
@ -30,12 +30,12 @@ const CFFAEntryPtr = $0B
|
|||||||
//
|
//
|
||||||
// Pedefined functions.
|
// Pedefined functions.
|
||||||
//
|
//
|
||||||
predef crout, cout, prstr, cin, rdstr
|
predef syscall(cmd)#1, call(addr,areg,xreg,yreg,status)#1
|
||||||
predef syscall, call
|
predef crout()#0, cout(c)#0, prstr(s)#0, cin()#1, rdstr(p)#1
|
||||||
predef markheap, allocheap, allocalignheap, releaseheap, availheap
|
predef markheap()#1, allocheap(size)#1, allocalignheap(size, pow2, freeaddr), releaseheap(newheap)#1, availheap()#1
|
||||||
predef memset, memcpy
|
predef memset(addr,value,size)#0, memcpy(dst,src,size)#0
|
||||||
predef uword_isgt, uword_isge, uword_islt, uword_isle
|
predef uword_isgt(a,b)#1, uword_isge(a,b)#1, uword_islt(a,b)#1, uword_isle(a,b)#1
|
||||||
predef loadmod, execmod, lookupstrmod
|
predef loadmod(mod)#1, execmod(modfile)#1, lookupstrmod(str)#1
|
||||||
//
|
//
|
||||||
// System variables.
|
// System variables.
|
||||||
//
|
//
|
||||||
@ -117,7 +117,7 @@ word syslibsym = @exports
|
|||||||
// CALL CFFA1 API ENTRYPOINT
|
// CALL CFFA1 API ENTRYPOINT
|
||||||
// SYSCALL(CMD)
|
// SYSCALL(CMD)
|
||||||
//
|
//
|
||||||
asm syscall
|
asm syscall(cmd)#1
|
||||||
LDA ESTKL,X
|
LDA ESTKL,X
|
||||||
STX ESP
|
STX ESP
|
||||||
TAX
|
TAX
|
||||||
@ -132,7 +132,7 @@ end
|
|||||||
// CALL 6502 ROUTINE
|
// CALL 6502 ROUTINE
|
||||||
// CALL(ADDR, AREG, XREG, YREG, STATUS)
|
// CALL(ADDR, AREG, XREG, YREG, STATUS)
|
||||||
//
|
//
|
||||||
asm call
|
asm call(addr,areg,xreg,yreg,sstatus)#1
|
||||||
PHP
|
PHP
|
||||||
LDA ESTKL+4,X
|
LDA ESTKL+4,X
|
||||||
STA CALL6502+1
|
STA CALL6502+1
|
||||||
@ -172,7 +172,7 @@ end
|
|||||||
//
|
//
|
||||||
// QUIT TO MONITOR
|
// QUIT TO MONITOR
|
||||||
//
|
//
|
||||||
asm quit
|
asm quit()#0
|
||||||
JMP $9000
|
JMP $9000
|
||||||
end
|
end
|
||||||
//
|
//
|
||||||
@ -180,7 +180,7 @@ end
|
|||||||
// MEMSET(ADDR, VALUE, SIZE)
|
// MEMSET(ADDR, VALUE, SIZE)
|
||||||
// With optimizations from Peter Ferrie
|
// With optimizations from Peter Ferrie
|
||||||
//
|
//
|
||||||
asm memset
|
asm memset(addr,value,size)#0
|
||||||
LDA ESTKL+2,X
|
LDA ESTKL+2,X
|
||||||
STA DSTL
|
STA DSTL
|
||||||
LDA ESTKH+2,X
|
LDA ESTKH+2,X
|
||||||
@ -207,6 +207,7 @@ SETMLPH STA (DST),Y
|
|||||||
++ DEC ESTKH,X
|
++ DEC ESTKH,X
|
||||||
BNE -
|
BNE -
|
||||||
SETMEX INX
|
SETMEX INX
|
||||||
|
INX
|
||||||
INX
|
INX
|
||||||
RTS
|
RTS
|
||||||
end
|
end
|
||||||
@ -214,31 +215,32 @@ end
|
|||||||
// COPY MEMORY
|
// COPY MEMORY
|
||||||
// MEMCPY(DSTADDR, SRCADDR, SIZE)
|
// MEMCPY(DSTADDR, SRCADDR, SIZE)
|
||||||
//
|
//
|
||||||
asm memcpy
|
asm memcpy(dst,src,size)#0
|
||||||
INX
|
INX
|
||||||
INX
|
INX
|
||||||
LDA ESTKL-2,X
|
INX
|
||||||
ORA ESTKH-2,X
|
LDA ESTKL-3,X
|
||||||
|
ORA ESTKH-3,X
|
||||||
BEQ CPYMEX
|
BEQ CPYMEX
|
||||||
LDA ESTKL-1,X
|
LDA ESTKL-2,X
|
||||||
CMP ESTKL,X
|
CMP ESTKL-1,X
|
||||||
LDA ESTKH-1,X
|
LDA ESTKH-2,X
|
||||||
SBC ESTKH,X
|
SBC ESTKH-1,X
|
||||||
BCC REVCPY
|
BCC REVCPY
|
||||||
;
|
;
|
||||||
; FORWARD COPY
|
; FORWARD COPY
|
||||||
;
|
;
|
||||||
LDA ESTKL,X
|
|
||||||
STA DSTL
|
|
||||||
LDA ESTKH,X
|
|
||||||
STA DSTH
|
|
||||||
LDA ESTKL-1,X
|
LDA ESTKL-1,X
|
||||||
STA SRCL
|
STA DSTL
|
||||||
LDA ESTKH-1,X
|
LDA ESTKH-1,X
|
||||||
|
STA DSTH
|
||||||
|
LDA ESTKL-2,X
|
||||||
|
STA SRCL
|
||||||
|
LDA ESTKH-2,X
|
||||||
STA SRCH
|
STA SRCH
|
||||||
LDY ESTKL-2,X
|
LDY ESTKL-3,X
|
||||||
BEQ FORCPYLP
|
BEQ FORCPYLP
|
||||||
INC ESTKH-2,X
|
INC ESTKH-3,X
|
||||||
LDY #$00
|
LDY #$00
|
||||||
FORCPYLP LDA (SRC),Y
|
FORCPYLP LDA (SRC),Y
|
||||||
STA (DST),Y
|
STA (DST),Y
|
||||||
@ -246,34 +248,34 @@ FORCPYLP LDA (SRC),Y
|
|||||||
BNE +
|
BNE +
|
||||||
INC DSTH
|
INC DSTH
|
||||||
INC SRCH
|
INC SRCH
|
||||||
+ DEC ESTKL-2,X
|
+ DEC ESTKL-3,X
|
||||||
BNE FORCPYLP
|
BNE FORCPYLP
|
||||||
DEC ESTKH-2,X
|
DEC ESTKH-3,X
|
||||||
BNE FORCPYLP
|
BNE FORCPYLP
|
||||||
RTS
|
RTS
|
||||||
;
|
;
|
||||||
; REVERSE COPY
|
; REVERSE COPY
|
||||||
;
|
;
|
||||||
REVCPY ;CLC
|
REVCPY ;CLC
|
||||||
LDA ESTKL-2,X
|
LDA ESTKL-3,X
|
||||||
ADC ESTKL,X
|
ADC ESTKL,X
|
||||||
STA DSTL
|
STA DSTL
|
||||||
LDA ESTKH-2,X
|
LDA ESTKH-3,X
|
||||||
ADC ESTKH,X
|
ADC ESTKH,X
|
||||||
STA DSTH
|
STA DSTH
|
||||||
CLC
|
CLC
|
||||||
LDA ESTKL-2,X
|
LDA ESTKL-3,X
|
||||||
ADC ESTKL-1,X
|
ADC ESTKL-2,X
|
||||||
STA SRCL
|
STA SRCL
|
||||||
LDA ESTKH-2,X
|
LDA ESTKH-3,X
|
||||||
ADC ESTKH-1,X
|
ADC ESTKH-2,X
|
||||||
STA SRCH
|
STA SRCH
|
||||||
DEC DSTH
|
DEC DSTH
|
||||||
DEC SRCH
|
DEC SRCH
|
||||||
LDY #$FF
|
LDY #$FF
|
||||||
LDA ESTKL-2,X
|
LDA ESTKL-3,X
|
||||||
BEQ REVCPYLP
|
BEQ REVCPYLP
|
||||||
INC ESTKH-2,X
|
INC ESTKH-3,X
|
||||||
REVCPYLP LDA (SRC),Y
|
REVCPYLP LDA (SRC),Y
|
||||||
STA (DST),Y
|
STA (DST),Y
|
||||||
DEY
|
DEY
|
||||||
@ -281,16 +283,16 @@ REVCPYLP LDA (SRC),Y
|
|||||||
BNE +
|
BNE +
|
||||||
DEC DSTH
|
DEC DSTH
|
||||||
DEC SRCH
|
DEC SRCH
|
||||||
+ DEC ESTKL-2,X
|
+ DEC ESTKL-3,X
|
||||||
BNE REVCPYLP
|
BNE REVCPYLP
|
||||||
DEC ESTKH-2,X
|
DEC ESTKH-3,X
|
||||||
BNE REVCPYLP
|
BNE REVCPYLP
|
||||||
CPYMEX RTS
|
CPYMEX RTS
|
||||||
end
|
end
|
||||||
//
|
//
|
||||||
// Unsigned word comparisons.
|
// Unsigned word comparisons.
|
||||||
//
|
//
|
||||||
asm uword_isge
|
asm uword_isge(a,b)#1
|
||||||
LDA ESTKL+1,X
|
LDA ESTKL+1,X
|
||||||
CMP ESTKL,X
|
CMP ESTKL,X
|
||||||
LDA ESTKH+1,X
|
LDA ESTKH+1,X
|
||||||
@ -303,7 +305,7 @@ asm uword_isge
|
|||||||
INX
|
INX
|
||||||
RTS
|
RTS
|
||||||
end
|
end
|
||||||
asm uword_isle
|
asm uword_isle(a,b)#1
|
||||||
LDA ESTKL,X
|
LDA ESTKL,X
|
||||||
CMP ESTKL+1,X
|
CMP ESTKL+1,X
|
||||||
LDA ESTKH,X
|
LDA ESTKH,X
|
||||||
@ -316,7 +318,7 @@ asm uword_isle
|
|||||||
INX
|
INX
|
||||||
RTS
|
RTS
|
||||||
end
|
end
|
||||||
asm uword_isgt
|
asm uword_isgt(a,b)#1
|
||||||
LDA ESTKL,X
|
LDA ESTKL,X
|
||||||
CMP ESTKL+1,X
|
CMP ESTKL+1,X
|
||||||
LDA ESTKH,X
|
LDA ESTKH,X
|
||||||
@ -328,7 +330,7 @@ asm uword_isgt
|
|||||||
INX
|
INX
|
||||||
RTS
|
RTS
|
||||||
end
|
end
|
||||||
asm uword_islt
|
asm uword_islt(a,b)#1
|
||||||
LDA ESTKL+1,X
|
LDA ESTKL+1,X
|
||||||
CMP ESTKL,X
|
CMP ESTKL,X
|
||||||
LDA ESTKH+1,X
|
LDA ESTKH+1,X
|
||||||
@ -343,7 +345,7 @@ end
|
|||||||
//
|
//
|
||||||
// Addresses of internal routines.
|
// Addresses of internal routines.
|
||||||
//
|
//
|
||||||
asm interp
|
asm interp()#1
|
||||||
DEX
|
DEX
|
||||||
LDA #<IINTERP
|
LDA #<IINTERP
|
||||||
STA ESTKL,X
|
STA ESTKL,X
|
||||||
@ -366,7 +368,7 @@ end
|
|||||||
// ^str = len
|
// ^str = len
|
||||||
// return len
|
// return len
|
||||||
//end
|
//end
|
||||||
asm dcitos
|
asm dcitos(dci, str)#1
|
||||||
LDA ESTKL,X
|
LDA ESTKL,X
|
||||||
STA DSTL
|
STA DSTL
|
||||||
LDA ESTKH,X
|
LDA ESTKH,X
|
||||||
@ -406,7 +408,7 @@ end
|
|||||||
// loop
|
// loop
|
||||||
// return ^str
|
// return ^str
|
||||||
//end
|
//end
|
||||||
asm stodci
|
asm stodci(str, dci)#1
|
||||||
LDA ESTKL,X
|
LDA ESTKL,X
|
||||||
STA DSTL
|
STA DSTL
|
||||||
LDA ESTKH,X
|
LDA ESTKH,X
|
||||||
@ -434,7 +436,7 @@ asm stodci
|
|||||||
STY ESTKH,X
|
STY ESTKH,X
|
||||||
RTS
|
RTS
|
||||||
end
|
end
|
||||||
asm toupper
|
asm toupper(c)#1
|
||||||
LDA ESTKL,X
|
LDA ESTKL,X
|
||||||
TOUPR AND #$7F
|
TOUPR AND #$7F
|
||||||
CMP #'a'
|
CMP #'a'
|
||||||
@ -461,7 +463,7 @@ end
|
|||||||
// until !(c & $80)
|
// until !(c & $80)
|
||||||
// return dci
|
// return dci
|
||||||
//end
|
//end
|
||||||
asm modtosym
|
asm modtosym(mod, dci)#1
|
||||||
LDA ESTKL+1,X
|
LDA ESTKL+1,X
|
||||||
STA SRCL
|
STA SRCL
|
||||||
LDA ESTKH+1,X
|
LDA ESTKH+1,X
|
||||||
@ -502,7 +504,7 @@ end
|
|||||||
// tbl = tbl + 3
|
// tbl = tbl + 3
|
||||||
// loop
|
// loop
|
||||||
// return 0
|
// return 0
|
||||||
asm lookuptbl
|
asm lookuptbl(dci, tbl)#1
|
||||||
LDA ESTKL,X
|
LDA ESTKL,X
|
||||||
STA DSTL
|
STA DSTL
|
||||||
LDA ESTKH,X
|
LDA ESTKH,X
|
||||||
@ -547,13 +549,13 @@ end
|
|||||||
//
|
//
|
||||||
// CONSOLE I/O
|
// CONSOLE I/O
|
||||||
//
|
//
|
||||||
asm cout
|
asm cout(c)#0
|
||||||
LDA ESTKL,X
|
LDA ESTKL,X
|
||||||
JSR TOUPR
|
JSR TOUPR
|
||||||
ORA #$80
|
ORA #$80
|
||||||
JMP $FFEF
|
JMP $FFEF
|
||||||
end
|
end
|
||||||
asm cin
|
asm cin()#1
|
||||||
DEX
|
DEX
|
||||||
- LDA $D011
|
- LDA $D011
|
||||||
BPL -
|
BPL -
|
||||||
@ -564,10 +566,10 @@ asm cin
|
|||||||
STA ESTKH,X
|
STA ESTKH,X
|
||||||
RTS
|
RTS
|
||||||
end
|
end
|
||||||
def crout
|
def crout()#0
|
||||||
return cout($0D)
|
cout($0D)
|
||||||
end
|
end
|
||||||
def prstr(str)
|
def prstr(str)#0
|
||||||
byte i
|
byte i
|
||||||
i = 1
|
i = 1
|
||||||
while i <= ^str
|
while i <= ^str
|
||||||
@ -575,7 +577,7 @@ def prstr(str)
|
|||||||
i = i + 1
|
i = i + 1
|
||||||
loop
|
loop
|
||||||
end
|
end
|
||||||
def rdstr(prompt)
|
def rdstr(prompt)#1
|
||||||
byte ch, maxlen
|
byte ch, maxlen
|
||||||
maxlen = 0
|
maxlen = 0
|
||||||
inbuff.0 = 0
|
inbuff.0 = 0
|
||||||
@ -627,13 +629,13 @@ def rdstr(prompt)
|
|||||||
cout($0D)
|
cout($0D)
|
||||||
return inbuff
|
return inbuff
|
||||||
end
|
end
|
||||||
def prbyte(v)
|
def prbyte(v)#0
|
||||||
cout(hexchar[(v >> 4) & $0F])
|
cout(hexchar[(v >> 4) & $0F])
|
||||||
return cout(hexchar[v & $0F])
|
cout(hexchar[v & $0F])
|
||||||
end
|
end
|
||||||
def prword(v)
|
def prword(v)#0
|
||||||
prbyte(v >> 8)
|
prbyte(v >> 8)
|
||||||
return prbyte(v)
|
prbyte(v)
|
||||||
end
|
end
|
||||||
//
|
//
|
||||||
// CFFA1 routines
|
// CFFA1 routines
|
||||||
@ -647,12 +649,12 @@ end
|
|||||||
// perr = syscall($12)
|
// perr = syscall($12)
|
||||||
// return *CFFAEntryPtr
|
// return *CFFAEntryPtr
|
||||||
//end
|
//end
|
||||||
def finddirentry(filename)
|
def finddirentry(filename)#1
|
||||||
*CFFAFileName = filename
|
*CFFAFileName = filename
|
||||||
perr = syscall($14)
|
perr = syscall($14)
|
||||||
return *CFFAEntryPtr
|
return *CFFAEntryPtr
|
||||||
end
|
end
|
||||||
def readfile(filename, buffer)
|
def readfile(filename, buffer)#1
|
||||||
*CFFADest = buffer
|
*CFFADest = buffer
|
||||||
*CFFAFileName = filename
|
*CFFAFileName = filename
|
||||||
perr = syscall($22)
|
perr = syscall($22)
|
||||||
@ -661,11 +663,11 @@ end
|
|||||||
//
|
//
|
||||||
// Heap routines.
|
// Heap routines.
|
||||||
//
|
//
|
||||||
def availheap
|
def availheap()#1
|
||||||
byte fp
|
byte fp
|
||||||
return @fp - heap
|
return @fp - heap
|
||||||
end
|
end
|
||||||
def allocheap(size)
|
def allocheap(size)#1
|
||||||
word addr
|
word addr
|
||||||
addr = heap
|
addr = heap
|
||||||
heap = heap + size
|
heap = heap + size
|
||||||
@ -674,7 +676,7 @@ def allocheap(size)
|
|||||||
fin
|
fin
|
||||||
return addr
|
return addr
|
||||||
end
|
end
|
||||||
def allocalignheap(size, pow2, freeaddr)
|
def allocalignheap(size, pow2, freeaddr)#1
|
||||||
word align, addr
|
word align, addr
|
||||||
if freeaddr
|
if freeaddr
|
||||||
*freeaddr = heap
|
*freeaddr = heap
|
||||||
@ -687,20 +689,20 @@ def allocalignheap(size, pow2, freeaddr)
|
|||||||
fin
|
fin
|
||||||
return addr
|
return addr
|
||||||
end
|
end
|
||||||
def markheap
|
def markheap()#1
|
||||||
return heap
|
return heap
|
||||||
end
|
end
|
||||||
def releaseheap(newheap)
|
def releaseheap(newheap)#1
|
||||||
heap = newheap
|
heap = newheap
|
||||||
return @newheap - heap
|
return @newheap - heap
|
||||||
end
|
end
|
||||||
//
|
//
|
||||||
// Symbol table routines.
|
// Symbol table routines.
|
||||||
//
|
//
|
||||||
def lookupsym(sym)
|
def lookupsym(sym)#1
|
||||||
return lookuptbl(sym, symtbl)
|
return lookuptbl(sym, symtbl)
|
||||||
end
|
end
|
||||||
def addsym(sym, addr)
|
def addsym(sym, addr)#0
|
||||||
while ^sym & $80
|
while ^sym & $80
|
||||||
^lastsym = ^sym
|
^lastsym = ^sym
|
||||||
lastsym = lastsym + 1
|
lastsym = lastsym + 1
|
||||||
@ -714,20 +716,20 @@ end
|
|||||||
//
|
//
|
||||||
// Module routines.
|
// Module routines.
|
||||||
//
|
//
|
||||||
def lookupmod(mod)
|
def lookupmod(mod)#1
|
||||||
byte dci[17]
|
byte dci[17]
|
||||||
return lookuptbl(modtosym(mod, @dci), symtbl)
|
return lookuptbl(modtosym(mod, @dci), symtbl)
|
||||||
end
|
end
|
||||||
def lookupstrmod(str)
|
def lookupstrmod(str)#1
|
||||||
byte mod[17]
|
byte mod[17]
|
||||||
stodci(str, @mod)
|
stodci(str, @mod)
|
||||||
return lookupmod(@mod)
|
return lookupmod(@mod)
|
||||||
end
|
end
|
||||||
def addmod(mod, addr)
|
def addmod(mod, addr)#0
|
||||||
byte dci[17]
|
byte dci[17]
|
||||||
return addsym(modtosym(mod, @dci), addr)
|
addsym(modtosym(mod, @dci), addr)
|
||||||
end
|
end
|
||||||
def lookupextern(esd, index)
|
def lookupextern(esd, index)#1
|
||||||
word sym, addr
|
word sym, addr
|
||||||
byte str[16]
|
byte str[16]
|
||||||
while ^esd
|
while ^esd
|
||||||
@ -747,7 +749,7 @@ def lookupextern(esd, index)
|
|||||||
loop
|
loop
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
def adddef(addr, deflast)
|
def adddef(addr, deflast)#1
|
||||||
word defentry
|
word defentry
|
||||||
defentry = *deflast
|
defentry = *deflast
|
||||||
*deflast = defentry + 5
|
*deflast = defentry + 5
|
||||||
@ -757,7 +759,7 @@ def adddef(addr, deflast)
|
|||||||
defentry->5 = 0 // null out next entry
|
defentry->5 = 0 // null out next entry
|
||||||
return defentry
|
return defentry
|
||||||
end
|
end
|
||||||
def lookupdef(addr, deftbl)
|
def lookupdef(addr, deftbl)#1
|
||||||
while deftbl->0 == $20
|
while deftbl->0 == $20
|
||||||
if deftbl=>3 == addr
|
if deftbl=>3 == addr
|
||||||
return deftbl
|
return deftbl
|
||||||
@ -766,7 +768,7 @@ def lookupdef(addr, deftbl)
|
|||||||
loop
|
loop
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
def loadmod(mod)
|
def loadmod(mod)#1
|
||||||
word rdlen, modsize, bytecode, defofst, defcnt, init, fixup
|
word rdlen, modsize, bytecode, defofst, defcnt, init, fixup
|
||||||
word addr, modaddr, modfix, modend
|
word addr, modaddr, modfix, modend
|
||||||
word deftbl, deflast
|
word deftbl, deflast
|
||||||
@ -929,14 +931,14 @@ end
|
|||||||
//
|
//
|
||||||
// Command mode
|
// Command mode
|
||||||
//
|
//
|
||||||
def stripchars(strptr)
|
def stripchars(strptr)#1
|
||||||
while ^strptr and ^(strptr + 1) <> ' '
|
while ^strptr and ^(strptr + 1) <> ' '
|
||||||
memcpy(strptr + 1, strptr + 2, ^strptr)
|
memcpy(strptr + 1, strptr + 2, ^strptr)
|
||||||
^strptr = ^strptr - 1
|
^strptr = ^strptr - 1
|
||||||
loop
|
loop
|
||||||
return ^strptr
|
return ^strptr
|
||||||
end
|
end
|
||||||
def stripspaces(strptr)
|
def stripspaces(strptr)#0
|
||||||
while ^strptr and ^(strptr + ^strptr) <= ' '
|
while ^strptr and ^(strptr + ^strptr) <= ' '
|
||||||
^strptr = ^strptr - 1
|
^strptr = ^strptr - 1
|
||||||
loop
|
loop
|
||||||
@ -945,7 +947,7 @@ def stripspaces(strptr)
|
|||||||
^strptr = ^strptr - 1
|
^strptr = ^strptr - 1
|
||||||
loop
|
loop
|
||||||
end
|
end
|
||||||
def striptrail(strptr)
|
def striptrail(strptr)#0
|
||||||
byte i
|
byte i
|
||||||
|
|
||||||
for i = 1 to ^strptr
|
for i = 1 to ^strptr
|
||||||
@ -955,7 +957,7 @@ def striptrail(strptr)
|
|||||||
fin
|
fin
|
||||||
next
|
next
|
||||||
end
|
end
|
||||||
def parsecmd(strptr)
|
def parsecmd(strptr)#1
|
||||||
byte cmd
|
byte cmd
|
||||||
|
|
||||||
cmd = 0
|
cmd = 0
|
||||||
@ -968,7 +970,7 @@ def parsecmd(strptr)
|
|||||||
stripspaces(strptr)
|
stripspaces(strptr)
|
||||||
return cmd
|
return cmd
|
||||||
end
|
end
|
||||||
def execmod(modfile)
|
def execmod(modfile)#1
|
||||||
byte moddci[17]
|
byte moddci[17]
|
||||||
word saveheap, savesym, saveflags
|
word saveheap, savesym, saveflags
|
||||||
|
|
||||||
|
@ -25,12 +25,12 @@ const O_READ_WRITE = 3
|
|||||||
//
|
//
|
||||||
// Pedefined functions.
|
// Pedefined functions.
|
||||||
//
|
//
|
||||||
predef crout, cout, prstr, cin, rdstr
|
predef syscall(cmd,params)#1, call(addr,areg,xreg,yreg,status)#1
|
||||||
predef syscall, call
|
predef crout()#0, cout(c)#0, prstr(s)#0, cin()#1, rdstr(p)#1
|
||||||
predef markheap, allocheap, allocalignheap, releaseheap, availheap
|
predef markheap()#1, allocheap(size)#1, allocalignheap(size, pow2, freeaddr), releaseheap(newheap)#1, availheap()#1
|
||||||
predef memset, memcpy
|
predef memset(addr,value,size)#0, memcpy(dst,src,size)#0
|
||||||
predef uword_isgt, uword_isge, uword_islt, uword_isle
|
predef uword_isgt(a,b)#1, uword_isge(a,b)#1, uword_islt(a,b)#1, uword_isle(a,b)#1
|
||||||
predef loadmod, execmod, lookupstrmod
|
predef loadmod(mod)#1, execmod(modfile)#1, lookupstrmod(str)#1
|
||||||
//
|
//
|
||||||
// System variables.
|
// System variables.
|
||||||
//
|
//
|
||||||
@ -113,7 +113,7 @@ word syslibsym = @exports
|
|||||||
// CALL SOS
|
// CALL SOS
|
||||||
// SYSCALL(CMD, PARAMS)
|
// SYSCALL(CMD, PARAMS)
|
||||||
//
|
//
|
||||||
asm syscall
|
asm syscall(cmd,params)#1
|
||||||
LDA ESTKL,X
|
LDA ESTKL,X
|
||||||
LDY ESTKH,X
|
LDY ESTKH,X
|
||||||
STA PARAMS
|
STA PARAMS
|
||||||
@ -133,7 +133,7 @@ end
|
|||||||
// CALL 6502 ROUTINE
|
// CALL 6502 ROUTINE
|
||||||
// CALL(AREG, XREG, YREG, STATUS, ADDR)
|
// CALL(AREG, XREG, YREG, STATUS, ADDR)
|
||||||
//
|
//
|
||||||
asm call
|
asm call(addr,areg,xreg,yreg,sstatus)#1
|
||||||
REGVALS = SRC
|
REGVALS = SRC
|
||||||
PHP
|
PHP
|
||||||
LDA ESTKL,X
|
LDA ESTKL,X
|
||||||
@ -176,7 +176,7 @@ end
|
|||||||
// MEMSET(ADDR, VALUE, SIZE)
|
// MEMSET(ADDR, VALUE, SIZE)
|
||||||
// With optimizations from Peter Ferrie
|
// With optimizations from Peter Ferrie
|
||||||
//
|
//
|
||||||
asm memset
|
asm memset(addr,value,size)#0
|
||||||
LDA ESTKL+2,X
|
LDA ESTKL+2,X
|
||||||
STA DSTL
|
STA DSTL
|
||||||
LDA ESTKH+2,X
|
LDA ESTKH+2,X
|
||||||
@ -203,6 +203,7 @@ SETMLPH STA (DST),Y
|
|||||||
++ DEC ESTKH,X
|
++ DEC ESTKH,X
|
||||||
BNE -
|
BNE -
|
||||||
SETMEX INX
|
SETMEX INX
|
||||||
|
INX
|
||||||
INX
|
INX
|
||||||
RTS
|
RTS
|
||||||
end
|
end
|
||||||
@ -210,31 +211,32 @@ end
|
|||||||
// COPY MEMORY
|
// COPY MEMORY
|
||||||
// MEMCPY(DSTADDR, SRCADDR, SIZE)
|
// MEMCPY(DSTADDR, SRCADDR, SIZE)
|
||||||
//
|
//
|
||||||
asm memcpy
|
asm memcpy(dst,src,size)#0
|
||||||
INX
|
INX
|
||||||
INX
|
INX
|
||||||
LDA ESTKL-2,X
|
INX
|
||||||
ORA ESTKH-2,X
|
LDA ESTKL-3,X
|
||||||
|
ORA ESTKH-3,X
|
||||||
BEQ CPYMEX
|
BEQ CPYMEX
|
||||||
LDA ESTKL-1,X
|
LDA ESTKL-2,X
|
||||||
CMP ESTKL,X
|
CMP ESTKL-1,X
|
||||||
LDA ESTKH-1,X
|
LDA ESTKH-2,X
|
||||||
SBC ESTKH,X
|
SBC ESTKH-1,X
|
||||||
BCC REVCPY
|
BCC REVCPY
|
||||||
;
|
;
|
||||||
; FORWARD COPY
|
; FORWARD COPY
|
||||||
;
|
;
|
||||||
LDA ESTKL,X
|
LDA ESTKL-2,X
|
||||||
STA DSTL
|
STA DSTL
|
||||||
LDA ESTKH,X
|
LDA ESTKH-2,X
|
||||||
STA DSTH
|
STA DSTH
|
||||||
LDA ESTKL-1,X
|
LDA ESTKL-2,X
|
||||||
STA SRCL
|
STA SRCL
|
||||||
LDA ESTKH-1,X
|
LDA ESTKH-2,X
|
||||||
STA SRCH
|
STA SRCH
|
||||||
LDY ESTKL-2,X
|
LDY ESTKL-3,X
|
||||||
BEQ FORCPYLP
|
BEQ FORCPYLP
|
||||||
INC ESTKH-2,X
|
INC ESTKH-3,X
|
||||||
LDY #$00
|
LDY #$00
|
||||||
FORCPYLP LDA (SRC),Y
|
FORCPYLP LDA (SRC),Y
|
||||||
STA (DST),Y
|
STA (DST),Y
|
||||||
@ -242,34 +244,34 @@ FORCPYLP LDA (SRC),Y
|
|||||||
BNE +
|
BNE +
|
||||||
INC DSTH
|
INC DSTH
|
||||||
INC SRCH
|
INC SRCH
|
||||||
+ DEC ESTKL-2,X
|
+ DEC ESTKL-3,X
|
||||||
BNE FORCPYLP
|
BNE FORCPYLP
|
||||||
DEC ESTKH-2,X
|
DEC ESTKH-3,X
|
||||||
BNE FORCPYLP
|
BNE FORCPYLP
|
||||||
RTS
|
RTS
|
||||||
;
|
;
|
||||||
; REVERSE COPY
|
; REVERSE COPY
|
||||||
;
|
;
|
||||||
REVCPY ;CLC
|
REVCPY ;CLC
|
||||||
LDA ESTKL-2,X
|
LDA ESTKL-3,X
|
||||||
ADC ESTKL,X
|
ADC ESTKL-1,X
|
||||||
STA DSTL
|
STA DSTL
|
||||||
LDA ESTKH-2,X
|
LDA ESTKH-3,X
|
||||||
ADC ESTKH,X
|
ADC ESTKH-1,X
|
||||||
STA DSTH
|
STA DSTH
|
||||||
CLC
|
CLC
|
||||||
LDA ESTKL-2,X
|
LDA ESTKL-3,X
|
||||||
ADC ESTKL-1,X
|
ADC ESTKL-2,X
|
||||||
STA SRCL
|
STA SRCL
|
||||||
LDA ESTKH-2,X
|
LDA ESTKH-3,X
|
||||||
ADC ESTKH-1,X
|
ADC ESTKH-2,X
|
||||||
STA SRCH
|
STA SRCH
|
||||||
DEC DSTH
|
DEC DSTH
|
||||||
DEC SRCH
|
DEC SRCH
|
||||||
LDY #$FF
|
LDY #$FF
|
||||||
LDA ESTKL-2,X
|
LDA ESTKL-3,X
|
||||||
BEQ REVCPYLP
|
BEQ REVCPYLP
|
||||||
INC ESTKH-2,X
|
INC ESTKH-3,X
|
||||||
REVCPYLP LDA (SRC),Y
|
REVCPYLP LDA (SRC),Y
|
||||||
STA (DST),Y
|
STA (DST),Y
|
||||||
DEY
|
DEY
|
||||||
@ -277,9 +279,9 @@ REVCPYLP LDA (SRC),Y
|
|||||||
BNE +
|
BNE +
|
||||||
DEC DSTH
|
DEC DSTH
|
||||||
DEC SRCH
|
DEC SRCH
|
||||||
+ DEC ESTKL-2,X
|
+ DEC ESTKL-3,X
|
||||||
BNE REVCPYLP
|
BNE REVCPYLP
|
||||||
DEC ESTKH-2,X
|
DEC ESTKH-3,X
|
||||||
BNE REVCPYLP
|
BNE REVCPYLP
|
||||||
CPYMEX RTS
|
CPYMEX RTS
|
||||||
end
|
end
|
||||||
@ -288,7 +290,7 @@ end
|
|||||||
//
|
//
|
||||||
// MEMXCPY(DSTSEG, SRC, SIZE)
|
// MEMXCPY(DSTSEG, SRC, SIZE)
|
||||||
//
|
//
|
||||||
asm memxcpy
|
asm memxcpy(dst,src,size)#0
|
||||||
LDA ESTKL,X
|
LDA ESTKL,X
|
||||||
ORA ESTKH,X
|
ORA ESTKH,X
|
||||||
BEQ CPYXMEX
|
BEQ CPYXMEX
|
||||||
@ -320,6 +322,7 @@ CPYXLP LDA (SRC),Y
|
|||||||
LDA #$00
|
LDA #$00
|
||||||
STA DSTX
|
STA DSTX
|
||||||
CPYXMEX INX
|
CPYXMEX INX
|
||||||
|
INX
|
||||||
INX
|
INX
|
||||||
RTS
|
RTS
|
||||||
end
|
end
|
||||||
@ -328,7 +331,7 @@ end
|
|||||||
//
|
//
|
||||||
// XPOKEB(SEG, DST, BYTEVAL)
|
// XPOKEB(SEG, DST, BYTEVAL)
|
||||||
//
|
//
|
||||||
asm xpokeb
|
asm xpokeb(seg, dst, byteval)#0
|
||||||
LDA ESTKL+1,X
|
LDA ESTKL+1,X
|
||||||
STA DSTL
|
STA DSTL
|
||||||
LDA ESTKH+1,X
|
LDA ESTKH+1,X
|
||||||
@ -345,12 +348,13 @@ asm xpokeb
|
|||||||
STY DSTX
|
STY DSTX
|
||||||
INX
|
INX
|
||||||
INX
|
INX
|
||||||
|
INX
|
||||||
RTS
|
RTS
|
||||||
end
|
end
|
||||||
//
|
//
|
||||||
// Unsigned word comparisons.
|
// Unsigned word comparisons.
|
||||||
//
|
//
|
||||||
asm uword_isge
|
asm uword_isge(a,b)#1
|
||||||
LDA ESTKL+1,X
|
LDA ESTKL+1,X
|
||||||
CMP ESTKL,X
|
CMP ESTKL,X
|
||||||
LDA ESTKH+1,X
|
LDA ESTKH+1,X
|
||||||
@ -363,7 +367,7 @@ asm uword_isge
|
|||||||
INX
|
INX
|
||||||
RTS
|
RTS
|
||||||
end
|
end
|
||||||
asm uword_isle
|
asm uword_isle(a,b)#1
|
||||||
LDA ESTKL,X
|
LDA ESTKL,X
|
||||||
CMP ESTKL+1,X
|
CMP ESTKL+1,X
|
||||||
LDA ESTKH,X
|
LDA ESTKH,X
|
||||||
@ -376,7 +380,7 @@ asm uword_isle
|
|||||||
INX
|
INX
|
||||||
RTS
|
RTS
|
||||||
end
|
end
|
||||||
asm uword_isgt
|
asm uword_isgt(a,b)#1
|
||||||
LDA ESTKL,X
|
LDA ESTKL,X
|
||||||
CMP ESTKL+1,X
|
CMP ESTKL+1,X
|
||||||
LDA ESTKH,X
|
LDA ESTKH,X
|
||||||
@ -388,7 +392,7 @@ asm uword_isgt
|
|||||||
INX
|
INX
|
||||||
RTS
|
RTS
|
||||||
end
|
end
|
||||||
asm uword_islt
|
asm uword_islt(a,b)#1
|
||||||
LDA ESTKL+1,X
|
LDA ESTKL+1,X
|
||||||
CMP ESTKL,X
|
CMP ESTKL,X
|
||||||
LDA ESTKH+1,X
|
LDA ESTKH+1,X
|
||||||
@ -403,7 +407,7 @@ end
|
|||||||
//
|
//
|
||||||
// Addresses of internal routines.
|
// Addresses of internal routines.
|
||||||
//
|
//
|
||||||
asm interp
|
asm interp()#1
|
||||||
DEX
|
DEX
|
||||||
LDA #<XINTERP
|
LDA #<XINTERP
|
||||||
STA ESTKL,X
|
STA ESTKL,X
|
||||||
@ -426,7 +430,7 @@ end
|
|||||||
// ^str = len
|
// ^str = len
|
||||||
// return len
|
// return len
|
||||||
//end
|
//end
|
||||||
asm dcitos
|
asm dcitos(dci, str)#1
|
||||||
LDA ESTKL,X
|
LDA ESTKL,X
|
||||||
STA DSTL
|
STA DSTL
|
||||||
LDA ESTKH,X
|
LDA ESTKH,X
|
||||||
@ -466,7 +470,7 @@ end
|
|||||||
// loop
|
// loop
|
||||||
// return ^str
|
// return ^str
|
||||||
//end
|
//end
|
||||||
asm stodci
|
asm stodci(str, dci)#1
|
||||||
LDA ESTKL,X
|
LDA ESTKL,X
|
||||||
STA DSTL
|
STA DSTL
|
||||||
LDA ESTKH,X
|
LDA ESTKH,X
|
||||||
@ -494,7 +498,7 @@ asm stodci
|
|||||||
STY ESTKH,X
|
STY ESTKH,X
|
||||||
RTS
|
RTS
|
||||||
end
|
end
|
||||||
asm toupper
|
asm toupper(c)#1
|
||||||
LDA ESTKL,X
|
LDA ESTKL,X
|
||||||
TOUPR AND #$7F
|
TOUPR AND #$7F
|
||||||
CMP #'a'
|
CMP #'a'
|
||||||
@ -521,7 +525,7 @@ end
|
|||||||
// until !(c & $80)
|
// until !(c & $80)
|
||||||
// return dci
|
// return dci
|
||||||
//end
|
//end
|
||||||
asm modtosym
|
asm modtosym(mod, dci)#1
|
||||||
LDA ESTKL+1,X
|
LDA ESTKL+1,X
|
||||||
STA SRCL
|
STA SRCL
|
||||||
LDA ESTKH+1,X
|
LDA ESTKH+1,X
|
||||||
@ -562,7 +566,7 @@ end
|
|||||||
// tbl = tbl + 3
|
// tbl = tbl + 3
|
||||||
// loop
|
// loop
|
||||||
// return 0
|
// return 0
|
||||||
asm lookuptbl
|
asm lookuptbl(dci, tbl)#1
|
||||||
LDY #$00
|
LDY #$00
|
||||||
STY DSTL
|
STY DSTL
|
||||||
LDA ESTKH,X
|
LDA ESTKH,X
|
||||||
@ -615,7 +619,7 @@ end
|
|||||||
// SOS routines
|
// SOS routines
|
||||||
// FILE I/O
|
// FILE I/O
|
||||||
//
|
//
|
||||||
def getpfx(path)
|
def getpfx(path)#1
|
||||||
byte params[4]
|
byte params[4]
|
||||||
|
|
||||||
^path = 0
|
^path = 0
|
||||||
@ -625,7 +629,7 @@ def getpfx(path)
|
|||||||
perr = syscall($C7, @params)
|
perr = syscall($C7, @params)
|
||||||
return path
|
return path
|
||||||
end
|
end
|
||||||
def setpfx(path)
|
def setpfx(path)#1
|
||||||
byte params[3]
|
byte params[3]
|
||||||
|
|
||||||
params.0 = 1
|
params.0 = 1
|
||||||
@ -633,7 +637,7 @@ def setpfx(path)
|
|||||||
perr = syscall($C6, @params)
|
perr = syscall($C6, @params)
|
||||||
return path
|
return path
|
||||||
end
|
end
|
||||||
def volume(devname, volname, ttlblks, freblks)
|
def volume(devname, volname, ttlblks, freblks)#1
|
||||||
byte params[9]
|
byte params[9]
|
||||||
|
|
||||||
params.0 = 4
|
params.0 = 4
|
||||||
@ -646,7 +650,7 @@ def volume(devname, volname, ttlblks, freblks)
|
|||||||
*freblks = params:7
|
*freblks = params:7
|
||||||
return perr
|
return perr
|
||||||
end
|
end
|
||||||
def open(path, access)
|
def open(path, access)#1
|
||||||
byte params[7]
|
byte params[7]
|
||||||
|
|
||||||
params.0 = 4
|
params.0 = 4
|
||||||
@ -657,7 +661,7 @@ def open(path, access)
|
|||||||
perr = syscall($C8, @params)
|
perr = syscall($C8, @params)
|
||||||
return params.3
|
return params.3
|
||||||
end
|
end
|
||||||
def close(refnum)
|
def close(refnum)#1
|
||||||
byte params[2]
|
byte params[2]
|
||||||
|
|
||||||
params.0 = 1
|
params.0 = 1
|
||||||
@ -665,7 +669,7 @@ def close(refnum)
|
|||||||
perr = syscall($CC, @params)
|
perr = syscall($CC, @params)
|
||||||
return perr
|
return perr
|
||||||
end
|
end
|
||||||
def read(refnum, buff, len)
|
def read(refnum, buff, len)#1
|
||||||
byte params[8]
|
byte params[8]
|
||||||
|
|
||||||
params.0 = 4
|
params.0 = 4
|
||||||
@ -676,7 +680,7 @@ def read(refnum, buff, len)
|
|||||||
perr = syscall($CA, @params)
|
perr = syscall($CA, @params)
|
||||||
return params:6
|
return params:6
|
||||||
end
|
end
|
||||||
def write(refnum, buff, len)
|
def write(refnum, buff, len)#1
|
||||||
byte params[6]
|
byte params[6]
|
||||||
|
|
||||||
params.0 = 3
|
params.0 = 3
|
||||||
@ -689,7 +693,7 @@ end
|
|||||||
//
|
//
|
||||||
// DEVICE I/O
|
// DEVICE I/O
|
||||||
//
|
//
|
||||||
def dev_control(devnum, code, list)
|
def dev_control(devnum, code, list)#1
|
||||||
byte params[5]
|
byte params[5]
|
||||||
|
|
||||||
params.0 = 3
|
params.0 = 3
|
||||||
@ -699,7 +703,7 @@ def dev_control(devnum, code, list)
|
|||||||
perr = syscall($83, @params)
|
perr = syscall($83, @params)
|
||||||
return perr
|
return perr
|
||||||
end
|
end
|
||||||
def dev_getnum(name)
|
def dev_getnum(name)#1
|
||||||
byte params[4]
|
byte params[4]
|
||||||
|
|
||||||
params.0 = 2
|
params.0 = 2
|
||||||
@ -708,7 +712,7 @@ def dev_getnum(name)
|
|||||||
perr = syscall($84, @params)
|
perr = syscall($84, @params)
|
||||||
return params.3
|
return params.3
|
||||||
end
|
end
|
||||||
def dev_info(devnum, name, list, listlen)
|
def dev_info(devnum, name, list, listlen)#1
|
||||||
byte params[7]
|
byte params[7]
|
||||||
|
|
||||||
params.0 = 4
|
params.0 = 4
|
||||||
@ -722,7 +726,7 @@ end
|
|||||||
//
|
//
|
||||||
// MEMORY CALLS
|
// MEMORY CALLS
|
||||||
//
|
//
|
||||||
def seg_request(base, limit, id)
|
def seg_request(base, limit, id)#1
|
||||||
byte params[7]
|
byte params[7]
|
||||||
|
|
||||||
params.0 = 4
|
params.0 = 4
|
||||||
@ -733,7 +737,7 @@ def seg_request(base, limit, id)
|
|||||||
perr = syscall($40, @params)
|
perr = syscall($40, @params)
|
||||||
return params.6
|
return params.6
|
||||||
end
|
end
|
||||||
def seg_find(search, base, limit, pages, id)
|
def seg_find(search, base, limit, pages, id)#1
|
||||||
byte params[10]
|
byte params[10]
|
||||||
|
|
||||||
params.0 = 6
|
params.0 = 6
|
||||||
@ -748,7 +752,7 @@ def seg_find(search, base, limit, pages, id)
|
|||||||
*limit = params:7
|
*limit = params:7
|
||||||
return params.9
|
return params.9
|
||||||
end
|
end
|
||||||
def seg_release(segnum)
|
def seg_release(segnum)#1
|
||||||
byte params[2]
|
byte params[2]
|
||||||
|
|
||||||
params.0 = 1
|
params.0 = 1
|
||||||
@ -759,7 +763,7 @@ end
|
|||||||
//
|
//
|
||||||
// Other SOS calls.
|
// Other SOS calls.
|
||||||
//
|
//
|
||||||
def quit
|
def quit()#0
|
||||||
byte params[1]
|
byte params[1]
|
||||||
|
|
||||||
close(0)
|
close(0)
|
||||||
@ -770,7 +774,7 @@ end
|
|||||||
//
|
//
|
||||||
// CONSOLE I/O
|
// CONSOLE I/O
|
||||||
//
|
//
|
||||||
def init_cons
|
def init_cons()#0
|
||||||
byte nlmode[2]
|
byte nlmode[2]
|
||||||
if !refcons
|
if !refcons
|
||||||
refcons = open(@console, O_READ_WRITE)
|
refcons = open(@console, O_READ_WRITE)
|
||||||
@ -781,7 +785,7 @@ def init_cons
|
|||||||
nlmode.1 = $0D
|
nlmode.1 = $0D
|
||||||
dev_control(devcons, $02, @nlmode)
|
dev_control(devcons, $02, @nlmode)
|
||||||
end
|
end
|
||||||
def cout(ch)
|
def cout(ch)#0
|
||||||
if ch == $0D
|
if ch == $0D
|
||||||
ch = $0A0D
|
ch = $0A0D
|
||||||
write(refcons, @ch, 2)
|
write(refcons, @ch, 2)
|
||||||
@ -789,18 +793,18 @@ def cout(ch)
|
|||||||
write(refcons, @ch, 1)
|
write(refcons, @ch, 1)
|
||||||
fin
|
fin
|
||||||
end
|
end
|
||||||
def cin
|
def cin()#1
|
||||||
byte ch
|
byte ch
|
||||||
read(refcons, @ch, 1)
|
read(refcons, @ch, 1)
|
||||||
return ch & $7F
|
return ch & $7F
|
||||||
end
|
end
|
||||||
def prstr(str)
|
def prstr(str)#0
|
||||||
write(refcons, str + 1, ^str)
|
write(refcons, str + 1, ^str)
|
||||||
if str->[^str] == $0D
|
if str->[^str] == $0D
|
||||||
cout($0A)
|
cout($0A)
|
||||||
fin
|
fin
|
||||||
end
|
end
|
||||||
def rdstr(prompt)
|
def rdstr(prompt)#1
|
||||||
cout(prompt)
|
cout(prompt)
|
||||||
^heap = read(refcons, heap + 1, 128)
|
^heap = read(refcons, heap + 1, 128)
|
||||||
if heap->[^heap] == $0D
|
if heap->[^heap] == $0D
|
||||||
@ -809,25 +813,25 @@ def rdstr(prompt)
|
|||||||
cout($0D)
|
cout($0D)
|
||||||
return heap
|
return heap
|
||||||
end
|
end
|
||||||
def crout
|
def crout()#0
|
||||||
return cout($0D)
|
cout($0D)
|
||||||
end
|
end
|
||||||
def prbyte(v)
|
def prbyte(v)#0
|
||||||
cout(hexchar[(v >> 4) & $0F])
|
cout(hexchar[(v >> 4) & $0F])
|
||||||
return cout(hexchar[v & $0F])
|
cout(hexchar[v & $0F])
|
||||||
end
|
end
|
||||||
def prword(v)
|
def prword(v)#0
|
||||||
prbyte(v >> 8)
|
prbyte(v >> 8)
|
||||||
return prbyte(v)
|
prbyte(v)
|
||||||
end
|
end
|
||||||
//
|
//
|
||||||
// Heap routines.
|
// Heap routines.
|
||||||
//
|
//
|
||||||
def availheap
|
def availheap()#1
|
||||||
byte fp
|
byte fp
|
||||||
return @fp - heap
|
return @fp - heap
|
||||||
end
|
end
|
||||||
def allocheap(size)
|
def allocheap(size)#1
|
||||||
word addr
|
word addr
|
||||||
addr = heap
|
addr = heap
|
||||||
heap = heap + size
|
heap = heap + size
|
||||||
@ -836,7 +840,7 @@ def allocheap(size)
|
|||||||
fin
|
fin
|
||||||
return addr
|
return addr
|
||||||
end
|
end
|
||||||
def allocalignheap(size, pow2, freeaddr)
|
def allocalignheap(size, pow2, freeaddr)#1
|
||||||
word align, addr
|
word align, addr
|
||||||
if freeaddr
|
if freeaddr
|
||||||
*freeaddr = heap
|
*freeaddr = heap
|
||||||
@ -849,20 +853,20 @@ def allocalignheap(size, pow2, freeaddr)
|
|||||||
fin
|
fin
|
||||||
return addr
|
return addr
|
||||||
end
|
end
|
||||||
def markheap
|
def markheap()#1
|
||||||
return heap
|
return heap
|
||||||
end
|
end
|
||||||
def releaseheap(newheap)
|
def releaseheap(newheap)#1
|
||||||
heap = newheap
|
heap = newheap
|
||||||
return @newheap - heap
|
return @newheap - heap
|
||||||
end
|
end
|
||||||
//
|
//
|
||||||
// Symbol table routines.
|
// Symbol table routines.
|
||||||
//
|
//
|
||||||
def lookupsym(sym)
|
def lookupsym(sym)#1
|
||||||
return lookuptbl(sym, symtbl)
|
return lookuptbl(sym, symtbl)
|
||||||
end
|
end
|
||||||
def addsym(sym, addr)
|
def addsym(sym, addr)#0
|
||||||
while ^sym & $80
|
while ^sym & $80
|
||||||
xpokeb(symtbl.0, lastsym, ^sym)
|
xpokeb(symtbl.0, lastsym, ^sym)
|
||||||
lastsym = lastsym + 1
|
lastsym = lastsym + 1
|
||||||
@ -877,20 +881,20 @@ end
|
|||||||
//
|
//
|
||||||
// Module routines.
|
// Module routines.
|
||||||
//
|
//
|
||||||
def lookupmod(mod)
|
def lookupmod(mod)#1
|
||||||
byte dci[17]
|
byte dci[17]
|
||||||
return lookuptbl(modtosym(mod, @dci), symtbl)
|
return lookuptbl(modtosym(mod, @dci), symtbl)
|
||||||
end
|
end
|
||||||
def lookupstrmod(str)
|
def lookupstrmod(str)#1
|
||||||
byte mod[17]
|
byte mod[17]
|
||||||
stodci(str, @mod)
|
stodci(str, @mod)
|
||||||
return lookupmod(@mod)
|
return lookupmod(@mod)
|
||||||
end
|
end
|
||||||
def addmod(mod, addr)
|
def addmod(mod, addr)#0
|
||||||
byte dci[17]
|
byte dci[17]
|
||||||
return addsym(modtosym(mod, @dci), addr)
|
addsym(modtosym(mod, @dci), addr)
|
||||||
end
|
end
|
||||||
def lookupextern(esd, index)
|
def lookupextern(esd, index)#1
|
||||||
word sym, addr
|
word sym, addr
|
||||||
byte str[16]
|
byte str[16]
|
||||||
while ^esd
|
while ^esd
|
||||||
@ -910,7 +914,7 @@ def lookupextern(esd, index)
|
|||||||
loop
|
loop
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
def adddef(ext, addr, deflast)
|
def adddef(ext, addr, deflast)#1
|
||||||
word defentry
|
word defentry
|
||||||
defentry = *deflast
|
defentry = *deflast
|
||||||
*deflast = defentry + 6
|
*deflast = defentry + 6
|
||||||
@ -920,7 +924,7 @@ def adddef(ext, addr, deflast)
|
|||||||
defentry=>5 = ext // ext is byte, so this nulls out next entry
|
defentry=>5 = ext // ext is byte, so this nulls out next entry
|
||||||
return defentry
|
return defentry
|
||||||
end
|
end
|
||||||
def lookupdef(addr, deftbl)
|
def lookupdef(addr, deftbl)#1
|
||||||
while deftbl->0 == $20
|
while deftbl->0 == $20
|
||||||
if deftbl=>3 == addr
|
if deftbl=>3 == addr
|
||||||
return deftbl
|
return deftbl
|
||||||
@ -929,7 +933,7 @@ def lookupdef(addr, deftbl)
|
|||||||
loop
|
loop
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
def loadmod(mod)
|
def loadmod(mod)#1
|
||||||
word refnum, rdlen, modsize, bytecode, defofst, defcnt, init, fixup
|
word refnum, rdlen, modsize, bytecode, defofst, defcnt, init, fixup
|
||||||
word addr, defaddr, modaddr, modfix, modend
|
word addr, defaddr, modaddr, modfix, modend
|
||||||
word deftbl, deflast, codeseg
|
word deftbl, deflast, codeseg
|
||||||
@ -1121,7 +1125,7 @@ end
|
|||||||
//
|
//
|
||||||
// Command mode
|
// Command mode
|
||||||
//
|
//
|
||||||
def volumes
|
def volumes()#0
|
||||||
byte info[11]
|
byte info[11]
|
||||||
byte devname[17]
|
byte devname[17]
|
||||||
byte volname[17]
|
byte volname[17]
|
||||||
@ -1141,7 +1145,7 @@ def volumes
|
|||||||
next
|
next
|
||||||
perr = 0
|
perr = 0
|
||||||
end
|
end
|
||||||
def catalog(optpath)
|
def catalog(optpath)#1
|
||||||
byte path[64]
|
byte path[64]
|
||||||
byte refnum
|
byte refnum
|
||||||
byte firstblk
|
byte firstblk
|
||||||
@ -1202,14 +1206,14 @@ def catalog(optpath)
|
|||||||
crout()
|
crout()
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
def stripchars(strptr)
|
def stripchars(strptr)#1
|
||||||
while ^strptr and ^(strptr + 1) <> ' '
|
while ^strptr and ^(strptr + 1) <> ' '
|
||||||
memcpy(strptr + 1, strptr + 2, ^strptr)
|
memcpy(strptr + 1, strptr + 2, ^strptr)
|
||||||
^strptr = ^strptr - 1
|
^strptr = ^strptr - 1
|
||||||
loop
|
loop
|
||||||
return ^strptr
|
return ^strptr
|
||||||
end
|
end
|
||||||
def stripspaces(strptr)
|
def stripspaces(strptr)#0
|
||||||
while ^strptr and ^(strptr + ^strptr) <= ' '
|
while ^strptr and ^(strptr + ^strptr) <= ' '
|
||||||
^strptr = ^strptr - 1
|
^strptr = ^strptr - 1
|
||||||
loop
|
loop
|
||||||
@ -1218,7 +1222,7 @@ def stripspaces(strptr)
|
|||||||
^strptr = ^strptr - 1
|
^strptr = ^strptr - 1
|
||||||
loop
|
loop
|
||||||
end
|
end
|
||||||
def striptrail(strptr)
|
def striptrail(strptr)#0
|
||||||
byte i
|
byte i
|
||||||
|
|
||||||
for i = 1 to ^strptr
|
for i = 1 to ^strptr
|
||||||
@ -1228,7 +1232,7 @@ def striptrail(strptr)
|
|||||||
fin
|
fin
|
||||||
next
|
next
|
||||||
end
|
end
|
||||||
def parsecmd(strptr)
|
def parsecmd(strptr)#1
|
||||||
byte cmd
|
byte cmd
|
||||||
|
|
||||||
cmd = 0
|
cmd = 0
|
||||||
@ -1241,7 +1245,7 @@ def parsecmd(strptr)
|
|||||||
stripspaces(strptr)
|
stripspaces(strptr)
|
||||||
return cmd
|
return cmd
|
||||||
end
|
end
|
||||||
def execmod(modfile)
|
def execmod(modfile)#1
|
||||||
byte moddci[17]
|
byte moddci[17]
|
||||||
word saveheap, savesym, saveflags
|
word saveheap, savesym, saveflags
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user