REM Create the machine code:
FOR a=23300 TO 23390:READ b:POKE a,b:NEXT a
DATA 195,42,91,195,37,91,195,18,91,205,84,91,24,3,205,75,91
DATA 42,61,92,229,205,30,91,24,23,237,115,61,92,195,194,4
DATA 205,84,91,24,3,205,75,91,42,61,92,229,55,205,66,91,225
DATA 34,61,92,1,0,0,216,12,205,84,31,208,12,201,237,115,61
DATA 92,195,86,5,221,33,239,91,17,17,0,175,201,221,42,252,91
DATA 237,91,250,91,62,255,201
REM Load the next file header to 23535-23551:
LET bc=USR 23300
REM Load next data block its own address:
LET bc=USR 23303
REM Load next data block to address 'start':
POKE 23549,INT(start/256):POKE 23548,start-256*PEEK23549
LET bc=USR 23303
REM Save a file header from 23535-23551:
LET bc=USR 23306
REM Save a data block from its own address:
LET bc=USR 23309
REM Save a data block from address 'start', size 'length':
POKE 23549,INT(start/256):POKE 23548,start-256*PEEK23549
POKE 23547,INT(length/256):POKE 23546,length-256*PEEK23547
LET bc=USR 23309
REM On return from calls:
REM bc=0 - Ok
REM bc=1 - BREAK
REM bc=2 - Block not loaded