home *** CD-ROM | disk | FTP | other *** search
-
-
- ;++++++++++++++++++++++++++++++++++++++++++++++
- ;
- ; 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
-
-