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