/*******************************************
 *   FM-Towns VRAM access library : vram   *
 *         Program made by K,Ajima         *
 *      Copyright  ajiyan soft l.t.d.      *
 *******************************************/



/*** vrammcr *************************************************************

  Ｒｅａｌ−ＴＶＲＡＭ・ＧＶＲＡＭ  にアクセスするライブラリです。
  本ヘッダファイルは、これらのライブラリ関数をマクロにより高速に実現するも
のです。マクロとしては使いたくない場合は、本ヘッダをインクルードした直後に
 #undef によりマクロを削除して vram.h をインクルードしてください。

ｖｒｍ＿ｘｘｘｘｘ（）			：  ＶＲＡＭ  メイン関数
ｉｎｖｒｍ＿ｘｘｘｘｘ（）		：  インライン関数

**************************************************************************/



#ifndef _VRAMMCR_HEADER_INCLUDED



#define _VRAMMCR_HEADER_INCLUDED



									/* 文字アトリビュート */
#define VRM_ATR_WORD_2	0x80			/* WORD 文字 2バイト目 */
#define VRM_ATR_WORD_1	0x40			/* WORD 文字 1バイト目 */
#define VRM_ATR_I		0x20			/* IRGB I */
#define VRM_ATR_BLINK	0x10			/* ブリンク */
#define VRM_ATR_REVERSE	0x08			/* リバース */
#define VRM_ATR_G		0x04			/* IRGB G */
#define VRM_ATR_R		0x02			/* IRGB R */
#define VRM_ATR_B		0x01			/* IRGB B */



/********************************************************************
 *	TVRAM へアトリビュート設定
 *		1. x (0-79)
 *		2. y (0-24)
 *		3. アトリビュート
 ********************************************************************/
#define vrm_set_atr(vrm_x,vrm_y,vrm_attrib)														\
	*(char _far *)( 0xc8000000L | (long)( ((int)(vrm_x)<<1) + ((int)(vrm_y)*0xa0) ) +1L ) =		\
		(char)(vrm_attrib)



/********************************************************************
 *	TVRAM へ半角文字設定
 *		1. x (0-79)
 *		2. y (0-24)
 *		3. ASCII コード
 ********************************************************************/
#define vrm_setc(vrm_x,vrm_y,vrm_code)														\
	*(char _far *)( 0xc8000000L | (long)( ((int)(vrm_x)<<1) + ((int)(vrm_y)*0xa0) ) ) =		\
		(char)(vrm_code)



/********************************************************************
 *	TVRAM へ WORD 文字設定
 *		1. x (0-79)
 *		2. y (0-24)
 *		3. JIS コード
 *		4. アトリビュート
 ********************************************************************/
#define vrm_setw(vrm_x,vrm_y,vrm_code)											\
	*(int _far *)( 0xca000000L | (long)( (vrm_x<<1) + (vrm_y*0xa0) ) ) =		\
		(vrm_code>>8) | ( (vrm_code<<8) & 0xff00 )



/********************************************************************
 *	TVRAM へ半角文字を書く
 *		1. x (0-79)
 *		2. y (0-24)
 *		3. ASCII コード
 *		4. アトリビュート
 ********************************************************************/
#define vrm_putc(vrm_x,vrm_y,vrm_code,vrm_attrib)											\
	*(int _far *)( 0xc8000000L | (long)( ((int)(vrm_x)<<1) + ((int)(vrm_y)*0xa0) ) ) =		\
		( vrm_code | ((int)(vrm_attrib)<<8) )



/********************************************************************
 *	TVRAM へ WORD 文字を書く
 *		1. x (0-79)
 *		2. y (0-24)
 *		3. JIS コード
 *		4. アトリビュート
 ********************************************************************/
#define vrm_putw(vrm_x,vrm_y,vrm_code,vrm_attrib)									\
	*(char _far *)( 0xc8000000L | (long)( (vrm_x<<1) + (vrm_y*0xa0) ) +1L ) =		\
		(char)( vrm_attrib | 0x40 );												\
	*(char _far *)( 0xc8000000L | (long)( (vrm_x<<1) + (vrm_y*0xa0) ) +3L ) =		\
		(char)( vrm_attrib | 0x80 );												\
	*(int  _far *)( 0xca000000L | (long)( (vrm_x<<1) + (vrm_y*0xa0) ) ) =			\
		(vrm_code>>8) | ( (vrm_code<<8) & 0xff00 )



/********************************************************************
 *	TVRAM アトリビュート取得
 *		1. x (0-79)
 *		2. y (0-24)
 *		ret: アトリビュート
 ********************************************************************/
#define vrm_get_atr(vrm_x,vrm_y)															\
	(*(char _far *)( 0xc8000000L | (long)( ((int)(vrm_x)<<1) + ((int)(vrm_y)*0xa0) ) +1L ))



/********************************************************************
 *	TVRAM 半角文字取得
 *		1. x (0-79)
 *		2. y (0-24)
 *		ret: ASCII コード
 ********************************************************************/
#define vrm_getc(vrm_x,vrm_y)															\
	(*(char _far *)( 0xc8000000L | (long)( ((int)(vrm_x)<<1) + ((int)(vrm_y)*0xa0) ) ))



/********************************************************************
 *	TVRAM WORD 文字取得
 *		1. x (0-79)
 *		2. y (0-24)
 *		ret: JIS コード
 ********************************************************************/
#define vrm_getw(vrm_x,vrm_y)															\
	(*(int _far *)( 0xca000000L | (long)( (vrm_x<<1) + (vrm_y*0xa0) ) ))



#endif

