
;*******************************************************************************
; Returns the ASCII codes from the nibbles of a byte stored in the Acc.
; After being called the high nibble is in the Acc and the low nibble
; is in the B register.
;
;
; ;usage:
;
; mov a, #byte
; CALL nibble
;
; ;returns
; ;A= high nibble
; ;B= low nibble
;*******************************************************************************

nibble:
	mov	b,a		; b=a ; stores Acc in B
	anl	a,#0f0h		; a=xxxx0000 ; A && #f0h (get the high nibble)
	swap	a		; a=0000xxxx ; swap nibbles
	orl	a,#30h		; a=0011xxxx ; add #30h, if nibble is
	push	acc		; 0-9 we have the ASCII value
	push	b		; stores A and B
	mov	b,#3ah		; stores #3ah in B
	div	ab		; divide A/#3ah
	jz, 	recupera1	; if zero, nibble < #0Ah
;
nibble1_ok:
	pop	b		; recover B
	pop	acc		; recover A
	add	a,#07h		; adds #07h to get ASCII of A-F
	xch	a,b
	jmp	nibble2
;
recupera1:
	pop	b		; stores B
	pop	acc		; stores A
	xch	a,b
;
nibble2:
	anl	a,#0fh		; a=0000xxxx ; A && #0fh (get low nibble)
	orl	a,#30h		; a=0011xxxx ; add #30h, if nibble is
	push	acc		; 0-9 we have the ASCII value
	push	b		; stores A and B
	mov	b,#3ah		; stores #3ah in B
	div	ab		; divide A/#3ah
	jz,	recupera2	; if zero, nibble < #0Ah
	pop	b		; recover B
	pop	acc		; recover A
	add	a,#07h		; adds #07h to get ASCII of A-F
	xch	a,b
	ret			; return to main routine
;
recupera2:
	pop	b		; recover B
	pop	acc		; recover A
	xch	a,b
	ret			; return to main routine 
