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

77 lines
2.4 KiB
Markdown
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.
# Examples tour
The release ships with 27 example programs in `examples/`. Every one of them
is a self-contained demo with comments — they were used as regression tests
during development.
## Build any example
```sh
cd examples/hello
make
```
That produces `hello.exe` next to `hello.c` using `examples/example.mk`.
## Categories
### Hello world / basics
* **`hello`** — stdio + conio Turbo-C-style colours
* **`argv`** — argv parsing in crt0
* **`conio`** — conio API smoke test
* **`attrprob`** — probe Sprinter text-attribute byte layout
### File I/O
* **`cat`** — read & print TEST.TXT
* **`seek`** — 32-bit lseek over a 100 KB file
* **`ls`** — directory listing via ffirst/fnext
* **`filetest`** — FILE* streams (`fopen`/`fread`/`fwrite`/`fclose`)
* **`stattest`** — `stat`/`fstat` on files and directories
* **`openenv`** — open() flags + environment variables
### Memory & banking
* **`malloc`** — heap stress test (200+ allocations)
* **`mem_test`** — page allocator + `bank_read`/`bank_write`
* **`banked`** — banked code in W3 (huge mode)
* **`bankedbg`** — banked code in W1 (big mode)
* **`banklocl`** — bank-local static data and BSS
### Mouse
* **`mouse`** — driver in text mode
* **`gfx_mous`** — mouse with custom bitmap cursor in graphics mode
### Graphics
* **`gfx_demo`** — 320×256×256: lines, rectangles, fill via accelerator
* **`gfx_d16`** — 640×256×16: same primitives in 16-color mode
* **`gfx_text`** — bitmap-font text on graphics screen
### Misc
* **`errno`** — errno / strerror / perror
* **`timedir`** — date/time + directory listing
* **`ptime`** — POSIX time API (time / localtime / mktime)
* **`strtest`** — `<string.h>` test (from SDCC's z80.lib)
* **`stdlib`** — `<stdlib.h>` test (qsort / rand / strtol / etc.)
* **`assrtest`** — assert()
* **`rt_test`** — runtime helpers (sleep, setjmp, atexit)
## Example.mk
Every example uses `examples/example.mk`. A minimal Makefile looks like:
```makefile
PROJ_ROOT := $(abspath $(CURDIR)/../..)
EXAMPLE := my_app
include $(PROJ_ROOT)/examples/example.mk
```
Optional knobs (set before `include`):
```makefile
MEMORY := huge # default tiny
STACK_SIZE := 4096 # default ~1278
EXTRA_SRCS := helper.c util.c # extra .c files in same dir
EXTRA_FLAGS := --bank 1=engine.c --debug # pass-through to sprinter-cc
```
Use this template for your own programs.