Skip to content

Latest commit

 

History

History
341 lines (321 loc) · 31 KB

README.md

File metadata and controls

341 lines (321 loc) · 31 KB

МОНИТОР для Радио-86РК/Спектр-01 для КР580, совместимый с Орион-128, поддержкой VT-52

СТАНДАРТНЫЕ ПОДПРОГРАММЫ МОНИТОРа

+-----------------------------+--------+------------------------------+------------+
!    Назначение               ! Адрес  !        Параметры             ! Изменяемые !
!                             ! вызова !                              ! регистры   !
+-----------------------------+--------+------------------------------+------------+
!  Ввод символа с клавиатуры  ! 0F803H ! ВХОДНЫЕ                      !            !
!                             !        ! ВЫХОДНЫЕ                     !            !
!                             !        ! А - введенный код            !            !
+-----------------------------+--------+------------------------------+------------+
! Ввод байта с магнитофона    ! 0F806Н ! ВХОДНЫЕ                      !            !
!                             !        ! А=0FFН с поиском синхробайта !            !
!                             !        ! A=08Н без поиска синхробайта !            !
!                             !        ! ВЫХОДНЫЕ                     !            !
!                             !        ! А - введенный байт           !            !
+-----------------------------+--------+------------------------------+------------+
! Вывод символа на экран      ! 0F809Н ! ВХОДНЫЕ                      !            !
!                             !        ! С - выводимый символ         !            !
!                             !        ! ВЫХОДНЫЕ                     !            !
+-----------------------------+--------+------------------------------+------------+
! Запись байта на магнитофон  ! 0F80CH ! ВХОДНЫЕ                      !            !
!                             !        ! С - выводимый байт           !            !
!                             !        ! ВЫХОДНЫЕ                     !            !
+-----------------------------+--------+------------------------------+------------+
! Опрос состояния клавиатуры  ! 0F812H ! ВХОДНЫЕ                      !            !
!                             !        ! ВЫХОДНЫЕ                     !            !
!                             !        ! A=00H - не нажата            !            !
!                             !        ! A=0FFH - нажата              !            !
+-----------------------------+--------+------------------------------+------------+
! Распечатка байта на экране  ! 0F815H ! ВХОДНЫЕ                      ! A          !
! в шестнадцатеричном виде    !        ! А - выводимый код            ! C (*)      !
!                             !        ! ВЫХОДНЫЕ                     !            !
+-----------------------------+--------+------------------------------+------------+
! Вывод на экран сообщения    ! 0F818H ! ВХОДНЫЕ                      ! A, H, L    !
!                             !        ! HL - адрес начала сообщения  ! C (*)      !
!                             !        ! ВЫХОДНЫЕ                     !            !
+-----------------------------+--------+------------------------------+------------+
! Ввод кода нажатой клавиши   ! 0F81BH ! ВХОДНЫЕ                      !            !
!                             !        ! ВЫХОДНЫЕ                     !            !
!                             !        ! A=0FFH - не нажата           !            !
!                             !        ! A=0FEH - РУС/ЛАТ             !            !
!                             !        ! ИНАЧЕ - код клавиши          !            !
+-----------------------------+--------+------------------------------+------------+
! Запрос положения курсора    ! 0F81EH ! ВХОДНЫЕ                      !            !
!                             !        ! ВЫХОДНЫЕ                     !            !
!                             !        ! Н - номер строки             !            !
!                             !        ! L - номер позиции            !            !
+-----------------------------+--------+------------------------------+------------+
! Запрос байта из экранного   ! 0F821H ! ВХОДНЫЕ                      !            !
! буфера                      !        ! ВЫХОДНЫЕ                     !            !
!                             !        ! А - код из буфера            !            !
+-----------------------------+--------+------------------------------+------------+
! Ввод блока с магнитофона    ! 0F824H ! ВХОДНЫЕ                      !            !
!                             !        ! HL - смещение                !            !
!                             !        ! ВЫХОДНЫЕ                     !            !
!                             !        ! HL - адрес начала            !            !
!                             !        ! DE - адрес конца             !            !
!                             !        ! ВС - контрольная сумма       !            !
+-----------------------------+--------+------------------------------+------------+
! Вывод блока на магнитофон   ! 0F827Н ! ВХОДНЫЕ                      !            !
!                             !        ! HL - адрес начала            !            !
!                             !        ! DE - адрес конца             !            !
!                             !        ! ВС - контрольная сумма       !            !
!                             !        ! ВЫХОДНЫЕ                     !            !
+-----------------------------+--------+------------------------------+------------+
! Подсчет контрольной суммы   ! 0F82AH ! ВХОДНЫЕ                      !            !
! блока                       !        ! HL - адрес начала            !            !
!                             !        ! DE - адрес конца             !            !
!                             !        ! ВЫХОДНЫЕ                     !            !
!                             !        ! ВС - контрольная сумма       !            !
+-----------------------------+--------+------------------------------+------------+
! Запуск индикации на экране  ! 0F82DH ! ВХОДНЫЕ                      !            !
!                             !        ! ВЫХОДНЫЕ                     !            !
+-----------------------------+--------+------------------------------+------------+
! Передача адреса верхней     ! 0F830H ! ВХОДНЫЕ                      !            !
! границы свободной памяти    !        ! ВЫХОДНЫЕ                     !            !
! программе пользователя      !        ! HL - адрес границы           !            !
+-----------------------------+--------+------------------------------+------------+
! Установка адреса верхней    ! 0F833H ! ВХОДНЫЕ                      !            !
! границы свободной памяти    !        ! HL - адрес границы           !            !
! программы пользователя      !        ! ВЫХОДНЫЕ                     !            !
+-----------------------------+--------+------------------------------+------------+
! Чтение из ДопОЗУ            ! 0F836H ! ВХОДНЫЕ                      !            !
!                             !        ! HL - адрес                   !            !
!                             !        ! A - номер доп. страницы      !            !
!                             !        ! ВЫХОДНЫЕ                     !            !
!                             !        ! C - считанный байт           !            !
+-----------------------------+--------+------------------------------+------------+
! Запись в ДопОЗУ             ! 0F839H ! ВХОДНЫЕ                      !            !
!                             !        ! HL - адрес                   !            !
!                             !        ! A - номер доп. страницы      !            !
!                             !        ! C - записываемый байт        !            !
+-----------------------------+--------+------------------------------+------------+
! Установка координат курсора ! 0F83CH ! ВХОДНЫЕ                      !            !
!                             !        ! Н - номер строки - Y         !            !
!                             !        ! L - номер позиции - X        !            !
+-----------------------------+--------+------------------------------+------------+
! Подача звукового сигнала    ! 0F83FH !                              !            !
+-----------------------------+--------+------------------------------+------------+

