summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/video/upd7220.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/video/upd7220.h')
-rw-r--r--src/devices/video/upd7220.h52
1 files changed, 30 insertions, 22 deletions
diff --git a/src/devices/video/upd7220.h b/src/devices/video/upd7220.h
index d1f8806c6ac..98da087e714 100644
--- a/src/devices/video/upd7220.h
+++ b/src/devices/video/upd7220.h
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Angelo Salese, Miodrag Milanovic, Carl
+// copyright-holders:Angelo Salese, Miodrag Milanovic, Carl, Brian Johnson
/**********************************************************************
NEC uPD7220 Graphics Display Controller emulation
@@ -76,8 +76,8 @@ public:
uint8_t dack_r();
void dack_w(uint8_t data);
- DECLARE_WRITE_LINE_MEMBER( ext_sync_w );
- DECLARE_WRITE_LINE_MEMBER( lpen_w );
+ void ext_sync_w(int state);
+ void lpen_w(int state);
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
@@ -85,21 +85,18 @@ protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
- virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
virtual const tiny_rom_entry *device_rom_region() const override;
virtual space_config_vector memory_space_config() const override;
+ TIMER_CALLBACK_MEMBER(hsync_update);
+ TIMER_CALLBACK_MEMBER(vsync_update);
+ TIMER_CALLBACK_MEMBER(blank_update);
+
+ void start_dma();
+ void stop_dma();
+
private:
- enum
- {
- TIMER_VSYNC,
- TIMER_HSYNC,
- TIMER_BLANK
- };
-
- inline uint8_t readbyte(offs_t address);
- inline void writebyte(offs_t address, uint8_t data);
inline uint16_t readword(offs_t address);
inline void writeword(offs_t address, uint16_t data);
inline void fifo_clear();
@@ -112,21 +109,26 @@ private:
inline void update_blank_timer(int state);
inline void recompute_parameters();
inline void reset_figs_param();
- inline void read_vram(uint8_t type, uint8_t mod);
- inline void write_vram(uint8_t type, uint8_t mod);
+ inline void rdat(uint8_t type, uint8_t mod);
+ inline uint16_t read_vram();
+ inline void wdat(uint8_t type, uint8_t mod);
+ inline void write_vram(uint8_t type, uint8_t mod, uint16_t data, uint16_t mask = 0xffff);
inline void get_text_partition(int index, uint32_t *sad, uint16_t *len, int *im, int *wd);
inline void get_graphics_partition(int index, uint32_t *sad, uint16_t *len, int *im, int *wd);
- void draw_pixel(int x, int y, int xi, uint16_t tile_data);
- void draw_line(int x, int y);
- void draw_rectangle(int x, int y);
- void draw_arc(int x, int y);
- void draw_char(int x, int y);
+ uint16_t get_pitch();
+ uint16_t get_pattern(uint8_t cycle);
+ void next_pixel(int direction);
+ void draw_pixel();
+ void draw_line();
+ void draw_rectangle();
+ void draw_arc();
+ void draw_char();
int translate_command(uint8_t data);
void process_fifo();
void continue_command();
void update_text(bitmap_rgb32 &bitmap, const rectangle &cliprect);
- void draw_graphics_line(bitmap_rgb32 &bitmap, uint32_t addr, int y, int wd, int pitch);
+ void draw_graphics_line(bitmap_rgb32 &bitmap, uint32_t addr, int y, int wd, int mixed);
void update_graphics(bitmap_rgb32 &bitmap, const rectangle &cliprect, int force_bitmap);
void upd7220_vram(address_map &map);
@@ -139,10 +141,16 @@ private:
devcb_write_line m_write_vsync;
devcb_write_line m_write_blank;
+ uint16_t m_pattern;
+
+ uint8_t m_dma_type; // DMA transfer type
+ uint8_t m_dma_mod; // DMA transfer mode
+ uint16_t m_dma_data; // current word transferred via DMA
+ uint32_t m_dma_transfer_length; // DMA transfer length in bytes
+
uint16_t m_mask; // mask register
uint8_t m_pitch; // number of word addresses in display memory in the horizontal direction
uint32_t m_ead; // execute word address
- uint16_t m_dad; // dot address within the word
uint32_t m_lad; // light pen address
uint8_t m_ra[16]; // parameter RAM