;
;=======================================================================
; HDIAG Utility Functions
;=======================================================================
;
; Print string at HL on console, null terminated.
; HL and AF are trashed.
;
prtstr:
	ld	a,(hl)			; get next character
	or	a			; set flags
	inc	hl			; bump pointer regardless
	ret	z			; done if null
	call	cout			; display character
	jr	prtstr			; loop till done
;
; Print a string from a lookup table pointed to by HL, index A
; with a prefix string at DE.  HL, DE, and A are trashed.
;
prtstrtbl:
	push	af
	ex	de,hl
	call	prtstr
	ex	de,hl
	pop	af
	rlca
	call	addhla
	ld	a,(hl)
	inc	hl
	ld	h,(hl)
	ld	l,a
	call	prtstr
	ret
;
; Print the hex byte value in A
;
prthex8:
	push	af
	push	de
	call	hexascii
	ld	a,d
	call	cout
	ld	a,e
	call	cout
	pop	de
	pop	af
	ret
;
; Print the hex word value in BC
;
prthex16:
	push	af
	ld	a,b
	call	prthex8
	ld	a,c
	call	prthex8
	pop	af
	ret
;
; Print the hex dword value in DE:HL
;
prthex32:
	push	bc
	push	de
	pop	bc
	call	prthex16
	push	hl
	pop	bc
	call	prthex16
	pop	bc
	ret
;
; Convert binary value in A to ASCII hex characters in DE
;
hexascii:
	ld	d,a
	call	hexconv
	ld	e,a
	ld	a,d
	rlca
	rlca
	rlca
	rlca
	call	hexconv
	ld	d,a
	ret
;
; Convert low nibble of A to ASCII hex
;
hexconv:
	and	$0F	     ; low nibble only
	add	a,$90
	daa
	adc	a,$40
	daa
	ret

;
; Jump to address in HL/IX/IY
;
;   No registers affected
;   Typically used as "call jphl" to call a routine
;   at address in HL register.
;
jphl:
	jp	(hl)
;
jpix:
	jp	(ix)
;
jpiy:
	jp	(iy)
;
; Add hl,a
;
;   A register is destroyed!
;
addhla:
	add	a,l
	ld	l,a
	ret	nc
	inc	h
	ret

