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:
2026-06-03 16:13:21 +03:00
parent f542608b3f
commit c71e249a4e
404 changed files with 75155 additions and 58 deletions
+180
View File
@@ -0,0 +1,180 @@
;[]=======================================================================[]
;
; Draw text string to the screen 640x256 in 16colors
; Input:
; hl - pointer to the C string (0 - end string)
; de - x position
; bc - y position
; a - background and foreground color
; d7 - d4 background color (0-15)
; d3 - d0 foreground color (0-15)
;
; Output:
; hl - pointer to the next byte behind string
;
; Destroy registers:
; 'hl, 'de, 'bc
TextOut:
push iy
ld yl, c ; y position
ld b, a ; store colors
in a, (YPORT) ; store Y_PORT
push af
in a, (PAGE1)
ld yh, a ; store PAGE1
call PreparePrintColors
push de ; x position
exx
pop bc
srl b
rr c ; start address for x position
set 6, b ; print address start from 0x4000
ld hl, BackgroundBuffer ; background buffer
ld de, ForegroundBuffer ; foreground buffer
exx
ld c, l ; pointer to the string
ld b, h
; now:
; bc - pointer to the C string
; 'hl - pointer to the background buffer
; 'de - pointer to the foreground buffer
; 'bc - x position
; yl - y position
di ; disable interrupts
ld d, d ; set acceleration work lenght
ld a, 0x08
ld b, b
ld a, (bc) ; test on null string
inc bc
or a
jr z, .exit
.loop1:
ld l, a ; font is always aligned to 256 bytes
ld h, FONT_BASE/256 ; pointer to the specialy font
push bc
ld b, (hl) ; character size x
inc h
ld e, (hl)
inc h
ld a, (hl) ; offset to character image
add a, FONT_BASE/256
ld d, a
ld hl, 0x0008 ; line lenght in character image
ex de, hl
ld a, VPAGE
out (PAGE1), a ; set video memory to 0x4000-0x8000
.loop2:
ld l, l ; linear load
ld a, (hl) ; read 8 bytes to accel memory
ld b, b
exx
ld a, yl
out (YPORT), a ; set y position out
ld l, l ; linear or
or (hl) ; with BackgroundBuffer
ld b, b
ex de, hl
ld l, l ; linear exclusive or
xor (hl) ; with ForegroundBuffer
ld a, a ; vertical write
ld (bc), a ; write 8 bytes from accel memory to vram
ld b, b
ex de, hl
inc bc ; next vertical line in video ram
exx
add hl, de ; next line in character image
djnz .loop2
pop bc
ld a, yh
out (PAGE1), a
ld a, (bc)
inc bc
or a
jr nz, .loop1 ; end string ?
.exit:
ei ; enable interrupts
ld l, c ; return pointer to the end string
ld h, b
pop af
out (YPORT), a ; restore YPORT
pop iy
ret
;[]=======================================================================[]
;
; Prepare text colors for accel text out
; Input:
; b - background and foreground color
; d7 - d4 background color (0-15)
; d3 - d0 foreground color (0-15)
;
; Destroy registers:
; a, bc, 'hl
PreparePrintColors:
ld a, b
.prev_color: cp 0x00 ; color is prepared ?
ret z
ld (.prev_color + 1), a
and 0x0F ; foreground color
ld c, a
rlca
rlca
rlca
rlca
or c
exx
cpl
ld hl, ForegroundBuffer ; foreground buffer
ld (hl), a
inc hl
ld (hl), a
inc hl
ld (hl), a
inc hl
ld (hl), a
inc hl
ld (hl), a
inc hl
ld (hl), a
inc hl
ld (hl), a
inc hl
ld (hl), a
exx
ld a, b
and 0xF0 ; background color
ld b, a
rrca
rrca
rrca
rrca
or b
exx
xor (hl) ; exclusive or with foreground color
ld hl, BackgroundBuffer ; background buffer
ld (hl), a
inc hl
ld (hl), a
inc hl
ld (hl), a
inc hl
ld (hl), a
inc hl
ld (hl), a
inc hl
ld (hl), a
inc hl
ld (hl), a
inc hl
ld (hl), a
exx
ret
ForegroundBuffer:
times 8 db 0
BackgroundBuffer:
times 8 db 0