Специалист/Техническая информация: различия между версиями

Материал из Emuverse
(http://www.emu80.org/dev/dev_s.html)
 
м (мелкие уточнения)
Строка 1: Строка 1:
{{ДИ|Источник=http://www.emu80.org/dev/dev_s.html}}
{{ДИ|Источник=http://www.emu80.org/dev/dev_s.html}}


== Распределение памяти ==
== Карта памяти ==
<PRE>
<PRE>
0000-8FFF - ОЗУ
0000-8FFF - ОЗУ
9000-BFFF - Видео-ОЗУ
9000-BFFF - Видео-ОЗУ
C000-C7FF - ПЗУ Загрузчика
C000-C7FF - ПЗУ (Загрузчик Волкова/Зверкова)
C800-...  - ПЗУ Монитора
C800-CFFF - ПЗУ (Монитор Орлова)
F000-F7FF - 580ВВ55 - 1
D000-EFFF - может стоять ПЗУ пользователя
F800-FFFF - 580ВВ55 - 2 (Клавиатура)
F000-F7FF - ППА пользователя (есть не на всех платах)
F800-FFFF - ППА клавиатуры
</PRE>
</PRE>


== Структура видео-ОЗУ ==
== Структура видео-ОЗУ ==
Экранная область имеет разрешение 384x256 в черно-белом режиме.
Экранная область имеет разрешение 384x256 в черно-белом режиме. Байт по адресу 9000H представляет 8 первых точек в первой строке экрана. Байт по адресу 9001H — 8 первых точек во второй строке, а байт
Байт по адресу 9000H представляет 8 первых точек в первой строке
по адресу 9100h — точки с 8 по 16 в первой строке и т. д. Старшие биты располагаются слева. Бит, установленный в 1 — светлая точка. По формату экрана есть совместимость с ОРИОНОМ-128. Наличие внешней платы адаптера цвета позволяет выводить экранные байты в заранее заданном (в порту PC ППА клавиатуры) цвете. Окрашивается только цвет единичных точек (т.е тех пикселей, что соответствуют 1 в экранном байте).
экрана. Байт по адресу 9001H — 8 первых точек во второй строке, а байт
по адресу 9100h — точки с 8 по 16 в первой строке и т. д. Старшие биты
располагаются слева. Бит, установленный в 1 — светлая точка.


== Программирование ВВ55 ==
== Программирование ППА ВВ55 ==
Матрица клавиатуры имеет размер 6x12:
Матрица клавиатуры имеет формат 6x12, всего 72 клавиши. И ещё отдельная клавиша <НР>. Клавиши <CTRL> применяемой в программах от РК86 и CP/M нет. В некоторых программах её заменяют клавишей <НР>.
<PRE>
<PRE>
Развёрнуто на 90' (слева верхний ряд):
СТР -=  :*  .&gt;  ЗБ  ВК
СТР -=  :*  .&gt;  ЗБ  ВК
[ ] 0  ХH  Э\  /?  ПС
[ ] 0  ХH  Э\  /?  ПС
Строка 35: Строка 34:
</PRE>
</PRE>
;Порт A:
;Порт A:
* младшие 8 бит из 12 матрицы клавиатуры (ввод/вывод)
* левые 8 горизонтальных линий из 12 матрицы клавиатуры (ввод/вывод)


;Порт B:
;Порт B:
* биты 2-7: 6 бит матрицы клавиатуры (ввод/вывод)
* биты D2..D7: 6 вертикальных линий матрицы клавиатуры (ввод/вывод)
* бит 1: клавиша НР (1-отжата)
* бит D1: клавиша <НР> (0 если нажата)
* бит 0: ввод с магнитофона
* бит D0: ввод с магнитофона


;Порт C:
;Порт C:
* биты 0-3: 4 старших бита из 12 матрицы клавиатуры
* биты D0..D3: правые 4 горизонтальные линии из 12 матрицы клавиатуры
* бит 4: триггер «начальный пуск». Используется для корректного «Reset»
* бит D4: триггер НП (начальный пуск). По сбросу =0 и всё адресное пространство ПЗУ
* бит 5: выход звука
* бит 5: выход звука
* бит 6: не используется
* бит 6: без цвета не используется (бит регистра цвета при цветном адаптере)
* бит 7: выход на магнитофон
* бит 7: выход на магнитофон (бит регистра цвета при цветном адаптере)


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


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


== Стандартные точки входа Загрузчика ==
Реально в программах используется только первый вариант. Два других варианта со сканированием из-за отсутсвия диодов (как в матрице РК86) чреваты выходом из строя ППА ВВ55, т.к создают КЗ выходов ППА, к тому же на порядок более медленные и даже, если ППА не выйдет из строя могут давать при опросе таким методом непредсказуемый результат.
 
Есть два варианта ПЗУ Загрузчика, оригинал от А.Волкова и вариант Зверкова. Всегда используется второй вариант, т.к с ним работает монитор Орлова. Отличия в кодах клавиш <F1>...<F7>, они вместо кодов 82H...89H выдают коды 00...07. Коды клавиш <F8>...<F11> совпадают. Монитор А.Волкова исходно опубликованный в стартовой публикации (работающий в ОЗУ 8D00) с 1988 года не используется. Вместо него стандартом является монитор Орлова располагающийся в ПЗУ C800. Т.к именно загрузчик Зверкова и Монитор Орлова используют практически 100% программ. Некоторые игры работают при наличии только загрузчика. Но системные программы все используют входные точки ПЗУ C800, т.к подпрограммы загрузчика имеют недостатки.
 
== Стандартные подпрограммы Загрузчика Волкова/Зверкова ==


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


C037H - вывод символа на экран
C037 - COUT, вывод символа на экран
   Вх: C - код символа
   Вх: C - код символа
       (8ffc), (8ffd) - положение курсора
       (8FFC), (8FFD) - положение курсора
       (8fe7), (8fe8) - (адрес знакогенератора)/8
       (8FE7), (8FE8) - (адрес знакогенератора)/8
  Изм: --
  Не делает ролик экрана, нет обслуживания искейп-кодов. И даже знакоместо перед выводом не очищает, делая XOR изображения символа и исходного содержимого знакоместа.
  Изм: все регистры сохраняет


C170H - генерирование звука
C170 - SOUND, генерирование звука
   Вх: (8ff1) - частота сигнала
   Вх: (8FF1) - частота сигнала
       (8ff2) - длительность сигнала
       (8FF2) - длительность сигнала
  Изм: A
  Изм: все регистры сохраняет
 
C196 - пауза при вводе с клавиатуры
Изм: регистров не портит


C190H - задержка
C1A0 - HISND, звук высокого тона
  Вх: B - задержка
  Изм: не сохраняет А
  Изм: ?


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


C257H - программирование порта клавиатуры
C25A - PPA91, программирование порта клавиатуры
         (А,С0..С3 - ввод, В,С4..С7 - вывод, режим 0).
         (А,С0..С3 - ввод, В,С4..С7 - вывод, режим 0).
Изм: не сохраняет А


C337H - ввод символа с клавиатуры
C337 - RDKEY, ввод символа с клавиатуры (ждёт нажатия клавиши)
  Вых: A - клд символа  
  Вых: A - код символа  
  Изм: --
  Изм: BC,DE,HL не портит


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


C3D0H - запись байта на магнитофон
C3D0 - SVBYTE, запись байта на магнитофон
   Вх: A - выводимый байт
   Вх: A - выводимый байт
  Изм: --
  Изм: регистров не портит
В отличие от аналогичной п/п РК86 выводимый байт не в рег.C, а в рег.А


C3F9H - ввод блока произвольной длины с магнитофона с поиском синхробайта.
C3F9 - LDBLK1, ввод блока произвольной длины с магнитофона с поиском синхробайта.
       (1-2 байт в блоке - адрес начала, 3-4 байт - адрес конца блока.
       (1-2 байт в блоке - адрес начала, 3-4 байт - адрес конца блока.
  Изм: ?
  Изм: сохраняет BC,DE. Заносит нач.адрес в ячейки ASTART (8FF3/8FF4)
 
C414 - LDBLK2, чтение блока с МГ без поиска синхробайта
Изм: сохраняет BC,DE. Ячейки ASTART не меняет.


C422H - ввод блока произвольной длины с магнитофона с поиском синхробайта.
C422 - LDBLK3, всё как у п/п C414, но с поиском синхробайта
   Вх: HL - адрес начала блока
   Вх: HL - адрес начала блока
       DE - адрес конца блока
       DE - адрес конца блока
  Изм: ?
  Изм: сохраняет BC,DE. Ячейки ASTART не меняет.


C427H - сравнение HL и DE
C427 - CMPDH, сравнение регистров HL и DE
   Вх: HL, DE
   Вх: HL, DE
  Вых: Z=1, если равны
  Вых: Z=1, если HL=DE; CY=1, если DE>HL (т.е устанавливает признаки по операции HL-DE)
  Изм: A
  Изм: A


C42DH - пересылка блока памяти
C42D - TRANS, пересылка блока памяти (HL)...(DE) --> (BC)
   Вх: HL - адрес начала блока
   Вх: HL - адрес начала блока
       DE - адрес конца блока
       DE - адрес конца блока плюс 1
       BC - новый адрес блока
       BC - новый адрес блока
  Изм: A,BC,HL
  Изм: A,BC,HL
Некорректно работает при пересылке "вверх", если перекрываются адреса.
Особенность: байт на который указывает DE не копируется. При пересылке вверх, недопустимо перекрытие адресов.


C438H - вывод сообщения на экран
C438 - ZMSSG, вывод сообщения на экран. Стоп-байт 00.
   Вх: HL - адрес начала сообщения
   Вх: HL - адрес начала сообщения
  Изм: A,BC,HL
  Изм: портит A,C,HL. При выходе HL указывает на стоп-байт.
В отличие от п/п C818 не делает ролика и не чистит знакоместа при выводе.
 
C444 - RESET, обработка сброса, т.е исполнительная часть загрузчика
Вводит по сбросу блок с МГ-ленты и запускает его. КС блока не проверяется. Нажатием функц.клавиш ожидание синхробайта прерывается и ожидает нажатия клавиши с кодом константы ввода. По <ВК> выход в монитор, по <ПС> запуск ранее введённой программы по JMP (ASTART).
</PRE>
</PRE>


== Стандартные точки входа Монитора (поздних версий) ==
== Стандартные подпрограммы Монитора Орлова ==
<PRE>
<PRE>
C803H - ввод символа с клавиатуры без ожидания
C803 - CONIN, ввод символа с клавиатуры. Просто JMP на C337
C809H - вывод символа на экран
C806 - LDBYTE, чтение байта с МГ. Просто JMP на C377
C812H - опрос состояния клавиатуры (?)
C809 - COUT, вывод символа. Если не упр.символ, то очищается знакоместо и JMP C037
C815H - вывод байта на экран в шестнадцатеричном виде
C80C - SVBYTE, вывод байта на МГ-ленту. Просто JMP на C3D0 (в отличие от РК86 байт в A)
C818H - вывод сообщения на экран
C80F - GETLIN, ввод строки символов в буфер (HL)...(DE)
C81BH - ввод символа с клавиатуры без ожидания нажатия
C812 - STATUS, проверка нажатия клавиш клавиатуры
C81EH - запрос положения курсора
C815 - HEX_A, вывод байта на экран в шестнадцатеричном виде
C806H - чтение байта с магнитофона
C818 - MSSG, вывод сообщения на экран (с очисткой знакомест)
C80CH - запись байта на магнитофон
C81B - GETKEY, ввод символа с клавиатуры "на лету"
C824H - ввод блока с магнитофона (?)
C81E - ASKCUR, запрос положения курсора
C827H - вывод блока на магнитофон (?)
C821 - RET
C82AH - подсчет контрольной суммы блока
C824 - LD_MAS, чтение массива с МГ. Если A!=0, устанавливает константу. JMP C3F9
C830H - установка верхней границы свободной памяти
C827 - SV_MAS, вывод блока (HL)...(DE) на магнитофон
C833H - запрос верхней границы свободной памяти
C82A - CHKSUM, подсчет контрольной суммы блока (HL)...(DE)
C80FH - вывод символа не принтер
C830 - установка верхней границы свободной памяти
C840H - вывод байта на принтер в шестнадцатеричном виде
C833 - запрос верхней границы свободной памяти
C843H - вывод сообщения на принтер
/PRE>
C852H - определение готовности принтера
C855H - генерирование звука
</PRE>
 
Информация о входных и выходных параметрах у меня есть, здесь
она будет размещена чуть позже.


== Служебные ячейки Загрузчика ==
== Служебные ячейки Загрузчика Волкова/Зверкова ==
<PRE>
<PRE>
8FE3H,8FE4H - адрес вводимой с маг. программы (при вводе через C3F9H)
8FE3,8FE4 - ASTART, адрес последнего введённого с МГ блока
8FDF,8FE0 - AEKEYS, адрес подпрограммы обработки кодов клавиш
8FE7,8FE8 - AFONT, адрес фонта делённый на 8
8FE9 - LAST_S, код символа выведенного на экран
8FED,8FEE - адрес подпрограммы задержки при вводе символа с клавиатуры
8FED,8FEE - адрес подпрограммы задержки при вводе символа с клавиатуры
8FE5,8FE6 - не используются
8FEF - LAST_K, код нажатой клавиши (в верхнем регистре)  
8FDF,8FE0 - адрес начала подпрогаммы обработки кодов клавиш
8FF0 - служебная для автоповтора
8FE9 - код символа, выводимого на экран
8FF1,8FF2 - PARSND, константа звука и число периодов для п/п SOUND
8FEF, 8FF0 - код нажатой клавиши (в верхнем регистре)
8FF3 - INV_MG, признак инвертирования сигнала с магнитофона
8FF1, 8FF2 - частота и длительность звука
8FF8,8FF9 - адрес нижней ячейки в знакоместе символа
8FF3 - признак инвертирования сигнала с магнитофона
8FFA,8FFB - INVERSE, задают фон экрана (00,00 или FF,FF)
8FF8, 8FF9 - адрес нижней экранной ячейки для скроллинга
8FFC - V_CUR, вертикальная координата курсора (0...FF)
8FFa, 8FFb - цвет экрана
8FFD - H_CUR, горизонтальная координата курсора сдвинутая на 2р. влево (0...BF)
8FFE - KNS_SV, константа записи на МГ
8FFF - KNS_LD, константа чтения с МГ
</PRE>
</PRE>


[[Категория:Специалист]]
[[Категория:Специалист]]

Версия от 01:23, 11 декабря 2019

Данный материал защищён авторскими правами!

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

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

Карта памяти

0000-8FFF - ОЗУ
9000-BFFF - Видео-ОЗУ
C000-C7FF - ПЗУ (Загрузчик Волкова/Зверкова)
C800-CFFF - ПЗУ (Монитор Орлова)
D000-EFFF - может стоять ПЗУ пользователя
F000-F7FF - ППА пользователя (есть не на всех платах)
F800-FFFF - ППА клавиатуры

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

Экранная область имеет разрешение 384x256 в черно-белом режиме. Байт по адресу 9000H представляет 8 первых точек в первой строке экрана. Байт по адресу 9001H — 8 первых точек во второй строке, а байт по адресу 9100h — точки с 8 по 16 в первой строке и т. д. Старшие биты располагаются слева. Бит, установленный в 1 — светлая точка. По формату экрана есть совместимость с ОРИОНОМ-128. Наличие внешней платы адаптера цвета позволяет выводить экранные байты в заранее заданном (в порту PC ППА клавиатуры) цвете. Окрашивается только цвет единичных точек (т.е тех пикселей, что соответствуют 1 в экранном байте).

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

Матрица клавиатуры имеет формат 6x12, всего 72 клавиши. И ещё отдельная клавиша <НР>. Клавиши <CTRL> применяемой в программах от РК86 и CP/M нет. В некоторых программах её заменяют клавишей <НР>.

Развёрнуто на 90' (слева верхний ряд):
СТР -=  :*  .>  ЗБ  ВК
[ ] 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
  • биты D2..D7: 6 вертикальных линий матрицы клавиатуры (ввод/вывод)
  • бит D1: клавиша <НР> (0 если нажата)
  • бит D0: ввод с магнитофона
Порт C
  • биты D0..D3: правые 4 горизонтальные линии из 12 матрицы клавиатуры
  • бит D4: триггер НП (начальный пуск). По сбросу =0 и всё адресное пространство ПЗУ
  • бит 5: выход звука
  • бит 6: без цвета не используется (бит регистра цвета при цветном адаптере)
  • бит 7: выход на магнитофон (бит регистра цвета при цветном адаптере)

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

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

Реально в программах используется только первый вариант. Два других варианта со сканированием из-за отсутсвия диодов (как в матрице РК86) чреваты выходом из строя ППА ВВ55, т.к создают КЗ выходов ППА, к тому же на порядок более медленные и даже, если ППА не выйдет из строя могут давать при опросе таким методом непредсказуемый результат.

Есть два варианта ПЗУ Загрузчика, оригинал от А.Волкова и вариант Зверкова. Всегда используется второй вариант, т.к с ним работает монитор Орлова. Отличия в кодах клавиш <F1>...<F7>, они вместо кодов 82H...89H выдают коды 00...07. Коды клавиш <F8>...<F11> совпадают. Монитор А.Волкова исходно опубликованный в стартовой публикации (работающий в ОЗУ 8D00) с 1988 года не используется. Вместо него стандартом является монитор Орлова располагающийся в ПЗУ C800. Т.к именно загрузчик Зверкова и Монитор Орлова используют практически 100% программ. Некоторые игры работают при наличии только загрузчика. Но системные программы все используют входные точки ПЗУ C800, т.к подпрограммы загрузчика имеют недостатки.

Стандартные подпрограммы Загрузчика Волкова/Зверкова

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

C037 - COUT, вывод символа на экран
  Вх: C - код символа
      (8FFC), (8FFD) - положение курсора
      (8FE7), (8FE8) - (адрес знакогенератора)/8
  Не делает ролик экрана, нет обслуживания искейп-кодов. И даже знакоместо перед выводом не очищает, делая XOR изображения символа и исходного содержимого знакоместа.
 Изм: все регистры сохраняет

C170 - SOUND, генерирование звука
  Вх: (8FF1) - частота сигнала
      (8FF2) - длительность сигнала
 Изм: все регистры сохраняет

C196 - пауза при вводе с клавиатуры
 Изм: регистров не портит

C1A0 - HISND, звук высокого тона
 Изм: не сохраняет А

C1AB - LOSND, звук низкого тона
 Изм: не сохраняет А
  
C254 - PPA82, программирование порта клавиатуры
        (А,С - вывод, В - ввод, режим 0).
 Изм: не сохраняет А

C25A - PPA91, программирование порта клавиатуры
        (А,С0..С3 - ввод, В,С4..С7 - вывод, режим 0).
 Изм: не сохраняет А

C337 - RDKEY, ввод символа с клавиатуры (ждёт нажатия клавиши)
 Вых: A - код символа 
 Изм: BC,DE,HL не портит

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

C3D0 - SVBYTE, запись байта на магнитофон
  Вх: A - выводимый байт
 Изм: регистров не портит
В отличие от аналогичной п/п РК86 выводимый байт не в рег.C, а в рег.А

C3F9 - LDBLK1, ввод блока произвольной длины с магнитофона с поиском синхробайта.
       (1-2 байт в блоке - адрес начала, 3-4 байт - адрес конца блока.
 Изм: сохраняет BC,DE. Заносит нач.адрес в ячейки ASTART (8FF3/8FF4)

C414 - LDBLK2, чтение блока с МГ без поиска синхробайта
 Изм: сохраняет BC,DE. Ячейки ASTART не меняет.

C422 - LDBLK3, всё как у п/п C414, но с поиском синхробайта
  Вх: HL - адрес начала блока
      DE - адрес конца блока
 Изм: сохраняет BC,DE. Ячейки ASTART не меняет.

C427 - CMPDH, сравнение регистров HL и DE
  Вх: HL, DE
 Вых: Z=1, если HL=DE; CY=1, если DE>HL (т.е устанавливает признаки по операции HL-DE)
 Изм: A

C42D - TRANS, пересылка блока памяти (HL)...(DE) --> (BC)
  Вх: HL - адрес начала блока
      DE - адрес конца блока плюс 1
      BC - новый адрес блока
 Изм: A,BC,HL
Особенность: байт на который указывает DE не копируется. При пересылке вверх, недопустимо перекрытие адресов.

C438 - ZMSSG, вывод сообщения на экран. Стоп-байт 00.
  Вх: HL - адрес начала сообщения
 Изм: портит A,C,HL. При выходе HL указывает на стоп-байт.
В отличие от п/п C818 не делает ролика и не чистит знакоместа при выводе.

C444 - RESET, обработка сброса, т.е исполнительная часть загрузчика
Вводит по сбросу блок с МГ-ленты и запускает его. КС блока не проверяется. Нажатием функц.клавиш ожидание синхробайта прерывается и ожидает нажатия клавиши с кодом константы ввода. По <ВК> выход в монитор, по <ПС> запуск ранее введённой программы по JMP (ASTART).

Стандартные подпрограммы Монитора Орлова

C803 - CONIN, ввод символа с клавиатуры. Просто JMP на C337
C806 - LDBYTE, чтение байта с МГ. Просто JMP на C377 
C809 - COUT, вывод символа. Если не упр.символ, то очищается знакоместо и JMP C037
C80C - SVBYTE, вывод байта на МГ-ленту. Просто JMP на C3D0 (в отличие от РК86 байт в A)
C80F - GETLIN, ввод строки символов в буфер (HL)...(DE)
C812 - STATUS, проверка нажатия клавиш клавиатуры
C815 - HEX_A, вывод байта на экран в шестнадцатеричном виде
C818 - MSSG, вывод сообщения на экран (с очисткой знакомест)
C81B - GETKEY, ввод символа с клавиатуры "на лету"
C81E - ASKCUR, запрос положения курсора
C821 - RET
C824 - LD_MAS, чтение массива с МГ. Если A!=0, устанавливает константу. JMP C3F9
C827 - SV_MAS, вывод блока (HL)...(DE) на магнитофон
C82A - CHKSUM, подсчет контрольной суммы блока (HL)...(DE)
C830 - установка верхней границы свободной памяти
C833 - запрос верхней границы свободной памяти
/PRE>

== Служебные ячейки Загрузчика Волкова/Зверкова ==
<PRE>
8FE3,8FE4 - ASTART, адрес последнего введённого с МГ блока
8FDF,8FE0 - AEKEYS, адрес подпрограммы обработки кодов клавиш
8FE7,8FE8 - AFONT, адрес фонта делённый на 8
8FE9 - LAST_S, код символа выведенного на экран
8FED,8FEE - адрес подпрограммы задержки при вводе символа с клавиатуры
8FEF - LAST_K, код нажатой клавиши (в верхнем регистре) 
8FF0 - служебная для автоповтора
8FF1,8FF2 - PARSND, константа звука и число периодов для п/п SOUND
8FF3 - INV_MG, признак инвертирования сигнала с магнитофона
8FF8,8FF9 - адрес нижней ячейки в знакоместе символа
8FFA,8FFB - INVERSE, задают фон экрана (00,00 или FF,FF)
8FFC - V_CUR, вертикальная координата курсора (0...FF)
8FFD - H_CUR, горизонтальная координата курсора сдвинутая на 2р. влево (0...BF)
8FFE - KNS_SV, константа записи на МГ
8FFF - KNS_LD, константа чтения с МГ