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>
619 lines
12 KiB
NASM
619 lines
12 KiB
NASM
; ”ãªæ¨¨ ¯à®¢¥à¥ë.
|
||
;
|
||
; ‚室ï騥 äãªæ¨¨:
|
||
;
|
||
; 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
|