; ; SYSLIB Module Name: SEVAL3 ; Author: Richard Conn ; SYSLIB Version Number: 2.0 ; Module Version Number: 1.0 ; Module Entry Points: ; EVAL8 ; Module External References: ; None ; ; ; EVAL8 -- ; Convert the string of ASCII octal 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. ; EVAL8:: PUSH B ; SAVE BC LXI D,0 ; SET DE=0 INITIALLY ; Get next digit and check for '0' - '9' E8L: MOV A,M ; GET BYTE SUI '0' ; CHECK FOR RANGE JC DONE CPI 8 JNC DONE PUSH PSW ; SAVE VALUE ; Multiply DE by 8 MUL8: PUSH H ; SAVE HL LXI H,0 ; ACC=0 MVI B,8 ; 8 LOOPS MUL8L: DAD D ; HL=HL+DE DCR B ; COUNT DOWN JNZ MUL8L 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 E8L ; Done -- Result already in DE; Set A=E DONE: MOV A,E ; A=E POP B ; RESTORE BC RET END