Files
snark13 60373930fb libc: Solid-C совместимость (П3) + rename/isatty (П4); scanf-семейство
- <dos.h>: getdate/gettime/setdate/settime (структуры Turbo-C, обёртки
  над getdatetime), getdisk/setdisk (ESTEX $02/$01), absread/abswrite
  (BIOS $55/$56, rst 8 — номера найдены в solid-c DOS.ASM; сектор 0 =
  boot логического диска)
- scanf/fscanf/sscanf: своё C-ядро _scanf_core (%d %u %x %o %c %s,
  модификатор l, ширина, подавление '*', %%); в SDCC z80 scanf нет,
  asm solid-c не портируем из-за чужого ABI; 22 хост-теста ядра
- хвост П2: fdopen/freopen/fclosall/fgetpos/fsetpos поверх таблицы
  FILE; парсер режима и выдача слота вынесены в _file_mode/_file_slot
- rename() — ESTEX RENAME $10; isatty(fd) = fd <= 0 (tty только
  псевдо-fd 0/-1/-2: из CLI DSS манипуляторы идут с 1 — verified,
  fd 1 не резерв, под Flex Navigator его держит навигатор)
- errno.h: Solid-C имена ошибок (EZERO/EINVFNC/ENOFILE/...) как алиасы
- <sprinter_solid.h> — зонтичный заголовок для портирования;
  ltell/_setargv в sprinter_compat.h; div/ldiv — из SDCC (проверено)
- tests/solidt — smoke всех П3/П4 API, зелёный в MAME (вкл. absread
  boot-сектора с сигнатурой 55AA)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 16:35:58 +03:00

50 lines
2.0 KiB
C
Raw Permalink 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.
/*
* dos.h — DOS-подобный слой Solid-C поверх ESTEX/BIOS: диски,
* дата/время в Turbo-C-структурах, абсолютное чтение/запись секторов.
*
* Структуры совместимы с Solid-C DOS.H (и Turbo C):
* struct time { ti_min, ti_hour, ti_hund, ti_sec }
* struct date { da_year, da_day, da_mon (1 = январь) }
* ti_hund (сотые секунды) не поддержан RTC Sprinter — всегда 0.
*/
#ifndef DOS_H
#define DOS_H
#include <stdint.h>
struct time {
unsigned char ti_min; /* минуты */
unsigned char ti_hour; /* часы */
unsigned char ti_hund; /* сотые доли секунды (не используются) */
unsigned char ti_sec; /* секунды */
};
struct date {
int da_year; /* год (полный, напр. 2026) */
char da_day; /* день месяца */
char da_mon; /* месяц (1 = январь) */
};
/* Чтение/установка даты и времени (обёртки над getdatetime/
* setdatetime — set* делает read-modify-write полного datetime_t). */
void getdate(struct date *d);
int setdate(const struct date *d);
void gettime(struct time *t);
int settime(const struct time *t);
/* Текущий диск: 0=A, 1=B, ... setdisk возвращает число дисков или
* -1 + errno. */
uint8_t getdisk(void);
int setdisk(uint8_t drive);
/* Абсолютное чтение/запись секторов ЛОГИЧЕСКОГО диска (BIOS $55/$56,
* rst 8; сектор 0 = boot-сектор, с 1 — первая FAT и т.д.).
* Возврат 0 или -1 + errno (EREAD/EWRITE, как у Solid-C).
* Буфер должен лежать в #4000-#BFFF (требование BIOS). */
int absread (uint8_t disk, uint16_t nsect, uint8_t count, void *buffer);
int abswrite(uint8_t disk, uint16_t nsect, uint8_t count,
const void *buffer);
#endif