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 / SEVAL1.Z80 < prev    next >
Text File  |  2000-06-30  |  1KB  |  64 lines

  1. ;
  2. ; SYSLIB Module Name:  SEVAL1
  3. ; Author:  Richard Conn
  4. ; SYSLIB Version Number:  3.6
  5. ; Module Version Number:  1.1
  6.  
  7.     public    eval10
  8.  
  9. ;
  10. ;  EVAL10 --
  11. ;    Convert the string of ASCII decimal 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. EVAL10:
  18.     PUSH    BC    ; SAVE BC
  19.     LD    DE,0    ; SET DE=0 INITIALLY
  20.  
  21. ;  Get next digit and check for '0' - '9'
  22. E10L:
  23.     LD    A,(HL)    ; GET BYTE
  24.     CP    '0'    ; CHECK FOR RANGE
  25.     JP    C,DONE
  26.     SUB    '0'    ; CONVERT TO BINARY
  27.     CP    10    ; CHECK FOR RANGE
  28.     JP    NC,DONE
  29.  
  30.     PUSH    AF    ; SAVE VALUE
  31.  
  32. ;  Multiply DE by 10
  33. MUL10:
  34.     PUSH    HL    ; SAVE HL
  35.     LD    H,D    ; HL=DE
  36.     LD    L,E
  37.     ADD    HL,HL    ; *2
  38.     ADD    HL,HL    ; *4
  39.     ADD    HL,DE    ; *5
  40.     ADD    HL,HL    ; *10
  41.     EX    DE,HL
  42.     POP    HL    ; RESTORE HL
  43.  
  44. ;  Add in A
  45.     POP    AF    ; GET LATEST DIGIT
  46.     ADD    A,E    ; A=A+E
  47.     LD    E,A
  48.     LD    A,D    ; ADD TO D IF NECESSARY
  49.     ADC    A,0
  50.     LD    D,A    ; STORE RESULT
  51.  
  52. ;  Continue
  53.     INC    HL    ; PT TO NEXT CHARACTER
  54.     JP    E10L
  55.  
  56. ;  Done -- Result already in DE; Set A=E
  57. DONE:
  58.     LD    A,E    ; A=E
  59.     POP    BC    ; RESTORE BC
  60.  
  61.     RET
  62.  
  63.     END
  64.