home *** CD-ROM | disk | FTP | other *** search
- ;
- ; SYSLIB Module Name: SEVAL2
- ; Author: Richard Conn
- ; SYSLIB Version Number: 2.0
- ; Module Version Number: 1.0
- ; Module Entry Points:
- ; EVAL16
- ; Module External References:
- ; CAPS
- ;
-
- ;
- ; EVAL16 --
- ; Convert the string of ASCII hexadecimal digits pointed to by HL
- ; into a binary value; string is converted until invalid digit is
- ; encountered.
- ; On return, HL points to error character, DE=value, A=E (low
- ; order 8 bits of value). BC not affected.
- ;
-
- EXT CAPS ; CAPITALIZATION ROUTINE
-
- EVAL16::
- PUSH B ; SAVE BC
- LXI D,0 ; SET DE=0 INITIALLY
-
- ; Get next digit and check for '0' - '9'
- E16L:
- MOV A,M ; GET BYTE
- CALL CAPS ; CAPITALIZE
- SUI '0' ; CHECK FOR RANGE
- JC DONE
- CPI 10
- JC PROC
- SUI 7 ; ADJUST FOR 'A'-'F'
- CPI 16
- JNC DONE
-
- ; Proceed with processing
- PROC:
- PUSH PSW ; SAVE VALUE
-
- ; Multiply DE by 16
- MUL16:
- PUSH H ; SAVE HL
- LXI H,0 ; ACC=0
- MVI B,16 ; 16 LOOPS
- MUL16L:
- DAD D ; HL=HL+DE
- DCR B ; COUNT DOWN
- JNZ MUL16L
- MOV D,H ; NEW DE
- MOV E,L
- POP H ; RESTORE HL
-
- ; Add in A
- POP PSW ; GET LATEST DIGIT
- ADD E ; A=A+E
- MOV E,A
- MOV A,D ; ADD TO D IF NECESSARY
- ACI 0
-
- ; Continue
- INX H ; PT TO NEXT CHARACTER
- JMP E16L
-
- ; Done -- Result already in DE; Set A=E
- DONE:
- MOV A,E ; A=E
- POP B ; RESTORE BC
-
- RET
-
- END
-