ZX-Spectrum & TR-DOS для пользователей и программистов 1994 г.

Микроконтроллер КР1818ВГ93 - программирование.


Программирование

В начале этого раздела говорилось о том, что в силу аппаратных
особенностей интерфейса Beta Disk доступ к подпрограммам из его ПЗУ и
регистрам микроконтроллера невозможен. Однако это не совсем так. Пере-
дать управление на любую ячейку ПЗУ можно не вполне обычным методом,
суть которого очень проста: нужно поместить адрес подпрограммы из ПЗУ в
стек, а затем передать управление на любую команду RET, находящуюся в
«открытой» части ПЗУ (в диапазоне адресов 15616...15871). Сам факт

передачи управления «заменит» ПЗУ, а команда RET извлечет из стека адрес
подпрограммы и передаст ей управление. Для того, чтобы вернуться в
вызывающую программу, перед адресом подпрограммы ПЗУ в стек нужно
записать еще адрес возврата*.

Вот как, например, можно «нажать» на кнопку MAGIC, если в интер-
фейсе ее забыли сделать.

Эту небольшую подпрограмму нужно расположить в памяти и вызвать
из Бейсика функцией USR.

START ЕХХ сохранение регистровой пары HL' необходимо

;дпя нормальной работы Бейсика

PUSH HL

LD HL,ADDRET ;запись в стек адреса возврата

PUSH HL

LD HLJ02 ;запись в стек адреса подпрограммы выполняю-
щейся при нажатии на кнопку MAGIC

PUSH HL

JP 15664 ;передача управления в теневое ПЗУ. По дан-

ному адресу расположена команда RET
ADDRET POP HL восстановление регистровой пары HL' и возврат

;в Бейсик

ЕХХ

RET

У приведенного способа есть один недостаток: необходимо точно знать
адреса вызываемых подпрограмм. Казалось бы, эта проблема довольно
просто решаема: достаточно один раз дизассемблировать ПЗУ и узнать все
«тонкости». Однако это только полдела. Фирма Technology Research разра-
ботала несколько версий ОС TR-DOS, у нас наибольшее распространение
получили версии 5.01 и 5.03. Несмотря на незначительные функциональ-
ные различия, большинство подпрограмм в этих версиях расположены по
разным адресам.

Определить, что именно находится в данном компьютере, можно,
считав в буфер первые 256 байт из ПЗУ. Для ОС версии 5.01 в байте с
адресом #19 будет записано число #BD, а для версии 5.03 — число #27.

Некоторой недоработкой ОС представляется отсутствие подпрограмм
непосредственной работы с регистрами микроконтроллера КР1818ВГ93.
Частично этот недостаток можно обойти, воспользовавшись частями системы
«в своих целях». Ниже описаны несколько полезных подпрограмм, при этом
приведен адрес для версии 5.03, а в скобках для версии 5.01.

Для записи в любой регистр (внешнее устройство) Beta Disk можно
воспользоваться подпрограммой, находящейся по адресу 10835 (10761).

В регистровой паре ВС необходимо разместить адрес системного
регистра или регистров микроконтроллера, а в аккумуляторе — записывае-
мое значение.

OUT (С),А

RET

Если с записью в регистры дело обстоит достаточно просто, то с
чтением начинаются проблемы — таких простых решений ОС не предостав-
ляет.

Прочитать регистры дорожки и сектора микроконтроллера невозмож-
но, поэтому в программе необходимо хранить их копии.

*) Как посмотреть содержимое «теневого» ПЗУ, было рассказано в разделе
«Идеология и структура».

Программа чтения регистра состояний микроконтроллера находится
по адресу 16179 (16169). Однако прежде, чем ее использовать, необходимо
выполнить ряд действий: в регистр дорожки микроконтроллера записать О,
в регистр сектора — #0А, а в регистр D микропроцессора записать 1.
Считанный регистр состояний возвращается в регистре В микропроцессора.
Ниже показан алгоритм считывания регистра состояний:

Напрямую считывать информацию из регистра данных нельзя, одна-
ко в ПЗУ есть две программы, которыми удобно пользоваться для считывания
и записи секторов, адресных маркеров, дорожек. Подпрограмма чтения
расположена по адресу 16341 (16331), а подпрограмма записи — по адресу
16341 (16304). Передавать управление подпрограмме нужно сразу же после
записи Команды в регистр команд микроконтроллера. Регистровая пара
микропроцессора HL должна содержать адрес размещения данных в памяти.
По выходе из подпрограммы регистровая пара HL указывает на байт,
расположенный за последним байтом данных, пара DE содержит случайное
значение;: Если по выходе из подпрограммы значение регистра В равно
нулю, то это указывает на ошибку. Конкретизировать ошибку или правиль-
ность операций можно, прочитав регистр состояний. Ниже представлен
алгоритм выполнения команд передачи данных:

На основании изложенных здесь сведений автором была написана
программа, выполняющая функции Базовой системы ввода/вывода, подроб-
ные сведения о которой помещены в следующем разделе.




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Pot-Pourri - Cокращенная версия прайса по тематике Spectrum-Scorpion.
Оглавление - содержание выпуска.
Проходилка - Описание-проходилка игры: Жезл Багдада (Scepetre of Bagdad).
Там... - Дикий мед, Закат, Это все.
Sofтинка - Программы для печати в приложении к журналу.

В этот день...   18 апреля