; ; SYSLIB Module Name: SLHL5D ; Author: Richard Conn ; SYSLIB Version Number: 2.0 ; Module Version Number: 1.0 ; Module Entry Points: ; LHL5DC LHLDC ; Module External References: ; LOUT ; ; ; LHL5DC -- ; PRINT HL AS 5 DECIMAL CHARACTERS ON LST: ; EXT LOUT PUTRG MACRO PUSH B ; SAVE BC, DE, HL PUSH D PUSH H ENDM GETRG MACRO POP H ; RESTORE HL, DE, BC POP D POP B ENDM LHL5DC:: PUSH PSW ; SAVE ALL REGS PUTRG XRA A ; A=0 STA LSFLG0 ; TURN OFF LEADING JMP PHDC ; ; LHLDC -- ; PRINT HL AS DECIMAL CHARACTERS W/LEADING SPACES IN 5-CHAR FIELD ON LST: ; LHLDC:: PUSH PSW ; SAVE ALL REGS PUTRG MVI A,1 ; A=1 STA LSFLG0 ; TURN ON LEADING ; PRINT HL USING LEADING FLAG LSFLG0 PHDC: LXI D,10000 ; PRINT 10000'S CALL PHDC1 LXI D,1000 ; PRINT 1000'S CALL PHDC1 LXI D,100 ; PRINT 100'S CALL PHDC1 LXI D,10 ; PRINT 10'S CALL PHDC1 MOV A,L ; PRINT 1'S ADI '0' ; CONVERT TO ASCII CALL LOUT GETRG ; RESTORE ALL REGS POP PSW RET ; BUFFER LSFLG0: DS 1 ; LEADING FLAG ; DIVIDE HL BY DE AND PRINT QUOTIENT WITH LEADING S PHDC1: MVI C,0 ; SET COUNT PHDC2: MOV A,L ; SUB E FROM L SUB E MOV L,A ; RESULT IN L MOV A,H ; SUB D FROM H W/BORROW SBB D MOV H,A ; RESULT IN H JC PHDC3 ; DONE IF CARRY SET (FURTHER BORROW) INR C ; INCR COUNT JMP PHDC2 PHDC3: MOV A,L ; ADD E TO L ADD E MOV L,A ; RESULT IN L MOV A,H ; ADD D TO H W/CARRY ADC D MOV H,A ; RESULT IN H MOV A,C ; GET RESULT ORA A ; CHECK FOR ZERO JNZ PHDC4 LDA LSFLG0 ; CHECK FOR LEADING ORA A ; PRINT VALUE IF NOT (A=0) JZ PHDC4 MVI A,' ' ; PRINT CALL LOUT RET PHDC4: XRA A ; TURN OFF LEADING STA LSFLG0 MOV A,C ; GET VALUE ADI '0' ; CONVERT TO ASCII CALL LOUT RET END