С помощью экспертов по Амигам вышел на отличный алгоритм для такого умножения. К1801ВМ1 несколько неуклюж с таблицами, что не позволяет сделать на нем быстрое табличное умножение как на z80 или 6502. Кстати, мотороловские процессоры (680x, 680x0) тут также неуклюжи. Поэтому с 68020 иногда быстрее использовать сдвиги, чем довольно быстрое (28 тактов) аппаратное умножение. Решил поделиться. Как никак, а красота.Константа data умножается беззнаково на 10000, результат в r2 - high, r3 - low.
С аппаратным умножением (K1801ВМ1Г), конечно, короче, но не факт, что быстрее.Код:mov #data,r0 clr r4 clr r2 mov r0,r3 asl r3 rol r2 asl r3 rol r2 asl r3 rol r2 sub r3,r0 sbc r4 sub r2,r4 asl r3 rol r2 sub r3,r0 sbc r4 sub r2,r4 sub r3,r0 sbc r4 sub r2,r4 swab r0 swab r4 clrb r4 bisb r0,r4 clrb r0 sub r0,r3 sbc r2 sub r4,r2
Интересно узнать, какое и насколько быстрее. Прикрепляю программки для тестирования для БК0010 и 0011. C эмулятором аппаратное значительно быстрее, но там эмулируется какая-то PDP-11 с более быстрым, чем у ВМ1Г умножением. Программка с приведённым выше программным умножением с БК0011 под медленным RT-11 обогнала быстрый американский Коммодор-64 (европейский медленнeе) под максимально быстрым бейсиком в ПЗУ - http://litwr2.atspace.eu/pi/pi-spigot-benchmark.html. А с аппaратным возможно обогнала бы и MSX-2.Код:mov #data,r2 mul #10000,r2 bpl bypass add #10000,r2 bypass
pi-bk.zip


Константа data умножается беззнаково на 10000, результат в r2 - high, r3 - low.
Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 

И показали бы как надо на настоящем честном железе, а не в горе-эмуляторах как мне приходится.