diff options
Diffstat (limited to 'src/devices/video/ef9365.h')
-rw-r--r-- | src/devices/video/ef9365.h | 82 |
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 |