1 // license:BSD-3-Clause 2 // copyright-holders:Pierpaolo Prazzoli 3 4 #include "sound/sn76496.h" 5 #include "video/ppu2c0x.h" 6 7 class vsnes_state : public driver_device 8 { 9 public: vsnes_state(const machine_config & mconfig,device_type type,const char * tag)10 vsnes_state(const machine_config &mconfig, device_type type, const char *tag) 11 : driver_device(mconfig, type, tag) 12 , m_maincpu(*this, "maincpu") 13 , m_subcpu(*this, "sub") 14 , m_ppu1(*this, "ppu1") 15 , m_ppu2(*this, "ppu2") 16 , m_sn1(*this, "sn1") 17 , m_sn2(*this, "sn2") 18 , m_work_ram(*this, "work_ram") 19 , m_work_ram_1(*this, "work_ram_1") 20 , m_gfx1_rom(*this, "gfx1") 21 { 22 } 23 24 void vsdual(machine_config &config); 25 void vsgshoe(machine_config &config); 26 void vsnes(machine_config &config); 27 void vsdual_pi(machine_config &config); 28 void topgun(machine_config &config); 29 void mightybj(machine_config &config); 30 void vsnes_bootleg(machine_config &config); 31 void jajamaru(machine_config &config); 32 33 void init_vskonami(); 34 void init_vsvram(); 35 void init_bnglngby(); 36 void init_drmario(); 37 void init_MMC3(); 38 void init_vsfdf(); 39 void init_tkoboxng(); 40 void init_vsgun(); 41 void init_supxevs(); 42 void init_vsgshoe(); 43 void init_vsnormal(); 44 void init_platoon(); 45 void init_rbibb(); 46 void init_vsdual(); 47 void init_bootleg(); 48 49 private: 50 required_device<cpu_device> m_maincpu; 51 optional_device<cpu_device> m_subcpu; 52 required_device<ppu2c0x_device> m_ppu1; 53 optional_device<ppu2c0x_device> m_ppu2; 54 optional_device<sn76489_device> m_sn1; 55 optional_device<sn76489_device> m_sn2; 56 57 required_shared_ptr<uint8_t> m_work_ram; 58 optional_shared_ptr<uint8_t> m_work_ram_1; 59 60 optional_memory_region m_gfx1_rom; 61 62 void sprite_dma_0_w(address_space &space, uint8_t data); 63 void sprite_dma_1_w(address_space &space, uint8_t data); 64 void vsnes_coin_counter_w(uint8_t data); 65 uint8_t vsnes_coin_counter_r(); 66 void vsnes_coin_counter_1_w(uint8_t data); 67 void vsnes_in0_w(uint8_t data); 68 uint8_t vsnes_in0_r(); 69 uint8_t vsnes_in1_r(); 70 void vsnes_in0_1_w(uint8_t data); 71 uint8_t vsnes_in0_1_r(); 72 uint8_t vsnes_in1_1_r(); 73 uint8_t gun_in0_r(); 74 void vsnes_nt0_w(offs_t offset, uint8_t data); 75 void vsnes_nt1_w(offs_t offset, uint8_t data); 76 uint8_t vsnes_nt0_r(offs_t offset); 77 uint8_t vsnes_nt1_r(offs_t offset); 78 void vsnormal_vrom_banking(uint8_t data); 79 void gun_in0_w(uint8_t data); 80 void vskonami_rom_banking(offs_t offset, uint8_t data); 81 void vsgshoe_gun_in0_w(uint8_t data); 82 void drmario_rom_banking(offs_t offset, uint8_t data); 83 void vsvram_rom_banking(uint8_t data); 84 void mapper4_w(offs_t offset, uint8_t data); 85 uint8_t rbi_hack_r(offs_t offset); 86 uint8_t supxevs_read_prot_1_r(); 87 uint8_t supxevs_read_prot_2_r(); 88 uint8_t supxevs_read_prot_3_r(); 89 uint8_t supxevs_read_prot_4_r(); 90 uint8_t tko_security_r(offs_t offset); 91 void mapper68_rom_banking(offs_t offset, uint8_t data); 92 void set_bnglngby_irq_w(uint8_t data); 93 uint8_t set_bnglngby_irq_r(); 94 void vsdual_vrom_banking_main(uint8_t data); 95 void vsdual_vrom_banking_sub(uint8_t data); 96 void vssmbbl_sn_w(offs_t offset, uint8_t data); 97 void v_set_mirroring(int ppu, int mirroring); 98 99 DECLARE_MACHINE_START(vsnes); 100 DECLARE_MACHINE_RESET(vsnes); 101 DECLARE_MACHINE_START(vsdual); 102 DECLARE_MACHINE_RESET(vsdual); 103 DECLARE_MACHINE_START(bootleg); 104 void v_set_videorom_bank( int start, int count, int vrom_start_bank ); 105 void mapper4_set_prg( ); 106 void mapper4_set_chr( ); 107 void mapper4_irq( int scanline, int vblank, int blanked ); 108 109 void bootleg_sound_write(offs_t offset, uint8_t data); 110 uint8_t vsnes_bootleg_z80_data_r(); 111 uint8_t vsnes_bootleg_z80_address_r(offs_t offset); 112 void vsnes_bootleg_scanline(int scanline, int vblank, int blanked); 113 uint8_t vsnes_bootleg_ppudata(); 114 115 void vsnes_bootleg_z80_map(address_map &map); 116 void vsnes_cpu1_bootleg_map(address_map &map); 117 void vsnes_cpu1_map(address_map &map); 118 void vsnes_cpu2_map(address_map &map); 119 120 int m_coin; 121 int m_do_vrom_bank; 122 int m_input_latch[4]; 123 int m_sound_fix; 124 uint8_t m_last_bank; 125 std::unique_ptr<uint8_t[]> m_vram; 126 uint8_t* m_vrom[2]; 127 std::unique_ptr<uint8_t[]> m_nt_ram[2]; 128 memory_bank* m_bank_vrom[8]; 129 uint8_t* m_nt_page[2][4]; 130 uint32_t m_vrom_size[2]; 131 int m_vrom_banks; 132 int m_zapstore; 133 int m_old_bank; 134 int m_drmario_shiftreg; 135 int m_drmario_shiftcount; 136 int m_size16k; 137 int m_switchlow; 138 int m_vrom4k; 139 int m_MMC3_cmd; 140 int m_MMC3_prg_bank[4]; 141 int m_MMC3_chr_bank[6]; 142 int m_MMC3_prg_mask; 143 int m_IRQ_enable; 144 int m_IRQ_count; 145 int m_IRQ_count_latch; 146 int m_VSindex; 147 int m_supxevs_prot_index; 148 int m_security_counter; 149 int m_ret; 150 151 uint8_t m_bootleg_sound_offset; 152 uint8_t m_bootleg_sound_data; 153 int m_bootleg_latched_scanline; 154 }; 155