c71e249a4e
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>
132 lines
4.1 KiB
C
Executable File
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; |