(*) - только в оригинальном МОНИТОРе

НЕСТАНДАРТНЫЕ ПОДПРОГРАММЫ МОНИТОРа

Данные точки входа не являются документированными в оригинальном МОНИТОРе, но часто использовались программным обеспечением, поэтому они поддерживаются для совместимости.

+-----------------------------+--------+---------------------------------+-----------------+
!  Назначение                 ! Адрес  ! Параметры                       ! Изменяемые      !
!                             ! вызова !                                 ! регистры        !
+-----------------------------+--------+---------------------------------+-----------------+
! Горячая перезагрузка        ! 0F86CH ! ВХОДНЫЕ                         !                 !
!                             !        ! ВЫХОДНЫЕ                        !                 !
+-----------------------------+--------+---------------------------------+-----------------+
! Ввод командной строки       ! 0F8EEH ! ВЫХОДНЫЕ                        !                 !
!                             !        ! CY=1 есть данные, CY=0 пустая   !                 !
!                             !        ! строка, DE содержит адрес       !                 !
!                             !        ! начала строки                   !                 !
+-----------------------------+--------+---------------------------------+-----------------+
! Разбор параметров строки    ! 0F92СH ! ВХОДНЫЕ                         !                 !
!                             !        ! ВЫХОДНЫЕ                        !                 !
+-----------------------------+--------+---------------------------------+-----------------+
! Сравнение HL с DE           ! 0F990H ! ВХОДНЫЕ                         !                 !
!                             !        ! ВЫХОДНЫЕ                        !                 !
+-----------------------------+--------+---------------------------------+-----------------+
! Печать переноса строки      ! 0F9B0H ! ВХОДНЫЕ                         !                 !
!                             !        ! ВЫХОДНЫЕ                        !                 !
+-----------------------------+--------+---------------------------------+-----------------+
! Чтение данных из ROM-диска  ! 0FA68H ! ВХОДНЫЕ                         !                 !
!                             !        ! ВЫХОДНЫЕ                        !                 !
+-----------------------------+--------+---------------------------------+-----------------+
! Инициализация видео         ! 0FACEH ! ВХОДНЫЕ                         !                 !
!                             !        ! ВЫХОДНЫЕ                        !                 !
+-----------------------------+--------+---------------------------------+-----------------+
! Печать HL и пробела с новой ! 0FB78H ! ВХОДНЫЕ                         !                 !
! строки                      !        ! ВЫХОДНЫЕ                        !                 !
+-----------------------------+--------+---------------------------------+-----------------+
! Подача звукового сигнала    ! 0FD27H ! ВХОДНЫЕ                         !                 !
!                             !        ! ВЫХОДНЫЕ                        !                 !
+-----------------------------+--------+---------------------------------+-----------------+

