Привет forth32, я тоже как раз допиливаю патчер
вот краткий ченджлог
Код:
- Stage2.rom
- добавил "тест железа" определяет некоторые парметры и выводит на экран
эти данные нужны "патчеру" - так пусть еще будет информация
например
'ROM: OPTS 1.1 | PK8010 - no FDC | GZU: 48k'
'ROM: OPTS 2.0 | PK8020 with FDC | GZU: 192k'
- Добавлена проверка на диски с левым адресом загрузки, они сразу форсятся в дефолтный биос
- Добавлена проверка для дисков зависящих от определённого типа ПЗУ
если биос не соответсвует - он его не запускает (ибо он точно не заработает с текущим ПЗУ)
и предлагает запустить стандартный биос
- Стандартные биосы
в них происходит загрузка при несовместимости выбранного биоса с текущей конфигураций
или при удержании Ctrl+Shift при загрузке
?(Enter/Y-yes, C-CP/M, M-microdos) ?
по Enter - он загрузит работающий образ той системы что не совместима
или можно загрузить указанный тип системы
для поддержки FallBack to MICRODOS надо подправить API
надо подставлять 3 дорожки а не 2
- Патч учитывает информацию о наличии FDC для CP/M BIOS
и если его нет, то диски C и D мапяться как виртуальные
иначе они - C - $FDD A, D - $FDD B
- после этого выводим информацию о текущей конфигурации дисков для этого биоса
выводит како логичесский диск чему соответсвует
для CP/M выводит 4 диска + напоминание о наличии служебного диска F
диска с инструментами для работы с EXTROM API
- CP/M BIOS Resident
- Поддержка структуры необходимой для работы утилиты MOUNT & co
- Добавил поддержку диска F - инструментальные средства, MOUNT & CO
это теперь обычный KDI
подправил
emu extrom emulation code
F32 cpm bios
- поченил диск E - он потерялся по дороге
- увеличилось место под код "резидента"
разделил на 2 типа, отличаются только адресом посадки в память
как результат общее минимальное окно стало 762 байта а занято 407 байти в запасе 355 байт еще.
это как результат перетряски структуры исходников
до перетряски оставалось 15 байт, и диск F бы не влез
- выпилил поддерку перехвата хоткея
была идея использовать ее для копиторвания данных на диск E если бы не получилось сделать диск F
- МИКРОДОС BIOS Resident
- Есть поддержка ТОЛЬКО эмулированых дисков
поддержки реальных пока нет, но планируется
там много прибито "гвоздями", и надо много менять
- Поддержка структуры необходимой для работы утилиты MOUNT & co
- Очень сильно изменена внутренняя структура исходников.
Ради чего это делалось, сейчас есть 24 типа поддерживаемых дисковых биосов
13 - CP/M BIOS
6 - МИКРОДОС
4 - Неподдерживаемых
1 - дефолтный биос
Каждому биосу соотвествует свой файл описывающий его.
Т.о. любое изменение кода "резидента" приводиот к необходимости править все зависимые файлы.
Что и исправил
Теперь есть шаблоны "патчеров" и код "резидентов"
В этих файлах описано что надо проверить чтобы убедится что сейчас в памяти именно этот биос
и что надо в нём поменять чтобы он заработал с EXTROM API
Так-же указаны необходимые условия и проверки (типа что биос работает только с ОПТС 1.x)
сейчас есть 5 шаблонов
cpm1 - основной шаблон для CPM
cpm2 - отличается от CPM1 только местом в памяти
сам шаблон это копия CPM1, в котором префиксы всех меток
изменены на CMP2
cpm_chk - поддержка дефолтного биоса от Forth32
microdos - шаблон для МИКРОСДОСа
unsupported - шаблон тех систем которые детектятся но пока не поддерживаются
Есть еще соответствующий набор .csv файлов где в видет таблички описаны
конкртетные параметры для конкретных биосов
И скрипт которых генерит итоговые asm файлы из этой всей красоты
Сами шаблоны - откоментированы, попробовал в них описать откуда брать нужные значения
При генерации - коменты остаются только для биоса на которм делался пример,
для остальных - удаляются
Теперь просто, подправил код резидента, если в ноём появились новые сущности
относящиеся к "патчеру" - добавил из в CSV и перегенерил файлы
всё это дело живёт в папке
stage2.asm - основной модуль загрузчика 2й ступени
hw_test.asm - детектор железа
generator/V0/
data/ - шаблоны и csv файлы
out/ - сюда собственно генерятся файлы
doc/ - файлы со служебной информацией про "дырки" и прочая лабуда
kdi_substitute/ - генератор MICRODOS.BIN на данных патчера
если изменился резидент то надо перегенерировать.
extrom-patcher-resident-*.asm - сами "резиденты"
extrom-patcher.asm - сам код патчера
mount-info.asm - выводит информацию про примаунченые диски
gen_patchs.rb - тот самый "генератор"
disk_image_checker.rb - скрипт который проверяет базу kdi и пишет какой там тип
биоса основываясь на stage2.rom
помогает при отладке.
zout/
тут ZASM генерит свои файлы
на собственно интересует
stage2.cim - бинарный код который переимновываем в stage2.rom и кладём в папку
в корень SD-Card или в папку exitrom эмулятора
stage2.lst - файл полезный при отладке