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
+566
View File
@@ -0,0 +1,566 @@
; ‚室ï騥 ä㭪樨:
;
; ms_init (initMouse)
; ms_show (showMouse)
; ms_hide (hideMouse)
; ms_stat (getStatMouse)
; msgstat (getGStatMouse)
; ms_spos (setPosMouse)
; ms_ybnd (yLimMouse)
; ms_xbnd (xLimMouse)
; ms_scur (setCursMouse)
; ms_tcur (setTxtMouse)
; ms_gcur (getCursMouse)
; ms_gsen (getSensMouse)
; ms_ssen (setSensMouse)
; ms_hard (hardMouse)
; ms_vmod (vmodeMouse)
; ms_ref (refreshMouse)
;
MODULE msinit
;
; "mouse.h"
; Initialization the mouse driver.
; Returns 0 if mouse installed, -1 if not.
;
; char initMouse(void)
;
ms_init_::
ld c,0
rst 30h
ld a,0 ; Ok
ret nc
dec a ; error
ret
ENDMODULE
MODULE msshow
;
; "mouse.h"
; ”ã­ªæ¨ï ¢ë¢®¤¨â ­  íªà ­ ªãàá®à ¬ëè¨, ®âá«¥¦¨¢ ¥â
; ¢á¥ ¯¥à¥¬¥é¥­¨ï ªãàá®à  ¨ ¯¥à¥à¨á®¢ë¢ ¥â ¥£®.
;
; ਠ®è¨¡ª¥, ¢®§¢à é ¥âáï §­ ç¥­¨¥ -1 ¨ errno
; ᮤ¥à¦¨â ­®¬¥à ®è¨¡ª¨.
;
; char showMouse(void)
;
ms_show_::
ld c,1
rst 30h
ld (errno_##),a
ld a,0 ; Ok
ret nc
dec a ; error
ret
ENDMODULE
MODULE mshide
;
; "mouse.h"
; ”ã­ªæ¨ï áâ¨à ¥â ªãàá®à ¬ëè¨ á íªà ­ , ­® ¤à ©¢¥à ¯à®¤®«¦ ¥â
; ®âá«¥¦¨¢ ­¨¥ ¯¥à¥¬¥é¥­¨ï ¬ëè¨ ¨ ­ ¦ â¨¥ ­  ª­®¯ª¨.
;
; ਠ®è¨¡ª¥, ¢®§¢à é ¥âáï §­ ç¥­¨¥ -1 ¨ errno
; ᮤ¥à¦¨â ­®¬¥à ®è¨¡ª¨.
;
; char hideMouse(void)
;
ms_hide_::
ld c,2
rst 30h
ld (errno_##),a
ld a,0 ; Ok
ret nc
dec a ; error
ret
ENDMODULE
MODULE msstat
;
; "mouse.h"
; —⥭¨¥ á®áâ®ï­¨ï ¬ëè¨.
; ”ã­ªæ¨ï ¢®§¢à é ¥â ⥪ã騥 ⥪áâ®¢ë¥ ª®®à¤¨­ âë ªãàá®à  ¬ëè¨
; ¨ á®áâ®ï­¨¥ ¥¥ ª­®¯®ª.
; ”ã­ªæ¨ï ¢®§¢à é ¥â 㪠§ â¥«ì ­  áâàãªâãàã MSSTAT, ®¯à¥¤¥«¥­­ãî
; ¢ "mouse.h".
; ਠ®è¨¡ª¥, ¢®§¢à é ¥âáï §­ ç¥­¨¥ -1 (0FFFFh) ¨ errno ᮤ¥à¦¨â
; ­®¬¥à ®è¨¡ª¨.
;
; ¢ë室­ë¥ ¤ ­­ë¥:
; A - á®áâ®ï­¨¥ ª­®¯®ª
; 0 bit - «¥¢ ï
; 1 bit - ¯à ¢ ï
; HL - Y/X ⥪áâ. ª®®à¤¨­ âë
;
; MSSTAT *getStatMouse()
;
ms_stat_::
ld c,3 ; ¯®«ãç¨âì ª®®à¤. ¬ë誨
rst 30h
jr c,@1
ld (button),a
srl h
rr l
srl h
rr l
srl l
ld a,e ; Y ª®®à¤¨­ â  (0-255)
rra
rra
rra
and 1Fh
ld h,a ; hl = Y/X ª®®à¤. ¢ §­ ª®¬¥áâ å
ld (x),hl
ld hl,button ; Ok
ret
;
@1: ld (errno_##),a
ld hl,-1 ; error
ret
dseg
button: db 0
x: dw 0 ; Y/X ⥪áâ. ª®®à¤¨­ âë
ENDMODULE
MODULE msgstat
;
; "mouse.h"
; —⥭¨¥ á®áâ®ï­¨ï ¬ëè¨.
; ”ã­ªæ¨ï ¢®§¢à é ¥â ⥪ã騥 £à ä¨ç¥áª¨¥ ª®®à¤¨­ âë ªãàá®à  ¬ëè¨
; ¨ á®áâ®ï­¨¥ ¥¥ ª­®¯®ª.
; ”ã­ªæ¨ï ¢®§¢à é ¥â 㪠§ â¥«ì ­  áâàãªâãàã MSGSTAT, ®¯à¥¤¥«¥­­ãî
; ¢ "mouse.h".
; ਠ®è¨¡ª¥, ¢®§¢à é ¥âáï §­ ç¥­¨¥ -1 (0FFFFh) ¨ errno ᮤ¥à¦¨â
; ­®¬¥à ®è¨¡ª¨.
;
; ¢ë室­ë¥ ¤ ­­ë¥:
; A - á®áâ®ï­¨¥ ª­®¯®ª
; 0 bit - «¥¢ ï
; 1 bit - ¯à ¢ ï
; HL - x-ª®®à¤¨­ â 
; DE - y-ª®®à¤¨­ â 
;
; MSGSTAT *getGStatMouse()
;
msgstat_::
ld c,3
rst 30h
ld (button),a
ld (errno_##),a
ld (x),hl
ld (y),de
ld hl,button ; Ok
ret nc
ld hl,-1 ; error
ret
dseg
button: db 0
x: dw 0
y: dw 0
ENDMODULE
MODULE msspos
;
; "mouse.h"
; “áâ ­®¢ª  ⥪á⮢ëå ª®®à¤¨­ â ªãàá®à  ¬ëè¨.
; ”ã­ªæ¨ï ¯¥à¥¬¥é ¥â ªãàá®à ¬ëè¨ ¢ § ¤ ­­ë¥ ª®®à¤¨­ âë.
;
; ਠ®è¨¡ª¥, ¢®§¢à é ¥âáï §­ ç¥­¨¥ -1 ¨ errno ᮤ¥à¦¨â
; ­®¬¥à ®è¨¡ª¨.
;
; ¢å®¤­ë¥ ¤ ­­ë¥:
; HL - ª®«®­ª 
; DE - áâப 
;
; char setPosMouse(int col, int line)
;
ms_spos_::
sla l ; *2
rl h
sla l
rl h ; hl = X pos
ld a,e
and 1Fh
rla
rla
rla
ld e,a ; de = Y pos
ld c,4
rst 30h
ld (errno_##),a
ld a,0 ; Ok
ret nc
dec a ; error
ret
ENDMODULE
MODULE mssgpos
;
; "mouse.h"
; “áâ ­®¢ª  £à ä¨ç¥áª¨å ª®®à¤¨­ â ªãàá®à  ¬ëè¨.
; ”ã­ªæ¨ï ¯¥à¥¬¥é ¥â ªãàá®à ¬ëè¨ ¢ § ¤ ­­ë¥ ª®®à¤¨­ âë.
;
; ਠ®è¨¡ª¥, ¢®§¢à é ¥âáï §­ ç¥­¨¥ -1 ¨ errno ᮤ¥à¦¨â
; ­®¬¥à ®è¨¡ª¨.
;
; ¢å®¤­ë¥ ¤ ­­ë¥:
; HL - x-ª®®à¤¨­ â 
; DE - y-ª®®à¤¨­ â 
;
; char setGPosMouse(int x, int y)
;
mssgpos_::
ld c,4
rst 30h
ld (errno_##),a
ld a,0 ; Ok
ret nc
dec a ; error
ret
ENDMODULE
MODULE msybnd
;
; "mouse.h"
; ‡ ¤ ­¨¥ ¢¥à⨪ «ì­ëå £à ­¨æ ¯¥à¥¬¥é¥­¨ï ªãàá®à .
; ”ã­ªæ¨ï § ¤ ¥â ¢¥àå­îî ¬¨­¨¬ «ì­ãî ¨ ­¨¦­îî ¬ ªá¨¬ «ì­ãî ª®®à¤¨­ âë,
; ¢ ª®â®àëå ¬®¦¥â ¯¥à¥¬¥é âìáï ªãàá®à ¬ëè¨ ¯® ¢¥à⨪ «¨.
;
; ਠ®è¨¡ª¥, ¢®§¢à é ¥âáï §­ ç¥­¨¥ -1 ¨ errno ᮤ¥à¦¨â ­®¬¥à ®è¨¡ª¨.
;
; ¢å®¤­ë¥ ¤ ­­ë¥:
; HL - y-¬¨­¨¬ «ì­ ï
; DE - y-¬ ªá¨¬ «ì­ ï
;
; char yLimMouse(int miny, int maxy)
;
ms_ybnd_::
ld c,7
rst 30h
ld (errno_##),a
ld a,0 ; Ok
ret nc
dec a ; error
ret
ENDMODULE
MODULE msxbnd
;
; "mouse.h"
; ‡ ¤ ­¨¥ £®à¨§®­â «ì­ëå £à ­¨æ ¯¥à¥¬¥é¥­¨ï ªãàá®à .
; ”ã­ªæ¨ï § ¤ ¥â «¥¢ãî ¬¨­¨¬ «ì­ãî ¨ ¯à ¢ãî ¬ ªá¨¬ «ì­ãî ª®®à¤¨­ âë,
; ¢ ª®â®àëå ¬®¦¥â ¯¥à¥¬¥é âìáï ªãàá®à ¬ëè¨ ¯® £®à¨§®­â «¨.
;
; ਠ®è¨¡ª¥, ¢®§¢à é ¥âáï §­ ç¥­¨¥ -1 ¨ errno ᮤ¥à¦¨â ­®¬¥à ®è¨¡ª¨.
;
; ¢å®¤­ë¥ ¤ ­­ë¥:
; HL - x-¬¨­¨¬ «ì­ ï
; DE - x-¬ ªá¨¬ «ì­ ï
;
; char xLimMouse(uint minx, uint maxx)
;
ms_xbnd_::
ld c,8
rst 30h
ld (errno_##),a
ld a,0 ; Ok
ret nc
dec a ; error
ret
ENDMODULE
MODULE msscur
;
; "mouse.h"
; ‡ £à㧪  ¨§®¡à ¦¥­¨ï ªãàá®à  ¬ëè¨.
; ”ã­ªæ¨ï § £à㦠¥â ­®¢®¥ ¨§®¡à ¦¥­¨¥ ªãàá®à  ¬ëè¨ ¢ ¤à ©¢¥à
; ¨ § ¤ ¥â  ªâ¨¢­ãî â®çªã ¨§®¡à ¦¥­¨ï.
; ¥à¥¤ ¢ë§®¢®¬ ä㭪樨, ¤®«¦­  ¡ëâì § ¯®«­¥­  áâàãªâãà 
; MSCURS, ®¯à¥¤¥«¥­­ ï ¢ "mouse.h".
;
; ਠ®è¨¡ª¥, ¢®§¢à é ¥âáï §­ ç¥­¨¥ -1 ¨ errno ᮤ¥à¦¨â ­®¬¥à
; ®è¨¡ª¨.
;
; ¢å®¤­ë¥ ¤ ­­ë¥:
; H - ¢ëá®â  ªãàá®à 
; L - è¨à¨­  ªãàá®à 
; D - Y  ªâ¨¢­ ï â®çª 
; E - X  ªâ¨¢­ ï â®çª 
; IX - ¨§®¡à ¦¥­¨¥ ªãàá®à 
;
; char setCursMouse(MSCURS *p)
;
ms_scur_::
push ix
ld c,(hl) ; width
inc hl
ld b,(hl) ; high
inc hl
ld e,(hl) ; xpoint
inc hl
ld d,(hl) ; ypoint
inc hl
ld a,(hl) ; *buffer
ld lx,a
inc hl
ld a,(hl)
ld hx,a
ld l,c
ld h,b
ld bc,9
rst 30h
pop ix
ld (errno_##),a
ld a,0 ; Ok
ret nc
dec a ; error
ret
ENDMODULE
MODULE mstcur
;
; "mouse.h"
; “áâ ­®¢ª  ªãàá®à  ¬ëè¨ ¢ ⥪á⮢®¬ ०¨¬¥.
; ”ã­ªæ¨ï ãáâ ­ ¢«¨¢ ¥â ᨬ¢®« ¨  âਡãâ ªãàá®à  ¬ëè¨
; ¤«ï ⥪á⮢®£® ०¨¬ .
; ਠ®è¨¡ª¥, ¢®§¢à é ¥âáï §­ ç¥­¨¥ -1 ¨ errno ᮤ¥à¦¨â
; ­®¬¥à ®è¨¡ª¨.
;
; ¢å®¤­ë¥ ¤ ­­ë¥:
; E - XOR attribut mask
; D - AND attribut mask
; L - XOR simbol mask
; H - AND simbol mask
;
; char setTxtMouse(MSTXT *p)
;
ms_tcur_::
ld e,(hl) ; XOR attribut mask
inc hl
ld d,(hl) ; AND attribut mask
inc hl
ld a,(hl) ; XOR simbol mask
inc hl
ld h,(hl) ; AND simbol mask
ld l,a
ld bc,0Ah
rst 30h
ld (errno_##),a
ld a,0 ; Ok
ret nc
dec a ; error
ret
ENDMODULE
MODULE msgcur
;
; "mouse.h"
; ®«ã祭¨¥ ¨§®¡à ¦¥­¨ï ªãàá®à  ¨§ ¤à ©¢¥à  ¬ëè¨.
; ”ã­ªæ¨ï ¢®§¢à é ¥â 㪠§ â¥«ì ­  § ¯®«­¥­­ãî áâàãªâãàã MSCURS,
; ®¯à¥¤¥«¥­­ãî ¢ "mouse.h".
; ਠ®è¨¡ª¥, ¢®§¢à é ¥âáï §­ ç¥­¨¥ -1 (0FFFFh) ¨ errno ᮤ¥à¦¨â
; ­®¬¥à ®è¨¡ª¨.
;
; ¢å®¤­ë¥ ¤ ­­ë¥:
; IX - ¡ãä¥à ¤«ï ¨§®¡à ¦¥­¨ï ªãàá®à 
;
; ¢ë室­ë¥ ¤ ­­ë¥:
; H - ¢ëá®â  ªãàá®à 
; L - è¨à¨­  ªãàá®à 
; D - Y  ªâ¨¢­ ï â®çª 
; E - X  ªâ¨¢­ ï â®çª 
;
; MSCURS *getCursMouse(char *buffer)
;
ms_gcur_::
push ix
push hl
pop ix
ld (buff),hl
ld c,0Bh
rst 30h
pop ix
ld (errno_##),a
ld (width),hl
ld (xpoint),de
ld hl,width ; Ok
ret nc
ld hl,-1 ; error
ret
dseg
width: db 0 ; è¨à¨­  ªãàá®à 
db 0 ; ¢ëá®â  ªãàá®à 
xpoint: db 0 ; X  ªâ¨¢­ ï â®çª 
db 0 ; Y  ªâ¨¢­ ï â®çª 
buff: dw 0 ;  ¤à¥á ¡ãä¥à  ¨§®¡à ¦¥­¨ï ªãàá®à 
ENDMODULE
MODULE msgsens
;
; "mouse.h"
; ®«ã祭¨¥ §­ ç¥­¨ï çã¢á⢨⥫쭮á⨠¯¥à¥¬¥é¥­¨ï ¬ëè¨
; ¯® ¢¥à⨪ «¨ ¨ £®à¨§®­â «¨.
; ”ã­ªæ¨ï ¢®§¢à é ¥â 㪠§ â¥«ì ­  § ¯®«­¥­­ãî áâàãªâãàã MSSENS,
; ®¯à¥¤¥«¥­­ãî ¢ "mouse.h".
; ਠ®è¨¡ª¥, ¢®§¢à é ¥âáï §­ ç¥­¨¥ -1 (0FFFFh) ¨ errno ᮤ¥à¦¨â
; ­®¬¥à ®è¨¡ª¨.
;
; ¢ë室­ë¥ ¤ ­­ë¥:
; H - çã¢á⢨⥫쭮áâì ¯® ¢¥à⨪ «¨
; L - çã¢á⢨⥫쭮áâì ¯® £®à¨§®­â «¨
;
; MSSENS *getSensMouse()
;
ms_gsen_::
ld c,0Eh
rst 30h
ld (errno_##),a
ld (hsens),hl
ld hl,hsens ; Ok
ret nc
ld hl,-1 ; error
ret
dseg
hsens: db 0 ; çã¢áâ¢. ¯® £®à¨§®­â «¨
db 0 ; çã¢áâ¢. ¯® ¢¥à⨪ «¨
ENDMODULE
MODULE mssens
;
; "mouse.h"
; ”ã­ªæ¨ï ãáâ ­ ¢«¨¢ ¥â §­ ç¥­¨ï çã¢á⢨⥫쭮á⨠¯¥à¥¬¥é¥­¨ï
; ¬ëè¨ ¯® ¢¥à⨪ «¨ ¨ £®à¨§®­â «¨.
; ¥à¥¤ ¢ë§®¢®¬ ä㭪樨, ¤®«¦­  ¡ëâì § ¯®«­¥­  áâàãªâãà 
; MSSENS, ®¯à¥¤¥«¥­­ ï ¢ "mouse.h".
; ਠ®è¨¡ª¥, ¢®§¢à é ¥âáï §­ ç¥­¨¥ -1 ¨ errno ᮤ¥à¦¨â ­®¬¥à
; ®è¨¡ª¨.
;
; ¢å®¤­ë¥ ¤ ­­ë¥:
; H - çã¢á⢨⥫쭮áâì ¯® ¢¥à⨪ «¨
; L - çã¢á⢨⥫쭮áâì ¯® £®à¨§®­â «¨
;
; char setSensMouse(MSSENS *p)
;
ms_ssen_::
ld a,(hl)
inc hl
ld h,(hl)
ld l,a
ld c,0Fh
rst 30h
ld (errno_##),a
ld a,0
ret nc
dec a
ret
ENDMODULE
MODULE mshard
;
; "mouse.h"
; Ž¡à ¡®â稪  ¯¯ à â­®£® ¯à¥à뢠­¨ï ®â ¬ëè¨.
; ® ¯à¨å®¤ã ¯à¥à뢠­¨ï ®â ¬ëè¨, ¢ë§ë¢ ¥âáï ¤ ­­ ï äã­ªæ¨ï ¤à ©¢¥à .
; ‚ á«ãç ¥, ª®£¤  âॡã¥âáï à ¡®â  ¯®¤¯à®£à ¬¬ë ¯à¨ § ¯à¥é¥­­ëå ¯à¥àë-
; ¢ ­¨ïå, ¨á¯®«ì§ã©â¥ ¤ ­­ãî äã­ªæ¨î, ¤«ï ¨§¡¥¦ ­¨ï ¯®â¥àì ¯ ª¥â®¢
; ¤ ­­ëå ®â ¬ëè¨.
; ਠ®è¨¡ª¥, ¢®§¢à é ¥âáï §­ ç¥­¨¥ -1 ¨ errno ᮤ¥à¦¨â ­®¬¥à ®è¨¡ª¨.
;
; char hardMouse()
;
ms_hard_::
ld c,80h
rst 30h
ld (errno_##),a
ld a,0 ; Ok
ret nc
dec a ; error
ret
ENDMODULE
MODULE msvmode
;
; "mouse.h"
; ˆ­ä®à¬¨à®¢ ­¨¥ ® ᬥ­¥ ०¨¬  íªà ­ .
; ”ã­ªæ¨ï ¨­ä®à¬¨àã¥â ¤à ©¢¥à ¬ëè¨ ®¡ ¨§¬¥­¥­¨¨ ०¨¬  íªà ­ .
; ®¬¥à  ०¨¬®¢ ᮮ⢥âáâ¢ãîâ ä㭪樨 ãáâ ­®¢ª¨ ०¨¬  íªà ­ .
;
; ਠ®è¨¡ª¥, ¢®§¢à é ¥âáï §­ ç¥­¨¥ -1 ¨ errno ᮤ¥à¦¨â ­®¬¥à
; ®è¨¡ª¨.
;
; ¢å®¤­ë¥ ¤ ­­ë¥:
; A - ०¨¬ íªà ­ 
;
; char vmodeMouse(char video_mode)
;
ms_vmod_::
ld c,81h
rst 30h
ld (errno_##),a
ld a,0 ; Ok
ret nc
dec a ; error
ret
ENDMODULE
MODULE msref
;
; "mouse.h"
; à¨­ã¤¨â¥«ì­ ï ¯¥à¥à¨á®¢ª  ªãàá®à .
; ”ã­ªæ¨ï ¯¥à¥à¨á®¢ë¢ ¥â ¨§®¡à ¦¥­¨¥ ªãàá®à  ¬ëè¨ ­  íªà ­¥
; ­¥ ¤®¦¨¤ ïáì ®ç¥à¥¤­®£® ¯à¥à뢠­¨ï.
; ਠ®è¨¡ª¥, ¢®§¢à é ¥âáï §­ ç¥­¨¥ -1 ¨ errno ᮤ¥à¦¨â
; ­®¬¥à ®è¨¡ª¨.
;
; char refreshMouse()
;
ms_ref_::
ld c,83h
rst 30h
ld (errno_##),a
ld a,0 ; Ok
ret nc
dec a ; error
ret
ENDMODULE