1 // license:BSD-3-Clause 2 // copyright-holders:Phil Stroffolino, Nicola Salmoria 3 #ifndef MAME_INCLUDES_HOMEDATA_H 4 #define MAME_INCLUDES_HOMEDATA_H 5 6 #pragma once 7 8 #include "machine/bankdev.h" 9 #include "machine/gen_latch.h" 10 #include "sound/sn76496.h" 11 #include "sound/2203intf.h" 12 #include "emupal.h" 13 #include "tilemap.h" 14 15 class homedata_state : public driver_device 16 { 17 public: homedata_state(const machine_config & mconfig,device_type type,const char * tag)18 homedata_state(const machine_config &mconfig, device_type type, const char *tag) : 19 driver_device(mconfig, type, tag), 20 m_vreg(*this, "vreg"), 21 m_videoram(*this, "videoram"), 22 m_blit_rom(*this, "blit_rom"), 23 m_mainbank(*this, "mainbank"), 24 m_audiobank(*this, "audiobank"), 25 m_maincpu(*this, "maincpu"), 26 m_audiocpu(*this, "audiocpu"), 27 m_ymsnd(*this, "ymsnd"), 28 m_gfxdecode(*this, "gfxdecode"), 29 m_palette(*this, "palette"), 30 m_soundlatch(*this, "soundlatch"), 31 m_mainlatch(*this, "mainlatch"), 32 m_sn(*this, "snsnd"), 33 m_mrokumei_soundbank(*this, "mrokumei_soundbank"), 34 m_keys(*this, "KEY%u", 0U) 35 { 36 } 37 38 void reikaids(machine_config &config); 39 void mrokumei(machine_config &config); 40 void mirderby(machine_config &config); 41 void pteacher(machine_config &config); 42 void jogakuen(machine_config &config); 43 void lemnangl(machine_config &config); 44 void mjikaga(machine_config &config); 45 void mjkinjas(machine_config &config); 46 47 void init_reikaids(); 48 void init_battlcry(); 49 void init_mirderby(); 50 51 private: 52 /* memory pointers */ 53 optional_shared_ptr<uint8_t> m_vreg; 54 required_shared_ptr<uint8_t> m_videoram; 55 56 optional_region_ptr<uint8_t> m_blit_rom; 57 58 optional_memory_bank m_mainbank; 59 optional_memory_bank m_audiobank; 60 61 /* video-related */ 62 tilemap_t *m_bg_tilemap[2][4]; 63 int m_visible_page; 64 int m_priority; 65 uint8_t m_reikaids_which; 66 int m_flipscreen; 67 uint8_t m_gfx_bank[2]; // pteacher only uses the first one 68 uint8_t m_blitter_bank; 69 int m_blitter_param_count; 70 uint8_t m_blitter_param[4]; /* buffers last 4 writes to 0x8006 */ 71 72 73 /* misc */ 74 int m_vblank; 75 int m_keyb; 76 int m_upd7807_porta; 77 int m_upd7807_portc; 78 79 /* device */ 80 required_device<cpu_device> m_maincpu; 81 optional_device<cpu_device> m_audiocpu; 82 optional_device<ym2203_device> m_ymsnd; 83 required_device<gfxdecode_device> m_gfxdecode; 84 required_device<palette_device> m_palette; 85 optional_device<generic_latch_8_device> m_soundlatch; 86 optional_device<generic_latch_8_device> m_mainlatch; // pteacher 87 optional_device<sn76489a_device> m_sn; // mrokumei and pteacher 88 optional_device<address_map_bank_device> m_mrokumei_soundbank; // mrokumei 89 90 optional_ioport_array<12> m_keys; 91 92 uint8_t m_prot_data; 93 uint8_t mrokumei_keyboard_r(offs_t offset); 94 void mrokumei_keyboard_select_w(uint8_t data); 95 void mrokumei_sound_bank_w(uint8_t data); 96 void mrokumei_sound_cmd_w(uint8_t data); 97 uint8_t reikaids_upd7807_porta_r(); 98 void reikaids_upd7807_porta_w(uint8_t data); 99 void reikaids_upd7807_portc_w(uint8_t data); 100 uint8_t reikaids_io_r(); 101 uint8_t pteacher_io_r(); 102 uint8_t pteacher_keyboard_r(); 103 uint8_t pteacher_upd7807_porta_r(); 104 void pteacher_upd7807_porta_w(uint8_t data); 105 void pteacher_upd7807_portc_w(uint8_t data); 106 void bankswitch_w(uint8_t data); 107 uint8_t mirderby_prot_r(); 108 void mirderby_prot_w(uint8_t data); 109 void mrokumei_videoram_w(offs_t offset, u8 data); 110 void reikaids_videoram_w(offs_t offset, u8 data); 111 void reikaids_gfx_bank_w(uint8_t data); 112 void pteacher_gfx_bank_w(uint8_t data); 113 void homedata_blitter_param_w(uint8_t data); 114 void mrokumei_blitter_bank_w(uint8_t data); 115 void reikaids_blitter_bank_w(uint8_t data); 116 void pteacher_blitter_bank_w(uint8_t data); 117 void mrokumei_blitter_start_w(uint8_t data); 118 void reikaids_blitter_start_w(uint8_t data); 119 void pteacher_blitter_start_w(uint8_t data); 120 TILE_GET_INFO_MEMBER(mrokumei_get_info0_0); 121 TILE_GET_INFO_MEMBER(mrokumei_get_info1_0); 122 TILE_GET_INFO_MEMBER(mrokumei_get_info0_1); 123 TILE_GET_INFO_MEMBER(mrokumei_get_info1_1); 124 TILE_GET_INFO_MEMBER(reikaids_get_info0_0); 125 TILE_GET_INFO_MEMBER(reikaids_get_info1_0); 126 TILE_GET_INFO_MEMBER(reikaids_get_info0_1); 127 TILE_GET_INFO_MEMBER(reikaids_get_info1_1); 128 TILE_GET_INFO_MEMBER(reikaids_get_info0_2); 129 TILE_GET_INFO_MEMBER(reikaids_get_info1_2); 130 TILE_GET_INFO_MEMBER(reikaids_get_info0_3); 131 TILE_GET_INFO_MEMBER(reikaids_get_info1_3); 132 TILE_GET_INFO_MEMBER(pteacher_get_info0_0); 133 TILE_GET_INFO_MEMBER(pteacher_get_info1_0); 134 TILE_GET_INFO_MEMBER(pteacher_get_info0_1); 135 TILE_GET_INFO_MEMBER(pteacher_get_info1_1); 136 TILE_GET_INFO_MEMBER(lemnangl_get_info0_0); 137 TILE_GET_INFO_MEMBER(lemnangl_get_info1_0); 138 TILE_GET_INFO_MEMBER(lemnangl_get_info0_1); 139 TILE_GET_INFO_MEMBER(lemnangl_get_info1_1); 140 TILE_GET_INFO_MEMBER(mirderby_get_info0_0); 141 TILE_GET_INFO_MEMBER(mirderby_get_info1_0); 142 TILE_GET_INFO_MEMBER(mirderby_get_info0_1); 143 TILE_GET_INFO_MEMBER(mirderby_get_info1_1); 144 DECLARE_MACHINE_START(homedata); 145 DECLARE_MACHINE_RESET(homedata); 146 DECLARE_MACHINE_RESET(mrokumei); 147 DECLARE_VIDEO_START(mrokumei); 148 void mrokumei_palette(palette_device &palette) const; 149 DECLARE_MACHINE_START(reikaids); 150 DECLARE_MACHINE_RESET(reikaids); 151 DECLARE_VIDEO_START(reikaids); 152 void reikaids_palette(palette_device &palette) const; 153 DECLARE_MACHINE_START(pteacher); 154 DECLARE_MACHINE_RESET(pteacher); 155 DECLARE_VIDEO_START(pteacher); 156 void pteacher_palette(palette_device &palette) const; 157 DECLARE_VIDEO_START(mirderby); 158 void mirderby_palette(palette_device &palette) const; 159 DECLARE_VIDEO_START(lemnangl); 160 uint32_t screen_update_mrokumei(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 161 uint32_t screen_update_reikaids(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 162 uint32_t screen_update_pteacher(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 163 uint32_t screen_update_mirderby(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 164 DECLARE_WRITE_LINE_MEMBER(screen_vblank); 165 INTERRUPT_GEN_MEMBER(homedata_irq); 166 void mrokumei_handleblit( int rom_base ); 167 void reikaids_handleblit( int rom_base ); 168 void pteacher_handleblit( int rom_base ); 169 inline void mrokumei_info0( tile_data &tileinfo, int tile_index, int page, int gfxbank ); 170 inline void mrokumei_info1( tile_data &tileinfo, int tile_index, int page, int gfxbank ); 171 inline void reikaids_info( tile_data &tileinfo, int tile_index, int page, int layer, int gfxbank ); 172 inline void pteacher_info( tile_data &tileinfo, int tile_index, int page, int layer, int gfxbank ); 173 inline void lemnangl_info( tile_data &tileinfo, int tile_index, int page, int layer, int gfxset, int gfxbank ); 174 inline void mirderby_info0( tile_data &tileinfo, int tile_index, int page, int gfxbank ); 175 inline void mirderby_info1( tile_data &tileinfo, int tile_index, int page, int gfxbank ); 176 void cpu0_map(address_map &map); 177 void cpu1_map(address_map &map); 178 void cpu2_map(address_map &map); 179 void jogakuen_map(address_map &map); 180 void mjikaga_map(address_map &map); 181 void mjikaga_upd7807_map(address_map &map); 182 void mrokumei_map(address_map &map); 183 void mrokumei_sound_banked_map(address_map &map); 184 void mrokumei_sound_io_map(address_map &map); 185 void mrokumei_sound_map(address_map &map); 186 void pteacher_base_map(address_map &map); 187 void pteacher_map(address_map &map); 188 void pteacher_upd7807_map(address_map &map); 189 void reikaids_map(address_map &map); 190 void reikaids_upd7807_map(address_map &map); 191 }; 192 193 #endif // MAME_INCLUDES_HOMEDATA_H 194