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 / CPM / ZCPR33 / A-R / MATH24.LBR / MEVALH24.ZZ0 / MEVALH24.Z8°
Text File  |  2000-06-30  |  2KB  |  86 lines

  1. ;
  2. ; Module Name:  MEVALH24
  3. ; Author:  Steven Cohen
  4. ; based on Richard Conn's EVAL16
  5. ;
  6.     public    EVALH24
  7. ;
  8. ;  EVALH24
  9. ;
  10. ;    Convert a string of ASCII hexadecimal digits 
  11. ; into a binary value; string is converted until invalid digit is
  12. ; encountered.  
  13. ;
  14. ;       INPUT:  DE POINTS TO a 3-byte buffer in which the converted
  15. ;         value is to be stored.
  16. ;        HL POINTS TO the first byte of the string to be converted
  17. ;       OUTPUT: HL points to error character if any
  18. ;        A contains the lowest order 8 bits of the value
  19. ;        carry flag set indicates error
  20. ;
  21.  
  22.     EXT    CAPS    ; CAPITALIZATION ROUTINE
  23.     EXT    DOUBLE24,ZEROBUF
  24.  
  25. EVALH24:
  26.     PUSH    BC    ; SAVE BC
  27.     CALL    ZEROBUF
  28. ;
  29. ;  Get next digit and check for '0' - '9'
  30. ;
  31. E16L:
  32.     LD    A,(HL)    ; GET BYTE
  33.     CALL    CAPS    ; CAPITALIZE
  34.     CP    '0'    ; CHECK FOR RANGE
  35.     JR    C,DONE
  36.     CP    'F'+1    ; CHECK FOR RANGE
  37.     JR    NC,DONE
  38.     CP    '9'+1    ; CHECK FOR 0-9
  39.     JR    C,PRODEC
  40.     CP    'A'    ; CHECK FOR OUT OF RANGE
  41.     JR    C,DONE
  42. PRODEC:
  43.     SUB    '0'    ; CONVERT TO BINARY
  44.     CP    10
  45.     JR    C,MUL2
  46.     SUB    7    ; ADJUST FOR 'A'-'F'
  47.  
  48. ;  Proceed with processing
  49. ;PROC:
  50.  
  51. ;  Multiply buffer by 16
  52. MUL2:
  53.     PUSH    DE
  54.     PUSH    HL
  55.     PUSH    AF    ; SAVE VALUE
  56.     EX    DE,HL
  57.     LD    B,4
  58. E16LP:  CALL    DOUBLE24
  59.     DJNZ    E16LP
  60. ;    EX    DE,HL
  61. ;
  62. ;  Add in A
  63. ;
  64. ADDIN:
  65.     LD    A,(HL)    ; get low-order digit
  66.     LD    B,A    ; preserve in B
  67.     POP    AF    ; GET LATEST DIGIT
  68.     OR    B    ; or in latest digit
  69.     LD    (HL),A    ; put it in buffer
  70.     POP    HL
  71.     POP    DE
  72. ;
  73. ;  Continue
  74. ;
  75.     INC    HL    ; PT TO NEXT CHARACTER
  76.     JR    E16L
  77. ;
  78. ;  Done -- Result already in buffer pted to by DE; Set A=its lowest byte
  79. ;
  80. DONE:
  81.     LD    A,(DE)    ; A=first byte of numeric buffer
  82.     POP    BC    ; RESTORE BC
  83.  
  84.     RET
  85.     END
  86. ed to by DE; Set A=its low