1 #ifndef SCREEN_H_INCLUDED
2 #define SCREEN_H_INCLUDED
3 
4 
5 
6 typedef struct {
7     unsigned	char	blue;			/* B�̵��� (0��7/255)	*/
8     unsigned	char	red;			/* R�̵��� (0��7/255)	*/
9     unsigned 	char	green;			/* G�̵��� (0��7/255)	*/
10     unsigned 	char	padding;
11 } PC88_PALETTE_T;
12 
13 
14 /*
15  *	PC-88 Related
16  */
17 
18 extern	PC88_PALETTE_T	vram_bg_palette;	/* �طʥѥ�å�	*/
19 extern	PC88_PALETTE_T	vram_palette[8];	/* �Ƽ�ѥ�å�	*/
20 
21 extern	byte	sys_ctrl;			/* OUT[30] SystemCtrl     */
22 extern	byte	grph_ctrl;			/* OUT[31] GraphCtrl      */
23 extern	byte	grph_pile;			/* OUT[53] �Ť͹�碌     */
24 
25 #define	SYS_CTRL_80		(0x01)		/* TEXT COLUMN80 / COLUMN40*/
26 #define	SYS_CTRL_MONO		(0x02)		/* TEXT MONO     / COLOR   */
27 
28 #define	GRPH_CTRL_200		(0x01)		/* VRAM-MONO 200 / 400 line*/
29 #define	GRPH_CTRL_64RAM		(0x02)		/* RAM   64K-RAM / ROM-RAM */
30 #define	GRPH_CTRL_N		(0x04)		/* BASIC       N / N88     */
31 #define GRPH_CTRL_VDISP		(0x08)		/* VRAM  DISPLAY / UNDISP  */
32 #define GRPH_CTRL_COLOR		(0x10)		/* VRAM  COLOR   / MONO    */
33 #define	GRPH_CTRL_25		(0x20)		/* TEXT  LINE25  / LINE20  */
34 
35 #define	GRPH_PILE_TEXT		(0x01)		/* �Ť͹�碌 ��ɽ�� TEXT  */
36 #define	GRPH_PILE_BLUE		(0x02)		/*		       B   */
37 #define	GRPH_PILE_RED		(0x04)		/*		       R   */
38 #define	GRPH_PILE_GREEN		(0x08)		/*		       G   */
39 
40 
41 
42 /*
43  *	��������ѥ��
44  */
45 
46 	/* ���躹ʬ���� */
47 
48 extern	char	screen_dirty_flag[ 0x4000*2 ];	/* �ᥤ���ΰ� ��ʬ����	*/
49 extern	int	screen_dirty_all;		/* �ᥤ���ΰ� ���蹹��	*/
50 extern	int	screen_dirty_palette;		/* ������ ����		*/
51 extern	int	screen_dirty_status;		/* ���ơ������ΰ� ����	*/
52 extern	int	screen_dirty_status_hide;	/* ���ơ������ΰ� �õ�	*/
53 extern	int	screen_dirty_status_show;	/* ���ơ������ΰ� �����*/
54 extern	int	screen_dirty_frame;		/* ���ΰ� ����		*/
55 
56 #define	screen_set_dirty_flag(x)	screen_dirty_flag[x] = 1
57 #define	screen_set_dirty_all()		screen_dirty_all = TRUE
58 #define	screen_set_dirty_palette()	do {				\
59 					  screen_dirty_palette = TRUE;	\
60 					  screen_dirty_all = TRUE;	\
61 					} while(0)
62 #define	screen_set_dirty_status()	screen_dirty_status = 0xff
63 #define	screen_set_dirty_status_hide()	screen_dirty_status_hide = TRUE
64 #define	screen_set_dirty_status_show()	screen_dirty_status_show = TRUE
65 #define	screen_set_dirty_frame()	screen_dirty_frame = TRUE;
66 
67 
68 	/* ����¾ */
69 
70 extern	int	frameskip_rate;		/* ����ɽ���ι����ֳ�		*/
71 extern	int	monitor_analog;		/* ���ʥ���˥���		*/
72 extern	int	use_auto_skip;		/* ��ư�ե졼�ॹ���å�		*/
73 
74 
75 
76 /*
77  *	ɽ������
78  */
79 
80 enum {
81     SCREEN_INTERLACE_NO = 0,		/* �������쥹ɽ�����ʤ�	*/
82     SCREEN_INTERLACE_YES = 1,		/* �������쥹ɽ������		*/
83     SCREEN_INTERLACE_SKIP = -1		/* 1�饤����ɽ������		*/
84 };
85 extern	int	use_interlace;		/* �������졼��ɽ��		*/
86 
87 extern	int	use_half_interp;	/* ���̥�����Ⱦʬ��������֤��� */
88 
89 enum {					/* ���̥�����			*/
90     SCREEN_SIZE_HALF,			/*		320 x 200	*/
91     SCREEN_SIZE_FULL,			/*		640 x 400	*/
92 #ifdef	SUPPORT_DOUBLE
93     SCREEN_SIZE_DOUBLE,			/*		1280x 800	*/
94 #endif
95     SCREEN_SIZE_END
96 };
97 extern	int	screen_size;		/* ���̥���������		*/
98 
99 extern	int	use_fullscreen;		/* ������ɽ������		*/
100 
101 extern	double	mon_aspect;		/* ��˥����Υ����ڥ�����	*/
102 
103 extern	int	status_fg;		/* ���ơ��������ʿ�		*/
104 extern	int	status_bg;		/* ���ơ������طʿ�		*/
105 
106 extern	int	show_status;		/* ���ơ�����ɽ��̵ͭ		*/
107 
108 
109 /*
110  *
111  */
112 
113 enum {
114     SHOW_MOUSE = 0,
115     HIDE_MOUSE = 1,
116     AUTO_MOUSE = 2
117 };
118 extern	int	hide_mouse;		/* �ޥ����������ɤ���		*/
119 enum {
120     UNGRAB_MOUSE = 0,
121     GRAB_MOUSE   = 1
122 };
123 extern	int	grab_mouse;		/* ����֤��뤫�ɤ���		*/
124 
125 extern	int	use_swcursor;		/* ��˥塼���ѥ�������ɽ�����롩*/
126 extern	int	now_swcursor;		/* �������ѥ�������ɽ����?	*/
127 
128 
129 /*
130  *	ɽ���ǥХ����ѥ��
131  */
132 
133 #define	STATUS_HEIGHT	(20)
134 
135 extern	int	WIDTH;			/* ����Хåե���������		*/
136 extern	int	HEIGHT;			/* ����Хåե��ĥ�����		*/
137 extern	int	DEPTH;			/* ���ӥåȿ�	(8/16/32)	*/
138 extern	int	SCREEN_W;		/* ���̲������� (320/640/1280)	*/
139 extern	int	SCREEN_H;		/* ���̽ĥ����� (200/400/800)	*/
140 
141 extern	int	SCREEN_DX;		/* ������ɥ�����ȡ�		*/
142 extern	int	SCREEN_DY;		/* ���̥��ꥢ����ȤΥ��ե��å�	*/
143 
144 extern	char	*screen_buf;		/* ����Хåե���Ƭ		*/
145 extern	char	*screen_start;		/* ������Ƭ			*/
146 
147 extern	char	*status_buf;		/* ���ơ��������� ��Ƭ		*/
148 extern	char	*status_start[3];	/* ���ơ��������� ��Ƭ		*/
149 extern	int	status_sx[3];		/* ���ơ��������襵����		*/
150 extern	int	status_sy[3];
151 
152 
153 
154 
155 extern	Ulong	color_pixel[16];		/* ��������		*/
156 extern	Ulong	color_half_pixel[16][16];	/* ���䴰���ο�������	*/
157 extern	Ulong	black_pixel;			/* ���ο�������		*/
158 enum {						/* ���ơ������˻Ȥ���	*/
159     STATUS_BG,					/*	�طʿ�(��)	*/
160     STATUS_FG,					/*	���ʿ�(��)	*/
161     STATUS_BLACK,				/*	����		*/
162     STATUS_WHITE,				/*	��		*/
163     STATUS_RED,					/*	�ֿ�		*/
164     STATUS_GREEN,				/*	�п�		*/
165     STATUS_COLOR_END
166 };
167 extern	Ulong	status_pixel[STATUS_COLOR_END];	/* ���ơ������ο�������	*/
168 
169 
170 
171 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
172                           WIDTH
173 	 ������������������������������������������
174 	�������������������������������������������� ��
175 	��              ��                        �� ��
176 	��              ��SCREEN_DY               �� ��
177 	��              ��                        �� ��
178 	��������������������������������������    �� ��
179 	��   SCREEN_DX  ��  ��              ��    �� ��
180 	��              ����������������������    �� ��HEIGHT
181 	��              ��  ��   SCREEN_W   ��    �� ��
182 	��              ��  ��              ��    �� ��
183 	��              ��  ��SCREEN_H      ��    �� ��
184 	��              ��  ��              ��    �� ��
185 	��              ����������������������    �� ��
186 	��                                        �� ��
187 	�������������������������������������������� ��
188 	�����ơ�����0 �����ơ�����1 �����ơ�����2 �� ��STATUS_HEIGHT
189 	�������������������������������������������� ��
190 	    ���ơ�����0��2�Υ�������Ψ�ϡ� 1:3:1
191 
192 	screen_buf	����Хåե�����Ρ���Ƭ�ݥ���
193 	WIDTH		����Хåե�����Ρ����ԥ������
194 	HEIGHT		        ��          �ĥԥ������
195 
196 	screen_size	���̥�����
197 	screen_start	���̥Хåե��Ρ���Ƭ�ݥ���
198 	SCREEN_W	���̥Хåե��Ρ����ԥ������ (320/640/1280)
199 	SCREEN_H	      ��        �ĥԥ������ (200/400/800)
200 
201 	DEPTH		������ (�Хåե��Υӥå�����8/16/32)
202 
203 	status_buf	���ơ������Хåե�����Ρ���Ƭ�ݥ���
204 	status_start[3]	���ơ����� 0��2 �ΥХåե��Ρ���Ƭ�ݥ���
205 	status_sx[3]		��		      ���ԥ������
206 	status_sy[3]		��		      �ĥԥ������
207 
208 
209 	�� ������ɥ�ɽ���ξ�硢
210 		WIDTH * (HEIGHT + STATUS_HEIGHT) �Υ������ǡ�
211 		������ɥ����������ޤ���
212 			(���ơ�������ɽ���ʤ顢 WIDTH * HEIGHT)
213 
214 	�� ������ɽ���ξ�硢
215 		SCREEN_SX * (SCREEN_SY + STATUS_HEIGHT) �ʾ�Υ�������
216 		�����̲����ޤ���
217 			(���ơ�������ɽ���ʤ顢������ʬ�Ϲ����ɤ�Ĥ֤�)
218 
219    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
220 
221 /***********************************************************************
222  * ���̽����ν��������λ
223  *	screen_init()	���̤��������롣��ư���˸ƤФ�롣
224  *	screen_exit()	�夫���Ť����롣��λ���˸ƤФ�롣
225  ************************************************************************/
226 int	screen_init(void);
227 void	screen_exit(void);
228 
229 
230 /***********************************************************************
231  * �⡼���ڤ��ؤ����Ρ��Ƽ������
232  *	�����ꥢ�������褹��ɬ�פ�����Τǡ����ν������롣
233  * 	grab_mouse �� hide_mouse �ʤɤ˴�Ť����ޥ�����������롣
234  *	������ԡ��Ȥ䡢���ơ����������ꤹ�롣
235  ************************************************************************/
236 void	screen_switch(void);
237 
238 
239 /***********************************************************************
240  *
241  ************************************************************************/
242 void	screen_attr_mouse_move(void);
243 void	screen_attr_mouse_click(void);
244 int	screen_attr_mouse_debug(void);
245 
246 
247 /***********************************************************************
248  * PC-8801�κǽ�Ū�ʿ����������
249  ************************************************************************/
250 void	screen_get_emu_palette(PC88_PALETTE_T pal[16]);
251 void	screen_get_menu_palette(PC88_PALETTE_T pal[16]);
252 
253 
254 /***********************************************************************
255  * ����
256  ************************************************************************/
257 void	screen_update(void);		/* ����   (1/60sec��)  */
258 void	screen_update_immidiate(void);	/* ¨���� (��˥�����) */
259 
260 
261 /***********************************************************************
262  * �ե졼�ॹ���å�
263  ************************************************************************/
264 void	frameskip_blink_reset(void);	/* ���ǽ��� �ƽ����		*/
265 void	frameskip_counter_reset(void);	/* �ե졼�ॹ���å� �ƽ����	*/
266 void	frameskip_check(int on_time);	/* �ե졼�ॹ���å� Ƚ��	*/
267 
268 int	quasi88_cfg_now_frameskip_rate(void);
269 void	quasi88_cfg_set_frameskip_rate(int rate);
270 
271 
272 
273 /***********************************************************************
274  * HALF���������ο��䴰��ͭ����̵����Ϣ�δؿ�
275  ***********************************************************************/
276 int	quasi88_cfg_can_interp(void);
277 int	quasi88_cfg_now_interp(void);
278 void	quasi88_cfg_set_interp(int enable);
279 
280 /***********************************************************************
281  * INTERLACE�������Ϣ�δؿ�
282  ***********************************************************************/
283 int	quasi88_cfg_now_interlace(void);
284 void	quasi88_cfg_set_interlace(int interlace_mode);
285 
286 /***********************************************************************
287  * ���ơ�����ɽ�������Ϣ�δؿ�
288  ***********************************************************************/
289 int	quasi88_cfg_can_showstatus(void);
290 int	quasi88_cfg_now_showstatus(void);
291 void	quasi88_cfg_set_showstatus(int show);
292 
293 /***********************************************************************
294  * ���������ꡦ���̥����������Ϣ�δؿ�
295  ***********************************************************************/
296 int	quasi88_cfg_can_fullscreen(void);
297 int	quasi88_cfg_now_fullscreen(void);
298 void	quasi88_cfg_set_fullscreen(int fullscreen);
299 int	quasi88_cfg_max_size(void);
300 int	quasi88_cfg_min_size(void);
301 int	quasi88_cfg_now_size(void);
302 void	quasi88_cfg_set_size(int new_size);
303 void	quasi88_cfg_set_size_large(void);
304 void	quasi88_cfg_set_size_small(void);
305 
306 /***********************************************************************
307  * ???
308  ***********************************************************************/
309 int	quasi88_info_draw_count(void);
310 
311 #endif	/* SCREEN_H_INCLUDED */
312