1 // license:BSD-3-Clause 2 // copyright-holders:Olivier Galibert 3 4 // Williams Pinball Controller Dot Matrix Display 5 6 // A 128x32 plasma display with 16 pages and refreshed at 240Hz (for PWM luminosity control) 7 8 #ifndef MAME_VIDEO_WPC_DMD_H 9 #define MAME_VIDEO_WPC_DMD_H 10 11 #include "machine/timer.h" 12 13 class wpc_dmd_device : public device_t 14 { 15 public: 16 wpc_dmd_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 17 virtual ~wpc_dmd_device(); 18 19 void registers(address_map &map); 20 21 void bank0_w(uint8_t data); 22 void bank2_w(uint8_t data); 23 void bank4_w(uint8_t data); 24 void bank6_w(uint8_t data); 25 void bank8_w(uint8_t data); 26 void banka_w(uint8_t data); 27 void visible_page_w(uint8_t data); 28 void firq_scanline_w(uint8_t data); 29 scanline_callback()30 auto scanline_callback() { return scanline_cb.bind(); } 31 32 protected: 33 devcb_write_line scanline_cb; 34 required_memory_bank dmd0, dmd2, dmd4, dmd6, dmd8, dmda; 35 36 uint8_t cur_scanline, visible_page, firq_scanline; 37 std::vector<uint8_t> ram, screen_buffer, bitcounts; 38 39 virtual void device_start() override; 40 virtual void device_reset() override; 41 virtual void device_add_mconfig(machine_config &config) override; 42 43 private: 44 TIMER_DEVICE_CALLBACK_MEMBER(scanline_timer); 45 uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 46 }; 47 48 DECLARE_DEVICE_TYPE(WPC_DMD, wpc_dmd_device) 49 50 #endif // MAME_VIDEO_WPC_DMD_H 51