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
/
SIMTEL
/
CPMUG
/
CPMUG008.ARK
/
INNUM1.LIB
< prev
next >
Wrap
Text File
|
1984-04-29
|
1KB
|
68 lines
;++++++++++++++++++++++++++++++++++++++++++++++
;
; VARIABLE RADIX NUMBER INPUT (unsigned)
;
; INNUM1.LIB - Version 0.1 - 12 SEP 77
;
; J.W. SHOOK, P.O. BOX 185, ROCKY POINT, NY 11778
;
;++++++++++++++++++++++++++++++++++++++++++++++
; CALL with:
; RADIX = value of radix desired
; RETURN with:
; HL = 16 bit value of number
; C = RADIX
; A = Last character input
; CARRY = TRUE on input error
INNUM1: LDA RADIX ; Save radix in C
MOV C,A
LXI H,0 ; Initialize number value
INUM1: CALL INCH ; Skip leading spaces
CPI ' '
JZ INUM1
INUM2: CPI ',' ; Check for terminators
RZ
CPI ' '
RZ
CPI CR
RZ
CALL HEXCON ; Convert character to binary
RC
CMP C ; Digit valid in this radix?
CMC
RC ; If not, return with carry set
; Else multiply value by radix
; and add new digit.
MOV D,H ; Get prev value to multiplier
MOV E,L ; register
MOV L,A ; Move new digit to
MVI H,0 ; product register
MOV A,C ; Put radix in multiplier reg
CALL MPY81 ; Value <- digit + value * radix
CALL INCH ; Get next character
JMP INUM2
HEXCON: SBI '0' ; Remove ASCII bias
RC ; Too small?
CPI 10 ; Decimal digit?
JC HEXCO1 ; Yes
SBI '@'-'9' ; No, remove alpha bias
CPI 10 ; Less than 'A'?
RC ; Not hex then
HEXCO1: CPI 16 ; Valid hex value?
CMC
RET
RADIX: DB 10 ; Default value for radix
; EXTERNAL REFERENCES:
; MPY81 Unsigned 8 bit multiply
; INCH Console character input