## Meta

base:table_generator_routine_for_fast_8_bit_mul_table

# Table generator for square table based multiplications

By Graham.

For the fast 8 bit multiplication routine you need a table containing 512 16-bit values of the function f(x)=int(x*x/4).

Since this table needs to be generated quite often, here is a minimum size routine to calculate that table (36 bytes long):

```      ldx #\$00
txa
.byte \$c9   ; CMP #immediate - skip TYA and clear carry flag
lb1:  tya
ml1:  sta multabhi,x
tay
cmp #\$40
txa
ror
sta ml9+1
inx
ml0:  sta multablo,x
bne lb1
inc ml0+2
inc ml1+2
clc
iny
bne lb1```

And for the Seriously fast multiplication by JackAsser you'll also need an extra table containing 512 16-bit values of the function f(x)=int((x-255)*(x-255)/4). This can easily be derived from the above table and generated by adding the following code to Graham's excellent routine:

```ldx #\$00
ldy #\$ff
:
lda multabhi+1,x
sta multab2hi+\$100,x
lda multabhi,x
sta multab2hi,y
lda multablo+1,x
sta multab2lo+\$100,x
lda multablo,x
sta multab2lo,y
dey
inx
bne :-```