*******************************************************************************
	 	PART 1 (2) DOS Function Call Љ

				Y.Yamanisi
					Ver 1.00 : 

*******************************************************************************

@߂

@Xcnrt@NVR[̐łBƌĂ̑SĂ
͗L܂B悭gp̂ĂƎv܂B
@܂ADOŞݸ݂ɂ̓oÔLACtȂ(ǂCt
H)Ȃ܂B̃oO͒͖悤łB

@Љe

 @t@CANZX
 AǗ
 BqvZX

@܂AɕtX̐Ayђӂ_L܂B
@ׂӁAӖȂǂ̓Tv\[Xɖߍ܂Ă̂łQƂĂ
(蔲ł Ͼ_O_)
@p̕@𖳎\LL܂ẢƎv̂ŊقĉB
ȂP͎OŒׂĉB(XyԈĂ̂L邩mȂ ^^;)
@A͏SҌɏ̂łāAꂪSĂł͂܂Bxȃv
Ogނɂ̓}X^[Ȃ΂ȂȂA܂܂RL܂B(ł
Xcnr̕׋Ȃ񂩂lȂ񂾂낤ȁ`)

===============================================================================
  t@CANZX
===============================================================================

@ȂƂ̕W֐g΂ˁ[ƌȂŉB̕W
ĎgÂ炢ȂłB@\ႢBŃTvɁAǗ
ƍ킹64kBzt@CAɊi[ł悤ɂp
܂B삵e͈ȉ̂ƂłB

	Et@CI[v
	Et@CN[Y
	Et@C[h
	Et@CCg
	Et@C|C^̈ړ

@t@CI[v

@{łBt@CɃANZXɂ́AړĨt@CI[vȂ΂Ȃ
Ȃ̂͌m̒ʂłB

@t@CN[Y

@J܂傤BɊJt@Cɂ͌xL܂B

@t@C[h

@ǂ݂f[^ǂˁBAA64kBȏ̃TCYxɓǂݍނƂo
Bő65535Byte܂łxɓǂ߂TCYłB

@t@CCg

@Ηǂł傤Bt@C[hƓlɈxɏ߂TCY
͍ő65535BytełB

@t@C|C^̈ړ
@_ANZXƂɕKvłB


  t@CANZXɕKvȃt@NVꗗ

@int 21h gpAAH Ƀt@NVio[܂B

--------------------------------------
  @\	   | Function No.  | Parameter & Return
- - - - - -+- - - - - - - -+- - - - - - - - - - - - - - - - - - - - - - - - -
File Open  |	3Dh	   | In:	AL    = Access Control
	   |		   |		DS:DX = FileName ւ̃|C^
	   |		   |
	   |		   | Ret: CF=0	AX       FileHandle
	   |		   |      CF=1	AX = 02  No File
	   |		   |		AX = 03  Invalid Path
	   |		   |		AX = 04  Too Opened
	   |		   |		AX = 0C  Invalid Access
- - - - - -+- - - - - - - -+- - - - - - - - - - - - - - - - - - - - - - - - -
File Create|	3Ch	   | In:	CX    = File Attribute
	   |		   |		DS:DX = FileName ւ̃|C^
	   |		   |
	   |		   | Ret: CF=0	AX       FileHandle
	   |		   |      CF=1	AX = 03  Invalid Path
	   |		   |		AX = 04  Too Opened
	   |		   |		AX = 05  Attribute Error
	   |		   |
	   |	5Bh	   | In:	CX    = File Attribute
	   |		   |		DS:DX = FileName ւ̃|C^
	   |		   |
	   |		   | Ret: CF=0	AX       FileHandle
	   |		   |      CF=1	AX = 03  Invalid Path
	   |		   |		AX = 04  Too Opened
	   |		   |		AX = 05  Attribute Error
	   |		   |		AX = 50  File Existing
- - - - - -+- - - - - - - -+- - - - - - - - - - - - - - - - - - - - - - - - -
File Close |	3Eh	   | In:	BX    = FileHandle
	   |		   |
	   |		   | Ret: CF=0	         No Error
	   |		   |      CF=1	AX = 06  Invalid Handle
- - - - - -+- - - - - - - -+- - - - - - - - - - - - - - - - - - - - - - - - -
File Read  |	3Fh	   | In:	CX    = Read Bytes
	   |		   |		DS:DX = Buffer ւ̃|C^
	   |		   |		BX    = FileHandle
	   |		   |
	   |		   | Ret: CF=0	AX       Read Bytes
	   |		   |      CF=1	AX = 06  Invalid Handle
- - - - - -+- - - - - - - -+- - - - - - - - - - - - - - - - - - - - - - - - -
File Write |	40h	   | In:	CX    = WriteBytes
	   |		   |		DS:DX = Buffer ւ̃|C^
	   |		   |		BX    = FileHandle
	   |		   |
	   |		   | Ret: CF=0	AX       Write Bytes
	   |		   |      CF=1	AX = 06  Invalid Handle
- - - - - -+- - - - - - - -+- - - - - - - - - - - - - - - - - - - - - - - - -
MovePointer|	42h	   | In:	AL    = standard location
	   |		   |		CX:DX = Move Size
	   |		   |		BX    = FileHandle
	   |		   |
	   |		   | Ret: CF=0	DX:AX    New Location
	   |		   |      CF=1	AX = 01  Invalid Function
	   |		   |		AX = 06  Invalid Handle
- - - - - -+- - - - - - - -+- - - - - - - - - - - - - - - - - - - - - - - - -
File Delete|	41h	   | In:	DS:DX = FileName ւ̃|C^
	   |		   |
	   |		   | Ret: CF=0		 No Error
	   |		   |      CF=1	AX = 02  No File
	   |		   |		AX = 03  Invalid Path
	   |		   |		AX = 05  Can't Delete
-----------+---------------+-------------------------------------------------
Directory  |	39h	   | In:	DS:DX = PathName ւ̃|C^
 Create	   |		   |
	   |		   | Ret: CF=0		 No Error
	   |		   |      CF=1	AX = 03  Invalid Path
	   |		   |		AX = 05  Can't Create
- - - - - -+- - - - - - - -+- - - - - - - - - - - - - - - - - - - - - - - - -
Directory  |	3Ah	   | In:	DS:DX = PathName ւ̃|C^
 Delete	   |		   |
	   |		   | Ret: CF=0		 No Error
	   |		   |      CF=1	AX = 03  Invalid Path
	   |		   |		AX = 05  Can't Delete
	   |		   |		AX = 10  Do'nt Delete(Cur Dir)
- - - - - -+- - - - - - - -+- - - - - - - - - - - - - - - - - - - - - - - - -
Directory  |	3Bh	   | In:	DS:DX = PathName ւ̃|C^
 Change	   |		   |
	   |		   | Ret: CF=0		 No Error
	   |		   |      CF=1	AX = 03  Invalid Path
--------------------------------------

  ö

@Äꗗ\ĉBC𖳂܂ˁÂȂBA
ĂƂ̕\Â炢ł͖Ȃ܂BǂĂȂlׂ̈Ɉ
Ă܂Bȉ̓t@Cɑ΂ʓIȎ菇łB

	 T.t@CI[v & t@C쐬

@t@CI[vȂ΃t@C͓ǂݏłȂ̂͌m̒ʂłB
@At@C쐬ƁAIɂ̃t@Cǂݏp[hŃI[v
܂B߂ăI[vKv͂܂B
@t@NVԍRcŁAAL Ƀt@CANZXRg[At@C
̓ASCIZ̃|C^ DS:DX ɓ INT 21h sƗǂł
B
@ƃt@CnhԂ܂B̃t@Cɑ΂Ă̈ȍ~̑́A
̃t@Cnhp邱ƂɂȂ܂B
@RbȂͤTaŃt@C쐬邱Ƃo܂B҂̍ق̓Tv
vOɋLĂ̂łQƂĉB(FOPEN.C)
@⏕p[^́ACX t@C̑ADS:DX t@C̓ASCIZ
̃|C^łB

	 U.ǂ  

@t@CI[vړȊŝ݂łB
@Reœǂ݁ASOŏ܂B⏕p[^̌`͓ŁACX ɑΏ
̑傫ADS:DX ɑΏۂ̃̃AhXABX Ƀt@Cnh
AINT 21h ̎sĂĉB

	 V.t@CN[Y

@t@Cɑ΂ANZXIAt@CN[YĂ˂΂ȂȂ
̗̂͐ƌ̂ł傤B
@t@CN[ÝAt@CI[v̂ƋtɂĂƁA]vȃgu
Ȃł傤B
@t@CN[Ỹt@NVԍ͂RdŁABX Ƀt@Cnh
Ă܂B

<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>


/*en*/
/* qv[hŊJ */
	InReg.h.al = 0x02;

/* lpszFileName ZOgƃItZbgɕĂ */
/* ɁAlpszFileName ɂ́At@CASCIZœ|C^ł邱
Ƃ */
	InReg.x.dx = (UINT16)lpszFileName;
	SegReg.ds  = (UINT16)( (UINT32)lpszFileName>>16 );

	InReg.h.ah = 0x3d;				/*FileOpen*/
	intdosx( &InReg, &OutReg, &SegReg );

/*eq*/
	InReg.x.cx = ReadSize;
	InReg.x.bx = FileHandle;

/* lpBuffer ZOgƃItZbgɕĂ */
	InReg.x.dx = (UINT16)lpBuffer;
	SegReg.ds  = (UINT16)( (UINT32)lpBuffer>>16 );

	InReg.h.ah = 0x3f;				/*FileRead*/
	intdosx( &InReg, &OutReg, &SegReg );


/*eb*/
	InReg.x.bx = wFileHandle[HandleNumber];

	InReg.h.ah = 0x3e;				/*FileClose*/
	intdos( &InReg, &OutReg );



<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>
@̃Tv̓G[`FbNĂȂׁÂ܂܂ŎsăG[N
ƂɁAƂłȂɂȂ邩m܂BG[`FbNɊւẮAʂ̃T
vvOQƂĉB

===============================================================================
  fBNg
===============================================================================

@RXō쐬AR`ō폜ARaŃJgfBNg̕ύXłBnp
[^͑SĈꏏŁADS:DX ɃpX̓ASCIZ̃|C^邾łB
@G[ɂẮA͂TvvÔقQƂĉB

	p̉

	 t@CANZXRg[ 

@t@CI[ṽ[h̎wsŁÄӖ͈ȉ̂悤ɂȂĂ܂
B
	00:	ǂݍݐp
	01:	ݐp
	02:	ǂݏp

	 ASCIZ 

@̏IɂO(l.ł͂Ȃ)tĂ镶̎łB{ASC
IIȂ̂ł锤Ȃ̂A݂̓{MS-DOSł2Byteł̃t@C
Ă̂ŁA܂ނƂƂɏɂĂ܂܂B


  ۂ̃[`

@āAŃTv[`Ă݂܂傤B@\FXt߂ɑ
ȂĂ܂䖝ēǂŉB{t@CANZX̃[`͂̂܂
CuƂĎgpo悤ɂׁAP֐Pt@CƂĂ܂B

	  TvvOꗗ

	FOPEN.C
	FCLOSE.C
	FREAD.C
	FWRITE.C
	FPMOVE.C

===============================================================================
  Ǘ
===============================================================================

@A64kBz𗘗pɂ́Afq[Wɂ邩AS
VɃmۂĂKvL܂BAq[Wfł͑SẴ
ANZXɑ΂ăq[W|C^gpĂ܂߁AvO̎sx
xȂĂ܂܂BŁAVɃmۂĂt@[|C^ŃA
NZXĂ邱ƂŁAvOǂsĂ邱Ƃo܂B

  ǗɕKvȃt@NVꗗ

--------------------------------------
  @\	   | Function No.  | Parameter & Return
- - - - - -+- - - - - - - -+- - - - - - - - - - - - - - - - - - - - - - - - -
Allocate   |	48h	   | In:	BX = Memory Size (Paragraph)
 Memory	   |		   |
	   |		   | Ret: CF=0	AX       Segment Address
	   |		   |      CF=1	AX = 07  Memory Control Broken
	   |		   |		AX = 08  Not Enough Memory
	   |		   |			 (BX = Enable Memory Size)
- - - - - -+- - - - - - - -+- - - - - - - - - - - - - - - - - - - - - - - - -
Free	   |	49h	   | In:	ES    = Segment Address
 Memory	   |		   |
	   |		   | Ret: CF=0		 No Error
	   |		   |      CF=1	AX = 07  Memory Control Broken
	   |		   |		AX = 09  It's Never Allocate Memory
- - - - - -+- - - - - - - -+- - - - - - - - - - - - - - - - - - - - - - - - -
Resize	   |	4Ah	   | In:	ES    = Segment Address
 Memory	   |		   |		BX    = New Size
	   |		   |
	   |		   | Ret: CF=0		 No Error
	   |		   |      CF=1	AX = 07  Memory Control Broken
	   |		   |		AX = 08  Not Enough Memory
	   |		   |			 (BX = Enable Memory Size)
	   |		   |		AX = 09  It's Never Allocate Memory
--------------------------------------


	 T.m		--Allocate Memory--

@mۂ飂ƌĂAAhXoX𑀍삵ă𕨗IɎgp
ƌƂł͂܂BMS-DOSɢ͉ǂꂾgĂ̂ł傤
Ǝf𗧂āA̕ԂĂAhXgpƂƂłB
@ɂ̓t@NVԍSWpāABX ɎgpTCY(pO
tP:16Byte) INT 21h s܂

<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>

	InReg.h.ah = 0x48;
	InReg.x.bx = Size;
	intdos( &InReg, &OutReg );

<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>

@܂AmۂĂ̗̈̓NA܂BgƂ棂ƌ
Ă邾łBOĂ̓ƊႢׂʂ悤ACt̎
B

	 U.̊J	--Free Memory--

@mۂJĂ̂Vƌ̂łBgpȂȂJĂ
傤B
@t@NVԍSXpAES ɊJAhX(RpOtP)
 INT 21h s܂B

<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>

	InReg.h.ah = 0x49;
	SegReg.es  = (INT16)( (INT32)lpMemAlloc>>16 );
	intdos( &InReg, &OutReg, &SegReg );

<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>


	 V.TCY̕ύX	--Resize Memory--

@āAUmۂ̂AXɕKvɂȂ(ȂɗvȂȂ)Ƃ
Ƃ͂悭܂BŐVɃmۂAJĂ疔mۂ
ȂƂǂ悤ɂ̃t@NV͂܂B
@݂傫ȃKvɂȂƂAXɊmۂĂǂ̂łA
Ă܂DOS̊Ǘ̈̂߂ɃfA܂j󂵂Ă
ƊȒPɃnOAbvĂ܂ɂȂ܂B
@t@NVԍS`gpāAES ɃTCYύX郁̃AhXB
XɐVTCY INT 21h s܂B

<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>

	InReg.h.ah = 0x4a;
	InReg.x.bx = Size;
	intdos( &InReg, &OutReg );

<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>/<_>


  ĂʂĂȂ`

@ɂė̔@vO𓮂Ă݂ĉB܂s܂B
Ă񂾂悭ȂH ܂AłˁBĂ݂Ȃ̂łB
ǂĂm߂ĺAONAȂt@CǂݍނȂ肵ĉB
vOInOAbvA炩̃~XĂƂłB\[Xv
OƂɂ߂ĉBȂ݂ɁAVmۂZOg̒O
ɂcnr̊Ǘ̈悪L̂ŁA͐΂ɒׂȂŉBnOAbv܂
B

===============================================================================
vȌ풓
===============================================================================

@vȌ풓Ƃ͈̂Ȃ񂼂HƂ̓́AJIv
OAƌƂɂȂ܂B
@ł́AvO풓鎖ɂǂ̂悤Ȍʂ̂ł傤B

  T.  炩ߏ풓ĂƂŁǍɋNvOɃT[rX
     [`^B

  U.  foCXhCoAahnr̃[`ɂւ΂tA̓
     ςB

  V.  ӖȂB


--------------------------------------
  @\	   | Function No.  | Parameter & Return
- - - - - -+- - - - - - - -+- - - - - - - - - - - - - - - - - - - - - - - - -
Keep	   |	31h	   | In:	AL = Return Code
 Process   |		   |		DX = cTCY(paragraph)
	   |		   |
	   |		   | Ret: 	nothing
--------------------------------------

@āÃt@NVR[ĉB풓ɂ́A풓TCYw
肵Ă˂΂ȂȂ̂łB́A풓o邾TCYɂ
AƌƂȂ̂łBspӂɃ͍̂D܂ł͂܂B
AނׂłB
@AoĂ܂B́Af[^łB̍邩ƌƁAEX
E`ł̓R[hƃf[^́AĂ邩łB
@Abł̓ZOgRɕς邱ƂoȂ̂ŁAAZȕ
݂̂܂B
@풓ꍇAcom`ō쐬܂BT[rX[`A荞ݏ[
`łDSsł鎖AyсA64kBzTCY̏풓͈ʓIłȂ
RƂċ܂B
@A풓vOɂ́A̎ނ̃[`KvƂȂ܂B

    @	풓郋[`

@ۂɏ풓镔łBR[ḧƁAf[^͓̈ZOgɂȂ܂B
@A̕vO̐擪ɗ܂B

    A	풓郋[`

@@̕풓ׂ̃[`łB܂Ad풓`FbN郋[`
gݍ܂Ȃ΂Ȃ܂B

    B	풓[`

@SĂ̏풓vÓA풓@\ĂȂ΂Ȃ܂B


풓

@vO풓OɁAKvł΃vOf[^̏sB
[`́A荞ݏ(\tgEFA荞)gp邽߁AړI̊荞
xN^e[uKv܂B荞݃xN^̓ǂݍ݁^݂
t@NV́AɋLĂ̂łǂŉB
@ۂɏ풓ɂ́AɋLt@NVs邾łB
͉܂B
@܂AłA풓̊mFƂƂKvłB̍ƂsȂƃv
OsxA풓sĂ܂A𖳐ɂނڂs
Ă܂܂B
@́A풓mF̕@ɂ͊̕@L܂B

    T.荞݃xN^e[uɃj[NȒlݒ

@̊荞݃xN^e[uɃj[NȒlݒ肵ĂÅmFȂď풓
̊mFƂ@B


    U.荞݃xN^e[u瓾AhXɁAj[NȒlݒ肷B

@T̕@Ɗ荞݃xN^P]vɏĂ܂ɁAݒɎԂ
Ă܂܂BŁA荞݃[`ɗp銄荞݃xN^𗘗p(ZO
ĝ݂擾)AŐݒ肵ItZbgɏĂf[^ƍ邱ƂŁA
풓̊mFsƂo܂B


    V.̑̕@

@j[NȒlݒ肵ASĂ΁A풓̊mF邱Ƃ͏o
ȂB܂ADOS ɃfoCXo^ƌ̂AfoCXhCo
΂ƂA풓łȖʓ|ȂƂ͂Ȃł傤B肽l
ɂĉB͂m܂B


풓

@SĂ̏풓vÓAK̏풓邱ƂoȂ΂Ȃ܂B
@Aۂɂɂ͊̎菇KvłB

@@@풓̊mF

@풓Ă鎖mFoȂ풓oȂ͓̂O̎łB
풓mFɂĂ͏ŐĂ܂Aŏ[ł傤B

    A풓AhX̊mF

@풓Ă邱ƂmFꂽA̐擪AhXmȂΊĴ悤
܂BTA荞݂pď풓[`𑖂点̂ŁA荞݃xN^
炻̃AhXZooł傤BŁuZovƏ̂́AʂȂƂ
ȂA荞݃[`̐擪풓̐擪Ɉv鎖͖łB
  oro邱ƂYĂ͂܂񂵁AvO擪̃Wv
cĂ܂B

    B풓̊J

@̊J̃t@NVgpāA풓̃JĂ܂B

  ||Ӂ||
 @ŌɏIƂAԈĂ풓IȂ悤ɁI


===============================================================================
  qvZX
===============================================================================

@͂茾ĖwǎgƂ͗L܂BłČĂŏĂ
܂(͎A悭͉ĂȂ̂)BKɎgĂĉB
@t@NV͎̂悤ɂȂĂ܂B

--------------------------------------
  @\	   | Function No.  | Parameter & Return
- - - - - -+- - - - - - - -+- - - - - - - - - - - - - - - - - - - - - - - - -
Child	   |	4Bh	   | In:	ES:BX = Parameter Block Address
 Execute   |		   |		DS:DX = FileName Address
	   |		   |		AL = 00:Load & Eexcutte
	   |		   |		AL = 03:Only Load
	   |		   |
	   |		   | Ret: CF=0		 No Error
	   |		   |      CF=1	AX = 02  No File
	   |		   |		AX = 03  Invalid Path
	   |		   |		AX = 08  Not Enough Memory
	   |		   |		AX = 0A  ϐ32kBȏ゠
	   |		   |		AX = 0B  EXE Header Error
- - - - - -+- - - - - - - -+- - - - - - - - - - - - - - - - - - - - - - - - -
Child	   |	4Dh	   | In:	nothing
 ReturnCode|		   |
  Get	   |		   | Ret:	AX Return Code
--------------------------------------

@R̂ƂȂAɋĂlɃvOs邽߂̃
Ύsł܂BL̃̊Jŕsvȃ͊JĂĉ
BvOsꂽ͋󂫃͗L܂B


