1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2026-04-19 09:23:06 +00:00

Use cmdsys.plh include file

This commit is contained in:
Dave Schmenk
2017-11-11 06:50:06 -08:00
parent 50c72063dd
commit e9191c20d8
31 changed files with 950 additions and 1564 deletions
+4 -7
View File
@@ -1,7 +1,4 @@
import STDLIB
predef syscall, call, memset, getc, putc, puts, modaddr
byte MACHID
end
include "inc/cmdsys.plh"
//
// Handy constants.
//
@@ -200,7 +197,7 @@ def a2writeln(string, start, fill)
end
def a2textmode(columns)
call($FB39, 0, 0, 0, 0) // textmode()
return a2home
return a2home
end
def a2grmode(mix)
call($FB2F, 0, 0, 0, 0) // initmode()
@@ -216,7 +213,7 @@ end
//
def dev_control(devnum, code, list)
byte params[5]
params.0 = 3
params.1 = devnum
params.2 = code
@@ -225,7 +222,7 @@ def dev_control(devnum, code, list)
end
def dev_status(devnum, code, list)
byte params[5]
params.0 = 3
params.1 = devnum
params.2 = code
+1 -15
View File
@@ -1,18 +1,4 @@
import cmdsys
predef puts, memset, memcpy, heapmark, heapalloc, heaprelease, call
byte MACHID
//
// System flags: memory allocator screen holes.
//
const restxt1 = $0001
const restxt2 = $0002
const resxtxt1 = $0004
const resxtxt2 = $0008
const reshgr1 = $0010
const reshgr2 = $0020
const resxhgr1 = $0040
const resxhgr2 = $0080
end
include "inc/cmdsys.plh"
sysflags $000F // Reserve all text pages
//
// Apple II hardware constants.
+5 -10
View File
@@ -1,12 +1,7 @@
//
// DHCP
//
import cmdsys
predef syscall, call, getc, gets, putc, puts, putln
predef memset, memcpy, modaddr, modexec
predef heapmark, heapallocalign, heapalloc, heaprelease
byte MACHID
end
include "inc/cmdsys.plh"
//
// Net object
//
@@ -136,7 +131,7 @@ def puti(i)
end
def putip(ipptr)
byte i
for i = 0 to 2
puti(ipptr->[i]); putc('.')
next
@@ -144,7 +139,7 @@ def putip(ipptr)
end
def dumpbytes(buf, len)
word i
for i = 0 to len - 1
putb(buf->[i])
if i & 15 == 15
@@ -168,7 +163,7 @@ def dumpdhcp(pkt)
end
def parseopts(opts, match)
byte i
i = 0
while opts->[i] <> $FF and i < 64
while !opts->[i] and i < 64
@@ -183,7 +178,7 @@ def parseopts(opts, match)
end
def recvDHCP(remip, remport, pkt, len, param)
word servopts, maskopts, gwopts, dnsopts
//putip(remip);putc(':');puti(remport);putln
//dumpdhcp(pkt)
if pkt=>dhcp_xid:0 == $0201 and pkt=>dhcp_xid:2 == $0403
+5 -16
View File
@@ -1,15 +1,4 @@
import cmdsys
predef syscall, call, getc, gets, putc, puts, putln
predef isugt, isuge, isult, isule
predef memset, memcpy, modaddr, modexec
predef heapmark, heapallocalign, heapalloc, heaprelease, heapavail
byte MACHID
//
// Module don't free memory
//
const modkeep = $2000
const modinitkeep = $4000
end
include "inc/cmdsys.plh"
//
// Net object
//
@@ -244,7 +233,7 @@ CHKLP LDA (SRC),Y
STA ESTKH+2,X
PLA
ADC ESTKL+2,X
STA ESTKL+2,X
STA ESTKL+2,X
INY
BNE +
INC SRCH
@@ -268,7 +257,7 @@ def etherSendIP(ipdst, proto, seglist, size)
byte[t_iphdr] hdr
byte retry
word timeout
hdr.ip_vers_hlen = $45
hdr.ip_service = 0
hdr:ip_length = swab(t_iphdr + size)
@@ -340,7 +329,7 @@ end
def etherSendUDP(port, ipdst, portdst, data, len)
word[8] seglist // list of data and header segments
byte[t_udphdr] hdr
hdr:udp_src = swab(port=>notify_port)
hdr:udp_dst = swab(portdst)
hdr:udp_len = swab(t_udphdr + len)
@@ -391,7 +380,7 @@ end
def etherCloseUDP(port)
word port
byte i
if isuge(port, @portsUDP) and isult(port, @portsUDP + MAX_UDP_NOTIFIES * t_notify)
//
// Clear notiications on this port
+1 -7
View File
@@ -1,13 +1,7 @@
//
// Cooperative multi-threading (fiber) scheduler
//
import cmdsys
predef syscall, call, getc, gets, putc, puts, putln
predef memset, memcpy, modaddr, modexec
predef heapmark, heapallocalign, heapalloc, heaprelease
predef isugt, isuge, isult, isule
byte MACHID
end
include "inc/cmdsys.plh"
//
// Maximum number of fibers
//
+253 -330
View File
@@ -1,14 +1,9 @@
//
// Handle based swapping memory manager
//
import cmdsys
predef syscall, call, getc, gets, putc, puts, putln
predef memset, memcpy, modaddr, modexec
predef heapmark, heapallocalign, heapalloc, heaprelease
predef isugt, isuge, isult, isule
byte MACHID
end
const iobuffer = $0800
include "inc/cmdsys.plh"
include "inc/fileio.plh"
struc t_initdata
word volptr
word freeblks
@@ -88,7 +83,7 @@ word frelst // Free list
byte sweeppg, sweepen
byte[64] swapvol = "/" // Swap volume
byte swapdir = "/SWAP/"
byte hexchar = '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
byte hexchar = '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
//
// DEBUG
//
@@ -109,11 +104,11 @@ byte hexchar = '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
//
// Fill block filename
//
def strcharadd(str, char)
def strcharadd(str, char)#0
^str = ^str + 1
str->.[^str] = char
end
def swapfile(filestr, hmem)
def swapfile(filestr, hmem)#0
memcpy(filestr, @swapvol, swapvol + 1)
strcharadd(filestr, 'H')
strcharadd(filestr, hexchar[(hmem >> 12) & $0F])
@@ -121,78 +116,6 @@ def swapfile(filestr, hmem)
strcharadd(filestr, hexchar[(hmem >> 4) & $0F])
strcharadd(filestr, hexchar[ hmem & $0F])
end
def open(path)
byte params[6]
params.0 = 3
params:1 = path
params:3 = iobuffer
params.5 = 0
syscall($C8, @params)
return params.5
end
def close(refnum)
byte params[2]
params.0 = 1
params.1 = refnum
return syscall($CC, @params)
end
def read(refnum, buff, len)
byte params[8]
params.0 = 4
params.1 = refnum
params:2 = buff
params:4 = len
params:6 = 0
syscall($CA, @params)
return params:6
end
def write(refnum, buff, len)
byte params[8]
params.0 = 4
params.1 = refnum
params:2 = buff
params:4 = len
params:6 = 0
syscall($CB, @params)
return params:6
end
def get_info(path, infoptr)
byte params[18]
memset(@params, 0, 18)
params.0 = 10
params:1 = path
syscall($C4, @params)
return memcpy(infoptr, @params.3, 15)
end
def create(path, access, type, aux)
byte params[12], kind
kind = $01
if type == $0F
kind = $0D
fin
params.0 = 7
params:1 = path
params.3 = access
params.4 = type
params:5 = aux
params.7 = kind
params:8 = 0
params:10 = 0
return syscall($C0, @params)
end
def destroy(path)
byte params[12]
params.0 = 1
params:1 = path
return syscall($C1, @params)
end
//
// Find exact/best free memory match
//
@@ -209,7 +132,7 @@ def unlink(freblk, freprv)
end
def unfre(freblk, freprv, size)
word shrink
if freblk=>fresiz == size
//
// Unlink free block
@@ -234,32 +157,32 @@ def unfre(freblk, freprv, size)
end
def addfre(freblk)
word srch
//freblk=>fresiz = freblk=>blksiz
if frelst and frelst < freblk
srch = frelst
while srch=>frenxt
if srch=>frenxt > freblk
//
// Insert into list
//
freblk=>frenxt = srch=>frenxt
srch=>frenxt = freblk
//
// Insert into list
//
freblk=>frenxt = srch=>frenxt
srch=>frenxt = freblk
return
fin
fin
srch = srch=>frenxt
loop
//
// Add to end of list
//
freblk=>frenxt = 0
srch=>frenxt = freblk
//
// Add to end of list
//
freblk=>frenxt = 0
srch=>frenxt = freblk
else
//
// Add to beginning of list
//
// Add to beginning of list
//
freblk=>frenxt = frelst
frelst = freblk
frelst = freblk
fin
end
//
@@ -267,58 +190,58 @@ end
//
def coallesce
word srch, combined
combined = 0
srch = frelst
while srch and srch=>frenxt
if srch + srch=>fresiz == srch=>frenxt
//
// Combine adjacent free space
//
//putc('C');putc(' ');puth(srch);putc('+');puth(srch=>frenxt);putc(' ')
//
// Combine adjacent free space
//
//putc('C');putc(' ');puth(srch);putc('+');puth(srch=>frenxt);putc(' ')
srch=>fresiz = srch=>fresiz + srch=>frenxt=>fresiz
srch=>frenxt = srch=>frenxt=>frenxt
srch=>frenxt = srch=>frenxt=>frenxt
combined = 1
else
srch = srch=>frenxt
fin
fin
loop
return combined
end
def compact
word page, entry, memblk, moveblk, size, srch, prev
byte moved
moved = 0
for page = PG_TBL_SIZE - 1 downto 0
if hpgtbl[page]
for entry = 255 downto 0
if hpgtbl:[page, entry].lsb & HMEM_STATE == HMEM_MOVEABLE
if hpgtbl:[page, entry].lsb & HMEM_STATE == HMEM_MOVEABLE
memblk = hpgtbl:[page, entry]
size = memblk=>blksiz
moveblk = 0
prev = 0
size = memblk=>blksiz
moveblk = 0
prev = 0
srch = frelst
while srch and srch < memblk
while srch and srch < memblk
if srch=>fresiz >= size
moveblk = unfre(srch, prev, size)
break
fin
prev = srch
srch = srch=>frenxt
loop
if moveblk
//putc('M');putc(' ');puth(moveblk);putc('=');puth(memblk);putc(' ')
memcpy(moveblk, memblk, size)
hpgtbl:[page, entry] = moveblk
addfre(memblk)
moved = 1
fin
fin
moveblk = unfre(srch, prev, size)
break
fin
prev = srch
srch = srch=>frenxt
loop
if moveblk
//putc('M');putc(' ');puth(moveblk);putc('=');puth(memblk);putc(' ')
memcpy(moveblk, memblk, size)
hpgtbl:[page, entry] = moveblk
addfre(memblk)
moved = 1
fin
fin
next
else
break
fin
fin
next
if moved
coallesce
@@ -333,40 +256,40 @@ def swapout(accessed)
byte ref
word page, entry, memblk, hmem, size
byte swapped
swapped = 0
for page = PG_TBL_SIZE - 1 downto 0
if hpgtbl[page]
for entry = 255 downto 0
if hpgtbl:[page, entry].lsb & HMEM_STATE == HMEM_MOVEABLE
if hpgtbl:[page, entry].lsb & HMEM_STATE == HMEM_MOVEABLE
memblk = hpgtbl:[page, entry]
if not (memblk->blklok & accessed)
//
// Swap this block out
//
if not (memblk->blklok & accessed)
//
// Swap this block out
//
size = memblk=>blksiz
hmem.lsb = page
hmem.msb = entry
swapfile(@filename, hmem)
create(@filename, $C3, $00, size) // embed size in aux type
hmem.lsb = page
hmem.msb = entry
swapfile(@filename, hmem)
create(@filename, $C3, $00, size) // embed size in aux type
//puts(@swapoutstr);puts(@filename);putc('@');puth(memblk);putc(':');puth(size);putln
ref = open(@filename)
if ref
//
// Write it out
//
if write(ref, memblk, size) == size
//
// Zero size in page table flags swapin to read from disk
//
hpgtbl:[page, entry] = HMEM_SWAPPED
addfre(memblk)
swapped = 1
fin
close(ref)
fin
fin
fin
ref = open(@filename)
if ref
//
// Write it out
//
if write(ref, memblk, size) == size
//
// Zero size in page table flags swapin to read from disk
//
hpgtbl:[page, entry] = HMEM_SWAPPED
addfre(memblk)
swapped = 1
fin
close(ref)
fin
fin
fin
next
else
break
@@ -389,46 +312,46 @@ def findexact(size)
while srch
if srch=>fresiz == size
//putc('E')
return unlink(srch, prev)
fin
prev = srch
return unlink(srch, prev)
fin
prev = srch
srch = srch=>frenxt
loop
end
def findbest(size)
word srch, prev
prev = 0
srch = frelst
while srch
if srch=>fresiz >= size
//putc('B')
return unfre(srch, prev, size)
fin
prev = srch
return unfre(srch, prev, size)
fin
prev = srch
srch = srch=>frenxt
loop
end
def findblk(size)
word addr
if size > MAX_BLK_SIZE; return 0; fin
addr = findexact(size)
if !addr
coallesce
addr = findexact(size)
if !addr
compact
addr = findbest(size)
if !addr
swapout(HMEM_ACCESSED)
addr = findbest(size)
if !addr
swapout(0)
addr = findbest(size)
fin
fin
fin
addr = findexact(size)
if !addr
compact
addr = findbest(size)
if !addr
swapout(HMEM_ACCESSED)
addr = findbest(size)
if !addr
swapout(0)
addr = findbest(size)
fin
fin
fin
fin
//
// Fill in the block
@@ -436,8 +359,8 @@ def findblk(size)
//puts(@getblkstr);puth(addr);putc(':');puth(size);putln
if addr
addr=>blksiz = size
addr->blkref = 1
addr->blklok = 0
addr->blkref = 1
addr->blklok = 0
fin
return addr
end
@@ -449,33 +372,33 @@ def swapin(hmem)
byte[15] info
byte ref
word memblk, size
size = hpgtbl:[hmem.lsb, hmem.msb] & HMEM_SIZE
if size
//
// This was just uninitialized memory, don't bother reading from file
//
// This was just uninitialized memory, don't bother reading from file
//
memblk = findblk(size)
else
//
// Swap this block back in
//
swapfile(@filename, hmem)
get_info(@filename, @info)
size = info:2 // Size encoded in aux type
// Swap this block back in
//
swapfile(@filename, hmem)
get_info(@filename, @info)
size = info:2 // Size encoded in aux type
memblk = findblk(size)
//puts(@swapinstr);puts(@filename);putc('@');puth(memblk);putc(':');puth(size);putln
if memblk
//
// Read it in
//
ref = open(@filename)
if ref
read(ref, memblk, size)
close(ref)
destroy(@filename)
fin
fin
//puts(@swapinstr);puts(@filename);putc('@');puth(memblk);putc(':');puth(size);putln
if memblk
//
// Read it in
//
ref = open(@filename)
if ref
read(ref, memblk, size)
close(ref)
destroy(@filename)
fin
fin
fin
if memblk
hpgtbl:[hmem.lsb, hmem.msb] = memblk
@@ -485,29 +408,29 @@ end
//
// Incrementally clear the ACCESSED BIT
//
export def sweep
export def sweep#0
word memblk
if hpgtbl[sweeppg]
memblk = hpgtbl:[sweeppg, sweepen]
when memblk.lsb & HMEM_STATE
is HMEM_MOVEABLE
is HMEM_LOCKED
memblk = memblk & HMEM_ADDR
if memblk->blklok & HMEM_ACCESSED
memblk->blklok = memblk->blklok & $7F
fin
wend
if sweepen == 255
sweepen = 0
if sweeppg == 0
sweeppg = PG_TBL_SIZE - 1
else
sweeppg = sweeppg - 1
fin
else
sweepen = sweepen + 1
fin
when memblk.lsb & HMEM_STATE
is HMEM_MOVEABLE
is HMEM_LOCKED
memblk = memblk & HMEM_ADDR
if memblk->blklok & HMEM_ACCESSED
memblk->blklok = memblk->blklok & $7F
fin
wend
if sweepen == 255
sweepen = 0
if sweeppg == 0
sweeppg = PG_TBL_SIZE - 1
else
sweeppg = sweeppg - 1
fin
else
sweepen = sweepen + 1
fin
else
sweeppg = PG_TBL_SIZE - 1
fin
@@ -517,7 +440,7 @@ end
//
export def brk(addr)
word heapalign, brkblk, brksiz, srch
//
// Check if addr is too high or low
//
@@ -525,44 +448,44 @@ export def brk(addr)
if isule(addr, heapmark); return 0; fin
if not pooladdr
//
// Allocate the memory pool
//
// Allocate the memory pool
//
heapalign = (heapmark | MIN_BLK_MASK) + 1
brksiz = addr - heapalign
if isult(brksiz, MAX_BLK_SIZE); return 0; fin // Not enough heap
poolsize = addr - heapmark
pooladdr = heapalloc(poolsize)
if pooladdr
frelst = heapalign
frelst=>fresiz = brksiz
frelst=>frenxt = 0
brksiz = addr - heapalign
if isult(brksiz, MAX_BLK_SIZE); return 0; fin // Not enough heap
poolsize = addr - heapmark
pooladdr = heapalloc(poolsize)
if pooladdr
frelst = heapalign
frelst=>fresiz = brksiz
frelst=>frenxt = 0
else
poolsize = 0
fin
else
poolsize = 0
fin
else
//
// Can we extend the memory pool?
//
if pooladdr + poolsize == heapmark
brksiz = addr - heapmark
// Can we extend the memory pool?
//
if pooladdr + poolsize == heapmark
brksiz = addr - heapmark
brkblk = heapalloc(brksiz)
if brkblk
//
// Add block to end of free list
//
//
// Add block to end of free list
//
poolsize = poolsize + brksiz
brkblk=>fresiz = brksiz
brkblk=>frenxt = 0
if frelst
srch = frelst
while srch=>frenxt; srch = srch=>frenxt; loop
srch=>frenxt = brkblk
else
frelst = brkblk
fin
brkblk=>fresiz = brksiz
brkblk=>frenxt = 0
if frelst
srch = frelst
while srch=>frenxt; srch = srch=>frenxt; loop
srch=>frenxt = brkblk
else
frelst = brkblk
fin
coallesce // combine adjacent free space
fin
fin
fin
fin
fin
return poolsize
end
@@ -575,7 +498,7 @@ end
//
export def hmemFre(lptr)
word srch, free, largest
coallesce
while compact; loop
free = 0
@@ -599,7 +522,7 @@ end
//
export def hmemNew(size)
word page, entry, hnew, memblk
//
// First, find a free handle
//
@@ -609,33 +532,33 @@ export def hmemNew(size)
// Allocate a new page table
//
hpgtbl[page] = heapalloc(PG_SIZE)
memset(hpgtbl[page], HMEM_AVAIL, PG_SIZE)
memset(hpgtbl[page], HMEM_AVAIL, PG_SIZE)
//puts(@allocpgstr);puth(hpgtbl[page]);putln
//
// Check if we need to allocate the memory pool
//
if not pooladdr
//
// Allocate 3/4 of available heap on 128K machine, 1/2 on 64K machine
//
poolsize = ((@page - heapmark) >> 1) & $7FFF
if MACHID & $30 == $30
poolsize = poolsize + (poolsize >> 1)
fin
//
// Check if we need to allocate the memory pool
//
if not pooladdr
//
// Allocate 3/4 of available heap on 128K machine, 1/2 on 64K machine
//
poolsize = ((@page - heapmark) >> 1) & $7FFF
if MACHID & $30 == $30
poolsize = poolsize + (poolsize >> 1)
fin
if isult(poolsize, MAX_BLK_SIZE)
poolsize = MAX_BLK_SIZE
fin
sbrk(poolsize)
fin
sbrk(poolsize)
fin
fin
for entry = 255 downto 0
if hpgtbl:[page, entry].lsb == HMEM_AVAIL
//
// Reserve handle as swapped out block
// Nonzero size will flag swapin to not read from disk
// Nonzero size will flag swapin to not read from disk
//
//putc('N');putc(' ');putb(entry);putb(page);putc('@')
size = ((size + t_memblk) | MIN_BLK_MASK) + 1
size = ((size + t_memblk) | MIN_BLK_MASK) + 1
hpgtbl:[page, entry] = size | HMEM_SWAPPED
hnew.lsb = page
hnew.msb = entry
@@ -649,39 +572,39 @@ end
//
export def hmemLock(hmem)
word memblk
memblk = hpgtbl:[hmem.lsb, hmem.msb]
when memblk.lsb & HMEM_STATE
is HMEM_SWAPPED
memblk = swapin(hmem)
if not memblk; return 0; fin
is HMEM_MOVEABLE
hpgtbl:[hmem.lsb, hmem.msb] = memblk | HMEM_LOCKED
memblk = swapin(hmem)
if not memblk; return 0; fin
is HMEM_MOVEABLE
hpgtbl:[hmem.lsb, hmem.msb] = memblk | HMEM_LOCKED
is HMEM_LOCKED
memblk = memblk & HMEM_ADDR
memblk->blklok = (memblk->blklok + 1) | HMEM_ACCESSED
memblk = memblk & HMEM_ADDR
memblk->blklok = (memblk->blklok + 1) | HMEM_ACCESSED
//putc('L');putc(' ');puth(hmem);putc('@');puth(memblk);putln
return memblk + t_memblk
return memblk + t_memblk
wend
end
//
// Unlock memory block
//
export def hmemUnlock(hmem)
export def hmemUnlock(hmem)#0
byte lock
word memblk
memblk = hpgtbl:[hmem.lsb, hmem.msb]
if memblk.lsb & HMEM_STATE == HMEM_LOCKED
memblk = memblk & HMEM_ADDR
lock = memblk->blklok - 1
if lock == HMEM_ACCESSED
//
// Block is now moveable
//
hpgtbl:[hmem.lsb, hmem.msb] = memblk
fin
memblk->blklok = lock
lock = memblk->blklok - 1
if lock == HMEM_ACCESSED
//
// Block is now moveable
//
hpgtbl:[hmem.lsb, hmem.msb] = memblk
fin
memblk->blklok = lock
//putc('U');putc(' ');puth(hmem);putln
fin
end
@@ -690,16 +613,16 @@ end
//
export def hmemRef(hmem)
word memblk
memblk = hpgtbl:[hmem.lsb, hmem.msb]
when memblk.lsb & HMEM_STATE
is HMEM_SWAPPED
memblk = swapin(hmem)
memblk = swapin(hmem)
is HMEM_LOCKED
is HMEM_MOVEABLE
memblk = memblk & HMEM_ADDR
if not memblk; return 0; fin
memblk->blkref = memblk->blkref + 1
is HMEM_MOVEABLE
memblk = memblk & HMEM_ADDR
if not memblk; return; fin
memblk->blkref = memblk->blkref + 1
wend
end
//
@@ -708,26 +631,26 @@ end
export def hmemDel(hmem)
byte ref
word memblk
memblk = hpgtbl:[hmem.lsb, hmem.msb]
when memblk & HMEM_STATE
is HMEM_SWAPPED
memblk = swapin(hmem)
is HMEM_LOCKED
is HMEM_MOVEABLE
memblk = memblk & HMEM_ADDR
if not memblk; return 0; fin
ref = memblk->blkref - 1
if ref == 0
//
// No more references, free block
//
hpgtbl:[hmem.lsb, hmem.msb] = HMEM_AVAIL
addfre(memblk)
else
memblk->blkref = ref
fin
break
is HMEM_MOVEABLE
memblk = memblk & HMEM_ADDR
if not memblk; return 0; fin
ref = memblk->blkref - 1
if ref == 0
//
// No more references, free block
//
hpgtbl:[hmem.lsb, hmem.msb] = HMEM_AVAIL
addfre(memblk)
else
memblk->blkref = ref
fin
break
wend
end
//
@@ -738,7 +661,7 @@ end
initdata = heapmark // Use data at top of heap for initialization
initdata=>volparms.0 = 2
initdata=>volparms.1 = 0
initdata=>volparms:2 = iobuffer
initdata=>volparms:2 = sysbuf
syscall($C5, @initdata=>volparms)
initdata=>volptr = iobuffer
initdata=>ramfree = 0
@@ -749,16 +672,16 @@ for sweepen = 0 to 15
memcpy(@swapvol + 2, initdata=>volptr + 1, ^initdata=>volptr)
swapvol = ^initdata=>volptr + 1
get_info(@swapvol, @initdata->volinfo)
initdata=>freeblks = initdata=>volinfo:2 - initdata=>volinfo:5
if initdata=>volptr:1 == $522F and initdata=>volptr:3 == $4D41 // '/RAM'
if isugt(initdata=>freeblks, initdata=>ramfree)
initdata=>ramvol = initdata=>volptr
initdata=>ramfree = initdata=>freeblks
fin
elsif isugt(initdata=>freeblks, initdata=>bestfree)
initdata=>bestvol = initdata=>volptr
initdata=>bestfree = initdata=>freeblks
fin
initdata=>freeblks = initdata=>volinfo:2 - initdata=>volinfo:5
if initdata=>volptr:1 == $522F and initdata=>volptr:3 == $4D41 // '/RAM'
if isugt(initdata=>freeblks, initdata=>ramfree)
initdata=>ramvol = initdata=>volptr
initdata=>ramfree = initdata=>freeblks
fin
elsif isugt(initdata=>freeblks, initdata=>bestfree)
initdata=>bestvol = initdata=>volptr
initdata=>bestfree = initdata=>freeblks
fin
fin
initdata=>volptr = initdata=>volptr + 16
next
@@ -780,27 +703,27 @@ initdata->swapstrlen = swapvol
repeat
if read(initdata->catref, @initdata->catalog, 512) == 512
initdata=>catentry = @initdata->catalog.4
if initdata->firstblk
initdata->entrylen = initdata->catalog.$23
initdata->entriesblk = initdata->catalog.$24
initdata=>filecnt = initdata=>catalog:$25
initdata=>catentry = initdata=>catentry + initdata->entrylen
if initdata->firstblk
initdata->entrylen = initdata->catalog.$23
initdata->entriesblk = initdata->catalog.$24
initdata=>filecnt = initdata=>catalog:$25
initdata=>catentry = initdata=>catentry + initdata->entrylen
fin
for sweepen = initdata->firstblk to initdata->entriesblk
^initdata=>catentry = ^initdata=>catentry & $0F
if ^initdata=>catentry
for sweepen = initdata->firstblk to initdata->entriesblk
^initdata=>catentry = ^initdata=>catentry & $0F
if ^initdata=>catentry
memcpy(@swapvol + swapvol + 1, initdata=>catentry + 1, ^initdata=>catentry)
swapvol = swapvol + ^initdata=>catentry
destroy(@swapvol)
destroy(@swapvol)
swapvol = initdata->swapstrlen
fin
initdata=>catentry = initdata=>catentry + initdata->entrylen
fin
initdata=>catentry = initdata=>catentry + initdata->entrylen
next
initdata->firstblk = 0
initdata->firstblk = 0
else
initdata->filecnt = 0
fin
until !initdata->filecnt
close(initdata->catref)
//puts(@swapvol); putln
done
done
+1 -7
View File
@@ -1,13 +1,7 @@
//
// Game port I/O library based on the wiring library
//
import cmdsys
predef syscall, call, getc, gets, putc, puts, putln
predef memset, memcpy, modaddr, modexec
predef heapmark, heapallocalign, heapalloc, heaprelease
predef isugt, isuge, isult, isule
byte MACHID
end
include "inc/cmdsys.plh"
const ANN0 = $C058
const ANN1 = $C05A
+4 -6
View File
@@ -1,7 +1,5 @@
include "inc/cmdsys.plh"
include "inc/spiport.plh"
import cmdsys
predef call, putc, puts, putln
end
//
// FAT I/O object
@@ -21,7 +19,7 @@ word[] = @size, @truncate, @isDir, @isFile
//
def cwd(pathname)
byte namelen
namelen = 0
spiSend(15) // CWD
namelen = spiRecv
@@ -55,7 +53,7 @@ end
def openDir(cmd, filename)
byte namelen
namelen = 0
spiSend(cmd)
namelen = spiRecv
@@ -148,4 +146,4 @@ end
//
spiSend(14) // SDINIT
return spiReady <> 0 // Is Arduino READY?
done
done
+1 -3
View File
@@ -1,6 +1,4 @@
import cmdsys
predef call, putc, puts, putln
end
include "inc/cmdsys.plh"
//
// Bit banged spi over gameport
//
+1 -7
View File
@@ -1,13 +1,7 @@
//
// Original Uthernet ethernet card based on Cirrus Logic cs8900a
//
import cmdsys
predef syscall, call, getc, gets, putc, puts, putln
predef isugt, isuge, isult, isule
predef memset, memcpy, modaddr, modexec
predef heapmark, heapallocalign, heapalloc, heaprelease, heapavail
byte MACHID
end
include "inc/cmdsys.plh"
//
// Include dependency on S/W IP stack
//
+5 -11
View File
@@ -4,13 +4,7 @@
// TCP/IP is built into hardware, so no dependencies on the software
// layers, like the Uthernet
//
import cmdsys
predef syscall, call, getc, gets, putc, puts, putln
predef isugt, isuge, isult, isule
predef memset, memcpy, modaddr, modexec
predef heapmark, heapallocalign, heapalloc, heaprelease, heapavail
byte MACHID
end
include "inc/cmdsys.plh"
//
// Net object
//
@@ -417,7 +411,7 @@ def pokeregw(reg, dataw)
end
def peekregw(reg)
word dataw
_pokeiow(reg)
dataw.1 = _peekio()
_pokeiow(reg + 1)
@@ -429,7 +423,7 @@ end
//
def wizSendUDP(wiz, ipdst, portdst, data, len)
word wizregs, wizdata, txrr, txwr, splitlen
wizregs = wiz=>channel_regs
wizdata = wiz=>channel_txmem
if !ipdst
@@ -633,7 +627,7 @@ end
//
def wizSendTCP(wiz, data, len)
word wizregs, wizdata, txrr, txwr, splitlen
if wiz->channel_state <> TCP_STATE_OPEN; return -1; fin
wizregs = wiz=>channel_regs
wizdata = wiz=>channel_txmem
@@ -717,7 +711,7 @@ end
def wizServiceIP
word wiz, wizregs, wizdata, rxlen, rxrr, rxwr, rxpkt, splitlen
byte ir, i, sir
ir = peekreg(WIZ_IR)
if ir
wiz = @wizChannel
+9 -15
View File
@@ -4,13 +4,7 @@
// TCP/IP is built into hardware, so no dependencies on the software
// layers, like the Uthernet
//
import cmdsys
predef syscall, call, getc, gets, putc, puts, putln
predef isugt, isuge, isult, isule
predef memset, memcpy, modaddr, modexec
predef heapmark, heapallocalign, heapalloc, heaprelease, heapavail
byte MACHID
end
include "inc/cmdsys.plh"
//
// Net object
//
@@ -426,7 +420,7 @@ def pokeregw(reg, dataw)
end
def peekregw(reg)
word dataw
_pokeiow(reg)
dataw.1 = _peekio()
_pokeiow(reg + 1)
@@ -456,7 +450,7 @@ def puti(i)
end
def putip(ipptr)
byte i
for i = 0 to 2
puti(ipptr->[i]); putc('.')
next
@@ -467,7 +461,7 @@ end
//
def wizSendUDP(wiz, ipdst, portdst, data, len)
word wizregs, wizdata, txrr, txwr, splitlen
wizregs = wiz=>channel_regs
wizdata = wiz=>channel_txmem
if !ipdst
@@ -678,7 +672,7 @@ end
//
def wizSendTCP(wiz, data, len)
word wizregs, wizdata, txrr, txwr, splitlen
if wiz->channel_state <> TCP_STATE_OPEN; return -1; fin
//putc('W');puti(len);putc(':')
wizregs = wiz=>channel_regs
@@ -715,7 +709,7 @@ def wizCloseTCP(wiz)
//
// Clear notiications on this port
//
if wiz->channel_proto == WIZ_PROTO_TCP and (wiz->channel_state == TCP_STATE_OPEN or wiz->channel_state == TCP_STATE_CLOSING)
if wiz->channel_proto == WIZ_PROTO_TCP and (wiz->channel_state == TCP_STATE_OPEN or wiz->channel_state == TCP_STATE_CLOSING)
wiz->channel_state = TCP_STATE_CLOSING
pokereg(wiz=>channel_regs + WIZ_SnCR, $08) // DISCON
repeat
@@ -768,7 +762,7 @@ end
def wizServiceIP
word wiz, wizregs, wizdata, rxlen, rxrr, rxwr, rxpkt, splitlen
byte ir, i, sir
ir = peekreg(WIZ_IR)
if ir and ir <> $FF // Ignore spurious read of IR
//putc('I');putb(ir)
@@ -868,7 +862,7 @@ def wizServiceIP
// Write TCP socket OK
//
//fin
break
break
is WIZ_PROTO_UDP
//putc('U');putb(sir)
if sir & $04
@@ -911,7 +905,7 @@ def wizServiceIP
//
pokereg(WIZ_IR, ir)
fin
fin
fin
end
//
// Set the local IP addresses