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
+452
View File
@@ -0,0 +1,452 @@
; ”㭪樨 ¯à®¢¥à¥­ë.
;
; ”㭪樨 _getscon, _getcon (­ã¦­ë ?), putdec (¢ë¢®¤ ç¨á«  ¢ ¤¥áïâ¨ç­®¬
; ä®à¬ â¥ ­  íªà ­) § ª®¬¬¥­â à¨­ë.
;
;
; ‚室ï騥 ä㭪樨:
;
; putch
; getch
; getche
; cputs
; clrscr
; home
; gotoxy
; kbhit
; cgets
; inp
; outp
;
MODULE putch
;
; "conio.h"
; ”ã­ªæ¨ï ¢ë¢®¤¨â ᨬ¢®« ¯àאַ ­  íªà ­.
;
; in: a = ᨬ¢®«
; out: ­¥â
;
; void putch(char *c)
;
putch_::
cp 0Ah
jr nz,cputc
call cputc
ld a,0Dh
cputc: ;push ix
ld c,5Bh
rst 10h
;pop ix
ret
ENDMODULE
MODULE getch
;
; "conio.h"
; ”ã­ªæ¨ï ç¨â ¥â ᨬ¢®« á ª« ¢¨ âãàë
; ¡¥§ ®â®¡à ¦¥­¨ï ­  íªà ­¥.
;
; in: ­¥â
; out: a = ¯à®ç¨â ­­ë© ᨬ¢®«
;
; char getch()
;
getch_::
;push ix
ld c,30h
rst 10h
;pop ix
ret
ENDMODULE
MODULE getche
;
; "conio.h"
; ”ã­ªæ¨ï ç¨â ¥â ᨬ¢®« á ª« ¢¨ âãàë á ®â®¡à ¦¥­¨¥¬ ­  íªà ­¥.
; ਠ­ ¦ â¨¨ ­  Ctrl+Z ¨«¨ Ctrl+C, ¢ë¤ ¥â §­ ç¥­¨¥ -1.
;
; in: ­¥â
; out: a = ¯à®ç¨â ­­ë© ᨬ¢®«
;
; char getche()
;
getche_::
@1: ;push ix
ld c,32h
rst 10h
ld a,e
;pop ix
bit 7,d
jr z,@3 ; normal input
bit 5,b
jr z,@3 ; not Ctrl+..
ld a,d
cp 0AAh ; Ctrl+Z (d = 7 bit "1")
jr z,@2
cp 0ACh ; Ctrl+C
jr nz,@1
@2: ld a,-1 ; end of input
ret
@3: cp 0Dh
ret nz
push af
ld a,0Ah
call putch_##
pop af
ret
ENDMODULE
MODULE cputs
;
; "conio.h"
; ”ã­ªæ¨ï ¢ë¢®¤¨â áâப㠯àאַ ­  íªà ­.
; ‘âப  ¤®«¦­  ®ª ­ç¨¢ âìáï ­ã«¥¬.
;
; in: hl =  ¤à¥á áâப¨
; out: ­¥â
;
; void cputs(char *str)
;
cputs_::
ld a,(hl)
or a
ret z
call putch_##
inc hl
jp cputs_
ENDMODULE
MODULE clrscr
;
; "conio.h"
; Žç¨é¥­¨¥ íªà ­ .
;
; in: ­¥â
; out: ­¥â
;
; void clrscr()
;
clrscr_::
ld de,0 ; «¥¢ë© ¢¥àå. 㣮«
ld hl,2050h ; Y/X à §¬¥àë ®ª­ 
ld bc,0756h ; b= âਡãâ ä®­ 
ld a," " ; ᨬ¢®« § ¯®«­¨â¥«ì
rst 10h
ret
ENDMODULE
MODULE home
;
; "conio.h"
; Šãàá®à ¢ «¥¢ë© ¢¥àå­¨© 㣮«.
;
; in: ­¥â
; out: ­¥â
;
; void home()
;
home_::
ld de,0 ; Y/X position cursor
ld c,52h
rst 10h
ret
ENDMODULE
MODULE gotoxy
;
; "conio.h"
; “áâ ­®¢¨âì ªãàá®à ­  X,Y ¯®§¨æ¨î.
;
; in: l,e = X,Y ª®®à¤¨­ âë
; out: ­¥â
;
; void gotoxy(int x, int y)
;
gotoxy_::
ld d,e ; Y ¯®«®¦.
ld e,l ; X ¯®«®¦.
dec d
dec e
ld c,52h
rst 10h
ret
ENDMODULE
MODULE kbhit
;
; "conio.h"
; ”ã­ªæ¨ï ¯à®¢¥àï¥â ­ ¦ â¨¥ ª« ¢¨è¨ ­  ª« ¢¨ âãà¥.
; ‚®§¢à é ¥â BOOL.
;
; in: ­¥â
; out: a=true - ª« ¢¨è  ­ ¦ â 
; a=false - ª« ¢¨è  ­¥ ­ ¦ â 
;
; BOOL kbhit()
;
kbhit_::
;push ix
ld c,33h
rst 10h
;pop ix
or a
ret z ; false
ld a,1 ; true
ret
ENDMODULE
MODULE cgets
;
; "conio.h"
; ”ã­ªæ¨ï ç¨â ¥â áâபã ᨬ¢®«®¢ ¯àאַ á ª®­á®«¨, § ¯®¬¨­ ¥â áâப㠨 ¥¥
; ¤«¨­ã ¢  à£ã¬¥­â¥ str. €à£ã¬¥­â str ¤®«¦¥­ ¡ëâì 㪠§ â¥«¥¬ ­  ¬ áᨢ
; ᨬ¢®«®¢. ¥à¢ë© í«¥¬¥­â ¬ áᨢ  - str[0] ¤®«¦¥­ ᮤ¥à¦ âì ¬ ªá¨¬ «ì­ãî
; ¤«¨­ã (¢ ᨬ¢®« å) ç¨â ¥¬®© áâப¨. Œ áᨢ ¤®«¦¥­ ¡ëâì ¤®áâ â®ç­® ¡®«ì訬,
; çâ®¡ë ¢¬¥áâ¨âì áâப㠨 § ª«îç¨â¥«ì­ë© ­ã«ì. ”ã­ªæ¨ï ¯à®¤®«¦ ¥â áç¨â뢠âì
; ᨬ¢®«ë, ¯®ª  ­¥ ¡ã¤¥â ¯à®ç¨â ­ ª®¤ ­®¢®© áâப¨ (0x0D) ¨«¨ § ¤ ­­®¥ ª®«¨-
; ç¥á⢮ ᨬ¢®«®¢. ਠí⮬, ª®¤ ­®¢®© áâப¨ § ¬¥­ï¥âáï ­  ­ã«ì. ‘âப  § ¯®-
; ¬¨­ ¥âáï á str[2] í«¥¬¥­â  ¬ áᨢ . ‚® ¢â®à®¬ í«¥¬¥­â¥ ¬ áᨢ  str[1] § ¯®-
; ¬¨­ ¥âáï ¤¥©áâ¢¨â¥«ì­ ï ¤«¨­  áâப¨.
; ”ã­ªæ¨ï ¢®§¢à é ¥â 㪠§ â¥«ì ­  ­ ç «® áâப¨, ­ å®¤ï饩áï ¢ str[2].
; ‚ á«ãç ¥ ®è¨¡ª¨, ¢®§¢à é ¥¬®¥ §­ ç¥­¨¥ ­¥ ®¯à¥¤¥«¥­®.
;
; char *cgets(*str)
;
cgets_::
;push ix ; for _gets_
ld b,(hl) ; str[0] max len string
inc hl
call __gets_##
inc hl
ret
ENDMODULE
; MODULE putdec
;
; "conio.h"
; ‚뢮¤¨â ç¨á«® ¢ ¤¥áïâ¨ç­®¬ ä®à¬ â¥ ­  íªà ­.
;
; in: hl = §­ ç¥­¨¥
; out: ­¥â
;
; void putdec(int num)
;
;putdec_::
; bit 7,h ; ¯à®¢¥à¨¬ §­ ª ç¨á« 
; jr z,@1
; ; ®âà¨æ. ç¨á«®
; call ?NEGHL##
; ld a,"-"
; call putch_## ; ¢ë¢®¤ ᨬ¢®«  ¯àאַ ­  íªà ­
;@1: ld de,0
; ld c,e
; ld b,16
;@2: add hl,hl
; ld a,e
; adc a,a
; daa
; ld e,a
; ld a,d
; adc a,a
; daa
; ld d,a
; rl c
; djnz @2
; ld hl,mystr ; ¡ãä¥à ç¨á« 
; call @fhexw
; ld e,c
; call @fhexb
; ld (hl),0
; ld hl,mystr
; ld bc,4
; ld a," "
; cpir
; jp cputs_## ; ¢ë¢¥á⨠áâப㠯àאַ ­  íªà ­
;
; de ¢ ¡ãä¥à
;@fhexw:push de
; ld e,d
; call @fhexb
; pop de
;@fhexb:ld a,e
; push af
; rrca
; rrca
; rrca
; rrca
; call @3
; pop af
;@3: and 0Fh
; add a,"0"
; cp "9"+1
; jr c,@4
; add a,7
;@4: ld (hl),a
; inc hl
; ret
;
; dseg
;mystr: ds 6 ; ¡ãä¥à ç¨á« 
;
; ENDMODULE
; MODULE getscon
;
; ®«ãç¨âì áâபã á ª®­á®«¨.
; Œ ªá. ¤«¨­  áâப¨ 128 ᨬ¢®«®¢, ¡¥§ ª®¤®¢ ª®­æ®¢ª¨ áâப¨.
; in: e = ?
; out: hl =  ¤à¥á ¡ãä¥à  áâப¨, ¥á«¨ Ok
; hl = NULL ¯à¨ ®è¨¡ª¥
;
;_getscon_::
; push ix
; ld a,e ; ¯¥à¥­¥á á
; ex de,hl
; ld hl,-130
; add hl,sp
; ld sp,hl
; ex de,hl ; hl= ¤à¥á ¡ãä¥à  ä㭪樨
; push hl
; ld (?23+1),hl
; dec a
; dec a
; ld hl,2
; add hl,sp
; ld (hl),a
; ld hl,2
; add hl,sp
; ex de,hl ; de= ¤à¥á ¡ãä¥à 
; ld c,0Ah ; ç⥭¨¥ ¢ ª®­á®«ì­ë© ¡ãä¥à
; call 5
; ld e,0Ah
; ld c,2 ; ¢ë¢¥á⨠ᨬ¢®« ­  §ªà ­
; call 5
; ld hl,4
; add hl,sp
; ld a,(hl)
; pop hl
; cp 1Ah ; ª®­¥æ ¢¢®¤  áâப¨
; jr nz,@5
; ld hl,0 ; hl=null
; jr @6
; ;
;@5: push hl
; ld hl,3
; add hl,sp
; ld c,(hl)
; ld hl,4
; add hl,sp
; ex de,hl
; pop hl
;@8: dec c
; ld a,c
; inc a
; jr z,@7
; ld a,(de)
; inc de
; ld (hl),a
; inc hl
; jr @8
; ;
;@7: ld (hl),0Ah
; inc hl
; xor a
; ld (hl),a
;?23: ld hl,0 ; hl,(?23)  ¤à¥á ¡ãä¥à  áâப¨
;@6: ex de,hl
; ld hl,130
; add hl,sp
; ld sp,hl
; ex de,hl
; pop ix
; ret
;
; ENDMODULE
; MODULE getcon
;
; ®«ãç¨âì ᨬ¢®« á ª®­á®«¨ á í宬.
; Ž¡à ¡ â뢠¥â ª®¤ 0Dh.
;
;_getcon_::
; push ix
; ld c,1 ; ¢¢®¤ ᨬ¢®«  á ª« ¢¨ âãàë
; call 5
; cp 0Dh
; ret nz
; ld a,0Ah
; push af
; ld c,2 ; ¢ë¢®¤ ᨬ¢®«  ­  íªà ­
; ld e,a
; call 5
; pop af
; pop ix
; ret
;
; ENDMODULE
MODULE inp
;
; "conio.h"
; ”ã­ªæ¨ï ç¨â ¥â 1 ¡ ©â ¨§ ¯®àâ  port.
; €à£ã¬¥­â port ¬®¦¥â ¡ëâì «î¡ë¬ ¡¥§§­ ª®¢ë¬
; æ¥«ë¬ ç¨á«®¬ ¢ ¤¨ ¯ §®­¥ ®â 0 ¤® 65535.
; ”ã­ªæ¨ï ¢®§¢à é ¥â ¯à®ç¨â ­­ë© ¡ ©â ¨§ port.
;
; char inp(uint port);
;
inp_::
ld c,l
ld b,h
in a,(c)
ret
ENDMODULE
MODULE outp
;
; "conio.h"
; ”ã­ªæ¨ï § ¯¨á뢠¥â §­ ç¥­¨¥ value ¢ ¯®àâ port.
; €à£ã¬¥­â port ¬®¦¥â ¡ëâì «î¡ë¬ ¡¥§§­ ª®¢ë¬ 楫ë¬
; ç¨á«®¬ ¢ ¤¨ ¯ §®­¥ ®â 0 ¤® 65535. €à£ã¬¥­â value
; ¬®¦¥â ¡ëâì «î¡ë¬ æ¥«ë¬ ç¨á«®¬ ¢ ¤¨ ¯ §®­¥ ®â 0
; ¤® 255.
; ”ã­ªæ¨ï ¢®§¢à é ¥â § ¯¨á뢠¥¬ë© ¡ ©â.
;
; char outp(uint port, char value);
;
outp_::
ld c,l
ld b,h
ld a,e
out (c),a
ret
ENDMODULE