Listing of file='DPB2D.MAC;05' on disk='vmedia/asm_utility_routines-sideB-sector.ccvf'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; DPB2D - DOUBLE PRECISION BINARY TO DECIMAL ; TITLE DPB2D ; ; VALUES ON ENTRY: ; A - FLAG TO SUPPRESS LEADING ZEROS ; A = 0 LEAVE ZEROS ALONE ; A <> 0 BLANK OUT LEADING ZEROS ; DE - NUMBER TO BE CONVERTED (0-65535) ; HL - POINTER TO MEMORY BUFFER FOR CHR STRING ; ; RETURNS: ; NOTHING IN REGISTERS, CHARACTER STRING IN MEMORY ; ; DESTROYS: ; A,BC,DE (ONLY HL IS PRESERVED) ; ENTRY DPB2D DPB2D: PUSH PSW PUSH H MVI C,5 ;FILL BUFFER WITH ZEROS SETTO0: MVI M,'0' INX H DCR C JNZ SETTO0 POP H PUSH H LXI B,-10000 ;GET TEN THOUSANDS DIGIT CALL DIGIT LXI B,-1000 ; AND THOUSANDS ... CALL DIGIT LXI B,-100 ; AND HUNDREDS ... CALL DIGIT LXI B,-10 ; AND TENS ... CALL DIGIT MVI A,'0' ADD E ; AND ONLY UNITS LEFT MOV M,A POP H POP PSW ;CHECK ZERO SUPPRESS FLAG ORA A RZ ;RETURN IF NO SUPPRESSION PUSH H MVI C,4 ;BLANK OUT LEADING ZEROS, CHK0: MOV A,M ; TAKING CARE TO LEAVE CPI '0' ; AT LEAST ONE ZERO JNZ FIN MVI M,' ' INX H DCR C JNZ CHK0 FIN: POP H RET ; ; DETERMINE A DIGIT OF THE NUMBER ; DIGIT: PUSH H XCHG DAD B ;SUBTRACT VALUE JNC ADDIT ;GONE TO FAR, ADD IT BACK IN XCHG POP H INR M ;INCREMENT ASCII DIGIT JMP DIGIT ADDIT: MOV A,C ;TAKE TWO'S COMPLEMENT CMA MOV E,A MOV A,B CMA MOV D,A INX D DAD D ;ADD IT TO PARTIAL RESULT XCHG POP H INX H ;MOVE TO NEXT BYTE IN MEMORY RET END