;****************************************************************************
;
; Description:
; Convert Value In Acc From Hex To BCD.
;
; Entry Requirements:
; Acc Has Value To Convert To BCD
;
; On Exit:
; DPTR Has Value Of Acc In BCD
;
; Affected:
; PSW.CY, PSW.Z, PSW.P, Acc, DPTR
;
; Stack:
; 2 Bytes, Not Including Space Used By Called Routines
;
; Comments:
; Values Greater Than 255 Will Not Work Properly. If Acc == 12, DPTR
; == 0012. If Acc = 255, DPTR = 0255.
;
UTIL_BINTOBCD12 proc
push b ; Save B
push acc ; Save Acc
mov b,#100 ; Divide By 100
div ab ; Do Divide
mov dph,a ; Store In DPH
pop acc ; Recover Acc
mov b,#10 ; Divide By 10
div ab ; Do Divide
swap a ; Move Result To High Of A
orl a,b ; OR In Remainder
mov dpl,a ; Move To DPL
pop b ; Recover B
ret ; Return To Caller
endproc
;
;****************************************************************************
;****************************************************************************
;
; Description:
; Convert Value In Low 4 Bits Of Acc To A Hex Digit
;
; Entry Requirements:
; Low 4 Bits Of Acc Have Value To Convert To '0'..'9', 'A'..'Z'
;
; On Exit:
; Value Of Low 4 Bits In ASCII
;
; Affected:
; PSW.CY, PSW.Z, PSW.P, Acc
;
; Stack:
; 0 Bytes, Not Including Space Used By Called Routines
;
; Comments:
; Near Trick From A Z80 Book Circa 1982. Don't Know Who The Original
; Author Is.
;
UTIL_BINTOASC proc
anl a,#00fh ; Keep Only Low Bits
add a,#090h ; Add 144
da a ; Decimal Adjust
addc a,#040h ; Add 64
da a ; Decimal Adjust
ret ; Return To Caller
endproc
;
;****************************************************************************