summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author DavidHaywood <28625134+DavidHaywood@users.noreply.github.com>2020-09-29 23:26:59 +0100
committer DavidHaywood <28625134+DavidHaywood@users.noreply.github.com>2020-09-29 23:26:59 +0100
commit30cac51f50470286d7b85ff4ebd00c79e5c4b4a8 (patch)
treed902eaa2f43cf95c8ec6cd41f879f00e01fbcf62
parentff4f63b8d735a273a92816f868c05d952a575a7d (diff)
machines promoted to WORKING
----- Konami Collector's Series Arcade Advanced [David Haywood]
-rw-r--r--src/mame/drivers/nes_vt.cpp32
-rw-r--r--src/mame/machine/nes_vt_soc.cpp19
2 files changed, 34 insertions, 17 deletions
diff --git a/src/mame/drivers/nes_vt.cpp b/src/mame/drivers/nes_vt.cpp
index 02b79c11f1d..324ec787eee 100644
--- a/src/mame/drivers/nes_vt.cpp
+++ b/src/mame/drivers/nes_vt.cpp
@@ -124,6 +124,9 @@ public:
void vt_external_space_map_1mbyte(address_map& map);
void vt_external_space_map_512kbyte(address_map& map);
+ void nes_vt_1mb_majkon(machine_config& config);
+ void vt_external_space_map_1mbyte_majkon(address_map& map);
+
void init_protpp();
protected:
@@ -368,8 +371,6 @@ public:
void nes_vt_vg_8mb(machine_config& config);
void nes_vt_vg_16mb(machine_config& config);
-
- void nes_vt_vg_1mb_majkon(machine_config& config);
void nes_vt_fp(machine_config& config);
void nes_vt_fp_16mb(machine_config& config);
void nes_vt_fp_32mb(machine_config& config);
@@ -481,6 +482,12 @@ void nes_vt_swap_op_d5_d6_state::vt_external_space_map_senwld_512kbyte(address_m
map(0x0180000, 0x01fffff).r(FUNC(nes_vt_swap_op_d5_d6_state::vt_rom_r));
}
+void nes_vt_state::vt_external_space_map_1mbyte_majkon(address_map &map)
+{
+ map(0x0000000, 0x00fffff).mirror(0x1f00000).r(FUNC(nes_vt_state::vt_rom_r));
+ map(0x1400000, 0x1401fff).ram(); // rush'n attack writes to chr space, after setting the program and character outer bank to a mirror, is the correct way to handle it?
+}
+
// bitboy is 2 16Mbyte banks
uint8_t nes_vt_cy_state::vt_rom_banked_r(offs_t offset)
{
@@ -1117,13 +1124,6 @@ void nes_vt_hh_state::nes_vt_vg_16mb(machine_config& config)
m_soc->set_addrmap(AS_PROGRAM, &nes_vt_hh_state::vt_external_space_map_16mbyte);
}
-void nes_vt_hh_state::nes_vt_vg_1mb_majkon(machine_config &config)
-{
- nes_vt_dg(config);
- m_soc->set_addrmap(AS_PROGRAM, &nes_vt_hh_state::vt_external_space_map_1mbyte);
- m_soc->force_raster_timing_hack();
-}
-
// New mystery handheld architecture, VTxx derived
void nes_vt_hh_state::nes_vt_hh(machine_config &config)
@@ -1159,6 +1159,16 @@ void nes_vt_hh_state::nes_vt_hh_4mb(machine_config& config)
m_soc->set_addrmap(AS_PROGRAM, &nes_vt_hh_state::vt_external_space_map_4mbyte);
}
+
+void nes_vt_state::nes_vt_1mb_majkon(machine_config& config)
+{
+ NES_VT_SOC(config, m_soc, NTSC_APU_CLOCK);
+ configure_soc(m_soc);
+ m_soc->set_addrmap(AS_PROGRAM, &nes_vt_state::vt_external_space_map_1mbyte_majkon);
+ m_soc->force_raster_timing_hack();
+}
+
+
static INPUT_PORTS_START( nes_vt )
PORT_START("IO0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("A")
@@ -2190,7 +2200,7 @@ CONS( 2005, ablpinb, 0, 0, nes_vt_pal_2mb, ablpinb, nes_vt_ablpinb_state, e
CONS( 2004, sporzpp, 0, 0, nes_vt_waixing_alt_4mb_sporzpp, sporzpp, nes_vt_waixing_alt_sporzpp_state, empty_init, "Macro Winners", "Game Sporz Wireless Duet Play Ping-Pong", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
// has some longer than expected delays when sounds should play on the Boxing part, but NES hacks are all functional
CONS( 2004, sporzbx, 0, 0, nes_vt_waixing_alt_4mb_sporzpp, sporzpp, nes_vt_waixing_alt_sporzpp_state, empty_init, "Macro Winners", "Game Sporz Wireless Boxing", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
-// has some longer than expected delays when sounds should play on the Tennis part, but NES hacks are all functional
+// has some longer than expected delays when sounds should play on the Tennis part, but NES hacks are all functional, US version is sold in DreamGear branded box.
CONS( 2004, sporztn, 0, 0, nes_vt_pal_4mb, sporzpp, nes_vt_wldsoctv_state, empty_init, "Macro Winners (Play Vision license)", "Wireless Tennis (PAL, Play Vision)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
// missing PCM audio, but regular APU SFX work
CONS( 200?, wldsoctv, 0, 0, nes_vt_pal_4mb, nes_vt, nes_vt_wldsoctv_state, empty_init, "Taikee", "World Soccer TV Game 10-in-1 (PAL)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
@@ -2204,7 +2214,7 @@ CONS( 200?, mc_dgear, 0, 0, nes_vt_4mb, nes_vt, nes_vt_state, empty_init,
// all games work OK except Frogger which has serious graphical issues
CONS( 2006, vgtablet, 0, 0, nes_vt_vg_4mb_rasterhack, nes_vt, nes_vt_hh_state, empty_init, "Performance Designed Products (licensed by Konami)", "VG Pocket Tablet (VG-4000)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // raster timing for Frogger needs a hack
// There is a 2004 Majesco Frogger "TV game" that appears to contain the same version of Frogger as above but with no other games, so probably fits here.
-CONS( 2004, majkon, 0, 0, nes_vt_vg_1mb_majkon, nes_vt, nes_vt_hh_state, empty_init, "Majesco (licensed from Konami)", "Konami Collector's Series Arcade Advanced", MACHINE_NOT_WORKING ) // raster timing for Frogger needs a hack, Green Beret has other serious issues
+CONS( 2004, majkon, 0, 0, nes_vt_1mb_majkon, nes_vt, nes_vt_state, empty_init, "Majesco (licensed from Konami)", "Konami Collector's Series Arcade Advanced", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // raster timing for Frogger needs a hack, Rush'n Attack also has raster timing issues on the status bar split
CONS( 200?, majgnc, 0, 0, nes_vt_vg_1mb_majgnc, majgnc, nes_vt_vg_1mb_majgnc_state, empty_init, "Majesco", "Golden Nugget Casino", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
diff --git a/src/mame/machine/nes_vt_soc.cpp b/src/mame/machine/nes_vt_soc.cpp
index 84bffe4c4ba..f3ee35252ff 100644
--- a/src/mame/machine/nes_vt_soc.cpp
+++ b/src/mame/machine/nes_vt_soc.cpp
@@ -473,7 +473,7 @@ uint8_t nes_vt_soc_device::spr_r(offs_t offset)
uint8_t nes_vt_soc_device::chr_r(offs_t offset)
{
- if (m_4242 & 0x1 || m_411d & 0x04)
+ if (m_4242 & 0x1 || m_411d & 0x04) // newer VT platforms only (not VT03/09), split out
{
return m_chrram[offset];
}
@@ -489,11 +489,18 @@ uint8_t nes_vt_soc_device::chr_r(offs_t offset)
void nes_vt_soc_device::chr_w(offs_t offset, uint8_t data)
{
- if (m_4242 & 0x1 || m_411d & 0x04)
+ if (m_4242 & 0x1 || m_411d & 0x04) // newer VT platforms only (not VT03/09), split out
{
logerror("vram write %04x %02x\n", offset, data);
m_chrram[offset] = data;
}
+ else
+ {
+ int realaddr = calculate_real_video_address(offset, 1, 0);
+
+ address_space& spc = this->space(AS_PROGRAM);
+ return spc.write_byte(realaddr, data);
+ }
}
@@ -775,7 +782,7 @@ void nes_vt_soc_device::scrambled_8000_w(uint16_t offset, uint8_t data)
offset &= 0x7fff;
uint16_t addr = offset+0x8000;
- if ((m_411d & 0x01) && (m_411d & 0x03))
+ if ((m_411d & 0x01) && (m_411d & 0x03)) // this condition is nonsense, maybe should be ((m_411d & 0x03) == 0x03) check it! (newer VT only, not VT03/09, split)
{
//CNROM compat
logerror("%s: vtxx_cnrom_8000_w real address: (%04x) translated address: (%04x) %02x\n", machine().describe_context(), addr, offset + 0x8000, data);
@@ -787,13 +794,13 @@ void nes_vt_soc_device::scrambled_8000_w(uint16_t offset, uint8_t data)
m_ppu->set_201x_reg(0x5, data * 8 + 7);
}
- else if (m_411d & 0x01)
+ else if (m_411d & 0x01) // (newer VT only, not VT03/09, split)
{
//MMC1 compat, TODO
logerror("%s: vtxx_mmc1_8000_w real address: (%04x) translated address: (%04x) %02x\n", machine().describe_context(), addr, offset + 0x8000, data);
}
- else if (m_411d & 0x02)
+ else if (m_411d & 0x02) // (newer VT only, not VT03/09, split)
{
//UNROM compat
logerror("%s: vtxx_unrom_8000_w real address: (%04x) translated address: (%04x) %02x\n", machine().describe_context(), addr, offset + 0x8000, data);
@@ -802,7 +809,7 @@ void nes_vt_soc_device::scrambled_8000_w(uint16_t offset, uint8_t data)
m_410x[0x8] = ((data & 0x0F) << 1) + 1;
update_banks();
}
- else
+ else // standard mode (VT03/09)
{
//logerror("%s: vtxx_mmc3_8000_w real address: (%04x) translated address: (%04x) %02x\n", machine().describe_context(), addr, offset+0x8000, data );