home *** CD-ROM | disk | FTP | other *** search
- ;
- ; 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 <SP> FLAG
- STA LSFLG
- JMP PADC1
- ;
- ; MADC --
- ; STORE REG A AS DECIMAL CHARACTERS W/LEADING <SP> 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 <SP> 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 <SP> FLAG
-
- ; PRINT RESULT OF DIVISION OF A BY B W/LEADING <SP> (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 <SP>
- ORA A ; 0 MEANS NO
- JZ PACD1
- MVI A,' ' ; PRINT <SP>
- CALL PUT
- POP PSW ; RESTORE A
- RET
- PACD1: XRA A ; A=0
- STA LSFLG ; TURN OFF LEADING <SP> 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
-