home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
ZSYS
/
SIMTEL20
/
SYSLIB
/
SLIB3.LBR
/
SMHLFDC.Z80
< prev
next >
Wrap
Text File
|
2000-06-30
|
2KB
|
106 lines
;
; SYSLIB Module Name: SMHLFDC
; Author: Richard Conn
; SYSLIB Version Number: 3.6
; Module Version Number: 1.1
public mhlfdc
;
; MACROS
;
PUTRG MACRO
PUSH BC ; SAVE BC, DE, HL
PUSH DE
PUSH HL
ENDM
GETRG MACRO
POP HL ; RESTORE HL, DE, BC
POP DE
POP BC
ENDM
;
; MHLFDC --
; STORE HL AS UP TO 5 DECIMAL CHARACTERS IN MEMORY
; ON INPUT, HL=VALUE AND DE=PTR TO 5-BYTE BUFFER
; ON OUTPUT, DE PTS TO NEXT BYTE AFTER LAST BYTE STORED
;
MHLFDC:
PUSH AF ; SAVE ALL REGS
PUTRG
EX DE,HL ; HL PTS TO BUFFER
LD (MEMPTR),HL
EX DE,HL
LD B,1 ; B=1 FOR LEADING <SP> FLAG
;
; PRINT HL USING LEADING <SP> FLAG IN B
;
PHDC: LD DE,10000 ; PRINT 10000'S
CALL PHDC1
LD DE,1000 ; PRINT 1000'S
CALL PHDC1
LD DE,100 ; PRINT 100'S
CALL PHDC1
LD DE,10 ; PRINT 10'S
CALL PHDC1
LD A,L ; PRINT 1'S
ADD '0' ; CONVERT TO ASCII
CALL PUT
GETRG ; RESTORE ALL REGS
EX DE,HL ; DE=VALUE
LD HL,(MEMPTR) ; GET PTR TO NEXT BYTE
EX DE,HL ; ... IN DE
POP AF
RET
;
; DIVIDE HL BY DE AND PRINT QUOTIENT WITH LEADING <SP>S
;
PHDC1: LD C,0 ; SET COUNT
PHDC2: LD A,L ; SUB E FROM L
SUB E
LD L,A ; RESULT IN L
LD A,H ; SUB D FROM H W/BORROW
SBC A,D
LD H,A ; RESULT IN H
JP C,PHDC3 ; DONE IF CARRY SET (FURTHER BORROW)
INC C ; INCR COUNT
JP PHDC2
PHDC3: LD A,L ; ADD E TO L
ADD A,E
LD L,A ; RESULT IN L
LD A,H ; ADD D TO H W/CARRY
ADC A,D
LD H,A ; RESULT IN H
LD A,C ; GET RESULT
OR A ; CHECK FOR ZERO
JP NZ,PHDC4
OR B ; CHECK FOR LEADING <SP> (A=0, A OR B = 0 IF B=0)
RET NZ ; DONE IF NO LEADING <SP>
PHDC4: LD B,0 ; TURN OFF LEADING <SP>
LD A,C ; GET VALUE
ADD '0' ; CONVERT TO ASCII AND FALL THRU TO PUT
;
; PUT BYTE IN A INTO NEXT MEMORY POSITION AND ADVANCE MEMORY PTR
;
PUT:
PUSH HL ; SAVE HL
LD HL,(MEMPTR) ; GET PTR
LD (HL),A ; PUT BYTE
INC HL ; PT TO NEXT
LD (MEMPTR),HL ; PUT PTR
POP HL ; RESTORE HL
RET
;
; BUFFERS
;
MEMPTR: DS 2 ; PTR TO NEXT MEMORY ADDRESS
END