mirror of
https://github.com/holub/mame
synced 2025-04-24 09:20:02 +03:00
jalmah.cpp: misc cleanups from cam900 PR plus more (nw)
This commit is contained in:
parent
5b34e3283e
commit
89da3a3fdb
@ -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;
|
||||
|
||||
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;
|
||||
|
||||
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 */
|
||||
// 8x8 tiles
|
||||
ROM_LOAD( "um-5.22j", 0x000000, 0x020000, CRC(991776a2) SHA1(56740553d7d26aaeb9bec8557727030950bb01f7) )
|
||||
|
||||
|
||||
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 */
|
||||
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)
|
||||
{
|
||||
/******************************************************
|
||||
|
Loading…
Reference in New Issue
Block a user