*******************************************************************************
	 	PART 4 (5) 256[h̑@

				T.Noda
					Ver 1.00 : 1997/12/06(Sat) 19:36:47

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


  256MODE(256FOtBbN[h)

@PC9821ɂȂĂH98łłȂ256FOtBbNgpł悤
Ȃ܂B̂߁Aʂ̐\ɂȂłA̎dl܂
ɕnłA܂֘ÃCu̕ŝ߂ɁAgp\tg̏o
܂茩܂łB̂߁A͂256F̉ʂɂɕ`悷邩
Ǝv܂B
@A256F[hPC9821256[hɌ点Ă炢܂B

===============================================================================
  256MODE̎dg
===============================================================================

PC9821 256 MODE ̎dl

		|
	------------------------------------------------
	F	|1677F256F\\
	------------------------------------------------
	𑜓x	|640 * 400 (24 KHz or 31KHz)
		|640 * 480 (31KHz Only)
	------------------------------------------------
	VRAM	|pbNgsNZ`,	(ڍׂ͉̐})
	\	|v[`		(PC9821 A MATE܂ł݂͑Ǝv)
		|			R:	PEGCƂANZ[^
		|				



	 pbNgsNZ`

@pbNgsNZ`Ƃ́Av[ȒPȎdg݂łB
@256[hł1_̐Fԍ̂܂1oCgɑ邽߁A1oCg1_ƌ
Ƃ\łBłPȂPz̗vfԍ̍WɂȂA̔z
vfԍ̒ĝ܂܁A̓_̐Fԍɑ܂B
@ȏ̂悤ɁAŏ̓_(0,0)珇(1,0),(2,0),,,,,,,,(639,399)ƁAFԍ
ɕ񂾌`pbNgsNZ`ƂłB

	(0,0)|(1,0)|                   ,,,,,,,,,,,,,,,,,,    |(639,0)|
	--------------------------------------------------------------
	| 0  | 255 |                                         |   255 |
	--------------------------------------------------------------
                                   :
                                   :
                                   :
                                   :
                                   :
	--------------------------------------------------------------
	| 128 | 255 |                                         |   0  |
	--------------------------------------------------------------

	Ƃʂ̏񂪈ȉ̂PzɂȂ܂B

	vfԍ|Wł̔ԍ|z̒g = Fԍ
	-----------------------------------------
	0	|(0,0)       |0			|
	-----------------------------------------
	1	|(1,0)       |255		|
	-----------------------------------------
			:
			:
			:
	-----------------------------------------
	639	|(639,0)     |255		|
	-----------------------------------------
			:
			:
			:
			:
	-----------------------------------------
	255600  |(639,399)   |0			|
	-----------------------------------------

@܂肱ꂩ番悤ɁAʏ̍Ŵ_(X,Y)ɃANZXƂ
vfԍ[ Y*639 + X ]ƂȂ܂B̔ԍ̔z̒g̓_̐FƂȂA
g邱ƂŁAʂ邱Ƃł̂łB
@́Aʏ̓_ł͔Ɉ₷֗łB

@ۂ̉ʏɓ_łɂ͂KvłA͂̂ق
GꂽƎv܂B

	  }bvg I/O

@PC9821256[hł256ʂ̐pI/O̓Ɋ蓖ĂA
삷邱ƂŁAۂI/O𑀍삷邱ƂɂȂ܂B̂悤Ƀԏɕ\
I/O}bvg I/OƂ܂B
@Ƃ́AŒAhX鑀ɂȂ܂B

	 PC9821 256MODE }bvg I/Oꗗ

	Adress		|@\		|DATA	|
			|		|SIZE	|
	-------------------------------------------------------------------
	E000:0004	|VRAM Window0	|2BYTE	|VRAM Window0ɂǂ̃oN
			|oNʒuw	|	|o邩w肵܂
			|		|	|
	-------------------------------------------------------------------
	E000:0006	|VRAM Window1	|2BYTE	|VRAM Window1ɂǂ̃oN
			|oNʒuw	|	|o邩w肵܂
			|		|	|
	-------------------------------------------------------------------
	E000:0100	|VRAM	|1BYTE	| = 0x00 : Packed Pixel
			|`̎w	|	| = 0x01 : Plane
	-------------------------------------------------------------------

@ʏĝ͈ȏ3łBŊvpꂪoĂ܂B
@ȉŉ܂傤B

	  VRAMւBANK؂芷ɂANZX

@256F[hłVRAM͔ɑ傫Ȃ1MBYEԂɂ͂͂₠܂B
@{VRAM̓veNg[hɂłȍ~ȂANZX邱Ƃ͂ł܂
BłA邽߂̕@pӂĂ܂BBANK؂芷Ƃ
@łB{VRAM̌߂ꂽP(BANK)ŋ؂肻̂܂܂
C[WŃANZXöփRs[A𑀍삷邱ƂŁAVRAMɊԐړI
ANZX@łB

	ADRESS		|	|		  256 VRAM
			|	|		+---------------+ BANK0
	A800:0000------>|-------|	+-------|---------------| BANK1
			|VRAM	|	| +-----|---------------| BANK2
			|Window0|<------+ |     |---------------| BANK3
	B000:0000------>|-------|	  |	|---------------| BANK4
			|VRAM	|<--------+	|---------------| BANK5
			|Window1|		|---------------| BANK6
			|-------|		|---------------| BANK7
			|	|		|---------------| BANK8
			|	|			:	
			|	|		+---------------+ BANK15

@̂悤Ɏw肳ꂽBANK̓eC̓ȃAhX(VRAM Window)
ɂ̂܂ܕ\܂B̕\BANKw肷̂͐̃}bvgI/OłB
@̎dĝ݂ŃveNg[hłȂĂɃANZX邱Ƃ\
łB
@BANKP̃TCY32KBytełBłA640*400LinêPʂ\BANK
8BANKłBȉɑSẴp^[LĂ܂B

	ʃ[h	|	ΉoN
	---------------------------------------------
	640*400Line	|	0  7  BANK
	\		|
	---------------------------------------------
	640*400Line	|	8  15 BANK
			|
	---------------------------------------------
	640*480Line	|	0  9  BANK


	  256pbg

@256FɂȂăpbgRGB̋Pxw̕LقA16F̎Ƃ͕ς
肠܂BApbg̓ǂ݂o悤ɂȂ܂B
@͈̑ȑOƓlɁA{I/Oōs܂B

	 Read Write Port
	I/O Adress	|@\		|	f[^			
			|		| D7 D6 D5 D4 D3 D2 D1 D0	
	----------------------------------------------------------------
	AAH		|΋Px		| {       ΋Px        }
			|		|  0  `  255
	----------------------------------------------------------------
	ACH		|ԋPx		| {       ԋPx        }
			|		|  0  `  255
	----------------------------------------------------------------
	AEH		|Px		| {       Px        }
			|		|  0  `  255
	----------------------------------------------------------------

	 Write Port
	I/O Adress	|@\		|	f[^			
			|		| D7 D6 D5 D4 D3 D2 D1 D0	
	----------------------------------------------------------------
	A8H		|pbgԍ	|{    pbgԍ      }
			|̎w		|
	----------------------------------------------------------------

		\A`ʂ̎w

@256[hł640*400Line640*480LinêQ̃[h܂B̃[h
؂芷ɂBIOSg؂芷Sł傤Bi܂ǂȂ_
̂łj

	256 BIOS

		30H	OtBbNʃ[h̐ݒ
	荞	INT	18H
			AH	30H
			AL	ʐXLg̎w
				
				   D7 D6 D5 D4 D3 D2 D1 D0
				  +------------------------+
				  | 0  0  0  0  1 HS  0  0 |
				  +------------------------+
				   ʐXLg
					HS = 0 : 24KHz
					HS = 1 : 31KHz

			BH	ʉ𑜓x̎w

				   D7 D6 D5 D4 D3 D2 D1 D0
				  +------------------------+
				  | 0  0 {RES}  0  0 {TXTR}|
				  +------------------------+
				
				  RES : ʉ𑜓x̎w(2Bit)
					RES =  0 0  : 640 * 200 LOWER
					RES =  0 1  : 640 * 200 UPPER
					RES =  1 0  : 640 * 400
					RES =  1 1  : 640 * 480

				  TXTR: eLXgʂ̍sw
					TXTR = 0 0  : 20s
					TXTR = 0 1  : 25s
					TXTR = 1 0  : 30s

	o		AH	
				{	AH = 05H	:		}
				{	AH != 05H	:sĂяo	}

			ʐݒ֘A̎wBIOSłẢeǂI/O
			ɂł̂Aڂ͂킩܂B
			܂ABIOSI/O킹ĎgpƂ͏Ԃɒ
			KvłB
			@640*480 Line[h̎wł͎I31KHzɂȂ܂B

		̏
	-----------------------------------------------------
	J[\\	|	\Ȃ
	eLXg	|	\Ȃ
	OtBbN|	\Ȃ

		31H	OtBbNʃ[h̎擾
	荞	INT	18H
			AH	31H
	o
			AL	ʐXLg
					ڍׂ͏Ɠl

			BH	ʉ𑜓x̏
					ڍׂ͏Ɠl

			ʐݒ֘Ȁ󋵂擾܂B

		4DH	OtBbN[h̕ύX(W/g)
	荞	INT	18H
			AH	4DH
			CH	OtBbN[h
				= 00H	:WOtBbN[h
				= 01H	:gOtBbN[h
	o			Ȃ
			OtBbN[hW܂͊g[hɕύX܂B
			́AW16F[h,g256F[hƂƂ
			B
			@Ȃ݂640*480Line[hł͎IɊg[hɂȂ
			Ă̂ŁÃR}ḧӖ͂܂B
			@̐؂芷I/OłȒPɂł܂B

@BIOSŉʃ[h̐؂芷sƂ\łB

	256 ʐݒ葀 I/O

@ȏ̑͂I/Ołł͂łAȂƂ̂ŕ͈
ŏĂ܂B

	 Read Write Port
	I/O Adress	|@\		|	f[^			
			|		| D7 D6 D5 D4 D3 D2 D1 D0	
	----------------------------------------------------------------
	A4H		|\	| ~ ~ ~ ~ ~ ~ ~ DP
			|		| DP = 0 \
			|		| DP = 1 
	----------------------------------------------------------------
	A6H		|`	| ~ ~ ~ ~ ~ ~ ~ WP
			|		| WP = 0 \
			|		| WP = 1 
	----------------------------------------------------------------
	09A8H		|g	| ~ ~ ~ ~ ~ ~ ~ HF
			|ǂ݂	| HF = 0 : 24KHz
			|		| HF = 1 : 31KHz
	----------------------------------------------------------------

	 Read Port
	I/O Adress	|@\		|	f[^			
			|		| D7 D6 D5 D4 D3 D2 D1 D0	
	----------------------------------------------------------------
	09A0H		|Ӱدۯ2| ~ ~ ~ ~ ~ ~ ~ FF
			|ǂ݂	| FF = w肳ꂽ̓e(BIT)
	----------------------------------------------------------------

	 Write Port
	I/O Adress	|@\		|	f[^			
			|		| D7 D6 D5 D4 D3 D2 D1 D0	
	----------------------------------------------------------------
	6AH		|Ӱدۯ2| {Ӱدۯ2۰ٺ}
			|۰ٺގw |  ̕\Ql
	----------------------------------------------------------------
	09A0H		|Ӱدۯ2| {     ނw          }
			|ǂ݂w	|Ӱدۯ2̓ǂݏoނw
			|		|  ̕\Ql
	-----------------------------------------------------------------

	  Ӱدۯ2۰ٺޕ\
	R[hl|Ӗ			|
	-----------------------------------------------------------------
	00H	|8FOtBbN[h	|		(ڍׂGDC̏͂)
	-----------------------------------------------------------------
	01H	|16FOtBbN[h	|		(ڍׂGDC̏͂)
	-----------------------------------------------------------------
	04H	|GRCG݊[h		|		(ڍׂGRCG̏͂)
	-----------------------------------------------------------------
	05H	|EGCg[h		|		(ڍׂEGC̏͂)
	-----------------------------------------------------------------
	06H	|g[hύXs	|g[hւ̕ύX̋w
	-----------------------------------------------------------------
	07H	|g[hύX	|g[hւ̕ύX̋w
	-----------------------------------------------------------------
	20H	|WOtBbN[h	|
		|			|(g[hύX̂Ƃ̂ݎw)
	-----------------------------------------------------------------
	21H	|gOtBbN[h	|
		|			|(g[hύX̂Ƃ̂ݎw)
	-----------------------------------------------------------------
	40H	|CRT[h		|		(ڍׂGDC̏͂)
	-----------------------------------------------------------------
	41H	|׽ިڲ[h	|		(ڍׂGDC̏͂)
	-----------------------------------------------------------------
	68H	|\Ay[W	|
		|			|(g[hύX̂Ƃ̂ݎw)
	-----------------------------------------------------------------
	69H	|\Ay[WA	|
		|			|(g[hύX̂Ƃ̂ݎw)
	-----------------------------------------------------------------
	84H	|GDC2.5MHz		|		(ڍׂGDC̏͂)
	-----------------------------------------------------------------
	83H	|GDC5.0KHz		|		(ڍׂGDC̏͂)
	85H	|			|
	-----------------------------------------------------------------
	
	̒l6AHɎw肷邱ƂŁA\̃[hւ̕ύX\łB
	
	
	  Ӱدۯ2̓ǂݏo
	
	ǂݏoޔԍ|09A0H Bit FF̓e	|Ӗ
	------------------------------------------------------------------
	04H		|0			|8FOtBbN[h
			+-----------------------+-------------------------
			|1			|16FOtBbN[h
	------------------------------------------------------------------
	05H		|0			|CRT[h
			+-----------------------+-------------------------
			|1			|׽ިڲ[h
	------------------------------------------------------------------
	07H		|0			|GRCG݊[h
			+-----------------------+-------------------------
			|1			|EGCg[h
	------------------------------------------------------------------
	08H		|0			|g[hύXs
			+-----------------------+-------------------------
			|1			|g[hύX
	------------------------------------------------------------------
	0AH		|0			|WOtBbN[h
			+-----------------------+-------------------------
			|1			|gOtBbN[h
	------------------------------------------------------------------
	0DH		|0			|\Ay[W
			+-----------------------+-------------------------
			|1			|\Ay[WA
	------------------------------------------------------------------

	Ӱدۯ2̓ǂݏo͂̕\̒l09A0HɎw肵āAx
	|[gǂ݂ɍsƁÃAhXɒlԂ̂ŁAFF Bitɒl
	\画fB

@ȏ̂悤I/OĂ܂A̐ݒ֘A16F̐ݒƉς薳
sƂłAɈaƂ͂ȂƎv܂B

===============================================================================
  ۂ̑
===============================================================================

@Ďdg݂𗝉ĂƂāAʂɕ`悵Č܂傤B
@TvvOł́AĉʂɃOf[V鏈܂B
@256[ḧԏdvȓ_VRAMւ̃ANZX̎dł傤B

	1,256F[hɕύX

@ď߂ɁAʃ[h̕ύXȂĂ͂܂B̂߂ɂBIOSŕύX
܂BʂI/Oł܂܂񂪁AڍׂǂȂ̂ŁABIOSĝ
傤B

Ex)(C)
	union REGS inregs,outregs;
	unsigned char far *MEMORYMAPEDIO = (unsigned char far *)0xe0000000;

	inregs.h.al = 0x08;		//24 Hz PC9821 BIOS Used
	inregs.h.bh = 0x21;		//400 line 25 s
	inregs.h.ah = 0x30;		//BISO Call Number
	int86(0x18,&inregs,&outregs);

	inregs.h.ch = 0x01;		//g[h
	inregs.h.ah = 0x4D;		//BISO Call Number
	int86(0x18,&inregs,&outregs);

	MEMORYMAPEDIO += 0x100;		//VRAMւ̏݌`̎w
	*MEMORYMAPEDIO = 0x00;		//Packed Pixel `

@邱Ƃ́A𑜓x̎wƊg[hւ̈ڍsłB̏͊ȒPł傤B
@YĂȂ̂APacked Pixel `ŃANZX邱Ƃw肷邱ƂłB

@珉sƁA\ׂ͂Ē~Ă̂ŁAOŕ\邱Ƃs
Kv܂B

	2,pbg̐ݒ

@16F[h̎Ɠł̂ŁAɉ͂Ȃł傤B

	3,VRAMւ̃ANZX

@̍ڂŏdvłBɂ͍ŏɉʏ̂ǂ̍WɃANZX̂w
āA̍WlVRAM擪ʒȗΓIȃAhXvZKv܂
B̂߂̎͐Љ̂łB

	ADRESS = Y*639 + X

@łBőΓIȃAhX܂Bɂ̃AhXǂBANK
ANZX̂𒲂ׂ܂B1BANK̃TCY32KByteȂ̂ŁA̐Ŋ
̏BANK̔ԍɂȂ܂BĂ̗]肪BANK̃ANZXADRESS
Ȃ܂B̊|ZAZ͏d̂ŃAZuƃrbgVtg̑gݍ킹
łقǂł傤B
@ȏ̌vZ͈ȉ̃vOɂȂ܂B

Ex)(C)
	unsigned int far *MEMORYMAPEDIO = (unsigned int far *)0xe0000004;

	unsigned long LogicalAdress;
	unsigned int  BANK,AdressinBANK;

	/* _AhXvZ */
	LogicalAdress = (unsigned long)((640L * y) + x);
	/* BANKԍvZ */
	BANK = (unsigned int)(LogicalAdress >> 15); /*  */
	/* BANKAhXvZ */
	AdressinBANK = (unsigned int)(LogicalAdress & 32767);

@ŁAvZBANKԍ}bvgI/OɎw肵VRAMWindowɂBANK
o܂B

Ex)(C)
	/* VRAMWindow0ɕ\BANKw肷 */
	*MEMORYMAPEDIO = BANK;

@Ƃ́APɏ݂sΉʂɓ_łł傤B

	/* VRAMɏ */
	VWindow0Adress[AdressinBANK] = PalNum;

@̂悤ɁABANKʒuvZĂ̐؂芷sKvȂ߁AC
ł͑ϏdɂȂĂ܂܂BłAHvŁAȂ̍v
Ƃ\łB
@ȏBANK؂肩炷@ƂẮAiłɋCÂlł傤
jVRAM Window2邱Ƃ𗘗pāAɌBANKAɂ邱ƂBANK
؂肩ɓԂ𔼕Ɍ炷Ƃł܂B
@܂RAPoCgPʂŃANZXSoCgPʂŃANZX
łB

  `

@ȏ̃mEnElߍ256LIB͂łɍĂ܂B{̃mEnE
̃\[XQlɂقǂł傤B(ASMŏĂ邯)
@SOFTЉ̂قɑSʓIɌJĂ܂̂ŁAQlɂĂ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@

@PC-9801 vO}[YBiBle	ȑEIC/	Zp]_

@b MAGAZINE 1994 P	W:pOtBbNp
							SOFT BANK

@܂AԐړIɂ Takeshi KONO 256͎QlɂȂĂ܂B
@Takeshi KONO@ɂ͖xAӂłB