УПРАВЛЯЮЩИЕ КОДЫ ДИСПЛЕЯ

Данная версия МОНИТОРа реализует поддержку управляющих кодов дисплея, совместимых с терминалом DECscope VT52. В связи с этим, поведение некоторых управляющих кодов отличается от оригинальной версии МОНИТОРа.

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

+-------+-------------------------------------------------------------------+
!  Код  !                               Описание                            !
+-------+-------------------------------------------------------------------+
!  07H  ! Выдаст звуковой сигнал продолжительностью примерно 0,25 с.        !
+-------+-------------------------------------------------------------------+
!  08H  ! Перемещение курсора на одну позицию влево. Если курсор находился  !
!       ! в самой левой позиции строки, то его перемещение, в отличие от    !
!       ! оригинального МОНИТОРа, не происходит.                            !
+-------+-------------------------------------------------------------------+
!  09H  ! Размещает курсор в ближайшей следующей позиции "табулятора".      !
!       ! Т.е. в позициях 8, 16, 24, 32, 40, 48, 56. Отсчет ведется от 0.   !
+-------+-------------------------------------------------------------------+
!  0AH  ! "Перевод строки" действует так же, как и 1AH, в том случае, если  !
!       ! курсор не находится в последней строке экрана, в противном случае !
!       ! курсор остается в прежней позиции, текст на экране дисплея        !
!       ! передвигается на одну строку вверх, вся информация, высвечиваемая !
!       ! в первой строке, теряется, а последняя строка освобождается для   !
!       ! вывода новой строки символов.                                     !
+-------+-------------------------------------------------------------------+
!  0CH  ! Перемещает курсор в левый верхний угол экрана.                    !
+-------+-------------------------------------------------------------------+
!  0DH  ! "Возврат каретки" переведет курсор в первую позицию той же строки !
!       ! экрана, в которой он и находился. Если курсор уже находится в     !
!       ! самой левой позиции, его положение не изменится.                  !
+-------+-------------------------------------------------------------------+
!  18H  ! Перемещает курсора на одну позицию право. Переход курсора на      !
!       ! другую стоку происходит при включенном автоматическом переносе    !
!       ! строк. При выключенном - курсор остается на месте.                !
+-------+-------------------------------------------------------------------+
!  19H  ! Перемещает курсор на одну позицию вверх. Если при этом курсор     !
!       ! находился в первой строке экрана, то он останется на той же       !
!       ! строке.                                                           !
+-------+-------------------------------------------------------------------+
!  1AH  ! Перемещает курсор на одну позицию вниз. Если при этом курсор      !
!       ! находился в самой нижней строке экрана, то он останется на той же !
!       ! строке.                                                           !
+-------+-------------------------------------------------------------------+
!  1FH  ! Полностью стирает весь текст на экране и устанавливает курсор в   !
!       ! нулевую позицию (левый верхний угол).                             !
+-------+-------------------------------------------------------------------+
!  1BH  ! Перевод в режим обработки Escape-кодов.                           !
+-------+-------------------------------------------------------------------+
! 1BH+/ ! Ничего не делает (защита ответа на запрос идентификации)          !
+-------+-------------------------------------------------------------------+
! 1BH+A ! Перемещает курсор вверх                                           !
+-------+-------------------------------------------------------------------+
! 1BH+B ! Курсор вниз                                                       !
+-------+-------------------------------------------------------------------+
! 1BH+C ! Курсор вправо                                                     !
+-------+-------------------------------------------------------------------+
! 1BH+D ! Курсор влево                                                      !
+-------+-------------------------------------------------------------------+
! 1BH+E ! Очистка экрана (расширение GDOS/TOS)                              !
+-------+-------------------------------------------------------------------+
! 1BH+F ! включение графического режима                                     !
+-------+-------------------------------------------------------------------+
! 1BH+G ! выключение графического режима                                    !
+-------+-------------------------------------------------------------------+
! 1BH+H ! Перемещение курсора в левый верхний угол                          !
+-------+-------------------------------------------------------------------+
! 1BH+I ! Обратный перевод строки. Поведение аналогично переводу строки, но !
!       ! курсор смещается вверх и прокрутка вниз                           !
+-------+-------------------------------------------------------------------+
! 1BH+J ! Очистка до конца экрана                                           !
+-------+-------------------------------------------------------------------+
! 1BH+K ! Очистка до конца строки                                           !
+-------+-------------------------------------------------------------------+
! 1BH+L ! Вставить строку (нет в описании VT-52)                            !
+-------+-------------------------------------------------------------------+
! 1BH+M ! Удалить строку (нет в описании VT-52)                             !
+-------+-------------------------------------------------------------------+
! 1BH+V ! Печать текущей строки на принтер (VT-52)                          !
+-------+-------------------------------------------------------------------+
! 1BH+W ! - не используется, перейти в режим управления принтером           !
+-------+-------------------------------------------------------------------+
! 1BH+X ! - не используется, выход из режима управления принтером           !
+-------+-------------------------------------------------------------------+
! 1BH+Y ! Прямая адресации курсора. Чтобы установить курсор в требуемую     !
!       ! позицию на экране, необходимо выдать на дисплей последовательность!
!       ! кодов: 1ВН+59Н+(НОМЕР СТРОКИ+20Н)+(НОМЕР ПОЗИЦИИ + 20H).          !
!       ! Строки и позиции на экране отсчитываются от 0, причем нулевой     !
!       ! строкой экрана считается самая верхняя строка, а нулевой позицией !
!       ! - самая левая.                                                    !
+-------+-------------------------------------------------------------------+
! 1BH+Z ! Идентификация типа терминала, возвращает 1BH+/+?, где ?=K,L или M !
+-------+-------------------------------------------------------------------+
! 1BH+[ ! - не используется, включить удержание экрана                      !
+-------+-------------------------------------------------------------------+
! 1BH+\ ! - не используется, отключить удержание экрана                     !
+-------+-------------------------------------------------------------------+
! 1BH+= ! - не используется, Alternate keypad                               !
+-------+-------------------------------------------------------------------+
! 1BH+> ! - не используется, Exit alternate keypad                          !
+-------+-------------------------------------------------------------------+
! 1BH+< ! - не используется, включить/выключить поддержку кодов ANSI (VT100)!
+-------+-------------------------------------------------------------------+
! 1BH+А ! (РУС) - не используется, Скрыть курсор (расширение M/80K)         !
+-------+-------------------------------------------------------------------+
! 1BH+Б ! (РУС) - не используется, Показать курсор (расширение M/80K)       !
+-------+-------------------------------------------------------------------+
! 1BH+Б# ! (РУС) - не используется, Foreground color (расширение GDOS/TOS)  !
+-------+-------------------------------------------------------------------+
! 1BH+Ц# ! (РУС) - не используется, Background color (расширение GDOS/TOS)  !
+-------+-------------------------------------------------------------------+
! 1BH+Д ! (РУС) - не используется. Очистить экран до левого верхнего угла   !
!       ! экрана (расширение GDOS/TOS)                                      !
+-------+-------------------------------------------------------------------+
! 1BH+Е ! (РУС) - Показать курсор (расширение GDOS/TOS)                     !
+-------+-------------------------------------------------------------------+
! 1BH+Ф ! (РУС) - Скрыть курсор (расширение GDOS/TOS)                       !
+-------+-------------------------------------------------------------------+
! 1BH+Й ! (РУС) - Запомнить текущую позицию курсора (расширение GDOS/TOS)   !
+-------+-------------------------------------------------------------------+
! 1BH+К ! (РУС) - Восстановить запомненную позицию курсора                  !
!       ! (расширение GDOS/TOS)                                             !
+-------+-------------------------------------------------------------------+
! 1BH+Л ! (РУС) - Очистить текущую строку и установить указатель курсора в  !
!       ! начало строки (расширение GDOS/TOS)                               !
+-------+-------------------------------------------------------------------+
! 1BH+О ! (РУС) - Очистить строку от начала строки до текущего положения    !
!       ! курсора (расширение GDOS/TOS)                                     !
+-------+-------------------------------------------------------------------+
! 1BH+П ! (РУС) - Не используется, Reverse video (расширение GDOS/TOS)      !
+-------+-------------------------------------------------------------------+
! 1BH+Я ! (РУС) - Не используется, Normal video (расширение GDOS/TOS)       !
+-------+-------------------------------------------------------------------+
! 1BH+Ж ! (РУС) - Включить автоперенос строки (расширение GDOS/TOS)         !
+-------+-------------------------------------------------------------------+
! 1BH+В ! (РУС) - Выключить автоперенос строки (расширение GDOS/TOS)        !
+-------+-------------------------------------------------------------------+
! 1BH+] ! Распечатать экран на принтере                                     !
+-------+-------------------------------------------------------------------+
! 1BH+^ ! Включить режим автопечати                                         !
+-------+-------------------------------------------------------------------+
! 1BH+_ ! Выключить режим автопечати                                        !
+-------+-------------------------------------------------------------------+

