TODO: -? пункт в сетапе "сохранять страницы спектрума при перезагрузке" - чистить буфер клавы не втупую, а какими-нибудь командами для этих всяких SIO/PIO, если есть Done: + немного доработана система перехвата ресета для устранения некоторых глюков и на будущее + в сетап работает сохранение настроек HDD "Setup" после первого удачного автодетекта + Сделан универсальный загрузчик битстрима для 1k30 и 1k50 + Активирован второй канал IDE + Нумерация устройств IDE переделана с последовательной на физическую + Выбор загрузочного IDE изменён с последовательного на физический + Добавлена возможность установки IDE со второго канала в качестве основного и альтернативного загрузочного диска + Убрано залипание клавиш при ресете по Ctrl+Alt+Del + При некорректных значениях даты и времени в CMOS данные заменяются на дефолтные значения, выводится сообщение об ошибке + В Setup добавлен выбор режима развёртки (--------/Scorpion/Pentagon/Spectrum) + В Setup добавлен выбор вертикальной синхронизации (--------/312 50Гц/320 49Гц) + Добавлена загрузка системы с RAM Disk + Исправлен баг со стеком в BLK_TO_RAMD и ещё несколько багов в процедурах чтения с РАМ-ДИСКА + Добавлена загрузка RECOVERY с ROM-Disk в ПЗУ + При холодном старте устанавливается инт пентагона (а не скорпиона), если в CMOS не задано иное + Функция БИОС FN_SINC (#F2) при удачном завершении не сбрасывала флаг CF на выходе - исправлено + Новая функция GET_RAMD_NUM + Добавленые дополнительные опции в функцию БИОС FN_SINC (#F2), bit7 регистра A теперь отвечает за переключение старого/нового варианта работы функции (для сохранения совместимости со старыми программами) + Новое лого при старте, разрешение изменено с 256х64 16 цветов на 128х72 256 цветов + Изменена процедура вывода логотипа, логотип перенесён в другую страницу ПЗУ + Смена языка, развёртки и инта происходит в Setup сразу + Изменены некоторые надписи и поправлена структура SETUP + Доделана функция FN_RESET + Доделана функция DCP_CONFIG - функция управления дешифратором портов + Убрано задвоение функций 4х + Функции 5х перенесены из 0 в 8 страницу ПЗУ + Изменена функция инициализации DCP, освободилось около 4,5 кб + Теперь зарезервированные под режим спектрума страницы можно легко освободить, номер блока - 1 + Добавлены образы ПЗУ ZX-Sprinter для запуска режима спектрума без загрузки DSS + Страница BIOS совместима с адаптированными образами ПЗУ спектрума. Теперь отдельные страницы оригинальных SP_EXP и SP_EXP2 не требуются. + Исправлен баг в режиме спектрума. При выборе Clear RAM в меню и последующим выходом в ДОС по CAD зависало, потому что вызывалась процедура FullInit для очистки памяти. Теперь вместе с очисткой памяти сбрасывается перехват ресета + Поправлены буферы, оптимизированы некоторые процедуры, освобождено ббольше 1,5 кб ОЗУ для работы BIOS во время старта + Найдено несколько древних мелких огрехов copy/paste, при работе было незаметно, но приятно, что нашлись + Поправлен маловероятный, но возможный глюк с переполнением стека при входе-выходе из SETUP + Постепенный рефакторинг кода))) + Всего и не вспомнить уже... ==================================================================================================================================================================================================================== Новое описание функции БИОС FN_SINC (#F2) LD A,sync_mode ; режим синхронизации ; Reg A bit7 = 0 - режим очистки экрана и установки INT ; A=0 режим по умолчанию - используется для очистки ; страниц режима (отключения вывода всех окон) ; установка INT из системной переменной ; A=1 режим Scorpion ; положение INT-а, как в Scorpion-256 ; A=2 режим Pentagon ; положение INT-a как в Pentagon-128 ; A=3 режим Spectrum ; положение INT-a как в оригинальном ZX Spectrum ; A=4 установка INT из настроек пользователя в CMOS ; ; Reg A bit7 = 1 - режим установки вертикальной синхронизации и/или wait ; bit1,bit0: ; %00 - синхра выставляется из системной переменной ; %01 - синхра выставляется из CMOS ; %10 - синхра 320 lines 49 Hz ; %11 - синхра 312 lines 50 Hz ; bit2: ; %0 - игнорировать bit1..bit0 ; %1 - не игнорировать bit1..bit0 ; ; bit3: ; %0 - no waits (port all_mode bit2 set) ; %1 - original waits (port all_mode bit2 res) ; bit4: ; %0 - игнорировать bit3 ; %1 - не игнорировать bit3 ; ; bit5,bit6 - reserved ; DRV_GET_PAR: ; получить параметры носителя LD A,drv_type ; бит 0..3 - номер устройства ; бит 4..7 - тип устройства ; 0 - дисковод ; 6 - ram-disk ; 8 - HDD ; C - CD-ROM LD C,#58 ; RST ToBIOS ; NC - нормальное завершение ; L - число секторов (на целиндр) ; H - число головок ; DE - количество цилиндров ; IX - размер сектора в байтах ; B - доп. параметры: ; FDD: ; бит7 - тип 1.44/720 ; HDD: ; бит0 - канал IDE 0/1 ; бит6 - CHS/LBA ;++++++++ ; RMD: ramdrive block id ; если в HL,DE все FF - устройства нет ; CF - нет устройства ; Новое описание функции БИОС FN_RESET FN_RESET: ; Сброс или перезагрузка LD B,res_type ; 1 - рестарт, 2 - soft reset, 3 - hard reset, 4 - Reinit spectrum pages LD C,#FD ; номер функции RST ToBIOS ; CF -> функция не исполнена, возможные причины: ; некорректное значение res_type ; одна из ZX страниц занята (при res_type=4), тогда под zx отдастся только часть страниц ; старая версия BIOS ; Новое описание функции GET_RAMD_NUM (#9B) GET_RAMD_NUM: ; получить номер RAM-Disk-а (0..15) по его block id LD A,id_blk ; идентификатор блока LD C,#9B ; номер функции RST ToBIOS ; NC -> A - номер RAM-Disk-а (0..15). ; CF -> ошибка в идентификаторе блока или биос ниже 2.55 ; Новое описание функции БИОС BLK_RD_WR (#C8) BLK_RD_WR: ; чтение/запись из/в блок(а) памяти секторами ; по 256 байт LD HL,bufer ; адрес буфера данных LD DE,sector ; абсолютный номер сектора (256b) LD B,sec_num ; число секторов LD A,id_blk ; идентификатор блока ИЛИ размер сектора (1 - 256b, 2 - 512b) при command = #46 LD A',command ; команда 0 - чтение, #FF - запись, #46 чтение из ROM-Disk LD C,#C8 ; номер функции ; s_line_def equ 4 s_line_cmos equ 5 s_lines320 equ 6 s_lines312 equ 7 s_wait_orig equ #18 s_wait_def equ #10 DCP_CONFIG: ; [x] функция управления дешифратором портов. ;A - если ноль, то вызов функции переинициализации портов PORTS_INIT ;HL - адрес ;DE - маска - 0 изменяемые биты, 1 неизменяемые ;B - порт ;C - #F4 номер функции ; !FIXIT Функция позволяет открывать/закрывать дополнительные порты компьютера. ;