; Строка ID бутлоадера MACRO _mSYSID DZ 'Starting...' ; первый символ в загрузчике ОС заменяется на номер стартового драйва, второй на номер активного загрузочного раздела ENDM ; ;[Вызов функций]--------------------------------; ToBIOS EQU #08 ; для вызова из ОЗУ в SLOT0 (например из DSS) ToBIOS_18 EQU #18 ; для вызова из 8-й страницы ПЗУ в SLOT0 ToBIOS_3D13 EQU #3D13 ; для вызова из 8-й страницы ПЗУ в SLOT0 ToBIOS_FromEXT EQU #3FD0 ; для вызова из 0-й страницы ПЗУ в SLOT0 ;-----------------------------------------------; BIOS: ;[Функции работы с памятью]---------------------; .GetMemSize EQU #C0 ;#90 ; Определение объемов ОЗУ .InitMem EQU #C1 ;#91 ; Инициализация распределения памяти. .GetMem EQU #C2 ; Выделение блока ОЗУ .FreeMem EQU #C3 ; Освободить блок ОЗУ .GetMemPage EQU #C4 ; Получить физический номер страницы из блока памяти .GetMemBlkPages EQU #C5 ; Получить список физических страниц блока .GetBanksPorts EQU #C6 ; Получение адресов портов окон .GetMemPageNext EQU #C7 ; Получить номер следующей страницы блока по предыдущему № .GET_RAMD_NUM EQU #9B ; Получить номер RAM-Disk-а (0..15) по его block id .SWAP_RAM_DRIVES EQU #9C ; Cменить набор рамдисков ZX <-> Sp2000 .SWAP_RAM_DRIVES.Sp2000 EQU #009C ; Режим рамдисков Sp2000 .SWAP_RAM_DRIVES.ZX EQU #FF9C ; Режим рамдисков ZX Spectrum mode .SWAP_RAM_DRIVES.Info EQU #FE9C ; Узнать какой режим РАМ дисков установлен .DivMemBlocks EQU #9D ; Разделение блока .MergeMemBlocks EQU #9E ; Слияние блоков ;-----------------------------------------------; ;[Работа с блоками ОЗУ, как с RAM-Disks] .BLK_RD_WR EQU #C8 ; Чтение/запись из/в блок памяти секторами по 256 байт .GetMemRMD EQU #92 ; Получить блок памяти N bytes для RAM-Disk'а .FreeMemRMD EQU #93 ; Освободить блок памяти для RAM-Disk'а .GetMemPageRMD EQU #94 ; Получить физический номер страницы RAM-Disk'а .RAMD_CALC_PAGE EQU #98 ; Вычисление страницы и адреса в RAM-Disk по абсолютному номеру сектора .BLK_TO_RAMD EQU #C9 ; Назначить блок памяти RAM-Disk-у .RAMD_CLEAR EQU #CA ; Освободить RAM-Disk .GET_RAMD_ST EQU #CE ; Получение идентификатора блока, назначенного на RAM-Disk ;-----------------------------------------------; ;[Управление назначением на дисководы]----------; .RAMD_TO_DRV EQU #CB ; Назначение RAM-Disk на дисковод TR-DOS .FDD_TO_DRV EQU #CC ; Назначение физического дисковода на логический .HDD_TO_DRV EQU #CD ; Назначение винчестера на дисковод .GET_DRV_ST EQU #CF ; Получить тип назначения на логический дисковод ;-----------------------------------------------; ;[Управление окнами и режимами экрана]----------; .WIN_OPEN EQU #B0 ; Функция открытия окна. .WIN_CLOSE EQU #B1 ; закрытие окна .WIN_COPY EQU #B2 ; Копирование данных текстового окна в память (запоминание окна) .WIN_RESTORE EQU #B3 ; Копирование из памяти в текстовое окно (восстановление окна) .WIN_GET_SYM EQU #B4 ; Взять символ с экрана .WIN_PUT_SYM EQU #B5 ; Положить символ на экран .WIN_SET_ZG EQU #B6 ; установка знакогенератора .WIN_MOVE EQU #B7 ; Перемещение окна .WIN_GET_ZG EQU #B8 ; Получение знакогенератора ;-----------------------------------------------; ;[Функции печати и упр. режимом экрана]---------; .LP_OPEN_S EQU #80 ; Открытие стандартных окон. .LP_OPEN_S.ZX_32x24_Default EQU #0080 ; спектрумовское окно 32x24 .LP_OPEN_S.TXT_64x24_Default EQU #0180 ; текстовое окно 64x24 .LP_OPEN_S.TXT_40x32_Default EQU #0280 ; текстовое окно 40x24 .LP_OPEN_S.TXT_80x32_Default EQU #0380 ; текстовое окно 80x32 .LP_OPEN_S.ZX_32x24 EQU #0480 ; спектрумовское окно, HL - положение окна .LP_OPEN_S.TXT_64x24 EQU #0580 ; текстовое окно 64x24, HL - положение окна .LP_OPEN_S.TXT_40x32 EQU #0680 ; текстовое окно 40x32, HL - положение окна .LP_OPEN_S.TXT_80x32 EQU #0780 ; текстовое окно 80x32, HL - положение окна .LP_OPEN_S.Graf_0 EQU #0880 ; графическое окно 0, HL - положение окна .LP_OPEN_S.Graf_1 EQU #0980 ; графическое окно 1, HL - положение окна .LP_PRINT_ALL EQU #81 ; Печать символов с атрибутом .LP_PRINT_SYM EQU #82 ; Вывод символов на экран без атрибута .LP_PRINT_ATR EQU #83 ; печать атрибутов .LP_SET_PLACE EQU #84 ; Установка текущего знакоместа в окне .LP_PRINT_LINE EQU #85 ; Вывод строки символов на экран с текущего знакоместа .LP_PRINT_LINE2 EQU #86 ; Вывод строки символов на экран без атрибутов .LP_PRINT_LINE3 EQU #87 ; Вывод строки символов до разделителя .LP_PRINT_LINE4 EQU #88 ; Вывод строки символов до разделителя, без атрибутов .LP_CLS_WIN EQU #89 ; Очистка экрана .LP_SCROLL_UD EQU #8A ; Скроллинг части глобального окна вверх/вниз .LP_PRINT_LINE5 EQU #8B ; Вывод строки символов на экран до разделителя .LP_PRINT_LINE6 EQU #8C ; Вывод строки символов на экран до разделителя без атрибутов .LP_CLS_WIN2 EQU #8D ; Очистка экрана с указанием символа заполнения .LP_GET_PLACE EQU #8E ; Получить текущее положение вывода на экран .LP_PR_LINE_DIR EQU #E0 ;!TODO недоделана. Печать "в консоль" до разделителя ;-----------------------------------------------; ;[Графические функции]--------------------------; .PIC_POINT EQU #A1 ; Установить точку .PIC_SET_PAL EQU #A4 ; Установка палитры .PIC_GET_PAL EQU #A4 ; Чтение палитры (номер такой же как у .PIC_SET_PAL) .SET_PAL_INIT EQU #A6 ; Установка внутренней палитры ;-----------------------------------------------; ;[Работа с HDD. #4X (fast)]---------------------; .HDD_INIT EQU #40 ; Инициализация винчестера .HDD_RECAL EQU #41 ; Рекалибровка винчестера .HDD_TEST_IDE EQU #42 ; Тест наличия интерфейса IDE .HDD_PREPARE EQU #43 ; Подготовка винчестера к операции чтения/записи .HDD_READ_BPB EQU #44 ; Читать BPB первого раздела .HDD_READ EQU #45 ; Читать сектора с винчестера .HDD_WRITE EQU #46 ; Писать сектора на винчестер .HDD_PART EQU #47 ; Настройка партиций и master/slave .HDD_READ_NEXT EQU #48 ; Читать следующий сектор (ONLY FOR LBA!) ;-----------------------------------------------; ;[Работа с HDD и дисководами. #5X]--------------; .DRV_RESET EQU #51 ; Сброс контроллера и настройка на диск .DRV_READ_LONG EQU #52 ; Чтение с устройств в указанную страницу .DRV_WRITE_LONG EQU #53 ; Запись на устройства в указанную страницу .DRV_VERIFY EQU #54 ; Проверка секторов .DRV_READ EQU #55 ; Чтение с устройства .DRV_WRITE EQU #56 ; Запись на устройства .DRV_DETECT EQU #57 ; Определение параметров устройства .DRV_GET_PAR EQU #58 ; Получить параметры носителя .DRV_SET_PAR EQU #59 ; Установить параметры носителя .DRV_VERSION EQU #5A ; Номер версии дисковой спецификации. .DRV_EXTENDED EQU #5E ; Расширенные функции для драйвов ; [x] 21/12/2023 .DRV_EXTENDED.CD_Eject EQU .DRV_EXTENDED .DRV_EXTENDED.CD_Close EQU #0100 + .DRV_EXTENDED .DRV_LIST EQU #5F ; Список дисковых устройств ;-----------------------------------------------; ;[Управление железом, опр. версии]--------------; .FN_TURBO EQU #8F ; Функция управления турбо режимом и FDD 720/1440 .FN_TURBO.OFF EQU #02 ; .FN_TURBO.ON EQU #03 ; .FN_TURBO.VG.OFF EQU #12 ; .FN_TURBO.VG.ON EQU #13 ; .CheckInit EQU #97 ; Если обнаружен первый старт, то инициализация всей памяти, системных переменных .FullInit EQU #9F ; Инициализация всей памяти, системных переменных .FN_CRIPT EQU #ED ; Выдача полного Board Number .RST_CONF.AY8910 EQU #EE ; для совместимости с софтом Sp97, переключение в конфу AY8910 .FN_VERSION EQU #EF ; Выдача информации о версии BIOSа и железа. .RST_CONF.SP97_1 EQU #F0 ; для совместимости с софтом Sp97, переключение в конфу Sprinter-1 .RST_CONF.SP97_2 EQU #F1 ; для совместимости с софтом Sp97, переключение в конфу Sprinter-2 .FN_SYNC EQU #F2 ; Установка синхронизации, очистка страницы режима экрана .SPRINTER_ALL EQU #F3 ; переключение конфигурации пользователя .DCP_CONFIG EQU #F4 ; Функция управления дешифратором портов. BIOS 3.05 .CMOS_TEST EQU #F5 ; Проверить наличие CMOS .CMOS_RD EQU #F6 ; Читать из регистра CMOS .CMOS_WR EQU #F7 ; Писать в регистр CMOS .SET_PORTS EQU #F8 ; Установка внутренних портов. Функция в разработке .READ_PORTS EQU #F9 ; Чтение внутренних портов. Функция в разработке .WRITE_PORTS EQU #FA ; Запись внутренних портов. Функция в разработке .GOTO_SPECTRUM EQU #FB ;[ ] доковырять .REINIT EQU #FD ;[x] restart, soft/hard reset, reinit RAM ID for spectrum pages .REINIT.RESTART EQU #01 ; .REINIT.SOFT_RESET EQU #02 ; .REINIT.HARD_RESET EQU #03 ; .REINIT.SET_ZXPAGES EQU #04 ; ;-----------------------------------------------; ; ;----------------[ EROOR CODES ]----------------; BIOS.Error.NoErrors EQU 0 BIOS.Error.BadDrvNumber EQU 2 ; BIOS.Error.WaitPort EQU 4 ; BIOS.Error.WriteProtect EQU 8 ; ; .NO_ERROR EQU #00 ; 00 - NO ERRORS ; .INVALID_COMMAND EQU #01 ; 01 - BAD COMMAND ; .INVALID_DRIVE EQU #02 ; 02 - BAD DRIVE NUMBER ; .UNKNOWN_FORMAT EQU #03 ; 03 - UNKNOW FORMAT ; .NOT_READY EQU #04 ; 04 - NOT READY ; .SEEK_ERROR EQU #05 ; 05 - SEEK ERROR ; .SECTOR_NOT_FOUND EQU #06 ; 06 - SECTOR NOT FOUND ; .CRC_ERROR EQU #07 ; 07 - CRC ERROR ; .WRITE_PROTECT EQU #08 ; 08 - WRITE PROTECT ; .READ_ERROR EQU #09 ; 09 - READ ERROR ; .WRITE_ERROR EQU #0A ; 10 - WRITE ERROR ; .GENERAL_FAILURE EQU #0B ; 11 - FAILURE ; .DEVICE_BUSY EQU #0C ; 12 - BUSY (DEVICE OPENED) ; ;.RESERVED EQU #0D ; 13 - RESERVED ;-----------------------------------------------; ; ; ;-----------------------[НЕПРОВЕРЕНО!!!]---------------------- ;============================================================= ; ..Внутренняя функция.. ; открыть графическое окно, с описателем в IX ; на месте HL, E - страница режима, седьмой бит E - режим BOND .PIC_FN0 EQU #A0 ;============================================================= ;============================================================= ; point 3D13h C=0A2h ; ВЫВОД ЛИНИИ 'FILL' вход: dE - вертикаль, HL - горизонталь. ; IX - длина линии в точках, A - цвет .PIC_FN2 EQU #A2 ;============================================================= ;============================================================= ; point 3D13h C=0A3h ; ВЫВОД ЛИНИИ 'COPY' вход: dE - вертикаль, IX - горизонт. ; A',HL' - адрес данных, откуда брать данные ; A' - страница RAM-Disk/MEM, HL' - адрес в стр.2 ; BC' - длина данных ; Выход: HL',A' - следующий байт в RAM-Disk !!! .PIC_FN3 EQU #A3 ;============================================================= ;============================================================= ; point 3D13h C=0A5h ; УСТАНОВКА СТРАНИЦЫ ВЫВОДА НА ЭКРАН Вход: E = 0/1 .PIC_FN5 EQU #A5 ;============================================================= ;============================================================= ; point 3D13h C=0A7h ;////// недоделанная !!! //////////////////////////// ; Рисование линий. Е - вертикаль, HL - горизонталь ; H' - высота, C'/DE',B' - add_parameters D - color ; C' = 80h, DE' = 0, B'=0 - для вертикальных линий ; Алгоритм: ; 1: Поставить точку цветом D ; HL,C + DE,B -> HL,C ; dec H' ; jr nz,1 .PIC_FN7 EQU #A7 ; point 3D13h C=0A8h .PIC_FN8 EQU #A8 ;============================================================= ;============================================================= ;/////// projected !!! //////////////////////////////// ; Рисование спрайтов ; E - вертикаль, IX - горизонталь ; D - код увеличения/уменьшения ; B - управляющий код ; 0 - Вывод постоянного спрайта ; 1 - Вывод временного спрайта ; 2 - Восстановление картинки под временным спрайтом ; HL - Special coding data ( данные спрайта форма, цвета.. ) ; flick-подобный формат .PIC_FN9 EQU #A9 ;=============================================================