Volkov: добавить Sprinter Commander

Реализовать двухпанельный Commander от платформенного PoC до этапов P6-P20: EMM-каталог, сортировку и выбор, операции с файлами и деревьями, транзакционное копирование, метаданные, политику конфликтов и предварительную проверку свободного места.

Добавить проектную документацию, HDD/MAME-сценарии и проверенные артефакты. Расширить libc операцией bank_write_page, исправлением режима O_RDONLY и связанными регрессионными проверками.
This commit is contained in:
2026-09-10 10:45:30 +03:00
parent 05bcd8197e
commit 8e389c03f8
870 changed files with 21310 additions and 25 deletions
+32
View File
@@ -0,0 +1,32 @@
/*
* bank_write_page — записать диапазон EMM-страницы в УЖЕ ОТКРЫТЫЙ файл.
*
* Это симметричная операция к bank_read_page(): вызывающий владеет fd,
* позицией файла и политикой create/temp/rename, а функция только временно
* отображает физическую страницу в W3 и передаёт её диапазон ESTEX WRITE.
* W3 восстанавливается до возврата на всех путях.
*
* ABI: обычный SDCC __sdcccall(1). Возврат — записанный размер либо
* -1 с errno; допустимый диапазон страницы проверяется до переключения W3.
*/
#include <unistd.h>
#include <errno.h>
#include <sprinter.h>
#include <sprinter_mem.h>
int bank_write_page(int fd, uint8_t phys_page, uint16_t off, uint16_t size)
{
uint8_t saved;
int n;
if (off > 0x3FFFu || size > (uint16_t)(0x4000u - off)) {
errno = EINVAL;
return -1;
}
saved = _io_page_w3;
sprinter_page_w3(phys_page);
n = write(fd, (const void *)(0xC000u + off), size);
sprinter_page_w3(saved);
return n;
}