; Blocks.s - Blocked tape load and save ; J.G.Harston, 25 June 1986 ; Saves and loads files in blocks of 256 bytes ; Block header: ; 00 ; File type ; Filename ; Block length - 256+ for full block, <256 for last block ; Block start address ; Block extra address ; ; Block data: ; FF ; as per length ; ; Block data if final block is not &00xx bytes long: ; 00 ; ; On entry to SAVE: ; START = start address ; LENGTH = data length ; HEADER+0 = file type ; HEADER+1 = filename ; ; On entry to LOAD: ; HEADER+0 = file type ; HEADER+1 = filename ; ORG #5B00 SAVE JP DO_SAVE ; Entry block LOAD JP DO_LOAD START DEFW 0 ; Data start LENGTH DEFW 0 ; Data length BLKLEN DEFW 512 ; Block length HEADER DEFS 17 ; File header to save/load HEADER2 DEFS 17 ; Loaded header DO_SAVE LD HL,(START) LD (HEADER+13),HL ; Copy start address to header SA_LOOP LD HL,(LENGTH) ; Get remaining length LD DE,(BLKLEN) ; Prepare to save full BLKLEN bytes AND A SBC HL,DE ; Is remaining length