; PI=24arctan(1/8)+8arctan(1/57)+4arctan(1/239) ORG 0F965H ; 1–œŒ… ;BIN_SIZE EQU 4153+4 ; 10000 * log(10) / log(100H) ;BCD_SIZE EQU (10000+10)/2 ; 猅 ;BIN_SIZE EQU 416+4 ; 1000 * log(10) / log(100H) ;BCD_SIZE EQU (1000+10)/2 ; 4–œ5猅 ;BIN_SIZE EQU 18686+4 ; 45000 * log(10) / log(100H) ;BCD_SIZE EQU (45000+10)/2 ; 5–œŒ… BIN_SIZE EQU 20763+4 ; 50000 * log(10) / log(100H) BCD_SIZE EQU (50000+10)/2 WORK1 EQU 00608H WORK2 EQU 05727H WORK3 EQU 0A846H BCD_RESULT EQU 06000H WORK_BASE_H EQU 00H WORK_BASE EQU WORK_BASE_H*100H PBIN_SIZE EQU WORK_BASE+600H PBCD_SIZE EQU WORK_BASE+602H PWORK2_SKIP EQU WORK_BASE+604H DIVTBL_H EQU WORK_BASE_H DIVTBL2_H EQU WORK_BASE_H+3 MUL100TBL_H EQU WORK_BASE_H BCDTBL_H EQU WORK_BASE_H+2 DIV9_15_MINSIZE EQU 186 ; ENTRY: LD HL,BIN_SIZE LD (PBIN_SIZE),HL LD HL,BCD_SIZE LD (PBCD_SIZE),HL ENTRY2: DI CALC1: LD A,3 CALL SET_WORK LD HL,WORK2 LD DE,WORK1 LD BC,(PBIN_SIZE) LDIR LD IY,1 CALC1_L1: LD HL,(PBIN_SIZE) LD BC,(PWORK2_SKIP) OR A SBC HL,BC EX DE,HL LD HL,WORK2 ADD HL,BC LD A,(HL) RLCA RLCA JR NC,CALC1_L2 LD (HL),A JR CALC1_L3 CALC1_L2: LD (HL),0 INC HL LD (HL),A INC BC DEC DE LD A,D OR E JR Z,CALC1_END LD (PWORK2_SKIP),BC CALC1_L3: CALL DIV_ODD JR C,CALC1_END CALL MPADDSUB JR CALC1_L1 CALC1_END: CALC2: LD A,8 CALL SET_WORK LD C,57 LD H,DIVTBL_H CALL MAKE_DIVTBL CALL MPDIV8T LD HL,WORK2 LD DE,WORK1 CALL MPADD LD IY,1 CALC2_L1: CALL MPDIV8T JR C,CALC2_END CALL MPDIV8T JR C,CALC2_END CALL DIV_ODD JR C,CALC2_END CALL MPADDSUB JR CALC2_L1 CALC2_END: CALC3: LD A,4 CALL SET_WORK LD C,239 LD H,DIVTBL_H CALL MAKE_DIVTBL CALL MPDIV8T LD HL,WORK2 LD DE,WORK1 CALL MPADD LD IY,1 CALC3_L1: CALL MPDIV8T JR C,CALC3_END CALL MPDIV8T JR C,CALC3_END CALL DIV_ODD JR C,CALC3_END CALL MPADDSUB JR CALC3_L1 CALC3_END: CONVERT: CALL MAKE_BCDTBL LD HL,WORK1 LD DE,BCD_RESULT LD BC,(PBIN_SIZE) LD IX,(PBCD_SIZE) CALL BIN2BCD EI RET ; [WORK2] = A SET_WORK: LD HL,WORK2 LD BC,(PBIN_SIZE) PUSH HL LD D,H LD E,L INC DE DEC BC LD (HL),0 LDIR POP HL LD (HL),A LD HL,0 LD (PWORK2_SKIP),HL RET ; in : HL=src top, DE=dest top ; out : HL=src, DE=dest, BC=loop param ; if [src]==0 CF=1 else CF=0 CHECK_WORK: PUSH DE LD BC,(PWORK2_SKIP) ADD HL,BC EX DE,HL LD HL,(PBIN_SIZE) SBC HL,BC JR CHECK_WORK_L2 CHECK_WORK_L1: LD A,(DE) OR A JR NZ,CHECK_WORK_L3 INC DE DEC HL INC BC CHECK_WORK_L2: LD A,H OR L JR NZ,CHECK_WORK_L1 POP DE SCF RET CHECK_WORK_L3: LD (PWORK2_SKIP),BC DEC HL INC L INC H LD C,H LD B,L POP HL PUSH BC LD BC,(PWORK2_SKIP) ADD HL,BC EX DE,HL POP BC RET ; DIV_ODD: INC IY INC IY PUSH IY POP BC LD A,B OR A JR Z,DIV_ODD_L1 PUSH BC POP IX JP M,DIV_ODD_L2 LD HL,(PWORK2_SKIP) LD DE,DIV9_15_MINSIZE ADD HL,DE EX DE,HL LD HL,(PBIN_SIZE) SBC HL,DE LD HL,WORK2 LD DE,WORK3 JP NC,MPDIV9_15 JP MPDIV15 DIV_ODD_L1: LD H,DIVTBL2_H CALL MAKE_DIVTBL LD HL,WORK2 LD DE,WORK3 JP MPDIV8T2 DIV_ODD_L2: LD H,DIVTBL2_H CALL MAKE_DIVTBL16 LD HL,WORK2 LD DE,WORK3 JP MPDIV16T2 MPADDSUB: PUSH IY POP BC LD HL,WORK3 LD DE,WORK1 BIT 1,C JP Z,MPADD JP MPSUB MPSUBADD: PUSH IY POP BC LD HL,WORK3 LD DE,WORK1 BIT 1,C JP Z,MPSUB JP MPADD ; [DE..DE+(PBIN_SIZE)-1] += [HL..HL+(PBIN_SIZE)-1] MPADD: LD BC,(PBIN_SIZE) ADD HL,BC DEC HL EX DE,HL ADD HL,BC DEC HL EX DE,HL PUSH HL LD H,B LD L,C LD BC,(PWORK2_SKIP) SBC HL,BC DEC HL INC L INC H LD C,H LD B,L POP HL MPADD_L1: LD A,(DE) ADC A,(HL) LD (DE),A DEC DE DEC HL DJNZ MPADD_L1 DEC C JR NZ,MPADD_L1 RET NC EX DE,HL MPADD_L2: INC (HL) DEC HL JR Z,MPADD_L2 RET ; [DE..DE+(PBIN_SIZE)-1] -= [HL..HL+(PBIN_SIZE)-1] MPSUB: LD BC,(PBIN_SIZE) ADD HL,BC DEC HL EX DE,HL ADD HL,BC DEC HL EX DE,HL PUSH HL LD H,B LD L,C LD BC,(PWORK2_SKIP) SBC HL,BC DEC HL INC L INC H LD C,H LD B,L POP HL MPSUB_L1: LD A,(DE) SBC A,(HL) LD (DE),A DEC DE DEC HL DJNZ MPSUB_L1 DEC C JR NZ,MPSUB_L1 RET NC WSUB_L2: LD A,(DE) DEC A LD (DE),A DEC DE INC A JR Z,WSUB_L2 RET ; [DE..DE+(PBIN_SIZE)-1] = [HL..HL+(PBIN_SIZE)-1] / IX (IX < 8000H) MPDIV15: CALL CHECK_WORK RET C PUSH IX EXX POP DE LD A,E CPL LD C,A LD A,D CPL LD B,A INC BC LD HL,0 EXX MPDIV15_L1: LD A,(HL) INC HL EXX ADD A,A ADC HL,HL ADD HL,BC ADD A,A ADC HL,HL JR C,MPDIV15_LM1 MPDIV15_LP1: ADD HL,BC ADD A,A ADC HL,HL JR C,MPDIV15_LM2 MPDIV15_LP2: ADD HL,BC ADD A,A ADC HL,HL JR C,MPDIV15_LM3 MPDIV15_LP3: ADD HL,BC ADD A,A ADC HL,HL JR C,MPDIV15_LM4 MPDIV15_LP4: ADD HL,BC ADD A,A ADC HL,HL JR C,MPDIV15_LM5 MPDIV15_LP5: ADD HL,BC ADD A,A ADC HL,HL JR C,MPDIV15_LM6 MPDIV15_LP6: ADD HL,BC ADD A,A ADC HL,HL JR C,MPDIV15_LM7 MPDIV15_LP7: ADD A,A SBC HL,DE JP MPDIV15_L2 MPDIV15_LM1: INC A ADD HL,DE ADD A,A ADC HL,HL JR NC,MPDIV15_LP2 MPDIV15_LM2: INC A ADD HL,DE ADD A,A ADC HL,HL JR NC,MPDIV15_LP3 MPDIV15_LM3: INC A ADD HL,DE ADD A,A ADC HL,HL JR NC,MPDIV15_LP4 MPDIV15_LM4: INC A ADD HL,DE ADD A,A ADC HL,HL JR NC,MPDIV15_LP5 MPDIV15_LM5: INC A ADD HL,DE ADD A,A ADC HL,HL JR NC,MPDIV15_LP6 MPDIV15_LM6: INC A ADD HL,DE ADD A,A ADC HL,HL JR NC,MPDIV15_LP7 MPDIV15_LM7: INC A ADD A,A ADC HL,DE MPDIV15_L2: JP P,MPDIV15_L3 ADD HL,DE INC A MPDIV15_L3: CPL EXX LD (DE),A INC DE DJNZ MPDIV15_L1 DEC C JR NZ,MPDIV15_L1 OR A RET ; in : C=divisor, H=Table addr.H MAKE_DIVTBL: LD A,H EX AF,AF' LD B,0 LD HL,100H XOR A MKDIVT_L1: SBC HL,BC INC A JP NC,MKDIVT_L1 DEC A ADD HL,BC LD D,A LD E,L EXX EX AF,AF' LD H,A LD L,0 LD D,L LD E,L LD C,L LD B,L MKDIVT_L2: LD (HL),D INC H LD (HL),E INC H LD (HL),C DEC H DEC H INC L EXX LD A,D EXX ADD A,E LD E,A JR NC,MKDIVT_L3 INC D MKDIVT_L3: LD A,C EXX ADD A,E CP C JR C,MKDIVT_L4 SUB C EXX LD C,A INC DE DJNZ MKDIVT_L2 RET MKDIVT_L4: EXX LD C,A DJNZ MKDIVT_L2 RET ; [WORK2] /= N (use DIVTBL) MPDIV8T: LD HL,WORK2 LD D,H LD E,L CALL CHECK_WORK RET C EXX LD HL,(DIVTBL_H+1)*100H+1 LD B,(HL) INC H LD C,(HL) LD DE,0 EXX MPDIV8T_L1: LD A,(HL) EXX LD H,DIVTBL_H ADD A,E JR C,MPDIV8T_L2 LD L,A LD A,D ADD A,(HL) INC H LD D,(HL) INC H LD E,(HL) EXX LD (HL),A INC HL DJNZ MPDIV8T_L1 DEC C JR NZ,MPDIV8T_L1 OR A RET MPDIV8T_L2: ADD A,C LD L,A LD A,D ADD A,B ADD A,(HL) INC H LD D,(HL) INC H LD E,(HL) EXX LD (HL),A INC HL DJNZ MPDIV8T_L1 DEC C JR NZ,MPDIV8T_L1 OR A RET ; [WORK3] = [WORK2] / divisor (use DIVTBL2) MPDIV8T2: LD HL,WORK2 LD DE,WORK3 CALL CHECK_WORK RET C EXX LD HL,(DIVTBL2_H+1)*100H+1 LD B,(HL) INC H LD C,(HL) LD DE,0 EXX MPDIV8T2_L1: LD A,(HL) INC HL EXX LD H,DIVTBL2_H ADD A,E JR C,MPDIV8T2_L2 LD L,A LD A,D ADD A,(HL) INC H LD D,(HL) INC H LD E,(HL) EXX LD (DE),A INC DE DJNZ MPDIV8T2_L1 DEC C JR NZ,MPDIV8T2_L1 OR A RET MPDIV8T2_L2: ADD A,C LD L,A LD A,D ADD A,B ADD A,(HL) INC H LD D,(HL) INC H LD E,(HL) EXX LD (DE),A INC DE DJNZ MPDIV8T2_L1 DEC C JR NZ,MPDIV8T2_L1 OR A RET ; [DE..DE+(PBIN_SIZE)-1] = [HL..HL+(PBIN_SIZE)-1] / IX (0100H <= IX < 8000H) MPDIV9_15: CALL CHECK_WORK RET C PUSH HL PUSH DE PUSH BC PUSH IX POP BC LD A,B CP 40H JP NC,MPDIV9_15_7 CP 20H JP NC,MPDIV9_15_6 CP 10H JP NC,MPDIV9_15_5 CP 08H JP NC,MPDIV9_15_4 CP 04H JP NC,MPDIV9_15_3 CP 02H JP NC,MPDIV9_15_2 JP MPDIV9_15_1 MPDIV9_15_1: LD L,B LD A,C SRL L RRA RR L RRA RR L LD H,A CALL MPDIV9_15_MAKETBL POP BC POP DE POP HL MPDIV9_15_1_L1: LD A,(HL) INC HL EXX LD D,L SRA H RR L LD H,DIVTBL2_H SUB (HL) LD E,A INC H LD A,D SBC A,(HL) LD D,A INC H LD A,(HL) LD H,D LD L,E ADD HL,BC JR NC,MPDIV9_15_1_L2 INC A LD D,H LD E,L ADD HL,BC JR C,MPDIV9_15_1_L5 MPDIV9_15_1_L2: EX DE,HL MPDIV9_15_1_L3: EXX LD (DE),A INC DE DJNZ MPDIV9_15_1_L1 MPDIV9_15_1_L4: DEC C JR NZ,MPDIV9_15_1_L1 OR A RET MPDIV9_15_1_L5: INC A EXX LD (DE),A INC DE DJNZ MPDIV9_15_1_L1 JR MPDIV9_15_1_L4 MPDIV9_15_2: LD L,B LD A,C SRL L RRA RR L RRA RR L RRA RR L LD H,A CALL MPDIV9_15_MAKETBL POP BC POP DE POP HL MPDIV9_15_2_L1: LD A,(HL) INC HL EXX LD D,L SRL H RR L SRL H RR L LD H,DIVTBL2_H SUB (HL) LD E,A INC H LD A,D SBC A,(HL) LD D,A INC H LD A,(HL) LD H,D LD L,E ADD HL,BC JR NC,MPDIV9_15_2_L2 INC A LD D,H LD E,L ADD HL,BC JR C,MPDIV9_15_2_L5 MPDIV9_15_2_L2: EX DE,HL MPDIV9_15_2_L3: EXX LD (DE),A INC DE DJNZ MPDIV9_15_2_L1 MPDIV9_15_2_L4: DEC C JR NZ,MPDIV9_15_2_L1 OR A RET MPDIV9_15_2_L5: INC A EXX LD (DE),A INC DE DJNZ MPDIV9_15_2_L1 JR MPDIV9_15_2_L4 MPDIV9_15_3: LD L,B LD A,C SRL L RRA RR L RRA RR L RRA RR L RRA RR L LD H,A CALL MPDIV9_15_MAKETBL POP BC POP DE POP HL MPDIV9_15_3_L1: LD A,(HL) INC HL EXX LD D,L LD E,A LD A,H RRA RR L RRA RR L RRA RR L LD H,DIVTBL2_H LD A,E SUB (HL) LD E,A INC H LD A,D SBC A,(HL) LD D,A INC H LD A,(HL) LD H,D LD L,E ADD HL,BC JR NC,MPDIV9_15_3_L2 INC A LD D,H LD E,L ADD HL,BC JR C,MPDIV9_15_3_L5 MPDIV9_15_3_L2: EX DE,HL MPDIV9_15_3_L3: EXX LD (DE),A INC DE DJNZ MPDIV9_15_3_L1 MPDIV9_15_3_L4: DEC C JR NZ,MPDIV9_15_3_L1 OR A RET MPDIV9_15_3_L5: INC A EXX LD (DE),A INC DE DJNZ MPDIV9_15_3_L1 JR MPDIV9_15_3_L4 MPDIV9_15_4: LD H,B LD L,C ADD HL,HL ADD HL,HL ADD HL,HL CALL MPDIV9_15_MAKETBL POP BC POP DE POP HL MPDIV9_15_4_L1: LD A,(HL) INC HL EXX LD D,L ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL LD L,H LD H,DIVTBL2_H SUB (HL) LD E,A INC H LD A,D SBC A,(HL) LD D,A INC H LD A,(HL) LD H,D LD L,E ADD HL,BC JR NC,MPDIV9_15_4_L2 INC A LD D,H LD E,L ADD HL,BC JR C,MPDIV9_15_4_L5 MPDIV9_15_4_L2: EX DE,HL MPDIV9_15_4_L3: EXX LD (DE),A INC DE DJNZ MPDIV9_15_4_L1 MPDIV9_15_4_L4: DEC C JR NZ,MPDIV9_15_4_L1 OR A RET MPDIV9_15_4_L5: INC A EXX LD (DE),A INC DE DJNZ MPDIV9_15_4_L1 JR MPDIV9_15_4_L4 MPDIV9_15_5: LD H,B LD L,C ADD HL,HL ADD HL,HL CALL MPDIV9_15_MAKETBL POP BC POP DE POP HL MPDIV9_15_5_L1: LD A,(HL) INC HL EXX LD D,L ADD HL,HL ADD HL,HL ADD HL,HL LD L,H LD H,DIVTBL2_H SUB (HL) LD E,A INC H LD A,D SBC A,(HL) LD D,A INC H LD A,(HL) LD H,D LD L,E ADD HL,BC JR NC,MPDIV9_15_5_L2 INC A LD D,H LD E,L ADD HL,BC JR C,MPDIV9_15_5_L5 MPDIV9_15_5_L2: EX DE,HL MPDIV9_15_5_L3: EXX LD (DE),A INC DE DJNZ MPDIV9_15_5_L1 MPDIV9_15_5_L4: DEC C JR NZ,MPDIV9_15_5_L1 OR A RET MPDIV9_15_5_L5: INC A EXX LD (DE),A INC DE DJNZ MPDIV9_15_5_L1 JR MPDIV9_15_5_L4 MPDIV9_15_6: LD H,B LD L,C ADD HL,HL CALL MPDIV9_15_MAKETBL POP BC POP DE POP HL MPDIV9_15_6_L1: ; 160..200 clk LD A,(HL) INC HL EXX LD D,L ADD HL,HL ADD HL,HL LD L,H LD H,DIVTBL2_H SUB (HL) LD E,A INC H LD A,D SBC A,(HL) LD D,A INC H LD A,(HL) LD H,D LD L,E ADD HL,BC JR NC,MPDIV9_15_6_L2 INC A LD D,H LD E,L ADD HL,BC JR C,MPDIV9_15_6_L5 MPDIV9_15_6_L2: EX DE,HL MPDIV9_15_6_L3: EXX LD (DE),A INC DE DJNZ MPDIV9_15_6_L1 MPDIV9_15_6_L4: DEC C JR NZ,MPDIV9_15_6_L1 OR A RET MPDIV9_15_6_L5: INC A EXX LD (DE),A INC DE DJNZ MPDIV9_15_6_L1 JR MPDIV9_15_6_L4 MPDIV9_15_7: LD H,B LD L,C CALL MPDIV9_15_MAKETBL POP BC POP DE POP HL MPDIV9_15_7_L1: LD A,(HL) INC HL EXX LD D,L ADD HL,HL LD L,H LD H,DIVTBL2_H SUB (HL) LD E,A INC H LD A,D SBC A,(HL) LD D,A INC H LD A,(HL) LD H,D LD L,E ADD HL,BC JR NC,MPDIV9_15_7_L2 INC A LD D,H LD E,L ADD HL,BC JR C,MPDIV9_15_7_L5 MPDIV9_15_7_L2: EX DE,HL MPDIV9_15_7_L3: EXX LD (DE),A INC DE DJNZ MPDIV9_15_7_L1 MPDIV9_15_7_L4: DEC C JR NZ,MPDIV9_15_7_L1 OR A RET MPDIV9_15_7_L5: INC A EXX LD (DE),A INC DE DJNZ MPDIV9_15_7_L1 JR MPDIV9_15_7_L4 ; in : HL=normalized divisor(4000H..7FFFH) BC=divisor ; out : BC'=-divisor HL'=0 MPDIV9_15_MAKETBL: EX DE,HL XOR A LD H,A LD L,A PUSH BC EXX POP BC LD D,A LD E,A LD L,A MPDIV9_15_MT_L1: LD H,DIVTBL2_H LD (HL),E INC H LD (HL),D INC H LD (HL),A INC L EXX SET 7,H JR MPDIV9_15_MT_L3 MPDIV9_15_MT_L2: INC A JR Z,MPDIV9_15_MT_L4 EXX EX DE,HL ADD HL,BC EX DE,HL EXX MPDIV9_15_MT_L3: OR A SBC HL,DE JR NC,MPDIV9_15_MT_L2 ADD HL,DE EXX JR MPDIV9_15_MT_L1 MPDIV9_15_MT_L4: EXX MPDIV9_15_MT_L5: LD H,A LD L,A LD A,B CPL LD B,A LD A,C CPL LD C,A INC BC EXX RET ; in : IX=divisor (8000H <= IX < 10000H), H=Table addr.H MAKE_DIVTBL16: LD A,H EX AF,AF' PUSH IX POP BC INC BC SRL B RR C LD A,B OR C JR NZ,MKDIVT16_L1 SET 7,B MKDIVT16_L1: PUSH BC XOR A LD H,A LD L,A EXX POP BC LD D,A LD E,A LD L,A MKDIVT16_L2: EX AF,AF' LD H,A EX AF,AF' LD (HL),E INC H LD (HL),D INC H LD (HL),A INC L EXX SET 7,H JR MKDIVT16_L4 MKDIVT16_L3: INC A RET Z EXX EX DE,HL ADD HL,BC EX DE,HL EXX MKDIVT16_L4: OR A SBC HL,BC JR NC,MKDIVT16_L3 ADD HL,BC EXX JR MKDIVT16_L2 ; [DE] = [HL] / IX (8000H <= IX < 10000H, use DIVTBL2) MPDIV16T2: CALL CHECK_WORK RET C EXX PUSH IX POP BC LD HL,0 EXX MPDIV16T2_L1: LD A,(HL) INC HL EXX LD D,L LD E,A PUSH DE LD L,H SRL H RR D RRA LD H,DIVTBL2_H SUB (HL) LD E,A INC H LD A,D SBC A,(HL) LD D,A INC H LD A,(HL) EX DE,HL POP DE EX AF,AF' XOR A SRL E ADC HL,HL ADC A,A BIT 0,C JR Z,MPDIV16T2_L3 EX AF,AF' LD D,A ADD A,L LD L,A LD A,D JR NC,MPDIV16T2_L2 INC H JR NZ,MPDIV16T2_L2 EX AF,AF' INC A EX AF,AF' MPDIV16T2_L2: EX AF,AF' MPDIV16T2_L3: OR A JR Z,MPDIV16T2_L5 MPDIV16T2_L4: SBC HL,BC SBC A,0 EX AF,AF' INC A EX AF,AF' JP NZ,MPDIV16T2_L4 MPDIV16T2_L5: EX AF,AF' OR A MPDIV16T2_L6: INC A SBC HL,BC JR NC,MPDIV16T2_L6 ADD HL,BC DEC A EXX LD (DE),A INC DE DJNZ MPDIV16T2_L1 DEC C JP NZ,MPDIV16T2_L1 OR A RET ; 100”{ƒe[ƒuƒ‹‚ÆBCD•ÏŠ·ƒe[ƒuƒ‹‚ðì¬ MAKE_BCDTBL: LD HL,MUL100TBL_H*100H LD D,L LD E,L LD BC,100 MKBCDT_L1: LD (HL),E INC H LD (HL),D DEC H EX DE,HL ADD HL,BC EX DE,HL INC L JR NZ,MKBCDT_L1 LD HL,BCDTBL_H*100H XOR A MKBCDT_L2: LD (HL),A INC L ADD A,1 DAA JR NC,MKBCDT_L2 RET ; [DE..DE+IX] = packed BCD([HL..HL+BC-1]) BIN2BCD: LD A,(HL) LD (DE),A INC DE DEC BC ADD HL,BC EXX PUSH IX POP BC LD DE,54426 ; floor(10000H * log(100) / log(100H)) LD HL,0 BIN2BCD_L1: EXX PUSH HL PUSH BC PUSH DE DEC BC INC C INC B LD A,C LD C,B LD B,A XOR A LD D,MUL100TBL_H BIN2BCD_L2: LD E,(HL) EX DE,HL ADC A,(HL) EX DE,HL LD (HL),A DEC HL INC D LD A,(DE) DEC D DJNZ BIN2BCD_L2 DEC C JR NZ,BIN2BCD_L2 ADC A,B LD D,BCDTBL_H LD E,A LD A,(DE) POP DE LD (DE),A INC DE POP BC POP HL EXX ADD HL,DE JR NC,BIN2BCD_L4 EXX DEC HL DEC BC LD A,B OR C JR NZ,BIN2BCD_L3 INC HL INC BC BIN2BCD_L3: EXX BIN2BCD_L4: DEC BC LD A,B OR C JR NZ,BIN2BCD_L1 RET END