; ; SYSLIB Module Name: SMADC ; Author: Richard Conn ; SYSLIB Version Number: 2.0 ; Module Version Number: 1.0 ; Module Entry Points: ; MA3DC MADC ; Module External References: ; None ; ; ; MA3DC -- ; STORE REG A AS 3 DECIMAL CHARACTERS IN MEMORY ; ON INPUT, A=VALUE AND DE=PTR TO 3-BYTE BUFFER ; ON RETURN, DE PTS TO BYTE AFTER BUFFER ; MA3DC:: XCHG ; PTR IN HL PUSH PSW ; SAVE A PUSH PSW XRA A ; TURN OFF LEADING FLAG STA LSFLG JMP PADC1 ; ; MADC -- ; STORE REG A AS DECIMAL CHARACTERS W/LEADING IN 3-CHAR FIELD ; IN MEMORY; ON INPUT, A=VALUE AND HL=PTR TO 3-BYTE BUFFER ; ON RETURN, HL PTS TO BYTE AFTER BUFFER ; MADC:: XCHG ; PTR IN HL PUSH PSW ; SAVE A PUSH PSW MVI A,1 ; TURN ON LEADING FLAG STA LSFLG ; PRINT ROUTINE PADC1: POP PSW ; GET A PUSH B ; SAVE BC MVI B,100 ; PRINT HUNDREDS CALL PAC ; PRINT A CHAR MVI B,10 ; PRINT TENS CALL PAC ADI '0' ; CONVERT TO ASCII CALL PUT ; PRINT POP B ; RESTORE BC POP PSW ; RESTORE A XCHG ; PTR BACK IN DE RET ; BUFFER LSFLG: DS 1 ; LEADING FLAG ; PRINT RESULT OF DIVISION OF A BY B W/LEADING (INTEGER DIVISION) PAC: MVI C,0 ; SET COUNT PACL: SUB B ; COMPUTE COUNT JC PACD INR C ; INCR COUNT JMP PACL PACD: ADD B ; ADD B BACK IN PUSH PSW ; SAVE A MOV A,C ; GET COUNT ORA A ; ZERO? JNZ PACD1 LDA LSFLG ; CHECK FOR LEADING ORA A ; 0 MEANS NO JZ PACD1 MVI A,' ' ; PRINT CALL PUT POP PSW ; RESTORE A RET PACD1: XRA A ; A=0 STA LSFLG ; TURN OFF LEADING FLAG MOV A,C ; GET COUNT ADI '0' ; CONVERT TO DECIMAL CALL PUT ; PRINT IT POP PSW ; RESTORE A RET PUT: MOV M,A ; PUT BYTE INX H ; PT TO NEXT RET END