Перехват стандартных п/п

МОНИТОР обеспечивает возможность перехвата стандартных п/п, таких как:

  • Чтение клавиатуры без ожидания
  • Подача звукового сигнала
  • Вывод на экран
  • Вывод на принтер
  • Вывод на магнитофон
  • Ввод с магнитофона

Данный набор п/п позволяет полностью перенастроить работу МОНИТОРа под свое оборудование без изменения прошивки ПЗУ, а также обеспечить совместимость с имеющими программами. Перехват чтения клавиатуры позволяет установить драйвер для другого типа клавиатуры или организовать автоввод данных. Перехват подачи звукового сигнала позволяет поддерживать другое звуковое оборудование, кроме стандартного динамика, управляемого по INTE. Ввод/вывод на магнитофон позволяет реализовать, например, загрузку с диска. Вывод на экран может использоваться для поддержки более современного эмулятора терминала (например, VT-100) или организации оконного менеджера. Ну и п/п печати позвроляет поддержать свой тип принтера.

Несовместимость

МОНИТОР 1.20 несовместим по Esc-кодами Esc-a и Esc-b с МОНИТОРом М80/К, т.к. код Esc-b конфликтует с более распространенным расширением GEM/TOS.

Шпаргалка

  • Набор тестов для проверки корректности работы подпрограмм

  • Директива 'U' должна как-то учитывать RAMTOP. (МОНИТОР-2.00)

  • Избавиться от 2-х версий под 16кб и 32 кб, используя автоопределение размера. (?? Возможно, не получится для версии 1.20, т.к. меняется раскладка ОЗУ => слишком много вычисляемых адресов => не влезет в 2 кб). Определять память недеструктивно можно так: читаем байт из памяти, пишем новый байт, читаем, сверяем, возвращаем назад считанный в начале байт. Можно идти шагом кратно 512 байт, тогда в коде монитора будет меняться только старший адрес. Можно вообще только проверять наличие памяти по адресу 7600 и если память есть, то считаем, что у нас 32кб версия. (МОНИТОР-2.00)

  • Поддержка расширений цвета

  • Поддержка разных клавиатур

  • Функционал по определению возможностей МОНИТОРа. Скорее всего, это потребуется на более "продвинутом" ПО. Явно пока рано это формулировать. Надо продумать.