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:
+452
@@ -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
|
||||
Reference in New Issue
Block a user