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 >
Text File  |  1984-04-29  |  1KB  |  68 lines

  1.  
  2.  
  3. ;++++++++++++++++++++++++++++++++++++++++++++++
  4. ;
  5. ; VARIABLE RADIX NUMBER INPUT (unsigned)
  6. ;
  7. ; INNUM1.LIB  -  Version 0.1  -  12 SEP 77
  8. ;
  9. ; J.W. SHOOK, P.O. BOX 185, ROCKY POINT, NY 11778
  10. ;
  11. ;++++++++++++++++++++++++++++++++++++++++++++++
  12.  
  13. ; CALL with:
  14. ;    RADIX = value of radix desired
  15.  
  16. ; RETURN with:
  17. ;    HL = 16 bit value of number
  18. ;    C  = RADIX
  19. ;    A  = Last character input
  20. ;    CARRY = TRUE on input error
  21.  
  22. INNUM1:    LDA    RADIX    ; Save radix in C
  23.     MOV    C,A
  24.     LXI    H,0    ; Initialize number value
  25. INUM1:    CALL    INCH    ; Skip leading spaces
  26.     CPI    ' '
  27.     JZ    INUM1
  28. INUM2:    CPI    ','    ; Check for terminators
  29.     RZ
  30.     CPI    ' '
  31.     RZ
  32.     CPI    CR
  33.     RZ
  34.     CALL    HEXCON    ; Convert character to binary
  35.     RC
  36.     CMP    C    ; Digit valid in this radix?
  37.     CMC
  38.     RC        ; If not, return with carry set
  39.             ; Else multiply value by radix
  40.             ; and add new digit.
  41.  
  42.     MOV    D,H    ; Get prev value to multiplier
  43.     MOV    E,L    ; register
  44.     MOV    L,A    ; Move new digit to 
  45.     MVI    H,0    ; product register
  46.     MOV    A,C    ; Put radix in multiplier reg
  47.     CALL    MPY81    ; Value <- digit + value * radix
  48.     CALL    INCH    ; Get next character
  49.     JMP    INUM2
  50.  
  51. HEXCON:    SBI    '0'    ; Remove ASCII bias
  52.     RC        ; Too small?
  53.     CPI    10    ; Decimal digit?
  54.     JC    HEXCO1    ; Yes
  55.     SBI    '@'-'9'    ; No, remove alpha bias
  56.     CPI    10    ; Less than 'A'?
  57.     RC        ; Not hex then
  58. HEXCO1:    CPI    16    ; Valid hex value?
  59.     CMC
  60.     RET
  61.  
  62. RADIX:    DB    10    ; Default value for radix
  63.  
  64. ; EXTERNAL REFERENCES:
  65. ;    MPY81    Unsigned 8 bit multiply
  66. ;    INCH    Console character input
  67.  
  68.