99 hs=201:rem system type
100 av=32:ack=59468: rem ack (out) is cb2
110 dat=59471: rem port a
120 ddr=59459
130 sv=2:srobe=59469: rem strobe (in) is ca1
199 rem *** init handshaking lines
200 poke ack, (peek(ack) and 254) or (128+64+32)
300 print "waiting for command":gosub990
310 printby
320 if by then 330
322 by=hs:gosub 1190
324 by=0:gosub 1200:gosub 1200:gosub 1200:gosub 1200
326 goto 300
330 if by=1 then gosub2000:goto300
340 print"(unknown function)":goto 300
989 rem *** switch from send to receive, then receive a byte
990 poke ddr,0
999 rem *** receive a byte
1000 if (peek(sr) and sv) = 0 then 1000
1010 poke sr,sv
1020 by = peek(dat)
1030 i= peek(ack): i = (i or av) - (i and av) : poke ack,i
1040 return
1189 rem *** switch from receive to send, then send a byte
1190 rem
1199 rem *** send a byte
1200 if (peek(sr) and sv) = 0 then 1200
1210 poke sr,sv
1220 poke ddr,15:poke dat,by
1230 i= peek(ack): i = (i or av) - (i and av) : poke ack,i
1240 if (peek(sr) and sv) = 0 then 1240
1250 poke sr,sv
1260 poke dat,by/16
1270 i= peek(ack): i = (i or av) - (i and av) : poke ack,i
1280 return
1999 rem *** load
2000 gosub1000:print"bank"by
2010 by=0:gosub1190
2020 gosub990:f=by:gosub1000:f=f+256*by:print"from"f
2030 gosub1000:t=by:gosub1000:t=t+256*by:print"to "t
2040 for a=f to t-1
2050 gosub1000:printa,by
2060 next
2070 return