c71e249a4e
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>
453 lines
6.6 KiB
NASM
453 lines
6.6 KiB
NASM
; ”ãªæ¨¨ ¯à®¢¥à¥ë.
|
||
;
|
||
; ”ãªæ¨¨ _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
|