|
|
@@ -4,33 +4,43 @@ |
|
|
|
; |
|
|
|
; *** 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. |
|
|
|
; 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 |
|
|
|
call cpHLDE |
|
|
|
jr nc, .outOfBounds ; HL >= DE |
|
|
|
ld de, MMAP_START |
|
|
|
add hl, de |
|
|
|
jr nc, .end |
|
|
|
; we have carry? out of bounds, set to maximum |
|
|
|
ld hl, 0xffff |
|
|
|
.end: |
|
|
|
cp a ; ensure Z |
|
|
|
pop de |
|
|
|
ret |
|
|
|
.outOfBounds: |
|
|
|
pop de |
|
|
|
jp unsetZ |
|
|
|
|
|
|
|
; if out of bounds, will continually return the last char |
|
|
|
; TODO: add bounds check and return Z accordingly. |
|
|
|
mmapGetC: |
|
|
|
push hl |
|
|
|
call _mmapAddr |
|
|
|
jr nz, .end |
|
|
|
ld a, (hl) |
|
|
|
cp a ; ensure Z |
|
|
|
; Z already set |
|
|
|
.end: |
|
|
|
pop hl |
|
|
|
ret |
|
|
|
|
|
|
|
|
|
|
|
mmapPutC: |
|
|
|
push hl |
|
|
|
call _mmapAddr |
|
|
|
jr nz, .end |
|
|
|
ld (hl), a |
|
|
|
cp a ; ensure Z |
|
|
|
; Z already set |
|
|
|
.end: |
|
|
|
pop hl |
|
|
|
ret |