|
Расширитель ROM-Bios для
Ориона-128
Расширитель ROM-Bios для
Ориона-128
К сожалению, базовый ROM-BIOS ОРИОНА весьма слаб по возможностям, отчего
с
использованием его п/п-грамм невозможно создавать нормальные программы.
Выходом в такой ситуации является апп.доработка для увеличения обьема ПЗУ и
создание более совершенной версии ROM-BIOS. Однако автор ОРИОНА этого не
сделал
т.к он теперь занимается только ОРИОН-ПРО, которому обеспечил и
качественный
ROM-BIOS. Иметь загружаемый в ОЗУ ROM-BIOS при старой концепции ДОС
ОРИОНА
было нельзя. Только после появления ORION-DOS V3.0 работающей в банке
номер 2
появилась возможность исправить ситуацию.
Расширитель ROM-BIOS
загружается в
банки 0 и 1, но в ORION-DOS это не мешает ДОС и экрану. Расширитель,
используя вектора стандартных п/п ПЗУ изменяет и кардинально улучшает
возможности
ROM-BIOS, - от самого ПЗУ F800 используется только одна п/п-ма (F81B) и
стандартные входы с векторами. Расширитель использует факт наличия на
ОРИОНЕ-128
ROM-диска, что эквивалентно нормальному ПЗУ, если при старте перегружать
коды
в ОЗУ ЭВМ. Расширитель может также загружаться и как обычный дисковый
файл с
дискеты или даже быть файлом 'замаскированным' под ORDOS-файл (тогда
ROM-BIOS
прошивается с офсетом в 810h). ОРИОН-ДОС, обнаружив отсутствие в ОЗУ
такого
XBIOS проверяет ROM-диск и автоматически загружает его. XBIOS состоит из
обычного драйвера консоли и командного модуля, имеющего нестандартный
вход. Эмулируются упр.коды терминала VT52, однако драйвер обслуживает
эти коды в пределах установленного окна, которое может быть равно или меньше полного
экрана
Т.е, ROM-BIOS является и цветным и оконным и позволяет выводить символы
КОИ8
с псевдографикой (и фонт загружается).
Однако этот XBIOS еще
графический,
звуковой и дисковый и ориентирован на MAC-подобный интерфейс и главное,
рассчитан для его использования из ЯВУ, а не из ассемблерных программ. Это
достигается особым 'протоколом связи', когда п/п-мме передается не сам
параметра лишь ссылка на адрес его хранения, как это используют в маш. процедурах
ЯВУ.
Для ускорения графики есть спец.язык графических команд. Звуки выводятся
программно и через ВИ53. XBIOS работает с любым ПЗУ F800, но требуется
наличие
Z80 (по любой схеме). Текущая версия занимает 16К. XBIOS исключительно 'демократичен' по аппаратуре - требуется только 'базовое железо' (даже часы
сделаны программно, но наличие тиккера делает ход часов кварцованым). ОРИОН
без
такого ROM-BIOS остается по существу обычной текстовой ЭВМ, с крайне
сложными неудобным программированием графики (от этого мало красивых программ).
А
ОРИОН, имеющий такой XBIOS, превращается в мощную графическую ЭВМ с
очень
легким программированием даже языками выс. уровня. Это на 2 порядка
облегчает
создание программ в современном графич. интерфейсе (цвет, окна) и
разработку
графических игр. Если бы ОРИОН имел в 1990 году такой ROM-BIOS, то
сейчас он
имел бы 10000 игр уровня СИНКЛЕРА - при наличии программы ГЕНЕРАТОР
СПРАЙТОВ,
этого XBIOS и компиллятора BASIC MICROSOFT игра создается за несколько
часов.
Использованы идеи ROM-BIOS японских компьютеров семейства MSX (Nippon,Sanyo),
а также идеи ROM-BIOS (QUICK DRAW) и интерфейса (MAC SYSTEM) Apple
Macintosh.
УПРАВЛЯЮЩИЕ КОДЫ ДРАЙВЕРА CONOUT (F809)
07 и 09 - 07 BELL (звонок). 09 - горизонтальная табуляция через 4/8
позиций
0A и 0D - 0A курсор вниз на 1 строку. 0D - курсор в начало строки окна
(!)
0C - CLS + HOME (старый код 1F, пережиток от РК86 - также сохранен !)
ESC,07,K,N - установить константу и число периодов (деленное на 8) для
BELL
ESC,09,4 - установить горизонт.табуляцию через 4 позиции (ESC,09,<>4
возврат)
ESC,36/ESC,37 - включить/выключить инверсный вывод символов (INVERSE)
ESC,38/ESC,39 - перевод клавиатуры в русский/латинский регистр
ESC,41 - курсор вверх на 1 строку (коды РК86 сохранены, тоже 19)
ESC,42 - курсор вниз на 1 строку (тоже 1A)
ESC,43 - курсор вправо на 1 позицию (тоже 18)
ESC,44 - курсор влево на 1 позицию (тоже 08)
ESC,45 - инициализация драйвера (по умолчанию), сброс OPEN-буферов и CLS
ESC,48 - курсор HOME без очистки экрана (верхний левый угол ОКНА !!!)
ESC,4B - стирание до конца строки окна (включая позицию курсора)
ESC,50,COLOR - установить цвет. В старшем ниббле код фона, в младшем
символов
0 - черный 4 - красный 8 - серый C - розовый
1 - синий 5 - пурпурный 9 - голубой D - малиновый
2 - зеленый 6 - коричневый A - бледно-зеленый E - желтый
3 - бирюзовый 7 - грязно-белый B - бледно-синий F - ярко-белый
ESC,55,MODE,COLOR - режим работы, есть 2 режима: 0 - MONO, 6 - 16
цветный
ESC,59,LN+20,COL+20 - позиционирование курсора. Нельзя задавать
параметры позиционирования меньше 20H и вне экрана, т.к не контроллируется
'попадание'
в физический экран ОРИОНА. Поэтому при задании неверных параметров и
позиционировании в физически невозможную позицию будет испорчено ОЗУ вне
пределов экранной области (размером в 16 Кб) и Ваша программа может
зависнуть...
ESC,LN+B0,COL+B0 - позиционирование курсора. Более простой аналог кода
ESC,59
ESC,6A - запомнить позицию курсора для возврата в эту позицию кодом
ESC,6B
ESC,6B - возврат курсора в позицию запомненную последний раз кодом
ESC,6A
ГРАФ.ПРОЦЕДУРЫ ДОСТУПНЫЕ КОМАНДАМИ КОНСОЛИ
ESC,80,V,H0,H1 - позиционирование графич.пера (в координатах:
0-255,0-511)
Текущая на момент (старая) позиция запоминается (координата FROM)
ESC,81,REP0,REP1,80+RRR - число повторов (0-255) и направление шага
команд
При REP=0 выполняется 256 шагов. Для шага =0 - 4-й код ставится менее 80
ESC,84 - PRESET0. Очистить бит в плоск.0. Шаг. Уменьш.REP, если не 0
повтор
ESC,85 - PSET0. Установить бит в плоск.0. Шаг. Уменьш.REP, если не 0
повтор
ESC,86 - PRESET1. Очистить бит в плоск.1. Шаг. Уменьш.REP, если не 0
повтор
ESC,87 - PSET1. Установить бит в плоск.1. Шаг. Уменьш.REP, если не 0
повтор
ESC,88,C0+2*C1 - задать цвет для команд DRAW, CIRCLE и PEN
ESC,89 - графич.команда DRAW0. Рисует в плоскости 0 'цветом' C0 (из
ESC,88)
ESC,8C,RAD - CIRCLE0. Начертить окружность в плоск.0. RAD - радиус в
точках
ESC,90,SV,SH0,SH1 - DRAWBOX0. Прямоугольник. Левый верхн.угол - текущая
коорд
ESC,91 - начертить (граф) рамку по краю текстового окна. Сократить окно
на 1
ESC,92 - начертить (симв) рамку по краю текстового окна. Сократить окно
на 1
ESC,9A,Y,X,dY,dX - WINDOW. X,Y - абсолютные координаты левого верхнего
угла
окна в символьных позициях (в режиме полного экрана 64*25). А dx,dY -
размеры задаваемого окна по X и Y соответственно. Если X+dX больше 64
или
Y+dY больше 25, то ничего не меняется (сохраняются прежние параметры
окна) ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ EXTENDED ROM-BIOS
Языки высокого уровня (ЯВУ) поддерживают только устройства CONIN и
CONOUT и
'диалог' между прикладным ПО и ROM-BIOS возможен только стандартным
образом.
Функция CONOUT может использоваться для вывода на экран любых данных, в
т.числе и графических, и для вывода графич.данных особых проблем нет. Но как
получать данные из ROM-BIOS в программу ? Остается только прием кодов за
счет
прямых ассемблерных вызовов и считывания ячеек ОЗУ. Но разные ЯВУ и
компилляторы разных фирм передают параметры п/программе в м.кодах по разному,
отчего
невозможно получить универсальную версию такого ASM-входа. Все языки
высокого уровня имеют доступ к ячейкам памяти ЭВМ и возможность вызова п/п в
машинных кодах. Обмен через 'ячейки связи' для ассемблерных программ обычное
явление, но в ЯВУ параметры ASM-подпрограмме передают иначе (стеком и
регистрами)
Чтобы получить универсальность по отношению ко всем языкам ВУ для обмена
кодами в данном ROM-BIOS используются ячейки ОЗУ (для удобства
терминологии они
далее именуются регистрами R1,R2...R6,R7). Благодаря этому возможно
использование этих процедур из всех языков ВУ (и главное и из
БЭЙСИКА-компиллляра и
БЭЙСИКА-интерпретатора а также ФОРТРАНА и ПАСКАЛЯ).
Данный ROM-BIOS
устранят
главное неудобство использования маш.п/программ при разработке ПО на
БЭЙСИКЕ
компилляторе, а именно несовместимость по подключению в программы
ассемблера.
Можно отлаживать программы предназначенные для компилляции в
интерпретаторе.
А это на порядок повышает эффективность разработки ПО на БЭЙСИКЕ - при
этом
при том-же (!!!) конечном результате, ПО на БЭЙСИКЕ разрабатывается в
100 раз
быстрее, чем на ПАСКАЛЕ или СИ, не говоря уже об ассемблере. Для вызова
ROM-BIOS используется организованый специально для интерфейса с ЯВУ вход, -
по
адресу F000 (имеется и вход для PEN-команд F00F). Параметром из ЯВУ
передается номер функции XBIOS. Если-же подряд надо выполнить много
графич.команд,
то выгоднее организовать их в виде МАКРОКОМАНДЫ. В ОЗУ подготавливается
цепочка команд (и параметров) и ROM-BIOS, не ожидая вывода команд на CONOUT
(что
тормозит) сам будет их считывать из памяти, интерпретировать и
выполнять, пока не встретится STOP-байт. МАКРОКОМАНДА выполняется за время
значительно меньшее, чем при работе по одной команде. Это позволяет существенно
увеличить
скорость - графич.процедура, состоящая из десятков и сотен отдельных
команд
выполняется всего за один вызов ROM-BIOS (при этом дополнительно можно
иметь
библиотеку МАКРОКОМАНД и программно только подставлять в них параметры.
Все
вышеперечисленное делает графические построения доступными даже для
таких,
традиционно неграфических приложений, как программы на интерпретирующем
БЭЙСИКЕ, т.к при этом графич.построения выполняются со скоростью
ассемблерной, а
не бэйсиковой программы. А наличие удобных оконных, цветных и мышиных
функций
позволяет делать при минимальных затратах времени, красивые и
эффективные
программы, в десятки-сотни раз сокращая время на их разработку (по
сравнению
с ассемблером без XBIOS). Для ассемблера вход F000 недоступен, - поэтому
для
него есть вход F006. Номер функции загруж-тся в рег A. Первые версии
ROM-BIOS
это первая попытка реализации этой идеи (в основноя для нужд БЭЙСИКА).
Первоначально разработан СТАНДАРТ КОМАНД и на сегодняшний день реализовано
80% из
них (наиболее полезных в сис.ПО). Это дает графич.возможности ROM-BIOS,
поточечную и побайтовую работу с экраном из ЯВУ, ф-ции гр.интерфейса и
дополнит.
внешние устройства отсутствующие в CP/M. Под регистры, т.е ячейки ОЗУ,
используемые для обмена данными, использованы ненужные служебн.ячейки
МОНИТОРА-2
ОРИОНА-128 (ПЗУ F800 не менятся). Адреса регистров: R1-R5 - ячейки
F3D8-F3DC,
R6,R7 - F3E8,F3E9. Далее описан набор КОМАНД. Но это не конечный
стандарт, -
он еще развивается. В версиях возможно будут уточнения. Коды -
десятичные.
КОМАНДЫ ДЛЯ ПОДДЕРЖКИ ГРАФИЧЕСКОГО ИНТЕРФЕЙСА
01 - QINFO. Выход: R1,R2-версия. R3,R4 - адрес блока параметров для
др-веров
02 - XPULT. (!) Функция есть только в версии для теневого ПЗУ на 27256
03 - CONSOF. Отключает консоль полностью (CONIN и CONOUT) для ускорения
BASIC
04 - CONSON. Подключить консоль назад (т.е убрать заглушки из входов)
05 - QMODE. Выход: R1-CMOD. R2-число откр.окон. R3-остаток буфера.
R4-GRI
06 - QKURS. Выход: R1,R2-POSX,POSY. R3,R4,R5 - координаты ГРК в точках !
07 - QWINDO. Выход: R1-R4 - Y,X,dY,dX, параметры текущего окна. R5 -
цвет
08 - QREADY. Выход: R1-Ready I/O. Биты: 0-KEY/JOY, 2-DELAY, 3-LST:
09 - QKEY. Выход: R1 - код полученный с п/п F81Bh ПЗУ F800
10 - QGRI. Выход: R1 - 0/1/2. R2-RRR. Опрос устройства GRAF INPUT
12 - QSTR$. R1-макс.длина. R2,R3 - адрес. Управление: <LEFT>, <DEL> и <ВК>
13 - QRAM. Вход: R1-банка ОЗУ. R3-мл.адрес, R4-ст.адрес. Выход: R2-байт
14 - QTIME. Выход: R1-R3 - время, R4=0/1 (флаг разрешения вывода часов)
15 - QDATE. Выход: R1-R3 - дата, R4=0/1 (флаг ввода даты с запроса)
16 - QWATCH. Выход: R1-R3 - текущая установка. R4-0/1 (1 если включено)
17 - QPOINT. R1,R2,R3-V,H0,H1. Выход: R4-0/1. Считывание плоскости 0.
18 - XCOUT. R1 - символ. Передает символ на стандартный вход CONOUT
19 - XCHAR. R1-символ. В отличие от CONOUT выводит коды от 0 (!) до 255
20 - XSTR$. R1,R2 - адрес строки (в банке 2). Строка не длиннее 64
символов
21 - XMSSG. R1-номер. Вывод ранее загруженного мессиджа
22 - XHEX$. R1 - байт для вывода как HEX (аналог п/п F815)
23 - XDES$. R1 - байт (0-99 дес). Если число более 99, то выводится 99
24 - XSOUND. R1,R2 - константа звука. R3,R4 - число периодов
25 - XPIANO. R1,R2-канал 0, R3,R4-канал 1, R5,R6-канал 2, R7-время в 0.1
СЕК
27 - XMPLAY. R1,R2 - адрес кодов (как в SOUND). 0FFh,0FFh - стоп-код.
29 - XERSND. 'Омерзительный' звук выводимый при ошибочном вводе
пользователя
30 - XRAM. R1-банка. R2-байт, R3-младш.байт адреса, R4-старший байт
адреса
33 - XPSET0. R1,R2,R3-V,H0,H1. Установить бит в плоскости экрана 0
34 - XPSET1. R1,R2,R3-V,H0,H1. Установить бит в плоскости экрана 1
35 - XPRST0. R1,R2,R3-V,H0,H1. Сбросить бит в плоскости экрана 0
36 - XPRST1. R1,R2,R3-V,H0,H1. Сбросить бит в плоскости экрана 1
37 - XDRAW0. R1-R3-V,H0,H1 source point. R5-V, R6,R7-H0,H1 target. В
плоск.0
41 - XPXOR0. R1,R2,R3-V,H0,H1. Инвертировать бит в плоскости экрана 0
43 - STMOD. R1=0/1/2. 0-КО7, 1-КОИ8, 2- МИКРОШРИФТ 4*6 КОИ7 (не
оконн.др-р)
44 - SLDFNT. R1 код первого символа (0-31), R2 - число символов.
R3,R4-адрес
45 - SLDGRK. R1-R2 - адрес в ОЗУ (б.2) 24 байта. Загрузка образа
гр.курсора
46 - SSLGRK. R1-0...7. Выбор одного из 8 стандартных образов
граф.курсора
47 - SLDGRI. R1,R2-адрес в банке 2 драйвера GRI (до 256 байт, только JR
ком)
48 - SLDMSG. R1-номер. R2-длина (<64). R4,R5-адрес строки. Загрузка
мессиджа
49 - STIME. R1-R3 - время Ч-М-С. R4 - ключ TIME OUT (0/1). Установка
часов.
50 - SDATE. R1-R3 - дата Г-М-Д. Установка текущей даты
52 - SWATCH. R1-R3 - время срабатывания будильника.
53 - SSCSAV. R1-0/1. R2,R3 - число секунд (!) до гашения экрана. SCREEN
SAVER
54 - GRKOFF. Выключить отображение ГРАФ.УКАЗАТЕЛЯ (ГРК) и стереть его с
экр.
55 - GRKBAK. Включить режим отображения граф.курсора ГРК (на старом
месте)
56 - GRKNEW. R1,R2,R3-V,H0,H1. Позиционирование граф.курсора (одноврем.включ)
57 - KURNEW. R1,R2-POSX,POSY. Установить текст.курс. (в нормал.реж. и
МИКРО)
58 - SBREAK. R1-0/1 R2,R3-адрес доп.процедуры SOFT INT
59 - WINDOW. R1 - Y, R2 - X, R3 - dY, R4 - dX, R5 - COLOR (похоже на
ESC,9A)
60-63 - RAMKA1-4. Четыре разных разновидности рамок по краю текстового
окна.
64 - BUTTON. R1-R4-Y,X,dY,dX. Рисуется прямоугольник с закругленными
краями
65 - SHADOW. Одинарная линия снизу и справа окна, изображающая тень от
окна
67 - XORBOX. R1,R2,R3-V,H0,H1. R4-SV, R6,R7-H0,H1. Пунктирный
прямоугольник.
68 - DRWBOX. ---"----. Прямоугольник (ф.66 и ф.67 рисуются по XOR с
экраном)
69 - OPEN0. R1-R5 как у WINDOW. Окно сохраняется в буфере и очищается.
R6=ERC
70-72 OPEN1-OPEN3. Как в OPEN0. Еще чертится рамка окна (1-3). Выход:
R6=ERC
73 - CLOSE. Окно восстанавливается. Восст-ся цвет. Выход: POSX=POSY=0.
R6=ERC
74 - FOLDER. Как в OPEN1. R6,R7-ук.NAME. Рисует открытый FOLDER на
полн.окно
78 - RESBUF. Освобождение всех графических буферов, удаление всех 'откр.окон'
79 - LIGHT. R1-COLOR. Инверсия текущего окна (в ч/б режиме) или смена
цветов
80 - LTBALK. R1-длина. R2-цвет. Балка подкрашивается (или инв-ся в
монохроме)
81 - PAINT1. Вход: R1,R2-коды закраски. Закрасить окно (в цвете, если
цв.реж)
82 - PAINT2. Закраска образцом 8*10 битов (стековая процедура, как и
PAINT1)
83 - BTMCLS. CLS куска экрана 6*480 внизу экрана (для очистки нижних
байтов)
84 - MVGRK1. Вых: R1-0..2 Передвигает ГРК,счит.кнопки. Если R1=1/2,
R6,R7-X,Y
85 - MVOBJ. Передвигает ГРК при нажатой кнопке, вместе с контуром обькта...
86 - CLCSND. Звуковой эффект (нажатия клавиши)
87 - PDMENU. R1,R2,R3,R4-Y,X,dY,dX, R5-STEP. R6,R7-спис.блок. Вых: R1-N
функц
92 - TSTOBJ. R1,R2,R3,R4-Y,X,dY,dX. R6,R7-POSX,POSY. Тест на обьект:
R1=0/1
93 - CLICK1. Вых: R1-0 - ESC. R1-1/2 нажатие на лев. и пр.кнопки (двойн.клик)
94 - CLICK2. Все как в CLICK1, но ГРК мигает
95 - CLICK3. Как и CLICK1. Без выхода по АР2, вначале до перемещ-я ГРК
мигает
97 - OFWAIT. R1-0/1 (образ ГРК). Ожидание отпускания кнопки или сдвига
GRI
98 - PUT0. Вход: R1,R2 - относит.адрес в экране, R3 - высота
'прямоугольника'
в байтах, R4-ширина 'прямоугольника' в байтах, R5,R6 - адрес кодов (б.2)
99 - GET0. Вход: R1,R2 - относ.адрес в экране, R3 - высота в байтах, R4
- ширина в байтах. R5,R6 - адрес (в банке 2), куда сгружаются считанные коды
127 - MACPEN. R1,R2,R3-V,H0,H1. R3,R4 - адрес блока кодов в банке 2.
R5-1/0
СПРАЙТОВЫЕ КОМАНДЫ МУЛЬТИПЛИКАЦИИ
110 - SPRMODE. Eсли R1=0 то спрайты MONO. если R1=1, то реж 4C. Сброс
буферов
Задание двухплоскостного режима только при работе в ДОС. Это дисковая
процедура! Полностью очищает весь эл.диск и изменяет его размер. До задания режима SPRMODE все остальные спрайтовые команды игнорируются.
111 - CLEAR. Возвращает стандартный размер электронному диску. Сброс
SPRMODE.
112 - SPRITE. Определить спрайт. Вход: R1 - номер спрайта (0..31).
R2-высота,
R3 - ширина спрайта в байтах, R3,R4 - адрес кодов (банк 2). За каждым
графич.байтом следует байт маски вывода. В маске выводимый бит 0, если
соотв.бит графики выводится. Если включен двухплоскостный SPRMODE, то
идет два байта графики и маска (число байтов x2 или x3). Выход: R6-ERRC
113 - SPRDEL. R1 - номер спрайта. Освобождает ГРАФИЧ.БУФЕР для новых
спрайтов
114 - SPRPUT. Вход: R1 - номер спрайта. R2,R3 - относ.экранный адрес
(0-3FFF)
115 - REMOVE. R1 - номер спрайта. 'Стереть' спрайт с экрана восстановив
экран
Но экран восстанавливается правильно только после команды BACKGET.
116 - BACKGET. R1,R2 - адрес в экране. R3,R4 - высота, ширина. Указанный
кусок экрана или даже весь экран в 2*15К запоминается в BACKGET буфере
117 - BYTETST. Вход: R1,R2 - экранн.адрес байта. Выход: R3 - FF или N
спрайта
118 - OVERTST. Вход: R1 - номер спрайта. Выход: R2 - FF или номер
спрайта
119 - SCREEN ROLL. R1 - dY (-128...127), R2 - dX/8 (-59..59). Сдвижка
экрана. ДИСКОВЫЕ И ОВЕРЛЕЙНЫЕ КОМАНДЫ РАСШИРЕНИЯ XBIOS
120 - TEST. R1,R2-указатель на FCB. Проверка на наличие файла. Выход:
R6=0/1
121 - LOAD. R1,R2 - указатель FCB. R3,R4 - адрес буфера. R5,R6 - длина
буфера
в блоках по 128 байт. Выход: R1,R2 - число считанных из файла блоков
122 - SAVE. R1,R2-указатель FCB. R3,R4-адрес буфера. R5,R6-длина файла в
бл.
123 - DISK NAME. Выход: R1,R2 - указатель на имя диска (полные 15
символов)
124 - USER NAME. Вход: R1 - номер юзера. Выход: R1,R2 - указатель на имя
(8)
125 - FILDATA. R1,R2-FOLDER.R3,R4-NAME.R6,R7-адр. Счит паспорт файла 64
байта
126 - OVERLAY. R1-номер оверлея. Грузит оверлей из ROM-диска и запускает
его
КОМАНДЫ ГРАФИЧЕСКОГО ПЕРА (кодируются по битам)Эти команды передаются на спец.входы F00F/F01E и могут исполняться в
МАКРО.
При покомандном исполнении рисование осуществляется только по XOR.
Используются для 'перемещения' по экрану контуров обьектов и вывода готовых
картинок.
Битовая кодировка команды PEN: F R R R F R R R . RRR - задают направление
перемещения: 0-вправо, 1-вправо и вверх, 2-вверх, 3-влево и вверх,
4-влево, 5-влево и вниз, 6-вниз, 7-вправо и вниз. Каждая команда
описывает два шага пера. Первым выполняется 'младший' ниббл команды. Стоп байт в макро -
40h.
F - флаг, определяет ставить точку или нет (можно перемещаться без
рисования)
Входы F00F/F01E имеют и ассемблерные аналоги - входы F015/F024 (команда
в А).
;
MOVGRK является важной функцией графического интерфейса. Она
обеспечивает вывод и перемещения графич-го указателя (ГРК). При старте включается
эмулятор
джойстика на клавиатуре. Этот эмулятор, чтобы он работал на любой
клавиатуре,
использует ф.F81B. Поэтому он перемещает ГРК только по 'вертикали и
горизонтали'. Джойстик - более удобен (6 проводов и 7-штырьковый разьем). Он
подключается параллельно клавиатуре (биты как ZX, см.файл JOYSTIK.TXT) и
позволяет перемещать ГРК по диагонали. Джойстик стоит дешевле мыши и у всех
есть, но
главное не требует доп.железа для подключения. MVGRK1 возвращает в R1
результаты так: 0 - ничего, 1 - лев.кнопка, 2 - правая кнопка. Если
обнаруживается
перемещение GRI то ГРК перерисовывается на новую позицию (на какую не
важно).
На EMJOY кнопки имитируют кл.<ПРОБЕЛ> и <ВК>. На джойстике вторую кнопку
имитирует 'двойной клик'. Кроме того, если функция возвращает коды 1 или 2
(при
нажатии кнопки), тогда в R6,R7 содержится позиция ГРК на экране. Причем
не в
графических, а в симв.координатах (0-59,0-24) ! Курсор мыши перемещается
и
выводится сам и программисту не требуется никаких усилий на это. Но еще
более
удобны функции CLICK1. Они в цикле вызывают MOVGRK (отчего GRI
перемещает на
экране ГРК), но выходят из ф-ции только получив нажатие кнопок, а также
дополнительно контроллируют клав.АР2. Т.е весь граф.интерфейс реализован в
одном
операторе БЭЙСИКА USR. Функция PDMENU обслуживает PULL DOWN меню.
Допустимо
иметь заблокированные функции и шаг через строку. Для этого задается
таблицей
список заблокир.строк. Эти функции предельно удобны для организации
MAC-интерфейса. Команды PUT/GET позволяют считать и записать прямоугольн.кусок
экрана
OPEN/CLOSE тоже для обмена с экраном 'прямоугольниками',но осуществляют
обмен
не с программой, а с БУФЕРОМ. Кроме того команды OPEN и CLOSE работают в
координатах текстовых позиций, а PUT/GET работают с фрагментами экрана
не 'привязанным' к символьным позициям текстового экрана. SPRITE перегружает
коды
спрайта из банки 2 в буфер. При цветных спрайтах расход обьема БУФЕРА
такой -
же, как и при монохромных. Наличие в спрайтовых командах 'маски' вывода
позволяет накладывать спрайт на 'задний фон'. BACKGET сохраняет фрагмент
экрана
в пределах которого при удалении спрайта экран восстанавливается
правильно.
Очередная команда BACKGET удаляет из буфера BACKGET старое содержимое.
Буфер
BACKGET располагается в банке 3, поэтому электронный диск сокращается.
PEN-
команды позволяют перемещать графич.перо без рисования и с рисованием в
одной
или 2-х плоскостях (mono/4C). Eсли не достаточно памяти, то программе
возвращается ненулевой ERRCODE. Под ГРАФИЧ.БУФЕР пригодно только ОЗУ в банках
0 и 1
поэтому расширение ОЗУ не позволяет увеличить размер граф.буфера и
увеличивает только размер внутреннего эл.диска ORION-DOS. Размер графич.буфера
можно
увеличить только используя версию XBIOS для 'теневого ПЗУ' (апп.доработка
!).
В ROM-BIOS для клав-туры РК86 встроена программа обслуживания пульта
ROM-BIOS
(не путать с пультом ДОС). В режим пульта можно выйти из любой программы
для
целей отладки или устранения программной аварии. Пульт удобен для
управления
ресурсами ЭВМ из любой программы, установки даты, управления режимом
принтера
и фоновой печати, вывода экрана на принтер, изменения яч.ОЗУ...
Пультовый режим ДОС обеспечивает то-же самое, если при загрузке ДОС инсталлирован
специальный сист.оверлей ДОС. ROM-BIOS 'построен' так, что позволяет грузить
расширения при работе в ORION-DOS (при этом внешняя функция заменяет
встроенную).
EXTENDED ROM-BIOS в ROM-диске ОРИОНА-128
Купить платы, наборы микросхем на Орион-128,
Орион ПРО, Орион Восточный Экспресс 512, Куплю
z80а 80аММЕ к1818вг93 Au
в позолоте, куплю микросхемы, микросхемы серии к1533, кр1533,
кр1531
Полезные и интересные статьи
На предыдущую страницу
На главную страницу На следующую
страницу
|
|