#if ! defined (_GRFABS_CCREG_H)
#define _GRFABS_CCREG_H
typedef colormap_t *alloc_colormap_func (int);
typedef struct monitor_data {
LIST_HEAD(modelist, display_mode) modes;
dmode_t *current_mode;
u_long flags;
} mdata_t;
typedef struct display_mode_data {
monitor_t * monitor;
view_t * current_view;
cop_t **frames;
u_short hedley_current;
u_short bplcon0;
u_short std_start_x;
u_short std_start_y;
#if defined (GRF_ECS) || defined (GRF_AGA)
u_short beamcon0;
u_short hbstart;
u_short hbstop;
u_short hsstart;
u_short hsstop;
u_short vbstart;
u_short vbstop;
u_short vsstart;
u_short vsstop;
#endif
dimen_t max_size;
dimen_t min_size;
u_short min_depth;
u_short max_depth;
u_long flags;
use_colormap_func *use_colormap;
get_colormap_func *get_colormap;
alloc_colormap_func *alloc_colormap;
display_view_func *display_view;
vbl_handler_func *vbl_handler;
} dmdata_t;
enum dmode_flag_bits {
DMB_INTERLACE,
DMB_HEDLEY_EXP
};
enum dmode_flags {
DMF_INTERLACE = 1 << DMB_INTERLACE,
DMF_HEDLEY_EXP = 1 << DMB_HEDLEY_EXP
};
typedef struct view_data {
dmode_t *mode;
colormap_t *colormap;
u_long flags;
} vdata_t;
enum view_flag_bits {
VB_DISPLAY,
};
enum view_flags {
VF_DISPLAY = 1 << VB_DISPLAY,
};
#if defined (GRF_A2024)
# if defined (GRF_PAL)
extern cop_t std_pal_a2024_copper_list[];
extern int std_pal_a2024_copper_list_len;
extern int std_pal_a2024_copper_list_size;
# endif
# if defined (GRF_NTSC)
extern cop_t std_a2024_copper_list[];
extern int std_a2024_copper_list_len;
extern int std_a2024_copper_list_size;
# endif
extern cop_t std_dlace_copper_list[];
extern int std_dlace_copper_list_len;
extern int std_dlace_copper_list_size;
extern u_short a2024_color_value_line0[4];
extern u_short a2024_color_value_line1[4];
#endif
#if defined(GRF_AGA)
extern cop_t aga_copper_list[];
extern int aga_copper_list_len;
extern int aga_copper_list_size;
#endif
extern cop_t std_copper_list[];
extern int std_copper_list_len;
extern int std_copper_list_size;
extern monitor_t *cc_monitor;
extern u_short cc_default_colors[32];
extern u_short cc_a2024_default_colors[4];
#define MDATA(m) ((mdata_t *)(m->data))
#define DMDATA(d) ((dmdata_t *)(d->data))
#define VDATA(v) ((vdata_t *)(v->data))
#define RWDATA(r) ((rwdata_t *)(r->data))
#if defined (GRF_ECS) || defined (GRF_AGA)
#define CALC_DIWHIGH(hs, vs, he, ve) \
((u_short)((he&0x100)<<5)|(ve&0x700)|((hs&0x100)>>3)|((vs&0x700)>>8))
#define USE_CON3 0x0001
#else
#define USE_CON3 0x0
#endif
enum lace_frame_numbers {
F_LACE_LONG,
F_LACE_SHORT,
F_LACE_STORE_LONG,
F_LACE_STORE_SHORT,
F_LACE_TOTAL
};
enum frame_numbers {
F_LONG,
F_STORE_LONG,
F_TOTAL
};
#if defined (GRF_A2024)
enum quad_frame_numbers {
F_QD_QUAD0, F_QD_QUAD1, F_QD_QUAD2, F_QD_QUAD3,
F_QD_STORE_QUAD0, F_QD_STORE_QUAD1, F_QD_STORE_QUAD2, F_QD_STORE_QUAD3,
F_QD_TOTAL
};
#define QUAD0_ID 0x0001
#define QUAD1_ID 0x00f1
#define QUAD2_ID 0x0f01
#define QUAD3_ID 0x0ff1
#define HALF_2024_LINE (512>>3)
#define DIGITAL_RED 0x0800
#define DIGITAL_GREEN 0x0080
#define DIGITAL_BLUE 0x0008
#define DIGITAL_INTENSE 0x0001
#define A2024_L0_BLACK (0)
#define A2024_L0_DGREY (DIGITAL_BLUE)
#define A2024_L0_LGREY (DIGITAL_RED)
#define A2024_L0_WHITE (DIGITAL_RED|DIGITAL_BLUE)
#define A2024_L1_BLACK (0)
#define A2024_L1_DGREY (DIGITAL_INTENSE)
#define A2024_L1_LGREY (DIGITAL_GREEN)
#define A2024_L1_WHITE (DIGITAL_GREEN|DIGITAL_INTENSE)
#define A2024_L0_INDEX(color_reg) (((0x4&color_reg)>>1)|(0x1&color_reg))
#define A2024_L1_INDEX(color_reg) (((0x8&color_reg)>>2)|((0x2&color_reg)>>1))
#define A2024_CM_TO_CR(cm,rn) \
(a2024_color_value_line0[0x3 & (cm)->entry[A2024_L0_INDEX(rn)]] |\
a2024_color_value_line1[0x3 & (cm)->entry[A2024_L1_INDEX(rn)]])
#endif
#define VARVBLANK 0x1000
#define LOLDIS 0x0800
#define CSCBLANKEN 0x0400
#define VARVSYNC 0x0200
#define VARHSYNC 0x0100
#define VARBEAM 0x0080
#define DISPLAYDUAL 0x0040
#define DISPLAYPAL 0x0020
#define VARCSYNC 0x0010
#define CSBLANK 0x0008
#define CSYNCTRUE 0x0004
#define VSYNCTRUE 0x0002
#define HSYNCTRUE 0x0001
#define USE_BPLCON3 1
#define BPLCON2_ZDCTEN (1<<10)
#define BPLCON2_ZDBPEN (1<<11)
#define BPLCON2_ZDBPSEL0 (1<<12)
#define BPLCON2_ZDBPSEL1 (1<<13)
#define BPLCON2_ZDBPSEL2 (1<<14)
#define BPLCON3_EXTBLNKEN (1<<0)
#define BPLCON3_EXTBLKZD (1<<1)
#define BPLCON3_ZDCLKEN (1<<2)
#define BPLCON3_BRDNTRAN (1<<4)
#define BPLCON3_BRDNBLNK (1<<5)
#define STANDARD_NTSC_ROWS 262
#define STANDARD_PAL_ROWS 312
#define STANDARD_COLORCLOCKS 226
#define STANDARD_DENISE_MAX 455
#define STANDARD_DENISE_MIN 93
#define STANDARD_NTSC_BEAMCON ( 0x0000 )
#define STANDARD_PAL_BEAMCON ( DISPLAYPAL )
#define SPECIAL_BEAMCON ( VARVBLANK | LOLDIS | VARVSYNC | VARHSYNC | VARBEAM | CSBLANK | VSYNCTRUE)
#define MIN_NTSC_ROW 21
#define MIN_PAL_ROW 29
#define STANDARD_VIEW_X 0x81
#define STANDARD_VIEW_Y 0x2C
#define STANDARD_HBSTRT 0x06
#define STANDARD_HSSTRT 0x0B
#define STANDARD_HSSTOP 0x1C
#define STANDARD_HBSTOP 0x2C
#define STANDARD_VBSTRT 0x0122
#define STANDARD_VSSTRT 0x02A6
#define STANDARD_VSSTOP 0x03AA
#define STANDARD_VBSTOP 0x1066
#if defined (__STDC__)
monitor_t *cc_init_monitor(void);
void monitor_vbl_handler(monitor_t * m);
dmode_t *get_current_mode(void);
dmode_t *get_next_mode(dmode_t * d);
dmode_t *get_best_mode(dimen_t * size, u_char depth);
bmap_t *alloc_bitmap(u_short width, u_short height, u_short depth, u_short flags);
void free_bitmap(bmap_t * bm);
void cc_load_mode(dmode_t * d);
int cc_init_modes(void);
monitor_t *cc_get_monitor(dmode_t * d);
view_t *cc_get_current_view(dmode_t * d);
view_t *cc_alloc_view(dmode_t * mode, dimen_t * dim, u_char depth);
colormap_t *cc_alloc_colormap(int depth);
int cc_colormap_checkvals(colormap_t * vcm, colormap_t * cm, int use);
int cc_get_colormap(view_t * v, colormap_t * cm);
int cc_use_colormap(view_t * v, colormap_t * cm);
# if defined (GRF_A2024)
colormap_t *cc_a2024_alloc_colormap(int depth);
int cc_a2024_get_colormap(view_t * v, colormap_t * cm);
int cc_a2024_use_colormap(view_t * v, colormap_t * cm);
# endif
void cc_mode_vbl_handler(dmode_t * d);
void cc_lace_mode_vbl_handler(dmode_t * d);
void cc_init_view(view_t * v, bmap_t * bm, dmode_t * mode, box_t * dbox);
void cc_free_view(view_t * v);
void cc_remove_view(view_t * v);
dmode_t * cc_get_display_mode(view_t * v);
#if defined (GRF_SUPER72)
dmode_t *cc_init_super72(void);
void display_super72_view(view_t * v);
#endif
# if defined (GRF_NTSC)
dmode_t *cc_init_ntsc_hires(void);
void display_hires_view(view_t * v);
dmode_t *cc_init_ntsc_hires_lace(void);
void display_hires_lace_view(view_t * v);
# if defined (GRF_A2024)
dmode_t *cc_init_ntsc_hires_dlace(void);
void display_hires_dlace_view(view_t * v);
dmode_t *cc_init_ntsc_a2024(void);
void display_a2024_view(view_t * v);
void a2024_mode_vbl_handler(dmode_t * d);
# endif
# if defined (GRF_AGA)
dmode_t *cc_init_ntsc_aga(void);
void display_aga_view(view_t * v);
# endif
# endif
# if defined (GRF_PAL)
dmode_t *cc_init_pal_hires(void);
void display_pal_hires_view(view_t * v);
dmode_t *cc_init_pal_hires_lace(void);
void display_pal_hires_lace_view(view_t * v);
# if defined (GRF_A2024)
dmode_t *cc_init_pal_hires_dlace(void);
void display_pal_hires_dlace_view(view_t * v);
dmode_t *cc_init_pal_a2024(void);
void display_pal_a2024_view(view_t * v);
void pal_a2024_mode_vbl_handler(dmode_t * d);
# endif
# if defined (GRF_AGA)
dmode_t *cc_init_pal_aga(void);
void display_pal_aga_view(view_t * v);
# endif
# endif
#endif
#endif