	PART 2 

@EMS

@DOSł͊{Iɂ́A1MByteȏ̃Ԃ͈Ƃ͏o܂BA
1MByteł́A͂肢ċ܂BŁÂ炢낢ȕ@ŁA1Mȏ
Ԃ@܂B̂PEMSłB
@EMSɂĂׂ̍dlɂẮAAviKł͂قƂǒmKv͂
܂BɏȂƗʂő̋ȃƂł܂BŁA
̓߂́AŒ̒m݂̂Љ܂傤B

@EMS̎dg

@EMS̎dg݂͔ɊȒPŕ₷̂łB́ADOSŃANZXo
1MByteԂ̒ɁAEMS̋ȃ̈ꕔoāAƂɉāA
o郁ւĂƂŁA1MByte𒴂郁Ԃ̂ł
B̐}̂ق₷ł傤B


  | DOS Memory |                      |  EMS Memory |  EMS_y[Wԍ
  |            |                      |         |
  | 1MByte |                      |-------------|  0
  |            |                      |-------------|  1
  |------------|                   +--|-------------|  2
  | EMS o |<------------------+  |-------------|  3
  |    |y[W            |-------------|  4
  |------------|                      |-------------|  5
  |            |                      |             |
  |            |                      |             |
  |            |


@̂悤ɁAʏ̃Ԃ̈ꕔɏo邱ƂŁAEMŜ
܂A1MByteȏ̋ԂĂ悤ɂȂ܂B
@AxɈ郁͈͍̔͂ő64KBytełB́Ao郁
̈ʒu1MByte̋ԂȂ̂ŁAo邾m[}̃Ȃ悤ɏo
ʂ64KByteɌ܂Ă̂łB
@ӂ̂EMS̃ANZXPʂ܂Ă邱ƂłB
@EMS̃ANZXPʂ̓y[WƌĂ΂̂łB1y[W16KBytełB
@܂Ao邱Ƃ̏oő̃y[W4y[WłB1MByte̋
ɂ}ƂȂ̈𕨗y[Wƌ܂By[W̃AhX͂Ă
Ă܂B̃AhXy[Wt[ZOgAhXƂ܂B
@̃y[Wt[ZOgAhX牺ɏ0,1,2,3Ԃƕy[W̔ԍ
܂B
@悤EMSԂɋ؂ꂽy[W͘_y[Wƌ܂B_y[W̔ԍ
͊mۂꂽnhƂɕt܂Bł_y[WOԂłnh1
OԂƃnh2̂OԂ͕ʂ̎łB
@p̉͂̒xŏ\ł傤B܂oN؂芷ƌzłˁB
@̕@͋ȋԂƂɂ͒΂ɂƂ@Ȃ̂ŁAłɎ悤
l͂ɗł傤B

@Ȃ݂ɁA̋@\𗘗pɂ́AEMM386.EXEȂǂ́AEMS悤ɂf
oCXhCo풓Ȃ΂܂B̃t@NVgƂ
ȏ̓s܂B


===============================================================================
@EMSt@NV
===============================================================================

		0x41	y[Wt[ZOg̎擾
	荞	INT	0x67
			AH	0x41
	o		AH	Xe[^XR[h
				0x00	I
				ȊOȗ
			BX	y[Wt[ZOg
			y[Wt[ZOg擾܂B̃y[Wt[
			ZOg͎ۂɓǂݏK̃AhXƂȂ
			B

		0x42	󂫃y[W̎擾(y[W̎擾j
	荞	INT	0x67
			AH	0x42
	o		AH	Xe[^XR[h
				0x00	I
				ȊOȗ
			BX	󂫃y[W
			DX	y[W
			݂̋󂫃y[WƁAy[WԂ܂B

		0x43	y[W蓖
	荞	INT	0x67
			AH	0x43
			BX	蓖ăy[W
	o		AH	Xe[^XR[h
				0x00	I
				ȊOȗ
			DX	nh
			w肵y[WEMS犄蓖Ă܂B
			̎ɂ̃y[WɃANZX邽߂̃nh
			Ԃ܂̂ŁAȉ̑Ɏgp邽ߕKۑĂ
			B

		0x44	nhy[W̃}bsO
	荞	INT	0x67
			AH	0x44
			AL	y[Wԍ
			BX	_y[Wԍ
			DX	nh
	o		AH	Xe[^XR[h
				0x00	I
				ȊOȗ
			w肵nh̘_y[WAw̕y[W
			o܂B̍Ƃ}bsO܂B
			sȂƁAӖ̂鑀͂ł܂B
			܂AP̃nhőœɂSy[W܂œƐł
			܂B

		0x45	y[W̉
	荞	INT	0x67
			AH	0x45
			DX	nh
	o		AH	Xe[^XR[h
				0x00	I
				ȊOȗ
			w肵nhmۂĂ_y[WSĂ
			B

		0x46	EMMhCõo[W̎擾
	荞	INT	0x67
			AH	0x46
	o		AH	Xe[^XR[h
				0x00	I
				ȊOȗ
			AL	o[W
				High 4Bit = 
				Low  4Bit = 
			݂EMMhCõo[W擾܂B


	̑̃t@NV܂ȗĂ炢܂B

===============================================================================
@ۂ̐菇
===============================================================================

@EMS̑s߂ɂ́ACł̓|C^̑ɏKnĂ邱ƂOł
B̎ۂ̓ǂݏ͌ŒAhXł̒ڑɂȂ܂B
@āAł͏ǂđ삵ĂĂ݂܂傤B

	1,EMMhCȍ풓mF

@hCogđ삷̂ŁARhCȍ풓mFKv܂B
̊mF̕@낢Ƃ̂łA΂̕@Pɍiċ܂傤B

@(QbgC^vg@)
 [1] DOSt@NVR[0x35gINT67H̊荞݃xN^擾܂B
 [2] 擪AhX0x0AԒnɃ|C^i߂܂B
 [3] ̃AhX8Byte̕"EMMXXXX0"mF܂B
 [4] ̕Ȃ΁A풓Ă܂B
@
@ŏĂȂłTvĂB

Ex)(C)
	unsigned int counter,Inter67_Segment;
	char far *EMMCheckS,*EMM_String = "EMMXXXX0";

	/* int 67h ̃xN^̎擾 */
	/* ES̒l擾̂ŁACCASMg܂B܂ */
	_asm{
		mov ax,3567h
		int 21h
		mov Inter67_Segment,es
	}
	/* mF̃AhXvZ */
	EMMCheckS = (char far*)((long)Inter67_Segment * 0x10000 + 0x0a);
	/* `FbN[v */
	for(counter=0;counter<8;counter++){
		if(*(EMMCheckS + counter) != *(EMM_String +counter)){
			return 0;	/* G[I */
		}
	}

	2,EMSKvȃmۂ

@āAgɂ́AǂȎނ̃̏ꍇłAmۂȂƂ
܂ˁB̏Ȃ܂B
@ŁAmۂPʂy[WPʂł邱Ƃd˂ĂĂ܂傤B
@st@NV

  Int0x67 : AH = 43H : BX = 蓖ăy[W	(ڍׂ͏Q)

@łB
@ŕԂnh͍mۂ_y[W̃ANZX̎̌ɂȂ̂ł
̂ŁAۑĂKv܂B

	3̃}bsO

@EMS̎dg݂łqׂ悤ɁAɍƂ_̒i}
bsOjsKv܂Bǂ̕y[Wɂǂ̘_y[W̓ê
Ɣc邱Ƃ厖łB
@̂̌vŹAꂼ̃Av͈͓̔̂ƂȂ̂ŊesĂ
B̌vZœꂽAy[Wԍȉ̃t@NVŃ}bsO܂B

  Int0x67 : AH = 44H : AL = y[W : BX = _y[W
                       DX = nh			(ڍׂ͏Q)

@̍ƂEMS̓łB

	4,y[Wt[ɒڃs

@́AŒAhX̒ڑłBbł͂܂sׂł͂܂
񂪃ZOg݂̑ȏコȂ̂ŁA߂Ďדȑɑ܂傤
BZOgFItZbg̊TOĂȂƊ댯Ȃ̂ŁAǂĂ
삵܂傤B
@TvȀЂ׋ĂBƂ肠ATvڂĂ
傤B

Ex)(C)

unsigned int PageFlameSegment,i;
unsigned char state;
char far *emm;

	/* ANZX */
	/* EMS POINTER ̌vZ */
	/* |Cgł */
	emm = (char far*)(PageFlameSegment * 0x10000L);
	/* 1024Byte0NA */
	for(i=0;i<(1024);i++){
		*(emm + i) = 0;
	}

 iTv̗ႪASĂł͂܂B炸j

	5,gp̊J

@ăvOŎgṕAȊOɊJĒuƂAVłˁB
@Ƃ́AȂƎg郁̗ʂĂ܂Ă܂܂B

  Int0x67 : AH = 45H : DX = nh			(ڍׂ͏Q)


@ŁAIłBy[WPʂňƂ𗝉AȒPłB
@A̓ǂݏ̓|C^iAhXj𗝉ĂȂlɂ͊댯ł
AӂĂB
@荂xȏ]ޕ͑̎QlɂĂB
@A̎邩܂̂ŁA̎ɂ͏Љ邩
B

