; ********** DECIMAL TO BINARY CONVERSION SUBROUTINE ********** ; CONVERTS UP TO 6 ASCII CHARACTERS REPRESENTING ; DECIMAL NUMBERS TO BINARY. MAXIMUM VALUE IS 65535. ; ENTRY: (HL) = BUFFER CONTAINING NUMERIC ASCII STRING TO BE CONVERTED TO BINARY (HEX). ; (B) = NUMBER OF CHARACTERS.RETURNS Z FLAG. ; EXIT: (HL) = BINARY NUMBER 0 TO 65535. ; NZ IF INVALID ASCII CHARACTER, OTHERWISE Z FLAG. ; ALL REGISTERS ARE PRESERVED EXCEPT A, HL. ; ************************************************************* .org 0000h LD SP, 0080h ; ADDED FOR TESTING PURPOSES. LD HL, PASS ; ADDED FOR TESTING PURPOSES. LD B, 05h ; ADDED FOR TESTING PURPOSES. LD C, 00h ; ADDED FOR TESTING PURPOSES. CALL DECBIN ; ADDED FOR TESTING PURPOSES. HALT ; ADDED FOR TESTING PURPOSES. DECBIN: PUSH BC ; SAVE REGISTERS. PUSH DE PUSH IX LD IX, 0 ; SET RESULT INITIALLY TO ZERO. DEC040: ADD IX, IX ; INTERMEDIATE * 2. PUSH IX ADD IX, IX ; MULTIPLY * 4. ADD IX, IX ; MULTIPLY * 8. POP DE ; MULTIPLY * 2. (SECOND IX PUSH IS POPPED TO DE. CLEVER!) ADD IX, DE ; MULTIPLY * 10. CONTENTS HAVE NOW BEEN MULTIPLIED BY 10. LD A, (HL) ; GET CHARACTER FROM "PASS" ARRAY. SUB 30h ; CONVERT. JP M, DEC070 ; GO IF < 0. CP 10 ; TEST FOR > 9. JP P, DEC070 ; GO IF > 9. LD E, A ; NOW IN E. LD D, 0 ; NOW IN DE. ADD IX, DE ; MERGE. INC HL DJNZ DEC040 ; GO IF MORE. DEC070: LD A, B ; COUNT TO A. OR A ; SET OR RESET Z FLAG. PUSH IX ; RESULT WILL GO TO HL. POP HL ; (EXTRA IX POPPED TO HL.) POP IX ; RESTORE REGISTERS. POP DE POP BC RET ; RETURN. .ORG 0050h ; PASS IS LOCATED AT 0050h AND CONTAINS THE 5 CHARACTERS NEEDED. PASS: .DB 31h,32h,33h,34h,35h ; 12345. .ORG 0060h ; FAIL IS LOCATED AT 0060h AND CONTAINS ONE NON-NUMERIC CHARACTER. FAIL: .DB 46h,32h,33h,34h,35h ; A2345. .END