summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/video/i82730.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/video/i82730.h')
-rw-r--r--src/devices/video/i82730.h136
1 files changed, 103 insertions, 33 deletions
diff --git a/src/devices/video/i82730.h b/src/devices/video/i82730.h
index a107e90461b..27f82eb8d5c 100644
--- a/src/devices/video/i82730.h
+++ b/src/devices/video/i82730.h
@@ -66,8 +66,6 @@ private:
VDIP = 0x100 // virtual display in progress
};
- static const char *const s_command_names[];
-
bool sysbus_16bit() { return BIT(m_sysbus, 0); }
uint8_t read_byte(offs_t address);
@@ -78,7 +76,28 @@ private:
void update_interrupts();
void mode_set();
void execute_command();
+
+ bool dscmd_endrow();
+ bool dscmd_eof();
+ bool dscmd_eol();
+ bool dscmd_fulrowdescrpt(uint8_t param);
+ bool dscmd_sl_scroll_strt(uint8_t param);
+ bool dscmd_sl_scroll_end(uint8_t param);
+ bool dscmd_tab_to(uint8_t param);
+ bool dscmd_max_dma_count(uint8_t param);
+ bool dscmd_endstrg();
+ bool dscmd_skip(uint8_t param);
+ bool dscmd_repeat(uint8_t param);
+ bool dscmd_sub_sup(uint8_t param);
+ bool dscmd_rpt_sub_sup(uint8_t param);
+ bool dscmd_set_gen_pur_attrib(uint8_t param);
+ bool dscmd_set_field_attrib();
+ bool dscmd_init_next_process();
+
+ bool execute_datastream_command(uint8_t command, uint8_t param);
+
void load_row();
+ void attention();
TIMER_CALLBACK_MEMBER(row_update);
@@ -92,48 +111,99 @@ private:
bitmap_rgb32 m_bitmap;
+ // internal registers
bool m_initialized;
bool m_mode_set;
-
int m_ca;
+ bool m_ca_latch;
- // internal registers
uint8_t m_sysbus;
- uint32_t m_ibp;
- uint32_t m_cbp;
- uint16_t m_intmask;
- uint16_t m_status;
+ uint32_t m_ibp; // intermediate block pointer
+ uint32_t m_cbp; // command block pointer
- int m_list_switch;
- int m_auto_line_feed;
+ bool m_list_switch;
+ bool m_auto_line_feed;
uint8_t m_max_dma_count;
-
uint32_t m_lptr;
- uint32_t m_sptr;
-
- int m_dma_burst_space;
- int m_dma_burst_length;
-
- // display parameters
- int m_hfldstrt;
- int m_margin;
- int m_lpr;
- uint16_t m_field_attribute_mask;
- int m_vsyncstp;
- int m_vfldstrt;
- int m_vfldstp;
+ uint16_t m_status;
+ uint16_t m_intmask;
- int m_frame_int_count;
+ uint32_t m_sptr;
- // row buffers
- struct row_buffer
+ struct modeset
{
- uint16_t data[200];
- int count;
- };
-
- row_buffer m_row[2];
- int m_row_index;
+ // horizontal modes
+ uint8_t burst_length;
+ uint8_t burst_space;
+ uint8_t line_length;
+ uint8_t hsyncstp;
+ uint8_t hfldstrt;
+ uint8_t hfldstp;
+ uint8_t hbrdstrt;
+ uint8_t hbrdstp;
+ uint8_t scroll_margin;
+ // char row characteristics
+ bool rvv_row;
+ bool blk_row;
+ bool dbl_hgt;
+ bool wdef;
+ uint8_t lpr;
+ uint8_t nrmstrt;
+ uint8_t nrmstp;
+ uint8_t supstrt;
+ uint8_t supstp;
+ uint8_t substrt;
+ uint8_t substp;
+ uint8_t cur1strt;
+ uint8_t cur1stp;
+ uint8_t cur2strt;
+ uint8_t cur2stp;
+ uint8_t u2_line_sel;
+ uint8_t u1_line_sel;
+ uint16_t field_attribute_mask;
+ // vertical modes
+ uint16_t frame_length;
+ uint16_t vsyncstp;
+ uint16_t vfldstrt;
+ uint16_t vfldstp;
+ // blink control
+ uint8_t duty_cyc_cursor;
+ uint8_t cursor_blink;
+ uint8_t frame_int_count;
+ uint8_t duty_cyc_char;
+ uint8_t char_blink;
+ bool ile;
+ bool rfe;
+ bool bpol;
+ bool bue;
+ bool cr2_cd;
+ bool cr1_cd;
+ bool cr2_be;
+ bool cr1_be;
+ // atrribute bit selects
+ uint8_t reverse_video;
+ uint8_t blinking_char;
+ bool cr2_rvv;
+ bool cr1_rvv;
+ bool cr2_oe;
+ bool cr1_oe;
+ uint8_t abs_line_count;
+ uint8_t invisible_char;
+ uint8_t underline2;
+ uint8_t underline1;
+ } m_mb;
+
+ uint16_t m_row_buffer[2][200];
+ uint16_t *m_row; // pointer to currently active row buffer
+ uint8_t m_dma_count;
+ uint8_t m_row_count; // maximum 200
+ int m_row_index; // 0 or 1
+
+ struct cursor
+ {
+ uint8_t x;
+ uint8_t y;
+ } m_cursor[2];
};
// device type definition