; Кернель функций BGE 3.oo

;---------------------------------------------------------------
;             Описание модулей Burial Gfx Editor 3.oo
;---------------------------------------------------------------
; Модуль располагается с адреса #A800 и
; должен  иметь длину #1800 (6144) байт
;---------------------------------------------------------------
; На входе в плагин:
; HL - адрес резидент SupremeGUI
; DE - адрес выхода из модуля:
;      A = 0 модуль не оставлять в памяти
;        = 1 модуль оставить
;---------------------------------------------------------------
; Константы BGE 3.00
;
BeginGUI EQU #C800
SCREEN   EQU #C000
UNDOSCR  EQU #C000+6912
ScrPage  EQU 0
SuxPage  EQU 1
GUIPage  EQU 3
AddPage  EQU 4
PgnPage1 EQU 6
PgnPage2 EQU 7
RamPage  EQU 7
PgnAdr   EQU #A800
AddAdr   EQU #C000
Buffer   EQU #C000-#400
SCRSPR   EQU #C000
ATRSPR   EQU SCRSPR+6144
SCRBGE   EQU #C000+6912
A_PGN1   EQU #C000  ; адрес четного плагина
A_PGN2   EQU #DB00  ; адрес нечетного плагина
LEN_PGN  EQU 6144   ; макс. длина плагина
;---------------------------------------------------------------
; Вызов функций Burial, которые приведены ниже,
; происходит следующим образом:
;       CALL "адрес_в_кернеле"
;---------------------------------------------------------------

KERNEL          EQU #6000

; Картинку на экран
LOADSCR         EQU KERNEL

; С экрана в память
SAVESCR         EQU LOADSCR+3

; Обменять с Undo
LD_UNDO         EQU SAVESCR+3

; Сохранить в Undo
SV_UNDO         EQU LD_UNDO+3

; Нарисовать рамочку x8
; IX - адрес данных для построения рамки
; DB x,y,длина, высота
; Ноль в длине и высоте означает 256...
BoxCol          EQU SV_UNDO+3

; Нарисовать рамочку x1
; IX - адрес данных для построения рамки
; DB x,y,длина, высота
; Ноль в длине и высоте означает длину, высоту = единице (1)
BoxPix          EQU BoxCol+3

; Выбрать окно x8
; Параметры аналогичны BoxCol
; После нажатия на Cancel, устанавливается флаг переноса
; и возвращаются старые параметры в [IX]
R8Sel           EQU BoxPix+3

; Выбрать окно x1
; Параметры аналогичны BoxPix
; После нажатия на Cancel, устанавливается флаг переноса
; и возвращаются старые параметры в [IX]
R1Sel           EQU R8Sel+3

; Открыть страницу, с ее запоминанием для работы с GUI
RAM             EQU R1Sel+3

; Сохранить окно [IX] с сохранением адреса окна в дескрипторе
; сохраненных окон
GETBLK          EQU RAM+3

; Закрыть последнее окно, которое указано в дескрипторе
; окон
CLOSE           EQU GETBLK+3

; A  <- номер элемента
; BC <- адрес таблицы слов (DEFW)
; HL -> значение из таблицы
TAB_HL          EQU CLOSE+3

; Вызывается TAB_HL, а затем делается JP (HL)
TAB_JP          EQU TAB_HL+3

; Вызвать редактор имени файла
; HL <- адрес буфера, где расположено имя файла (11 символов)
; на выходе в этом же буфере отредактированное имя, если не
; было нажата клавиша Ext.Mode, иначае установлен флаг
; переноса
FNEdit          EQU TAB_JP+3

; Вызвать файлер
; HL <- адрес таблицы сортировки файлов
; Вариации таблиц:
;
; DB #00,сектор_1, сектор_2, ..., #FF
; файлы размером сектор_1, сектор_2, ...
;
; DB #01,"p..","ex.","txt","...", ..., #FF
; файлы с вышеперечисленными расширениями, "." - любой символ
;
; DB #02,"имя.....scr",#FF
; файл с именем "имя......scr", "." - любой символ
FilerE          EQU FNEdit+3

