1 // license:LGPL-2.1+ 2 // copyright-holders:Angelo Salese, Olivier Galibert, David Haywood, Samuele Zannoli, R. Belmont, ElSemi 3 /* 4 5 naomi.h -> NAOMI includes 6 7 */ 8 #include "machine/eepromser.h" 9 #include "machine/intelfsh.h" 10 #include "cpu/arm7/arm7.h" 11 #include "cpu/z80/z80.h" 12 #include "machine/x76f100.h" 13 #include "machine/maple-dc.h" 14 #include "machine/dc-ctrl.h" 15 #include "machine/mie.h" 16 #include "machine/naomirom.h" 17 #include "machine/naomigd.h" 18 #include "machine/naomim1.h" 19 #include "machine/naomim2.h" 20 #include "machine/naomim4.h" 21 #include "machine/awboard.h" 22 #include "machine/nvram.h" 23 #include "cpu/sh/sh4.h" 24 #include "cpu/arm7/arm7core.h" 25 #include "sound/aica.h" 26 #include "machine/aicartc.h" 27 #include "machine/jvsdev.h" 28 #include "machine/jvs13551.h" 29 #include "machine/m3comm.h" 30 #include "machine/gunsense.h" 31 #include "dc.h" 32 33 enum { 34 JVSBD_DEFAULT = 0, 35 JVSBD_ADSTICK, 36 JVSBD_LIGHTGUN, 37 JVSBD_MAHJONG, 38 JVSBD_KEYBOARD 39 }; 40 41 class naomi_state : public dc_state 42 { 43 public: naomi_state(const machine_config & mconfig,device_type type,const char * tag)44 naomi_state(const machine_config &mconfig, device_type type, const char *tag) 45 : dc_state(mconfig, type, tag), 46 m_eeprom(*this, "main_eeprom"), 47 m_rombase(*this, "rombase"), 48 m_mp(*this, "KEY%u", 1U) 49 { } 50 51 void naomi_base(machine_config &config); 52 void naomim2(machine_config &config); 53 void naomim2_kb(machine_config &config); 54 void naomim2_gun(machine_config &config); 55 void naomi(machine_config &config); 56 void naomim1(machine_config &config); 57 void naomigd(machine_config &config); 58 void naomigd_kb(machine_config &config); 59 void naomim4(machine_config &config); 60 61 void init_naomigd(); 62 void init_ggxx(); 63 void init_ggxxrl(); 64 void init_ggxxsla(); 65 void init_naomi(); 66 void init_naomigd_mp(); 67 void init_sfz3ugd(); 68 void init_hotd2(); 69 void init_naomi_mp(); 70 71 DECLARE_CUSTOM_INPUT_MEMBER(naomi_mp_r); 72 DECLARE_CUSTOM_INPUT_MEMBER(suchie3_mp_r); 73 DECLARE_CUSTOM_INPUT_MEMBER(naomi_kb_r); 74 DECLARE_INPUT_CHANGED_MEMBER(naomi_mp_w); 75 76 uint64_t naomi2_biose_idle_skip_r(); 77 78 protected: 79 required_device<eeprom_serial_93cxx_device> m_eeprom; 80 optional_shared_ptr<uint64_t> m_rombase; 81 optional_ioport_array<5> m_mp; 82 83 DECLARE_MACHINE_RESET(naomi); 84 DECLARE_WRITE_LINE_MEMBER(external_reset); 85 86 uint16_t naomi_g2bus_r(offs_t offset); 87 uint64_t eeprom_93c46a_r(); 88 void eeprom_93c46a_w(uint64_t data); 89 90 uint8_t m_mp_mux; 91 92 uint8_t asciihex_to_dec(uint8_t in); 93 void create_pic_from_retdat(); 94 95 uint64_t naomi_biose_idle_skip_r(); 96 uint64_t naomi_biosh_idle_skip_r(); 97 uint64_t naomigd_ggxxsla_idle_skip_r(); 98 uint64_t naomigd_ggxx_idle_skip_r(); 99 uint64_t naomigd_ggxxrl_idle_skip_r(); 100 uint64_t naomigd_sfz3ugd_idle_skip_r(); 101 uint64_t hotd2_idle_skip_r(); 102 103 void naomi_map(address_map &map); 104 void naomi_port(address_map &map); 105 106 void set_drc_options(); 107 }; 108 109 class naomi2_state : public naomi_state 110 { 111 public: naomi2_state(const machine_config & mconfig,device_type type,const char * tag)112 naomi2_state(const machine_config &mconfig, device_type type, const char *tag) 113 : naomi_state(mconfig, type, tag), 114 m_pvr2_texture_ram(*this, "textureram2"), 115 m_pvr2_framebuffer_ram(*this, "frameram2"), 116 m_elan_ram(*this, "elan_ram"), 117 m_powervr2_slave(*this, "powervr2_slave") { } 118 119 void naomi2_base(machine_config &config); 120 void naomi2m2(machine_config &config); 121 void naomi2gd(machine_config &config); 122 void naomi2m1(machine_config &config); 123 124 void init_naomi2(); 125 126 private: 127 required_shared_ptr<uint64_t> m_pvr2_texture_ram; 128 required_shared_ptr<uint64_t> m_pvr2_framebuffer_ram; 129 required_shared_ptr<uint64_t> m_elan_ram; 130 required_device<powervr2_device> m_powervr2_slave; 131 132 void both_pvr2_ta_w(address_space &space, offs_t offset, uint32_t data, uint32_t mem_mask = ~0); 133 void naomi2_map(address_map &map); 134 }; 135 136 class atomiswave_state : public dc_state 137 { 138 public: atomiswave_state(const machine_config & mconfig,device_type type,const char * tag)139 atomiswave_state(const machine_config &mconfig, device_type type, const char *tag) 140 : dc_state(mconfig, type, tag), 141 m_awflash(*this, "awflash") 142 { } 143 144 void aw_base(machine_config &config); 145 void aw1c(machine_config &config); 146 void aw2c(machine_config &config); 147 148 void init_atomiswave(); 149 void init_xtrmhnt2(); 150 151 private: 152 required_device<macronix_29l001mc_device> m_awflash; 153 154 uint64_t aw_flash_r(offs_t offset); 155 void aw_flash_w(offs_t offset, uint64_t data, uint64_t mem_mask = ~0); 156 uint64_t aw_modem_r(offs_t offset, uint64_t mem_mask = ~0); 157 void aw_modem_w(offs_t offset, uint64_t data, uint64_t mem_mask = ~0); 158 159 uint64_t xtrmhnt2_hack_r(); 160 161 void aw_map(address_map &map); 162 void aw_port(address_map &map); 163 164 uint8_t aw_ctrl_type; 165 inline int decode_reg32_64(uint32_t offset, uint64_t mem_mask, uint64_t *shift); 166 }; 167 168 INPUT_PORTS_EXTERN( naomi_debug ); 169