на первый взгляд - всё хорошо
Я всё-таки решил сделать это ещё раз по-другому. Недостатки оригинального кода в диапазоне адресов 0x3A30-0x3AA2 возникают из-за хранения двух информации в одном регистре R1:
1. бит 15 - флаг требования дополнительного сдвига на одну цифру
2. младший байт - количество сдвигов на две цифры (здесь наступает переполнение)
Я переписал всю проблематическую подпрограмму. Приведённая модификация хранит количество сдвигов в полном 16-битном регистре R1, а флаг хранится на стеке.
Code: Select all
; function used by the EXP and LN procedures, M=B*10^(-J+offset)
sub #7,r5 ;r5 points to the multiplicand B
mov r5,r2
sub #8,r2 ;r2 points to the modifier M
movb (sp),r1 ;iteration counter J
sub 10(sp),r1 ;offset to the table of constants
asr r1
ror -(sp) ;mark odd (-J+offset)
; M = B/10^(2*r1)
L3A48: mov #8,r0
L3A4C: tst r1
ble L3A54
clrb (r2)
br L3A62
L3A54: movb (r5),(r2)
dec r5
bit #1,r5
beq L3A62
add #4,r5
L3A62: dec r2
bit #1,r2
beq L3A6E
add #4,r2
L3A6E: dec r1
sob r0,L3A4C
;
tst (sp)+
bpl L3A8A ;skip if (-J+offset) is even
; M = M/10
dec r2
mov #4,r0
L3A7C: sub #8,r2
ror (r2)+
ror (r2)+
ror (r2)+
ror (r2)+
sob r0,L3A7C
;
L3A8A: mov r3,r5
sub #A,r5
jmp @(r4)+
; function used by the TAN and ATN procedures, M=A*10^(-2*J+offset)
add #3,r5
mov r5,r2
sub #12,r2
movb (sp),r1 ;iteration counter J
sub 10(sp),r1 ;offset to the table of constants
clr -(sp)
br L3A48
что бы особо не заморачиваться - пусть PRINT просто печатает в текстовый файл print.txt, лежащий в папке с исполняемым файлом эмулятора, где CSR будет указывать - с какого места новой строки печатать, если CSR не выполняется, то - печатать всё подряд.
Но это не будет просто. Эмулятор ничего не знает про команды Бейсика PRINT или CSR, может лишь нажимать кнопки, записывать и читать память (например буфер строковой переменной $), перехватить данные для контроллера ЖКИ.
виндовый дефолтный калькулятор делает градус sin(1e-200) = 0
Для малых величин X, sin(X) = X и tan(X) = X (в радианах).
прошу пока подаяний на паперти
Ой, прошу пояснения.
You do not have the required permissions to view the files attached to this post.