; mmap
;
; Block device that maps to memory.
;
; *** DEFINES ***
; MMAP_START: Memory address where the mmap begins
; Memory address where the mmap stops, exclusively (we aren't allowed to access
; that address).
equ     MMAP_LEN        0xffff-MMAP_START

; Returns absolute addr of memory pointer in HL if HL is within bounds.
; Sets Z on success, unset when out of bounds.
_mmapAddr:
       push    de
       ld      de, MMAP_LEN
       or      a               ; reset carry flag
       sbc     hl, de
       jr      nc, .outOfBounds        ; HL >= DE
       add     hl, de          ; old HL value
       ld      de, MMAP_START
       add     hl, de
       cp      a       ; ensure Z
       pop     de
       ret
outOfBounds:
       pop     de
       jp      unsetZ

mmapGetB:
       push    hl
       call    _mmapAddr
       jr      nz, .end
       ld      a, (hl)
       ; Z already set
end:
       pop     hl
       ret


mmapPutB:
       push    hl
       call    _mmapAddr
       jr      nz, .end
       ld      (hl), a
       ; Z already set
end:
       pop     hl
       ret