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 / SLIB2.LBR / SEVAL2.Z80 < prev    next >
Text File  |  2000-06-30  |  2KB  |  78 lines

  1. ;
  2. ; SYSLIB Module Name:  SEVAL2
  3. ; Author:  Richard Conn
  4. ; SYSLIB Version Number:  3.6
  5. ; Module Version Number:  1.1
  6.  
  7.     public    eval16
  8.  
  9. ;
  10. ;  EVAL16 --
  11. ;    Convert the string of ASCII hexadecimal digits pointed to by HL
  12. ; into a binary value; string is converted until invalid digit is
  13. ; encountered.
  14. ;    On return, HL points to error character, DE=value, A=E (low
  15. ; order 8 bits of value).  BC not affected.
  16. ;
  17.  
  18.     EXT    CAPS    ; CAPITALIZATION ROUTINE
  19.  
  20. EVAL16:
  21.     PUSH    BC    ; SAVE BC
  22.     LD    DE,0    ; SET DE=0 INITIALLY
  23.  
  24. ;  Get next digit and check for '0' - '9'
  25. E16L:
  26.     LD    A,(HL)    ; GET BYTE
  27.     CALL    CAPS    ; CAPITALIZE
  28.     CP    '0'    ; CHECK FOR RANGE
  29.     JP    C,DONE
  30.     CP    'F'+1    ; CHECK FOR RANGE
  31.     JP    NC,DONE
  32.     CP    '9'+1    ; CHECK FOR 0-9
  33.     JP    C,PRODEC
  34.     CP    'A'    ; CHECK FOR OUT OF RANGE
  35.     JP    C,DONE
  36. PRODEC:
  37.     SUB    '0'    ; CONVERT TO BINARY
  38.     CP    10
  39.     JP    C,PROC
  40.     SUB    7    ; ADJUST FOR 'A'-'F'
  41.  
  42. ;  Proceed with processing
  43. PROC:
  44.     PUSH    AF    ; SAVE VALUE
  45.  
  46. ;  Multiply DE by 16
  47. MUL16:
  48.     PUSH    HL    ; SAVE HL
  49.     LD    HL,0    ; ACC=0
  50.     LD    B,16    ; 16 LOOPS
  51. MUL16L:
  52.     ADD    HL,DE    ; HL=HL+DE
  53.     DEC    B    ; COUNT DOWN
  54.     JP    NZ,MUL16L
  55.     LD    D,H    ; NEW DE
  56.     LD    E,L
  57.     POP    HL    ; RESTORE HL
  58.  
  59. ;  Add in A
  60.     POP    AF    ; GET LATEST DIGIT
  61.     ADD    A,E    ; A=A+E
  62.     LD    E,A
  63.     LD    A,D    ; ADD TO D IF NECESSARY
  64.     ADC    0
  65.  
  66. ;  Continue
  67.     INC    HL    ; PT TO NEXT CHARACTER
  68.     JP    E16L
  69.  
  70. ;  Done -- Result already in DE; Set A=E
  71. DONE:
  72.     LD    A,E    ; A=E
  73.     POP    BC    ; RESTORE BC
  74.  
  75.     RET
  76.  
  77.     END
  78.