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
+156
View File
@@ -0,0 +1,156 @@
;[]=======================================================================[]
;
; fn_load.z80 -- primary loader of Flex Navigator v1.10
;
; Copyright (C) 2000 Anton Enin
;
; This program should be compiled using z80asm
; http://www.zxasm.narod.ru/
;
; z80asm.exe -f bin main.z80 -o a_print.exe
;
;[]=======================================================================[]
org 0x80EA
section .text
EXEhead: db "EXE" ; exe header
db 0 ; +3
dw EntryExec-EXEhead
dw 0x0000 ; +4
dw EXEend-EntryExec ; +8
dw 0, 0 ; +10
dw 0 ; +14
dw EntryExec ; +16
dw EntryExec
dw 0x80FF
;[]=======================================================================[]
; input:
; IX - pointer from DOS
EntryExec: DI
LD A, (IX-0x03) ; current file handle
LD (.hFile), A ; save
LD HL, .copyright_str
LD C, 0x5C ; print text
RST 0x10
LD C, 0x00
RST 0x10
LD A, D
OR A
JR NZ, .next1
LD HL, .incor_dos_str
LD C, 0x5C ; print text
RST 0x10
LD A, (.hFile)
LD C, 0x12
RST 0x10 ; close current file
LD BC, 0xFF41
RST 0x10 ; exit
.next1
LD BC, 0x063D
RST 0x10 ; need 6 memory pages
JR NC, .next2 ; CY - not enough memory
LD HL, .no_memory_str
LD C, 0x5C ; print text
RST 0x10
LD BC, 0xFF41
RST 0x10 ; exit
.next2
LD (.hMem), A ; memory handle
LD HL, .Buffer
LD C, 0xC5
RST 0x08 ; get memory pages list
LD A, (.MPg) ; set pages from 0xC000
OUT (0xE2), A
LD HL, 0x8500 ;FNMAIN
LD DE, end1-0x8500
LD A, (.hFile)
LD C, 0x13
RST 0x10
JP C, .disk_error
LD A, (.FPg)
OUT (0xE2), A
LD HL, 0xC000 ;FNFUNCT
LD DE, end2-0x4000
LD A, (.hFile)
LD C, 0x13
RST 0x10
JP C, .disk_error
LD A, (.VPg) ;FNVIEW
OUT (0xE2), A
LD HL, 0xC000
LD DE, 0x19A6
LD A, (.hFile)
LD C, 0x13
RST 0x10
JP C, .disk_error
LD A, (.EPg) ;FNEDIT
OUT (0xE2), A
LD HL, 0xC000
LD DE, 0x273B
LD A, (.hFile)
LD C, 0x13
RST 0x10
JP C, .disk_error
LD A, (.HPg) ;FNHELP
OUT (0xE2), A
LD HL, 0xC000
LD DE, end3-0x4000
LD A, (.hFile)
LD C, 0x13
RST 0x10
JP C, .disk_error
LD A, (.FNPg) ;FNFONT
OUT (0xE2), A
LD HL, 0xC000
LD DE, end4-0x4000
LD A, (.hFile)
LD C, 0x13
RST 0x10
JP C, .disk_error
LD A, (.hFile)
LD C, 0x12
RST 0x10 ;close current file
LD A, (.MPg)
OUT (0xE2), A
LD A, (.hMem)
LD (.FNIndef), A
LD HL, .FPg
LD DE, .FunctPg
LD BC, 0x0005
LDIR
JP EntryPoint
.disk_error:
LD A, (.hMem) ; free memory
LD C, 0x3E
RST 0x10
LD A, (.hFile)
LD C, 0x12
RST 0x10 ; close current file
LD HL, .load_err_str
LD C, 0x5C ; print text
RST 0x10
LD BC, 0xFF41
RST 10h ; exit
.hFile db 0x00
.hMem db 0x00
.Buffer
.MPg db 0x00
.FPg db 0x00
.VPg db 0x00
.EPg db 0x00
.HPg db 0x00
.FNPg db 0x00
db 0x00
.copyright_str: db 0x0D, 0x0A
db "The Flex Navigator, ver 1.10, Copyright (C) 1999 by Enin Anton, St-Petersburg.", 0x0D, 0x0A
db "All rights reserved.", 0x0D, 0x0A, 0x00
.incor_dos_str: db "Incorrect DOS version, need DOS 1.00 or high.", 0x0D, 0x0A, 0x00
.no_memory_str: db "Not enough memory to load program.", 0x0D, 0x0A, 0x00
.load_err_str: db "Disk loading error.", 0x0D, 0x0A, 0x00
EXEend: