1 // license:BSD-3-Clause 2 // copyright-holders:Takahiro Nogi 3 4 #include "machine/tmp68301.h" 5 #include "screen.h" 6 #include "audio/nichisnd.h" 7 #include "machine/nb1413m3.h" 8 #include "emupal.h" 9 10 #define VRAM_MAX 3 11 12 class niyanpai_state : public driver_device 13 { 14 public: niyanpai_state(const machine_config & mconfig,device_type type,const char * tag)15 niyanpai_state(const machine_config &mconfig, device_type type, const char *tag) 16 : driver_device(mconfig, type, tag) , 17 m_maincpu(*this, "maincpu"), 18 m_screen(*this, "screen"), 19 m_palette(*this, "palette") { } 20 21 void musobana(machine_config &config); 22 void zokumahj(machine_config &config); 23 void mhhonban(machine_config &config); 24 void niyanpai(machine_config &config); 25 26 void init_niyanpai(); 27 28 DECLARE_READ_LINE_MEMBER(musobana_outcoin_flag_r); 29 30 private: 31 enum 32 { 33 TIMER_BLITTER 34 }; 35 36 required_device<tmp68301_device> m_maincpu; 37 required_device<screen_device> m_screen; 38 required_device<palette_device> m_palette; 39 40 // common 41 int m_scrollx[VRAM_MAX]; 42 int m_scrolly[VRAM_MAX]; 43 int m_blitter_destx[VRAM_MAX]; 44 int m_blitter_desty[VRAM_MAX]; 45 int m_blitter_sizex[VRAM_MAX]; 46 int m_blitter_sizey[VRAM_MAX]; 47 int m_blitter_src_addr[VRAM_MAX]; 48 int m_blitter_direction_x[VRAM_MAX]; 49 int m_blitter_direction_y[VRAM_MAX]; 50 int m_dispflag[VRAM_MAX]; 51 int m_flipscreen[VRAM_MAX]; 52 int m_clutmode[VRAM_MAX]; 53 int m_transparency[VRAM_MAX]; 54 int m_clutsel[VRAM_MAX]; 55 int m_screen_refresh; 56 int m_nb19010_busyctr; 57 int m_nb19010_busyflag; 58 bitmap_ind16 m_tmpbitmap[VRAM_MAX]; 59 std::unique_ptr<uint16_t[]> m_videoram[VRAM_MAX]; 60 std::unique_ptr<uint16_t[]> m_videoworkram[VRAM_MAX]; 61 std::unique_ptr<uint16_t[]> m_palette_ptr; 62 std::unique_ptr<uint8_t[]> m_clut[VRAM_MAX]; 63 int m_flipscreen_old[VRAM_MAX]; 64 emu_timer *m_blitter_timer; 65 66 // musobana and derived machine configs 67 int m_musobana_inputport; 68 int m_musobana_outcoin_flag; 69 uint8_t m_motor_on; 70 71 // common 72 uint16_t dipsw_r(); 73 uint16_t palette_r(offs_t offset); 74 void palette_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 75 void blitter_0_w(offs_t offset, uint8_t data); 76 void blitter_1_w(offs_t offset, uint8_t data); 77 void blitter_2_w(offs_t offset, uint8_t data); 78 uint8_t blitter_0_r(offs_t offset); 79 uint8_t blitter_1_r(offs_t offset); 80 uint8_t blitter_2_r(offs_t offset); 81 void clut_0_w(offs_t offset, uint8_t data); 82 void clut_1_w(offs_t offset, uint8_t data); 83 void clut_2_w(offs_t offset, uint8_t data); 84 void clutsel_0_w(uint8_t data); 85 void clutsel_1_w(uint8_t data); 86 void clutsel_2_w(uint8_t data); 87 void tmp68301_parallel_port_w(uint16_t data); 88 89 // musobana and derived machine configs 90 uint16_t musobana_inputport_0_r(); 91 void musobana_inputport_w(uint16_t data); 92 93 virtual void video_start() override; 94 DECLARE_MACHINE_START(musobana); 95 96 uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 97 int blitter_r(int vram, int offset); 98 void blitter_w(int vram, int offset, uint8_t data); 99 void clutsel_w(int vram, uint8_t data); 100 void clut_w(int vram, int offset, uint8_t data); 101 void vramflip(int vram); 102 void update_pixel(int vram, int x, int y); 103 void gfxdraw(int vram); 104 105 DECLARE_WRITE_LINE_MEMBER(vblank_irq); 106 107 void mhhonban_map(address_map &map); 108 void musobana_map(address_map &map); 109 void niyanpai_map(address_map &map); 110 void zokumahj_map(address_map &map); 111 112 virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; 113 }; 114