Files
Sprinter-SDCC/libc/mem/bank_write_page.c
T
snark13 8e389c03f8 Volkov: добавить Sprinter Commander
Реализовать двухпанельный Commander от платформенного PoC до этапов P6-P20: EMM-каталог, сортировку и выбор, операции с файлами и деревьями, транзакционное копирование, метаданные, политику конфликтов и предварительную проверку свободного места.

Добавить проектную документацию, HDD/MAME-сценарии и проверенные артефакты. Расширить libc операцией bank_write_page, исправлением режима O_RDONLY и связанными регрессионными проверками.
2026-09-10 10:45:30 +03:00

33 lines
1.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* 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;
}