home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol090 / seval2.mac < prev    next >
Encoding:
Text File  |  1984-04-29  |  1.2 KB  |  75 lines

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