; Buffer.s - Buffer tape load and save ; J.G.Harston, 20 June 1986 ; Saves and loads data blocks in blocks of 256 bytes with a 2-byte address prefix ; Blocks: ; Data address ; 256 bytes of data ; 23296=Data length (must be multiple of 256) ; 23298=Data start ; 23300=Block type ORG #FE80 SAVE JP SAVE_0 LOAD JP LOAD_0 SAVE_0 LD DE,(23296) ; DE=Data length LD HL,(23298) ; HL=Start address SAVE_1 PUSH HL ; Save start address LD (TABLE),HL ; Store start address PUSH DE ; Save data length LD DE,TABLE+2 LD BC,256 LDIR ; Copy 256 bytes to TABLE+2 onwards LD IX,TABLE ; Point to block to save LD DE,258 ; 2 byte address + 256 bytes data LD A,(23300) ; Get block type CALL #04C2 ; Save to tape POP DE ; Get length back POP HL ; Get address back INC H ; Update address DEC D ; Update length remaining JR NZ,SAVE_1 ; Loop for each 256 bytes RET LOAD_0 LD IX,TABLE ; Point to data buffer LD DE,258 ; 2 byte address + 256 bytes data LD A,(23300) ; Get block type SCF CALL #0556 ; Load a block from tape JR NC,LOAD_0 ; Loop until block loaded LD DE,(TABLE) ; Get this block's data address LD HL,TABLE+2 ; Point to data LD BC,256 LDIR ; Copy 256 bytes to destination JR LOAD_0 ; Loop to load another block TABLE DEFW 0 ; Block address ; 256 bytes of data