1 // license:BSD-3-Clause 2 // copyright-holders:Jean-Francois DEL NERO 3 /********************************************************************* 4 5 ef9365.h 6 7 Thomson EF9365/EF9366 video controller 8 9 *********************************************************************/ 10 11 #ifndef MAME_VIDEO_EF9365_H 12 #define MAME_VIDEO_EF9365_H 13 14 #pragma once 15 16 #include "emupal.h" 17 18 19 //************************************************************************** 20 // TYPE DEFINITIONS 21 //************************************************************************** 22 23 // ======================> ef9365_device 24 25 class ef9365_device : public device_t, 26 public device_memory_interface, 27 public device_video_interface 28 { 29 public: 30 static constexpr unsigned BITPLANE_MAX_SIZE = 0x8000; 31 static constexpr unsigned MAX_BITPLANES = 8; 32 33 static constexpr int DISPLAY_MODE_256x256 = 0x00; 34 static constexpr int DISPLAY_MODE_512x512 = 0x01; 35 static constexpr int DISPLAY_MODE_512x256 = 0x02; 36 static constexpr int DISPLAY_MODE_128x128 = 0x03; 37 static constexpr int DISPLAY_MODE_64x64 = 0x04; 38 39 // construction/destruction 40 ef9365_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 41 42 // configuration set_palette_tag(T && tag)43 template <typename T> void set_palette_tag(T &&tag) { m_palette.set_tag(std::forward<T>(tag)); } 44 void set_nb_bitplanes(int nb_bitplanes ); 45 void set_display_mode(int display_mode ); irq_handler()46 auto irq_handler() { return m_irq_handler.bind(); } 47 48 // device interface 49 uint8_t data_r(offs_t offset); 50 void data_w(offs_t offset, uint8_t data); 51 52 void update_scanline(uint16_t scanline); 53 void set_color_filler( uint8_t color ); 54 void set_color_entry( int index, uint8_t r, uint8_t g, uint8_t b ); 55 56 uint8_t get_last_readback_word(int bitplane_number, int * pixel_offset); 57 58 uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 59 60 protected: 61 // device-level overrides 62 virtual void device_start() override; 63 virtual void device_reset() override; 64 virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; 65 virtual const tiny_rom_entry *device_rom_region() const override; 66 67 // device_config_memory_interface overrides 68 virtual space_config_vector memory_space_config() const override; 69 70 // address space configurations 71 const address_space_config m_space_config; 72 73 private: 74 int get_char_pix( unsigned char c, int x, int y ); 75 void plot(int x_pos,int y_pos); 76 int draw_character( unsigned char c, int block, int smallblock ); 77 int draw_vector(uint16_t start_x,uint16_t start_y,short delta_x,short delta_y); 78 uint16_t get_x_reg(); 79 uint16_t get_y_reg(); 80 void set_x_reg(uint16_t x); 81 void set_y_reg(uint16_t y); 82 void screen_scanning( int force_clear ); 83 void set_busy_flag(int period); 84 void set_video_mode(void); 85 void draw_border(uint16_t line); 86 void ef9365_exec(uint8_t cmd); 87 int cycles_to_us(int cycles); 88 void dump_bitplanes_word(); 89 void update_interrupts(); 90 91 void ef9365(address_map &map); 92 93 // internal state 94 static constexpr device_timer_id BUSY_TIMER = 0; 95 96 required_region_ptr<uint8_t> m_charset; 97 address_space *m_videoram; 98 99 uint8_t m_irq_state; 100 uint8_t m_irq_vb; 101 uint8_t m_irq_lb; 102 uint8_t m_irq_rdy; 103 uint8_t m_current_color; 104 uint8_t m_bf; //busy flag 105 uint8_t m_registers[0x10]; //registers 106 uint8_t m_state; //status register 107 uint8_t m_border[80]; //border color 108 109 int nb_of_bitplanes; 110 int nb_of_colors; 111 int bitplane_xres; 112 int bitplane_yres; 113 uint16_t overflow_mask_x; 114 uint16_t overflow_mask_y; 115 int vsync_scanline_pos; 116 117 uint8_t m_readback_latch[MAX_BITPLANES]; // Last DRAM Readback buffer (Filled after a Direct Memory Access Request command) 118 int m_readback_latch_pix_offset; 119 120 uint32_t clock_freq; 121 bitmap_rgb32 m_screen_out; 122 123 // timers 124 emu_timer *m_busy_timer; 125 126 required_device<palette_device> m_palette; 127 devcb_write_line m_irq_handler; 128 }; 129 130 // device type definition 131 DECLARE_DEVICE_TYPE(EF9365, ef9365_device) 132 133 #endif // MAME_VIDEO_EF9365_H 134