diff options
Diffstat (limited to 'src/mame/nintendo/nes_vt369_vtunknown.cpp')
| -rw-r--r-- | src/mame/nintendo/nes_vt369_vtunknown.cpp | 426 |
1 files changed, 303 insertions, 123 deletions
diff --git a/src/mame/nintendo/nes_vt369_vtunknown.cpp b/src/mame/nintendo/nes_vt369_vtunknown.cpp index ea1d7483486..8fca43adf81 100644 --- a/src/mame/nintendo/nes_vt369_vtunknown.cpp +++ b/src/mame/nintendo/nes_vt369_vtunknown.cpp @@ -24,15 +24,20 @@ #include "nes_vt369_vtunknown_soc.h" #include "vt_menu_protection.h" +#include "vt_menu_protection_lxcap.h" + +#include "machine/eepromser.h" +#include "machine/i2cmem.h" #include "multibyte.h" +#include "speaker.h" namespace { class vt369_base_state : public driver_device { public: - vt369_base_state(const machine_config& mconfig, device_type type, const char* tag) : + vt369_base_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_io0(*this, "IO0"), m_io1(*this, "IO1"), @@ -69,7 +74,7 @@ protected: required_region_ptr<u8> m_prgrom; - void configure_soc(nes_vt02_vt03_soc_device* soc); + void configure_soc(vt3xx_soc_base_device *soc); void extbank_w(u8 data); void extbank_red5mam_w(u8 data); @@ -78,12 +83,14 @@ protected: private: /* Extra IO */ template <u8 NUM> u8 extrain_r(); + u8 default_4139_r(); + u8 default_414b_r(); }; class vt369_state : public vt369_base_state { public: - vt369_state(const machine_config& mconfig, device_type type, const char* tag) : + vt369_state(const machine_config &mconfig, device_type type, const char *tag) : vt369_base_state(mconfig, type, tag), m_soc(*this, "soc") { } @@ -114,54 +121,55 @@ protected: class vt36x_state : public vt369_state { public: - vt36x_state(const machine_config& mconfig, device_type type, const char* tag) : + vt36x_state(const machine_config &mconfig, device_type type, const char *tag) : vt369_state(mconfig, type, tag) { } - void vt36x(machine_config& config); - void vt36x_1mb(machine_config& config); - void vt36x_4mb(machine_config& config); - void vt36x_8mb(machine_config& config); - void vt36x_16mb(machine_config& config); - void vt36x_16mb_sdcard(machine_config& config); - void vt36x_32mb(machine_config& config); - void vt36x_32mb_2banks_lexi(machine_config& config); - void vt36x_32mb_2banks_lexi300(machine_config& config); - void vt36x_h12p1000(machine_config& config); - - void vt36x_swap(machine_config& config); - void vt36x_swap_2mb(machine_config& config); - void vt36x_swap_4mb(machine_config& config); - void vt36x_swap_8mb(machine_config& config); - void vt36x_swap_16mb(machine_config& config); - void vt36x_swap_512kb(machine_config& config); - - void vt36x_altswap(machine_config& config); - void vt36x_altswap_2mb(machine_config& config); - void vt36x_altswap_4mb(machine_config& config); - void vt36x_altswap_16mb(machine_config& config); - void vt36x_altswap_32mb_4banks_red5mam(machine_config& config); - - void vt36x_vibesswap_8mb(machine_config& config); - void vt36x_vibesswap_16mb(machine_config& config); - void vt36x_gbox2020_8mb(machine_config& config); - void vt36x_gbox2020_16mb(machine_config& config); - void vt36x_s10swap_8mb(machine_config& config); - void vt36x_rsps300swap_16mb(machine_config& config); - - void vt369_unk(machine_config& config); - void vt369_unk_16mb(machine_config& config); + void vt36x(machine_config &config) ATTR_COLD; + void vt36x_1mb(machine_config &config) ATTR_COLD; + void vt36x_4mb(machine_config &config) ATTR_COLD; + void vt36x_8mb(machine_config &config) ATTR_COLD; + void vt36x_16mb(machine_config &config) ATTR_COLD; + void vt36x_16mb_sdcard(machine_config &config) ATTR_COLD; + void vt36x_32mb(machine_config &config) ATTR_COLD; + void vt36x_32mb_2banks_lexi(machine_config &config) ATTR_COLD; + void vt36x_32mb_2banks_lexi300(machine_config &config) ATTR_COLD; + void vt36x_h12p1000(machine_config &config) ATTR_COLD; + + void vt36x_swap(machine_config &config) ATTR_COLD; + void vt36x_swap_2mb(machine_config &config) ATTR_COLD; + void vt36x_swap_4mb(machine_config &config) ATTR_COLD; + void vt36x_swap_8mb(machine_config &config) ATTR_COLD; + void vt36x_swap_16mb(machine_config &config) ATTR_COLD; + void vt36x_swap_512kb(machine_config &config) ATTR_COLD; + + void vt36x_altswap(machine_config &config) ATTR_COLD; + void vt36x_altswap_2mb(machine_config &config) ATTR_COLD; + void vt36x_altswap_4mb(machine_config &config) ATTR_COLD; + void vt36x_altswap_16mb(machine_config &config) ATTR_COLD; + void vt36x_altswap_32mb_4banks_red5mam(machine_config &config) ATTR_COLD; + + void vt36x_vibesswap_8mb(machine_config &config) ATTR_COLD; + void vt36x_vibesswap_16mb(machine_config &config) ATTR_COLD; + void vt36x_gbox2020_8mb(machine_config &config) ATTR_COLD; + void vt36x_gbox2020_16mb(machine_config &config) ATTR_COLD; + void vt36x_s10swap_8mb(machine_config &config) ATTR_COLD; + void vt36x_rsps300swap_16mb(machine_config &config) ATTR_COLD; + + void vt369_unk(machine_config &config) ATTR_COLD; + void vt369_unk_16mb(machine_config &config) ATTR_COLD; }; class vt36x_gtct885_state : public vt36x_state { public: - vt36x_gtct885_state(const machine_config& mconfig, device_type type, const char* tag) : + vt36x_gtct885_state(const machine_config &mconfig, device_type type, const char *tag) : vt36x_state(mconfig, type, tag), m_protection(*this, "protection") { } - void vt36x_8mb_gtct885(machine_config& config); + void vt36x_8mb_gtct885(machine_config &config) ATTR_COLD; + void vt36x_altswap_2mb_36pcase(machine_config &config) ATTR_COLD; private: u8 gtct885_prot_r(); @@ -173,13 +181,13 @@ private: class vt36x_goretrop_state : public vt36x_state { public: - vt36x_goretrop_state(const machine_config& mconfig, device_type type, const char* tag) : + vt36x_goretrop_state(const machine_config &mconfig, device_type type, const char *tag) : vt36x_state(mconfig, type, tag), m_protection(*this, "protection") { } - void vt36x_32mb_goretrop(machine_config& config); - void vt36x_1mb_rbbrite(machine_config& config); + void vt36x_32mb_goretrop(machine_config &config) ATTR_COLD; + void vt36x_1mb_rbbrite(machine_config &config) ATTR_COLD; private: u8 goretrop_prot_r(); @@ -191,59 +199,47 @@ private: class vt36x_tetrtin_state : public vt36x_state { public: - vt36x_tetrtin_state(const machine_config& mconfig, device_type type, const char* tag) : - vt36x_state(mconfig, type, tag) + vt36x_tetrtin_state(const machine_config &mconfig, device_type type, const char *tag) : + vt36x_state(mconfig, type, tag), + m_protection(*this, "protection") { } -protected: - virtual void machine_reset() override; + void vt36x_1mb_tetrtin(machine_config& config) ATTR_COLD; + void vt36x_8mb_lxcap(machine_config &config) ATTR_COLD; + void vt36x_8mb_pixel(machine_config &config) ATTR_COLD; + void vt36x_16mb_nesvt270(machine_config &config) ATTR_COLD; +protected: + u8 lxcap_prot_r(); + void lxcap_prot_w(u8 data); + u8 pixel_prot_r(); + void pixel_prot_w(u8 data); + u8 nesvt270_prot_r(); + void nesvt270_prot_w(u8 data); + + required_device<vt_menu_protection_lxcap_device> m_protection; }; -void vt36x_tetrtin_state::machine_reset() +class vt36x_otrail_state : public vt36x_tetrtin_state { - vt36x_state::machine_reset(); - // the game appears to require code/data from an additional device (not just the standard internal ROM) - // there's an 8-pin chip on the PCB which is likely responsible +public: + vt36x_otrail_state(const machine_config &mconfig, device_type type, const char *tag) : + vt36x_tetrtin_state(mconfig, type, tag), + m_i2cmem(*this, "i2cmem"), + m_dac(*this, "dac") + { } - // simulate what that code might be doing - // copy VT369 internal ROM 0x0000 to 0x4ff4 in CPU space (copying boot vectors for sound CPU, as other games do in code) - int src = 0; - u8 *introm = memregion("soc:internal")->base(); - for (int i = 0x4ff4; i < 0x5000; i++) - { - m_soc->write_byte_to_cpu(i, introm[src++]); - } - u8* gamerom = memregion("mainrom")->base(); + void vt36x_1mb_otrail(machine_config &config) ATTR_COLD; - int patchaddress; +private: + void otrail_seeprom_w(u8 data); + u8 otrail_seeprom_r(); + void otrail_sound_w(u8 data); + required_device<i2cmem_device> m_i2cmem; + required_device<dac_byte_interface> m_dac; +}; - // tetrtin - jump over a whole lot of code, this is crude, there might be other code still in the startup we could be executing - patchaddress = 0x7f675; - if ((gamerom[patchaddress] == 0x20) && (gamerom[patchaddress+1] == 0xcb) && (gamerom[patchaddress+2] == 0xf5)) - { - gamerom[patchaddress] = 0x4c; - gamerom[patchaddress+1] = 0xcb; - gamerom[patchaddress+2] = 0xf6; - } - // same for pactin - patchaddress = 0x7f5a3; - if ((gamerom[patchaddress] == 0x20) && (gamerom[patchaddress+1] == 0x04) && (gamerom[patchaddress+2] == 0xf5)) - { - gamerom[patchaddress] = 0x4c; - gamerom[patchaddress+1] = 0xf9; - gamerom[patchaddress+2] = 0xf5; - } - // lxcap (will show menu, but accesses device again afterwards) - patchaddress = 0x7ecd4; - if ((gamerom[patchaddress] == 0x20) && (gamerom[patchaddress+1] == 0x96) && (gamerom[patchaddress+2] == 0xeb)) - { - gamerom[patchaddress] = 0x4c; - gamerom[patchaddress+1] = 0x2a; - gamerom[patchaddress+2] = 0xed; - } -} u8 vt369_state::vt_rom_banked_r(offs_t offset) { @@ -307,6 +303,18 @@ template <u8 NUM> u8 vt369_base_state::extrain_r() return 0x00; } +u8 vt369_base_state::default_4139_r() +{ + logerror("%s: default_4139_r (not hooked up)\n", machine().describe_context()); + return 0x00; +} + +u8 vt369_base_state::default_414b_r() +{ + // pixel246 and mog_m320 at least require something to be here + logerror("%s: default_414b_r (not hooked up)\n", machine().describe_context()); + return 0x00; +} /* Standard I/O handlers (NES Controller clone) */ @@ -369,7 +377,7 @@ void vt369_base_state::machine_reset() m_ahigh = 0; } -void vt369_base_state::configure_soc(nes_vt02_vt03_soc_device* soc) +void vt369_base_state::configure_soc(vt3xx_soc_base_device *soc) { soc->set_addrmap(AS_PROGRAM, &vt369_state::vt_external_space_map_32mbyte); soc->read_0_callback().set(FUNC(vt369_base_state::in0_r)); @@ -380,6 +388,9 @@ void vt369_base_state::configure_soc(nes_vt02_vt03_soc_device* soc) soc->extra_read_1_callback().set(FUNC(vt369_base_state::extrain_r<1>)); soc->extra_read_2_callback().set(FUNC(vt369_base_state::extrain_r<2>)); soc->extra_read_3_callback().set(FUNC(vt369_base_state::extrain_r<3>)); + + soc->io_4139_read_callback().set(FUNC(vt369_base_state::default_4139_r)); + soc->io_414b_read_callback().set(FUNC(vt369_base_state::default_414b_r)); } @@ -392,7 +403,7 @@ void vt36x_state::vt369_unk(machine_config &config) m_soc->force_bad_dma(); } -void vt36x_state::vt369_unk_16mb(machine_config& config) +void vt36x_state::vt369_unk_16mb(machine_config &config) { vt369_unk(config); m_soc->set_addrmap(AS_PROGRAM, &vt36x_state::vt_external_space_map_16mbyte); @@ -466,7 +477,7 @@ void vt36x_state::vt36x_altswap_4mb(machine_config &config) m_soc->set_addrmap(AS_PROGRAM, &vt36x_state::vt_external_space_map_4mbyte); } -void vt36x_state::vt36x_altswap_16mb(machine_config& config) +void vt36x_state::vt36x_altswap_16mb(machine_config &config) { vt36x_altswap(config); m_soc->set_addrmap(AS_PROGRAM, &vt36x_state::vt_external_space_map_16mbyte); @@ -524,7 +535,81 @@ u8 vt36x_goretrop_state::goretrop_prot_r() return (m_protection->read() ? 0x08 : 0x00); } -void vt36x_state::vt36x_altswap_32mb_4banks_red5mam(machine_config& config) + + +void vt36x_tetrtin_state::lxcap_prot_w(u8 data) +{ + /* + direction is set to 0x03 before writing + + uses the following RAM addresses while accessing device + (lxcap / pactin / tetrtin) + + dad / e40 / e42 (80 - command) + daf / e42 / e44 (xx - param) + db1 / e44 / e46 (direction register?) + db3 / e46 / e48 (data bits) + + */ + + m_protection->write_data((data & 0x02) ? true : false); + m_protection->write_clock((data & 0x01) ? true : false); +} + +u8 vt36x_tetrtin_state::lxcap_prot_r() +{ + // direction set to 0x01 before reading (making 0x02 the input) + return (m_protection->read() ? 0x02 : 0x00); +} + + + +void vt36x_tetrtin_state::pixel_prot_w(u8 data) +{ + m_protection->write_data((data & 0x10) ? true : false); + m_protection->write_clock((data & 0x20) ? true : false); +} + +u8 vt36x_tetrtin_state::pixel_prot_r() +{ + return (m_protection->read() ? 0x10 : 0x00); +} + +u8 vt36x_tetrtin_state::nesvt270_prot_r() +{ + return 0x00;// (m_protection->read() ? 0x40 : 0x00); +} + +void vt36x_tetrtin_state::nesvt270_prot_w(u8 data) +{ + //m_protection->write_data((data & 0x40) ? true : false); + //m_protection->write_clock((data & 0x80) ? true : false); +} + +void vt36x_otrail_state::otrail_seeprom_w(u8 data) +{ + m_i2cmem->write_scl((data & 0x04) ? true : false); + m_i2cmem->write_sda((data & 0x08) ? true : false); +} + +void vt36x_otrail_state::otrail_sound_w(u8 data) +{ + // is this really a DAC? + // + // it might be an another chip playing samples from an internal ROM + // as there are longer sound clips and only short bursts of writes that + // look more like commands + m_dac->write(data & 0x07); +} + +u8 vt36x_otrail_state::otrail_seeprom_r() +{ + return (m_i2cmem->read_sda() ? 0xff : 0xf7); +} + + + +void vt36x_state::vt36x_altswap_32mb_4banks_red5mam(machine_config &config) { vt36x_altswap(config); m_soc->set_addrmap(AS_PROGRAM, &vt36x_state::vt_external_space_map_32mbyte_bank); @@ -589,57 +674,57 @@ void vt36x_state::vt36x_rsps300swap_16mb(machine_config &config) -void vt36x_state::vt36x_1mb(machine_config& config) +void vt36x_state::vt36x_1mb(machine_config &config) { vt36x(config); m_soc->set_addrmap(AS_PROGRAM, &vt36x_state::vt_external_space_map_1mbyte); } -void vt36x_state::vt36x_4mb(machine_config& config) +void vt36x_state::vt36x_4mb(machine_config &config) { vt36x(config); m_soc->set_addrmap(AS_PROGRAM, &vt36x_state::vt_external_space_map_4mbyte); } -void vt36x_state::vt36x_8mb(machine_config& config) +void vt36x_state::vt36x_8mb(machine_config &config) { vt36x(config); m_soc->set_addrmap(AS_PROGRAM, &vt36x_state::vt_external_space_map_8mbyte); } -void vt36x_state::vt36x_16mb(machine_config& config) +void vt36x_state::vt36x_16mb(machine_config &config) { vt36x(config); m_soc->set_addrmap(AS_PROGRAM, &vt36x_state::vt_external_space_map_16mbyte); } -void vt36x_state::vt36x_16mb_sdcard(machine_config& config) +void vt36x_state::vt36x_16mb_sdcard(machine_config &config) { vt36x(config); m_soc->set_addrmap(AS_PROGRAM, &vt36x_state::vt_external_space_map_16mbyte); } -void vt36x_state::vt36x_32mb(machine_config& config) +void vt36x_state::vt36x_32mb(machine_config &config) { vt36x(config); m_soc->set_addrmap(AS_PROGRAM, &vt36x_state::vt_external_space_map_32mbyte); } -void vt36x_state::vt36x_32mb_2banks_lexi(machine_config& config) +void vt36x_state::vt36x_32mb_2banks_lexi(machine_config &config) { vt36x_32mb(config); m_soc->set_addrmap(AS_PROGRAM, &vt36x_state::vt_external_space_map_32mbyte_bank); m_soc->io_4152_write_callback().set(FUNC(vt36x_state::extbank_w)); } -void vt36x_state::vt36x_32mb_2banks_lexi300(machine_config& config) +void vt36x_state::vt36x_32mb_2banks_lexi300(machine_config &config) { vt36x_32mb(config); m_soc->set_addrmap(AS_PROGRAM, &vt36x_state::vt_external_space_map_32mbyte_bank); m_soc->set_411e_write_cb().set(FUNC(vt36x_state::extbank_w)); // could be on 411d } -void vt36x_gtct885_state::vt36x_8mb_gtct885(machine_config& config) +void vt36x_gtct885_state::vt36x_8mb_gtct885(machine_config &config) { vt36x_8mb(config); m_soc->io_4153_read_callback().set(FUNC(vt36x_gtct885_state::gtct885_prot_r)); @@ -648,7 +733,17 @@ void vt36x_gtct885_state::vt36x_8mb_gtct885(machine_config& config) VT_MENU_PROTECTION(config, m_protection, 0); } -void vt36x_goretrop_state::vt36x_32mb_goretrop(machine_config& config) +void vt36x_gtct885_state::vt36x_altswap_2mb_36pcase(machine_config &config) +{ + vt36x_altswap_2mb(config); + + m_soc->io_4153_read_callback().set(FUNC(vt36x_gtct885_state::gtct885_prot_r)); + m_soc->io_4152_write_callback().set(FUNC(vt36x_gtct885_state::gtct885_prot_w)); + + VT_MENU_PROTECTION(config, m_protection, 0); +} + +void vt36x_goretrop_state::vt36x_32mb_goretrop(machine_config &config) { vt36x_32mb(config); m_soc->io_4139_read_callback().set(FUNC(vt36x_goretrop_state::goretrop_prot_r)); @@ -657,19 +752,77 @@ void vt36x_goretrop_state::vt36x_32mb_goretrop(machine_config& config) VT_MENU_PROTECTION(config, m_protection, 0); } -void vt36x_goretrop_state::vt36x_1mb_rbbrite(machine_config& config) +void vt36x_goretrop_state::vt36x_1mb_rbbrite(machine_config &config) { vt36x_32mb_goretrop(config); m_soc->set_addrmap(AS_PROGRAM, &vt36x_state::vt_external_space_map_1mbyte); } -void vt36x_state::vt36x_h12p1000(machine_config& config) +void vt36x_state::vt36x_h12p1000(machine_config &config) { vt36x_16mb(config); m_soc->set_addrmap(AS_PROGRAM, &vt36x_state::vt_external_space_map_16mbyte_bank); m_soc->io_4139_write_callback().set(FUNC(vt36x_state::extbank_h12p1000_w)); } +// there are also accesses to 4158 and 4151 which may be related to the I/O ports +void vt36x_tetrtin_state::vt36x_1mb_tetrtin(machine_config &config) +{ + vt36x_1mb(config); + VT_MENU_PROTECTION_LXCAP(config, m_protection, 0); + + m_soc->io_4153_read_callback().set(FUNC(vt36x_tetrtin_state::lxcap_prot_r)); + m_soc->io_4152_write_callback().set(FUNC(vt36x_tetrtin_state::lxcap_prot_w)); +} + +void vt36x_tetrtin_state::vt36x_8mb_lxcap(machine_config &config) +{ + vt36x_8mb(config); + VT_MENU_PROTECTION_LXCAP(config, m_protection, 0); + + m_soc->io_4153_read_callback().set(FUNC(vt36x_tetrtin_state::lxcap_prot_r)); + m_soc->io_4152_write_callback().set(FUNC(vt36x_tetrtin_state::lxcap_prot_w)); +} + +void vt36x_tetrtin_state::vt36x_8mb_pixel(machine_config &config) +{ + vt36x_8mb(config); + VT_MENU_PROTECTION_LXCAP(config, m_protection, 0); + + m_soc->io_414b_read_callback().set(FUNC(vt36x_tetrtin_state::pixel_prot_r)); + m_soc->io_414a_write_callback().set(FUNC(vt36x_tetrtin_state::pixel_prot_w)); +} + +void vt36x_tetrtin_state::vt36x_16mb_nesvt270(machine_config &config) +{ + vt36x_16mb(config); + VT_MENU_PROTECTION_LXCAP(config, m_protection, 0); // might not be this device + + m_soc->io_414b_read_callback().set(FUNC(vt36x_tetrtin_state::nesvt270_prot_r)); + m_soc->io_414b_write_callback().set(FUNC(vt36x_tetrtin_state::nesvt270_prot_w)); +} + + +void vt36x_otrail_state::vt36x_1mb_otrail(machine_config &config) +{ + vt36x_1mb(config); + VT_MENU_PROTECTION_LXCAP(config, m_protection, 0); + + I2C_24C04(config, "i2cmem", 0); + + SPEAKER(config, "internal").front_center(); + + DAC_3BIT_R2R(config, m_dac, 0).add_route(ALL_OUTPUTS, "internal", 0.15); // unknown sound device (maybe a DAC) + + m_soc->io_414b_read_callback().set(FUNC(vt36x_otrail_state::pixel_prot_r)); + m_soc->io_414a_write_callback().set(FUNC(vt36x_otrail_state::pixel_prot_w)); + + m_soc->io_4153_read_callback().set(FUNC(vt36x_otrail_state::otrail_seeprom_r)); + m_soc->io_4152_write_callback().set(FUNC(vt36x_otrail_state::otrail_seeprom_w)); + m_soc->io_4153_write_callback().set(FUNC(vt36x_otrail_state::otrail_sound_w)); +} + + static INPUT_PORTS_START( vt369 ) PORT_START("IO0") @@ -998,7 +1151,7 @@ ROM_START( 36pcase ) ROM_REGION( 0x200000, "mainrom", 0 ) ROM_LOAD( "25q16.ic3", 0x00000, 0x200000, CRC(a8edb73e) SHA1(1028656530e411607ffa3b63788b42e41bf971d7) ) - ROM_REGION( 0x100, "extra", 0 ) // data from additional 8-pin chip for protection (put at 0xe01 in RAM) (checks for something before this) + ROM_REGION( 0x100, "protection", 0 ) // data from additional 8-pin chip for protection (put at 0xe01 in RAM) (checks for something before this) ROM_LOAD( "mystery chip.bin", 0x00000, 0x100, NO_DUMP ) ROM_END @@ -1127,8 +1280,14 @@ ROM_START( lxcap ) VT3XX_INTERNAL_NO_SWAP // verified for this set - ROM_REGION( 0x100, "extra", 0 ) // data from additional 8-pin chip for protection - ROM_LOAD( "mystery chip.bin", 0x00000, 0x100, CRC(491d206b) SHA1(a5411a7afe3b4df93b1b22e5533f5010bd3aaa93) ) + //ROM_REGION( 0x100, "protection", 0 ) // data from additional 8-pin chip for protection + // This table is just (0x100 - offset) & 0xff with a nibble swap applied at the end + // + // The chip here (which is accessed in a different way to gtct885 etc.) might not + // be fetching data from a table, but doing a calculation + // + // we just do the calculation instead + //ROM_LOAD( "mystery chip.bin", 0x00000, 0x100, CRC(491d206b) SHA1(a5411a7afe3b4df93b1b22e5533f5010bd3aaa93) ) ROM_END ROM_START( denv150 ) @@ -1156,8 +1315,10 @@ ROM_START( otrail ) ROM_REGION( 0x100000, "mainrom", 0 ) ROM_LOAD( "g25q80cw.bin", 0x00000, 0x100000, CRC(b20a03ba) SHA1(c4ca8e590b07baaebed747537bc8f92e44bdd219) ) // dumped as QD25Q80C - ROM_REGION( 0x200, "seeprom", 0 ) - ROM_LOAD( "t24c04a.bin", 0x000, 0x200, CRC(ce1fad6f) SHA1(82878996765739edba42042b6336460d5c8f8096) ) + //VT3XX_INTERNAL_NO_SWAP // not verified for this set, used for testing + + //ROM_REGION( 0x200, "seeprom", 0 ) + //ROM_LOAD( "t24c04a.bin", 0x000, 0x200, CRC(ce1fad6f) SHA1(82878996765739edba42042b6336460d5c8f8096) ) ROM_END ROM_START( pactin ) @@ -1238,8 +1399,8 @@ ROM_START( matetsl ) ROM_END ROM_START( nesvt270 ) - ROM_REGION( 0x2000000, "mainrom", 0 ) - ROM_LOAD( "w25q128jvs.u3", 0x00000, 0x1000300, CRC(fe189a90) SHA1(7f07ae89ae7ff49f139e936b08c9ef2a3467ea92) ) + ROM_REGION( 0x1000000, "mainrom", 0 ) + ROM_LOAD( "w25q128jvs.u3", 0x00000, 0x1000000, CRC(8ff28dcc) SHA1(ea1aab0beb54c0b5a9a79211542f8f0f7fce676d) ) ROM_END ROM_START( rbbrite ) @@ -1330,6 +1491,22 @@ ROM_START( goretropa ) ROM_LOAD( "mystery chip.bin", 0x00000, 0x100, NO_DUMP ) ROM_END +ROM_START( goretropu13 ) + ROM_REGION( 0x2000000, "mainrom", 0 ) + ROM_LOAD( "goretroportable250p_v13.bin", 0x00000, 0x2000000, CRC(b2a94173) SHA1(e64989f4b0a29820b0dce5e0ca91abb8f247c269) ) + + ROM_REGION( 0x100, "protection", 0 ) // data from additional 8-pin chip for protection (copied to 0x701 - 0x7ff) + ROM_LOAD( "mystery chip.bin", 0x00000, 0x100, NO_DUMP ) +ROM_END + +ROM_START( goretropu12 ) + ROM_REGION( 0x2000000, "mainrom", 0 ) + ROM_LOAD( "goretroportable250p_v12.bin", 0x00000, 0x2000000, CRC(fda93863) SHA1(75e48ac27e5520953676894747d6d06307cdc1af) ) + + ROM_REGION( 0x100, "protection", 0 ) // data from additional 8-pin chip for protection (copied to 0x701 - 0x7ff) + ROM_LOAD( "mystery chip.bin", 0x00000, 0x100, NO_DUMP ) +ROM_END + ROM_START( s10fake ) ROM_REGION( 0x800000, "mainrom", 0 ) ROM_LOAD( "s29gl064a90tfir4.bin", 0x00000, 0x800000, CRC(8ba78851) SHA1(d482fc56efbbdf6ff890b775144fd49ecaa1b539) ) @@ -1626,8 +1803,8 @@ CONS( 201?, 240in1ar, 0, 0, vt36x_altswap_32mb_4banks_red5mam, vt369, vt36x_s // portable fan + famiclone combo handheld, very similar to 240in1ar CONS( 2020, nubsupmf, 0, 0, vt36x_altswap_4mb, vt369, vt36x_state, empty_init, "<unknown>", "NubSup Mini Game Fan", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) -// protected -CONS( 202?, 36pcase, 0, 0, vt36x_altswap_2mb, vt369, vt36x_state, empty_init, "<unknown>", "36-in-1 Classic Games phone case", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) +// protected both with accesses involving 41e7 / 41eb / 414f (probably more IO ports, to get 2 bytes in RAM) and the serial devices to get ~0x100 bytes of code +CONS( 202?, 36pcase, 0, 0, vt36x_altswap_2mb_36pcase, vt369, vt36x_gtct885_state, empty_init, "<unknown>", "36-in-1 Classic Games phone case", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) /***************************************************************************** @@ -1687,9 +1864,9 @@ CONS( 2016, sy888b, 0, 0, vt36x_4mb, vt369, vt36x_state, empty_init, CONS( 201?, mc_cb280, 0, 0, vt36x_swap_4mb, vt369, vt36x_state, empty_init, "CoolBoy", "Coolboy RS-18 (280 in 1)", MACHINE_IMPERFECT_GRAPHICS ) // this is similar to mog_m320 below, but gets to the menu (still has chr banking issues) -CONS( 201?, pixel246, 0, 0, vt36x_8mb, vt369, vt36x_state, empty_init, "Shanghai Weimeng Network Technology Co.,Ltd / dreamhax", "Pixels 246-in-1 Game Player (DH-628)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) -// Plays intro music but then crashes. same hardware as SY-88x but uses more features -CONS( 2016, mog_m320, pixel246, 0, vt36x_8mb, vt369, vt36x_state, empty_init, "MOGIS", "MOGIS M320 246 in 1 Handheld", MACHINE_NOT_WORKING ) +// both of these access a protection device (same as lxcap but on a different port?) but only mog_m320 cares about the result? +CONS( 201?, pixel246, 0, 0, vt36x_8mb_pixel, vt369, vt36x_tetrtin_state, empty_init, "Shanghai Weimeng Network Technology Co.,Ltd / dreamhax", "Pixels 246-in-1 Game Player (DH-628)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) +CONS( 2016, mog_m320, pixel246, 0, vt36x_8mb_pixel, vt369, vt36x_tetrtin_state, empty_init, "MOGIS", "MOGIS M320 246 in 1 Handheld", MACHINE_NOT_WORKING ) // VT369, but doesn't use most features CONS( 200?, lpgm240, 0, 0, vt36x_swap_8mb, vt369, vt36x_state, empty_init, "<unknown>", "Let's Play! Game Machine 240 in 1", MACHINE_NOT_WORKING ) // mini 'retro-arcade' style cabinet @@ -1715,10 +1892,17 @@ CONS( 202?, 168pcase, 0, 0, vt36x_4mb, vt369, vt36x_state, empty_init, "<u // uses a LCD with resolution of 160x128 (image scaled to fit for some games, others run natively at 160x128) // contains a protection chip, command 80 XX returns a byte -CONS( 201?, lxcap, 0, 0, vt36x_8mb, vt369, vt36x_tetrtin_state, empty_init, "Lexibook", "Cyber Arcade Pocket (JL1895)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) +// game 13 (Powerpul Girl) has entirely broken graphics even on the real device +CONS( 201?, lxcap, 0, 0, vt36x_8mb_lxcap, vt369, vt36x_tetrtin_state, empty_init, "Lexibook", "Cyber Arcade Pocket (JL1895)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) + +// seems to be running the NES version of Pac-Man with some extra splash screens, has extra protection +// (protection is the same as lxcap) +CONS( 2021, pactin, 0, 0, vt36x_1mb_tetrtin, vt369, vt36x_tetrtin_state, empty_init, "Fizz Creations", "Pac-Man Arcade in a Tin", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) +// (protection is the same as lxcap) +CONS( 2021, tetrtin, 0, 0, vt36x_1mb_tetrtin, vt369, vt36x_tetrtin_state, empty_init, "Fizz Creations", "Tetris Arcade in a Tin", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) // 2022 date on 'BL-867 PCB03' PCB, has extra protection? -CONS( 2022, nesvt270, 0, 0, vt36x_16mb, vt369, vt36x_state, empty_init, "<unknown>", "unknown VT3xx based 270-in-1 (BL-867 PCB03)", MACHINE_NOT_WORKING ) +CONS( 2022, nesvt270, 0, 0, vt36x_16mb_nesvt270, vt369, vt36x_tetrtin_state, empty_init, "<unknown>", "unknown VT3xx based 270-in-1 (BL-867 PCB03)", MACHINE_NOT_WORKING ) // VT369, but doesn't use most features CONS( 201?, myarccn, 0, 0, vt36x_1mb, vt369, vt36x_state, empty_init, "dreamGEAR", "My Arcade Caveman Ninja", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) @@ -1728,12 +1912,7 @@ CONS( 201?, denv150, 0, 0, vt36x_8mb, vt369, vt36x_state, empty_init, CONS( 201?, egame150, denv150, 0, vt36x_swap_8mb, vt369, vt36x_state, empty_init, "<unknown>", "E-Game! 150-in-1", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) // uncertain, uses SPI ROM so probably VT369, has extra protection? (but RAM test goes up to 0x2000, over the internal ROM area?) -CONS( 2017, otrail, 0, 0, vt36x_1mb, vt369, vt36x_state, empty_init, "Basic Fun", "The Oregon Trail", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) - -// seems to be running the NES version of Pac-Man with some extra splash screens, has extra protection -CONS( 2021, pactin, 0, 0, vt36x_1mb, vt369, vt36x_tetrtin_state, empty_init, "Fizz Creations", "Pac-Man Arcade in a Tin", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) -// has extra protection -CONS( 2021, tetrtin, 0, 0, vt36x_1mb, vt369, vt36x_tetrtin_state, empty_init, "Fizz Creations", "Tetris Arcade in a Tin", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) +CONS( 2017, otrail, 0, 0, vt36x_1mb_otrail, vt369, vt36x_otrail_state, empty_init, "Basic Fun", "The Oregon Trail", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) // uses a low res display (so vt3xx?) CONS( 2021, matet10, 0, 0, vt36x_swap_2mb, vt369, vt36x_state, empty_init, "dreamGEAR", "My Arcade Tetris (DGUNL-7083, Pixel Pocket, with 10 bonus games)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) @@ -1775,8 +1954,9 @@ CONS( 202?, unk198vt, 0, 0, vt36x_8mb, vt369, vt36x_state, empty_init, // has extra protection (using ports at 4138 / 4139, copied to 0x701) CONS( 2018, rbbrite, 0, 0, vt36x_1mb_rbbrite, vt369, vt36x_goretrop_state, empty_init, "Coleco", "Rainbow Brite (mini-arcade)", MACHINE_NOT_WORKING ) -// there's also a 250+ version of the unit below at least // has extra protection (using ports at 4138 / 4139, copied to 0x701) CONS( 2018, goretrop, 0, 0, vt36x_32mb_goretrop, vt369, vt36x_goretrop_state, empty_init, "Retro-Bit", "Go Retro Portable 260+ Games", MACHINE_NOT_WORKING ) CONS( 2018, goretropa, goretrop, 0, vt36x_32mb_goretrop, vt369, vt36x_goretrop_state, empty_init, "Retro-Bit", "Go Retro Portable 260+ Games (older)", MACHINE_NOT_WORKING ) // doesn't have commando or higemaru - +// these US versions have 1.2 and 1.3 printed on the packaging +CONS( 2018, goretropu13,goretrop, 0, vt36x_32mb_goretrop, vt369, vt36x_goretrop_state, empty_init, "Retro-Bit", "Go Retro Portable 250+ Games (US, V1.3)", MACHINE_NOT_WORKING ) +CONS( 2018, goretropu12,goretrop, 0, vt36x_32mb_goretrop, vt369, vt36x_goretrop_state, empty_init, "Retro-Bit", "Go Retro Portable 250+ Games (US, V1.2)", MACHINE_NOT_WORKING ) |
