c71e249a4e
First substantive commit: the entire Sprinter C compiler tree on top of
the bare README+gitignore initial commit.
What's in here:
bin/sprinter-cc — driver script invoking SDCC + linker + mkexe
libc/ — Sprinter-specific libc layer over ESTEX/BIOS
(conio, gfx, io, mem, stdio + headers)
runtime/ — crt0 variants (default/small/banked/minimal)
+ heap + bank trampolines
toolchain/ — mkexe (SprintEXE packer, C + tests)
examples/ — 30 demo programs (gfx, file I/O, env, time, …)
lib/Makefile — builds the libc archive (sprinter.lib)
docs/ — converted Sprinter manuals + asm reference samples
third_party/ — solid-c reference compiler dump + sdcc setup script
release_docs/ — packaging / release notes
gitignore overhaul:
• Drop dangerous blanket patterns: *.asm (would hide docs/samples/*.asm)
and *.exe (case-insensitive match was hiding third_party/solid-c/*.EXE
on macOS APFS). Replaced with examples/*/*.{asm,exe,…} and lib/*.lib.
• Restore tracking of toolchain/mkexe/tests/{one,big}.bin — those are
INPUT fixtures, not build outputs.
• Collapse the duplicated SDCC/C/Sdcc sections into one section per
concern (build outputs / vendored / OS-junk).
• Add .sprinter-cc-*/, build/ (catches lib/build/ too), .claude/.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
555 lines
9.3 KiB
NASM
555 lines
9.3 KiB
NASM
; ‚室ï騥 äãªæ¨¨:
|
||
;
|
||
; 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
|