; Строка ID бутлоадера MACRO _mSYSID DZ 'Starting...' ENDM ; ;[Вызов функций .------------------- ToBIOS EQU #08 ToBIOS_18 EQU #18 ToBIOS_3D13 EQU #3D13 ToBIOS_FromEXT EQU #3FD0 ;--------------------------------------- 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 .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_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_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_FN0 EQU #F4 ; Функция управления дешифратором портов. Функция в разработке .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 ;--------------------------------------- ;-----------------------[НЕПРОВЕРЕНО!!!]---------------------- ;============================================================= ; ..Внутренняя функция.. ; открыть графическое окно, с описателем в 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 ;=============================================================