; PI=16arctan(1/5)-4arctan(1/239) ORG 0000H ; 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 WORK1 EQU 01000H WORK2 EQU 06000H WORK3 EQU 0B000H BCD_RESULT EQU 06000H WORK_BASE_H EQU 08H WORK_BASE EQU WORK_BASE_H*100H PBIN_SIZE EQU WORK_BASE-2 PBCD_SIZE EQU WORK_BASE-4 PWORK2_SKIP EQU WORK_BASE-6 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 156 ; ENTRY: LD HL,BIN_SIZE LD (PBIN_SIZE),HL LD HL,BCD_SIZE LD (PBCD_SIZE),HL ENTRY2: DI CALC1: LD A,16 CALL SET_WORK2 LD C,5 LD H,DIVTBL_H CALL MAKE_DIVTBL LD HL,WORK2 CALL MPDIV8T LD HL,WORK2 LD DE,WORK1 LD BC,(PBIN_SIZE) LDIR LD C,5*5 LD H,DIVTBL_H CALL MAKE_DIVTBL CALC1_L1: LD HL,WORK2 CALL MPDIV8T JR C,CALC1_END CALL DIV_ODD JR C,CALC1_END CALL MPADDSUB JR CALC1_L1 CALC1_END: CALC2: LD A,4 CALL SET_WORK2 LD C,239 LD H,DIVTBL_H CALL MAKE_DIVTBL LD HL,WORK2 CALL MPDIV8T LD HL,WORK2 LD DE,WORK1 CALL MPSUB CALC2_L1: LD HL,WORK2 CALL MPDIV8T JR C,CALC2_END LD HL,WORK2 CALL MPDIV8T JR C,CALC2_END CALL DIV_ODD JR C,CALC2_END CALL MPSUBADD JR CALC2_L1 CALC2_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, IY = 1 SET_WORK2: LD HL,WORK2 LD (HL),A INC HL LD D,H LD E,L INC DE LD BC,(PBIN_SIZE) DEC BC DEC BC LD (HL),0 LDIR LD (PWORK2_SKIP),BC LD IY,1 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 CHECK_WORK_L1: LD A,(DE) OR A JR NZ,CHECK_WORK_L2 INC DE DEC HL INC BC LD A,H OR L JR NZ,CHECK_WORK_L1 POP DE SCF RET CHECK_WORK_L2: LD (PWORK2_SKIP),BC EX (SP),HL ADD HL,BC EX DE,HL POP BC DEC BC INC C INC B LD A,C LD C,B LD B,A RET ; [WORK3] = [WORK2] / (2n+1) ; IY=2n+1 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 HL,WORK2 LD DE,WORK3 JP MPDIV16 ; [WORK1] +-= [WORK3] MPADDSUB: PUSH IY POP BC LD HL,WORK3 LD DE,WORK1 BIT 1,C JR Z,MPADD JR MPSUB ; [WORK1] -+= [WORK3] MPSUBADD: PUSH IY POP BC LD HL,WORK3 LD DE,WORK1 BIT 1,C JR Z,MPSUB ; [DE..DE+(PBIN_SIZE)-1] += [HL..HL+(PBIN_SIZE)-1] MPADD: CALL MPADDSUB_SETUP MPADD_L1: LD A,(DE) ADC A,(HL) LD (DE),A DEC HL DEC DE ; 5Bytes LD A,(DE) ADC A,(HL) LD (DE),A DEC HL DEC DE ; LD A,(DE) ADC A,(HL) LD (DE),A DEC HL DEC DE ; LD A,(DE) ADC A,(HL) LD (DE),A DEC HL DEC DE ; LD A,(DE) ADC A,(HL) LD (DE),A DEC HL DEC DE ; LD A,(DE) ADC A,(HL) LD (DE),A DEC HL DEC DE ; LD A,(DE) ADC A,(HL) LD (DE),A DEC HL DEC DE ; LD A,(DE) ADC A,(HL) LD (DE),A DEC HL DEC DE ; 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: CALL MPADDSUB_SETUP MPSUB_L1: LD A,(DE) SBC A,(HL) LD (DE),A DEC HL DEC DE ; 5Bytes LD A,(DE) SBC A,(HL) LD (DE),A DEC HL DEC DE ; LD A,(DE) SBC A,(HL) LD (DE),A DEC HL DEC DE ; LD A,(DE) SBC A,(HL) LD (DE),A DEC HL DEC DE ; LD A,(DE) SBC A,(HL) LD (DE),A DEC HL DEC DE ; LD A,(DE) SBC A,(HL) LD (DE),A DEC HL DEC DE ; LD A,(DE) SBC A,(HL) LD (DE),A DEC HL DEC DE ; LD A,(DE) SBC A,(HL) LD (DE),A DEC HL DEC DE ; DJNZ MPSUB_L1 DEC C JR NZ,MPSUB_L1 RET NC MPSUB_L2: LD A,(DE) DEC A LD (DE),A DEC DE INC A JR Z,MPSUB_L2 RET ; MPADDSUB_SETUP: POP IX LD BC,(PBIN_SIZE) DEC BC ADD HL,BC EX DE,HL ADD HL,BC EX DE,HL PUSH HL LD H,B LD L,C LD BC,(PWORK2_SKIP) XOR A SBC HL,BC LD B,A DEC A SUB L AND 7 LD C,A ADD A,A ADD A,A ADD A,C LD C,A ADD IX,BC ; IX+=((-count)&7)*5 LD A,L SRL H RRA SRL H RRA SRL H RRA INC A INC H LD C,H LD B,A POP HL JP (IX) ; [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 ; [DE..DE+(PBIN_SIZE)-1] = [HL..HL+(PBIN_SIZE)-1] / IX MPDIV16: 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 MPDIV16_L1: LD A,(HL) INC HL EXX ADD A,A ADC HL,HL JR NC,MPDIV16_LB1_1 ADD HL,BC JP MPDIV16_LB1_2 MPDIV16_LB1_1: SBC HL,DE JR NC,MPDIV16_LB1_2 ADD HL,DE MPDIV16_LB1_2: ADC A,A ADC HL,HL JR NC,MPDIV16_LB2_1 ADD HL,BC JP MPDIV16_LB2_2 MPDIV16_LB2_1: SBC HL,DE JR NC,MPDIV16_LB2_2 ADD HL,DE MPDIV16_LB2_2: ADC A,A ADC HL,HL JR NC,MPDIV16_LB3_1 ADD HL,BC JP MPDIV16_LB3_2 MPDIV16_LB3_1: SBC HL,DE JR NC,MPDIV16_LB3_2 ADD HL,DE MPDIV16_LB3_2: ADC A,A ADC HL,HL JR NC,MPDIV16_LB4_1 ADD HL,BC JP MPDIV16_LB4_2 MPDIV16_LB4_1: SBC HL,DE JR NC,MPDIV16_LB4_2 ADD HL,DE MPDIV16_LB4_2: ADC A,A ADC HL,HL JR NC,MPDIV16_LB5_1 ADD HL,BC JP MPDIV16_LB5_2 MPDIV16_LB5_1: SBC HL,DE JR NC,MPDIV16_LB5_2 ADD HL,DE MPDIV16_LB5_2: ADC A,A ADC HL,HL JR NC,MPDIV16_LB6_1 ADD HL,BC JP MPDIV16_LB6_2 MPDIV16_LB6_1: SBC HL,DE JR NC,MPDIV16_LB6_2 ADD HL,DE MPDIV16_LB6_2: ADC A,A ADC HL,HL JR NC,MPDIV16_LB7_1 ADD HL,BC JP MPDIV16_LB7_2 MPDIV16_LB7_1: SBC HL,DE JR NC,MPDIV16_LB7_2 ADD HL,DE MPDIV16_LB7_2: ADC A,A ADC HL,HL JR NC,MPDIV16_LB8_1 ADD HL,BC JP MPDIV16_LB8_2 MPDIV16_LB8_1: SBC HL,DE JR NC,MPDIV16_LB8_2 ADD HL,DE MPDIV16_LB8_2: ADC A,A CPL EXX LD (DE),A INC DE DJNZ MPDIV16_L1 DEC C JR NZ,MPDIV16_L1 OR A RET ; in : C=divisor, H=Table addr.H MAKE_DIVTBL: LD A,H EX AF,AF' LD HL,100H XOR A LD B,A MKDIVT_L1: SBC HL,BC INC A JR NC,MKDIVT_L1 DEC A ADD HL,BC LD E,L EXX LD B,A EX AF,AF' LD H,A LD L,0 LD D,L LD E,L LD C,L MKDIVT_L2: LD (HL),D INC H LD (HL),E INC H LD (HL),C DEC H DEC H LD A,B ADD A,E LD E,A JR NC,MKDIVT_L3 INC D MKDIVT_L3: LD A,C EXX ADD A,E CP C JR NC,MKDIVT_L4 EXX LD C,A INC L JR NZ,MKDIVT_L2 RET MKDIVT_L4: SUB C EXX LD C,A INC DE INC L JR NZ,MKDIVT_L2 RET ; [HL] /= divisor (use DIVTBL) MPDIV8T: 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 ; [DE] = [HL] / divisor (use DIVTBL2) MPDIV8T2: 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 MPDIV9_15_1: LD L,B LD A,C SRL L RRA RR L RRA RR L LD H,A LD E,01H 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_L4 MPDIV9_15_1_L2: EX DE,HL EXX LD (DE),A INC DE DJNZ MPDIV9_15_1_L1 MPDIV9_15_1_L3: DEC C JR NZ,MPDIV9_15_1_L1 OR A RET MPDIV9_15_1_L4: INC A EXX LD (DE),A INC DE DJNZ MPDIV9_15_1_L1 JR MPDIV9_15_1_L3 MPDIV9_15_2: LD L,B LD A,C SRL L RRA RR L RRA RR L RRA RR L LD H,A LD E,04H LD A,0FCH MPDIV9_15_2_JUMP: LD (MPDIV9_15_2_AND+1),A CALL MPDIV9_15_MAKETBL POP BC POP DE POP HL MPDIV9_15_2_L1: LD A,(HL) INC HL EXX LD D,L EX AF,AF' LD A,L MPDIV9_15_2_AND: AND 0FCH OR H LD L,A EX AF,AF' 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_L4 MPDIV9_15_2_L2: EX DE,HL EXX LD (DE),A INC DE DJNZ MPDIV9_15_2_L1 MPDIV9_15_2_L3: DEC C JR NZ,MPDIV9_15_2_L1 OR A RET MPDIV9_15_2_L4: INC A EXX LD (DE),A INC DE DJNZ MPDIV9_15_2_L1 JR MPDIV9_15_2_L3 MPDIV9_15_3: LD H,B LD L,C ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL LD E,08H LD A,0F8H JP MPDIV9_15_2_JUMP MPDIV9_15_4: LD H,B LD L,C ADD HL,HL ADD HL,HL ADD HL,HL LD E,10H LD A,0F0H JP MPDIV9_15_2_JUMP MPDIV9_15_5: LD H,B LD L,C ADD HL,HL ADD HL,HL LD E,20H LD A,0E0H JP MPDIV9_15_2_JUMP MPDIV9_15_6: LD H,B LD L,C ADD HL,HL LD E,01H 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_L4 MPDIV9_15_6_L2: EX DE,HL EXX LD (DE),A INC DE DJNZ MPDIV9_15_6_L1 MPDIV9_15_6_L3: DEC C JR NZ,MPDIV9_15_6_L1 OR A RET MPDIV9_15_6_L4: INC A EXX LD (DE),A INC DE DJNZ MPDIV9_15_6_L1 JR MPDIV9_15_6_L3 MPDIV9_15_7: LD H,B LD L,C LD E,01H 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_L4 MPDIV9_15_7_L2: EX DE,HL EXX LD (DE),A INC DE DJNZ MPDIV9_15_7_L1 MPDIV9_15_7_L3: DEC C JR NZ,MPDIV9_15_7_L1 OR A RET MPDIV9_15_7_L4: INC A EXX LD (DE),A INC DE DJNZ MPDIV9_15_7_L1 JR MPDIV9_15_7_L3 ; in : HL=normalized divisor(4000H..7FFFH), BC=divisor, E=inc pat ; out : BC'=-divisor, HL'=0 MPDIV9_15_MAKETBL: PUSH BC LD A,H CPL LD B,A LD A,L CPL LD C,A INC BC LD H,B LD L,C RES 7,H XOR A LD D,A EXX POP BC LD D,A LD E,A LD L,A EX AF,AF' XOR A MPDIV9_15_MT_L1: LD H,DIVTBL2_H LD (HL),E INC H LD (HL),D INC H LD (HL),A EX AF,AF' EXX ADD A,E ADC A,D EXX LD L,A EX AF,AF' EXX MPDIV9_15_MT_L2: INC A JR Z,MPDIV9_15_MT_L3 EXX EX DE,HL ADD HL,BC EX DE,HL EXX ADD HL,BC JR C,MPDIV9_15_MT_L2 RES 7,H EXX JR MPDIV9_15_MT_L1 MPDIV9_15_MT_L3: EXX LD H,A LD L,A LD A,B CPL LD B,A LD A,C CPL LD C,A INC BC EXX 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 XOR A LD D,A SUB C SRL B RR C SRL B RR C SRL B RR C AND 7 LD E,A ADD A,A ADD A,A ADD A,A ADD A,E LD E,A JR NZ,BIN2BCD_L2 DEC BC BIN2BCD_L2: INC C INC B LD A,C LD C,B LD B,A OR C JR Z,BIN2BCD_L6 LD IX,BIN2BCD_L3 ADD IX,DE ; IX+=((-count)&7)*9 LD D,MUL100TBL_H XOR A JP (IX) BIN2BCD_L3: LD E,(HL) EX DE,HL ADC A,(HL) EX DE,HL LD (HL),A DEC HL INC D LD A,(DE) DEC D ; 9Bytes LD E,(HL) EX DE,HL ADC A,(HL) EX DE,HL LD (HL),A DEC HL INC D LD A,(DE) DEC D ; LD E,(HL) EX DE,HL ADC A,(HL) EX DE,HL LD (HL),A DEC HL INC D LD A,(DE) DEC D ; LD E,(HL) EX DE,HL ADC A,(HL) EX DE,HL LD (HL),A DEC HL INC D LD A,(DE) DEC D ; LD E,(HL) EX DE,HL ADC A,(HL) EX DE,HL LD (HL),A DEC HL INC D LD A,(DE) DEC D ; LD E,(HL) EX DE,HL ADC A,(HL) EX DE,HL LD (HL),A DEC HL INC D LD A,(DE) DEC D ; LD E,(HL) EX DE,HL ADC A,(HL) EX DE,HL LD (HL),A DEC HL INC D LD A,(DE) DEC D ; 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_L3 DEC C JR NZ,BIN2BCD_L3 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_L5 EXX DEC HL DEC BC EXX BIN2BCD_L5: DEC BC LD A,B OR C JP NZ,BIN2BCD_L1 RET BIN2BCD_L6: EXX POP HL POP DE POP DE BIN2BCD_L7: LD (HL),0 INC HL DEC BC LD A,B OR C JR NZ,BIN2BCD_L7 RET END