Files
snark13 c71e249a4e 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>
2026-06-03 16:13:21 +03:00

567 lines
9.8 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
; ‚室ï騥 ä㭪樨:
;
; 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