--- xmil/io/crtc.h 2004/08/04 17:09:25 1.1 +++ xmil/io/crtc.h 2004/08/13 04:39:09 1.8 @@ -3,6 +3,13 @@ extern "C" { #endif +enum { + CRTC_PALB = 0, + CRTC_PALR = 1, + CRTC_PALG = 2, + CRTC_PLY = 3 +}; + #define PAL_NORMAL 0x00 #define PAL_HIGHRESO 0x01 @@ -34,49 +41,51 @@ extern "C" { #define SCRN64_320x100x4096 10 -#define SCRN_24KHZ 0x01 // 0:15KHz 1:24KHz -#define SCRN_200LINE 0x02 // 0:400line 1:200line -#define SCRN_TEXTYx2 0x04 // 0:ノーマル 1:縦に拡大 -#define SCRN_DISPVRAM 0x08 // 0:表 1:裏 -#define SCRN_ACCESSVRAM 0x10 // 0:表 1:裏 -#define SCRN_PCGMODE 0x20 // 0:互換 1:高速 -#define SCRN_CPUFONT 0x40 // 0:8ラスタ 1:16ラスタ -#define SCRN_UNDERLINE 0x80 // 0:なし 1:あり -#define SCRN_DISPCHANGE (SCRN_24KHZ | SCRN_200LINE | \ - SCRN_TEXTYx2 | SCRN_UNDERLINE) +// SCRN_24KHZ 0x01 // 0:15KHz 1:24KHz +// SCRN_200LINE 0x02 // 0:400line 1:200line +// SCRN_TEXTYx2 0x04 // 0:ノーマル 1:縦に拡大 +// SCRN_DISPVRAM 0x08 // 0:表 1:裏 +// SCRN_ACCESSVRAM 0x10 // 0:表 1:裏 +// SCRN_PCGMODE 0x20 // 0:互換 1:高速 +// SCRN_CPUFONT 0x40 // 0:8ラスタ 1:16ラスタ +// SCRN_UNDERLINE 0x80 // 0:なし 1:あり + +enum { + SCRN_24KHZ = 0x01, + SCRN_200LINE = 0x02, + SCRN_TEXTYx2 = 0x04, + SCRN_DISPVRAM = 0x08, + SCRN_ACCESSVRAM = 0x10, + SCRN_PCGMODE = 0x20, + SCRN_CPUFONT = 0x40, + SCRN_UNDERLINE = 0x80, + + SCRN_DISPCHANGE = SCRN_24KHZ|SCRN_200LINE|SCRN_TEXTYx2|SCRN_UNDERLINE +}; + +enum { + CRTCREG_HSIZE = 0, + CRTCREG_HDISP = 1, + CRTCREG_HSYNC = 2, + CRTCREG_PULSE = 3, + CRTCREG_VSIZE = 4, + CRTCREG_VSIZEA = 5, + CRTCREG_VDISP = 6, + CRTCREG_VSYNC = 7, + CRTCREG_CHRCY = 9, + CRTCREG_POSH = 12, + CRTCREG_POSL = 13, + + CRTCREG_MAX = 18 +}; typedef struct { - UINT8 PAL_B; - UINT8 PAL_R; - UINT8 PAL_G; - UINT8 PLY; - UINT8 TEXT_PAL[8]; + UINT8 rgbp[4]; UINT8 SCRN_BITS; - UINT8 CRTC_NUM; - - WORD DISP_PAGE; - WORD FNT_XL; - WORD FNT_YL; - BYTE TXT_XL; - BYTE TXT_YL; - BYTE TXT_YS; - WORD GRP_XL; - WORD GRP_YL; - BYTE CPU_BANK; - BYTE CRT_BANK; - - WORD CRT_YL; - WORD CRT_VS; - WORD CRT_VL; - - BYTE TXT_VL; - BYTE TXT_VLA; - - WORD TXT_TOP; - WORD fnty; - + UINT8 regnum; + UINT8 reg[CRTCREG_MAX]; UINT8 BLACKPAL; UINT8 EXTPALMODE; UINT8 EXTGRPHPAL; @@ -88,22 +97,37 @@ typedef struct { UINT8 *gram; // curvram UINT updatemask; // updatemsk UINT8 updatebit; // curupdt + UINT8 dispmode; + UINT8 pal_bank; + UINT8 pal_disp; + + UINT pos; + UINT fonty; + UINT yl; + + SINT32 dispclock; + SINT32 vsyncstart; + SINT32 vpulseclock; + UINT vl; } CRTCEXT; typedef struct { + UINT8 text[8]; + UINT16 grph[2][64]; + UINT16 grph4096[4096]; +} CRTCPAL; + +typedef struct { CRTCSTAT s; CRTCEXT e; + CRTCPAL p; } CRTC; -extern BYTE crtc_TEXTPAL[8]; -extern WORD crtc_GRPHPAL[2][64]; -extern WORD crtc_PAL4096[4096]; - - -//********************************************************************** +// ---- -void vrambank_patch(void); +void crtc_bankupdate(void); // vrambank_patch +void crtc_regupdate(void); void IOOUTCALL crtc_o(UINT port, REG8 value); // x1_crtc_w @@ -133,6 +157,7 @@ REG8 IOINPCALL blackctrl_i(UINT port); void crtc_initialize(void); void crtc_reset(void); +void crtc_forcesetwidth(REG8 width); #ifdef __cplusplus }