; ; 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