include "inc:util.imp"
include "inc:fs.imp"
begin
bytename status,data,control
constinteger tbe=8,rd=4,rc=2,rbf=1
integer sym
status == byteinteger(16_7fffc)
data == byteinteger(16_7fffd)
control == byteinteger(16_7ffff)
constinteger cr=13,esc=27
routine put(integer x)
newline and printsymbol('^') unless x&255=x
if ' '<=x<=126 or x=nl or x=cr then printsymbol(x) elsestart
printsymbol('_') if x&255=x
phex2(x)
finish
end
integerfn hex
integer n1,n2
n1 = testsymbol until n1>=0
n1 = n1-7 if n1>'?'; n1 = n1&15
n2 = testsymbol until n2>=0
n2 = n2-7 if n2>'?'; n2 = n2&15
result = n1<<4+n2
end
routine reset
status = 16_40
end
routine disable
integer zero=0
status = zero
end
routine twait
cycle
returnif status&tbe#0
repeat
end
routine putc(integer x)
control = x; twait
end
routine putd(integer x)
data = x; twait
end
constinteger filebeg=16_1000
bytearray file(filebeg:16_3fff)
integer fileend
routine preload
integer sym
onevent 9 start
closeinput; selectinput(0); return
finish
selectinput(1)
fileend = filebeg
cycle
readsymbol(sym); file(fileend) = sym; fileend = fileend+1
repeat
end
routine load
integer sym,ad
putc(16_03)
ad = 16_1000
while ad<fileend cycle
sym = file(ad); putd(sym); ad = ad+1
repeat
putc(16_0b)
end
integerfn getd
cycle
repeatuntil status&rbf#0
result = data if status&rd#0
result = control
end
routine getc(integer x)
integer y
cycle
cycle
repeatuntil status&rbf#0
if status&rd#0 start
y = data
unless x=16_0b start
printsymbol('['); phex2(y); printsymbol(']')
finish
finishelsestart
y = control
returnif x=y
unless x!!y=16_f0 start ; !?????
printstring("[^"); phex2(y); printsymbol(']')
finish
finish
repeat
end
constinteger ptr=8,peek=13,poke=14
routine at(integer x)
putc(ptr); putd(x&255); putd(x>>8&255)
end
integerfn byte
putc(peek); getc(poke); result =getd
end
integerfn word
integer x
x = byte; result =byte<<8+x
end
routine do long
integer x
x = word; x = word<<16+x
space; phex(x); newline
end
routine do word
space; phex4(word); newline
end
routine do byte
spaces(3); phex2(byte); newline
end
routine temp
@16_3734 integer dtx
@16_3740 integer ack
integer n,r=0,w=0,times=0,t
bytearray b(1:520)
status = 6
putc(2)
etheropen(5,16_6789)
cycle
t = cputime
etherwrite(5,b(1),520)
w = cputime-t+w
ack = ack!1<<5
cycle
repeatuntil dtx&1<<5#0
t = cputime
n = etherread(5,b(1),520)
r = cputime-t+r
times = times+1
repeatuntil testsymbol>=0
etherclose(5)
disable
printstring("Microseconds per packet"); newline
printstring("Write:"); write((w*1000)//times,5); newline
printstring("Read: "); write((r*1000)//times,5); newline
end
openinput(1,"ether:tunefirm.obj"); selectinput(0)
preload
load
temp
putc(15)
status = 6
etheropen(lsap,rdte<<8+rsap)
endofprogram