Специалист/Техническая информация
Данный материал защищён авторскими правами!
Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей. Источник: 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 - цвет экрана