ZX-Ревю 1996 №7-8 1995 г.

Читатель - читателю - доработка программ для "ATM Turbo".


(С) Коваленко В.В.
            г. Яровое, Алтайский край, 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.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Письма - отзывы о журнале от: raver, destr, sirx, survivor, Ellvis, Utz и Николая Амосова.
Экзамен - вопросы по игре "They Stoley a million" и ответы на прошлые.
Inferno - О журнале.
Программистам - Un-unlimit: Долой бессмертия!!!
Опрос - Результаты опроса, проведенного Kipsoft'ом.

В этот день...   21 ноября