Экраны «сжимаются» «штатным» RLE. Грузить теперь обязательно специальным загрузчиком, «распихать» все по нужным страницам памяти из BASIC невозможно.
Устройства master/slave теперь показываются разными буквами: A, B, C, D для разделов на master, E, F, G, H для разделов на slave.
BUG: фалы чуть менее 64k не грузятся, это связано с неправильным рассчетом Kb → b, это затрагивает файлы без PLUS3DOS заголовка (или которые будут точно 65536 байт и больше /8Mb предел-то/, в общем, где младшие два байта длины — 0). Workaround: всегда добавлять PLUS3DOS заголовки. В коде надо поправить а области «guesstimate file size into DE» (plus3dos.asm). Аналогичная проблема с показом, ноги оттуда же, +3 DOS округляет размер (в каталоге) вверх до ближайшего килобайта, поэтому всё, чуть меньше 64K будет иметь размер 65536 — OVERFLOW, 0

Кое-что подпёрто палочками и приклеено «Моментом», но, может сломаться опять.
- Весь код надо «причесать».
Q: Начало всего по адресу 0x76d1, это произвольно выбранное место или зачем-то надо именно такой адрес?
-
Есть проблема с двумя MMC/IDE устройствами с несколькими разделами, они оба будут отображены как ТИП X, и будет два таких ТИП X. Наверное, правильно добавить устройство перед X. В общем, те счастливчики, у которых есть два устройства на master/slave, пока видят двойной набор дисков с одинаковыми именами.
-
Вынести «трамплин» для +3 API в отдельный файл. Этот код нужен в загрузчике и в основной программе.
- Нужен ли перехват фатальных ошибок, Retry/Abort/Cancel? Пока не совсем понятно, что с ними делать и есть ли место для обработки этого. Пока они игнорируются (считаются фатальными).
Магия, объяснения которой я не помню, но оно есть в где-то в документации +3 DOS: стек должен быть ниже 0xbfe0. Иначе оно и правда не работает. Я проверял

И, вообще, стек сейчас очень близко к концу кода в связи с ростом размера этого кода. Может быть, перенести TR-DOS «вниз», как и +3 DOS? Дисковым «драйверам» же не надо быть в быстрой памяти… Прямо сейчас у меня собирается либо TR-DOS, либо +3 DOS. Одновременно они, вообще, могут в дикой природе встречаться? Я FUSE и с тем и с тем запустить не могу.
Временно используется zx0 сжатие для экранов, потому что это позволяет грузить всё из BASIC без переконфигурации кэша.
Собственно +3 DOS:
- код достаточно сложный, может, можно и упростить, особенно определение длины файла, я там оттянулся
- компиляция «за» параметром DOS_PLUS3, надо добавить -DDOS_PLUS3 при компиляции
- если компилируется вместе с TR-DOS (без правки кода сейчас это невозможно), то всё в страницу памяти не влезает и +3 код автоматически выносится в 0x7000
- вроде, изменение размера кэша и RAM диска позволило хранить RLE экраны в странице 1 (в странице 7 нет для них места, там слишком много занимает +3 DOS)
- для размещения всего в памяти требуется специальный загрузчик, так как обязательна коррекция конфигурации кэша, а после этого нельзя возвращаться в BASIC
- +3 в DISK_DRIVER добавлен как специальный случай, как и TR-DOS
Общие изменения:
- TR-DOS тоже вынесен «за флаг» -- DOS_TRDOS
- в ide.asm пришлось добавить процедуры из trdos.asm, чтобы компилировалось без TR-DOS
- параметры загрузки экранов слегка подправлены для гибкости, используется 1-я страница (можно сделать IFDEF)
Связанные с +3
- в main.asm сделана отдельная точка входа для +3, которая и используется для установки флага «+3 DOS есть». Она вызывается из загрузчика, который работает только под +3 DOS. Таким образом решена проблема детектирования +3.
- +3 DOS явно управляет страницей в 0xc000, но для этого надо знать, какая у нас там сейчас при вызове +3 API. Поэтому все записи в порт 0x7ffd копируются в BANKM, как и положено.
- в disk_t убрано поле _reserv и добавлено поле label
- disk_menu_generator использует label «as is», если там не 0
- определение устройств +3 не в disk.asm а в plus3dos.asm
- disks_menu_generator использует label, если есть, иначе -- номер unit’а
- disks_menu_generator показывает тип устройства (DVMCC, ZXMMC, SMUC, и т. п.) и номер устройства (0, 1) если нет разделов, букву A..D, если раздел есть.
- в settings.asm написан код для сохранения под +3. Magic выкинут, не думаю, что он критичен для +3. Сейчас у меня можно скомпилировать и без TR-DOS и без +3, но этот случай в settings.asm пока не предусмотрен.
Напрямую не связанные с +3:
- появился DISK_DRIVER_NOFS_MASK для упрощения показа типа устройства
- соответственно, disk_scan_filesystems добавляет в label «-», если не удалось найти файловой системы
Премия для самых пытливых
Собственно патч, накатывать поверх f6b4a7c141796b3fe85f3bb36a7f29cc68239251.
[свернуть]
[свернуть]