ae028e3a86
This huge refactoring remove the Seek and Tell routine from blockdev implementation requirements and change GetC and PutC's API so that they take an address to read and write (through HL/DE) at each call. The "PTR" approach in blockdev implementation was very redundant from device to device and it made more sense to generalize. It's possible that future device aren't "random access", but we'll be able to add more device types later. Another important change in this commit is that the "blockdev handle" is now opaque. Previously, consumers of the API would happily call routines directly from one of the 4 offsets. We can't do that any more. This makes the API more solid for future improvements. This change forced me to change a lot of things in fs, but overall, things are now simpler. No more `FS_PTR`: the "device handle" now holds the active pointer. Lots, lots of changes, but it also feels a lot cleaner and solid.
37 lines
577 B
NASM
37 lines
577 B
NASM
; mmap
|
|
;
|
|
; Block device that maps to memory.
|
|
;
|
|
; *** DEFINES ***
|
|
; MMAP_START: Memory address where the mmap begins
|
|
|
|
; Returns absolute addr of memory pointer in HL.
|
|
_mmapAddr:
|
|
push de
|
|
ld de, MMAP_START
|
|
add hl, de
|
|
jr nc, .end
|
|
; we have carry? out of bounds, set to maximum
|
|
ld hl, 0xffff
|
|
.end:
|
|
pop de
|
|
ret
|
|
|
|
; if out of bounds, will continually return the last char
|
|
; TODO: add bounds check and return Z accordingly.
|
|
mmapGetC:
|
|
push hl
|
|
call _mmapAddr
|
|
ld a, (hl)
|
|
cp a ; ensure Z
|
|
pop hl
|
|
ret
|
|
|
|
mmapPutC:
|
|
push hl
|
|
call _mmapAddr
|
|
ld (hl), a
|
|
cp a ; ensure Z
|
|
pop hl
|
|
ret
|