; Кернель функций BGE 3.oo
;---------------------------------------------------------------
;              Описание кернеля Burial Gfx Editor 3.oo
;---------------------------------------------------------------
; Модуль располагается с адреса PgnAdr (#A500) и
; может иметь максимальную длину #1B00 (6912) байт
;---------------------------------------------------------------
; На входе в плагин:
; HL - адрес резидент SupremeGUI
; DE - адрес выхода из модуля:
;      SCF - модуль не оставлять (модуль с ошибкой и т.п.)
;      A = 0 перерисовывать главное меню сначала
;      A = 1 закрыть все окна и выйти в главное меню
;---------------------------------------------------------------
; Константы BGE 3.00
;
BeginGUI EQU #C800
SCREEN   EQU #C000
UNDOSCR  EQU #C000+6912      ; адрес Undo
ScrPage  EQU 0               ; страница SCREE, UNDOSCR
SuxPage  EQU 1               ; страница, куда свапятся окна и
                             ; которую можно использовать в
                             ; своих корыстных целях
GUIPage  EQU 3               ; страница SupremeGUI
AddPage  EQU 4               ; страница данных BGE, которую
                             ; так же можно использовать в
                             ; своих модулях, но не забывайте
                             ; о том, что эта страница
                             ; может использоваться и другими
                             ; модулями
PgnPage1 EQU 6
PgnPage2 EQU 7
RamPage  EQU 7               ; страница второго экрана
PgnAdr   EQU #A500           ; адрес рабочего плагина
;---------------------------------------------------------------
; Вызов функций Burial, которые приведены ниже,
; происходит следующим образом:
;       CALL "адрес_в_кернеле"
;---------------------------------------------------------------

KERNEL          EQU #6000

; Вызваить функцию GUI
GUI             EQU KERNEL

; Запуститьь BGE сначала
BGE_RUN         EQU GUI+3

; Картинку на экран
LOADSCR         EQU BGE_RUN+3

; С экрана в память
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, иначае установлен флаг
; переноса
; Имя файла так же копируется в 23773
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 BREAK+3

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

; Установить точку для LINE
; HL <- адрес процедуры рисования точки, для которой в
;         DE <- X1, Y1
SET_SNP         EQU LINE+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   <- адрес спрайта
; DE   -> адрес спрайта+размер спрайта
LoadWS          EQU SaveWA+3

; Напечатать спрайт атрибутов
; [IX] <- DB x, y, длина, высота
; DE   <- адрес спрайта
; 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 SwpSRam+3

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

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

; Функция обратная функции ToName
; HL <- адрес буфера имени файла
FromName        EQU ToName+3

; Попиксельная печать спрайта 1x1
; HL - адрес спрайта
; BC - x,y
OutPix          EQU FromName+3

; Методы наложения Для OutPix
OR_Pix          EQU OutPix+3
XOR_Pix         EQU OR_Pix+3
AND_Pix         EQU XOR_Pix+3

; Настройки курсора и системы для BGE
IniVar          EQU AND_Pix+3

; Рамочка
; SCF   <- выбор размера
; XOR A <- перемещение по экрану
Ramka8          EQU IniVar+3
Ramka8_         EQU Ramka8+3
Ramka1          EQU Ramka8_+3

; Вызов настройки палитры с выводом основного экрана
PRGB            EQU Ramka1+3

; Вызов настройки палитры без вывода основного экрана
PRGB2           EQU PRGB+3

; Редактор спрайта
; Параметры следующие
; HL <- адрес таблицы параметров
; IX -> окно редактора спрайта
; A  -> так же, как и после вызова Win или Winn
;TBFnt1 DB #07,#04       ; X,Y окна
;       DB #11,#08       ; ширина, высота
;       DW FBuff         ; адрес спрайта
;       DW #0103         ; X,Y окна редактора
;       DW #0101         ; размеры спрайта
;       DW #0603         ; X,Y preview
;       DW BEText        ; текст
;       DW BESel         ; подсветка
;       DW BEHot         ; горячие клавиши

; Окно можно перемещать по экрану, можно выходит из окна,
; кликнув курсором мимо окна
SPEdit          EQU PRGB2+3
; Окно статическое
SPEdit_         EQU SPEdit+3

; Распаковщик HRUSTовских файлов 1.oo, 1.o1, 1.o2, 1.o3
; HL <- откуда
; DE <- куда

DEHRUST         EQU SPEdit_+3

; Пересчет коорднат относительно окна
; DE <- относительные координаты
; DE -> абсолютные координаты
RealWin         EQU DEHRUST+3

; Вызов GUI функции, но только для процедур, работающих как-бы
; из-под самой GUI, но вне страницы GUIPage
GUI_            EQU RealWin+3

; Цвет бордюра (byte)
BORDER          EQU GUI_+3

; Выдать информацию о ошибки с запросом на повтор
; A <- код ошибки
GET_MSG         EQU BORDER+1


