; mmap ; ; Block device that maps to memory. ; ; *** DEFINES *** ; MMAP_START: Memory address where the mmap begins ; *** VARIABLES *** .equ MMAP_PTR MMAP_RAMSTART .equ MMAP_RAMEND MMAP_PTR+2 ; *** CODE *** mmapInit: xor a ld (MMAP_PTR), a ld (MMAP_PTR+1), a ret ; Increase mem pointer by one _mmapForward: ld hl, (MMAP_PTR) inc hl ld (MMAP_PTR), hl ret ; Returns absolute addr of memory pointer in HL. _mmapAddr: push de ld hl, (MMAP_PTR) 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) call _mmapForward cp a ; ensure Z pop hl ret mmapPutC: push hl call _mmapAddr ld (hl), a call _mmapForward cp a ; ensure Z pop hl ret mmapSeek: ld (MMAP_PTR), hl ret mmapTell: ld hl, (MMAP_PTR) ret