; Font management
;
; There can only ever be one active font.
;
; *** Defines ***
; FNT_DATA: Pointer to the beginning of the binary font data to work with.
; FNT_WIDTH: Width of the font.
; FNT_HEIGHT: Height of the font.
;
; *** Code ***

; If A is in the range 0x20-0x7e, make HL point to the beginning of the
; corresponding glyph and set Z to indicate success.
; If A isn't in the range, do nothing and unset Z.
fntGet:
	cp	0x20
	ret	c	; A < 0x20. Z was unset by cp
	cp	0x7f
	jp	nc, unsetZ	; A >= 0x7f. Z might be set
	
	push	af	; --> lvl 1
	push	bc	; --> lvl 2
	sub	0x20
	ld	hl, FNT_DATA
	ld	b, FNT_HEIGHT
.loop:
	call	addHL
	djnz	.loop
	pop	bc	; <-- lvl 2
	pop	af	; <-- lvl 1
	cp	a	; set Z
	ret