|
- ; io - handle ed's I/O
-
- ; *** Consts ***
- ;
- ; Max length of a line
- .equ IO_MAXLEN 0x7f
-
- ; *** Variables ***
- ; Handle of the target file
- .equ IO_FILE_HDL IO_RAMSTART
- ; block device targeting IO_FILE_HDL
- .equ IO_BLK @+FS_HANDLE_SIZE
- ; Buffer for lines read from I/O.
- .equ IO_LINE @+BLOCKDEV_SIZE
- .equ IO_RAMEND @+IO_MAXLEN+1 ; +1 for null
- ; *** Code ***
-
- ; Given a file name in (HL), open that file in (IO_FILE_HDL) and open a blkdev
- ; on it at (IO_BLK).
- ioInit:
- call fsFindFN
- ret nz
- ld ix, IO_FILE_HDL
- call fsOpen
- ld de, IO_BLK
- ld hl, .blkdev
- jp blkSet
- .fsGetB:
- ld ix, IO_FILE_HDL
- jp fsGetB
- .fsPutB:
- ld ix, IO_FILE_HDL
- jp fsPutB
- .blkdev:
- .dw .fsGetB, .fsPutB
-
- ioGetB:
- push ix
- ld ix, IO_BLK
- call _blkGetB
- pop ix
- ret
-
- ioPutB:
- push ix
- ld ix, IO_BLK
- call _blkPutB
- pop ix
- ret
-
- ioSeek:
- push ix
- ld ix, IO_BLK
- call _blkSeek
- pop ix
- ret
-
- ioTell:
- push ix
- ld ix, IO_BLK
- call _blkTell
- pop ix
- ret
-
- ioSetSize:
- push ix
- ld ix, IO_FILE_HDL
- call fsSetSize
- pop ix
- ret
-
- ; Write string (HL) in current file. Ends line with LF.
- ioPutLine:
- push hl
- .loop:
- ld a, (hl)
- or a
- jr z, .loopend ; null, we're finished
- call ioPutB
- jr nz, .error
- inc hl
- jr .loop
- .loopend:
- ; Wrote the whole line, write ending LF
- ld a, 0x0a
- call ioPutB
- jr z, .end ; success
- ; continue to error
- .error:
- call unsetZ
- .end:
- pop hl
- ret
|