; 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