Files
Sprinter-SDCC/third_party/solid-c/SRC/CLIB/CONIO.ASM
T
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

453 lines
6.6 KiB
NASM
Raw 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.
; ”㭪樨 ¯à®¢¥à¥­ë.
;
; ”㭪樨 _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