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
|
||||
+357
@@ -0,0 +1,357 @@
|
||||
; ‚室ï騥 äãªæ¨¨:
|
||||
;
|
||||
; tolower
|
||||
; toupper
|
||||
; isdigit
|
||||
; isupper
|
||||
; islower
|
||||
; isascii
|
||||
; isalnum
|
||||
; isxdigit
|
||||
; isspace
|
||||
; iscntrl
|
||||
; ispunct
|
||||
; isalpha
|
||||
; isgraph
|
||||
; isprint
|
||||
;
|
||||
|
||||
|
||||
|
||||
|
||||
MODULE xtcty
|
||||
;
|
||||
; Table for ctype functs
|
||||
; 255 bytes
|
||||
@ctype::
|
||||
db 1,1,1,1,1,1,1,1,1,3,3,3,3,3,1,1
|
||||
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
||||
db 2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8
|
||||
db 20,20,20,20,20,20,20,20,20,20,8,8,8,8,8,8
|
||||
db 8,48,48,48,48,48,48,32,32,32,32,32,32,32,32,32
|
||||
db 32,3,32,32,32,32,32,32,32,32,32,8,8,8,8,8
|
||||
db 8,80,80,80,80,80,80,64,64,64,64,64,64,64,64,64
|
||||
db 64,64,64,64,64,64,64,64,64,64,64,8,8,8,8,1
|
||||
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE tolower
|
||||
;
|
||||
; "ctype.h"
|
||||
; �८¡à §ã¥â ¯à®¯¨á®© ᨬ¢®« ¢ áâà®çë©.
|
||||
; in: a = ᨬ¢®«
|
||||
; out a = a..z ᨬ¢®«
|
||||
;
|
||||
; char tolower(char ch)
|
||||
;
|
||||
tolower_::
|
||||
cp "A"
|
||||
ret c
|
||||
cp "Z"+1
|
||||
ret nc
|
||||
add a,20h
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE toupper
|
||||
;
|
||||
; "ctype.h"
|
||||
; �८¡à §ã¥â áâà®çë© á¨¬¢®« ¢ ¯à®¯¨á®©.
|
||||
; in: a = ᨬ¢®«
|
||||
; out a = A..Z ᨬ¢®«
|
||||
;
|
||||
; char toupper(char ch)
|
||||
;
|
||||
toupper_::
|
||||
cp "a"
|
||||
ret c
|
||||
cp "z"+1
|
||||
ret nc
|
||||
sub 20h
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE isdigit
|
||||
;
|
||||
; "ctype.h"
|
||||
; �஢¥àª ᨬ¢®« æ¨äàã.
|
||||
; in: a = ᨬ¢®«
|
||||
; out: true - æ¨äà
|
||||
; false - ¥ æ¨äà
|
||||
;
|
||||
; BOOL isdigit(char ch)
|
||||
;
|
||||
isdigit_::
|
||||
cp "0"
|
||||
jr c,@1
|
||||
cp "9"+1
|
||||
jr nc,@1
|
||||
ld a,1 ; true
|
||||
ret
|
||||
@1: xor a ; false
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE isupper
|
||||
;
|
||||
; "ctype.h"
|
||||
; �஢¥àª ¯à®¯¨á®© ᨬ¢®«
|
||||
; in: a = ᨬ¢®«
|
||||
; out: true - ¯à®¯¨á®©
|
||||
; false - ¥ ¯à®¯¨á®©
|
||||
;
|
||||
; BOOL isupper(char ch)
|
||||
;
|
||||
isupper_::
|
||||
cp "A"
|
||||
jr c,@1
|
||||
cp "Z"+1
|
||||
jr nc,@1
|
||||
ld a,1 ; true
|
||||
ret
|
||||
@1: xor a ; false
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE islower
|
||||
;
|
||||
; "ctype.h"
|
||||
; �஢¥àª áâà®çë© á¨¬¢®«
|
||||
; in: a = ᨬ¢®«
|
||||
; out: true - áâà®çë©
|
||||
; false - ¥ áâà®çë©
|
||||
;
|
||||
; BOOL islower(char ch)
|
||||
;
|
||||
islower_::
|
||||
cp "a"
|
||||
jr c,@1
|
||||
cp "z"+1
|
||||
jr nc,@1
|
||||
ld a,1 ; true
|
||||
ret
|
||||
@1: xor a ; false
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE isascii
|
||||
;
|
||||
; "ctype.h"
|
||||
; �஢¥àª ᨬ¢®« ASCII ¯à¨ ¤«¥¦®áâì
|
||||
; in: a = ᨬ¢®«
|
||||
; out: true - ascii-ᨬ¢®«
|
||||
; false - ¥ ascii-ᨬ¢®«
|
||||
;
|
||||
; BOOL isascii(char ch)
|
||||
;
|
||||
isascii_::
|
||||
cp 0Dh
|
||||
ret z
|
||||
cp 0Ah
|
||||
ret z
|
||||
cp " "
|
||||
jr c,@1
|
||||
cp "~"+1
|
||||
ret c ; true
|
||||
@1: xor a ; false
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE isalnum
|
||||
;
|
||||
; "ctype.h"
|
||||
; �஢¥àï¥â ᨬ¢®« ¯à¨ ¤«¥¦®áâì ª «ä ¢¨â®-æ¨ä஢®¬ã
|
||||
; ⨯ã (A..Z, a..z, 0..9)
|
||||
; in: a = ᨬ¢®«
|
||||
; out: true - «ä ¢¨â®-æ¨ä஢®© ᨬ¢®«
|
||||
; false - ¥â
|
||||
;
|
||||
; BOOL isalnum(char ch)
|
||||
;
|
||||
isalnum_::
|
||||
ld l,a
|
||||
ld h,0
|
||||
ld de,@ctype##
|
||||
add hl,de
|
||||
ld a,4+32+64
|
||||
and (hl)
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE isxdigit
|
||||
;
|
||||
; "ctype.h"
|
||||
; �஢¥àï¥â è¥áâ ¤æ â¥à¨çë¥ æ¨äàë (0..9, A..F, a..f)
|
||||
; in: a = ᨬ¢®«
|
||||
; out: true - hex-æ¨äà
|
||||
; false - ¥â
|
||||
;
|
||||
; BOOL isxdigit(char c)
|
||||
;
|
||||
isxdigit_::
|
||||
ld l,a
|
||||
ld h,0
|
||||
ld de,@ctype##
|
||||
add hl,de
|
||||
ld a,10h
|
||||
and (hl)
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE isspace
|
||||
;
|
||||
; "ctype.h"
|
||||
; �஢¥àï¥â ¯à®¡¥«ìë¥ á¨¬¢®«ë (0x09, 0x0D ¨«¨ 0x20)
|
||||
; in: a = ᨬ¢®«
|
||||
; out: true - ¯à®¡¥«ìë© á¨¬¢®«
|
||||
; false - ¥â
|
||||
;
|
||||
; BOOL isspace(char ch)
|
||||
;
|
||||
isspace_::
|
||||
ld l,a
|
||||
ld h,0
|
||||
ld de,@ctype##
|
||||
add hl,de
|
||||
ld a,2
|
||||
and (hl)
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE iscntrl
|
||||
;
|
||||
; "ctype.h"
|
||||
; �஢¥àï¥â ã¯à ¢«ïî騩 ᨬ¢®« (0å00..0å1F ¨«¨ 0x7F)
|
||||
; in: a = ᨬ¢®«
|
||||
; out: true - ã¯à ¢«ïî騩 ᨬ¢®«
|
||||
; false - ¥â
|
||||
;
|
||||
; BOOL iscntl(char ch)
|
||||
;
|
||||
iscntrl_::
|
||||
ld l,a
|
||||
ld h,0
|
||||
ld de,@ctype##
|
||||
add hl,de
|
||||
ld a,1
|
||||
and (hl)
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE ispunct
|
||||
;
|
||||
; "ctype.h"
|
||||
; �஢¥àï¥â § ª¨ ¯ãªâã æ¨¨
|
||||
; in: a = ᨬ¢®«
|
||||
; out: true - § ª ¯ãªâã æ¨¨
|
||||
; false - ¥â
|
||||
;
|
||||
; BOOL ispunct(char ch)
|
||||
;
|
||||
ispunct_::
|
||||
ld l,a
|
||||
ld h,0
|
||||
ld de,@ctype##
|
||||
add hl,de
|
||||
ld a,8
|
||||
and (hl)
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE isalpha
|
||||
;
|
||||
; "ctype.h"
|
||||
; �஢¥àï¥â ¯à¨ ¤«¥¦®áâì ª ¡ãª¢ ¬ (A..Z, a..z)
|
||||
; in: a = ᨬ¢®«
|
||||
; out: true - ¡ãª¢
|
||||
; false - ¥ ¡ãª¢
|
||||
;
|
||||
; BOOL isalpha(char ch)
|
||||
;
|
||||
isalpha_::
|
||||
ld l,a
|
||||
ld h,0
|
||||
ld de,@ctype##
|
||||
add hl,de
|
||||
ld a,32+64
|
||||
and (hl)
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE isgraph
|
||||
;
|
||||
; "ctype.h"
|
||||
; �஢¥àï¥â ¯à¨ ¤«¥¦®áâì ª ¯¥ç â ¥¬ë¬ ᨬ¢®« ¬,
|
||||
; ¨áª«îç ï ᨬ¢®« ¯à®¡¥« (0å21..0å7E)
|
||||
; in: a = ᨬ¢®«
|
||||
; out: true - ¯¥ç â ¥¬ë© ᨬ¢®«
|
||||
; false - ¥â
|
||||
;
|
||||
; BOOL isgraph(char ch)
|
||||
;
|
||||
isgraph_::
|
||||
ld l,a
|
||||
ld h,0
|
||||
ld de,@ctype##
|
||||
add hl,de
|
||||
ld a,0FCh
|
||||
and (hl)
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE isprint
|
||||
;
|
||||
; "ctype.h"
|
||||
; �஢¥àï¥â ¯à¨ ¤«¥¦®áâì ª ¯¥ç â ¥¬ë¬
|
||||
; ᨬ¢®« ¬ (0å20..0å7E).
|
||||
; in: a = ᨬ¢®«
|
||||
; out: true - ¯¥ç â ¥¬ë© ᨬ¢®«
|
||||
; false - ¥â
|
||||
;
|
||||
; BOOL isprint(char ch)
|
||||
;
|
||||
isprint_::
|
||||
ld l,a
|
||||
ld h,0
|
||||
ld de,@ctype##
|
||||
add hl,de
|
||||
ld a,0FEh
|
||||
and (hl)
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
Vendored
+618
@@ -0,0 +1,618 @@
|
||||
; ”ãªæ¨¨ ¯à®¢¥à¥ë.
|
||||
;
|
||||
; ‚室ï騥 äãªæ¨¨:
|
||||
;
|
||||
; bdos
|
||||
; bdosh
|
||||
; enable
|
||||
; disable
|
||||
; _setargv
|
||||
; setdisk
|
||||
; getdisk
|
||||
; absread
|
||||
; abswrite
|
||||
; setdate
|
||||
; getdate
|
||||
; settime
|
||||
; gettime
|
||||
; intdos
|
||||
; ffirst (findfirst)
|
||||
; fnext (findnext)
|
||||
;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
MODULE bdos
|
||||
;
|
||||
; "dos.h"
|
||||
; ‚믮«ï¥â á¨áâ¥¬ë© ¢ë§®¢ „Ž‘, ®¬¥à ª®â®à®£® ®¯à¥¤¥«¥ ¢ n.
|
||||
; €à£ã¬¥âë doshl ¨ dosa à §¬¥é îâáï ᮮ⢥âá⢥® ¢ ॣ¨áâà å HL ¨ A.
|
||||
; ”ãªæ¨ï ¢ë¯®«ï¥â ª®¬ ¤ã RST 10h ¤«ï ®áãé¥á⢫¥¨ï á¨á⥬®£® ¢ë§®¢ .
|
||||
; ”ãªæ¨ï ¬®¦¥â ¡ëâì ¨á¯®«ì§®¢ ⮫쪮 ¤«ï á¨á⥬ëå „Ž‘-¢ë§®¢®¢, ª®â®àë¥
|
||||
; ¥ ¯à¨¨¬ îâ à£ã¬¥â®¢ ¨«¨ ¯à¨¨¬ îâ ¨å ⮫쪮 ¢ ॣ¨áâà å HL ¨ A.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â § 票¥ ॣ¨áâà A, § ¯®«¥®£® á¨áâ¥¬ë¬ ¢ë§®¢®¬.
|
||||
; �ਬ¥ç ¨¥: �âã äãªæ¨î ¥«ì§ï ¨á¯®«ì§®¢ âì ¤«ï ®áãé¥á⢫¥¨ï á¨á⥬ëå
|
||||
; ¢ë§®¢®¢, ¢ ª®â®àëå ®è¨¡ª¨ 㪠§ë¢ îâáï ¯®á।á⢮¬ ãáâ ®¢ª¨ ä« £ ¯¥à¥®á .
|
||||
; ’.ª. ‘¨-¯à®£à ¬¬ë ¥ ¨¬¥îâ ¤®áâ㯠ª í⮬ã ä« £ã, áâ âãá ¢®§¢à é ¥¬®£®
|
||||
; § ç¥¨ï ®¯à¥¤¥«¨âì ¥¢®§¬®¦®. ‚ í⮬ á«ãç ¥ ¥®¡å®¤¨¬® ¨á¯®«ì§®¢ âì
|
||||
; äãªæ¨î intdos.
|
||||
; ”ãªæ¨ï bdosh ®â«¨ç ¥âáï ®â bdos ⮫쪮 ⥬, çâ® ¢®§¢à é ¥¬®¥ § 票¥
|
||||
; ᮤ¥à¦¨âáï ¢ ॣ. ¯ ॠHL.
|
||||
; Ž¡¥ äãªæ¨¨ ¬®¦® ¨á¯®«ì§®¢ âì ¤«ï „Ž‘-¢ë§®¢®¢: 02h,0Ah,0Bh,0Eh,11h,1Bh
|
||||
; 1Ch,1Dh,1Eh,5Ch äãªæ¨©.
|
||||
;
|
||||
; in: a = ®¬¥à äãªæ¨¨
|
||||
; de = ¯¥à¥¤ ¢ ¥¬ë¥ ¯ à ¬¥âàë
|
||||
; c = âਡãâ
|
||||
; out: a = § 票¥ á¨á⥬®£® ¢ë§®¢
|
||||
;
|
||||
; char bdos(char n, int doshl, char dosa)
|
||||
; int bdosh(char n, int doshl, char dosa)
|
||||
;
|
||||
bdosh_::
|
||||
bdos_::
|
||||
ld b,c
|
||||
ld c,a ; c = n
|
||||
ld a,b ; a = dosa
|
||||
ex de,hl ; hl = doshl
|
||||
push ix
|
||||
rst 10h
|
||||
pop ix
|
||||
ld l,a
|
||||
ld h,0
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE diei
|
||||
;
|
||||
; "dos.h"
|
||||
; Enable and disable interrupts.
|
||||
;
|
||||
; in: ¥â
|
||||
; out: ¥â
|
||||
;
|
||||
; void enable()
|
||||
; void disable()
|
||||
;
|
||||
enable_::
|
||||
ei
|
||||
ret
|
||||
|
||||
disable_::
|
||||
di
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE setarg
|
||||
;-----------------------------------------------------------
|
||||
; ¢ãâà¥ïï: ¢ë§ë¢ ¥âáï ¨§ xmain ¤«ï äãªæ¨¨ _main_
|
||||
;-----------------------------------------------------------
|
||||
; ‘®§¤ âì ᯨ᮪ à£ã¬¥â®¢, § ¤ ëå ¢ ª®¬ ¤®© áâப¥.
|
||||
; ‚®§¢à é ¥âáï ç¨á«® à£ã¬¥â®¢. ‘¯¨á®ª à áç¨â ¤à¥á
|
||||
; ¬ ªá¨¬ã¬ 30 à£ã¬¥â®¢.
|
||||
;
|
||||
; in: hl = ¤à¥á ª®¬. áâப¨
|
||||
; out: hl = ç¨á«® à£ã¬¥â®¢ (argc)
|
||||
;
|
||||
; int _setargv(*string)
|
||||
;
|
||||
_setargv::
|
||||
ld c,(hl) ; ¤«¨ ª®¬. áâப¨
|
||||
inc hl
|
||||
ld b,0
|
||||
ld e,l ; ç «® ª®¬. áâப¨
|
||||
ld d,h
|
||||
add hl,bc
|
||||
ld (hl),b ; ã«ì ¢ ª®¥æ ª®¬. áâப¨
|
||||
; ¤à¥á ¨¬¥¨ ¯à®£à ¬¬ë
|
||||
push de
|
||||
inc hl
|
||||
inc hl
|
||||
ld b,122
|
||||
@6: ld a,(hl)
|
||||
inc hl
|
||||
or a
|
||||
jr z,@8
|
||||
cp "\"
|
||||
jr nz,@7
|
||||
ld e,l
|
||||
ld d,h
|
||||
@7: djnz @6
|
||||
@8: ld (_argv_),de ; ¤à¥á ¨¬¥¨ ¯à®£à ¬¬ë
|
||||
pop de
|
||||
;
|
||||
ld hl,_argv_+2 ; ᯨ᮪ ¤à¥á®¢ à£ã¬¥â®¢
|
||||
ld b,1 ; b=1 argc!
|
||||
@1: ld a,(de)
|
||||
inc de
|
||||
cp " "
|
||||
jr z,@1
|
||||
cp 9 ; Tab
|
||||
jr z,@1
|
||||
or a
|
||||
jr z,@2 ; ª®¥æ áâப¨
|
||||
dec de
|
||||
ld (hl),e ; ¤à¥á à£ã¬¥â ¢ ᯨ᮪
|
||||
inc hl
|
||||
ld (hl),d
|
||||
inc hl
|
||||
inc b ; ++argc
|
||||
@3: ld a,(de)
|
||||
cp " "
|
||||
jr z,@4
|
||||
cp 9 ; Tab
|
||||
jr z,@4
|
||||
or a
|
||||
jr z,@2 ; ª®¥æ áâப¨
|
||||
inc de
|
||||
cp '"'
|
||||
jr z,@5
|
||||
jr @3
|
||||
;
|
||||
@4: xor a
|
||||
ld (de),a ; ã«ì ¢ ª®¥æ à£ã¬¥â ¢ ª®¬. áâப¥
|
||||
inc de
|
||||
jr @1
|
||||
;
|
||||
@5: ld a,(de)
|
||||
cp '"'
|
||||
jr z,@3
|
||||
or a
|
||||
jr z,@2
|
||||
inc de
|
||||
jr @5
|
||||
;
|
||||
; ª®¥æ à£ã¬¥â®¢
|
||||
@2: ld (hl),0 ; null
|
||||
inc hl
|
||||
ld (hl),0
|
||||
ld l,b ; hl=ç¨á«® à£ã¬¥â®¢
|
||||
ld h,0
|
||||
ret
|
||||
|
||||
dseg
|
||||
_argv_::
|
||||
ds 32*2 ; ᯨ᮪ ¤à¥á®¢ à£ã¬¥â®¢
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE setdisk
|
||||
;
|
||||
; "dos.h"
|
||||
; “áâ ®¢¨âì ⥪ã騩 ¤¨áª
|
||||
;
|
||||
; in: a = ®¬¥à ¤¨áª
|
||||
; out: ¥â
|
||||
;
|
||||
; void setdisk(char diskno)
|
||||
;
|
||||
setdisk_::
|
||||
push ix
|
||||
ld c,1
|
||||
rst 10h
|
||||
pop ix
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE absread
|
||||
;
|
||||
; "dos.h"
|
||||
; €¡á®«î⮥ ç⥨¥ á ¤¨áª .
|
||||
; ”ãªæ¨ï áç¨âë¢ ¥â ¢ ¡ãä¥à ®¤¨ ¨«¨ ¥áª®«ìª® ᥪâ®à®¢
|
||||
; á § ¤ ë¬ ç «ìë¬ ®â®á¨â¥«ìë¬ ®¬¥à®¬. ‘¥ªâ®àë
|
||||
; 㬥àãîâáï á 0 ®â ç « «®£¨ç¥áª®£® (¥ 䨧¨ç¥áª®£®!)
|
||||
; ¤¨áª . Š ¯à¨¬¥àã, § £àã§®çë© á¥ªâ®à ¤ ®£® «®£¨ç¥áª®£®
|
||||
; ¤¨áª ¨¬¥¥â ®¬¥à 0, ¤ «¥¥ ¯¥à¢ ï ª®¯¨ï FAT ç¨ ¥âáï
|
||||
; á ᥪâ®à ®¬¥à 1 ¨ â.¤.
|
||||
; ”ãªæ¨ï ¢®§¢à é îâ 0 ¯à¨ ãᯥ讬 § ¢¥à襨¨ ®¯¥à 樨.
|
||||
; ‚ á«ãç ¥ ®è¨¡ª¨ ¢®§¢à é ¥âáï -1 (0FFh) ¨ errno ᮤ¥à¦¨â
|
||||
; ®¬¥à ®è¨¡ª¨.
|
||||
;
|
||||
; in: a = ®¬¥à ¤¨áª
|
||||
; de = «®£. ®¬¥à ᥪâ®à
|
||||
; bc = ª®«-¢® ç¨â ¥¬ëå ᥪâ®à®¢
|
||||
; á⥪ = ¤à¥á ¡ãä¥à
|
||||
; out: a = 0 - Ok
|
||||
; a = -1 - Error
|
||||
;
|
||||
; char absread(char disk, int nsect, char count, char buffer)
|
||||
;
|
||||
; disk - ®¬¥à ¤¨áª
|
||||
; nsect - ®¬¥à ç «ì®£® ᥪâ®à
|
||||
; count - ª®«-¢® ç¨â ¥¬ëå ᥪâ®à®¢
|
||||
; buffer - ¤à¥á ¡ãä¥à ¯®¤ áç¨âë¢ ¥¬ë¥ ¤ ë¥
|
||||
;
|
||||
absread_::
|
||||
ld (@1+2),ix
|
||||
ld lx,e ; ix=nsect
|
||||
ld hx,d
|
||||
pop hl
|
||||
pop de ; de= ¤à¥á buffer
|
||||
push de
|
||||
push hl
|
||||
ld hl,0 ; áâ.à §àï¤ ®¬¥à ᥪâ®à
|
||||
ld b,c ; count
|
||||
ld c,55h
|
||||
rst 08h
|
||||
jr c,@2
|
||||
xor a ; Ok
|
||||
@1: ld ix,0
|
||||
ret
|
||||
@2: ld a,25 ; EREAD (read error)
|
||||
ld (errno_##),a
|
||||
ld a,-1
|
||||
jr @1
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE abswrit
|
||||
;
|
||||
; "dos.h"
|
||||
; €¡á®«îâ ï § ¯¨áì ¤¨áª.
|
||||
; ”ãªæ¨ï § ¯¨áë¢ ¥â ¨§ ¡ãä¥à ®¤¨ ¨«¨ ¥áª®«ìª® ᥪâ®à®¢
|
||||
; á § ¤ ë¬ ç «ìë¬ ®â®á¨â¥«ìë¬ ®¬¥à®¬. ‘¥ªâ®àë
|
||||
; 㬥àãîâáï á 0 ®â ç « «®£¨ç¥áª®£® (¥ 䨧¨ç¥áª®£®!)
|
||||
; ¤¨áª . Š ¯à¨¬¥àã, § £àã§®çë© á¥ªâ®à ¤ ®£® «®£¨ç¥áª®£®
|
||||
; ¤¨áª ¨¬¥¥â ®¬¥à 0, ¤ «¥¥ ¯¥à¢ ï ª®¯¨ï FAT ç¨ ¥âáï
|
||||
; á ᥪâ®à ®¬¥à 1 ¨ â.¤.
|
||||
; ”ãªæ¨ï ¢®§¢à é îâ 0 ¯à¨ ãᯥ讬 § ¢¥à襨¨ ®¯¥à 樨.
|
||||
; ‚ á«ãç ¥ ®è¨¡ª¨ ¢®§¢à é ¥âáï -1 (0FFh) ¨ errno ᮤ¥à¦¨â
|
||||
; ®¬¥à ®è¨¡ª¨.
|
||||
;
|
||||
; in: a = ®¬¥à ¤¨áª
|
||||
; de = «®£. ®¬¥à ᥪâ®à
|
||||
; bc = ª®«-¢® § ¯¨áë¢ ¥¬ëå ᥪâ®à®¢
|
||||
; out: a = 0 - Ok
|
||||
; a = -1 - Error
|
||||
;
|
||||
; char abswrite(char disk, int nsect, char count, char buffer)
|
||||
;
|
||||
; disk - ®¬¥à ¤¨áª
|
||||
; nsect - ®¬¥à ç «ì®£® ᥪâ®à
|
||||
; count - ª®«-¢® § ¯¨áë¢ ¥¬ëå ᥪâ®à®¢
|
||||
; buffer - ¤à¥á ¡ãä¥à ¤ ëå
|
||||
;
|
||||
abswrite_::
|
||||
ld (@1+2),ix
|
||||
ld lx,e ; ix=nsect
|
||||
ld hx,d
|
||||
pop hl
|
||||
pop de ; de= ¤à¥á buffer
|
||||
push de
|
||||
push hl
|
||||
ld hl,0 ; áâ.à §àï¤ ®¬¥à ᥪâ®à
|
||||
ld b,c ; count
|
||||
ld c,56h
|
||||
rst 08h
|
||||
jr c,@2
|
||||
xor a ; Ok
|
||||
@1: ld ix,0
|
||||
ret
|
||||
@2: ld a,26 ; EWRITE (write error)
|
||||
ld (errno_##),a
|
||||
ld a,-1
|
||||
jr @1
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE getdisk
|
||||
;
|
||||
; "dos.h"
|
||||
; “§ âì ®¬¥à ¤¨áª
|
||||
;
|
||||
; in: ¥â
|
||||
; out: a = ®¬¥à ¤¨áª
|
||||
;
|
||||
; char getdisk()
|
||||
;
|
||||
getdisk_::
|
||||
;push ix
|
||||
ld c,2
|
||||
rst 10h
|
||||
;pop ix
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE getdate
|
||||
;
|
||||
; "dos.h"
|
||||
; “§ âì á¨á⥬ãî ¤ âã ¨ § ¯®«¨âì áâàãªâãàã date.
|
||||
;
|
||||
; in: hl = ¤à¥á áâàãªâãàë ¤ âë
|
||||
; out: ¥â
|
||||
;
|
||||
; void getdate(struct date *date)
|
||||
;
|
||||
getdate_::
|
||||
push ix
|
||||
push hl ; ¤à¥á áâàãªâãàë ¤ âë
|
||||
ld c,21h
|
||||
rst 10h
|
||||
pop hl
|
||||
push ix
|
||||
pop bc
|
||||
ld (hl),c ;+0 £®¤
|
||||
inc hl ;
|
||||
ld (hl),b ;+1
|
||||
inc hl
|
||||
ld (hl),d ;+2 ¤¥ì
|
||||
inc hl
|
||||
ld (hl),e ;+3 ¬¥áïæ
|
||||
pop ix
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE setdate
|
||||
;
|
||||
; "dos.h"
|
||||
; “áâ ®¢¨âì á¨á⥬ãî ¤ âã.
|
||||
;
|
||||
; in: hl = ¤à¥á áâàãªâãàë ¤ âë
|
||||
; out: ¥â
|
||||
;
|
||||
; void setdate(struct date *date)
|
||||
;
|
||||
setdate_::
|
||||
push ix
|
||||
ld c,(hl) ;+0 £®¤
|
||||
inc hl ;
|
||||
ld b,(hl) ;+1
|
||||
inc hl
|
||||
ld d,(hl) ;+2 ¤¥ì
|
||||
inc hl
|
||||
ld e,(hl) ;+3 ¬¥áïæ
|
||||
push bc
|
||||
pop ix
|
||||
ld c,22h
|
||||
rst 10h
|
||||
pop ix
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE gettime
|
||||
;
|
||||
; "dos.h"
|
||||
; “§ âì á¨á⥬®¥ ¢à¥¬ï ¨ § ¯®«¨âì áâàãªâãàã time.
|
||||
;
|
||||
; in: hl = ¤à¥á áâàãªâãàë ¢à¥¬¥¨
|
||||
; out: ¥â
|
||||
;
|
||||
; void gettime(struct time *time)
|
||||
;
|
||||
gettime_::
|
||||
push ix
|
||||
push hl
|
||||
ld c,21h
|
||||
rst 10h
|
||||
ex de,hl
|
||||
pop hl
|
||||
ld (hl),e ;+0 ¬¨ãâë
|
||||
inc hl
|
||||
ld (hl),d ;+1 ç áë
|
||||
inc hl
|
||||
inc hl ; ®¡®©â¨ ï祩ªã "ti_hund"
|
||||
ld (hl),b ;+3 ᥪã¤ë
|
||||
pop ix
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE settime
|
||||
;
|
||||
; "dos.h"
|
||||
; “áâ ®¢¨âì á¨á⥬®¥ ¢à¥¬ï.
|
||||
;
|
||||
; in: hl = ¤à¥á áâàãªâãàë ¢à¥¬¥¨
|
||||
; out: ¥â
|
||||
;
|
||||
; void settime(struct time *time)
|
||||
;
|
||||
settime_::
|
||||
push ix
|
||||
ld e,(hl) ;+0 ¬¨ãâë
|
||||
inc hl
|
||||
ld d,(hl) ;+1 ç áë
|
||||
inc hl
|
||||
inc hl ; ®¡®©â¨ ï祩ªã "ti_hund"
|
||||
ld b,(hl) ;+3 ᥪã¤ë
|
||||
ex de,hl
|
||||
ld c,22h
|
||||
rst 10h
|
||||
pop ix
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE intdos
|
||||
;
|
||||
; "dos.h"
|
||||
; ”ãªæ¨ï intdos ®áãé¥á⢫ï¥â ¢ë¯®«¥¨¥ á¨á⥬®£® „Ž‘-¢ë§®¢ (á ¢®§¢à ⮬
|
||||
; ä« £®¢ ãá«®¢¨©), ª®â®àë© ®¯à¥¤¥«¥ § 票ﬨ ॣ¨áâ஢, ®¡ê¥ëå ¢
|
||||
; union REGS *ri ¨ ¢®§¢à é ¥â १ã«ìâ â á¨á⥬®£® ¢ë§®¢ ¢ union REGS *ro.
|
||||
; ’¨¯ ®¡ê¥¤¨¥¨ï union REGS ®¡ê¥ ¢ "dos.h".
|
||||
; „«ï ®áãé¥á⢫¥¨ï á¨á⥬®£® ¢ë§®¢ intdos ¢ë¯®«ï¥â ª®¬ ¤ã RST 10h.
|
||||
; �¥à¥¤ ¢ë¯®«¥¨¥¬ ª®¬ ¤ë äãªæ¨ï ª®¯¨àã¥â ᮤ¥à¦¨¬®¥ union REGS *ri ¢
|
||||
; ᮮ⢥âáâ¢ãî騥 ॣ¨áâàë. �®á«¥ ¢ë¯®«¥¨ï ª®¬ ¤ë RST, äãªæ¨ï intdos
|
||||
; ª®¯¨àã¥â § 票ï ⥪ãé¨å ॣ¨áâ஢ ¢ union REGS *ro. Ž â ª¦¥ ª®¯¨àã¥â
|
||||
; ¢®§¢à é ¥¬ë© ä« £ ãá«®¢¨© á¨áâ¥¬ë ¢ ¯®«¥ flag, à §¬¥é¥®¥ ¢ union REGS *ro.
|
||||
; …᫨ íâ® ¯®«¥ ï¥âáï ¥ã«¥¢ë¬, ä« £ 㪠§ë¢ ¥â ãá«®¢¨¥ ®è¨¡ª¨.
|
||||
;
|
||||
; union REGS *ri - § 票ï ॣ¨áâ஢ ¯à¨ ¢ë§®¢¥
|
||||
; union REGS *ro - § 票ï ॣ¨áâ஢ ¯à¨ ¢®§¢à â¥
|
||||
;
|
||||
; in: hl = ¤à¥á union REGS *ri
|
||||
; de = ¤à¥á union REGS *ro
|
||||
; out: ¥â
|
||||
;
|
||||
; void intdos(union REGS *ri, union REGS *ro)
|
||||
;
|
||||
intdos_::
|
||||
push ix
|
||||
push de ; de=REGS *ro
|
||||
inc hl
|
||||
ld a,(hl) ;+1 a
|
||||
inc hl
|
||||
ld c,(hl) ;+2
|
||||
inc hl
|
||||
ld b,(hl) ;+3
|
||||
push bc
|
||||
inc hl
|
||||
ld e,(hl) ;+4
|
||||
inc hl
|
||||
ld d,(hl) ;+5
|
||||
push de
|
||||
inc hl
|
||||
ld e,(hl) ;+6 l
|
||||
inc hl
|
||||
ld d,(hl) ;+7 h
|
||||
inc hl
|
||||
ld c,(hl) ;+8 xl
|
||||
inc hl
|
||||
ld b,(hl) ;+9 xh
|
||||
push bc
|
||||
pop ix
|
||||
inc hl
|
||||
ld c,(hl) ;+10 yl
|
||||
inc hl
|
||||
ld b,(hl) ;+11 yh
|
||||
push bc
|
||||
pop iy
|
||||
ex de,hl ; hl
|
||||
pop de
|
||||
pop bc
|
||||
rst 10h ; á¨áâ¥¬ë© „Ž‘-¢ë§®¢
|
||||
ex (sp),hl ; hl=REGS *ro
|
||||
push bc
|
||||
push af
|
||||
pop bc
|
||||
ld (hl),c ;+0 flag
|
||||
inc hl
|
||||
ld (hl),b ;+1 a
|
||||
pop bc
|
||||
inc hl
|
||||
ld (hl),c ;+2
|
||||
inc hl
|
||||
ld (hl),b ;+3
|
||||
inc hl
|
||||
ld (hl),e ;+4
|
||||
inc hl
|
||||
ld (hl),d ;+5
|
||||
inc hl
|
||||
pop de
|
||||
ld (hl),e ;+6 l
|
||||
inc hl
|
||||
ld (hl),d ;+7 h
|
||||
push ix
|
||||
pop bc
|
||||
inc hl
|
||||
ld (hl),c ;+8 xl
|
||||
inc hl
|
||||
ld (hl),b ;+9 xh
|
||||
push iy
|
||||
pop bc
|
||||
inc hl
|
||||
ld (hl),c ;+10 yl
|
||||
inc hl
|
||||
ld (hl),b ;+11 yh
|
||||
pop ix
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE ffirst
|
||||
;
|
||||
; "dos.h"
|
||||
; ”ãªæ¨ï ffirst ¯à®¨§¢®¤¨â ¯®¨áª § ¤ ®£® ¢ pathname ä ©« ¨§ £à㯯ë
|
||||
; ä ©«®¢. €à£ã¬¥â pathname ¬®¦¥â ᮤ¥à¦ âì ¨¬ï ¤¨áª ¨ ª â «®£ ¤«ï ¯®¨áª .
|
||||
; ‚ ¨¬¥¨ ä ©« ¤®¯ã᪠îâáï £«®¡ «ìë¥ á¨¬¢®«ë ? ¨ *. ˆ¬ï ©¤¥®£® ä ©«
|
||||
; 室¨âáï ¢ ä®à¬ ⥠DOS "filename.ext".
|
||||
; ”ãªæ¨ï _ffirst ®â«¨ç ¥âáï ®â äãªæ¨¨ ffirst ⥬, çâ® ¢®§¢à é ¥â ¨¬ï
|
||||
; ©¤¥®£® ä ©« ¢ ä®à¬ ⥠"FilenameExt".
|
||||
; …᫨ ä ©« ®¡ à㦥, äãªæ¨ï § ¯®«ï¥â áâàãªâãàã (®¯à¥¤¥«¥ãî ¢ "dos.h"),
|
||||
; ª®â®àãî 㪠§ë¢ ¥â à£ã¬¥â ffblk.
|
||||
; €à£ã¬¥â attr ᮤ¥à¦¨â âਡãâ(ë) ä ©«®¢ ¤«ï ¯®¨áª ¨ ¬®¦¥â ¯à¨¨¬ âì
|
||||
; á«¥¤ãî騥 § 票ï, ®¯à¥¤¥«¥ë¥ ¢ "dos.h":
|
||||
;
|
||||
; FA_NORMAL Ž¡ëçë© ä ©«
|
||||
; FA_RDONLY ’®«ìª® ç⥨¥
|
||||
; FA_HIDDEN ‘ªàëâë© ä ©«
|
||||
; FA_SYSTEM ‘¨áâ¥¬ë© ä ©«
|
||||
; FA_LABEL Œ¥âª ⮬
|
||||
; FA_DIREC Š â «®£
|
||||
; FA_ARCH €à娢ë©
|
||||
;
|
||||
; Œo¦o § ¤ ¢ âì ªà âë¥ § 票ï âਡã⮢, ¨á¯o«ì§ãï ᨬ¢o« "|"
|
||||
; (®¯¥à â®à OR).
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 0 ¯à¨ ãᯥ讬 § ¢¥à襨¨ ¯®¨áª .
|
||||
; …᫨ ä ©« ¥ ©¤¥ ¨«¨ ¢ ¨¬¥¨ ä ©« ¢áâà¥â¨« áì ª ª ï-«¨¡® ®è¨¡ª ,
|
||||
; ¢®§¢à é ¥âáï -1 ¨ errno ᮤ¥à¦¨â ®¬¥à ®è¨¡ª¨.
|
||||
;
|
||||
; char ffirst(char *pathname, FIND *ffblk, char attr)
|
||||
;
|
||||
_ffirst_::
|
||||
ld b,0 ; format "FilenameExt"
|
||||
jr @1
|
||||
|
||||
ffirst_::
|
||||
ld b,1 ; format "filename.ext"
|
||||
@1: ld a,c ; attr
|
||||
ld c,19h ; f_first
|
||||
push ix
|
||||
rst 10h
|
||||
pop ix
|
||||
ld (errno_##),a
|
||||
ld a,0
|
||||
ret nc
|
||||
dec a
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE fnext
|
||||
;
|
||||
; "dos.h"
|
||||
; ”ãªæ¨ï ¯à®¨§¢®¤¨â ¯®¨áª á«¥¤ãî饣® ᮢ¯ ¤ î饣® ä ©« .
|
||||
; �ਠª ¦¤®¬ ¢ë§®¢¥, äãªæ¨ï ¢®§¢à é ¥â ®¤® ¨¬ï ä ©« , ¤® â¥å ¯®à, ¯®ª
|
||||
; ¯ à ¬¥âàë ä ©« ¡ã¤ãâ ¯®¤å®¤¨âì ¯®¤ § ¤ ë¥ ¯ à ¬¥âàë ¯®¨áª .
|
||||
; €à£ã¬¥â ffblk ¤®«¦¥ 㪠§ë¢ âì áâàãªâãàã (®¯à¥¤¥«¥ãî ¢ "dos.h"),
|
||||
; ¯à¥¤¢ à¨â¥«ì® § ¯®«¥ãî äãªæ¨¥© ffirst.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 0 ¯à¨ ãᯥ讬 § ¢¥à襨¨ ¯®¨áª .
|
||||
; …᫨ ä ©« ¥ ©¤¥ ¨«¨ ¢ ¨¬¥¨ ä ©« ¢áâà¥â¨« áì ª ª ï-«¨¡® ®è¨¡ª ,
|
||||
; ¢®§¢à é ¥âáï -1 ¨ errno ᮤ¥à¦¨â ®¬¥à ®è¨¡ª¨.
|
||||
;
|
||||
; char fnext(FIND *ffblk)
|
||||
;
|
||||
fnext_::
|
||||
ex de,hl
|
||||
ld c,1Ah ; f_next
|
||||
push ix
|
||||
rst 10h
|
||||
pop ix
|
||||
ld (errno_##),a
|
||||
ld a,0
|
||||
ret nc
|
||||
dec a
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
Vendored
+1174
File diff suppressed because it is too large
Load Diff
+660
@@ -0,0 +1,660 @@
|
||||
; ‚室ï騥 äãªæ¨¨:
|
||||
;
|
||||
; sbrk (¢ë¤¥«. ¡«®ª ¯ ¬ï⨠¬¥¦¤ã 㪠§. ᢮¡. ¯ ¬ï⨠"$MEMRY" ¨ á⥪®¬)
|
||||
; brk
|
||||
; free
|
||||
; malloc
|
||||
; calloc
|
||||
; realoc
|
||||
;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
MODULE sbrk
|
||||
;
|
||||
; "malloc.h"
|
||||
; ‚뤥«ï¥â ¡«®ª ¤«¨®© n ¢ ¯à¥¤¥«ïå ¬¥¦¤ã 㪠§ ⥫¥¬
|
||||
; ᢮¡®¤®© ¯ ¬ï⨠¨ 㪠§ ⥫¥¬ á⥪ .
|
||||
; ‡ 票¥ n ¬®¦¥â ¡ëâì ®âà¨æ ⥫ìë¬, ⮣¤ ª®«¨ç¥á⢮
|
||||
; § å¢ ç¥®© ¯ ¬ï⨠㬥ìè ¥âáï n ¡ ©â®¢.
|
||||
; �ਠãᯥ讬 ¢ë¤¥«¥¨¨ ¢®§¢à é ¥â 㪠§ â¥«ì ¢ë¤¥-
|
||||
; «¥ë© ¡«®ª.
|
||||
; …᫨ ¯ ¬ï⨠¥¤®áâ â®ç®, ¢®§¢à é ¥â -1 (0FFFFh).
|
||||
;
|
||||
; in: hl = à §¬¥à ¡«®ª
|
||||
; out: hl = 㪠§ â¥«ì ¢ë¤¥«. ¡«®ª, ¥á«¨ Ok.
|
||||
; hl = -1 ¯à¨ ¥¤®áâ ⪥ ¯ ¬ïâ¨.
|
||||
;
|
||||
; char *sbrk(int n)
|
||||
;
|
||||
sbrk_::
|
||||
ld de,($MEMRY) ; ¤à¥á 㪠§ ⥫ï ᢮¡. ¯ ¬ïâ¨
|
||||
add hl,de
|
||||
jr c,sbrkerr ; ¯¥à¥¯®«. ç¨á«
|
||||
call brk_
|
||||
ld a,h
|
||||
and l
|
||||
inc a
|
||||
ret z ; ®è¨¡ª
|
||||
ex de,hl ; hl= ç «® ¢ë¤¥«. ¡«®ª
|
||||
ret
|
||||
|
||||
; Set free memory pointer.
|
||||
; int brk(int n)
|
||||
brk_::
|
||||
push hl
|
||||
inc h
|
||||
inc h ; + 512 bytes reserved
|
||||
or a
|
||||
sbc hl,sp ; ¢ë¤¥«¨âì ¯ ¬ïâì
|
||||
pop hl
|
||||
jr nc,sbrkerr ; ¬ «® ¯ ¬ïâ¨
|
||||
ld ($MEMRY),hl ; ®¢®¥ ¯®«®¦. 㪠§ ⥫ï ᢮¡. ¯ ¬ïâ¨
|
||||
ret
|
||||
;
|
||||
sbrkerr:ld hl,-1 ; EOF ®è¨¡ª
|
||||
ret
|
||||
|
||||
; 㪠§ ⥫ì ç « ᢮¡®¤®© ¯ ¬ï⨠(¤® á⥪ )
|
||||
$MEMRY::
|
||||
dw 0 ; § ¯®«ï¥âáï «¨ª¥à®¬!
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE free
|
||||
;
|
||||
; "malloc.h", "stdlib.h"
|
||||
; ”ãªæ¨ï ®á¢®¡®¦¤ ¥â ¡«®ª ¯ ¬ïâ¨.
|
||||
; €à£ã¬¥â ptr 㪠§ë¢ ¥â à ¥¥ § å¢ ç¥ë© ¡«®ª
|
||||
; ¯ ¬ï⨠¯®á।á⢮¬ ¢ë§®¢ malloc, calloc, realloc.
|
||||
; ‚®§¢à é ¥¬®£® § ç¥¨ï ¥â.
|
||||
;
|
||||
; void free(char *ptr)
|
||||
;
|
||||
free_::
|
||||
dec hl
|
||||
dec hl
|
||||
dec hl
|
||||
dec hl ; ç «® § £®«®¢ª ¡«®ª
|
||||
ld c,l
|
||||
ld b,h
|
||||
ld hl,(_alloc_)
|
||||
ld (?49+1),hl
|
||||
ex de,hl
|
||||
@22: ld a,e
|
||||
sub c
|
||||
ld a,d
|
||||
sbc a,b
|
||||
jr nc,@19
|
||||
ld l,e
|
||||
ld h,d
|
||||
ld a,c
|
||||
sub (hl)
|
||||
inc hl
|
||||
ld a,b
|
||||
sbc a,(hl)
|
||||
jr c,@20
|
||||
@19: ld l,e
|
||||
ld h,d
|
||||
ld a,e
|
||||
sub (hl)
|
||||
inc hl
|
||||
ld a,d
|
||||
sbc a,(hl)
|
||||
jr c,@21
|
||||
ld a,e
|
||||
sub c
|
||||
ld a,d
|
||||
sbc a,b
|
||||
jr c,@20
|
||||
ld l,e
|
||||
ld h,d
|
||||
ld a,c
|
||||
sub (hl)
|
||||
inc hl
|
||||
ld a,b
|
||||
sbc a,(hl)
|
||||
jr c,@20
|
||||
@21: ex de,hl
|
||||
ld e,(hl)
|
||||
inc hl
|
||||
ld d,(hl)
|
||||
ld (?49+1),de
|
||||
jr @22
|
||||
;
|
||||
@20: ld l,e
|
||||
ld h,d
|
||||
ld (?48+1),bc
|
||||
ld c,(hl)
|
||||
inc hl
|
||||
ld b,(hl)
|
||||
push bc
|
||||
?48: ld bc,0 ; á®åà. § 票¥
|
||||
ld hl,2
|
||||
add hl,bc
|
||||
ld a,(hl)
|
||||
inc hl
|
||||
ld h,(hl)
|
||||
ld l,a
|
||||
add hl,hl ;1+1=2
|
||||
add hl,hl ;2+2=4
|
||||
add hl,bc
|
||||
ld (?48+1),bc
|
||||
pop bc
|
||||
push de
|
||||
ld a,l
|
||||
cp c
|
||||
jr nz,$+4
|
||||
ld a,h
|
||||
cp b
|
||||
jr nz,@23
|
||||
ld hl,(?48+1)
|
||||
push hl
|
||||
inc hl
|
||||
inc hl
|
||||
ld e,(hl)
|
||||
inc hl
|
||||
ld d,(hl)
|
||||
push hl
|
||||
?49: ld hl,0 ; á®åà. § 票¥
|
||||
ld a,(hl)
|
||||
inc hl
|
||||
ld h,(hl)
|
||||
ld l,a
|
||||
inc hl
|
||||
inc hl
|
||||
ld a,(hl)
|
||||
inc hl
|
||||
ld h,(hl)
|
||||
ld l,a
|
||||
add hl,de
|
||||
ex de,hl
|
||||
pop hl
|
||||
ld (hl),d
|
||||
dec hl
|
||||
ld (hl),e
|
||||
ld hl,(?49+1)
|
||||
ld a,(hl)
|
||||
inc hl
|
||||
ld h,(hl)
|
||||
ld l,a
|
||||
ld c,(hl)
|
||||
inc hl
|
||||
ld b,(hl)
|
||||
pop hl
|
||||
ld (hl),c
|
||||
inc hl
|
||||
ld (hl),b
|
||||
jr @24
|
||||
;
|
||||
@23: ex de,hl
|
||||
ld c,(hl)
|
||||
inc hl
|
||||
ld b,(hl)
|
||||
ld hl,(?48+1)
|
||||
ld (hl),c
|
||||
inc hl
|
||||
ld (hl),b
|
||||
@24: pop de
|
||||
ld hl,2
|
||||
add hl,de
|
||||
ld a,(hl)
|
||||
inc hl
|
||||
ld h,(hl)
|
||||
ld l,a
|
||||
add hl,hl
|
||||
add hl,hl
|
||||
add hl,de
|
||||
push de
|
||||
ld bc,(?48+1)
|
||||
ld a,l
|
||||
cp c
|
||||
jr nz,$+4
|
||||
ld a,h
|
||||
cp b
|
||||
jr nz,@25
|
||||
ld hl,2
|
||||
add hl,de
|
||||
push de
|
||||
ld e,(hl)
|
||||
inc hl
|
||||
ld d,(hl)
|
||||
push hl
|
||||
ld hl,2
|
||||
add hl,bc
|
||||
ld a,(hl)
|
||||
inc hl
|
||||
ld h,(hl)
|
||||
ld l,a
|
||||
add hl,de
|
||||
ex de,hl
|
||||
pop hl
|
||||
ld (hl),d
|
||||
dec hl
|
||||
ld (hl),e
|
||||
ld l,c
|
||||
ld h,b
|
||||
ld c,(hl)
|
||||
inc hl
|
||||
ld b,(hl)
|
||||
pop de
|
||||
ex de,hl
|
||||
ld (hl),c
|
||||
inc hl
|
||||
ld (hl),b
|
||||
jr @26
|
||||
;
|
||||
@25: ex de,hl
|
||||
ld (hl),c
|
||||
inc hl
|
||||
ld (hl),b
|
||||
@26: pop hl
|
||||
ld (_alloc_),hl
|
||||
ret
|
||||
|
||||
; ï祩ª ¤à¥á ¢ë¤¥«. ¡«®ª ¯ ¬ïâ¨
|
||||
_alloc_::
|
||||
dw 0
|
||||
|
||||
dseg
|
||||
; áâàãªâãà § £®«®¢ª ¡«®ª
|
||||
_base_::
|
||||
dw 0 ; addr next free block
|
||||
dw 0 ; size of this free block
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE malloc
|
||||
;
|
||||
; "malloc.h", "stdlib.h"
|
||||
; ”ãªæ¨ï § å¢ âë¢ ¥â ¡«®ª ¯ ¬ïâ¨ à §¬¥à®¬ ¢ size ¡ ©â®¢.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ â¥«ì ¢ë¤¥«¥ë© ¡«®ª ¯ ¬ïâ¨.
|
||||
; …᫨ ᢮¡®¤®© ¯ ¬ï⨠¥¤®áâ â®ç®, ¢®§¢à é ¥âáï NULL.
|
||||
;
|
||||
; char *malloc(int size)
|
||||
;
|
||||
malloc_::
|
||||
inc hl
|
||||
inc hl
|
||||
inc hl
|
||||
srl h ; hl/4
|
||||
rr l
|
||||
srl h
|
||||
rr l
|
||||
inc hl
|
||||
ld (units+1),hl ; à §¬¥à ®¢®£® ¡«®ª
|
||||
ld hl,(_alloc_##)
|
||||
ld a,l
|
||||
or h
|
||||
jr nz,@0
|
||||
ld (_base_##+2),hl ; á¡à. à §¬¥à ¢ë¤¥«. ¡«®ª
|
||||
ld hl,_base_## ; áâàãªâãà § £®«®¢ª ¡«®ª
|
||||
ld (_alloc_##),hl ; ¤à¥á ¢ë¤¥«. ¡«®ª
|
||||
ld (_base_##),hl ; ¤à¥á á«¥¤. § £®«®¢ª
|
||||
;
|
||||
@0: ld (prev+1),hl
|
||||
ld a,(hl)
|
||||
inc hl
|
||||
ld h,(hl)
|
||||
ld l,a
|
||||
ld (tp+1),hl ; hl=_base_
|
||||
@3: ld hl,(tp+1)
|
||||
ld c,(hl)
|
||||
inc hl
|
||||
ld b,(hl)
|
||||
ld a,l
|
||||
cp c
|
||||
jp nz,@1
|
||||
ld a,h
|
||||
cp b
|
||||
jp z,@1
|
||||
inc hl
|
||||
ld a,(hl)
|
||||
inc hl
|
||||
ld h,(hl)
|
||||
ld l,a
|
||||
add hl,hl ; *4
|
||||
add hl,hl ;
|
||||
ex de,hl
|
||||
ld hl,(tp+1)
|
||||
add hl,de
|
||||
ld a,l
|
||||
cp c
|
||||
jp nz,@1
|
||||
ld a,h
|
||||
cp b
|
||||
jp nz,@1
|
||||
ld hl,(tp+1)
|
||||
ld e,l;
|
||||
ld d,h;
|
||||
ld c,(hl)
|
||||
inc hl
|
||||
ld b,(hl)
|
||||
ld hl,(_alloc_##)
|
||||
ld a,l
|
||||
cp c
|
||||
jr nz,@2
|
||||
ld a,h
|
||||
cp b
|
||||
jr nz,@2
|
||||
;ld hl,(tp+1)
|
||||
ld l,e;
|
||||
ld h,d;
|
||||
ld a,(hl)
|
||||
inc hl
|
||||
ld h,(hl)
|
||||
ld l,a
|
||||
ld a,(hl)
|
||||
inc hl
|
||||
ld h,(hl)
|
||||
ld l,a
|
||||
ld (_alloc_##),hl
|
||||
@2: ;ld hl,(tp+1)
|
||||
ex de,hl;
|
||||
ld c,l;
|
||||
ld b,h;
|
||||
inc hl
|
||||
inc hl
|
||||
ld e,(hl)
|
||||
inc hl
|
||||
ld d,(hl)
|
||||
push hl
|
||||
;ld hl,(tp+1)
|
||||
ld l,c;
|
||||
ld h,b;
|
||||
ld a,(hl)
|
||||
inc hl
|
||||
ld h,(hl)
|
||||
ld l,a
|
||||
inc hl
|
||||
inc hl
|
||||
ld a,(hl)
|
||||
inc hl
|
||||
ld h,(hl)
|
||||
ld l,a
|
||||
add hl,de
|
||||
ex de,hl
|
||||
pop hl
|
||||
ld (hl),d
|
||||
dec hl
|
||||
ld (hl),e
|
||||
;ld hl,(tp+1)
|
||||
ld l,c;
|
||||
ld h,b;
|
||||
ld a,(hl)
|
||||
inc hl
|
||||
ld h,(hl)
|
||||
ld l,a
|
||||
;ld c,(hl)
|
||||
;inc hl
|
||||
;ld b,(hl)
|
||||
;ld hl,(tp+1)
|
||||
;ld (hl),c
|
||||
;inc hl
|
||||
;ld (hl),b
|
||||
ld a,(hl);
|
||||
ld (bc),a;
|
||||
inc hl;
|
||||
inc bc;
|
||||
ld a,(hl);
|
||||
ld (bc),a;
|
||||
jp @3
|
||||
;
|
||||
@1: ld hl,(tp+1)
|
||||
inc hl
|
||||
inc hl
|
||||
ld c,(hl)
|
||||
inc hl
|
||||
ld b,(hl)
|
||||
units: ld hl,0 ; à §¬¥à ®¢®£® ¡«®ª
|
||||
ld a,c
|
||||
sub l
|
||||
ld a,b
|
||||
sbc a,h
|
||||
jp c,@4
|
||||
ld hl,(tp+1)
|
||||
ld e,l;
|
||||
ld d,h;
|
||||
inc hl
|
||||
inc hl
|
||||
ld c,(hl)
|
||||
inc hl
|
||||
ld b,(hl)
|
||||
ld hl,(units+1) ; à §¬¥à ®¢®£® ¡«®ª
|
||||
ld a,c
|
||||
cp l
|
||||
jr nz,@5
|
||||
ld a,b
|
||||
cp h
|
||||
jr nz,@5
|
||||
;ld hl,(tp+1)
|
||||
ex de,hl;
|
||||
ld c,(hl)
|
||||
inc hl
|
||||
ld b,(hl)
|
||||
prev: ld hl,0 ; á®åà. § 票¥
|
||||
ld (hl),c
|
||||
inc hl
|
||||
ld (hl),b
|
||||
jp @6
|
||||
;
|
||||
@5: ;ld hl,(units+1) ; hl=(units+1) à §¬¥à ®¢®£® ¡«®ª
|
||||
add hl,hl
|
||||
add hl,hl
|
||||
ex de,hl
|
||||
;ld hl,(tp+1)
|
||||
add hl,de
|
||||
ld (_alloc_##),hl
|
||||
ex de,hl
|
||||
ld hl,(prev+1)
|
||||
ld (hl),e
|
||||
inc hl
|
||||
ld (hl),d
|
||||
ld hl,(tp+1)
|
||||
ld c,(hl)
|
||||
inc hl
|
||||
ld b,(hl)
|
||||
;ld hl,(_alloc_##)
|
||||
ex de,hl;
|
||||
ld (hl),c
|
||||
inc hl
|
||||
ld (hl),b
|
||||
;ld hl,(tp+1)
|
||||
;inc hl
|
||||
ex de,hl;
|
||||
inc hl
|
||||
ld c,(hl)
|
||||
inc hl
|
||||
ld b,(hl)
|
||||
;ld hl,(units+1) ; à §¬¥à ®¢®£® ¡«®ª
|
||||
ld de,(units+1)
|
||||
ld a,c
|
||||
sub e ;l
|
||||
ld c,a
|
||||
ld a,b
|
||||
sbc a,d ;h
|
||||
ld b,a
|
||||
ld hl,(_alloc_##)
|
||||
inc hl
|
||||
inc hl
|
||||
ld (hl),c
|
||||
inc hl
|
||||
ld (hl),b
|
||||
;ld de,(units+1) ; à §¬¥à ®¢®£® ¡«®ª
|
||||
ld hl,(tp+1)
|
||||
inc hl
|
||||
inc hl
|
||||
ld (hl),e
|
||||
inc hl
|
||||
ld (hl),d
|
||||
@6: ld hl,(prev+1)
|
||||
ld (_alloc_##),hl
|
||||
tp: ld hl,0 ; á®åà. § 票¥
|
||||
ld (hl),0
|
||||
inc hl
|
||||
ld (hl),0
|
||||
inc hl
|
||||
inc hl
|
||||
inc hl ; ¯¥à¥©â¨ ¢ë¤¥«. ¡«®ª
|
||||
ret
|
||||
;
|
||||
@4: ld de,(tp+1)
|
||||
ld hl,(_alloc_##)
|
||||
ld a,e
|
||||
cp l
|
||||
jr nz,@7
|
||||
ld a,d
|
||||
cp h
|
||||
jr nz,@7
|
||||
ld hl,512
|
||||
call sbrk_##
|
||||
ld (tp+1),hl
|
||||
ld a,l
|
||||
and h
|
||||
inc a
|
||||
jr nz,@8
|
||||
inc hl ; NULL
|
||||
ret
|
||||
;
|
||||
@8: ld (hl),0
|
||||
inc hl
|
||||
ld (hl),0
|
||||
inc hl
|
||||
ld (hl),128 ; 512/sizeof(FREE)
|
||||
inc hl
|
||||
ld (hl),0
|
||||
inc hl
|
||||
call free_##
|
||||
ld hl,(_alloc_##)
|
||||
ld (tp+1),hl
|
||||
@7: ld hl,(tp+1)
|
||||
ld (prev+1),hl
|
||||
ld a,(hl)
|
||||
inc hl
|
||||
ld h,(hl)
|
||||
ld l,a
|
||||
ld (tp+1),hl
|
||||
jp @3
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE calloc
|
||||
;
|
||||
; "malloc.h", "stdlib.h"
|
||||
; ”ãªæ¨ï § å¢ âë¢ ¥â ¯à®áâà á⢮ ¤«ï åà ¥¨ï ¬ áᨢ ¨§ n í«¥¬¥â®¢,
|
||||
; ª ¦¤ë© à §¬¥à®¬ size ¡ ©â. Š ¦¤ë© í«¥¬¥â ¨¨æ¨ «¨§¨àã¥âáï ¢ 0.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ â¥«ì § å¢ ç¥®¥ ¯à®áâà á⢮.
|
||||
; …᫨ ¥¤®áâ â®ç® ¯ ¬ïâ¨, ¢®§¢à é ¥âáï § 票¥ NULL.
|
||||
;
|
||||
; char *calloc(int n, int size)
|
||||
;
|
||||
calloc_::
|
||||
call ?MULHD## ; n * size = à §¬¥à ¢á¥£® ¬ áᨢ
|
||||
ld (@34+1),hl
|
||||
call malloc_## ; ¢ë¤¥«¨âì ¯ ¬ïâì
|
||||
ld a,l
|
||||
or h
|
||||
ret z ; ¥¤®áâ â®ç® ¯ ¬ï⨠(hl=NULL)
|
||||
@34: ld bc,0 ; á®åà. à §¬¥à ¬ áᨢ
|
||||
ld (hl),0 ; ¡ ©â § ¯®«¥¨ï
|
||||
push hl
|
||||
ld d,h
|
||||
ld e,l
|
||||
inc de
|
||||
dec bc
|
||||
ldir
|
||||
pop hl ; Ok
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE realloc
|
||||
;
|
||||
; "malloc.h"
|
||||
; ”ãªæ¨ï ¨§¬¥ï¥â à §¬¥à à ¥¥ ¢ë¤¥«¥®£® ¡«®ª ¯ ¬ïâ¨.
|
||||
; €à£ã¬¥â ptr 㪠§ë¢ ¥â ç «® ¡«®ª . €à£ã¬¥â size § ¤ ¥â ®¢ë©
|
||||
; à §¬¥à ¡«®ª ¢ ¡ ©â å. ‘®¤¥à¦¨¬®¥ ¡«®ª ¥ ¨§¬¥ï¥âáï.
|
||||
; …᫨ size à ¢¥ 0, ¡«®ª ®á¢®¡®¦¤ ¥âáï ¨ ¢®§¢à é ¥âáï NULL.
|
||||
; …᫨ ptr à ¢¥ NULL, â® ®â¢®¤¨âáï (¯® malloc) size ¡ ©â®¢ ¯ ¬ïâ¨
|
||||
; ¨ ¢®§¢à é ¥âáï 㪠§ ⥫ì íâ®â ¡«®ª.
|
||||
; €à£ã¬¥â ptr ¬®¦¥â 㪠§ë¢ âì ¡«®ª, ª®â®àë© ¤®«¦¥ ¡ëâì ®á¢®¡®¦¤¥
|
||||
; ¯à¥¦¤¥, 祬 ¯®á«¥¤ãî⠢맮¢ë malloc, calloc, realloc.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ â¥«ì ¯¥à¥§ å¢ ç¥ë© ¡«®ª ¯ ¬ïâ¨.
|
||||
; �«®ª ¬®¦¥â ¡ëâì ¯¥à¥¤¢¨ãâ, ¥á«¨ ¥£® à §¬¥àë ¨§¬¥¥ë, ¯®í⮬ã à£ã-
|
||||
; ¬¥â ptr ¤«ï äãªæ¨¨ realloc ¥ ®¡ï§ â¥«ì® ¤®«¦¥ ¡ëâì â ª¨¬ ¦¥,
|
||||
; ª ª ¨ ¢®§¢à é ¥¬®¥ § 票¥.
|
||||
; ‚®§¢à é ¥âáï § 票¥ NULL, ¥á«¨ ¯ ¬ï⨠¥¤®áâ â®ç® ¤«ï à áè¨à¥¨ï
|
||||
; ¡«®ª ª § ¤ ®¬ã à §¬¥àã. �ਠí⮬ ¯¥à¢® ç «ìë© ¡«®ª ®áâ ¥âáï
|
||||
; ¥¨§¬¥ë¬.
|
||||
;
|
||||
; char *realloc(*ptr, int size);
|
||||
;
|
||||
realloc_::
|
||||
ld a,l
|
||||
or h
|
||||
jr nz,@0 ; *ptr != NULL
|
||||
ex de,hl
|
||||
jp malloc_##
|
||||
;
|
||||
@0: ld a,e
|
||||
or d
|
||||
jr nz,@1 ; size != 0
|
||||
call free_##
|
||||
ld hl,0 ; NULL
|
||||
ret
|
||||
;
|
||||
@1: push hl ; *ptr
|
||||
dec hl
|
||||
ld a,(hl)
|
||||
dec hl
|
||||
ld l,(hl) ; hl=à §¬¥à ¡«®ª ptr
|
||||
ld h,a
|
||||
add hl,hl ;
|
||||
add hl,hl ; *4
|
||||
dec hl
|
||||
dec hl
|
||||
dec hl
|
||||
dec hl
|
||||
ld (osize+1),hl
|
||||
pop hl
|
||||
push de ; size
|
||||
push hl ; ptr
|
||||
push de
|
||||
call free_##
|
||||
pop hl ; size
|
||||
call malloc_##
|
||||
ld (@3+1),hl ; ®¢ë© ¡«®ª
|
||||
pop de ; ptr
|
||||
pop bc ; size
|
||||
ld a,l
|
||||
or h
|
||||
jr z,@3 ; ®è¨¡ª
|
||||
; alloc != ptr
|
||||
ld a,l
|
||||
cp e
|
||||
jr nz,osize
|
||||
ld a,h
|
||||
cp d
|
||||
jr z,@3
|
||||
osize: ld hl,0 ; á®åà. § 票¥
|
||||
; size > osize ?
|
||||
ld a,l
|
||||
sub c
|
||||
ld a,h
|
||||
sbc a,b
|
||||
jr nc,@2 ; osize > size
|
||||
ld c,l ; bc=osize
|
||||
ld b,h
|
||||
@2: ex de,hl ; hl = *ptr
|
||||
ld de,(@3+1)
|
||||
call movmem_## ; hl=from, de=to, bc=size
|
||||
@3: ld hl,0 ; á®åà. 㪠§ â¥«ì ®¢ë© ¡«®ª
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
Vendored
+156
@@ -0,0 +1,156 @@
|
||||
; ‚室ï騥 äãªæ¨¨:
|
||||
;
|
||||
; movmem
|
||||
; memset
|
||||
; memcpy
|
||||
; memmove
|
||||
; memcmp
|
||||
;
|
||||
|
||||
|
||||
|
||||
|
||||
MODULE movmem
|
||||
;
|
||||
; "mem.h"
|
||||
; ”ãªæ¨ï movmem ª®¯¨àã¥â len ¡ ©â ¨§ source ¢ destin.
|
||||
; …᫨ ¨á室 ï ¨ १ã«ìâ¨àãîé¨ï áâப ¯¥à¥ªàë¢ îâáï,
|
||||
; ª®¯¨à®¢ ¨¥ ¢á¥-à ¢® ¯à®¨§¢®¤¨âáï ª®à४â®.
|
||||
;
|
||||
; ”ãªæ¨ï setmem ãáâ ¢«¨¢ ¥â ¯¥à¢ë¥ len ¡ ©â ¡«®ª addr
|
||||
; ¢ § 票¥ value.
|
||||
;
|
||||
; void movmem(*source, *destin, len)
|
||||
; void setmem(*addr, len, char value)
|
||||
;
|
||||
setmem_::
|
||||
ld a,b
|
||||
or c
|
||||
ret z
|
||||
ld (hl),e ; value
|
||||
ld e,l
|
||||
ld d,h
|
||||
inc de
|
||||
dec bc
|
||||
movmem_::
|
||||
ld a,b
|
||||
or c
|
||||
ret z
|
||||
ldir
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE memset
|
||||
;
|
||||
; "mem.h"
|
||||
; ”ãªæ¨ï § ¯®«ï¥â ¯¥à¢ë¥ count ¡ ©â ¡ãä¥à dest ᨬ¢®«®¬ "c".
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ â¥«ì ¡ãä¥à dest.
|
||||
;
|
||||
; void *memset(*dest, c, count)
|
||||
;
|
||||
memset_::
|
||||
push hl
|
||||
call setmem_##
|
||||
pop hl ; ¢¥àãâì ¤à¥á dest
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE memcpy
|
||||
;
|
||||
; "mem.h"
|
||||
; ”ãªæ¨ï ª®¯¨àã¥â count ¡ ©â®¢ ¨§ source ¢ dest.
|
||||
; …᫨ ¥ª®â®àë¥ ãç á⪨ source ¨ dest ¯¥à¥ªàë¢ îâáï, äãªæ¨ï
|
||||
; £ à â¨àã¥â, çâ® ¡ ©âë ¨§ ¯¥à¥ªàë¢ ¥¬®£® ãç á⪠, ¯à¨ ¤«¥-
|
||||
; ¦ 騥 source, ¡ã¤ãâ ᪮¯¨à®¢ ë ¯¥à¥¤ ¯¥à¥§ ¯¨áìî.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ ⥫ì dest.
|
||||
;
|
||||
; void *memcpy(*dest, *source, count)
|
||||
;
|
||||
memcpy_::
|
||||
ld a,b
|
||||
or c
|
||||
ret z ; count = 0
|
||||
push hl
|
||||
ex de,hl
|
||||
ldir
|
||||
pop hl ; ¢¥àãâì ¤à¥á dest
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE memmove
|
||||
;
|
||||
; "mem.h"
|
||||
; ”ãªæ¨ï ªo¯¨àãîâ count ¡ ©â®¢ ¨§ source ¢ dest.
|
||||
; …᫨ ¥ªoâoàë¥ o¡« á⨠¢ source ¨ dest ¯¥à¥ªàë¢ îâáï, äãªæ¨ï
|
||||
; £ à â¨àã¥â, çâo ¨áåo¤ë¥ source ¡ ©â ¨§ ¯¥à¥ªàë¢ î饩áï o¡« áâ¨
|
||||
; ¡ã¤ãâ áªo¯¨ào¢ ë ¯¥à¥¤ ¯¥à¥¯¨áë¢ ¨¥¬.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ ⥫ì dest.
|
||||
;
|
||||
; void *memmove(*dest, *source, count)
|
||||
;
|
||||
memmove_::
|
||||
ld a,b
|
||||
or c
|
||||
ret z ; count = 0
|
||||
push hl
|
||||
ex de,hl
|
||||
ld a,d
|
||||
cp h
|
||||
jr nz,@1
|
||||
ld a,e
|
||||
cp l
|
||||
@1: jr nc,@2
|
||||
ldir
|
||||
pop hl
|
||||
ret
|
||||
@2: add hl,bc
|
||||
ex de,hl
|
||||
add hl,bc
|
||||
ex de,hl
|
||||
lddr
|
||||
pop hl
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE memcmp
|
||||
;
|
||||
; "mem.h"
|
||||
; ”ãªæ¨ï ¯à®¨§¢®¤¨â ¯®á«¥¤®¢ ⥫쮥 «¥ªá¨£à ä. áà ¢¥¨¥
|
||||
; ¯¥à¢ëå count ¡ ©â®¢ ¨§ buf1 ¨ buf2, ¨ ¯à®¤®«¦ ¥â íâ®, ¯®ª
|
||||
; ®¨ ᮢ¯ ¤ îâ, «¨¡® ¯®ª ¥ ¢ë¯®«¨âáï § ¤ ®¥ ª®«¨ç¥á⢮
|
||||
; áà ¢¥¨© count.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â § 票¥, 㪠§ë¢ î饥 á®®â®è¥¨¥
|
||||
; íâ¨å ¡ãä¥à®¢:
|
||||
; < 0 buf1 < buf2
|
||||
; = 0 buf1 = buf2
|
||||
; > 0 buf1 > buf2
|
||||
;
|
||||
; int memcmp(*buf1, *buf2, count)
|
||||
;
|
||||
memcmp_::
|
||||
ld a,(de)
|
||||
sub (hl)
|
||||
jr nz,@1
|
||||
inc hl
|
||||
inc de
|
||||
dec bc
|
||||
ld a,b
|
||||
or c
|
||||
jp nz,memcmp_
|
||||
ld h,a ; hl = 0
|
||||
ld l,a
|
||||
ret
|
||||
@1: ld hl,1 ; hl = 1
|
||||
ret nc
|
||||
ld hl,-1 ; hl = -1
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
+566
@@ -0,0 +1,566 @@
|
||||
; ‚室ï騥 äãªæ¨¨:
|
||||
;
|
||||
; 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
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
;///////////////////////////////////////////////////////////////////////////
|
||||
;
|
||||
; C LIBRARY FOR SOLID C compiler
|
||||
; Root module
|
||||
;
|
||||
;///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
; ‚室ï騥 äãªæ¨¨:
|
||||
;
|
||||
; xmain
|
||||
; _exit
|
||||
; abort
|
||||
;
|
||||
|
||||
|
||||
|
||||
cseg
|
||||
|
||||
db "CLIB v0.01",0
|
||||
|
||||
|
||||
xmain::
|
||||
; á®§¤ âì ᯨ᮪ à£ã¬¥â®¢
|
||||
push ix
|
||||
pop hl ; ¤à¥á ª®¬. áâப¨
|
||||
call _setargv## ; ¢ dos.asm
|
||||
ld de,_argv_## ; ᯨ᮪ à£ã¬¥â®¢ (¢ dos.asm)
|
||||
|
||||
call _main_## ; ¢ stdio.asm
|
||||
|
||||
;
|
||||
; "stdlib.h"
|
||||
; ¯¥à¥¤ ¥âáï ã¯à ¢«¥¨¥ ¨§ äãªæ¨¨ exit.
|
||||
; ”ãªæ¨ï § ¢¥àè ¥â ¢ë§¢ ë© ¯à®æ¥áá ¡¥§ ®¡®¢«¥¨ï ¡ãä¥à®¢ ¯®â®ª .
|
||||
; ‡ 票¥ code ®¡ëç® ãáâ ¢«¨¢ ¥âáï ¢ 0 ¤«ï 㪠§ ¨ï ®à¬ «ì®£®
|
||||
; ¢ë室 ¨ ãáâ ¢«¨¢ ¥âáï ¢ «î¡®¥ ¤à㣮¥ § 票¥ ¤«ï ®¯à¥¤¥«¥¨ï ®è¨¡ª¨.
|
||||
; �®áª®«ìªã ¢ë§®¢ _exit ¥ ¢®§¢à é ¥â § 票ï, â® ¬«. ¡ ©â code ï¥âáï
|
||||
; ª®¤®¬ ¢®§¢à â ¤«ï த¨â¥«ì᪮£® ¯à®æ¥áá .
|
||||
; in: hl = § 票¥ error code
|
||||
; out: ¥â
|
||||
;
|
||||
; void _exit(int code)
|
||||
;
|
||||
_exit_::
|
||||
ld b,l
|
||||
ld c,41h ; terminate with error code
|
||||
rst 10h
|
||||
ret
|
||||
|
||||
;
|
||||
; "stdlib.h"
|
||||
; ”ãªæ¨ï ¢ë¢®¤¨â íªà á®®¡é¥¨¥ "Abnormal program termination."
|
||||
; (¥¯à¥¤¢¨¤¥®¥ § ¢¥à襨¥ ¯à®£à ¬¬ë) ¨ § ¢¥àè ¥â ¢ë§¢ ë© ¯à®æ¥áá
|
||||
; ¡¥§ ®¡®¢«¥¨ï ¡ãä¥à®¢ ¯®â®ª .
|
||||
; in: ¥â
|
||||
; out: ¥â
|
||||
;
|
||||
; void abort()
|
||||
;
|
||||
abort_::
|
||||
ld hl,@1
|
||||
ld c,5Ch
|
||||
rst 10h
|
||||
ld l,-1
|
||||
jr _exit_
|
||||
|
||||
dseg
|
||||
@1: db 0Dh,0Ah,"Abnormal program termination.",0Dh,0Ah,0Ah,0
|
||||
+1671
File diff suppressed because it is too large
Load Diff
+1485
File diff suppressed because it is too large
Load Diff
+947
@@ -0,0 +1,947 @@
|
||||
; ‚室ï騥 äãªæ¨¨:
|
||||
;
|
||||
; puts
|
||||
; printf
|
||||
; fprintf
|
||||
; cprintf
|
||||
; sprintf
|
||||
; scanf
|
||||
; fscanf
|
||||
; sscanf
|
||||
;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
MODULE puts
|
||||
;
|
||||
; "stdio.h"
|
||||
; ”ãªæ¨ï § ¯¨áë¢ ¥â ¢ë¡à ãî áâபã string ¢ áâ ¤ àâë© ¯®â®ª
|
||||
; ¢ë¢®¤ stdout, § ¬¥ïï ¢ ¢ë室®¬ ¯®â®ª¥ ã«¥¢®© ᨬ¢®« ®ª®ç ¨ï
|
||||
; áâப¨ ('\0') ᨬ¢®«®¬ ®¢®© áâப¨ ('\n').
|
||||
; ”ãªæ¨ï ¢á¥£¤ ¢®§¢à é ¥â ¯®á«¥¤¨© § ¯¨á ë© á¨¬¢®«, ª®â®àë¬
|
||||
; ï¥âáï ᨬ¢®« ®¢®© áâப¨ '\n'.
|
||||
;
|
||||
; in: hl = ¤à¥á áâப¨
|
||||
; out: a = ¯®á«¥¤¨© ᨬ¢®« áâப¨
|
||||
;
|
||||
; char puts(*string)
|
||||
;
|
||||
puts_::
|
||||
ld a,(hl)
|
||||
or a
|
||||
jr z,@1
|
||||
push hl
|
||||
call putch_##
|
||||
pop hl
|
||||
inc hl
|
||||
jp puts_
|
||||
;
|
||||
@1: ld a,0Ah
|
||||
push af
|
||||
call putch_##
|
||||
pop af
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE frmts
|
||||
;-----------------------------------------------------------
|
||||
; call from ..printf
|
||||
;-----------------------------------------------------------
|
||||
; in: hl = ¤à¥á ç « ¯ à ¬¥â஢
|
||||
; de = ¤à¥á ®¡à ¡®â稪
|
||||
; bc = ¤à¥á ¯¥à¥¤ ¢ ¥¬ëå ¯ à ¬¥â஢
|
||||
; out: hl = ç¨á«® ¢ë¢¥¤¥ëå ᨬ¢®«®¢, ¥á«¨ Ok
|
||||
; hl = ®âà¨æ ⥫쮥 § 票¥, ¯à¨ ®è¨¡ª¥
|
||||
;
|
||||
; int @spr@(char *fmt, char (* callback)(), int param)
|
||||
;
|
||||
;
|
||||
mk_num: ld (mn0+1),a ; base
|
||||
ld (chars+1),bc
|
||||
exx
|
||||
ld hl,number
|
||||
exx
|
||||
call mn0
|
||||
exx
|
||||
ld (hl),0
|
||||
exx
|
||||
ld hl,number
|
||||
ld a,(sign)
|
||||
or a
|
||||
ret z
|
||||
dec hl
|
||||
ret
|
||||
|
||||
;------------------------------------
|
||||
mn0: ld bc,200Ah
|
||||
xor a
|
||||
mn1: add hl,hl
|
||||
rl e
|
||||
rl d
|
||||
rla
|
||||
cp c
|
||||
jr c,mn2
|
||||
sub c
|
||||
inc l
|
||||
mn2: djnz mn1
|
||||
; DEHL-quot; A-rem
|
||||
push af
|
||||
ld a,d
|
||||
or e
|
||||
or h
|
||||
or l
|
||||
call nz,mn0
|
||||
pop af
|
||||
push hl
|
||||
chars: ld hl,char1 ; save char1 or char2
|
||||
ld c,a
|
||||
ld b,0
|
||||
add hl,bc
|
||||
ld a,(hl)
|
||||
pop hl
|
||||
exx
|
||||
ld (hl),a
|
||||
inc hl
|
||||
exx
|
||||
ret
|
||||
|
||||
;-------------------------------------------
|
||||
scan_length:
|
||||
xor a
|
||||
ld (flong),a ; false
|
||||
ld (fladj),a
|
||||
ld (flen+0),a ; make length = 0
|
||||
ld (flen+1),a
|
||||
ld a," "
|
||||
ld (padch),a ; space padding by default
|
||||
ld a,(hl)
|
||||
cp "-"
|
||||
jr nz,sl1
|
||||
ld (fladj),a ; all will be LEFT adjusted, not right
|
||||
inc hl
|
||||
sl1: ld a,(hl)
|
||||
cp "0"
|
||||
jr nz,sl2
|
||||
ld a,(fladj)
|
||||
or a
|
||||
jr nz,sl1a
|
||||
ld a,"0"
|
||||
ld (padch),a ; pad numbers with '0's, not spaces
|
||||
sl1a: inc hl
|
||||
sl2: ld de,0
|
||||
sl2a: ld a,(hl)
|
||||
sub "0"
|
||||
jr c,sl3
|
||||
cp 9+1
|
||||
jr nc,sl3
|
||||
ex de,hl
|
||||
ld c,l
|
||||
ld b,h
|
||||
add hl,hl
|
||||
add hl,hl
|
||||
add hl,bc
|
||||
add hl,hl
|
||||
ld b,0
|
||||
ld c,a
|
||||
add hl,bc
|
||||
ex de,hl
|
||||
inc hl
|
||||
jr sl2a
|
||||
;
|
||||
sl3: ld (flen),de ; set explicit length
|
||||
ld a,(hl)
|
||||
cp "l"
|
||||
jr z,sl4
|
||||
cp "L"
|
||||
ret nz
|
||||
sl4: ld (flong),a ; true
|
||||
inc hl
|
||||
ret
|
||||
|
||||
;--------------------------------------------
|
||||
_pad: dec hl
|
||||
bit 7,h
|
||||
ret nz
|
||||
push hl
|
||||
ld a,(padch)
|
||||
call outch
|
||||
pop hl
|
||||
ld de,(nprtd+1)
|
||||
inc de
|
||||
ld (nprtd+1),de
|
||||
jp _pad
|
||||
|
||||
;=====================================================================
|
||||
;
|
||||
; int @spr@(char *fmt,char (* callback)(), int param)
|
||||
;
|
||||
;=====================================================================
|
||||
@spr@:: ld (outch1+1),bc ; optional parameter
|
||||
ld (outch2+1),de ; callback pointer
|
||||
push hl
|
||||
pop iy ; at (iy+2) we have current parameter
|
||||
ld hl,0
|
||||
ld (nprtd+1),hl ; clear return value
|
||||
ld l,(iy+0) ; at iy we have pointer to format string
|
||||
ld h,(iy+1)
|
||||
loop: ld a,(hl)
|
||||
inc hl
|
||||
or a
|
||||
jr z,nprtd
|
||||
cp "%"
|
||||
jr z,loc3
|
||||
loc4: call outch
|
||||
ld de,(nprtd+1)
|
||||
inc de
|
||||
ld (nprtd+1),de
|
||||
jp loop
|
||||
;
|
||||
nprtd: ld hl,0 ; return value
|
||||
ret
|
||||
;
|
||||
loc3: ld a,(hl)
|
||||
inc hl
|
||||
cp "%"
|
||||
jr z,loc4
|
||||
dec hl
|
||||
call scan_length ; scan [-][0][0-9*][lL]
|
||||
ld a,(hl)
|
||||
inc hl
|
||||
cp "c"
|
||||
jp z,prt_c
|
||||
cp "C"
|
||||
jp z,prt_c ; print single character
|
||||
cp "d"
|
||||
jp z,prt_d
|
||||
cp "D"
|
||||
jp z,prt_d ; signed decimal
|
||||
cp "u"
|
||||
jp z,prt_u
|
||||
cp "U"
|
||||
jp z,prt_u ; unsigned decimal
|
||||
cp "o"
|
||||
jp z,prt_o
|
||||
cp "O"
|
||||
jp z,prt_o ; octal
|
||||
cp "x"
|
||||
jp z,prt_x1
|
||||
cp "X"
|
||||
jp z,prt_x2 ; hexadecimal
|
||||
cp "s"
|
||||
jp z,prt_s
|
||||
cp "S"
|
||||
jp z,prt_s ; string
|
||||
jp loop
|
||||
;
|
||||
; %c symbol
|
||||
prt_c: ld a,(iy+2)
|
||||
call outch
|
||||
ld de,(nprtd+1)
|
||||
inc de
|
||||
ld (nprtd+1),de
|
||||
prt_q: inc iy
|
||||
inc iy
|
||||
ld a,(flong)
|
||||
or a
|
||||
jp z,loop ; false
|
||||
inc iy
|
||||
inc iy
|
||||
jp loop
|
||||
;
|
||||
; %s string
|
||||
prt_s: ld a," "
|
||||
ld (padch),a
|
||||
push hl
|
||||
push iy
|
||||
ld l,(iy+2)
|
||||
ld h,(iy+3)
|
||||
fmt0: push hl
|
||||
call strlen_##
|
||||
ex de,hl
|
||||
ld hl,(flen)
|
||||
or a
|
||||
sbc hl,de
|
||||
ld (flen),hl
|
||||
ld a,(fladj)
|
||||
or a
|
||||
call z,_pad
|
||||
pop hl
|
||||
fmt1: ld a,(hl)
|
||||
inc hl
|
||||
or a
|
||||
jr z,fmt2
|
||||
call outch
|
||||
ld de,(nprtd+1)
|
||||
inc de
|
||||
ld (nprtd+1),de
|
||||
jp fmt1
|
||||
;
|
||||
fmt2: ld hl,(fladj)
|
||||
ld a,(flen)
|
||||
or a
|
||||
call nz,_pad
|
||||
pop iy
|
||||
pop hl
|
||||
jp prt_q
|
||||
;
|
||||
; %u unsigned decimal
|
||||
prt_u: push hl
|
||||
push iy
|
||||
call getnum
|
||||
jr fmt4
|
||||
;
|
||||
; %d signed decimal
|
||||
prt_d: push hl
|
||||
push iy
|
||||
call getnum
|
||||
ld a,(flong)
|
||||
or a
|
||||
jr nz,fmt3 ; true
|
||||
bit 7,h
|
||||
jr z,fmt3
|
||||
ld de,-1
|
||||
fmt3: bit 7,d
|
||||
jr z,fmt4
|
||||
ld a,"-"
|
||||
ld (sign),a
|
||||
xor a
|
||||
sub l
|
||||
ld l,a
|
||||
ld a,0
|
||||
sbc a,h
|
||||
ld h,a
|
||||
ld a,0
|
||||
sbc a,e
|
||||
ld e,a
|
||||
ld a,0
|
||||
sbc a,d
|
||||
ld d,a
|
||||
fmt4: ld a,10 ; base
|
||||
ld bc,char1
|
||||
call mk_num
|
||||
jp fmt0
|
||||
;
|
||||
; %o octal
|
||||
prt_o: push hl
|
||||
push iy
|
||||
call getnum
|
||||
ld a,8 ; base
|
||||
ld bc,char1
|
||||
call mk_num
|
||||
jp fmt0
|
||||
;
|
||||
; %X hex
|
||||
prt_x2: ld bc,char1
|
||||
prt_x: push hl
|
||||
push iy
|
||||
call getnum
|
||||
ld a,16 ; base
|
||||
call mk_num
|
||||
jp fmt0
|
||||
;
|
||||
; %x hex
|
||||
prt_x1: ld bc,char2
|
||||
jr prt_x
|
||||
|
||||
;---------------------------------------
|
||||
getnum: xor a
|
||||
ld (sign),a
|
||||
ld l,(iy+2)
|
||||
ld h,(iy+3)
|
||||
ld a,(flong)
|
||||
or a
|
||||
jr z,gnu1 ; false
|
||||
ld e,(iy+4)
|
||||
ld d,(iy+5)
|
||||
ret
|
||||
gnu1: ld de,0
|
||||
ret
|
||||
|
||||
;---------------------------------------
|
||||
outch: push hl
|
||||
push iy
|
||||
outch1: ld de,0 ; optional parameter
|
||||
outch2: call 0 ; callback pointer
|
||||
or a
|
||||
jr z,och1
|
||||
ld hl,8000h ; -32768
|
||||
ld (nprtd+1),hl
|
||||
och1: pop iy
|
||||
pop hl
|
||||
ret
|
||||
|
||||
char1: db "0123456789ABCDEF"
|
||||
char2: db "0123456789abcdef"
|
||||
|
||||
dseg
|
||||
flen: dw 0
|
||||
fladj: db 0
|
||||
flong: db 0 ; false/true
|
||||
padch: db " "
|
||||
;
|
||||
sign: db 0 ; § ª ç¨á«
|
||||
number: ds 16 ; ¡ãä¥à ç¨á«
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE xfputc
|
||||
;-----------------------------------------------------------
|
||||
; call from printf_, fprintf_
|
||||
;-----------------------------------------------------------
|
||||
; ”ãªæ¨ï ¢ë¢®¤¨â ᨬ¢®« ¢ ä ©« *fp.
|
||||
; �ਠ®è¨¡ª¥ ¢®§¢à é ¥âáï EOF (0FFFFh)
|
||||
; in: a = ¢ë¢®¤¨¬ë© ᨬ¢®«
|
||||
; out: hl=0 - Ok
|
||||
; hl=EOF (0FFFFh) - ®è¨¡ª
|
||||
;
|
||||
; int @fputc(c, FILE *fp)
|
||||
;
|
||||
@fputc::
|
||||
call fputc_## ; ¢ë¢®¤ ᨬ¢®« ¢ ¯®â®ª (ä ©«)
|
||||
ld hl,-1 ; ®è¨¡ª
|
||||
cp l
|
||||
ret z
|
||||
xor a
|
||||
inc hl ; Ok
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE printf
|
||||
;
|
||||
; "stdio.h"
|
||||
; ”ãªæ¨ï ¢ë¢®¤¨â ¤ ë¥ á ¯à¥®¡à §®¢ ¨¥¬ ä®à¬ â ¢ áâ ¤ àâë©
|
||||
; ¯®â®ª stdout ¨§ ¯¥à¥¬¥ëå, ®¯à¥¤¥«ï¥¬ëå à£ã¬¥â ¬¨ args.
|
||||
; Š ¦¤ë© à£ã¬¥â ¤®«¦¥ 㪠§ë¢ âì § 票¥ á ⨯®¬, ª®â®àë©
|
||||
; ᮮ⢥âáâ¢ã¥â ⨯ã, § ¤ ®¬ã ¢ áâப¥ ä®à¬ â .
|
||||
;
|
||||
; in: ¯ à ¬¥âàë ¢ á⥪¥
|
||||
; out: hl = ç¨á«® ¢ë¢¥¤¥ëå ᨬ¢®«®¢, ¥á«¨ Ok
|
||||
; hl = ®âà¨æ. § 票¥ (¨§ @spr@) ¯à¨ ®è¨¡ª¥
|
||||
;
|
||||
; int printf(char *format, arg1, arg2, ...)
|
||||
;
|
||||
printf_::
|
||||
ld bc,_iob_##-14 ; FILE-áâàãªâãà ¯®â®ª stdout
|
||||
ld de,@fputc## ; ¤à¥á ®¡à ¡®â稪
|
||||
ld hl,2
|
||||
add hl,sp ; ï祩ª á ¤à¥á®¬ arg1
|
||||
jp @spr@##
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE fprintf
|
||||
;
|
||||
; "stdio.h"
|
||||
; ”ãªæ¨ï ¢ë¢®¤¨â ¤ ë¥ á ¯à¥®¡à §®¢ ¨¥¬ ä®à¬ â ¢ ä ©« *fp
|
||||
; ¨§ ¯¥à¥¬¥ëå, ®¯à¥¤¥«ï¥¬ëå 㪠§ ⥫ﬨ à£ã¬¥â®¢ args.
|
||||
; Š ¦¤ë© à£ã¬¥â ¤®«¦¥ 㪠§ë¢ âì § 票¥ á ⨯®¬, ª®â®àë©
|
||||
; ᮮ⢥âáâ¢ã¥â ⨯ã, § ¤ ®¬ã ¢ áâப¥ ä®à¬ â .
|
||||
;
|
||||
; in: ¯ à ¬¥âàë ¢ á⥪¥
|
||||
; out: hl = ç¨á«® ¢ë¢¥¤. ᨬ¢®«®¢, ¥á«¨ Ok
|
||||
; hl = ®âà¨æ. § 票¥ (¨§ @spr@) ¯à¨ ®è¨¡ª¥
|
||||
;
|
||||
; int fprintf(FILE *fp, char *format, arg1, arg2, ...)
|
||||
;
|
||||
fprintf_::
|
||||
pop hl
|
||||
pop bc ; bc = ¤à¥á ä®à¬. áâப¨
|
||||
push bc
|
||||
push hl
|
||||
ld de,@fputc## ; ¤à¥á ®¡à ¡®â稪
|
||||
ld hl,4
|
||||
add hl,sp ; ï祩ª á ¤à¥á®¬ arg1
|
||||
jp @spr@##
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE cprintf
|
||||
;
|
||||
; "conio.h"
|
||||
; ”ãªæ¨ï ¢ë¢®¤¨â á ¯à¥®¡à §®¢ ¨¥¬ ä®à¬ â ¡®àë ᨬ¢®«®¢
|
||||
; ¨ § 票© ¯àאַ íªà .
|
||||
; Š ¦¤ë© à£ã¬¥â ¤®«¦¥ 㪠§ë¢ âì § 票¥ á ⨯®¬, ª®â®àë©
|
||||
; ᮮ⢥âáâ¢ã¥â ⨯ã, § ¤ ®¬ã ¢ áâப¥ ä®à¬ â .
|
||||
;
|
||||
; in: ¤ ë¥ ¢ á⥪¥
|
||||
; out: hl = ç¨á«® ¢ë¢¥¤. ᨬ¢®«®¢, ¥á«¨ Ok
|
||||
; hl = ®âà¨æ. § 票¥ (¨§ @spr@), ¯à¨ ®è¨¡ª¥
|
||||
;
|
||||
; int cprintf(char *format, arg1, arg2, ...)
|
||||
;
|
||||
putch@: call putch_##
|
||||
xor a
|
||||
ret
|
||||
|
||||
cprintf_::
|
||||
ld de,putch@ ; ¤à¥á ®¡à ¡®â稪
|
||||
ld hl,2
|
||||
add hl,sp ; ï祩ª á ¤à¥á®¬ arg1
|
||||
jp @spr@##
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE sprintf
|
||||
;
|
||||
; "stdio.h"
|
||||
; ”ãªæ¨ï ¯à¥®¡à §ã¥â ä®à¬ â ¨ ¢ë¢®¤¨â ¡®àë ᨬ¢®«®¢ ¨ § 票©
|
||||
; ¢ buffer. ‚ ª®¥æ ¢ë¢®¤¨¬®© áâப¨ § ¯¨áë¢ ¥âáï ã«ì.
|
||||
; Š ¦¤ë© à£ã¬¥â ¤®«¦¥ 㪠§ë¢ âì § 票¥ á ⨯®¬, ª®â®àë© á®®â-
|
||||
; ¢¥âáâ¢ã¥â ⨯ã, § ¤ ®¬ã ¢ áâப¥ ä®à¬ â .
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â ª®«¨ç¥á⢮ ᨬ¢®«®¢, § ¯¨á ëå ¢ buffer.
|
||||
;
|
||||
; int sprintf(char buffer, char *format, arg1, arg2, ...)
|
||||
;
|
||||
; in: de=ï祩ª , åà ïé ï ¤à¥á ¡ãä¥à
|
||||
@sspr@: ex de,hl
|
||||
ld e,(hl)
|
||||
inc hl
|
||||
ld d,(hl) ; de= ¤à¥á ¡ãä¥à
|
||||
ld (de),a ; á®åà. ᨬ¢®«
|
||||
inc de
|
||||
ld (hl),d ; á®åà. ⥪. ¤à¥á ¡ãä¥à ¢ á⥪¥
|
||||
dec hl
|
||||
ld (hl),e
|
||||
xor a
|
||||
ret
|
||||
|
||||
sprintf_::
|
||||
ld hl,2
|
||||
add hl,sp ; ï祩ª á ¤à¥á®¬ ¡ãä¥à
|
||||
ld c,l
|
||||
ld b,h
|
||||
ld de,@sspr@ ; ¤à¥á ®¡à ¡®â稪
|
||||
ld hl,4
|
||||
add hl,sp
|
||||
call @spr@##
|
||||
ex de,hl
|
||||
pop bc
|
||||
pop hl
|
||||
ld (hl),0 ; to end string
|
||||
push hl
|
||||
push bc
|
||||
ex de,hl ; hl=return value
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
|
||||
;[]============================ scanf ==================================[]
|
||||
|
||||
|
||||
MODULE xxscn
|
||||
;
|
||||
; call from _scn_
|
||||
;
|
||||
@igs@: ex de,hl
|
||||
@41: ld l,e
|
||||
ld h,d
|
||||
ld a,(hl)
|
||||
inc hl
|
||||
ld h,(hl)
|
||||
ld l,a
|
||||
ld a,(hl)
|
||||
cp " "
|
||||
jr z,@40
|
||||
cp 9 ; Tab
|
||||
jr z,@40
|
||||
cp 0Ah
|
||||
ret nz
|
||||
@40: ld l,e
|
||||
ld h,d
|
||||
push de
|
||||
ld e,(hl)
|
||||
inc hl
|
||||
ld d,(hl)
|
||||
inc de
|
||||
ld (hl),d
|
||||
dec hl
|
||||
ld (hl),e
|
||||
pop de
|
||||
jr @41
|
||||
|
||||
; ¢ë室: hl= ¢®§¢à. ¡ ©â
|
||||
@bc@: ld hl,@46+1
|
||||
ld (hl),e ; ¡ § ç¨á¥«
|
||||
call toupper_##
|
||||
cp "A"
|
||||
jr c,@42
|
||||
cp "Z"+1
|
||||
jr c,@43
|
||||
@42: cp "a"
|
||||
jr c,@44
|
||||
cp "z"+1
|
||||
jr c,@43
|
||||
@44: cp "_"
|
||||
jr nz,@45
|
||||
@43: sub "7"
|
||||
jr @46
|
||||
;
|
||||
@45: cp "0"
|
||||
jr c,@47
|
||||
cp "9"+1
|
||||
jr nc,@47
|
||||
sub "0"
|
||||
jr @46
|
||||
;
|
||||
@47: ld hl,-1 ; ¢®§¢à. § 票¥
|
||||
ret
|
||||
;
|
||||
@46: ld l,0 ; á®åà. § 票¥
|
||||
cp l
|
||||
jr c,@48
|
||||
ld a,-1
|
||||
@48: ld l,a ; ¢®§¢à. ¡ ©â
|
||||
ld h,0
|
||||
ret
|
||||
|
||||
dseg
|
||||
?95: dw 0
|
||||
?99: dw 0
|
||||
?100: db 0 ; false/true
|
||||
?102: db 0
|
||||
?103: dw 0
|
||||
?104: dw 0
|
||||
?105: dw 0
|
||||
|
||||
cseg
|
||||
;
|
||||
; call from ..scanf
|
||||
;
|
||||
_scn_::
|
||||
ld (?95),hl
|
||||
ld l,e;
|
||||
ld h,d;
|
||||
inc de
|
||||
inc de
|
||||
;ld hl,-2
|
||||
;add hl,de
|
||||
ld a,(hl)
|
||||
inc hl
|
||||
ld h,(hl)
|
||||
ld l,a
|
||||
ld (?99),hl
|
||||
ld l,e
|
||||
ld h,d
|
||||
ld (?105),hl
|
||||
xor a
|
||||
ld (?102),a
|
||||
@50: ld hl,(?99)
|
||||
ld a,(hl)
|
||||
inc hl
|
||||
ld (?99),hl
|
||||
or a
|
||||
jp z,@49
|
||||
cp " "
|
||||
jr z,@50
|
||||
cp 9 ; Tab
|
||||
jr z,@50
|
||||
cp 0Ah
|
||||
jr z,@50
|
||||
cp "%"
|
||||
jp nz,@51
|
||||
push hl
|
||||
ld hl,1
|
||||
ld (?103),hl
|
||||
ld a,l ; a=true
|
||||
ld (?100),a
|
||||
ld a,10
|
||||
ld (?101+1),a ; ¡ § ç¨á¥«
|
||||
pop hl
|
||||
ld a,(hl)
|
||||
inc hl
|
||||
ld (?99),hl
|
||||
cp "*"
|
||||
jr nz,@52
|
||||
xor a ; false
|
||||
ld (?100),a
|
||||
ld a,(hl)
|
||||
inc hl
|
||||
ld (?99),hl
|
||||
@52: call toupper_##
|
||||
cp "X" ; hex
|
||||
jr z,@53
|
||||
cp "O" ; octal
|
||||
jr z,@54
|
||||
cp "D" ; decimal
|
||||
jr z,@55
|
||||
cp "U" ; unsigned
|
||||
jr z,@56
|
||||
cp "S" ; string
|
||||
jp z,@57
|
||||
cp "C" ; char
|
||||
jp z,@58
|
||||
jp @49
|
||||
;
|
||||
@53: ld a,16
|
||||
ld (?101+1),a ; ¡ § ç¨á¥«
|
||||
jr @56
|
||||
;
|
||||
@54: ld a,8
|
||||
ld (?101+1),a ; ¡ § ç¨á¥«
|
||||
jr @56
|
||||
;
|
||||
@55: ld hl,?95
|
||||
call @igs@
|
||||
cp "-"
|
||||
jr nz,@56
|
||||
ld hl,-1
|
||||
ld (?103),hl
|
||||
ld hl,(?95)
|
||||
inc hl
|
||||
ld (?95),hl
|
||||
;
|
||||
@56: ld hl,0
|
||||
ld (?104),hl
|
||||
ld hl,?95
|
||||
call @igs@
|
||||
?101: ld e,0 ; á®åà. § 票¥ (¡ § ç¨á¥«)
|
||||
call @bc@
|
||||
ld a,l
|
||||
and h
|
||||
inc a
|
||||
jp z,@49
|
||||
@60: ld a,(?101+1) ; ¡ § ç¨á¥«
|
||||
ld e,a
|
||||
push af
|
||||
ld hl,(?95)
|
||||
ld a,(hl)
|
||||
inc hl
|
||||
ld (?95),hl
|
||||
call @bc@
|
||||
ld a,l
|
||||
pop de
|
||||
ld e,d
|
||||
cp 0FFh
|
||||
jr z,@61
|
||||
push af
|
||||
ld d,0
|
||||
ld hl,(?104)
|
||||
call ?MULHD##
|
||||
pop de
|
||||
ld e,d
|
||||
ld d,0
|
||||
add hl,de
|
||||
ld (?104),hl
|
||||
jr @60
|
||||
;
|
||||
@61: ld hl,(?95)
|
||||
dec hl
|
||||
ld (?95),hl
|
||||
jp @62
|
||||
;
|
||||
@57: ld hl,?95
|
||||
call @igs@
|
||||
ld hl,(?105)
|
||||
ld c,(hl)
|
||||
inc hl
|
||||
ld b,(hl)
|
||||
@65: ld hl,(?95)
|
||||
ld a,(hl)
|
||||
inc hl
|
||||
ld (?95),hl
|
||||
ld e,a
|
||||
inc e
|
||||
dec e
|
||||
jr z,@63
|
||||
ld hl,(?99)
|
||||
ld a,(hl)
|
||||
cp e
|
||||
jr nz,@64
|
||||
inc hl
|
||||
ld (?99),hl
|
||||
jr @63
|
||||
;
|
||||
@64: ld a,(?100)
|
||||
or a
|
||||
jr z,@65 ; false
|
||||
ld a,e
|
||||
ld (bc),a
|
||||
inc bc
|
||||
jr @65
|
||||
;
|
||||
@63: ld hl,?100
|
||||
ld e,(hl)
|
||||
inc e
|
||||
dec e
|
||||
jp z,@50 ; false
|
||||
ld hl,(?102)
|
||||
inc l
|
||||
ld a,l
|
||||
ld (?102),a
|
||||
xor a
|
||||
ld (bc),a
|
||||
ld hl,(?105)
|
||||
inc hl
|
||||
inc hl
|
||||
ld (?105),hl
|
||||
jp @50
|
||||
;
|
||||
@58: ld hl,?100
|
||||
ld e,(hl)
|
||||
inc e
|
||||
dec e
|
||||
jr z,@66 ; false
|
||||
ld hl,(?95)
|
||||
ld a,(hl)
|
||||
ld hl,(?105)
|
||||
ld c,(hl)
|
||||
inc hl
|
||||
ld b,(hl)
|
||||
inc hl
|
||||
ld (?105),hl
|
||||
ld (bc),a
|
||||
ld hl,(?102)
|
||||
inc l
|
||||
ld a,l
|
||||
ld (?102),a
|
||||
@66: ld hl,(?95)
|
||||
inc hl
|
||||
ld (?95),hl
|
||||
jp @50
|
||||
;
|
||||
@62: ld a,(?100)
|
||||
or a
|
||||
jr z,@51 ; false
|
||||
ld de,(?103)
|
||||
ld hl,(?104)
|
||||
call ?MULHD##
|
||||
ex de,hl
|
||||
ld hl,(?105)
|
||||
inc hl
|
||||
inc hl
|
||||
ld (?105),hl
|
||||
dec hl
|
||||
dec hl
|
||||
ld a,(hl)
|
||||
inc hl
|
||||
ld h,(hl)
|
||||
ld l,a
|
||||
ld (hl),e
|
||||
inc hl
|
||||
ld (hl),d
|
||||
ld hl,(?102)
|
||||
inc l
|
||||
ld a,l
|
||||
ld (?102),a
|
||||
@51: ld hl,(?95)
|
||||
ld a,(hl)
|
||||
or a
|
||||
jp nz,@50
|
||||
@49: ld hl,(?102)
|
||||
ld h,0
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE scanf
|
||||
;
|
||||
; "stdio.h"
|
||||
; ”ãªæ¨ï ç¨â ¥â ¤ ë¥ á ¯à¥®¡à §®¢ ¨¥¬ ä®à¬ â ¨§ áâ ¤ à⮣®
|
||||
; ¯®â®ª stdin ¢ ¯¥à¥¬¥ë¥, ®¯à¥¤¥«ï¥¬ë¥ 㪠§ ⥫ﬨ à£ã¬¥â®¢ args.
|
||||
; Š ¦¤ë© à£ã¬¥â ¤®«¦¥ 㪠§ë¢ âì § 票¥ á ⨯®¬, ª®â®àë© á®®â-
|
||||
; ¢¥âáâ¢ã¥â ⨯ã, § ¤ ®¬ã ¢ áâப¥ ä®à¬ â .
|
||||
; ”ãªæ¨ï ¨á¯®«ì§ã¥â ¡ãä¥à ¢ ®¡« á⨠á⥪ , à §¬¥à®¬ 128 ¡ ©â.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â ç¨á«® ¯®«¥©, à §¤¥«¥ëå ᯥæ-ᨬ¢®« ¬¨.
|
||||
;
|
||||
; int scanf(char *format, arg1, arg2, ...)
|
||||
;
|
||||
scanf_::
|
||||
ld (@1+1),sp
|
||||
ld hl,-128 ; à §¬¥à ¡ãä¥à
|
||||
add hl,sp ; hl= ¤à¥á ¡ãä¥à ¢ á⥪¥
|
||||
ld sp,hl ; à ᯮ«®¦¨âì á⥪ ¨¦¥ ¡ãä¥à
|
||||
call gets_## ; ¢¢¥á⨠áâபã á ª®á®«¨
|
||||
ex de,hl
|
||||
ld hl,128+2
|
||||
add hl,sp
|
||||
ex de,hl ; hl=㪠§ â¥«ì ¡ãä¥à
|
||||
call _scn_##
|
||||
@1: ld sp,0
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE fscanf
|
||||
;
|
||||
; "stdio.h"
|
||||
; ”ãªæ¨ï ç¨â ¥â ¤ ë¥ á ¯à¥®¡à §®¢ ¨¥¬ ä®à¬ â ¨§ ä ©« *fp,
|
||||
; ¢ ¯¥à¥¬¥ë¥, ®¯à¥¤¥«ï¥¬ë¥ 㪠§ ⥫ﬨ à£ã¬¥â®¢ args.
|
||||
; Š ¦¤ë© à£ã¬¥â ¤®«¦¥ 㪠§ë¢ âì § 票¥ á ⨯®¬, ª®â®àë©
|
||||
; ᮮ⢥âáâ¢ã¥â ⨯ã, § ¤ ®¬ã ¢ áâப¥ ä®à¬ â .
|
||||
; ”ãªæ¨ï ¨á¯®«ì§ã¥â ¡ãä¥à ¢ ®¡« á⨠á⥪ , à §¬¥à®¬ 128 ¡ ©â.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â ç¨á«® ¯®«¥©, à §¤¥«¥ëå ᯥæ-ᨬ¢®« ¬¨.
|
||||
; �ਠ¤®á⨦¥¨¨ ª®æ ä ©« , ¢ë¤ ¥âáï EOF.
|
||||
;
|
||||
; int fscanf(FILE *fp, char *format, arg1, arg2, ...)
|
||||
;
|
||||
fscanf_::
|
||||
ld (@68+1),sp
|
||||
; ld (?137+1),hl ; ¤à¥á áâàãªâãàë ¤¥áªà.
|
||||
ld c,l; ; bc= ¤à¥á áâàãªâãàë ¤¥áªà.
|
||||
ld b,h;
|
||||
ld hl,-128
|
||||
add hl,sp
|
||||
ld sp,hl ; à ᯮ«®¦¨âì á⥪ ¨¦¥ ¡ãä¥à
|
||||
;?137: ld hl,0
|
||||
; call ?LAUHL;##
|
||||
; dw 132
|
||||
; ;
|
||||
; ld c,l ; bc= ¤à¥á áâàãªâãàë ¤¥áªà.
|
||||
; ld b,h
|
||||
ld de,127 ; ¬ ªá.¤«¨ áâப¨ + 1
|
||||
ld hl,0
|
||||
add hl,sp ; hl= ¤à¥á ¡ãä¥à ¢ ï祩ª¥ á⥪
|
||||
call fgets_## ; ¯®«ãç¨âì áâப㠨§ ä ©« (¯®â®ª )
|
||||
ld a,l
|
||||
or h
|
||||
jr nz,@67 ; ¡¥§ ®è¨¡®ª
|
||||
dec hl ; hl=EOF
|
||||
jr @68
|
||||
;
|
||||
@67: ex de,hl
|
||||
ld hl,132
|
||||
add hl,sp
|
||||
ex de,hl ; hl=㪠§ â¥«ì ¡ãä¥à
|
||||
call _scn_##
|
||||
@68: ld sp,0
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE sscanf
|
||||
;
|
||||
; "stdio.h"
|
||||
; ”ãªæ¨ï ç¨â ¥â ¤ ë¥ á ¯à¥®¡à §®¢ ¨¥¬ ä®à¬ â ¨§ buffer,
|
||||
; ¢ ¯¥à¥¬¥ë¥, ®¯à¥¤¥«ï¥¬ë¥ 㪠§ ⥫ﬨ à£ã¬¥â®¢ args.
|
||||
; Š ¦¤ë© à£ã¬¥â ¤®«¦¥ 㪠§ë¢ âì § 票¥ á ⨯®¬, ª®â®àë©
|
||||
; ᮮ⢥âáâ¢ã¥â ⨯ã, § ¤ ®¬ã ¢ áâப¥ ä®à¬ â .
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â ç¨á«® ¯®«¥©, à §¤¥«¥ëå ᯥæ-ᨬ¢®« ¬¨.
|
||||
;
|
||||
; int sscanf(char *buffer, char *format, arg1, arg2, ...)
|
||||
;
|
||||
sscanf_::
|
||||
ld hl,2
|
||||
add hl,sp
|
||||
ld e,(hl)
|
||||
inc hl
|
||||
ld d,(hl)
|
||||
inc hl
|
||||
ex de,hl
|
||||
jp _scn_##
|
||||
|
||||
ENDMODULE
|
||||
+554
@@ -0,0 +1,554 @@
|
||||
; ‚室ï騥 äãªæ¨¨:
|
||||
;
|
||||
; memchr
|
||||
; strcpy
|
||||
; strncpy
|
||||
; strcat
|
||||
; strncat
|
||||
; strcmp
|
||||
; strncmp
|
||||
; strchr
|
||||
; strcspn
|
||||
; strpbrk
|
||||
; strlen
|
||||
; strrchr
|
||||
; strlwr
|
||||
; strupr
|
||||
; strspn
|
||||
; strstr
|
||||
; strtok
|
||||
;
|
||||
|
||||
|
||||
|
||||
|
||||
MODULE memchr
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï ¨é¥â ¯¥à¢ë¥ count ¡ ©â ¢ buff á æ¥«ìî ®¡ à㦥¨ï
|
||||
; ¯¥à¢®£® ¯®ï¢«¥¨ï ᨬ¢®« "c". �®¨áª ¯à®¤®«¦ ¥âáï ¤® â¥å ¯®à,
|
||||
; ¯®ª ¥ ¡ã¤¥â ©¤¥ 㪠§ ë© á¨¬¢®« ¨«¨ ¥ ¡ã¤ã⠯஢¥à¥ë
|
||||
; ¢á¥ count ¡ ©âë.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ ⥫ì à ᯮ«®¦¥¨¥ ᨬ¢®« "c" ¢ buff.
|
||||
; …᫨ ᨬ¢®« "c" ¥ ®¡ à㦥 ¢ ¯¥à¢ëå count ¡ ©â å buff, ¢®§¢à -
|
||||
; é ¥âáï NULL.
|
||||
;
|
||||
; void *memchr(char *buff, c, count)
|
||||
;
|
||||
memchr_::
|
||||
ld a,e ; ᨬ¢®«
|
||||
cpir
|
||||
dec hl
|
||||
ret z ; ©¤¥
|
||||
ld hl,0 ; NULL
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strcpy
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï ª®¯¨àã¥â s2 ¢ s1 (¢ª«îç ï 0-© ᨬ¢®« ®ª®ç ¨ï áâப¨).
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ ⥫ì s1.
|
||||
;
|
||||
; char *strcpy(*s1, *s2)
|
||||
;
|
||||
strcpy_::
|
||||
ex de,hl
|
||||
push de
|
||||
@1: ld a,(hl)
|
||||
ldi
|
||||
or a
|
||||
jp nz,@1
|
||||
pop hl ; ¢¥àãâì ¤à¥á s1
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strncpy
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï ª®¯¨àã¥â â®ç® count ᨬ¢®«®¢ áâப¨ s2 ¢ áâபã s1.
|
||||
; …᫨ count ¬¥ìè¥ ¤«¨ë s2, ã«¥¢®© ᨬ¢®« ®ª®ç ¨ï áâப¨
|
||||
; ¥ ¤®¡ ¢«ï¥âáï ª áâப¥ s1. …᫨ count ¡®«ìè¥ ¤«¨ë s2, â®
|
||||
; s1 § ¯®«ï¥âáï ã«¥¢ë¬¨ ᨬ¢®« ¬¨, ¢¯«®âì ¤® ¤®á⨦¥¨ï ¤«¨ë
|
||||
; count.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ ⥫ì s1.
|
||||
;
|
||||
; char *strncpy(*s1, *s2, count)
|
||||
;
|
||||
strncpy_::
|
||||
ex de,hl
|
||||
push de
|
||||
@2: ld a,(hl)
|
||||
@3: ldi
|
||||
jp pe,@4
|
||||
or a
|
||||
jp nz,@2
|
||||
dec hl
|
||||
jp @3
|
||||
;
|
||||
@4: pop hl ; ¢¥àãâì ¤à¥á s1
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strcat
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï ¤®¡ ¢«ï¥â s2 ª s1, § ¢¥àè ï áâபã s1
|
||||
; ã«¥¢ë¬ ᨬ¢®«®¬.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ ⥫ì s1.
|
||||
;
|
||||
; char *strcat(*s1, *s2)
|
||||
;
|
||||
strcat_::
|
||||
xor a
|
||||
ld b,a
|
||||
ld c,a
|
||||
push hl
|
||||
cpir
|
||||
dec hl
|
||||
ex de,hl
|
||||
@1: ld a,(hl)
|
||||
ldi
|
||||
or a
|
||||
jp nz,@1
|
||||
pop hl ; ¢¥àãâì ¤à¥á s1
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strncat
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï ¤®¡ ¢«ï¥â count ᨬ¢®«®¢ áâப¨ s2 ¢ ª®¥æ áâப¨ s1,
|
||||
; § ¢¥àè ï áâபã s1 ã«¥¢ë¬ ᨬ¢®«®¬.
|
||||
; ‚ s1 ¤®«¦® ¡ëâì ¤®áâ â®ç® ¬¥áâ ¤«ï à §¬¥é¥¨ï १ã«ìâ¨àã-
|
||||
; î饩 áâப¨.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ ⥫ì s1.
|
||||
;
|
||||
; char *strncat(*s1, *s2, count)
|
||||
;
|
||||
strncat_::
|
||||
xor a
|
||||
push hl
|
||||
ld bc,0
|
||||
cpir
|
||||
dec hl
|
||||
ex de,hl
|
||||
@4: ld a,(hl)
|
||||
or a
|
||||
jr z,@5
|
||||
ldi
|
||||
jp po,@4
|
||||
@5: xor a
|
||||
ld (de),a
|
||||
pop hl ; ¢¥àãâì ¤à¥á s1
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strcmp
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï ¯à®¨§¢®¤¨â ¯®á«¥¤®¢ ⥫쮥 ॣ¨áâà®-§ ¢¨á¨¬®¥
|
||||
; áà ¢¥¨¥ ᨬ¢®«®¢ áâப s1 ¨ s2, ¨ ¯à®¤®«¦ ¥â íâ®, ¯®ª
|
||||
; ®¨ ᮢ¯ ¤ îâ, «¨¡® ¯®ª ®¤ ¨§ áâப ¥ § ª®ç¨âáï.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â § 票¥, 㪠§ë¢ î饥 á®®â®è¥¨¥
|
||||
; íâ¨å áâப:
|
||||
; < 0 s1 < s2
|
||||
; = 0 s1 = s2
|
||||
; > 0 s1 > s2
|
||||
;
|
||||
; int strcmp(*s1, *s2)
|
||||
;
|
||||
strcmp_::
|
||||
ex de,hl
|
||||
@6: ld a,(de)
|
||||
sub (hl)
|
||||
jr nz,@7
|
||||
inc de
|
||||
inc hl
|
||||
ld a,(de)
|
||||
or a
|
||||
jp nz,@6
|
||||
@7: ld h,a
|
||||
ld l,0
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strncmp
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï ¯à®¨§¢®¤¨â ¯®á«¥¤®¢ ⥫쮥 ॣ¨áâà®-§ ¢¨á¨¬®¥ áà ¢¥¨¥
|
||||
; ᨬ¢®«®¢ áâப s1 ¨ s2. Š®«¨ç¥á⢮ áà ¢¨¢ ¥¬ëå ᨬ¢®«®¢ § ¤ ¥âáï
|
||||
; ¢ count. …᫨ ®¤ ¨§ áâப § ª 稢 ¥âáï, áà ¢¥¨¥ ¯à¥ªà é ¥âáï.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â § 票¥, 㪠§ë¢ î饥 á®®â®è¥¨¥ íâ¨å áâப:
|
||||
; < 0 s1 < s2
|
||||
; = 0 s1 = s2
|
||||
; > 0 s1 > s2
|
||||
;
|
||||
; int strncmp(*s1, *s2, uint count)
|
||||
;
|
||||
strncmp_::
|
||||
ex de,hl
|
||||
@6: ld a,(de)
|
||||
sub (hl)
|
||||
jr nz,@7
|
||||
ld a,(de)
|
||||
or a
|
||||
jr z,@7
|
||||
inc de
|
||||
inc hl
|
||||
dec bc
|
||||
ld a,b
|
||||
or c
|
||||
jp nz,@6
|
||||
@7: ld h,a
|
||||
ld l,0
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strchr
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï 室¨â ¯¥à¢®¥ ¢å®¦¤¥¨¥ "c" ¢ string.
|
||||
; ‘¨¬¢®« "c" ¬®¦¥â ¡ëâì ã«¥¢ë¬ ᨬ¢®«®¬.
|
||||
; �ã«¥¢®© ᨬ¢®« ®ª®ç ¨ï string â ª¦¥ ¢ª«îç ¥âáï ¢ ¯®¨áª.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ â¥«ì ¯¥à¢®¥ ¢å®¦¤¥¨¥ "c" ¢ string.
|
||||
; ‚®§¢à é ¥âáï NULL, ¥á«¨ ᨬ¢®« ¥ ©¤¥.
|
||||
;
|
||||
; char *strchr(*string, c)
|
||||
;
|
||||
strchr_::
|
||||
ld a,(hl) ; string
|
||||
cp e ; ᨬ¢®« "c"
|
||||
ret z
|
||||
inc hl
|
||||
or a
|
||||
jp nz,strchr_
|
||||
ld h,a ; NULL
|
||||
ld l,a
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE inrange
|
||||
;
|
||||
; ¢ë§ë¢ ¥âáï ¨§ ¤à. ¯/¯à®£à ¬¬
|
||||
;
|
||||
@inran::
|
||||
ld a,(hl)
|
||||
or a
|
||||
ret z
|
||||
cp e
|
||||
inc hl
|
||||
jp nz,@inran
|
||||
or 0FFh
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strcspn
|
||||
;
|
||||
; "string.h"
|
||||
; � 室¨â ¯¥à¢ãî ç áâì áâப¨ ¢ s1, ¥ ¢å®¤ïéãî ¢ áâபã s2.
|
||||
; ‚®§¢à é ¥â ¤«¨ã ç á⨠áâப¨ s1, á®áâ®ï饩 ¨§ ᨬ¢®«®¢, ¥
|
||||
; ©¤¥ëå ¢ áâப¥ s2. …᫨ ¨ ®¤¨ ¨§ ᨬ¢®«®¢ áâப¨ s1 ¥
|
||||
; ©¤¥ ¢ s2, ¢®§¢à é ¥âáï ®¡é ï ¤«¨ áâப¨ s1 ¡¥§ § ¢¥àè -
|
||||
; î饣® ã«ï.
|
||||
;
|
||||
; size_t strcspn(*s1, *s2)
|
||||
;
|
||||
strcspn_::
|
||||
ld b,h
|
||||
ld c,l
|
||||
ld hl,0
|
||||
@1: ld a,(bc)
|
||||
or a
|
||||
ret z
|
||||
push hl
|
||||
ex de,hl
|
||||
push hl
|
||||
ld e,a
|
||||
call @inran##
|
||||
pop de
|
||||
pop hl
|
||||
ret nz
|
||||
inc hl
|
||||
inc bc
|
||||
jp @1
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strpbrk
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï 室¨â ¯¥à¢®¥ ¢å®¦¤¥¨¥ ¢ áâப¥ s1 «î¡®£®
|
||||
; ᨬ¢®« ¨§ áâப¨ s2. �ã«¥¢®© ᨬ¢®« ®ª®ç ¨ï ¯à¨
|
||||
; ¯®¨áª¥ ¥ à áᬠâਢ ¥âáï.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ â¥«ì ¯¥à¢®¥ ¢å®¦¤¥¨¥
|
||||
; ᨬ¢®« ¨§ s2 ¢ áâப¥ s1.
|
||||
; �ਠ®âáãâá⢨¨ ®¡é¨å ᨬ¢®«®¢ ¢ s1 ¨ s2, ¢®§¢à -
|
||||
; é ¥âáï NULL.
|
||||
;
|
||||
; char *strpbrk(*s1, *s2)
|
||||
;
|
||||
strpbrk_::
|
||||
ld a,(hl)
|
||||
or a
|
||||
jr z,@2
|
||||
@1: push hl
|
||||
ld l,(hl)
|
||||
push de
|
||||
ex de,hl
|
||||
call @inran##
|
||||
pop de
|
||||
pop hl
|
||||
ret nz
|
||||
inc hl
|
||||
jp @1
|
||||
;
|
||||
@2: ld h,a ; NULL
|
||||
ld l,a
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strlen
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â ¢ ¡ ©â å ¤«¨ã áâப¨ string,
|
||||
; ¯à¨ç¥¬ ã«¥¢®© ᨬ¢®« ®ª®ç ¨ï áâப¨, ¢ à §¬¥à
|
||||
; áâப¨ ¥ ¢å®¤¨â.
|
||||
;
|
||||
; size_t strlen(*string)
|
||||
;
|
||||
strlen_::
|
||||
xor a
|
||||
ld b,a
|
||||
ld c,a
|
||||
push hl
|
||||
cpir
|
||||
pop de
|
||||
scf
|
||||
sbc hl,de ; hl = ¤«¨ áâப¨
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strrchr
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï 室¨â ¯®á«¥¤¥¥ ¢å®¦¤¥¨¥ ᨬ¢®« "c"
|
||||
; ¢ áâப¥ string. �ã«¥¢®© ᨬ¢®« ®ª®ç ¨ï áâப¨
|
||||
; string â ª¦¥ ¢ª«îç ¥âáï ¢ ¯®¨áª.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ â¥«ì ¯®á«¥¤¥¥ ¢å®¦¤¥¨¥
|
||||
; ᨬ¢®« "c" ¢ string.
|
||||
; …᫨ § ¤ ë© á¨¬¢®« ¥ ©¤¥, ¢®§¢à é ¥âáï NULL.
|
||||
;
|
||||
; char *strrchr(*string, c)
|
||||
;
|
||||
strrchr_::
|
||||
ld b,h
|
||||
ld c,l
|
||||
ld hl,0 ; NULL
|
||||
@1: ld a,(bc) ; string
|
||||
or a
|
||||
ret z
|
||||
cp e ; ᨬ¢®« "c"
|
||||
jp nz,@2
|
||||
ld h,b ; ¤à¥á ¢å®¦¤¥¨ï
|
||||
ld l,c
|
||||
@2: inc bc
|
||||
jp @1
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strlwr
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï ¯à¥®¡à §®¢ë¢ ¥â «î¡ë¥ ¡ãª¢ë ¢¥à奣® ॣ¨áâà
|
||||
; áâப¨ string, § ª 稢 î饩áï ã«¥¬, ¢ ¡ãª¢ë ¨¦¥£®
|
||||
; ॣ¨áâà . „à㣨¥ ᨬ¢®«ë ¥ à áᬠâਢ îâáï.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ ⥫ì áâபã string.
|
||||
;
|
||||
; char *strlwr(*string)
|
||||
;
|
||||
strlwr_::
|
||||
push hl
|
||||
@1: ld a,(hl)
|
||||
or a
|
||||
jr z,@2
|
||||
call tolower_## ; A..Z -> a..z
|
||||
ld (hl),a
|
||||
inc hl
|
||||
jp @1
|
||||
;
|
||||
@2: pop hl ; ¢¥àãâì ¤à¥á string
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strupr
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï ¯à¥®¡à §®¢ë¢ ¥â «î¡ë¥ ¡ãª¢ë ¨¦¥£® ॣ¨áâà
|
||||
; áâப¨ string, § ª 稢 î饩áï ã«¥¬, ¢ ¡ãª¢ë ¢¥à奣®
|
||||
; ॣ¨áâà . „à㣨¥ ᨬ¢®«ë ¥ à áᬠâਢ îâáï.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ ⥫ì áâபã string.
|
||||
;
|
||||
; char *strupr(*string)
|
||||
;
|
||||
strupr_::
|
||||
push hl
|
||||
@1: ld a,(hl)
|
||||
or a
|
||||
jr z,@2
|
||||
call toupper_## ; a..z -> A..Z
|
||||
ld (hl),a
|
||||
inc hl
|
||||
jp @1
|
||||
;
|
||||
@2: pop hl ; ¢¥àãâì ¤à¥á string
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strspn
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â ¤«¨ã ᮢ¯ ¤ î饩 ç á⨠áâப¨ s1, ª®â®à ï
|
||||
; ¯®«®áâìî á®á⮨⠨§ ᨬ¢®«®¢, ©¤¥ëå ¢ áâப¥ s2. �ã«¥¢®©
|
||||
; ᨬ¢®« ®ª®ç ¨ï áâப¨ s2 ¥ à áᬠâਢ ¥âáï.
|
||||
; …᫨ áâப s1 ç¨ ¥âáï á ᨬ¢®« , ¥ ¢å®¤ï饣® ¢ áâபã s2,
|
||||
; ¢®§¢à é ¥âáï 0.
|
||||
;
|
||||
; size_t strspn(*s1, *s2)
|
||||
;
|
||||
strspn_::
|
||||
ld b,h
|
||||
ld c,l
|
||||
ld hl,0 ; ç. ¤«¨ ¯®¤áâப¨
|
||||
@1: ld a,(bc)
|
||||
or a
|
||||
ret z
|
||||
push hl
|
||||
ex de,hl
|
||||
push hl
|
||||
ld e,a
|
||||
call @inran##
|
||||
pop de
|
||||
pop hl
|
||||
ret z ; ¢¥àãâì ¤«¨ã ¯®¤áâப¨
|
||||
inc hl
|
||||
inc bc
|
||||
jp @1
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strstr
|
||||
;
|
||||
; "string.h"
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ â¥«ì ¯¥à¢®¥ ¢å®¦¤¥¨¥
|
||||
; áâப¨ s2 ¢ áâபã s1.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â NULL, ¥á«¨ s2 ¥ ¡ë« ©¤¥ .
|
||||
; …᫨ ¤«¨ áâப¨ s2 à ¢ 0, ¢®§¢à é ¥âáï s1.
|
||||
;
|
||||
; char *strstr(*s1, *s2)
|
||||
;
|
||||
strstr_::
|
||||
ld a,(hl)
|
||||
or a
|
||||
jr nz,@1
|
||||
ld l,a ; NULL
|
||||
ld h,a
|
||||
ret
|
||||
@1: push hl ; ¤à¥á s1
|
||||
push de ; ¤à¥á s2
|
||||
@2: ld a,(de) ; s2
|
||||
or a
|
||||
jr z,@3
|
||||
cp (hl) ; s1
|
||||
inc hl
|
||||
inc de
|
||||
jp z,@2
|
||||
pop de
|
||||
pop hl
|
||||
inc hl
|
||||
jp strstr_
|
||||
;
|
||||
@3: pop de
|
||||
pop hl ; ¢¥àãâì ¤à¥á s1
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
MODULE strtok
|
||||
;
|
||||
; "string.h"
|
||||
; �®¨áª ⮪¥ (®¢).
|
||||
; ”ãªæ¨ï 室¨â ¢ áâப¥ s1 ⮪¥, ®â¤¥«¥ë© ®¤¨¬ (¨«¨ ¡®«¥¥)
|
||||
; ®£à ¨ç¨â¥«¥¬ ¨§ ¬®¦¥á⢠ᨬ¢®«®¢-®£à ¨ç¨â¥«¥© áâப¨ s2.
|
||||
; � ©¤¥ë© ⮪¥ ¢ áâப¥ s1 ®ª 稢 ¥âáï ã«¥¬.
|
||||
; „«ï ⮣®, çâ®¡ë ¯à®ç¨â âì á«¥¤ãî騩 ⮪¥ ¨§ s1, äãªæ¨ï strtok
|
||||
; ¤®«¦ ¢ë§ë¢ âìáï á NULL-§ 票¥¬ ¤«ï à£ã¬¥â s1.
|
||||
; €à£ã¬¥â NULL s1 ¢ë§ë¢ ¥â strtok ¯®¨áª á«¥¤ãî饣® § ª ¢
|
||||
; ¯à¥¤ë¤ã饩 áâப¥ ᨬ¢®«®¢.
|
||||
; Œ®¦¥á⢮ ®£à ¨ç¨â¥«¥© ¢ áâப s2, ®â ¢ë§®¢ ª ¢ë§®¢ã, ¬®¦¥â
|
||||
; ¡ëâì à §«¨çë¬, â ª çâ® s2 ¬®¦¥â ¯à¨¨¬ âì «î¡ë¥ § 票ï.
|
||||
; �ਠª ¦¤®¬ ¢ë§®¢¥, äãªæ¨ï ¢®§¢à é ¥â 㪠§ â¥«ì ©¤¥ë©
|
||||
; ⮪¥ áâப¨ s1, ª ¦¤ë© à § ¯à®¤¢¨£ ïáì ¢¯¥à¥¤ ¯® áâப¥ s1.
|
||||
; ”ãªæ¨ï ¢®§¢à é ¥â 㪠§ ⥫ì NULL, ª®£¤ ¡®«ìè¥ ¥â ⮪¥®¢
|
||||
; ¢ áâப¥ s1.
|
||||
;
|
||||
; char *strtok(*s1, *s2)
|
||||
;
|
||||
strtok_::
|
||||
ld (@4+1),de ; s2
|
||||
ld (@2+1),hl ; s1
|
||||
ld a,l
|
||||
or h
|
||||
jr nz,@0
|
||||
@3: ld hl,0 ; ¤à¥á á«¥¤. ¯®¨áª ¢ s1
|
||||
ld (@2+1),hl
|
||||
@0: ld (@1+1),hl ; s1
|
||||
@2: ld hl,0 ; ⥪. ¤à¥á ¢ s1
|
||||
ld a,(hl)
|
||||
inc hl
|
||||
ld (@2+1),hl
|
||||
or a
|
||||
jr z,@1
|
||||
ld e,a
|
||||
@4: ld hl,0 ; á®åà. ¤à¥á s2
|
||||
call @inran##
|
||||
jr z,@2
|
||||
ld hl,(@2+1) ; ⥪. ¤à¥á ¢ s1
|
||||
dec hl
|
||||
ld (hl),0 ; ¬¥áâ® ©¤¥®£® ᨬ¢®« ?
|
||||
inc hl
|
||||
ld (@3+1),hl ; ¤à¥á á«¥¤. ¯®¨áª ¢ s1
|
||||
@1: ld hl,0 ; ¤à¥á ©¤¥®£® ᨬ¢®«
|
||||
ret
|
||||
|
||||
ENDMODULE
|
||||
Reference in New Issue
Block a user