summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/video/ef9365.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/video/ef9365.h')
-rw-r--r--src/devices/video/ef9365.h82
1 files changed, 41 insertions, 41 deletions
diff --git a/src/devices/video/ef9365.h b/src/devices/video/ef9365.h
index eb2ecf894d9..2a16ef5508a 100644
--- a/src/devices/video/ef9365.h
+++ b/src/devices/video/ef9365.h
@@ -4,7 +4,7 @@
ef9365.h
- Thomson EF9365/EF9366 video controller
+ Thomson EF9365/EF9366/EF9367 video controller
*********************************************************************/
@@ -30,30 +30,31 @@ public:
static constexpr unsigned BITPLANE_MAX_SIZE = 0x8000;
static constexpr unsigned MAX_BITPLANES = 8;
- static constexpr int DISPLAY_MODE_256x256 = 0x00;
- static constexpr int DISPLAY_MODE_512x512 = 0x01;
- static constexpr int DISPLAY_MODE_512x256 = 0x02;
- static constexpr int DISPLAY_MODE_128x128 = 0x03;
- static constexpr int DISPLAY_MODE_64x64 = 0x04;
+ static constexpr int DISPLAY_MODE_256x256 = 0x00;
+ static constexpr int DISPLAY_MODE_512x512 = 0x01;
+ static constexpr int DISPLAY_MODE_512x256 = 0x02;
+ static constexpr int DISPLAY_MODE_128x128 = 0x03;
+ static constexpr int DISPLAY_MODE_64x64 = 0x04;
+ static constexpr int DISPLAY_MODE_1024x512 = 0x05;
// construction/destruction
ef9365_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// configuration
template <typename T> void set_palette_tag(T &&tag) { m_palette.set_tag(std::forward<T>(tag)); }
- void set_nb_bitplanes(int nb_bitplanes );
- void set_display_mode(int display_mode );
- auto irq_handler() { return m_irq_handler.bind(); }
+ void set_nb_bitplanes(int nb_bitplanes);
+ void set_display_mode(int display_mode);
+ auto irq_handler() { return m_irq_handler.bind(); } // IRQ pin
+ auto write_msl() { return m_write_msl.bind(); } // memory select during pixel write
// device interface
uint8_t data_r(offs_t offset);
void data_w(offs_t offset, uint8_t data);
void update_scanline(uint16_t scanline);
- void set_color_filler( uint8_t color );
- void set_color_entry( int index, uint8_t r, uint8_t g, uint8_t b );
-
- uint8_t get_last_readback_word(int bitplane_number, int * pixel_offset);
+ void set_color_filler(uint8_t color);
+ void set_color_entry(int index, uint8_t r, uint8_t g, uint8_t b);
+ uint8_t get_last_readback_word(int bitplane_number, int *pixel_offset);
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
@@ -61,38 +62,37 @@ 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;
// device_config_memory_interface overrides
virtual space_config_vector memory_space_config() const override;
// address space configurations
- const address_space_config m_space_config;
+ const address_space_config m_space_config;
+
+ TIMER_CALLBACK_MEMBER(clear_busy_flag);
private:
- int get_char_pix( unsigned char c, int x, int y );
- void plot(int x_pos,int y_pos);
- int draw_character( unsigned char c, int block, int smallblock );
- int draw_vector(uint16_t start_x,uint16_t start_y,short delta_x,short delta_y);
+ int get_char_pix(uint8_t c, int x, int y);
+ void plot(int x_pos, int y_pos);
+ int draw_character(uint8_t c, bool block, bool smallblock);
+ int draw_vector(uint16_t start_x, uint16_t start_y, int16_t delta_x, int16_t delta_y);
uint16_t get_x_reg();
uint16_t get_y_reg();
void set_x_reg(uint16_t x);
void set_y_reg(uint16_t y);
- void screen_scanning( int force_clear );
- void set_busy_flag(int period);
- void set_video_mode(void);
+ void set_msl_pins(uint16_t x, uint16_t y);
+ void screen_scanning(bool force_clear);
+ void set_busy_flag(int cycles);
+ void set_video_mode();
void draw_border(uint16_t line);
void ef9365_exec(uint8_t cmd);
- int cycles_to_us(int cycles);
void dump_bitplanes_word();
void update_interrupts();
- void ef9365(address_map &map);
+ void ef9365_map(address_map &map);
// internal state
- static constexpr device_timer_id BUSY_TIMER = 0;
-
required_region_ptr<uint8_t> m_charset;
address_space *m_videoram;
@@ -101,23 +101,22 @@ private:
uint8_t m_irq_lb;
uint8_t m_irq_rdy;
uint8_t m_current_color;
- uint8_t m_bf; //busy flag
- uint8_t m_registers[0x10]; //registers
- uint8_t m_state; //status register
- uint8_t m_border[80]; //border color
-
- int nb_of_bitplanes;
- int nb_of_colors;
- int bitplane_xres;
- int bitplane_yres;
- uint16_t overflow_mask_x;
- uint16_t overflow_mask_y;
- int vsync_scanline_pos;
-
- uint8_t m_readback_latch[MAX_BITPLANES]; // Last DRAM Readback buffer (Filled after a Direct Memory Access Request command)
+ uint8_t m_bf; // busy flag
+ uint8_t m_registers[0x10]; // registers
+ uint8_t m_state; // status register
+ uint8_t m_border[80]; // border color
+
+ int m_nb_of_bitplanes;
+ int m_nb_of_colors;
+ int m_bitplane_xres;
+ int m_bitplane_yres;
+ uint16_t m_overflow_mask_x;
+ uint16_t m_overflow_mask_y;
+ int m_vsync_scanline_pos;
+
+ uint8_t m_readback_latch[MAX_BITPLANES]; // Last DRAM Readback buffer (Filled after a Direct Memory Access Request command)
int m_readback_latch_pix_offset;
- uint32_t clock_freq;
bitmap_rgb32 m_screen_out;
// timers
@@ -125,6 +124,7 @@ private:
required_device<palette_device> m_palette;
devcb_write_line m_irq_handler;
+ devcb_write8 m_write_msl;
};
// device type definition