summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mame/igs/igs_m027.cpp14
-rw-r--r--src/mame/igs/igs_m027_link.cpp140
-rw-r--r--src/mame/igs/igs_m027xa.cpp2
-rw-r--r--src/mame/seibu/seibuspi.cpp1
4 files changed, 138 insertions, 19 deletions
diff --git a/src/mame/igs/igs_m027.cpp b/src/mame/igs/igs_m027.cpp
index a14fdad9ea5..b7677cc3500 100644
--- a/src/mame/igs/igs_m027.cpp
+++ b/src/mame/igs/igs_m027.cpp
@@ -583,7 +583,7 @@ ROM_END
ROM_START( oceanpar ) // IGS PCB-0331-02-FG
ROM_REGION( 0x04000, "maincpu", 0 )
// Internal ROM of IGS027A type G ARM based MCU
- ROM_LOAD( "oceanpar_igs027a", 0x00000, 0x4000, NO_DUMP )
+ ROM_LOAD( "oceanpar_igs027a", 0x00000, 0x4000, NO_DUMP ) // possibly B1
ROM_REGION32_LE( 0x80000, "user1", 0 ) // external ARM data / prg
ROM_LOAD( "ocean_paradise_v105us.u23", 0x00000, 0x80000, CRC(e6eb66c3) SHA1(f6c1e31ccddc8ebb8218f52b5c0d97f0797b2e84) )
@@ -601,7 +601,7 @@ ROM_END
ROM_START( oceanpara ) // IGS PCB-0331-01-FG
ROM_REGION( 0x04000, "maincpu", 0 )
// Internal ROM of IGS027A type G ARM based MCU
- ROM_LOAD( "oceanpara_igs027a", 0x00000, 0x4000, NO_DUMP )
+ ROM_LOAD( "b1_igs027a", 0x00000, 0x4000, NO_DUMP ) // stickered B1
ROM_REGION32_LE( 0x80000, "user1", 0 ) // external ARM data / prg
ROM_LOAD( "ocean_paradise_v101us.u23", 0x00000, 0x80000, CRC(4f2bf87a) SHA1(559c8728632336ba84f455ac22b6e514967c644b) )
@@ -620,7 +620,7 @@ ROM_END
ROM_START( luckycrs )
ROM_REGION( 0x04000, "maincpu", 0 )
// Internal ROM of IGS027A type G ARM based MCU
- ROM_LOAD( "luckycrs_igs027a", 0x00000, 0x4000, NO_DUMP ) // stickered V21
+ ROM_LOAD( "v21_igs027a", 0x00000, 0x4000, NO_DUMP ) // stickered V21
ROM_REGION32_LE( 0x80000, "user1", 0 ) // external ARM data / prg
ROM_LOAD( "luckycross_v-106sa.u23", 0x00000, 0x80000, CRC(5716de00) SHA1(ff68fa93c6801c78f910452c08c5a9c1a089261d) ) // 27C4002
@@ -709,7 +709,7 @@ Sound Processor ( U6295 )
ROM_START( amazoni2 )
ROM_REGION( 0x04000, "maincpu", 0 )
// Internal ROM of IGS027A ARM based MCU
- ROM_LOAD( "sdwx_igs027a", 0x00000, 0x4000, NO_DUMP )
+ ROM_LOAD( "p9_igs027a", 0x00000, 0x4000, NO_DUMP ) // stamped P9
ROM_REGION32_LE( 0x80000, "user1", 0 ) // external ARM data / prg
ROM_LOAD( "27c4096_akii_b-202br.u23", 0x000000, 0x80000, CRC(7147b43c) SHA1(29a4a20867595650918c4ab892ddb71440bd3f4b) )
@@ -765,7 +765,7 @@ ROM_END
ROM_START( olympic5a )
ROM_REGION( 0x04000, "maincpu", 0 )
// Internal ROM of IGS027A type G ARM based MCU
- ROM_LOAD( "o2_igs027a", 0x00000, 0x4000, NO_DUMP ) // stickered O2
+ ROM_LOAD( "o2_igs027a", 0x00000, 0x4000, NO_DUMP ) // stickered O2?
ROM_REGION32_LE( 0x80000, "user1", 0 ) // external ARM data / prg
ROM_LOAD( "olympic_5_v-107us.u23", 0x00000, 0x80000, CRC(3bcd4dd9) SHA1(08e49d9a5045e52a7eb60113f0c7ed25b30474c2) ) // MX27C4096
@@ -1226,7 +1226,7 @@ V3021 - Micro Electronic Ultra Low Power 1-Bit 32kHz RTC (Real Time Clock)
SW4 - Toggle switch
JP11 - 4 Pin header (HD4-156)
-IGS 025 - Custom programmed A8B1723(?)
+IGS 025 - Custom programmed A8B1723(?) - stickered S1
IGS 0027 - Custom programmed ARM9
*/
@@ -1234,7 +1234,7 @@ IGS 0027 - Custom programmed ARM9
ROM_START( chessc2 )
ROM_REGION( 0x04000, "maincpu", 0 )
// Internal ROM of IGS027A ARM based MCU
- ROM_LOAD( "chessc2_igs027a", 0x00000, 0x4000, NO_DUMP ) // unknown sticker
+ ROM_LOAD( "c8_igs027a", 0x00000, 0x4000, NO_DUMP ) // stickered C8
ROM_REGION32_LE( 0x80000, "user1", 0 ) // external ARM data / prg
ROM_LOAD( "ccii_v-707uso.u12", 0x000000, 0x80000, CRC(5937b67b) SHA1(967b3adf6f5bf92d63ec460d595e473898a78372) )
diff --git a/src/mame/igs/igs_m027_link.cpp b/src/mame/igs/igs_m027_link.cpp
index 21d8abe9559..f99318d5755 100644
--- a/src/mame/igs/igs_m027_link.cpp
+++ b/src/mame/igs/igs_m027_link.cpp
@@ -3,7 +3,10 @@
/*
IGS ARM7 (IGS027A) based mahjong / gambling platform(s) with link support
-Keeping them separate from igs_m027.cpp for now.
+Keeping them separate from igs_m027.cpp and igs017.cpp for now.
+
+NOTE: linking between mgcsh and mgcsl has been verified on real hw, while linking
+between cjslh and cjsll doesn't work on real hw for some reason.
*********************************************************************************
@@ -121,6 +124,7 @@ Notes:
#include "cpu/arm7/arm7.h"
#include "cpu/arm7/arm7core.h"
#include "cpu/m68000/m68000.h"
+#include "machine/i8255.h"
#include "machine/nvram.h"
#include "machine/timer.h"
#include "sound/okim6295.h"
@@ -157,7 +161,10 @@ public:
m_screen(*this, "screen")
{ }
- void extension(machine_config &config);
+ void cjsll(machine_config &config);
+ void mgcsl(machine_config &config);
+
+ void init_mgcsl();
protected:
virtual void video_start() override;
@@ -167,7 +174,10 @@ private:
required_device<igs017_igs031_device> m_igs017_igs031;
required_device<screen_device> m_screen;
- void extension_map(address_map &map);
+ TIMER_DEVICE_CALLBACK_MEMBER(interrupt);
+
+ void cjsll_map(address_map &map);
+ void mgcsl_map(address_map &map);
};
@@ -183,9 +193,44 @@ void host_state::host_map(address_map &map)
map(0x08000000, 0x0800ffff).rom().region("user1", 0); // Game ROM (does it really map here? it appears to be connected indirectly via the 025)
}
-void extension_state::extension_map(address_map &map)
+void extension_state::cjsll_map(address_map &map)
{
map(0x000000, 0x07ffff).rom();
+ map(0x600000, 0x603fff).ram();
+
+ // TODO: IGS025? Almost same read writes also seem to happen at 0xd40000-0xd40003
+ //map(0x876000, 0x876001).nopr().w(m_igs_mux, FUNC(igs_mux_device::address_w)).umask16(0x00ff); // clr.w dummy read
+ //map(0x876002, 0x876003).rw(m_igs_mux, FUNC(igs_mux_device::data_r), FUNC(igs_mux_device::data_w)).umask16(0x00ff);
+
+ map(0xa00000, 0xa0ffff).rw(m_igs017_igs031, FUNC(igs017_igs031_device::read), FUNC(igs017_igs031_device::write)).umask16(0x00ff);
+
+ //map(0xa12001, 0xa12001).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
+}
+
+void extension_state::mgcsl_map(address_map &map)
+{
+ map(0x000000, 0x07ffff).rom();
+ map(0x600000, 0x603fff).ram();
+
+ // TODO: IGS025? Almost same read writes also seem to happen at 0x130000-0x130003
+ //map(0x893000, 0x893001).nopr().w(m_igs_mux, FUNC(igs_mux_device::address_w)).umask16(0x00ff); // clr.w dummy read
+ //map(0x893002, 0x893003).rw(m_igs_mux, FUNC(igs_mux_device::data_r), FUNC(igs_mux_device::data_w)).umask16(0x00ff);
+
+ map(0xa00000, 0xa0ffff).rw(m_igs017_igs031, FUNC(igs017_igs031_device::read), FUNC(igs017_igs031_device::write)).umask16(0x00ff);
+
+ //map(0xa12001, 0xa12001).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
+}
+
+
+TIMER_DEVICE_CALLBACK_MEMBER(extension_state::interrupt)
+{
+ int scanline = param;
+
+ if (scanline == 240 && m_igs017_igs031->get_irq_enable())
+ m_maincpu->set_input_line(1, HOLD_LINE);
+
+ if (scanline == 0 && m_igs017_igs031->get_nmi_enable())
+ m_maincpu->set_input_line(3, HOLD_LINE);
}
@@ -274,10 +319,12 @@ void host_state::host(machine_config &config)
IGS025(config, "igs025", 0);
}
-void extension_state::extension(machine_config &config)
+void extension_state::cjsll(machine_config &config)
{
M68000(config, m_maincpu, 22_MHz_XTAL / 2);
- m_maincpu->set_addrmap(AS_PROGRAM, &extension_state::extension_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &extension_state::cjsll_map);
+
+ TIMER(config, "scantimer").configure_scanline(FUNC(extension_state::interrupt), "screen", 0, 1);
// NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
@@ -291,20 +338,29 @@ void extension_state::extension(machine_config &config)
IGS025(config, "igs025", 0);
+ I8255A(config, "ppi");
+
IGS017_IGS031(config, m_igs017_igs031, 0);
m_igs017_igs031->set_text_reverse_bits();
- m_igs017_igs031->set_i8255_tag("ppi8255");
+ m_igs017_igs031->set_i8255_tag("ppi");
SPEAKER(config, "mono").front_center();
OKIM6295(config, "oki", 22_MHz_XTAL / 22, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.5);
}
+void extension_state::mgcsl(machine_config &config)
+{
+ cjsll(config),
+
+ m_maincpu->set_addrmap(AS_PROGRAM, &extension_state::mgcsl_map);
+}
+
ROM_START( mgcsh )
ROM_REGION( 0x04000, "maincpu", 0 )
// Internal ROM of IGS027A type G ARM based MCU
- ROM_LOAD( "y7_027a.bin", 0x00000, 0x4000, CRC(3e726eeb) SHA1(41b4e5f8a9d35b82b1a62029b34c1e19e188a3bc) )
+ ROM_LOAD( "y7_027a.bin", 0x00000, 0x4000, CRC(3e726eeb) SHA1(41b4e5f8a9d35b82b1a62029b34c1e19e188a3bc) )
ROM_REGION32_LE( 0x10000, "user1", 0 ) // external ARM data / prg
ROM_LOAD( "v206cmmbox.u13", 0x00000, 0x10000, CRC(2bfdeeeb) SHA1(c92f8994f75e0eefb4dbf25daa0d62ad72a7ddfa) )
@@ -313,7 +369,7 @@ ROM_END
ROM_START( cjslh )
ROM_REGION( 0x04000, "maincpu", 0 )
// Internal ROM of IGS027A type G ARM based MCU
- ROM_LOAD( "s2_027a.bin", 0x00000, 0x4000, CRC(6be397fd) SHA1(ccd2469995a0b90800e891c39f4b3eaa033783ec) )
+ ROM_LOAD( "s2_027a.bin", 0x00000, 0x4000, CRC(6be397fd) SHA1(ccd2469995a0b90800e891c39f4b3eaa033783ec) )
ROM_REGION32_LE( 0x10000, "user1", 0 ) // external ARM data / prg
ROM_LOAD( "v-106csm.u13", 0x00000, 0x10000, CRC(5b3f3446) SHA1(1d5b9523ac7f221eb7cc2e5db90cc859c640cc18) )
@@ -347,6 +403,68 @@ ROM_START( cjsll )
ROM_LOAD( "s2002.u22", 0x00000, 0x80000, CRC(9070c8ee) SHA1(43852ae1891b4d6c00a6fbe6a822e49d9e97ee97) )
ROM_END
+
+// TODO: reduce this monstrosity
+void extension_state::init_mgcsl()
+{
+ const int rom_size = memregion("maincpu")->bytes();
+ u16 * const rom = (u16 *)memregion("maincpu")->base();
+
+ for (int i = 0; i < rom_size / 2; i++)
+ {
+ u16 x = rom[i];
+
+ switch (i & 0x5000 / 2)
+ {
+ case 0x0000 / 2:
+ if (!(i & 0x0300 / 2))
+ {
+ if (!(i & 0x0002 / 2))
+ x ^= 0x0001;
+ else
+ if (!(i & 0x0020 / 2))
+ x ^= 0x0001;
+ }
+ else
+ if ((i & 0x0022 / 2) == (0x0022 / 2))
+ x ^= 0x0001;
+ break;
+ case 0x1000 / 2:
+ if (i & 0x300 / 2)
+ {
+ if ((i & 0x0022 / 2) == (0x0022 / 2))
+ x ^= 0x0001;
+ }
+ else
+ {
+ if ((i & 0x0022 / 2) != (0x0022 / 2))
+ x ^= 0x0001;
+ }
+ break;
+ case 0x4000 / 2:
+ case 0x5000 / 2: if ((i & 0x0022 / 2) == (0x0022 / 2)) x ^= 0x0001; break;
+ }
+
+ switch (i & 0x6000 / 2)
+ {
+ case 0x0000 / 2: if ((i & 0x280 / 2) == (0x280 / 2)) x ^= 0x0800; break;
+ case 0x2000 / 2: if ((!(i & 0x800 / 2)) && ((i & 0x2c0 / 2) == (0x2c0 / 2))) x ^= 0x0800; break;
+ case 0x4000 / 2: x ^= 0x0800; break;
+ case 0x6000 / 2: if ((!(i & 0x800 / 2)) && (i & 0x40 / 2)) x ^= 0x0800; break;
+ }
+
+ if (i & 0x60000 / 2)
+ x ^= 0x0100;
+
+ rom[i] = x;
+ }
+
+ // TODO: tiles don't seem scrambled, sprites to be verified
+
+ // game id check
+ rom[0x3a48e / 2] = 0x4e71;
+}
+
} // anonymous namespace
@@ -355,5 +473,5 @@ GAME( 1999, mgcsh, 0, host, host, host_state, empty_init, ROT0, "IGS", "Manguan
GAME( 1999, cjslh, 0, host, host, host_state, empty_init, ROT0, "IGS", "Cai Jin Shen Long (link version, host)", MACHINE_IS_SKELETON )
// extensions
-GAME( 1999, mgcsl, 0, extension, extension, extension_state, empty_init, ROT0, "IGS", "Manguan Caishen (link version, extension)", MACHINE_IS_SKELETON )
-GAME( 1999, cjsll, 0, extension, extension, extension_state, empty_init, ROT0, "IGS", "Cai Jin Shen Long (link version, extension)", MACHINE_IS_SKELETON )
+GAME( 1999, mgcsl, 0, mgcsl, extension, extension_state, init_mgcsl, ROT0, "IGS", "Manguan Caishen (link version, extension, S110CN)", MACHINE_IS_SKELETON )
+GAME( 1999, cjsll, 0, cjsll, extension, extension_state, init_mgcsl, ROT0, "IGS", "Cai Jin Shen Long (link version, extension, S111CN)", MACHINE_IS_SKELETON )
diff --git a/src/mame/igs/igs_m027xa.cpp b/src/mame/igs/igs_m027xa.cpp
index 70dc972ec9c..25040d2a967 100644
--- a/src/mame/igs/igs_m027xa.cpp
+++ b/src/mame/igs/igs_m027xa.cpp
@@ -205,7 +205,7 @@ ROM_END
ROM_START( haunthiga ) // IGS PCB-0575-04-HU - Has IGS027A, MX10EXAQC, IGS031, Oki M6295, 2x 8-dip banks
ROM_REGION( 0x04000, "maincpu", 0 )
// Internal ROM of IGS027A ARM based MCU
- ROM_LOAD( "haunthig_igs027a", 0x00000, 0x4000, NO_DUMP ) // sticker marked 'H2'
+ ROM_LOAD( "h2_igs027a", 0x00000, 0x4000, NO_DUMP ) // sticker marked 'H2'
ROM_REGION32_LE( 0x80000, "user1", 0 ) // external ARM data / prg
ROM_LOAD( "hauntedhouse_ver-101us.u34", 0x000000, 0x80000, CRC(4bf045d4) SHA1(78c848fd69961df8d9b75f92ad57c3534fbf08db) )
diff --git a/src/mame/seibu/seibuspi.cpp b/src/mame/seibu/seibuspi.cpp
index 27fcb92eaf4..4e3415828b4 100644
--- a/src/mame/seibu/seibuspi.cpp
+++ b/src/mame/seibu/seibuspi.cpp
@@ -556,6 +556,7 @@ Notes:
* : These ROMs are surface mounted
61256 : 32k x8 SRAM (x2)
RISE11: SEIBU custom stamped 'RISE11' (QFP240)
+ A11-A14 are tied to vcc/gnd so the RAM connected to the RISE11 is configured as 2kB.
PAL1 : PALCE 16V8 stamped 'SPI ROM 10-2'
PAL2 : PALCE 16V8 stamped 'SPI ROM 10-1'