	.286c
	page	,132
;***********************************************************************
;*                                                                     *
;*  ＴＯＷＮＳのテキスト用パレット色変更                               *
;*                                                                     *
;*  [呼出] call chg_pal( mode , color , n_red , n_green , n_blue ) ;   *
;*  [入力] mode    : 処理モード( 0 : 割合読出 , 1 : 割合書出 )         *
;*         color   : 変更する色番号(1～7,8～15)                        *
;*         n_red   : 赤色の割合数  (0～15)                             *
;*         n_green : 緑色の割合数  (0～15)                             *
;*         n_blue  : 青色の割合数  (0～15)                             *
;*  [出力] n_red   : 赤色の割合数  (0～15)                             *
;*         n_green : 緑色の割合数  (0～15)                             *
;*         n_blue  : 青色の割合数  (0～15)                             *
;*                                                                     *
;*---------------------------------------------------------------------*
;*   1 : 1991/06/19 Created by M.Watari                                *
;*                                                                     *
;***********************************************************************
	public	_chg_pal
_TEXT	segment	word public 'CODE'
	assume	cs:_TEXT
;
VD_ADRS		EQU	 0448h	; ビデオ出力コントローラ
VD_DATA		EQU	 044ah	; ビデオ出力I/Oレジスタ
PL_CODE		EQU	0fd90h	; アナログパレットアドレス
PL_BLUE		EQU	0fd92h	; 青色のパレットアドレス
PL_RED		EQU	0fd94h	; 赤色のパレットアドレス
PL_GREEN	EQU	0fd96h	; 緑色のパレットアドレス
;
;  メインルーチン
;
_chg_pal	proc	near
mode	equ	ss:[bp+4]
color	equ	ss:[bp+6]
n_red	equ	ss:[bp+8]
n_green	equ	ss:[bp+10]
n_blue	equ	ss:[bp+12]
	enter	0,0
	push	ax
	push	bx
	push	dx
	push	di

	mov	dx,VD_ADRS	; テキスト用パレットを書き込み対象にする
	mov	al,01h		; プライオリティレジスタに設定(01)
	out	dx,al		;
	mov	dx,VD_DATA	;
	mov	al,021h		; レイア１用16色パレットに設定（PLT0:1,PLT1:0)
	out	dx,al
;			指定された色番号のパレットの設定
	mov	ax,color	; 色番号の設定
	mov	dx,PL_CODE
	out	dx,al

	mov	bx,mode
	cmp	bx,0
	jne	short Set_clr
Get_clr:
;			青色用パレット値の取り出し
	xor	ax,ax
	mov	dx,PL_BLUE
	in	al,dx
	mov	di,n_blue
	shr	al,4
	mov	[di],ax		; 青色用パレット値の設定
;			赤色用パレット値の取り出し
	xor	ax,ax
	mov	dx,PL_RED
	in	al,dx
	mov	di,n_red
	shr	al,4
	mov	[di],ax		; 赤色用パレット値の設定
;			緑色用パレット値の取り出し
	xor	ax,ax
	mov	dx,PL_GREEN
	in	al,dx
	mov	di,n_green
	shr	al,4
	mov	[di],ax		; 緑色用パレット値の設定
	jmp	short finish	; 指定色番号の各色の状態値取り出し終了

Set_clr:
;			青色用パレット値の設定
	mov	dx,PL_BLUE
	mov	ax,n_blue
	shl	ax,4
	out	dx,al
;			赤色用パレット値の設定
	mov	dx,PL_RED
	mov	ax,n_red
	shl	ax,4
	out	dx,al
;			緑色用パレット値の設定
	mov	dx,PL_GREEN
	mov	ax,n_green
	shl	ax,4
	out	dx,al

finish:
	mov	dx,VD_ADRS	; テキスト用パレットを元に戻す
	mov	ax,01h		; プライオリティレジスタに設定(01)
	out	dx,ax		;
	mov	dx,VD_DATA	;
	out	dx,ax		; レイア０用16色パレットに設定（PLT0:0,PLT1:0)

	pop	di
	pop	dx
	pop	bx
	pop	ax
	leave
	ret
_chg_pal	endp
_TEXT	ends
	end
