*******************************************************************************
		PART 1   DOS Function Call

			Y.Yamanisi / T.Noda

					Ver 1.00 : 

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


*******************************************************************************
	 	PART 1 (1) DOS Function Call  Cꂩ̎g

				T.Noda
					Ver 1.00 : 1997/12/06(Sat) 17:45:20

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


@DOSt@NVR[Ƃ

@DOSt@NVR[Ƃ́ADOSsĂT[rX[`̎łB
@pƁA{P珑Ȃ΂ȂGȃ[`ȒP̓p[
^̎wōsƂł悤ɂȂ܂B̂߁Âb̕W֐(DOS
n)ł͍ŏIIDOSt@NVR[ĂяoĂ܂B
@tɌƁAnr̃T[rX[`Ȃ̂łg킸ɏsƂ͂ł
BiĂ͂ȂƂɂȂĂBj
@̓T^́At@CvZX֘AłB
@܂At@NVR[̎gp@͈ȍ~̍̊{IȗɂȂ̂ŁA
ڂ܂傤B

	:Cł16i̕\ 0x 𓪂ɂ܂BAAZu
	     ʂ̂̎̋Zp16i̕\ɐ̍Ō H ĕ\
	     B̏͂Cł̎g̉Ȃ̂16i̕\0xł܂B

===============================================================================
@DOSt@NVR[̌Ăяo@
===============================================================================

@DOSt@NVR[̓\tgEFA荞݂INT 0x21 ŌĂяo܂B
@Ăяot@NV̋@\ԍAHWX^ɂāA܂p[^
KvȂ̂́ÃWX^ɃZbgINT 0x21s܂B
@܂Aʂ̑̓WX^ɕԂ܂B

@DOSt@NVR[̂bł̎gp@

@āAg͂ĊȒPłAWX^oRŃp[^̎󂯓ns
̂ŁAbł͓ȕ@ŏȂ΂܂B
@̕@܂傤B

  @^WX^

@bł́AڃWX^𑀍삷邱Ƃ͂ł܂B̓WX^b̎s
tɎgĂ邽߂łBiOłj
@łAbŃWX^ɂ́AWX^̑ƂȂȕϐ}
荞݃[`ɈnƂł܂B
@̔}̕ϐ́A^WX^Ƃ܂B
@̋^WX^͂bn[h֘A̋LqƂɂ͐؂Ă؂Ȃ֌W
łB̋^WX^̍\<DOS.H>̒ɂĂ܂B
@Ŕ`Ă݂Ɨǂł傤B̍\8086̃WX^\A\
Ƌp̂ɂȂĂ܂B^WX^gƂ́A̐錾Ă<DOS.
H>CN[h邱ƂYĂ͂܂B

  @荞݌Ăяo

@ăp[^̑킩Ă荞݂łȂƁAӖ܂ˁB
@̌Ăяo̊֐͈ȉ̂悤ɗlXȎނ܂B͏ꍇɂĎg
킯Ȃ΂܂B

#include <dos.h>

@INT0x21\tgEFA荞݂s֐

@	int intdos(union REGS *inregs,union REGS *outregs);

	:	INT 0x21s܂B̎A󂯓np[^inregs
		荞ݏIɃp[^󂯎Ƃoutregs̒ɁA
		Ă܂B

	߂l:	AX̒l

@	int intdosx(union REGS *inregs,union REGS *outregs,
			struct SREGS segregs);

	:	INT 0x21s܂B̎A󂯓np[^inregs
		荞ݏIɃp[^󂯎Ƃoutregs̒ɁA
		Ă܂B
		intdosƈႤ̂́A^ZOgWX^ϐp[^̎
		nɎgƂo邱ƂłB

	߂l:	AX̒l

@Cӂ̃\tgEFA荞݂s֐

@	int int86(int intnumber,union REGS *inregs,union REGS *outregs);

	:	wԍ̃\tgEFA荞݂𔭐܂B
		̎A󂯓np[^inregsɁA荞ݏIɃp
		[^󂯎Ƃoutregs̒ɁAĂ܂B

	߂l:	AX̒l

@	int int86x(int intnumber,union REGS *inregs,union REGS *outregs,
			struct SREGS segregs);

	:	wԍ̃\tgEFA荞݂𔭐܂B
		̎A󂯓np[^inregsɁA荞ݏIɃp
		[^󂯎Ƃoutregs̒ɁAĂ܂B
		int86ƈႤ̂́A^ZOgWX^ϐp[^̎
		nɎgƂo邱ƂłB

	߂l:	AX̒l

@@
@Aꕔ̊荞݂̂悤ɁAIɃX^bN̏Ԃω̂
@b͈܂B͖߂ׂԒnłB

@Ex)
	INT	0x25	Au\[gfBXN[h
	INT	0x26	Au\[gfBXNCg

  @

@Ă悢AۂɏĂ݂܂傤Bt@NVR[̗ƂĂ

	INT 0x21 : AH = 0x09 : DS:DX = i[AhX
					IL'$'
@gĉʂɕo͂Č܂傤B

#include <stdio.h>
#include <conio.h>
#include <dos.h>

int main(void)
{
unsigned char SampleText[] = "Dos Fanction Call Test String.$";
/* ^WX^ϐ̐錾 */
union REGS inregs,outregs;
struct SREGS segregs;

	/* p[^̃Zbg */
	inregs.h.ah = 0x09;				/* @\ԍ */
	/* ^LXgɒӁi\דȏj */
	/* ItZbgAhX (Small Model)*/
	inregs.x.dx = (unsigned int)&SampleText[0];
	segread(&segregs);	/* ZOgAhX (Small Model)*/

	/* Dos Fanction Call */
	intdosx(&inregs,&outregs,&segregs);
	
	return 0;
}

@ƂȂ܂B̃t@NV͕IL'$'ŏIĂ邱ƂɁA
ĉB܂T^Iȃt@NV͂̂悤ɏ܂B
@ȒPł傤BWX^ɂĂׂ̍͂ȂςȂ̂ŁAʂ̖{Œׂ
Bt@NVR[gȂAȂɈӎKv͂Ȃł
B

  @ZOgAhX̓ǂݍ

@t@NVɂẮî悤ɁjZOgWX^̎w肪KvȂ
܂B̂߁A֐ƂăZOgWX^̓ǂ݂ł悤
̂̂ŏЉĂ܂傤B
@AhX֘A̘b́AfƖڂɊ֘AĂ܂Bׂ̂Ă
Љɂ͑ςȂ̂ŁAX[f݂̂ɂăTvĂ܂B

	<dos.h>
	
	void segread(struct SREGS *segregs);

	:	w肳ꂽZOgWX^\̂Ɍ݂̃ZOgWX^
		eǂݍ݂܂B
		荞ݏIɃp[^󂯎Ƃoutregs̒

  @far|C^

@X[fŃvOɂ΂΁Ap̂farƂL[
[hłB32Bit̑傫Ă܂B
@́AX[f̃ZOgÕAhXɃANZXׂɑ݂܂B
@܂ItZbgƃZOg̗˂ȂzłB
@ʏ̃|C^ł16Bit̑傫Ȃ߂ɁAZOg𒴂AhXɂ
ANZXł܂񂪁A͂ł܂BȒPȗŌĂ݂܂傤B

Ex)
	unsigned char far *TVRAMpointer = (unsigned char far *)0xA0000000L;

	/* eLXgVRAM0NA */
	for(counter = 0;counter < (160*25);counter++){
		TVRAMpointer[counter] = 0;
	}

@̂悤ɂȂ܂B

	Far Pointer
	
	D31      D16 D15       D0
	+-----------------------+
	|           |           |
	+-----------------------+
	 ZOg   ItZbg
	 AhX     AhX

@Ƃ\łA₷ł傤Bȍ~ł͕pɂɎgƍl̂
悭ĂB

@T|[g@

@̃eLXĝႤƂ܂AЋĂB
@܂A͂̃X^CA{̃~XȂǂ܂AȂĂB
@tɁA̋LɍڂĂȂƂɕtĂ̎܂AЋĂ
Bɗǂ̂ڎw܂̂ŁA肢܂B


@쌠E]ړɂā@

@쌠

@@̃eLXgɊւvOEhLg̒쌠T.NODAL܂B

@]ځEĔzz

@@]ځEĔzzɂĂ͓ɐ܂B񂶂΂܂ĂB
@@ȂAˑR͂TvXV邱Ƃ̂ŁÂƂ͓悤
@@΂܂ĂB

@@]ڂ̍ۂɂ̓A[JCut@C̓e͕ςȂ悤ɂĂB
@@ISH, UU Ȃǂ̔zz`͐܂B

@@AGȂǂɌfڂ̍ۂɂ͕K҂܂ŘA肢v܂B
@@iG̕t^Et[\tgWւ̎ڂ͑劽}ł̂ŁAǂX肢
     ܂Bj

@Ɛ

@@̃vO̎gpɂ艽̑QĂA҂͐ӔC𕉂܂B

@Ql@

@VC	(p)	с@
				VXeR[̕@		SOFT BANK


