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>
This commit is contained in:
Executable
+132
@@ -0,0 +1,132 @@
|
||||
#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;
|
||||
Reference in New Issue
Block a user