Fix FAT chain termination and harden SD driver error handling
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
# Проверки драйвера
|
||||
|
||||
Тесты исполняют собранный машинный код в Python-пакете `z80`.
|
||||
Данные диска синтетические; физические SD-карты и образы эмулятора
|
||||
не открываются и не изменяются.
|
||||
|
||||
Из `_sd` после сборки тела, обновления `body_syms.inc` и упаковки
|
||||
PackBits по инструкции в основном README драйвера:
|
||||
|
||||
```text
|
||||
sjasmplus.exe zc_sd_driver_body.asm --sym=body_syms_new.txt
|
||||
# При изменении тела обновить body_syms.inc и .pb до следующей команды.
|
||||
sjasmplus.exe zc_sd_driver.asm --sym=resident_syms_new.txt
|
||||
python tests/test_driver.py
|
||||
python tests/test_resident.py
|
||||
```
|
||||
|
||||
Нужны Python и пакет `z80`. Бинарники, символьные таблицы и PackBits
|
||||
должны относиться к одной сборке.
|
||||
|
||||
Покрытие (17 групп):
|
||||
|
||||
- все 128 смещений FAT32-записей, зеркалирование FAT и сохранение
|
||||
старших зарезервированных битов;
|
||||
- полное сравнение EOC, маскирование верхних четырёх битов,
|
||||
свободные/зарезервированные/повреждённые ссылки и ошибки чтения;
|
||||
- чтение и запись фрагментированных цепочек, размеры кластера
|
||||
1–128 секторов, несколько вызовов LOAD512/SAVE512, переходы страниц
|
||||
памяти с ненулевым начальным смещением;
|
||||
- выделение кластеров, расширение файла и каталога, отказ от продления
|
||||
повреждённой цепочки;
|
||||
- 32-битная арифметика LBA, границы тома, SDSC/SDHC-адресация;
|
||||
- MBR с разделом в каждом из четырёх слотов, BPB без MBR,
|
||||
геометрия FAT32 и базовые проверки BPB;
|
||||
- MKDIR/MKFILE, короткие и длинные имена, коллизии коротких имён,
|
||||
поиск без учёта регистра и отказ от создания дубликата;
|
||||
- FSInfo, упаковка даты/времени RTC в BCD и двоичном режиме;
|
||||
- значения регистров DMA и последовательности команд инициализации
|
||||
SDHC, SDv2 SDSC, legacy SD и MMC, включая повторную инициализацию
|
||||
и исчерпание попыток при постоянно занятой карте;
|
||||
- распаковка тела Z80-кодом, FENTRY, переименование, удаление,
|
||||
освобождение цепочки и сохранение IX в обёртке MKFILE.
|
||||
|
||||
Границы проверки: секторный SPI/DMA-обмен подменяется блоковым
|
||||
устройством в памяти. В отдельных тестах инициализации, DMA-регистров
|
||||
и RTC используются модели портов. Электрические характеристики,
|
||||
аппаратный тайминг, прерывания ZiFi и поведение при отключении питания
|
||||
этими тестами не проверяются. Тесты не доказывают транзакционность
|
||||
операций FAT или защиту от всех вариантов повреждённого тома.
|
||||
Reference in New Issue
Block a user