; Опросить клавиши на событие OnFire и OnCancel
; A -> замикшированные состояния:
;        bit 0 - нажат Fire
;        bit 1 - нажат Cancel
;        bit 2 - нажата на мыше
; F ->   установленный флаг переноса - Cancel
BREAK           EQU FilerE+3

; Настроить таблицу для рисование точкой
; HL <- адрес таблицы (кратен 256)
; DE <- адрес экрана
install_plot    EQU INSTALL_PLOT+3

; Нарисовать линию точкой, установленной с помощью SET_SNP
; DE <- X1, Y1
; BC <- X2, Y2
LINE            EQU MODE_PL+3

; Установить точку для LINE
; HL <- адрес процедуры рисования точки, для которой в
;         DE <- X1, Y1
SET_SNP         EQU PLOT_C+3

; Удалить из дискриптора окон все окна
ERASE_ALLW      EQU SET_SNP+3

; Закрыть из дискриптора все окна
CLOSE_ALLW      EQU ERASE_ALLW+3

; Умножение
; HL = A*H
MULS            EQU CLOSE_ALLW+3

; Умножение
; HL = B*C
Mult            EQU MULS+3

; Деление
; HL = HL/DE
DIV             EQU Mult+3

; Деление
; DE=DE/BC
Div             EQU DIV+3

; Сохранить спрайт экрана
; [IX] <- DB x, y, длина, высота
; DE   <- адрес сохранения
; DE   -> адрес сохранения+размер спрайта
SaveWS          EQU Div+3

; Сохранить спрайт атрибутов
; [IX] <- DB x, y, длина, высота
; DE   <- адрес сохранения
; DE   -> адрес сохранения+размер спрайта
SaveWA          EQU SaveWS+3

; Напечатать спрайт экрана
; [IX] <- DB x, y, длина, высота
; DE   <- адрес спрайта
LoadWS          EQU SaveWA+3

; Напечатать спрайт атрибутов
; [IX] <- DB x, y, длина, высота
; DE   <- адрес спрайта
LoadWA          EQU LoadWS+3

; Вызвать меню смены дисководов (A,B,C,D,E)
; Если на выходе установлен флаг переноса, то ошибка или
; нажат Cancel
Driver          EQU LoadWA+3

; Вызвать сообщение о потери данных или их отсутствии
NoData_         EQU Driver+3

; Диалоговое окно "Вы уверены?"
; Если на выходе установлен флаг переонса, то не уверены,
; иначае уверены
ASK             EQU NoData_+3

; Очистить окно
CLSVV           EQU ASK+3

; Установить атрибут окну
setv            EQU CLSVV+3

; Узнать текущую страницу, установленную с помощью RAM
; A -> номер страницы (0,1,2,3,4,5,6,7)
GetRAM          EQU setv+3

; Узнать выбранный атрибут в RGB
; A -> атрибут RGB
GetATR          EQU GetRAM+3

; Замикшировать атрибут с атрибутом RGB
; A -> атрибут
; A <- измененный атрибут в зависимости от установок RGB
MIXCOL          EQU GetATR+3

; Очисить экран с атрибутом #07
CLS             EQU MIXCOL+3

; Открыть страницу расширенной памяти, искл. 2,5
ONPAGE          EQU CLS+3

; Инвертировать окно
INV             EQU ONPAGE+3

; Установить текущий экран 0
SET_SCR1        EQU INV+3

; Установить текущий экран 1
SET_SCR2        EQU SET_SCR1+3

; Установить атрибуты окна с установленным атрибутом RGB
SETV            EQU SET_SCR2+3

; Распаковать LaserCompact 5.2 на экран #4000
; HL <- откуда
DECOMPR         EQU SETV+3

; Обменять основной экран с экраном, находящимся в текущей
; странице
SwpSRam         EQU DECOMPR+3

; Вываливающееся окно
; IX <- адрес материнского окна
; HL <- адрес дочернего окна (вываливающегося)
; С вызовом функции Win
PupMnu          EQU POPUP+3

; То же самое, но не вызывается Win, а настраивается окно
pupmnu          EQU PupMnu+3

; Поместить 11 байт из 23773 (сюда кладет файлер имя файла)
; в адрес, находящийся в регистре HL
; HL <- адрес буфера имени файла
ToName          EQU main_+3

; Функция обратная функции ToName
FromName        EQU FromName+3


