/* * bank_save_file — записать диапазон физической EMM-страницы в файл. * * Файл создаётся заново (O_CREAT|O_TRUNC), данные передаются одним WRITE. * W3 восстанавливается до close(), поэтому функцию можно вызывать из * банкового кода huge. Возврат: записанный размер либо -1 + errno. */ #include #include #include #include #include int bank_save_file(uint8_t phys_page, uint16_t off, const char *path, uint16_t size) { uint8_t saved; int fd, n; if (off > 0x3FFFu || size > (uint16_t)(0x4000u - off)) { errno=EINVAL; return -1; } fd = open(path, O_WRONLY | O_CREAT | O_TRUNC); if (fd < 0) return -1; saved = _io_page_w3; sprinter_page_w3(phys_page); n = write(fd, (const void *)(0xC000u + off), size); sprinter_page_w3(saved); if (close(fd) != 0) return -1; return n; }