Вход

Просмотр полной версии : Третий параметр директивы O для Микроши - скорость работы с магнитофоном



xintrea
06.11.2021, 21:44
В Мониторе ПЭВМ "Микроша" для директивы O имеется третий (недокументированный) параметр, позволяющий задать константу скорости во время записи на магнитную ленту. Насколько я помню, где-то в ОЗУ в области переменных Монитора есть ячейка, в которой хранится этот коэффициент скорости. И если нужно считать с измененной скоростью, надо сначала записать нужный коэффициент в эту ячейку, а потом произвести загрузку директивой I.

За давностью лет мои записульки потерялись, и я не помню номер ячейки, где хранится эта константа. Кто-нибудь может подсказать?

Возможно, она еще называлась "коэффициент импенданса".

SegaBoy
07.11.2021, 18:06
В Мониторе ПЭВМ "Микроша" для директивы O имеется третий (недокументированный) параметр, позволяющий задать константу скорости во время записи на магнитную ленту. Насколько я помню, где-то в ОЗУ в области переменных Монитора есть ячейка, в которой хранится этот коэффициент скорости. И если нужно считать с измененной скоростью, надо сначала записать нужный коэффициент в эту ячейку, а потом произвести загрузку директивой I.

За давностью лет мои записульки потерялись, и я не помню номер ячейки, где хранится эта константа. Кто-нибудь может подсказать?

Возможно, она еще называлась "коэффициент импенданса".
Если третий параметр директивы O не равен нулю, то это значение сначала сохраняется по адресу $7631, затем к нему прибавляется $11 и результат сохраняется в $7630. Изначально эти значения равны $1f и $30.
При работе директивы I используются значения из адресов $7631 $7632 и $762f, изначально равные $24 и $38. Вот их и нужно изменять.

b2m
08.11.2021, 11:07
Можно и не запоминать адреса, если перед чтением давать команду записи одного байта с этим третьим параметром.

xintrea
17.11.2021, 12:00
Если третий параметр директивы O не равен нулю, то это значение сначала сохраняется по адресу $7631, затем к нему прибавляется $11 и результат сохраняется в $7630.
Изначально эти значения равны $1f и $30.
При работе директивы I используются значения из адресов $7631 и $762f, изначально равные $24 и $38. Вот их и нужно изменять.

Благодарю, но не совсем понял.

Значит, изначально имеем:

7630H - 30H
7631H - 1FH

Вы говорите, что при работе директивы I берется значение из ячейки 7631H равное 24H. Как так, если в ней изначально 1FH?

И второй вопрос - за что конкретно отвечают эти три значения? Насколько я понял, 7631H - это скорость чтения для I и скорость записи для O. А ячейки 7630H и 762FH за что отвечают?

SegaBoy
17.11.2021, 22:08
Благодарю, но не совсем понял.

Значит, изначально имеем:

7630H - 30H
7631H - 1FH

Вы говорите, что при работе директивы I берется значение из ячейки 7631H равное 24H. Как так, если в ней изначально 1FH?

И второй вопрос - за что конкретно отвечают эти три значения? Насколько я понял, 7631H - это скорость чтения для I и скорость записи для O. А ячейки 7630H и 762FH за что отвечают?
Точно. Опечатался когда набирал текст. Адреса для I - $7632 и $762f.
Вот оригинальный фрагмент инициализации этих ячеек в Мониторе:


adr_$f878:
lxi h, $762f
mvi m, $38
inx h
mvi m, $30
inx h
mvi m, $1f
inx h
mvi m, $24

Работает это дело так. В РК86 процедуры save_byte и load_byte используют две разные константы для записи и чтения. Пока при записи или чтении байта не достигнут последний бит, то используются сами константы. Если бит последний, то используя команду вычитания значение константы уменьшается на некоторое число. В Микроше для уменьшения констант вычитание не применяется, а берётся меньшее значение из соседних ячеек.
Итого.
Для директивы O используются ячейки $7631 и $7630, в которых изначально $1f и $30.
Для директивы I используются ячейки $7632 и $762f, в которых изначально $24 и $38.

xintrea
18.11.2021, 23:44
Значит, в памяти с 762FH по 7632H мы имеем:

24H, 30H, 1FH, 38H.

где первая и последняя ячейки предназначены для I, а две средние для O.

Вопрос 1. А уменьшаются ли эти значения в этих ячейках памяти при обработке каждого 8-го бита, или меняется значение где-то в регистре, а значения впамяти не трогаются.

Вопрос 2. Что значит что для Микроши берется меньшее из соседних ячеек? Из каких соседних? Для директивы I ячейки совсем не соседние.