
Сообщение от
ivagor
Еще спорный момент с флагом C при умножении.
"C: set if the result is less than -2^15 or greater than or equal to 2^15."
Как я понимаю из этого описания, нужно установить флаг если результат <-2^15 или >=2^15, т.е. текущий вариант процедуры неправильно установит флаг, если результат =-2^15. Или я неправильно понял описание (или описание не совсем корректное). Для проверки можно, например, умножить #1 на #100000
Странно, мне казалось, что у меня это учитывается (результат умножения, положительный, ещё до учёта знака, в R0_R1):
Код:
7: TST R0 ; high 16 bit
BNE 71
TST R1 ; low 16 bit
BPL 72
71: INC R2 ; set bit C in PSW
72: TST R3 ; result's sign
- - - Добавлено - - -

Сообщение от
ivagor
В делении аналогичный фрагмент с не вполне корректным изменением знака
Код:
COM R4 ; dividend was negative
NEG R3
Это поправлял, но, видимо, при дальнейшей доработке взял ещё неисправленный вариант. Сейчас так:
Код:
COM R4 ; dividend was negative
NEG R3
BNE 4
INC R3
4:
- - - Добавлено - - -

Сообщение от
ivagor
Мелочь, но все же в MUL строка
6: BCC 7
лишняя. Нулевые множители в основной цикл не попадают, значит перед нулевым R2 точно был единичный бит в младшем разряде.
Точно, спасибо. Убрал.
Архив обновил: http://thesands.ru/bk0010/EIS-driver-for-BK0010.zip