mirror of https://github.com/wwarthen/RomWBW.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.7 KiB
65 lines
1.7 KiB
;
|
|
; MAKE A BCD NUMBER FROM A BINARY NUMBER
|
|
; 32 BIT BINARY NUMBER IN HL:BC, RESULT STORED AT (DE)
|
|
; DE IS PRESERVED, ALL OTHER REGS DESTROYED
|
|
;
|
|
BIN2BCD:
|
|
PUSH IX ; SAVE IX
|
|
PUSH BC ; MOVE BC
|
|
POP IX ; ... TO IX
|
|
LD C,32 ; LOOP FOR 32 BITS OF BINARY DWORD
|
|
;
|
|
BIN2BCD0:
|
|
; OUTER LOOP (ONCE FOR EACH BIT IN BINARY NUMBER)
|
|
LD B,5 ; LOOP FOR 5 BYTES OF RESULT
|
|
PUSH DE ; SAVE DE
|
|
ADD IX,IX ; LEFT SHIFT NEXT BIT FROM HL:IX
|
|
ADC HL,HL ; ... INTO CARRY
|
|
;
|
|
BIN2BCD1:
|
|
; INNER LOOP (ONCE FOR EACH BYTE OF BCD NUMBER)
|
|
LD A,(DE) ; GET IT
|
|
ADC A,A ; DOUBLE IT W/ CARRY
|
|
DAA ; DECIMAL ADJUST
|
|
LD (DE),A ; SAVE IT
|
|
INC DE ; POINT TO NEXT BCD BYTE
|
|
DJNZ BIN2BCD1 ; LOOP THRU ALL BCD BYTES
|
|
;
|
|
; REMAINDER OF OUTER LOOP
|
|
POP DE ; RECOVER DE
|
|
DEC C ; DEC BIT COUNTER
|
|
JR NZ,BIN2BCD0 ; LOOP TILL DONE WITH ALL BITS
|
|
POP IX ; RESTORE IX
|
|
RET
|
|
;
|
|
; PRINT CONTENTS OF 5 BYTE BCD NUMBER AT (HL)
|
|
; WITH LEADING ZERO SUPPRESSION
|
|
; ALL REGS DESTROYED
|
|
;
|
|
PRTBCD:
|
|
INC HL ; BUMP HL TO POINT TO
|
|
INC HL ; ...
|
|
INC HL ; ...
|
|
INC HL ; ... LAST BYTE OF BCD
|
|
LD B,5 ; LOOP FOR 5 BYTES
|
|
LD C,0 ; START BY SUPPRESSING LEADING ZEROES
|
|
;
|
|
PRTBCD1:
|
|
; LOOP TO PRINT ONE BCD BYTE (TWO DIGITS)
|
|
XOR A ; CLEAR ACCUM
|
|
RLD ; ROTATE FIRST NIBBLE INTO A
|
|
CALL PRTBCD2 ; PRINT IT
|
|
XOR A ; CLEAR ACCUM
|
|
RLD ; ROTATE SECOND NIBBLE INTO A
|
|
CALL PRTBCD2 ; PRINT IT
|
|
DEC HL ; POINT TO PRIOR BYTE
|
|
DJNZ PRTBCD1 ; LOOP TILL DONE
|
|
RET ; RETURN
|
|
;
|
|
PRTBCD2:
|
|
; SUBROUTINE TO PRINT A DIGIT IN A
|
|
CP C ; COMPARE INCOMING TO C
|
|
RET Z ; IF EQUAL, SUPPRESSING, ABORT
|
|
DEC C ; MAKE C NEGATIVE TO STOP SUPPRESSION
|
|
ADD A,'0' ; OFFSET TO PRINTABLE VALUE
|
|
JP COUT ; EXIT VIA CHARACTER OUT
|
|
|