Специалист/Техническая информация

Материал из Emuverse
Перейти к: навигация, поиск
Red copyright.png Данный материал защищён авторскими правами!

Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей.

Источник: http://www.emu80.org/dev/dev_s.html

Распределение памяти

0000-8FFF - ОЗУ
9000-BFFF - Видео-ОЗУ
C000-C7FF - ПЗУ Загрузчика
C800-...  - ПЗУ Монитора
F000-F7FF - 580ВВ55 - 1
F800-FFFF - 580ВВ55 - 2 (Клавиатура)

Структура видео-ОЗУ

Экранная область имеет разрешение 384x256 в черно-белом режиме. Байт по адресу 9000H представляет 8 первых точек в первой строке экрана. Байт по адресу 9001H — 8 первых точек во второй строке, а байт по адресу 9100h — точки с 8 по 16 в первой строке и т. д. Старшие биты располагаются слева. Бит, установленный в 1 — светлая точка.

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

Матрица клавиатуры имеет размер 6x12:

СТР -=  :*  .>  ЗБ  ВК
[ ] 0   ХH  Э\  /?  ПС
[x] 9)  ЗZ  ЖV  ,<  ->
EDIT8(  Щ]  ДD  Ю@  ПВ
F8  7,  Ш[  ЛL  БB  <-
F7  6&  ГG  ОO  ЬX  Sp
F6  5%  НN  РR  ТT  АР2
F5  4$  ЕE  ПP  ИI  ТАБ
F4  3#  КK  АA  МM  DOWN
F3  2"  УU  ВW  СS  UP
F2  1!  ЦC  ЫY  Ч^  HOME
F1  ;+  ЙJ  ФF  ЯQ  Р/Л
Порт A
  • младшие 8 бит из 12 матрицы клавиатуры (ввод/вывод)
Порт B
  • биты 2-7: 6 бит матрицы клавиатуры (ввод/вывод)
  • бит 1: клавиша НР (1-отжата)
  • бит 0: ввод с магнитофона
Порт C
  • биты 0-3: 4 старших бита из 12 матрицы клавиатуры
  • бит 4: триггер «начальный пуск». Используется для корректного «Reset»
  • бит 5: выход звука
  • бит 6: не используется
  • бит 7: выход на магнитофон

Для опроса клавиатуры может использоваться один из трех методов:

  • Порты A, младшая половина C и B программируются на ввод. Нажатая клавиша определяется по положению нулей в обоих портах. Нажатая клавиша располагается на пересечении положения нулей.
  • Порт A и младшая половина C программируются на вывод, порт B — на ввод. Осуществляется сканирование методом бегущего «0» путем записи в порты A и C и анализа порта B.
  • Порт A и младшая половина C программируются на ввод, порт B — на вsвод. Осуществляется сканирование методом бегущего «0» путем записи в порт B и анализа портов A и C.

Стандартные точки входа Загрузчика

C010H - очистка экрана
  Вх: (8FFA)=FFFF - светлый фон
      (8FFA)=0000 - темный фон
 Изм: --

C037H - вывод символа на экран
  Вх: C - код символа
      (8ffc), (8ffd) - положение курсора
      (8fe7), (8fe8) - (адрес знакогенератора)/8
 Изм: --

C170H - генерирование звука
  Вх: (8ff1) - частота сигнала
      (8ff2) - длительность сигнала
 Изм: A

C190H - задержка
  Вх: B - задержка
 Изм: ?

C254H - программирование порта клавиатуры
        (А,С - вывод, В - ввод, режим 0).
 Изм: ?

C257H - программирование порта клавиатуры
        (А,С0..С3 - ввод, В,С4..С7 - вывод, режим 0).

C337H - ввод символа с клавиатуры
 Вых: A - клд символа 
 Изм: --

C377H - ввод байта с магнитофона
  Вх: A=08H - без поиска синхробайта
      A=FFH - с поиском синхробайта
 Вых: A - введенный байт 
 Изм: --

C3D0H - запись байта на магнитофон
  Вх: A - выводимый байт
 Изм: --

C3F9H - ввод блока произвольной длины с магнитофона с поиском синхробайта.
       (1-2 байт в блоке - адрес начала, 3-4 байт - адрес конца блока.
 Изм: ?

C422H - ввод блока произвольной длины с магнитофона с поиском синхробайта.
  Вх: HL - адрес начала блока
      DE - адрес конца блока
 Изм: ?

C427H - сравнение HL и DE
  Вх: HL, DE
 Вых: Z=1, если равны
 Изм: A

C42DH - пересылка блока памяти
  Вх: HL - адрес начала блока
      DE - адрес конца блока
      BC - новый адрес блока
 Изм: A,BC,HL
Некорректно работает при пересылке "вверх", если перекрываются адреса.

C438H - вывод сообщения на экран
  Вх: HL - адрес начала сообщения
 Изм: A,BC,HL

Стандартные точки входа Монитора (поздних версий)

C803H - ввод символа с клавиатуры без ожидания
C809H - вывод символа на экран
C812H - опрос состояния клавиатуры (?)
C815H - вывод байта на экран в шестнадцатеричном виде
C818H - вывод сообщения на экран
C81BH - ввод символа с клавиатуры без ожидания нажатия
C81EH - запрос положения курсора
C806H - чтение байта с магнитофона
C80CH - запись байта на магнитофон
C824H - ввод блока с магнитофона (?)
C827H - вывод блока на магнитофон (?)
C82AH - подсчет контрольной суммы блока
C830H - установка верхней границы свободной памяти
C833H - запрос верхней границы свободной памяти
C80FH - вывод символа не принтер
C840H - вывод байта на принтер в шестнадцатеричном виде
C843H - вывод сообщения на принтер
C852H - определение готовности принтера
C855H - генерирование звука

Информация о входных и выходных параметрах у меня есть, здесь она будет размещена чуть позже.

Служебные ячейки Загрузчика

8FE3H,8FE4H - адрес вводимой с маг. программы (при вводе через C3F9H)
8FED,8FEE - адрес подпрограммы задержки при вводе символа с клавиатуры
8FE5,8FE6 - не используются
8FDF,8FE0 - адрес начала подпрогаммы обработки кодов клавиш
8FE9 - код символа, выводимого на экран
8FEF, 8FF0 - код нажатой клавиши (в верхнем регистре)
8FF1, 8FF2 - частота и длительность звука
8FF3 - признак инвертирования сигнала с магнитофона
8FF8, 8FF9 - адрес нижней экранной ячейки для скроллинга
8FFa, 8FFb - цвет экрана