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

  1. ;
  2. ; SYSLIB Module Name:  SEVAL3
  3. ; Author:  Richard Conn
  4. ; SYSLIB Version Number:  3.6
  5. ; Module Version Number:  1.1
  6.  
  7.     public    eval8
  8.  
  9. ;
  10. ;  EVAL8 --
  11. ;    Convert the string of ASCII octal 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. EVAL8:
  18.     PUSH    BC    ; SAVE BC
  19.     LD    DE,0    ; SET DE=0 INITIALLY
  20.  
  21. ;  Get next digit and check for '0' - '7'
  22. E8L:
  23.     LD    A,(HL)    ; GET BYTE
  24.     SUB    '0'    ; CHECK FOR RANGE
  25.     JP    C,DONE
  26.     CP    8
  27.     JP    NC,DONE
  28.  
  29.     PUSH    AF    ; SAVE VALUE
  30.  
  31. ;  Multiply DE by 8
  32. MUL8:
  33.     PUSH    HL    ; SAVE HL
  34.     LD    HL,0    ; ACC=0
  35.     LD    B,8    ; 8 LOOPS
  36. MUL8L:
  37.     ADD    HL,DE    ; HL=HL+DE
  38.     DEC    B    ; COUNT DOWN
  39.     JP    NZ,MUL8L
  40.     LD    D,H    ; NEW DE
  41.     LD    E,L
  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    0
  50.  
  51. ;  Continue
  52.     INC    HL    ; PT TO NEXT CHARACTER
  53.     JP    E8L
  54.  
  55. ;  Done -- Result already in DE; Set A=E
  56. DONE:
  57.     LD    A,E    ; A=E
  58.     POP    BC    ; RESTORE BC
  59.  
  60.     RET
  61.  
  62.     END
  63.