|
|
@@ -6,11 +6,62 @@ |
|
|
|
.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 IO_FILE_HDL+FS_HANDLE_SIZE |
|
|
|
; Buffer for lines read from I/O. |
|
|
|
.equ IO_LINE IO_RAMSTART |
|
|
|
.equ IO_LINE IO_BLK+BLOCKDEV_SIZE |
|
|
|
.equ IO_RAMEND IO_LINE+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 |
|
|
|
.fsGetC: |
|
|
|
ld ix, IO_FILE_HDL |
|
|
|
jp fsGetC |
|
|
|
.fsPutC: |
|
|
|
ld ix, IO_FILE_HDL |
|
|
|
jp fsPutC |
|
|
|
.blkdev: |
|
|
|
.dw .fsGetC, .fsPutC |
|
|
|
|
|
|
|
ioGetC: |
|
|
|
push ix |
|
|
|
ld ix, IO_BLK |
|
|
|
call _blkGetC |
|
|
|
pop ix |
|
|
|
ret |
|
|
|
|
|
|
|
ioPutC: |
|
|
|
push ix |
|
|
|
ld ix, IO_BLK |
|
|
|
call _blkPutC |
|
|
|
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 |
|
|
|
|
|
|
|
; Given an offset HL, read the line in IO_LINE, without LF and null terminates |
|
|
|
; it. Make HL point to IO_LINE. |
|
|
|
ioGetLine: |
|
|
@@ -19,11 +70,11 @@ ioGetLine: |
|
|
|
push bc |
|
|
|
ld de, 0 ; limit ourselves to 16-bit for now |
|
|
|
xor a ; absolute seek |
|
|
|
call blkSeek |
|
|
|
call ioSeek |
|
|
|
ld hl, IO_LINE |
|
|
|
ld b, IO_MAXLEN |
|
|
|
.loop: |
|
|
|
call blkGetC |
|
|
|
call ioGetC |
|
|
|
jr nz, .loopend |
|
|
|
or a ; null? hum, weird. same as LF |
|
|
|
jr z, .loopend |
|
|
|