Files
snark13 c71e249a4e Add full compiler toolchain, libc, examples and reference docs
First substantive commit: the entire Sprinter C compiler tree on top of
the bare README+gitignore initial commit.

What's in here:
  bin/sprinter-cc        — driver script invoking SDCC + linker + mkexe
  libc/                  — Sprinter-specific libc layer over ESTEX/BIOS
                           (conio, gfx, io, mem, stdio + headers)
  runtime/               — crt0 variants (default/small/banked/minimal)
                           + heap + bank trampolines
  toolchain/             — mkexe (SprintEXE packer, C + tests)
  examples/              — 30 demo programs (gfx, file I/O, env, time, …)
  lib/Makefile           — builds the libc archive (sprinter.lib)
  docs/                  — converted Sprinter manuals + asm reference samples
  third_party/           — solid-c reference compiler dump + sdcc setup script
  release_docs/          — packaging / release notes

gitignore overhaul:
  • Drop dangerous blanket patterns: *.asm (would hide docs/samples/*.asm)
    and *.exe (case-insensitive match was hiding third_party/solid-c/*.EXE
    on macOS APFS).  Replaced with examples/*/*.{asm,exe,…} and lib/*.lib.
  • Restore tracking of toolchain/mkexe/tests/{one,big}.bin — those are
    INPUT fixtures, not build outputs.
  • Collapse the duplicated SDCC/C/Sdcc sections into one section per
    concern (build outputs / vendored / OS-junk).
  • Add .sprinter-cc-*/, build/ (catches lib/build/ too), .claude/.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-03 16:13:21 +03:00

132 lines
4.1 KiB
C
Executable File

#pragma disable_warning 85
//определения типов переменных
typedef unsigned char u8;
typedef signed char i8;
typedef unsigned int u16;
typedef signed int i16;
typedef unsigned long u32;
typedef signed long i32;
#define TRUE 1
#define FALSE 0
//флаги кнопок джойстика
#define JOY_RIGHT 0x01
#define JOY_LEFT 0x02
#define JOY_DOWN 0x04
#define JOY_UP 0x08
#define JOY_FIRE 0x10
#define JOY_START 0x20
#define JOY_ESC 0x80
//крайние и средний уровни яркости
#define BRIGHT_MIN 0
#define BRIGHT_MID 15
#define BRIGHT_MAX 30
//заполнение памяти заданным значением
void memset(void* m,u8 b,u16 len) __naked;
//копирование памяти, области не должны пересекаться
void memcpy(void* d,void* s,u16 len) __naked;
//генерация 16-битного псевдослучайного числа
u16 rand16(void) __naked;
//установка цвета бордюра, 0..7
void border(u8 n) __naked;
// ожидание конца кадра
void vsync(void) __naked;
//опрос kempston джойстика и курсорных клавиш с пробелом
//для опроса кнопок есть константы JOY_
u8 joystick(void) __naked;
//установка яркости экрана BRIGHT_MIN..BRIGHT_MID..BRIGHT_MAX (0..15..30)
//от полностью чёрного экрана до нормальной яркости до полностью белого экрана
void pal_bright(u8 bright) __naked;
void pal_bright16(u8 subpal, u8 bright) __naked;
//выбор предопределённой палитры по номеру
void pal_select(u8 id) __naked;
//копирование текущей палитры в массив
void pal_copy(u8 start, u8 count, u8* pal) __naked;
//установка всех цветов в палитре значениями из массива
void pal_custom(u8 start, u8 count, u8* pal) __naked;
//отрисовка тайла
void draw_tile(u8 x,u8 y,u16 tile) __naked;
//отрисовка изображения
void draw_image(u8 x) __naked;
//очистка теневого экрана нужным цветом 0..255
void clear_screen(u8 color) __naked;
//переключение экранов, теневой становится видимым
//ожидание кадра выполняется автоматически, vsync перед вызовом этой функции не нужен
//функция также обновляет спрайты, если они включены
void swap_screen(void) __naked;
void sprites_clip(u8 clip) __naked;
//запуск системы вывода спрайтов
//на видимом экране должно быть изображение, поверх которого будут выведены спрайты
//эта функция выполняется медленно, происходит копирование большого объёма данных
//после того как спрайты разрешены, они будут автоматически выводиться при swap_screen
void sprites_start(void) __naked;
//останов системы вывода спрайтов
void sprites_stop(void) __naked;
//добавить спрайт в список вывода
//x координата 0..240
//y координата 0..176
//spr номер изображения спрайта
void add_sprite(u8 x,u8 y,u16 spr) __naked;
// конец списка спрайтов
void end_sprite(void) __naked;
//время с момента запуска программы в кадрах
u32 time(void) __naked;
//задержка, значение в кадрах (1/50 секунды)
void delay(u16 time) __naked;
void wyz_play_music (unsigned char song_number) __naked;
void wyz_play_sound (unsigned char fx_number, unsigned char fx_channel) __naked;
void wyz_stop_sound (void) __naked;
//void fm_sound_on (void) __naked;
//u8 tfm_stat(void) __naked;
// выход в DSS
void quit(void) __naked;