mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2018 lines
38 KiB
2018 lines
38 KiB
#ifdef VGG
|
|
/* This file is not used for a non-VGA port. */
|
|
|
|
/*[
|
|
Name: vgaports.h
|
|
Derived From: original
|
|
Author: Phil Taylor
|
|
Created On: December 1990
|
|
Sccs ID: @(#)vgaports.h 1.13 01/13/95
|
|
Purpose: VGA ports definitions.
|
|
|
|
(c)Copyright Insignia Solutions Ltd., 1990. All rights reserved.
|
|
|
|
]*/
|
|
|
|
#ifdef BIT_ORDER1
|
|
|
|
/* CRTC Mode Control Register. Index 0x17 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned hardware_reset : 1, /* NO */
|
|
word_or_byte_mode : 1, /* YES */
|
|
address_wrap : 1, /* NO */
|
|
not_used : 1,
|
|
count_by_two : 1, /* NO */
|
|
horizontal_retrace_select : 1, /* NO */
|
|
select_row_scan_counter : 1, /* NO */
|
|
compatibility_mode_support : 1; /* YES - CGA graphics banks */
|
|
} as_bfld;
|
|
} MODE_CONTROL;
|
|
|
|
/* CRTC Overflow Register. Index 7 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned vertical_retrace_start_bit_9 : 1, /* NO */
|
|
vertical_display_enab_end_bit_9 : 1, /* YES */
|
|
vertical_total_bit_9 : 1, /* NO */
|
|
line_compare_bit_8 : 1, /* YES */
|
|
start_vertical_blank_bit_8 : 1, /* NO */
|
|
vertical_retrace_start_bit_8 : 1, /* NO */
|
|
vertical_display_enab_end_bit_8 : 1, /* YES */
|
|
vertical_total_bit_8 : 1; /* NO */
|
|
} as_bfld;
|
|
} CRTC_OVERFLOW;
|
|
|
|
/* CRTC Max Scan Line Register. Index 9 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned double_scanning : 1, /* pixel height * 2 */
|
|
line_compare_bit_9 : 1, /* YES */
|
|
start_vertical_blank_bit_9 : 1, /* NO */
|
|
maximum_scan_line : 5; /* YES */
|
|
} as_bfld;
|
|
} MAX_SCAN_LINE;
|
|
|
|
/* CRTC Cursor Start Scan Line Register. Index A */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 2,
|
|
cursor_off : 1, /* YES */
|
|
cursor_start : 5; /* YES */
|
|
} as_bfld;
|
|
} CURSOR_START;
|
|
|
|
/* CRTC Cursor End Scan Line Register. Index B */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 1,
|
|
cursor_skew_control : 2, /* NO */
|
|
cursor_end : 5; /* YES */
|
|
} as_bfld;
|
|
} CURSOR_END;
|
|
|
|
/* Sequencer Reset Register. Index 0 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 6,
|
|
synchronous_reset : 1, /* Ditto (could implement as enable_ram)*/
|
|
asynchronous_reset : 1; /* NO - damages video and font RAM */
|
|
} as_bfld;
|
|
} SEQ_RESET;
|
|
|
|
/* Sequencer Clocking Mode Register. Index 1 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned still_not_used : 2,
|
|
screen_off : 1, /* YES - */
|
|
shift4 : 1, /* YES - */
|
|
dot_clock : 1, /* YES - distinguishes 40 or 80 chars */
|
|
shift_load : 1, /* NO */
|
|
not_used : 1, /* NO */
|
|
eight_or_nine_dot_clocks : 1; /* NO - only for mono display */
|
|
} as_bfld;
|
|
} CLOCKING_MODE;
|
|
|
|
/* Sequencer Map Mask (Plane Mask) register. Index 2 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 4,
|
|
all_planes : 4; /* YES */
|
|
} as_bfld;
|
|
} MAP_MASK;
|
|
|
|
/* Sequencer Character Map Select register. Index 3 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 2,
|
|
ch_map_select_b_hi : 1, /* YES */
|
|
ch_map_select_a_hi : 1, /* YES */
|
|
character_map_select_b : 2, /* YES */
|
|
character_map_select_a : 2; /* YES */
|
|
} as_bfld;
|
|
struct {
|
|
unsigned not_used : 2,
|
|
map_selects : 6; /* YES */
|
|
} character;
|
|
} CHAR_MAP_SELECT;
|
|
|
|
/* Sequencer Memory Mode Register. Index 4 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned
|
|
not_used : 4, /* If above 2 not both 1, bank 0 set 2 */
|
|
chain4 : 1, /* Chain all planes into 1 */
|
|
not_odd_or_even : 1, /* YES (check consistency) */
|
|
extended_memory : 1, /* NO - assume full 256K on board */
|
|
still_not_used : 1;
|
|
} as_bfld;
|
|
} MEMORY_MODE;
|
|
|
|
#ifdef V7VGA
|
|
/* Sequencer Extensions Control Register. Index 6 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned
|
|
not_used : 7,
|
|
extension_enable : 1; /* YES */
|
|
} as_bfld;
|
|
} EXTN_CONTROL;
|
|
#endif /* V7VGA */
|
|
|
|
/* Graphics Controller Set/Reset register. Index 0 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 4,
|
|
set_or_reset : 4; /* YES - write mode 0 only */
|
|
} as_bfld;
|
|
} SET_OR_RESET;
|
|
|
|
/* Graphics Controller Enable Set/Reset register. Index 1 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 4,
|
|
enable_set_or_reset : 4; /* YES - write mode 0 only */
|
|
} as_bfld;
|
|
} ENABLE_SET_OR_RESET;
|
|
|
|
/* Graphics Controller Colo[u]r Compare register. Index 2 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 4,
|
|
color_compare : 4; /* YES - read mode 1 only */
|
|
} as_bfld;
|
|
} COLOR_COMPARE;
|
|
|
|
/* Graphics Controller Data Rotate register. Index 3 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 3,
|
|
function_select : 2, /* YES - write mode 0 only */
|
|
rotate_count : 3; /* YES - write mode 0 only */
|
|
} as_bfld;
|
|
} DATA_ROTATE;
|
|
|
|
/* Graphics Controller Read Map Select register. Index 4 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 6,
|
|
map_select : 2; /* YES */
|
|
} as_bfld;
|
|
} READ_MAP_SELECT;
|
|
|
|
/* Graphics Controller Mode Register. Index 5 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 1, /* YES */
|
|
shift_register_mode : 2, /* YES */
|
|
odd_or_even : 1, /* YES (check for consistency) */
|
|
read_mode : 1, /* YES */
|
|
test_condition : 1, /* NO */
|
|
write_mode : 2; /* YES */
|
|
} as_bfld;
|
|
} MODE;
|
|
|
|
/* Graphics Controller Miscellaneous register. Index 6 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 4,
|
|
memory_map : 2, /* YES - location of EGA in M */
|
|
odd_or_even : 1, /* YES (check consistency) */
|
|
graphics_mode : 1; /* YES */
|
|
} as_bfld;
|
|
} MISC_REG;
|
|
|
|
/* Graphics Controller Colour Don't Care register. Index 7 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 4,
|
|
color_dont_care : 4; /* YES - read mode 1 only */
|
|
} as_bfld;
|
|
} COLOR_DONT_CARE;
|
|
|
|
/* Attribute Controller Mode register. Index 10 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned
|
|
select_video_bits : 1, /* YES */
|
|
color_output_assembler : 1, /* from 256 colour mode */
|
|
horiz_pan_mode : 1, /* NO */
|
|
reserved : 1,
|
|
background_intensity_or_blink : 1, /* NO - never blink */
|
|
enable_line_graphics_char_codes: 1, /* NO mono display only */
|
|
display_type : 1, /* NO - always colour display */
|
|
graphics_mode : 1; /* YES - with Sequencer Mode reg */
|
|
} as_bfld;
|
|
} AC_MODE_CONTROL;
|
|
|
|
|
|
/* Attribute Controller Colour Plane Enable register. Index 12 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 2,
|
|
video_status_mux : 2, /* NO */
|
|
color_plane_enable : 4; /* YES NB. affects attrs in text mode */
|
|
} as_bfld;
|
|
} COLOR_PLANE_ENABLE;
|
|
|
|
/* Attribute Controller Pixel Padding register. Index 14 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 4,
|
|
color_top_bits : 2,
|
|
color_mid_bits : 2;
|
|
} as_bfld;
|
|
} PIXEL_PAD;
|
|
|
|
/* External Misc Output register. Address 3cc */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned horiz_vert_retrace_polarity : 2, /* YES - 200/350/480 lines */
|
|
page_bit_odd_even : 1, /* NO - selects 32k page in odd/even?*/
|
|
/* V7VGA - YES - used to select banks */
|
|
not_used : 1,
|
|
clock_select : 2, /* YES - only for switch address */
|
|
enable_ram : 1, /* YES - writes to display mem ignored */
|
|
io_address_select : 1; /* NO - only used for mono screens */
|
|
} as_bfld;
|
|
|
|
} MISC_OUTPUT_REG;
|
|
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 4,
|
|
reserved : 2, /* YES - ignore */
|
|
feature_control : 2; /* NO - device not supported */
|
|
} as_bfld;
|
|
} FEAT_CONT_REG;
|
|
|
|
/* External Input Status Register 0. Address 3c2 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned crt_interrupt : 1, /* YES - sequence if not timing */
|
|
reserved : 2, /* YES - all bits 1 */
|
|
sense_pin : 1, /* NO */
|
|
not_used : 4; /* YES - all bits 1 */
|
|
} as_bfld;
|
|
} INPUT_STAT_REG0;
|
|
|
|
/* External Input Status Register 1. Address 3da */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 4,
|
|
vertical_retrace : 1, /* YES - sequence only */
|
|
still_not_used : 2, /* NO */
|
|
display_enable : 1; /* YES - sequence only */
|
|
} as_bfld;
|
|
} INPUT_STAT_REG1;
|
|
|
|
#endif /* BIT_ORDER1 */
|
|
|
|
#ifdef BIT_ORDER2
|
|
/* CRTC Mode Control Register. Index 0x17 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned compatibility_mode_support : 1, /* YES - CGA graphics banks */
|
|
select_row_scan_counter : 1, /* NO */
|
|
horizontal_retrace_select : 1, /* NO */
|
|
count_by_two : 1, /* NO */
|
|
not_used : 1,
|
|
address_wrap : 1, /* NO */
|
|
word_or_byte_mode : 1, /* YES */
|
|
hardware_reset : 1; /* NO */
|
|
} as_bfld;
|
|
} MODE_CONTROL;
|
|
|
|
/* CRTC Overflow Register. Index 7 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned vertical_total_bit_8 : 1, /* NO */
|
|
vertical_display_enab_end_bit_8 : 1, /* YES */
|
|
vertical_retrace_start_bit_8 : 1, /* NO */
|
|
start_vertical_blank_bit_8 : 1, /* NO */
|
|
line_compare_bit_8 : 1, /* YES */
|
|
vertical_total_bit_9 : 1, /* NO */
|
|
vertical_display_enab_end_bit_9 : 1, /* YES */
|
|
vertical_retrace_start_bit_9 : 1; /* NO */
|
|
} as_bfld;
|
|
} CRTC_OVERFLOW;
|
|
|
|
/* CRTC Max Scan Line Register. Index 9 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned maximum_scan_line : 5, /* YES */
|
|
start_vertical_blank_bit_9 : 1, /* NO */
|
|
line_compare_bit_9 : 1, /* YES */
|
|
double_scanning : 1; /* pixel height * 2 */
|
|
} as_bfld;
|
|
} MAX_SCAN_LINE;
|
|
|
|
/* CRTC Cursor Start Scan Line Register. Index A */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned cursor_start : 5, /* YES */
|
|
cursor_off : 1, /* YES */
|
|
not_used : 2;
|
|
} as_bfld;
|
|
} CURSOR_START;
|
|
|
|
/* CRTC Cursor End Scan Line Register. Index B */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned cursor_end : 5, /* YES */
|
|
cursor_skew_control : 2, /* NO */
|
|
not_used : 1;
|
|
} as_bfld;
|
|
} CURSOR_END;
|
|
|
|
/* Sequencer Reset Register. Index 0 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned asynchronous_reset : 1, /* NO - damages video and font RAM */
|
|
synchronous_reset : 1, /* Ditto (could implement as enable_ram)*/
|
|
not_used : 6;
|
|
} as_bfld;
|
|
} SEQ_RESET;
|
|
|
|
/* Sequencer Clocking Mode Register. Index 1 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned eight_or_nine_dot_clocks : 1, /* NO - only for mono display */
|
|
not_used : 1, /* NO */
|
|
shift_load : 1, /* NO */
|
|
dot_clock : 1, /* YES - distinguishes 40 or 80 chars */
|
|
shift4 : 1, /* YES - */
|
|
screen_off : 1, /* YES - */
|
|
still_not_used : 2;
|
|
} as_bfld;
|
|
} CLOCKING_MODE;
|
|
|
|
/* Sequencer Map Mask (Plane Mask) register. Index 2 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned all_planes : 4, /* YES */
|
|
not_used : 4;
|
|
} as_bfld;
|
|
} MAP_MASK;
|
|
|
|
/* Sequencer Character Map Select register. Index 3 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned character_map_select_a : 2, /* YES */
|
|
character_map_select_b : 2, /* YES */
|
|
ch_map_select_a_hi : 1, /* YES */
|
|
ch_map_select_b_hi : 1, /* YES */
|
|
not_used : 2;
|
|
} as_bfld;
|
|
struct {
|
|
unsigned map_selects : 6, /* YES */
|
|
not_used : 2;
|
|
} character;
|
|
} CHAR_MAP_SELECT;
|
|
|
|
/* Sequencer Memory Mode Register. Index 4 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned still_not_used : 1,
|
|
extended_memory : 1, /* NO - assume full 256K on board */
|
|
not_odd_or_even : 1, /* YES (check consistency) */
|
|
chain4 : 1, /* Chain all planes into 1 */
|
|
not_used : 4; /* If above 2 not both 1, bank 0 set 2 */
|
|
} as_bfld;
|
|
} MEMORY_MODE;
|
|
|
|
#ifdef V7VGA
|
|
/* Sequencer Extensions Control Register. Index 6 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned
|
|
extension_enable : 1, /* YES */
|
|
not_used : 7;
|
|
} as_bfld;
|
|
} EXTN_CONTROL;
|
|
#endif /* V7VGA */
|
|
|
|
/* Graphics Controller Set/Reset register. Index 0 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned set_or_reset : 4, /* YES - write mode 0 only */
|
|
not_used : 4;
|
|
} as_bfld;
|
|
} SET_OR_RESET;
|
|
|
|
/* Graphics Controller Enable Set/Reset register. Index 1 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned enable_set_or_reset : 4, /* YES - write mode 0 only */
|
|
not_used : 4;
|
|
} as_bfld;
|
|
} ENABLE_SET_OR_RESET;
|
|
|
|
/* Graphics Controller Colo[u]r Compare register. Index 2 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned color_compare : 4, /* YES - read mode 1 only */
|
|
not_used : 4;
|
|
} as_bfld;
|
|
} COLOR_COMPARE;
|
|
|
|
/* Graphics Controller Data Rotate register. Index 3 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned rotate_count : 3, /* YES - write mode 0 only */
|
|
function_select : 2, /* YES - write mode 0 only */
|
|
not_used : 3;
|
|
} as_bfld;
|
|
} DATA_ROTATE;
|
|
|
|
/* Graphics Controller Read Map Select register. Index 4 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned map_select : 2, /* YES - read mode 0 only */
|
|
not_used : 6;
|
|
} as_bfld;
|
|
} READ_MAP_SELECT;
|
|
|
|
/* Graphics Controller Mode Register. Index 5 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned write_mode : 2, /* YES */
|
|
test_condition : 1, /* NO */
|
|
read_mode : 1, /* YES */
|
|
odd_or_even : 1, /* YES (check for consistency) */
|
|
shift_register_mode : 2, /* YES */
|
|
not_used : 1; /* YES */
|
|
} as_bfld;
|
|
} MODE;
|
|
|
|
/* Graphics Controller Miscellaneous register. Index 6 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned graphics_mode : 1, /* YES */
|
|
odd_or_even : 1, /* YES (check consistency) */
|
|
memory_map : 2, /* YES - location of EGA in M */
|
|
not_used : 4;
|
|
} as_bfld;
|
|
} MISC_REG;
|
|
|
|
/* Graphics Controller Colour Don't Care register. Index 7 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned color_dont_care : 4, /* YES - read mode 1 only */
|
|
not_used : 4;
|
|
} as_bfld;
|
|
} COLOR_DONT_CARE;
|
|
|
|
/* Attribute Controller Mode register. Index 10 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned graphics_mode : 1, /* YES - with Sequencer Mode reg */
|
|
display_type : 1, /* NO - always colour display */
|
|
enable_line_graphics_char_codes : 1, /* NO mono display only */
|
|
background_intensity_or_blink : 1, /* NO - never blink */
|
|
reserved : 1,
|
|
horiz_pan_mode : 1, /* NO */
|
|
color_output_assembler : 1, /* from 256 colour mode */
|
|
select_video_bits : 1; /* YES */
|
|
} as_bfld;
|
|
} AC_MODE_CONTROL;
|
|
|
|
/* Attribute Controller Colour Plane Enable register. Index 12 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned color_plane_enable : 4, /* YES NB. affects attrs in text mode */
|
|
video_status_mux : 2, /* NO */
|
|
not_used : 2;
|
|
} as_bfld;
|
|
} COLOR_PLANE_ENABLE;
|
|
|
|
/* Attribute Controller Pixel Padding register. Index 14 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned color_mid_bits : 2,
|
|
color_top_bits : 2,
|
|
not_used : 4;
|
|
} as_bfld;
|
|
} PIXEL_PAD;
|
|
|
|
/* External Misc Output register. Address 3cc */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned io_address_select : 1, /* NO - only used for mono screens */
|
|
enable_ram : 1, /* YES - writes to display mem ignored */
|
|
clock_select : 2, /* YES - only for switch address */
|
|
not_used : 1,
|
|
page_bit_odd_even : 1, /* NO - selects 32k page in odd/even? */
|
|
horiz_vert_retrace_polarity : 2; /* YES - 200/350/480 lines */
|
|
} as_bfld;
|
|
} MISC_OUTPUT_REG;
|
|
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned feature_control : 2, /* NO - device not supported */
|
|
reserved : 2, /* YES - ignore */
|
|
not_used : 4;
|
|
} as_bfld;
|
|
} FEAT_CONT_REG;
|
|
|
|
/* External Input Status Register 0. Address 3c2 */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 4, /* YES - all bits 1 */
|
|
sense_pin : 1, /* NO */
|
|
reserved : 2, /* YES - all bits 1 */
|
|
crt_interrupt : 1; /* YES - sequence if not timing */
|
|
} as_bfld;
|
|
} INPUT_STAT_REG0;
|
|
|
|
/* External Input Status Register 1. Address 3da */
|
|
typedef union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned display_enable : 1, /* YES - sequence only */
|
|
still_not_used : 2, /* NO */
|
|
vertical_retrace : 1, /* YES - sequence only */
|
|
not_used : 4;
|
|
} as_bfld;
|
|
} INPUT_STAT_REG1;
|
|
#endif /* BIT_ORDER2 */
|
|
|
|
/* The Sequencer Registers */
|
|
#ifdef BIT_ORDER1
|
|
struct sequencer
|
|
{
|
|
#ifdef V7VGA
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned using_extensions : 1,
|
|
extensions_index : 4,
|
|
index : 3;
|
|
} as_bfld;
|
|
} address;
|
|
#else
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 5,
|
|
index : 3;
|
|
} as_bfld;
|
|
} address;
|
|
#endif /* V7VGA */
|
|
|
|
SEQ_RESET reset;
|
|
CLOCKING_MODE clocking_mode;
|
|
MAP_MASK map_mask;
|
|
CHAR_MAP_SELECT character_map_select;
|
|
MEMORY_MODE memory_mode;
|
|
|
|
#ifdef V7VGA
|
|
EXTN_CONTROL extensions_control;
|
|
#endif /* V7VGA */
|
|
|
|
};
|
|
|
|
|
|
|
|
/* The CRT Controller Registers */
|
|
|
|
struct crt_controller
|
|
{
|
|
#ifdef V7VGA
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 2,
|
|
index : 6;
|
|
} as_bfld;
|
|
} address;
|
|
#else
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 3,
|
|
index : 5;
|
|
} as_bfld;
|
|
} address;
|
|
#endif /* V7VGA */
|
|
|
|
byte horizontal_total; /* NO - screen trash if wrong value */
|
|
byte horizontal_display_end; /* YES - defines line length!! */
|
|
byte start_horizontal_blanking; /* NO */
|
|
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 1,
|
|
display_enable_skew_control : 2, /* NO */
|
|
end_blanking : 5; /* NO */
|
|
} as_bfld;
|
|
} end_horizontal_blanking;
|
|
|
|
byte start_horizontal_retrace; /* NO */
|
|
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 1,
|
|
horizontal_retrace_delay : 2, /* NO */
|
|
end_horizontal_retrace : 5; /* NO */
|
|
} as_bfld;
|
|
} end_horizontal_retrace;
|
|
|
|
byte vertical_total; /* NO */
|
|
CRTC_OVERFLOW crtc_overflow;
|
|
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 1,
|
|
horiz_pan_lo : 2,
|
|
preset_row_scan : 5; /* NO */
|
|
} as_bfld;
|
|
} preset_row_scan;
|
|
|
|
MAX_SCAN_LINE maximum_scan_line;
|
|
CURSOR_START cursor_start;
|
|
CURSOR_END cursor_end;
|
|
byte start_address_high; /* YES */
|
|
byte start_address_low; /* YES */
|
|
byte cursor_location_high; /* YES */
|
|
byte cursor_location_low; /* YES */
|
|
byte vertical_retrace_start; /* NO */
|
|
byte light_pen_high; /* NO */
|
|
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned
|
|
crtc_protect : 1,
|
|
refresh_type : 1,
|
|
enable_vertical_interrupt : 1, /* YES */
|
|
clear_vertical_interrupt : 1, /* YES */
|
|
vertical_retrace_end : 4; /* NO */
|
|
} as_bfld;
|
|
} vertical_retrace_end;
|
|
|
|
unsigned short vertical_display_enable_end; /* YES - defines screen height - 10 bit */
|
|
byte offset; /* ???? */
|
|
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 1,
|
|
doubleword_mode : 1, /* YES */
|
|
count_by_4 : 1, /* NO */
|
|
underline_location : 5; /* NO (mono display only) */
|
|
} as_bfld;
|
|
} underline_location;
|
|
|
|
byte start_vertical_blanking; /* NO */
|
|
byte end_vertical_blanking; /* NO */
|
|
MODE_CONTROL mode_control;
|
|
unsigned short line_compare; /* YES,10 bits*/
|
|
|
|
} ;
|
|
|
|
|
|
|
|
/* The Graphics Controller Registers */
|
|
|
|
struct graphics_controller
|
|
{
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 4,
|
|
index : 4;
|
|
} as_bfld;
|
|
} address;
|
|
|
|
SET_OR_RESET set_or_reset;
|
|
ENABLE_SET_OR_RESET enable_set_or_reset;
|
|
COLOR_COMPARE color_compare;
|
|
DATA_ROTATE data_rotate;
|
|
READ_MAP_SELECT read_map_select;
|
|
MODE mode;
|
|
MISC_REG miscellaneous;
|
|
COLOR_DONT_CARE color_dont_care;
|
|
byte bit_mask_register; /* YES - write modes 0 & 2 */
|
|
};
|
|
|
|
|
|
|
|
/* The Attribute Controller Registers */
|
|
|
|
struct attribute_controller
|
|
{
|
|
#ifdef V7VGA
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned index_state : 1,
|
|
unused : 1,
|
|
palette_address_source : 1,
|
|
index : 5;
|
|
} as_bfld;
|
|
} address;
|
|
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned
|
|
color_top_bits : 2, /* YES */
|
|
secondary_red : 1, /* YES */
|
|
secondary_green : 1, /* YES */
|
|
secondary_blue : 1, /* YES */
|
|
red : 1, /* YES */
|
|
green : 1, /* YES */
|
|
blue : 1; /* YES */
|
|
} as_bfld;
|
|
} palette[EGA_PALETTE_SIZE];
|
|
#else
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned unused : 2,
|
|
palette_address_source : 1,
|
|
index : 5;
|
|
} as_bfld;
|
|
} address;
|
|
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned
|
|
not_used : 2, /* YES */
|
|
secondary_red : 1, /* YES */
|
|
secondary_green : 1, /* YES */
|
|
secondary_blue : 1, /* YES */
|
|
red : 1, /* YES */
|
|
green : 1, /* YES */
|
|
blue : 1; /* YES */
|
|
} as_bfld;
|
|
} palette[EGA_PALETTE_SIZE];
|
|
#endif /* V7VGA */
|
|
|
|
AC_MODE_CONTROL mode_control;
|
|
|
|
#ifdef V7VGA
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned color_top_bits : 2, /* YES */
|
|
secondary_red_border : 1, /* YES */
|
|
secondary_green_border : 1, /* YES */
|
|
secondary_blue_border : 1, /* YES */
|
|
red_border : 1, /* YES */
|
|
green_border : 1, /* YES */
|
|
blue_border : 1; /* YES */
|
|
} as_bfld;
|
|
} overscan_color;
|
|
#else
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 2,
|
|
secondary_red_border : 1, /* YES */
|
|
secondary_green_border : 1, /* YES */
|
|
secondary_blue_border : 1, /* YES */
|
|
red_border : 1, /* YES */
|
|
green_border : 1, /* YES */
|
|
blue_border : 1; /* YES */
|
|
} as_bfld;
|
|
} overscan_color;
|
|
#endif /* V7VGA */
|
|
|
|
COLOR_PLANE_ENABLE color_plane_enable;
|
|
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned not_used : 4,
|
|
horizontal_pel_panning : 4; /* NO */
|
|
} as_bfld;
|
|
} horizontal_pel_panning;
|
|
|
|
PIXEL_PAD pixel_padding;
|
|
};
|
|
|
|
|
|
#ifdef V7VGA
|
|
/* The V7VGA Extension Registers */
|
|
|
|
struct extensions_controller
|
|
{
|
|
byte pointer_pattern;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned not_used : 5,
|
|
ptr_horiz_position : 3;
|
|
} as_bfld;
|
|
} ptr_horiz_posn_hi;
|
|
|
|
byte ptr_horiz_posn_lo;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned not_used : 6,
|
|
ptr_vert_position : 2;
|
|
} as_bfld;
|
|
} ptr_vert_posn_hi;
|
|
|
|
byte ptr_vert_posn_lo;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned not_used : 3,
|
|
clock_select : 1,
|
|
unused : 4;
|
|
} as_bfld;
|
|
} clock_select;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned pointer_enable : 1,
|
|
not_used : 3,
|
|
cursor_mode : 1,
|
|
unused : 2,
|
|
cursor_blink_disable : 1;
|
|
} as_bfld;
|
|
} cursor_attrs;
|
|
|
|
union {
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned dummy : 7,
|
|
dac_8_bits : 1;
|
|
} as_bfld;
|
|
} dac_control;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned emulation_enable : 1,
|
|
hercules_bit_map : 1,
|
|
write_prot_2 : 1,
|
|
write_prot_1 : 1,
|
|
write_prot_0 : 1,
|
|
nmi_enable : 3;
|
|
} as_bfld;
|
|
} emulation_control;
|
|
|
|
byte foreground_latch_0;
|
|
byte foreground_latch_1;
|
|
byte foreground_latch_2;
|
|
byte foreground_latch_3;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned not_used : 2,
|
|
fg_latch_load_state : 2,
|
|
unused : 2,
|
|
bg_latch_load_state : 2;
|
|
} as_bfld;
|
|
} fast_latch_load_state;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned unused : 6,
|
|
masked_write_source : 1,
|
|
masked_write_enable : 1;
|
|
} as_bfld;
|
|
} masked_write_control;
|
|
|
|
byte masked_write_mask;
|
|
byte fg_bg_pattern;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned line_compare_bank_reset : 1,
|
|
counter_bank_enable : 1,
|
|
crtc_read_bank_select : 2,
|
|
cpu_read_bank_select : 2,
|
|
cpu_write_bank_select : 2;
|
|
} as_bfld;
|
|
} ram_bank_select;
|
|
|
|
byte switch_readback;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned extended_clock_output: 3,
|
|
clock_3_on : 1,
|
|
external_clock_override : 1,
|
|
extended_clock_output_source : 1,
|
|
extended_clock_direction : 1,
|
|
clock_0_only : 1;
|
|
} as_bfld;
|
|
} clock_control;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned unused : 7,
|
|
extended_page_select : 1;
|
|
} as_bfld;
|
|
} page_select;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned unused : 4,
|
|
foreground_color : 4;
|
|
} as_bfld;
|
|
} foreground_color;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned unused : 4,
|
|
background_color : 4;
|
|
} as_bfld;
|
|
} background_color;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned internal_3c3_enable : 1,
|
|
extended_display_enable_skew : 1,
|
|
sequential_chain4 : 1,
|
|
sequential_chain : 1,
|
|
refresh_skew_control : 1,
|
|
extended_256_color_enable : 1,
|
|
extended_256_color_mode : 1,
|
|
extended_attribute_enable : 1;
|
|
} as_bfld;
|
|
} compatibility_control;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned graphics_8_dot_timing_state : 4,
|
|
text_8_dot_timing_state : 4;
|
|
} as_bfld;
|
|
} timing_select;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned not_used : 4,
|
|
fg_bg_mode : 2,
|
|
fg_bg_source : 1,
|
|
unused : 1;
|
|
} as_bfld;
|
|
} fg_bg_control;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned bus_status : 1,
|
|
pointer_bank_select : 2,
|
|
bank_enable : 1,
|
|
ROM_interface_enable : 1,
|
|
fast_write_enable : 1,
|
|
io_interface_enable : 1,
|
|
mem_interface_enable : 1;
|
|
} as_bfld;
|
|
} interface_control;
|
|
};
|
|
|
|
#endif /* V7VGA */
|
|
#endif /* BIT_ORDER1 */
|
|
|
|
#ifdef BIT_ORDER2
|
|
struct sequencer
|
|
{
|
|
#ifdef V7VGA
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned
|
|
index : 3,
|
|
extensions_index : 4,
|
|
using_extensions : 1;
|
|
} as_bfld;
|
|
} address;
|
|
#else
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned
|
|
index : 3,
|
|
not_used : 5;
|
|
} as_bfld;
|
|
} address;
|
|
#endif /* V7VGA */
|
|
|
|
SEQ_RESET reset;
|
|
CLOCKING_MODE clocking_mode;
|
|
MAP_MASK map_mask;
|
|
CHAR_MAP_SELECT character_map_select;
|
|
MEMORY_MODE memory_mode;
|
|
#ifdef V7VGA
|
|
EXTN_CONTROL extensions_control;
|
|
#endif /* V7VGA */
|
|
|
|
};
|
|
|
|
|
|
/* The CRT Controller Registers */
|
|
|
|
struct crt_controller
|
|
{
|
|
|
|
#ifdef V7VGA
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned
|
|
index : 6,
|
|
not_used : 2;
|
|
} as_bfld;
|
|
} address;
|
|
#else
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned
|
|
index : 5,
|
|
not_used : 3;
|
|
} as_bfld;
|
|
} address;
|
|
#endif /* V7VGA */
|
|
|
|
byte horizontal_total; /* NO - screen trash if wrong value */
|
|
byte horizontal_display_end; /* YES - defines line length!! */
|
|
byte start_horizontal_blanking; /* NO */
|
|
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned end_blanking : 5, /* NO */
|
|
display_enable_skew_control : 2, /* NO */
|
|
not_used : 1;
|
|
} as_bfld;
|
|
} end_horizontal_blanking;
|
|
|
|
byte start_horizontal_retrace; /* NO */
|
|
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned end_horizontal_retrace : 5, /* NO */
|
|
horizontal_retrace_delay : 2, /* NO */
|
|
not_used : 1;
|
|
} as_bfld;
|
|
} end_horizontal_retrace;
|
|
|
|
byte vertical_total; /* NO */
|
|
CRTC_OVERFLOW crtc_overflow;
|
|
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned preset_row_scan : 5, /* NO */
|
|
horiz_pan_lo : 2,
|
|
not_used : 1;
|
|
} as_bfld;
|
|
} preset_row_scan;
|
|
|
|
MAX_SCAN_LINE maximum_scan_line;
|
|
CURSOR_START cursor_start;
|
|
CURSOR_END cursor_end;
|
|
byte start_address_high; /* YES */
|
|
byte start_address_low; /* YES */
|
|
byte cursor_location_high; /* YES */
|
|
byte cursor_location_low; /* YES */
|
|
byte vertical_retrace_start; /* NO */
|
|
byte light_pen_high; /* NO */
|
|
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned vertical_retrace_end : 4, /* NO */
|
|
clear_vertical_interrupt : 1, /* YES */
|
|
enable_vertical_interrupt : 1, /* YES */
|
|
refresh_type : 1,
|
|
crtc_protect : 1;
|
|
} as_bfld;
|
|
} vertical_retrace_end;
|
|
|
|
unsigned short vertical_display_enable_end; /* YES - defines screen height - 10 bit */
|
|
byte offset; /* ???? */
|
|
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned underline_location : 5, /* NO (mono display only) */
|
|
count_by_4 : 1, /* NO */
|
|
doubleword_mode : 1, /* YES */
|
|
not_used : 1;
|
|
} as_bfld;
|
|
} underline_location;
|
|
|
|
byte start_vertical_blanking; /* NO */
|
|
byte end_vertical_blanking; /* NO */
|
|
MODE_CONTROL mode_control;
|
|
byte line_compare; /* YES */
|
|
|
|
};
|
|
|
|
|
|
|
|
/* The Graphics Controller Registers */
|
|
|
|
struct graphics_controller
|
|
{
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned index : 4,
|
|
not_used : 4;
|
|
} as_bfld;
|
|
} address;
|
|
|
|
SET_OR_RESET set_or_reset;
|
|
ENABLE_SET_OR_RESET enable_set_or_reset;
|
|
COLOR_COMPARE color_compare;
|
|
DATA_ROTATE data_rotate;
|
|
READ_MAP_SELECT read_map_select;
|
|
MODE mode;
|
|
MISC_REG miscellaneous;
|
|
COLOR_DONT_CARE color_dont_care;
|
|
byte bit_mask_register; /* YES - write modes 0 & 2 */
|
|
};
|
|
|
|
|
|
|
|
/* The Attribute Controller Registers */
|
|
|
|
struct attribute_controller
|
|
{
|
|
#ifdef V7VGA
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned
|
|
index : 5,
|
|
palette_address_source : 1,
|
|
unused : 1,
|
|
index_state : 1;
|
|
} as_bfld;
|
|
} address;
|
|
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned
|
|
blue : 1, /* YES */
|
|
green : 1, /* YES */
|
|
red : 1, /* YES */
|
|
secondary_blue : 1, /* YES */
|
|
secondary_green : 1, /* YES */
|
|
secondary_red : 1, /* YES */
|
|
color_top_bits : 2; /* YES */
|
|
} as_bfld;
|
|
} palette[EGA_PALETTE_SIZE];
|
|
#else
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned
|
|
index : 5,
|
|
palette_address_source : 1,
|
|
unused : 2;
|
|
} as_bfld;
|
|
} address;
|
|
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned
|
|
blue : 1, /* YES */
|
|
green : 1, /* YES */
|
|
red : 1, /* YES */
|
|
secondary_blue : 1, /* YES */
|
|
secondary_green : 1, /* YES */
|
|
secondary_red : 1, /* YES */
|
|
not_used : 2; /* YES */
|
|
} as_bfld;
|
|
} palette[EGA_PALETTE_SIZE];
|
|
#endif /* V7VGA */
|
|
|
|
AC_MODE_CONTROL mode_control;
|
|
|
|
#ifdef V7VGA
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned
|
|
blue_border : 1, /* YES */
|
|
green_border : 1, /* YES */
|
|
red_border : 1, /* YES */
|
|
secondary_blue_border : 1, /* YES */
|
|
secondary_green_border : 1, /* YES */
|
|
secondary_red_border : 1, /* YES */
|
|
color_top_bits : 2; /* YES */
|
|
} as_bfld;
|
|
} overscan_color;
|
|
#else
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned
|
|
blue_border : 1, /* YES */
|
|
green_border : 1, /* YES */
|
|
red_border : 1, /* YES */
|
|
secondary_blue_border : 1, /* YES */
|
|
secondary_green_border : 1, /* YES */
|
|
secondary_red_border : 1, /* YES */
|
|
not_used : 2;
|
|
} as_bfld;
|
|
} overscan_color;
|
|
#endif /* V7VGA */
|
|
|
|
COLOR_PLANE_ENABLE color_plane_enable;
|
|
|
|
union
|
|
{
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned horizontal_pel_panning : 4, /* NO */
|
|
not_used : 4;
|
|
} as_bfld;
|
|
} horizontal_pel_panning;
|
|
|
|
PIXEL_PAD pixel_padding;
|
|
};
|
|
|
|
|
|
#ifdef V7VGA
|
|
/* The V7VGA Extension Registers */
|
|
|
|
struct extensions_controller
|
|
{
|
|
byte pointer_pattern;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned
|
|
ptr_horiz_position : 3,
|
|
not_used : 5;
|
|
} as_bfld;
|
|
} ptr_horiz_posn_hi;
|
|
|
|
byte ptr_horiz_posn_lo;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned
|
|
ptr_vert_position : 2,
|
|
not_used : 6;
|
|
} as_bfld;
|
|
} ptr_vert_posn_hi;
|
|
|
|
byte ptr_vert_posn_lo;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned
|
|
unused : 4,
|
|
clock_select : 1,
|
|
not_used : 3;
|
|
} as_bfld;
|
|
} clock_select;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned
|
|
cursor_blink_disable : 1,
|
|
unused : 2,
|
|
cursor_mode : 1,
|
|
not_used : 3,
|
|
pointer_enable : 1;
|
|
|
|
} as_bfld;
|
|
} cursor_attrs;
|
|
|
|
union {
|
|
struct {
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct {
|
|
unsigned dac_8_bits : 1,
|
|
dummy : 7;
|
|
} as_bfld;
|
|
} dac_control;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned
|
|
nmi_enable : 3,
|
|
write_prot_0 : 1,
|
|
write_prot_1 : 1,
|
|
write_prot_2 : 1,
|
|
hercules_bit_map : 1,
|
|
emulation_enable : 1;
|
|
} as_bfld;
|
|
} emulation_control;
|
|
|
|
byte foreground_latch_0;
|
|
byte foreground_latch_1;
|
|
byte foreground_latch_2;
|
|
byte foreground_latch_3;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned
|
|
bg_latch_load_state : 2,
|
|
unused : 2,
|
|
fg_latch_load_state : 2,
|
|
not_used : 2;
|
|
} as_bfld;
|
|
} fast_latch_load_state;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned
|
|
masked_write_enable : 1,
|
|
masked_write_source : 1,
|
|
unused : 6;
|
|
} as_bfld;
|
|
} masked_write_control;
|
|
|
|
byte masked_write_mask;
|
|
byte fg_bg_pattern;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned
|
|
cpu_write_bank_select : 2,
|
|
cpu_read_bank_select : 2,
|
|
crtc_read_bank_select : 2,
|
|
counter_bank_enable : 1,
|
|
line_compare_bank_reset : 1;
|
|
} as_bfld;
|
|
} ram_bank_select;
|
|
|
|
byte switch_readback;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned
|
|
clock_0_only : 1,
|
|
extended_clock_direction : 1,
|
|
extended_clock_output_source : 1,
|
|
external_clock_override : 1,
|
|
clock_3_on : 1,
|
|
extended_clock_output : 3;
|
|
} as_bfld;
|
|
} clock_control;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned
|
|
extended_page_select : 1,
|
|
unused : 7;
|
|
} as_bfld;
|
|
} page_select;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned
|
|
foreground_color : 4,
|
|
unused : 4;
|
|
} as_bfld;
|
|
} foreground_color;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned
|
|
background_color : 4,
|
|
unused : 4;
|
|
} as_bfld;
|
|
} background_color;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned
|
|
extended_attribute_enable : 1,
|
|
extended_256_color_mode : 1,
|
|
extended_256_color_enable : 1,
|
|
refresh_skew_control : 1,
|
|
sequential_chain : 1,
|
|
sequential_chain4 : 1,
|
|
extended_display_enable_skew : 1,
|
|
internal_3c3_enable : 1;
|
|
} as_bfld;
|
|
} compatibility_control;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned
|
|
text_8_dot_timing_state : 4,
|
|
graphics_8_dot_timing_state : 4;
|
|
} as_bfld;
|
|
} timing_select;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned
|
|
unused : 1,
|
|
fg_bg_source : 1,
|
|
fg_bg_mode : 2,
|
|
not_used : 4;
|
|
} as_bfld;
|
|
} fg_bg_control;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
unsigned abyte : 8;
|
|
} as;
|
|
struct
|
|
{
|
|
unsigned
|
|
mem_interface_enable : 1,
|
|
io_interface_enable : 1,
|
|
fast_write_enable : 1,
|
|
ROM_interface_enable : 1,
|
|
bank_enable : 1,
|
|
pointer_bank_select : 2,
|
|
bus_status : 1;
|
|
} as_bfld;
|
|
} interface_control;
|
|
};
|
|
|
|
#endif /* V7VGA */
|
|
|
|
#endif /* BIT_ORDER2 */
|
|
|
|
#ifdef V7VGA
|
|
#ifdef CPU_40_STYLE
|
|
extern void set_v7_fg_latch_byte IPT2(IU8, index, IU8, value);
|
|
#define SET_FG_LATCH(n, val) set_v7_fg_latch_byte(n, val)
|
|
#else
|
|
#ifdef BIGEND
|
|
#define SET_FG_LATCH( n, val ) (*((UTINY *) &fg_latches + (n)) = value )
|
|
#endif /* BIGEND */
|
|
#ifdef LITTLEND
|
|
#define SET_FG_LATCH( n, val ) (*((UTINY *) &fg_latches + (3 - n)) = value )
|
|
#endif /* LITTLEND */
|
|
#endif /* CPU_40_STYLE */
|
|
#endif /* V7VGA */
|
|
|
|
#ifdef GISP_SVGA
|
|
void mapRealIOPorts IPT0( );
|
|
void mapEmulatedIOPorts IPT0( );
|
|
#endif /* GISP_SVGA */
|
|
|
|
/* Global data structures to import into modules
|
|
*/
|
|
IMPORT MISC_OUTPUT_REG miscellaneous_output_register;
|
|
IMPORT FEAT_CONT_REG feature_control_register;
|
|
IMPORT INPUT_STAT_REG0 input_status_register_zero;
|
|
IMPORT INPUT_STAT_REG1 input_status_register_one;
|
|
|
|
IMPORT VOID init_vga_globals IPT0();
|
|
IMPORT VOID ega_mode_init IPT0();
|
|
IMPORT VOID enable_gfx_update_routines IPT0();
|
|
IMPORT VOID disable_gfx_update_routines IPT0();
|
|
|
|
#ifndef cursor_changed
|
|
IMPORT VOID cursor_changed IPT2(int, x, int, y);
|
|
#endif
|
|
IMPORT VOID update_shift_count IPT0();
|
|
|
|
#ifdef V7VGA
|
|
IMPORT struct extensions_controller extensions_controller;
|
|
#endif /* V7VGA */
|
|
IMPORT struct crt_controller crt_controller;
|
|
IMPORT struct sequencer sequencer;
|
|
IMPORT struct attribute_controller attribute_controller;
|
|
IMPORT struct graphics_controller graphics_controller;
|
|
|
|
/*
|
|
31.3.92 MG The video-7 VGA has an undocumented ability to support either
|
|
6 or 8 bits of data in the palette. To support this we store the number`
|
|
of bits in the DAC_data_bits variable so that the routines which stuff
|
|
the data onto the screen know how much to output.
|
|
*/
|
|
|
|
IMPORT byte DAC_data_mask;
|
|
#ifdef V7VGA
|
|
IMPORT int DAC_data_bits;
|
|
#endif
|
|
|
|
#endif /* VGG */
|