summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/jalmah.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/jalmah.cpp')
-rw-r--r--src/mame/drivers/jalmah.cpp476
1 files changed, 223 insertions, 253 deletions
diff --git a/src/mame/drivers/jalmah.cpp b/src/mame/drivers/jalmah.cpp
index 5c061f23d88..c942277f2ae 100644
--- a/src/mame/drivers/jalmah.cpp
+++ b/src/mame/drivers/jalmah.cpp
@@ -22,22 +22,17 @@ Notes(general):
TODO:
- kakumei2: unemulated RNG;
-- Back layer pens looks ugly in some circumstances (i.e. suchiesp when you win, mjzoomin when coined up),
- static or controlled by something else?
- daireika: the ranking screen on the original pcb shows some hearts instead of the "0".
Some investigation indicates that the game reads area "fe100" onwards for these to be filled.
These are likely to be provided by one of the mcu snippets...
- kakumei/kakumei2: has weird text layer strings in test mode (like "#p control panel"),
unsure if this one is somehow related to the above daireika bug, it's a BTANB or something else.
-- Check if urashima has a "mode 3" for the layer 0 tilemap;
+- Check if urashima has a "mode 3" for the layer 0 tilemap (doesn't seem so);
- There could be timing issues caused by MCU simulation at $80004;
-- Fix the sound banking, protection-related for the first version of the MCU
- (should be somewhere on the work ram/shared ram)
+- Imperfect sound banking for 1st MCU version (especially noticeable for daireika);
- suchiesp: I need a side-by-side to understand if the PAL shuffling is correct with the OKI BGM ROM.
- urashima: doesn't use the mega system 1 tilemap devices, MCU might actually be responsible
for that too (cfr. notes).
-- Massive clean-ups needed for the MCU snippet programs and the input ports, also check if
- the programs are actually into the m68k program itself (like hachamf/tdragon/ddealer);
Notes (1st MCU ver.):
- $f000e is bogus,maybe the program snippets can modify this value,or the MCU itself can
@@ -51,7 +46,7 @@ Notes (1st MCU ver.):
BTW,the real HW is using a sort of bankswitch or I'm missing something?
- $f0020 is for the sound program,same for all games, for example mjzoomin hasn't any clear
write to $80040 area and the program jumps to $f0020 when there should be a sample.
-- Likewise, D0 upper byte is used but currently ignored.
+- Likewise, D0 upper byte is used, not 100% sure about its meaning (banking? voice channel control?).
============================================================================================
Debug cheats:
@@ -130,14 +125,20 @@ public:
: driver_device(mconfig, type, tag),
m_palette(*this, "palette"),
m_tmap(*this, "scroll%u", 0),
- m_jm_shared_ram(*this, "jshared_ram"),
- m_maincpu(*this, "maincpu")
+ m_sharedram(*this, "sharedram"),
+ m_maincpu(*this, "maincpu"),
+ m_prirom(*this, "prirom"),
+ m_p1_key_io(*this, "P1_KEY%u", 0U),
+ m_p2_key_io(*this, "P2_KEY%u", 0U),
+ m_okibank(*this, "okibank"),
+ m_system_io(*this, "SYSTEM"),
+ m_dsw_io(*this, "DSW")
{ }
DECLARE_WRITE8_MEMBER(tilebank_w);
- DECLARE_WRITE16_MEMBER(okirom_w);
- DECLARE_WRITE16_MEMBER(okibank_w);
- DECLARE_WRITE16_MEMBER(flip_screen_w);
+ DECLARE_WRITE8_MEMBER(okirom_w);
+ DECLARE_WRITE8_MEMBER(okibank_w);
+ DECLARE_WRITE8_MEMBER(flip_screen_w);
DECLARE_READ16_MEMBER(urashima_mcu_r);
DECLARE_WRITE16_MEMBER(urashima_mcu_w);
DECLARE_READ16_MEMBER(daireika_mcu_r);
@@ -163,7 +164,9 @@ public:
void jalmahv1(machine_config &config);
void jalmah_map(address_map &map);
void jalmahv1_map(address_map &map);
+ void oki_map(address_map &map);
protected:
+ virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
@@ -175,14 +178,17 @@ protected:
void mcu_check_test_mode();
private:
- required_shared_ptr<uint16_t> m_jm_shared_ram;
+ required_shared_ptr<uint16_t> m_sharedram;
required_device<cpu_device> m_maincpu;
-
- uint8_t m_sc0_prin;
- uint8_t m_sc1_prin;
- uint8_t m_sc2_prin;
- uint8_t m_sc3_prin;
-
+ optional_region_ptr<uint8_t> m_prirom;
+ required_ioport_array<3> m_p1_key_io;
+ optional_ioport_array<3> m_p2_key_io;
+ required_memory_bank m_okibank;
+ required_ioport m_system_io;
+ required_ioport m_dsw_io;
+ uint8_t m_layer_prin[4];
+ void mcu_fetch_input_polling(required_ioport_array <3> port, uint16_t workram_offset);
+
uint8_t m_mcu_prg;
int m_respcount;
uint8_t m_test_mode;
@@ -201,6 +207,7 @@ private:
SUCHIESP_MCU = 0x23
};
+ // base values for the MCU code snippets (arbitrary)
enum {
SNIPPET_PALETTE1 = 0x0000,
SNIPPET_SOUND = 0x0800,
@@ -230,7 +237,7 @@ public:
template<int TileChip> DECLARE_WRITE16_MEMBER(urashima_vram_w);
DECLARE_WRITE16_MEMBER(urashima_vreg_log_w);
- DECLARE_WRITE16_MEMBER(urashima_priority_w);
+ DECLARE_WRITE8_MEMBER(urashima_priority_w);
template<int TileChip> TILE_GET_INFO_MEMBER(get_tile_info_urashima);
@@ -315,23 +322,22 @@ priority = 8, then 4, 2 and finally 1).
***************************************************************************************/
void jalmah_state::refresh_priority_system()
{
- uint8_t *pri_rom = memregion("user1")->base();
- uint8_t i;
- uint8_t prinum[0x10];
+ uint8_t prinum;
+ int i;
- m_sc0_prin = 0;
- m_sc1_prin = 0;
- m_sc2_prin = 0;
- m_sc3_prin = 0;
+ // clear old priority buffer
+ for(i=0; i<4; i++)
+ m_layer_prin[i] = 0;
- for(i=0;i<0x10;i++)
+ // now read from the Priority PROM and hookup layer priority values accordingly
+ for(int i=0; i<0x10; i++)
{
- prinum[i] = pri_rom[i+m_pri*0x10];
+ prinum = m_prirom[i|(m_pri<<4)];
- if(prinum[i] == 0) { m_sc0_prin++; }
- if(prinum[i] == 1) { m_sc1_prin++; }
- if(prinum[i] == 2) { m_sc2_prin++; }
- if(prinum[i] == 3) { m_sc3_prin++; }
+ if(prinum == 0) { m_layer_prin[0]++; }
+ if(prinum == 1) { m_layer_prin[1]++; }
+ if(prinum == 2) { m_layer_prin[2]++; }
+ if(prinum == 3) { m_layer_prin[3]++; }
}
//popmessage("%02x %02x %02x %02x",m_sc0_prin,m_sc1_prin,m_sc2_prin,m_sc3_prin);
@@ -340,14 +346,18 @@ void jalmah_state::refresh_priority_system()
uint32_t jalmah_state::screen_update_jalmah(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
+ uint8_t cur_prin;
+ int layer_num;
+
bitmap.fill(m_palette->pen(0xff), cliprect); //selectable by a ram address?
- for(uint8_t cur_prin=1;cur_prin<=0x8;cur_prin<<=1)
+ for(cur_prin=1; cur_prin<=0x8; cur_prin<<=1)
{
- if(cur_prin==m_sc0_prin) { m_tmap[0]->draw(screen,bitmap,cliprect,0,0); }
- if(cur_prin==m_sc1_prin) { m_tmap[1]->draw(screen,bitmap,cliprect,0,0); }
- if(cur_prin==m_sc2_prin) { m_tmap[2]->draw(screen,bitmap,cliprect,0,0); }
- if(cur_prin==m_sc3_prin) { m_tmap[3]->draw(screen,bitmap,cliprect,0,0); }
+ for(layer_num=0; layer_num<4; layer_num++)
+ {
+ if(cur_prin == m_layer_prin[layer_num])
+ m_tmap[layer_num]->draw(screen,bitmap,cliprect,0,0);
+ }
}
return 0;
@@ -472,191 +482,129 @@ WRITE16_MEMBER(urashima_state::urashima_vreg_log_w)
logerror("Warning vreg write to [%04x] -> %04x\n",offset*2,data);
}
+WRITE8_MEMBER(urashima_state::urashima_priority_w)
+{
+ m_pri = data & 1;
+}
+
/******************************************************************************************
Protection file start
******************************************************************************************/
+#define MCU_READ(_ioport_, _bit_, _offset_, _retval_) \
+ if((0xffff - port[_ioport_]->read()) & _bit_) \
+ { m_sharedram[_offset_] = _retval_; } \
-#define MCU_READ(tag, _bit_, _offset_, _retval_) \
-if((0xffff - ioport(tag)->read()) & _bit_) { jm_shared_ram[_offset_] = _retval_; }
-WRITE16_MEMBER(urashima_state::urashima_priority_w)
+/* RAM-based protection handlings (input) */
+// TODO: unemulated polling mode for player 2 ingame, is it even used?
+// TODO: urashima (at least) reads upper byte of the workram buffer, perhaps for checking previous frame input
+// TODO: no idea about what RBSDTL inputs refers to in 1st MCU games. Doesn't help the different hookup ingame.
+void jalmah_state::mcu_fetch_input_polling(required_ioport_array <3> port, uint16_t workram_offset)
{
- m_pri = data & 1;
+ MCU_READ(1, 0x0001, workram_offset, 0x00); /*FF (correct?) */
+ MCU_READ(2, 0x0400, workram_offset, 0x01); /*A*/
+ MCU_READ(2, 0x1000, workram_offset, 0x02); /*B*/
+ MCU_READ(2, 0x0200, workram_offset, 0x03); /*C*/
+ MCU_READ(2, 0x0800, workram_offset, 0x04); /*D*/
+ MCU_READ(2, 0x0004, workram_offset, 0x05); /*E*/
+ MCU_READ(2, 0x0010, workram_offset, 0x06); /*F*/
+ MCU_READ(2, 0x0002, workram_offset, 0x07); /*G*/
+ MCU_READ(2, 0x0008, workram_offset, 0x08); /*H*/
+ MCU_READ(1, 0x0400, workram_offset, 0x09); /*I*/
+ MCU_READ(1, 0x1000, workram_offset, 0x0a); /*J*/
+ MCU_READ(1, 0x0200, workram_offset, 0x0b); /*K*/
+ MCU_READ(1, 0x0800, workram_offset, 0x0c); /*L*/
+ MCU_READ(1, 0x0004, workram_offset, 0x0d); /*M*/
+ MCU_READ(1, 0x0010, workram_offset, 0x0e); /*N*/
+ MCU_READ(0, 0x0200, workram_offset, 0x0f); /*RON */
+ MCU_READ(0, 0x1000, workram_offset, 0x10); /*REACH */
+ MCU_READ(0, 0x0400, workram_offset, 0x11); /*KAN */
+ MCU_READ(1, 0x0008, workram_offset, 0x12); /*PON */
+ MCU_READ(1, 0x0002, workram_offset, 0x13); /*CHI */
+ MCU_READ(0, 0x0004, workram_offset, 0x14); /*START1 */
+
}
-/*RAM-based protection handlings*/
void jalmah_state::daireika_mcu_run()
-{
- uint16_t *jm_shared_ram = m_jm_shared_ram;
-
+{
if(m_test_mode) //service_mode
{
- jm_shared_ram[0x000/2] = ioport("KEY0")->read();
- jm_shared_ram[0x002/2] = ioport("KEY1")->read();
- jm_shared_ram[0x004/2] = ioport("KEY2")->read();
- jm_shared_ram[0x006/2] = ioport("KEY3")->read();
- jm_shared_ram[0x008/2] = ioport("KEY4")->read();
- jm_shared_ram[0x00a/2] = ioport("KEY5")->read();
+ for(int keynum = 0; keynum < 3; keynum++)
+ {
+ m_sharedram[keynum+0] = m_p1_key_io[keynum]->read();
+ m_sharedram[keynum+3] = m_p2_key_io[keynum]->read();
+ }
}
else
{
- jm_shared_ram[0x000/2] = 0x0000;
- MCU_READ("KEY1", 0x0001, 0x000/2, 0x00); /*FF*/
- MCU_READ("KEY2", 0x0400, 0x000/2, 0x01); /*A*/
- MCU_READ("KEY2", 0x1000, 0x000/2, 0x02); /*B*/
- MCU_READ("KEY2", 0x0200, 0x000/2, 0x03); /*C*/
- MCU_READ("KEY2", 0x0800, 0x000/2, 0x04); /*D*/
- MCU_READ("KEY2", 0x0004, 0x000/2, 0x05); /*E*/
- MCU_READ("KEY2", 0x0010, 0x000/2, 0x06); /*F*/
- MCU_READ("KEY2", 0x0002, 0x000/2, 0x07); /*G*/
- MCU_READ("KEY2", 0x0008, 0x000/2, 0x08); /*H*/
- MCU_READ("KEY1", 0x0400, 0x000/2, 0x09); /*I*/
- MCU_READ("KEY1", 0x1000, 0x000/2, 0x0a); /*J*/
- MCU_READ("KEY1", 0x0200, 0x000/2, 0x0b); /*K*/
- MCU_READ("KEY1", 0x0800, 0x000/2, 0x0c); /*L*/
- MCU_READ("KEY1", 0x0004, 0x000/2, 0x0d); /*M*/
- MCU_READ("KEY1", 0x0010, 0x000/2, 0x0e); /*N*/
- MCU_READ("KEY0", 0x0200, 0x000/2, 0x0f); /*RON (trusted)*/
- MCU_READ("KEY0", 0x1000, 0x000/2, 0x10); /*REACH (trusted)*/
- MCU_READ("KEY0", 0x0400, 0x000/2, 0x11); /*KAN */
- MCU_READ("KEY1", 0x0008, 0x000/2, 0x12); /*PON */
- MCU_READ("KEY1", 0x0002, 0x000/2, 0x13); /*CHI (trusted)*/
- MCU_READ("KEY0", 0x0004, 0x000/2, 0x14); /*START1*/
+ m_sharedram[0x000/2] = 0x0000;
+ mcu_fetch_input_polling(m_p1_key_io, 0x000/2);
}
m_prg_prot++;
if(m_prg_prot > 0x10) { m_prg_prot = 0; }
- jm_shared_ram[0x00e/2] = m_prg_prot;
+ m_sharedram[0x00e/2] = m_prg_prot;
}
void jalmah_state::mjzoomin_mcu_run()
{
- uint16_t *jm_shared_ram = m_jm_shared_ram;
-
if(m_test_mode) //service_mode
{
- jm_shared_ram[0x000/2] = ioport("KEY0")->read();
- jm_shared_ram[0x002/2] = ioport("KEY1")->read();
- jm_shared_ram[0x004/2] = ioport("KEY2")->read();
- jm_shared_ram[0x006/2] = ioport("KEY3")->read();
- jm_shared_ram[0x008/2] = ioport("KEY4")->read();
- jm_shared_ram[0x00a/2] = ioport("KEY5")->read();
+ for(int keynum = 0; keynum < 3; keynum++)
+ {
+ m_sharedram[keynum+0] = m_p1_key_io[keynum]->read();
+ m_sharedram[keynum+3] = m_p2_key_io[keynum]->read();
+ }
}
else
{
- jm_shared_ram[0x000/2] = 0x0000;
- MCU_READ("KEY1", 0x0001, 0x000/2, 0x00); /*FF*/
- MCU_READ("KEY2", 0x0400, 0x000/2, 0x01); /*A*/
- MCU_READ("KEY2", 0x1000, 0x000/2, 0x02); /*B*/
- MCU_READ("KEY2", 0x0200, 0x000/2, 0x03); /*C*/
- MCU_READ("KEY2", 0x0800, 0x000/2, 0x04); /*D*/
- MCU_READ("KEY2", 0x0004, 0x000/2, 0x05); /*E*/
- MCU_READ("KEY2", 0x0010, 0x000/2, 0x06); /*F*/
- MCU_READ("KEY2", 0x0002, 0x000/2, 0x07); /*G*/
- MCU_READ("KEY2", 0x0008, 0x000/2, 0x08); /*H*/
- MCU_READ("KEY1", 0x0400, 0x000/2, 0x09); /*I*/
- MCU_READ("KEY1", 0x1000, 0x000/2, 0x0a); /*J*/
- MCU_READ("KEY1", 0x0200, 0x000/2, 0x0b); /*K*/
- MCU_READ("KEY1", 0x0800, 0x000/2, 0x0c); /*L*/
- MCU_READ("KEY1", 0x0004, 0x000/2, 0x0d); /*M*/
- MCU_READ("KEY1", 0x0010, 0x000/2, 0x0e); /*N*/
- MCU_READ("KEY0", 0x0200, 0x000/2, 0x0f); /*RON (trusted)*/
- MCU_READ("KEY0", 0x1000, 0x000/2, 0x10); /*REACH (trusted)*/
- MCU_READ("KEY0", 0x0400, 0x000/2, 0x11); /*KAN */
- MCU_READ("KEY1", 0x0008, 0x000/2, 0x12); /*PON */
- MCU_READ("KEY1", 0x0002, 0x000/2, 0x13); /*CHI (trusted)*/
- MCU_READ("KEY0", 0x0004, 0x000/2, 0x14); /*START1*/
+ m_sharedram[0x000/2] = 0x0000;
+ mcu_fetch_input_polling(m_p1_key_io, 0x000/2);
}
- jm_shared_ram[0x00c/2] = machine().rand() & 0xffff;
+
+ m_sharedram[0x00c/2] = machine().rand() & 0xffff;
m_prg_prot++;
if(m_prg_prot > 0x10) { m_prg_prot = 0; }
- jm_shared_ram[0x00e/2] = m_prg_prot;
+ m_sharedram[0x00e/2] = m_prg_prot;
}
void jalmah_state::urashima_mcu_run()
{
- uint16_t *jm_shared_ram = m_jm_shared_ram;
-
if(m_test_mode) //service_mode
{
- jm_shared_ram[0x300/2] = ioport("KEY0")->read();
- jm_shared_ram[0x302/2] = ioport("KEY1")->read();
- jm_shared_ram[0x304/2] = ioport("KEY2")->read();
- jm_shared_ram[0x306/2] = ioport("KEY3")->read();
- jm_shared_ram[0x308/2] = ioport("KEY4")->read();
- jm_shared_ram[0x30a/2] = ioport("KEY5")->read();
+ for(int keynum = 0; keynum < 3; keynum++)
+ {
+ m_sharedram[0x300/2+keynum+0] = m_p1_key_io[keynum]->read();
+ m_sharedram[0x300/2+keynum+3] = m_p2_key_io[keynum]->read();
+ }
}
else
{
- jm_shared_ram[0x300/2] = 0x0000;
- MCU_READ("KEY1", 0x0001, 0x300/2, 0x00); /*FF*/
- MCU_READ("KEY2", 0x0400, 0x300/2, 0x01); /*A*/
- MCU_READ("KEY2", 0x1000, 0x300/2, 0x02); /*B*/
- MCU_READ("KEY2", 0x0200, 0x300/2, 0x03); /*C*/
- MCU_READ("KEY2", 0x0800, 0x300/2, 0x04); /*D*/
- MCU_READ("KEY2", 0x0004, 0x300/2, 0x05); /*E*/
- MCU_READ("KEY2", 0x0010, 0x300/2, 0x06); /*F*/
- MCU_READ("KEY2", 0x0002, 0x300/2, 0x07); /*G*/
- MCU_READ("KEY2", 0x0008, 0x300/2, 0x08); /*H*/
- MCU_READ("KEY1", 0x0400, 0x300/2, 0x09); /*I*/
- MCU_READ("KEY1", 0x1000, 0x300/2, 0x0a); /*J*/
- MCU_READ("KEY1", 0x0200, 0x300/2, 0x0b); /*K*/
- MCU_READ("KEY1", 0x0800, 0x300/2, 0x0c); /*L*/
- MCU_READ("KEY1", 0x0004, 0x300/2, 0x0d); /*M*/
- MCU_READ("KEY1", 0x0010, 0x300/2, 0x0e); /*N*/
- MCU_READ("KEY0", 0x0200, 0x300/2, 0x0f); /*RON (trusted)*/
- MCU_READ("KEY0", 0x1000, 0x300/2, 0x10); /*REACH (trusted)*/
- MCU_READ("KEY0", 0x0400, 0x300/2, 0x11); /*KAN */
- MCU_READ("KEY1", 0x0008, 0x300/2, 0x12); /*PON */
- MCU_READ("KEY1", 0x0002, 0x300/2, 0x13); /*CHI (trusted)*/
- MCU_READ("KEY0", 0x0004, 0x300/2, 0x14); /*START1*/
+ m_sharedram[0x300/2] = 0x0000;
+ mcu_fetch_input_polling(m_p1_key_io, 0x300/2);
}
- jm_shared_ram[0x30c/2] = machine().rand() & 0xffff;
+ m_sharedram[0x30c/2] = machine().rand() & 0xffff;
m_prg_prot++;
if(m_prg_prot > 0x10) { m_prg_prot = 0; }
- jm_shared_ram[0x30e/2] = m_prg_prot;
+ m_sharedram[0x30e/2] = m_prg_prot;
}
void jalmah_state::second_mcu_run()
{
- uint16_t *jm_shared_ram = m_jm_shared_ram;
if(m_test_mode) //service_mode
{
- jm_shared_ram[0x200/2] = ioport("KEY0")->read();
- jm_shared_ram[0x202/2] = ioport("KEY1")->read();
- jm_shared_ram[0x204/2] = ioport("KEY2")->read();
+ for(int keynum = 0; keynum < 3; keynum++)
+ m_sharedram[0x200/2+keynum] = m_p1_key_io[keynum]->read();
}
else
{
- jm_shared_ram[0x200/2] = 0x0000;
- MCU_READ("KEY1", 0x0001, 0x200/2, 0x00); /*FF*/
- MCU_READ("KEY2", 0x0400, 0x200/2, 0x01); /*A*/
- MCU_READ("KEY2", 0x1000, 0x200/2, 0x02); /*B*/
- MCU_READ("KEY2", 0x0200, 0x200/2, 0x03); /*C*/
- MCU_READ("KEY2", 0x0800, 0x200/2, 0x04); /*D*/
- MCU_READ("KEY2", 0x0004, 0x200/2, 0x05); /*E*/
- MCU_READ("KEY2", 0x0010, 0x200/2, 0x06); /*F*/
- MCU_READ("KEY2", 0x0002, 0x200/2, 0x07); /*G*/
- MCU_READ("KEY2", 0x0008, 0x200/2, 0x08); /*H*/
- MCU_READ("KEY1", 0x0400, 0x200/2, 0x09); /*I*/
- MCU_READ("KEY1", 0x1000, 0x200/2, 0x0a); /*J*/
- MCU_READ("KEY1", 0x0200, 0x200/2, 0x0b); /*K*/
- MCU_READ("KEY1", 0x0800, 0x200/2, 0x0c); /*L*/
- MCU_READ("KEY1", 0x0004, 0x200/2, 0x0d); /*M*/
- MCU_READ("KEY1", 0x0010, 0x200/2, 0x0e); /*N*/
- MCU_READ("KEY0", 0x0200, 0x200/2, 0x0f); /*RON*/
- MCU_READ("KEY0", 0x1000, 0x200/2, 0x10); /*REACH*/
- MCU_READ("KEY0", 0x0400, 0x200/2, 0x11); /*KAN*/
- MCU_READ("KEY1", 0x0008, 0x200/2, 0x12); /*PON*/
- MCU_READ("KEY1", 0x0002, 0x200/2, 0x13); /*CHI*/
- MCU_READ("KEY0", 0x0004, 0x200/2, 0x14); /*START1*/
-
-// MCU_READ("KEY0", 0x0004, 0x7b8/2, 0x03); /*START1(correct?) */
+ m_sharedram[0x200/2] = 0x0000;
+ mcu_fetch_input_polling(m_p1_key_io, 0x200/2);
}
- jm_shared_ram[0x20c/2] = machine().rand() & 0xffff; //kakumei2
+ m_sharedram[0x20c/2] = machine().rand() & 0xffff; //kakumei2
}
TIMER_DEVICE_CALLBACK_MEMBER(jalmah_state::mcu_sim)
@@ -679,43 +627,36 @@ Basic driver start
******************************************************************************************/
-WRITE16_MEMBER(jalmah_state::okirom_w)
+WRITE8_MEMBER(jalmah_state::okirom_w)
{
- if(ACCESSING_BITS_0_7)
- {
- uint8_t *oki = memregion("oki")->base();
-
- m_oki_rom = data & 1;
-
- /* ZA appears to be related to the banking, or maybe kakumei2 uses PAL shuffling and this is for something else? */
- m_oki_za = (data & 2) ? 1 : 0;
+ m_oki_rom = data & 1;
- memcpy(&oki[0x20000], &oki[(m_oki_rom * 0x80000) + ((m_oki_bank+m_oki_za) * 0x20000) + 0x40000], 0x20000);
- }
+ /* ZA appears to be related to the banking, or maybe kakumei2 uses PAL shuffling and this is for something else? */
+ m_oki_za = (data & 2) ? 1 : 0;
+ //memcpy(&oki[0x20000], &oki[(m_oki_rom * 0x80000) + ((m_oki_bank+m_oki_za) * 0x20000) + 0x40000], 0x20000);
+ m_okibank->set_entry((m_oki_rom << 2) + (m_oki_bank+m_oki_za));
+
//popmessage("PC=%06x %02x %02x %02x %08x",m_maincpu->pc(),m_oki_rom,m_oki_za,m_oki_bank,(m_oki_rom * 0x80000) + ((m_oki_bank+m_oki_za) * 0x20000) + 0x40000);
}
-WRITE16_MEMBER(jalmah_state::okibank_w)
-{
- if(ACCESSING_BITS_0_7)
- {
- uint8_t *oki = memregion("oki")->base();
+WRITE8_MEMBER(jalmah_state::okibank_w)
+{
+ m_oki_bank = data & 3;
- m_oki_bank = data & 3;
-
- memcpy(&oki[0x20000], &oki[(m_oki_rom * 0x80000) + ((m_oki_bank+m_oki_za) * 0x20000) + 0x40000], 0x20000);
- }
-
+ //memcpy(&oki[0x20000], &oki[(m_oki_rom * 0x80000) + ((m_oki_bank+m_oki_za) * 0x20000) + 0x40000], 0x20000);
+ m_okibank->set_entry((m_oki_rom << 2) + (m_oki_bank+m_oki_za));
+
//popmessage("PC=%06x %02x %02x %02x %08x",m_maincpu->pc(),m_oki_rom,m_oki_za,m_oki_bank,(m_oki_rom * 0x80000) + ((m_oki_bank+m_oki_za) * 0x20000) + 0x40000);
}
-WRITE16_MEMBER(jalmah_state::flip_screen_w)
+WRITE8_MEMBER(jalmah_state::flip_screen_w)
{
/*---- ----x flip screen*/
flip_screen_set(data & 1);
-// popmessage("%04x",data);
+ if(data & 0xfe)
+ popmessage("Flip data %02x, contact MAMEdev",data);
}
void jalmah_state::jalmah_map(address_map &map)
@@ -724,12 +665,12 @@ void jalmah_state::jalmah_map(address_map &map)
map(0x080000, 0x080001).portr("SYSTEM");
map(0x080002, 0x080003).portr("DSW");
// 0x080004, 0x080005 MCU read, different for each game
- map(0x080010, 0x080011).w(FUNC(jalmah_state::flip_screen_w));
+ map(0x080011, 0x080011).w(FUNC(jalmah_state::flip_screen_w));
// 0x080012, 0x080013 MCU write related,same for each game
map(0x080014, 0x080015).noprw(); // MCU handshake
- map(0x080016, 0x080017).w(FUNC(jalmah_state::tilebank_w)).umask16(0x00ff);
- map(0x080018, 0x080019).w(FUNC(jalmah_state::okibank_w));
- map(0x08001a, 0x08001b).w(FUNC(jalmah_state::okirom_w));
+ map(0x080017, 0x080017).w(FUNC(jalmah_state::tilebank_w));
+ map(0x080019, 0x080019).w(FUNC(jalmah_state::okibank_w));
+ map(0x08001b, 0x08001b).w(FUNC(jalmah_state::okirom_w));
map(0x080020, 0x080025).rw("scroll0", FUNC(megasys1_tilemap_device::scroll_r), FUNC(megasys1_tilemap_device::scroll_w));
map(0x080028, 0x08002d).rw("scroll1", FUNC(megasys1_tilemap_device::scroll_r), FUNC(megasys1_tilemap_device::scroll_w));
map(0x080030, 0x080035).rw("scroll2", FUNC(megasys1_tilemap_device::scroll_r), FUNC(megasys1_tilemap_device::scroll_w));
@@ -741,7 +682,7 @@ void jalmah_state::jalmah_map(address_map &map)
map(0x094000, 0x097fff).ram().w("scroll1", FUNC(megasys1_tilemap_device::write)).share("scroll1"); // Scroll RAM 1
map(0x098000, 0x09bfff).ram().w("scroll2", FUNC(megasys1_tilemap_device::write)).share("scroll2"); // Scroll RAM 2
map(0x09c000, 0x09ffff).ram().w("scroll3", FUNC(megasys1_tilemap_device::write)).share("scroll3"); // Scroll RAM 3
- map(0x0f0000, 0x0f0fff).ram().share("jshared_ram");/*shared with MCU*/
+ map(0x0f0000, 0x0f0fff).ram().share("sharedram");/*shared with MCU*/
map(0x0f1000, 0x0fffff).ram(); /*Work Ram*/
}
@@ -757,12 +698,12 @@ void urashima_state::urashima_map(address_map &map)
map(0x080000, 0x080001).portr("SYSTEM");
map(0x080002, 0x080003).portr("DSW");
// 0x080004, 0x080005 MCU read, different for each game
- map(0x080010, 0x080011).w(FUNC(jalmah_state::flip_screen_w));
+ map(0x080011, 0x080011).w(FUNC(jalmah_state::flip_screen_w));
// 0x080012, 0x080013 MCU write related, same for each game
map(0x080014, 0x080015).noprw(); // MCU handshake
-/**/map(0x080016, 0x080017).ram().w(FUNC(urashima_state::urashima_priority_w));
- map(0x080018, 0x080019).w(FUNC(jalmah_state::okibank_w));
- map(0x08001a, 0x08001b).w(FUNC(jalmah_state::okirom_w));
+/**/map(0x080017, 0x080017).w(FUNC(urashima_state::urashima_priority_w));
+ map(0x080019, 0x080019).w(FUNC(jalmah_state::okibank_w));
+ map(0x08001b, 0x08001b).w(FUNC(jalmah_state::okirom_w));
/**/map(0x08001c, 0x08001d).ram().w(FUNC(urashima_state::urashima_bank_w)).umask16(0x00ff);
map(0x080041, 0x080041).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
// 0x084000, 0x084001 ?
@@ -776,11 +717,17 @@ void urashima_state::urashima_map(address_map &map)
// likely only 0x9e000-0x9ffff is connected (0xa0000-0xa1fff cleared at POST and nowhere else)
map(0x09e000, 0x09ffff).rw(FUNC(urashima_state::urashima_vram_r<1>),FUNC(urashima_state::urashima_vram_w<1>)).share("videoram1");
map(0x0a0000, 0x0a1fff).noprw();
- map(0x0f0000, 0x0f0fff).ram().share("jshared_ram");/*shared with MCU*/
+ map(0x0f0000, 0x0f0fff).ram().share("sharedram");/*shared with MCU*/
map(0x0f1000, 0x0fffff).ram(); /*Work Ram*/
map(0x100000, 0x10ffff).ram().region("jmcu_rom", 0);/*extra RAM for MCU code prg (NOT ON REAL HW!!!)*/
}
+void jalmah_state::oki_map(address_map &map)
+{
+ map(0x00000, 0x1ffff).rom();
+ map(0x20000, 0x3ffff).bankr("okibank");
+}
+
static INPUT_PORTS_START( common )
PORT_START("SYSTEM")
PORT_BIT( 0x001f, IP_ACTIVE_LOW, IPT_UNKNOWN )
@@ -791,14 +738,14 @@ static INPUT_PORTS_START( common )
INPUT_PORTS_END
static INPUT_PORTS_START( ctrl_mj1 )
- PORT_START("KEY0")
+ PORT_START("P1_KEY0")
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_MAHJONG_RON )
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )
PORT_BIT( 0xe9fb, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("KEY1")
+ PORT_START("P1_KEY1")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_M )
@@ -810,7 +757,7 @@ static INPUT_PORTS_START( ctrl_mj1 )
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_MAHJONG_J )
PORT_BIT( 0xe1e0, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("KEY2")
+ PORT_START("P1_KEY2")
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_G )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_E )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_H )
@@ -823,14 +770,14 @@ static INPUT_PORTS_START( ctrl_mj1 )
INPUT_PORTS_END
static INPUT_PORTS_START( ctrl_mj2 )
- PORT_START("KEY3")
+ PORT_START("P2_KEY0")
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_PLAYER(2)
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_PLAYER(2)
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_PLAYER(2)
PORT_BIT( 0xe9fb, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_PLAYER(2)
- PORT_START("KEY4")
+ PORT_START("P2_KEY1")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) PORT_PLAYER(2)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_PLAYER(2)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_PLAYER(2)
@@ -842,7 +789,7 @@ static INPUT_PORTS_START( ctrl_mj2 )
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_PLAYER(2)
PORT_BIT( 0xe1e0, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("KEY5")
+ PORT_START("P2_KEY2")
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_PLAYER(2)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_PLAYER(2)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_PLAYER(2)
@@ -860,7 +807,8 @@ static INPUT_PORTS_START( urashima )
PORT_INCLUDE( ctrl_mj2 )
PORT_MODIFY("SYSTEM")
- PORT_SERVICE( 0x0008, IP_ACTIVE_LOW )
+ // TODO: this probably sends game in test mode while playing (unemulated)
+ PORT_SERVICE( 0x0008, IP_ACTIVE_LOW ) PORT_NAME("Test Button") PORT_CODE(KEYCODE_F1)
PORT_START("DSW")
PORT_DIPNAME( 0x0007, 0x0007, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW2:8,7,6")
@@ -873,9 +821,9 @@ static INPUT_PORTS_START( urashima )
PORT_DIPSETTING( 0x0004, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) )
PORT_DIPNAME( 0x0018, 0x0018, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:5,4")
+ PORT_DIPSETTING( 0x0010, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x0018, DEF_STR( Normal ) )
- PORT_DIPSETTING( 0x0010, DEF_STR( Hard ) )
- PORT_DIPSETTING( 0x0008, DEF_STR( Harder ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) )
PORT_DIPNAME( 0x0020, 0x0020, "Display Tenpai/Noten" ) PORT_DIPLOCATION("SW2:3")
PORT_DIPSETTING( 0x0020, DEF_STR( No ) )
@@ -985,7 +933,7 @@ static INPUT_PORTS_START( kakumei )
PORT_INCLUDE( common )
PORT_INCLUDE( ctrl_mj1 )
- PORT_MODIFY("KEY1")
+ PORT_MODIFY("P1_KEY1")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) PORT_NAME("P1 Mahjong Flip Flop") PORT_CODE(KEYCODE_2)
PORT_START("DSW")
@@ -1022,7 +970,7 @@ static INPUT_PORTS_START( kakumei2 )
PORT_INCLUDE( common )
PORT_INCLUDE( ctrl_mj1 )
- PORT_MODIFY("KEY1")
+ PORT_MODIFY("P1_KEY1")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) PORT_NAME("P1 Mahjong Flip Flop") PORT_CODE(KEYCODE_2)
PORT_START("DSW")
@@ -1073,16 +1021,17 @@ static INPUT_PORTS_START( suchiesp )
PORT_DIPSETTING( 0x2000, DEF_STR( Yes ) )
INPUT_PORTS_END
+// check if we are into service or normal mode
+// TODO: this should be set via internal work RAM buffer
void jalmah_state::mcu_check_test_mode()
{
m_respcount = 0;
- /*check if we are into service or normal mode*/
switch(m_mcu_prg)
{
case MJZOOMIN_MCU:
case DAIREIKA_MCU:
- m_test_mode = (~(ioport("SYSTEM")->read()) & 0x0008) ? (1) : (0);
+ m_test_mode = (ioport("SYSTEM")->read() & 0x0008) ? 0 : 1;
break;
case URASHIMA_MCU:
m_test_mode = ((~(ioport("SYSTEM")->read()) & 0x0008) || (~(ioport("DSW")->read()) & 0x8000)) ? (1) : (0);
@@ -1090,11 +1039,24 @@ void jalmah_state::mcu_check_test_mode()
case KAKUMEI_MCU:
case KAKUMEI2_MCU:
case SUCHIESP_MCU:
- m_test_mode = (~(ioport("DSW")->read()) & 0x0004) ? (1) : (0);
+ m_test_mode = (ioport("DSW")->read() & 0x0004) ? (0) : (1);
break;
}
}
+void jalmah_state::machine_start()
+{
+ const int okimax = (memregion("oki")->bytes() - 0x40000) / 0x20000;
+ m_okibank->configure_entries(0,okimax,memregion("oki")->base() + 0x40000,0x20000);
+
+ save_item(NAME(m_respcount));
+ save_item(NAME(m_test_mode));
+ save_item(NAME(m_prg_prot));
+ save_item(NAME(m_oki_rom));
+ save_item(NAME(m_oki_bank));
+ save_item(NAME(m_oki_za));
+}
+
void jalmah_state::machine_reset()
{
m_pri = 0;
@@ -1141,6 +1103,7 @@ MACHINE_CONFIG_START(jalmah_state::jalmah)
SPEAKER(config, "mono").front_center();
MCFG_DEVICE_ADD("oki", OKIM6295, 4000000, okim6295_device::PIN7_LOW)
+ MCFG_DEVICE_ADDRESS_MAP(0, oki_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5)
MACHINE_CONFIG_END
@@ -1232,7 +1195,9 @@ ROM_START ( urashima )
ROM_LOAD( "um-3.22c", 0x40000, 0x80000, CRC(9fd8c8fa) SHA1(0346f74c03a4daa7a84b64c9edf0e54297c82fd9) )
ROM_COPY( "oki" , 0x40000, 0x00000, 0x40000 )
-
+ // 16x16 tiles
+ // layer 0 bankswitches tiles 0x800-0xfff by reading following two roms.
+ // we copy them into three regions for simplicity in tilemap code.
ROM_REGION( 0x080000, "gfx1", 0 )
ROM_LOAD( "um-6.2l", 0x000000, 0x080000, CRC(076be5b5) SHA1(77444025f149a960137d3c79abecf9b30defa341) )
@@ -1251,14 +1216,14 @@ ROM_START ( urashima )
ROM_COPY( "gfx2", 0x040000, 0x040000, 0x40000 )
ROM_REGION( 0x020000, "scroll3", 0 )
- ROM_LOAD( "um-5.22j", 0x000000, 0x020000, CRC(991776a2) SHA1(56740553d7d26aaeb9bec8557727030950bb01f7) ) /* 8x8 tiles */
-
-
- ROM_REGION( 0x0240, "user1", 0 )
- ROM_LOAD( "um-10.2b", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) /* unknown */
- ROM_LOAD( "um-11.2c", 0x0100, 0x0100, CRC(ff5660cf) SHA1(a4635dcf9d6dd637ea4f36f1ad233db0bd039731) ) /* unknown */
- ROM_LOAD( "um-12.20c", 0x0200, 0x0020, CRC(bdb66b02) SHA1(8755244de638d7e835e35e08c62b0612958e6ca5) ) /* unknown */
- ROM_LOAD( "um-13.10l", 0x0220, 0x0020, CRC(4ce07ec0) SHA1(5f5744ddc7f258307f036fde4c0a8e6271b2d1f9) ) /* unknown */
+ // 8x8 tiles
+ ROM_LOAD( "um-5.22j", 0x000000, 0x020000, CRC(991776a2) SHA1(56740553d7d26aaeb9bec8557727030950bb01f7) )
+
+ ROM_REGION( 0x240, "proms", 0 ) /* Misc PROMs (unknown) */
+ ROM_LOAD( "um-10.2b", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) )
+ ROM_LOAD( "um-11.2c", 0x0100, 0x0100, CRC(ff5660cf) SHA1(a4635dcf9d6dd637ea4f36f1ad233db0bd039731) )
+ ROM_LOAD( "um-12.20c", 0x0200, 0x0020, CRC(bdb66b02) SHA1(8755244de638d7e835e35e08c62b0612958e6ca5) )
+ ROM_LOAD( "um-13.10l", 0x0220, 0x0020, CRC(4ce07ec0) SHA1(5f5744ddc7f258307f036fde4c0a8e6271b2d1f9) )
ROM_END
/*
@@ -1299,10 +1264,12 @@ ROM_START( daireika )
ROM_LOAD( "mj14.bin", 0x00000, 0x10000, CRC(c84c5577) SHA1(6437368d3be39739d62158590ecd373aa070a9b2) )
ROM_COPY( "scroll2", 0x00000, 0x10000, 0x10000 )
- ROM_REGION( 0x220, "user1", 0 ) /* Proms */
+ ROM_REGION( 0x100, "prirom", 0 ) /* Priority PROM */
ROM_LOAD( "mj15.bpr", 0x000, 0x100, CRC(ebac41f9) SHA1(9d1629d977849663392cbf03a3ddf76665f88608) )
- ROM_LOAD( "mj16.bpr", 0x100, 0x100, CRC(8d5dc1f6) SHA1(9f723e7cd44f8c09ec30b04725644346484ec753) )
- ROM_LOAD( "mj17.bpr", 0x200, 0x020, CRC(a17c3e8a) SHA1(d7969fad7cec9c792c53aa457f4ad764a727e0a5) )
+
+ ROM_REGION( 0x120, "proms", 0 ) /* Misc PROMs (unknown) */
+ ROM_LOAD( "mj16.bpr", 0x000, 0x100, CRC(8d5dc1f6) SHA1(9f723e7cd44f8c09ec30b04725644346484ec753) )
+ ROM_LOAD( "mj17.bpr", 0x100, 0x020, CRC(a17c3e8a) SHA1(d7969fad7cec9c792c53aa457f4ad764a727e0a5) )
ROM_END
/*
@@ -1340,10 +1307,12 @@ ROM_START( mjzoomin )
ROM_REGION( 0x20000, "scroll3", 0 )
ROM_LOAD( "zoomin14.bin", 0x00000, 0x20000, CRC(4e32aa45) SHA1(450a3449ca8b4f0dfe8b62cceaee9366eaf3dc3d) )
- ROM_REGION( 0x220, "user1", 0 ) /* Proms */
+ ROM_REGION( 0x100, "prirom", 0 ) /* Priority PROM */
ROM_LOAD( "mj15.bpr", 0x000, 0x100, CRC(ebac41f9) SHA1(9d1629d977849663392cbf03a3ddf76665f88608) )
- ROM_LOAD( "mj16.bpr", 0x100, 0x100, CRC(8d5dc1f6) SHA1(9f723e7cd44f8c09ec30b04725644346484ec753) )
- ROM_LOAD( "mj17.bpr", 0x200, 0x020, CRC(a17c3e8a) SHA1(d7969fad7cec9c792c53aa457f4ad764a727e0a5) )
+
+ ROM_REGION( 0x120, "proms", 0 ) /* Misc PROMs (unknown) */
+ ROM_LOAD( "mj16.bpr", 0x000, 0x100, CRC(8d5dc1f6) SHA1(9f723e7cd44f8c09ec30b04725644346484ec753) )
+ ROM_LOAD( "mj17.bpr", 0x100, 0x020, CRC(a17c3e8a) SHA1(d7969fad7cec9c792c53aa457f4ad764a727e0a5) )
ROM_END
/*
@@ -1380,10 +1349,12 @@ ROM_START( kakumei )
ROM_REGION( 0x20000, "scroll3", 0 )
ROM_LOAD( "rom14.bin", 0x00000, 0x20000, CRC(63e88dd6) SHA1(58734c8caf1b1ddc4cf0437ffd8109292b76c4e1) )
- ROM_REGION( 0x220, "user1", 0 ) /* Proms */
+ ROM_REGION( 0x100, "prirom", 0 ) /* Priority PROM */
ROM_LOAD( "mj15.bpr", 0x000, 0x100, CRC(ebac41f9) SHA1(9d1629d977849663392cbf03a3ddf76665f88608) )
- ROM_LOAD( "mj16.bpr", 0x100, 0x100, CRC(8d5dc1f6) SHA1(9f723e7cd44f8c09ec30b04725644346484ec753) )
- ROM_LOAD( "mj17.bpr", 0x200, 0x020, CRC(a17c3e8a) SHA1(d7969fad7cec9c792c53aa457f4ad764a727e0a5) )
+
+ ROM_REGION( 0x120, "proms", 0 ) /* Misc PROMs (unknown) */
+ ROM_LOAD( "mj16.bpr", 0x000, 0x100, CRC(8d5dc1f6) SHA1(9f723e7cd44f8c09ec30b04725644346484ec753) )
+ ROM_LOAD( "mj17.bpr", 0x100, 0x020, CRC(a17c3e8a) SHA1(d7969fad7cec9c792c53aa457f4ad764a727e0a5) )
ROM_END
/*
@@ -1417,10 +1388,12 @@ ROM_START( kakumei2 )
ROM_REGION( 0x20000, "scroll3", 0 )
ROM_LOAD( "mj-8956.14", 0x00000, 0x20000, CRC(2b2fe999) SHA1(d9d601e2c008791f5bff6e7b1340f754dd094201) )
- ROM_REGION( 0x220, "user1", 0 ) /* Proms */
+ ROM_REGION( 0x100, "prirom", 0 ) /* Priority PROM */
ROM_LOAD( "mj15.bpr", 0x000, 0x100, CRC(ebac41f9) SHA1(9d1629d977849663392cbf03a3ddf76665f88608) )
- ROM_LOAD( "mj16.bpr", 0x100, 0x100, CRC(8d5dc1f6) SHA1(9f723e7cd44f8c09ec30b04725644346484ec753) )
- ROM_LOAD( "mj17.bpr", 0x200, 0x020, CRC(a17c3e8a) SHA1(d7969fad7cec9c792c53aa457f4ad764a727e0a5) )
+
+ ROM_REGION( 0x120, "proms", 0 ) /* Misc PROMs (unknown) */
+ ROM_LOAD( "mj16.bpr", 0x000, 0x100, CRC(8d5dc1f6) SHA1(9f723e7cd44f8c09ec30b04725644346484ec753) )
+ ROM_LOAD( "mj17.bpr", 0x100, 0x020, CRC(a17c3e8a) SHA1(d7969fad7cec9c792c53aa457f4ad764a727e0a5) )
ROM_END
/*
@@ -1505,10 +1478,12 @@ ROM_START( suchiesp )
ROM_REGION( 0x20000, "scroll3", 0 )
ROM_LOAD( "14.bin", 0x00000, 0x20000, CRC(e465a540) SHA1(10e19599ab90b0c0b6ef6ee41f16620bd1ba6800) )
- ROM_REGION( 0x220, "user1", 0 ) /* Proms */
+ ROM_REGION( 0x100, "prirom", 0 ) /* Priority PROM */
ROM_LOAD( "mj15.bpr", 0x000, 0x100, CRC(ebac41f9) SHA1(9d1629d977849663392cbf03a3ddf76665f88608) )
- ROM_LOAD( "mj16.bpr", 0x100, 0x100, CRC(8d5dc1f6) SHA1(9f723e7cd44f8c09ec30b04725644346484ec753) )
- ROM_LOAD( "pr93035.17", 0x200, 0x020, CRC(ab28ae42) SHA1(e05652c4bd5db4c7d7a1bfdeb63841e8b019f24c) )
+
+ ROM_REGION( 0x120, "proms", 0 ) /* Misc PROMs (unknown) */
+ ROM_LOAD( "mj16.bpr", 0x000, 0x100, CRC(8d5dc1f6) SHA1(9f723e7cd44f8c09ec30b04725644346484ec753) )
+ ROM_LOAD( "pr93035.17", 0x100, 0x020, CRC(ab28ae42) SHA1(e05652c4bd5db4c7d7a1bfdeb63841e8b019f24c) )
ROM_END
@@ -1541,9 +1516,9 @@ READ16_MEMBER(jalmah_state::urashima_mcu_r)
}
#define MCU_JMP(_workram_,_data_) \
- jm_shared_ram[_workram_] = 0x4ef9; \
- jm_shared_ram[_workram_+1] = 0x0010; \
- jm_shared_ram[_workram_+2] = _data_; \
+ m_sharedram[_workram_] = 0x4ef9; \
+ m_sharedram[_workram_+1] = 0x0010; \
+ m_sharedram[_workram_+2] = _data_; \
/*
@@ -1551,7 +1526,6 @@ data value is REQ under mjzoomin video test menu. Is it related to the MCU?
*/
WRITE16_MEMBER(jalmah_state::urashima_mcu_w)
{
- uint16_t *jm_shared_ram = m_jm_shared_ram;
if(ACCESSING_BITS_0_7 && data)
{
/*******************************************************
@@ -1563,7 +1537,7 @@ WRITE16_MEMBER(jalmah_state::urashima_mcu_w)
*******************************************************/
/*similar to mjzoomin but with offset summed with 0x300?*/
/*tx scrollx = $200*/
- jm_shared_ram[0x03c6/2] = 0x6008; //bra $+10
+ m_sharedram[0x03c6/2] = 0x6008; //bra $+10
MCU_JMP(0x3d0/2,SNIPPET_PALETTE1);
/*******************************************************
@@ -1602,8 +1576,6 @@ READ16_MEMBER(jalmah_state::daireika_mcu_r)
WRITE16_MEMBER(jalmah_state::daireika_mcu_w)
{
- uint16_t *jm_shared_ram = m_jm_shared_ram;
-
if(ACCESSING_BITS_0_7 && data)
{
/*******************************************************
@@ -1621,7 +1593,7 @@ WRITE16_MEMBER(jalmah_state::daireika_mcu_w)
3rd M68k code uploaded by the MCU.
see mjzoomin_mcu_w
*******************************************************/
- jm_shared_ram[0x00c6/2] = 0x6008; //bra +$8, we need this due of clash with SNIPPET_TILE
+ m_sharedram[0x00c6/2] = 0x6008; //bra +$8, we need this due of clash with SNIPPET_TILE
MCU_JMP(0x00d0/2,SNIPPET_PALETTE1);
/*******************************************************
@@ -1633,9 +1605,9 @@ WRITE16_MEMBER(jalmah_state::daireika_mcu_w)
MCU_JMP(0x110/2,SNIPPET_CLR_LAYER2);
/* layer 3 clear function is already in 68k ROM program???*/
- jm_shared_ram[0x0126/2] = 0x4ef9;
- jm_shared_ram[0x0128/2] = 0x0000;
- jm_shared_ram[0x012a/2] = 0x2684;
+ m_sharedram[0x0126/2] = 0x4ef9;
+ m_sharedram[0x0128/2] = 0x0000;
+ m_sharedram[0x012a/2] = 0x2684;
/*******************************************************
5th M68k code uploaded by the MCU (palette upload)
@@ -1675,8 +1647,6 @@ data value is REQ under mjzoomin video test menu.It is related to the MCU?
*/
WRITE16_MEMBER(jalmah_state::mjzoomin_mcu_w)
{
- uint16_t *jm_shared_ram = m_jm_shared_ram;
-
if(ACCESSING_BITS_0_7 && data)
{
/******************************************************