Volkov: добавить Sprinter Commander
Реализовать двухпанельный Commander от платформенного PoC до этапов P6-P20: EMM-каталог, сортировку и выбор, операции с файлами и деревьями, транзакционное копирование, метаданные, политику конфликтов и предварительную проверку свободного места. Добавить проектную документацию, HDD/MAME-сценарии и проверенные артефакты. Расширить libc операцией bank_write_page, исправлением режима O_RDONLY и связанными регрессионными проверками.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user