Today I thought about general 8bit * 8bit multiplication routine... I'm propably 1000th person to do that or so, but I came up with this 223 clock version that needs 291 bytes of memory. Since I wrote it I may just as well share it although it might be a bit pointless.
It is not fastest and not smallest, but somewhere in between... At least it looks funny
DB #FE ;BASIC Header DW BEGIN,END-1,START ORG #C000 BEGIN: ; 16*16 table DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 DB #00,#01,#02,#03,#04,#05,#06,#07,#08,#09,#0A,#0B,#0C,#0D,#0E,#0F DB #00,#02,#04,#06,#08,#0A,#0C,#0E,#10,#12,#14,#16,#18,#1A,#1C,#1E DB #00,#03,#06,#09,#0C,#0F,#12,#15,#18,#1B,#1E,#21,#24,#27,#2A,#2D DB #00,#04,#08,#0C,#10,#14,#18,#1C,#20,#24,#28,#2C,#30,#34,#38,#3C DB #00,#05,#0A,#0F,#14,#19,#1E,#23,#28,#2D,#32,#37,#3C,#41,#46,#4B DB #00,#06,#0C,#12,#18,#1E,#24,#2A,#30,#36,#3C,#42,#48,#4E,#54,#5A DB #00,#07,#0E,#15,#1C,#23,#2A,#31,#38,#3F,#46,#4D,#54,#5B,#62,#69 DB #00,#08,#10,#18,#20,#28,#30,#38,#40,#48,#50,#58,#60,#68,#70,#78 DB #00,#09,#12,#1B,#24,#2D,#36,#3F,#48,#51,#5A,#63,#6C,#75,#7E,#87 DB #00,#0A,#14,#1E,#28,#32,#3C,#46,#50,#5A,#64,#6E,#78,#82,#8C,#96 DB #00,#0B,#16,#21,#2C,#37,#42,#4D,#58,#63,#6E,#79,#84,#8F,#9A,#A5 DB #00,#0C,#18,#24,#30,#3C,#48,#54,#60,#6C,#78,#84,#90,#9C,#A8,#B4 DB #00,#0D,#1A,#27,#34,#41,#4E,#5B,#68,#75,#82,#8F,#9C,#A9,#B6,#C3 DB #00,#0E,#1C,#2A,#38,#46,#54,#62,#70,#7E,#8C,#9A,#A8,#B6,#C4,#D2 DB #00,#0F,#1E,#2D,#3C,#4B,#5A,#69,#78,#87,#96,#A5,#B4,#C3,#D2,#E1 START: LD HL,TEST LD (#F39A),HL ;DEFUSR RET TEST: LD HL,#F7F9 ;USR +1 LD A,(HL) DEC L MULT8: ; 8bit * 8bit multiplication: (HL)*A ; 16bit out: (HL) ; Changes: AF,DE,BC LD D,BEGIN/256 RLD LD C,(HL) EX DE,HL LD L,A LD B,(HL) LD L,C LD C,(HL) EX DE,HL RLD LD E,A LD A,(DE) LD E,(HL) EX DE,HL ADD A,(HL) EX DE,HL LD (HL),A SBC A,A AND 16 RLD LD D,A LD A,C ADD A,(HL) LD (HL),A LD A,B ADC A,D INC HL LD (HL),A DEC HL RET END:
!login ou Inscrivez-vous pour poster