(С) Коваленко В.В.
г. Яровое, Алтайский край, 1996
Я до недавних пор не являлся подписчиком Вашего журнала, но время от
времени мне попадались в руки его номера. Как то в одном из журналов в
разделе "Форум" я прочитал отзыв о компьютере "ATM-turbo (2,2+), и читатель,
написавший письмо сетовал на неработоспособность программ "FCommander
3.07","DCU 2.02","DCU 2.31" на этих компьютерах. Не знаю, был ли ответ на
этот вопрос в каком-либо из номеров Вашего журнала и поэтому хочу
поделиться своими исследованиями по этому вопросу.
Во всех этих программах для обеспечения точности часов, во время работы
с диском, используется система прерываний второго рода (IM2). О работе
TR-DOS с прерываниями второго рода уже упоминалась на страницах Вашего
журнала, и поэтому я не буду подробно останавливаться на этом вопросе. В
этих программах в регистр i заносится число #09; таким образом, вектор
прерываний будет указывать на адрес #09FF. Если прерывание произойдет в
ПЗУ ОС, то оттуда будет считано число #FE69. По этому адресу в этих
программах находится команда, делающая переход на подпрограмму обработки
прерываний ОС. Если прерывание происходит в ПЗУ TR-DOS, то будет считано
число #FFFF. Предварительно по этому адресу записывается число #18, и мы
получаем JR #F3, т.е. переход на адрес #FFF4, где находится команда,
делающая переход на подпрограмму обработки прерываний, если они возникли
при работе в TR-DOS. Все сказанное выше будет работать, если у Вас
стандартное ПЗУ TR-DOS, но в компьютере ATM-Turbo в ПЗУ TR-DOS по адресу
#09FF находится число #3200, и эти программы сделают переход на адрес
#3200, а не на #FFFF.
Теперь приведу пример переделки программы FCommander 3.07 для работы на
ATM-turbo. Все адреса будут даны при просмотре программой ADM.
По адресу #8B03 находится программа, устанавливающая прерывания IM2:
8B03 LD A,#09
LD I,A
LD A,#C3
LD (#FE69),A
LD HL,#F498
LD (#FE6A),HL
LD (#FFF4),A
LD HL,#F28C
LD (#FFF5),HL
IM2
...
Так как адрес #09FF нам применить нельзя, используем #3AFF (в ПЗУ ОС
там будет #FFFF, в ПЗУ TR-DOS ATM-turbo - #F100, в стандартном TR-DOS
то же #F100).
Изменим программу:
8B03 LD A,#3A
LD I,A
LD A,#C3
LD (#FFF4),A
LD HL,#F498
LD (#FFF5),HL
LD (#F100),A
LD HL,#F28C
LD (#F101),HL
IM2
...
После этого мы получим работающую на ATM-turbo программу, к тому же на
других компьютерах она тоже будет работать нормально. Недостатки: по
адресу #F100 находится символьный набор, и мы испортим цифру 4 в часах и в
надписи "48", которая появляется в левом верхнем углу в режиме 48K. Для
того, чтобы это устранить, делаем следующее. В этой программе два набора
цифр в символьном наборе, поэтому если изменить по адресу #8DC5 команду
LD BC,#F0DB на LD BC,#EE5C, то часы и надпись "48" будут выводиться
несколько утолщенным, но неиспорченным шрифтом. Побочные явления: перед
надписью "48" стоит двоеточие, а двоеточие в часах перестанет мигать.
Устранение:
#8DA5 3E5A LD A,#5A
#9581 3E5B LD A,#5B
По этим адресам было:
#8DA5 3E0A LD A,#0A
#9581 3E0B LD A,#0B
В результате мы получим полностью работоспособную программу, без всяких
побочных явлений.
В программе "DCU 2.02" можно фрагмент программы:
LD A,#09
LD I,A
LD A,#C3
LD (#FE69),A
LD HL,#EA89
LD (#FE6A),HL
LD (#FFF4),A
LD HL,#E860
LD (#FFF5),HL
IM2
...
изменить на:
LD A,#16
LD I,A
LD A,#C3
LD (#C970),A
LD HL,#EA89
LD (#C971),HL
LD (#FFF4),A
LD HL,#E860
LD (#FFF5),HL
IM2
...
При этом несколько испортится надпись "(c) 1991 Piter ltd., Leningrad".
Программа будет работать только на "ATM-turbo".
В программе "DCU 2.31" можно сделать следующие изменения (будут указаны
реальные адреса). По адресу #EC7E записать:
EC7E LD A,#3A
LD I,A
LD A,#C3
LD (#FFF4),A
LD HL,(#EEDF)
LD (#FFF5),HL
LD (#F100),A
LD HL,#ECB2
LD (#F101),HL
IM2
...
по адресу #F0FD записать JP #C50A
по адресу #C509
C509 NOP
C50A LD DE,#0064 *
CALL #F110 *
JP #F103 *
В принципе, команды отмеченные звездочкой можно записать в любом другом
месте, соответственно изменив команду безусловного перехода по адресу
#F0FD.
После этой переделки программа будет успешно работать как на ATM-turbo,
так и на компьютерах со стандартной TR-DOS.