Skip to content

Commit

Permalink
reordered methods, grouping them in a more clear way
Browse files Browse the repository at this point in the history
  • Loading branch information
sergiopolog committed Dec 10, 2024
1 parent cc5c05c commit 4c7c141
Showing 1 changed file with 124 additions and 120 deletions.
244 changes: 124 additions & 120 deletions src/mame/jaleco/megasys1.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,17 @@ void megasys1_typez_state::megasys1Z_map(address_map &map)
map(0x084308, 0x084309).w(FUNC(megasys1_typez_state::soundlatch_z_w));
}

void megasys1_state::ram_w(offs_t offset, u16 data)
{
// DON'T use COMBINE_DATA
// byte writes end up mirroring in both bytes of the word like nmk16.cpp
// 64th Street and Chimera Beast rely on this for attract inputs

m_ram[offset] = data;
// if (mem_mask != 0xffff) printf("byte write to RAM %04x %04x %04x\n", offset, data, mem_mask);

}

void megasys1_state::megasys_base_map(address_map &map)
{
map.global_mask(0xfffff);
Expand Down Expand Up @@ -286,7 +297,7 @@ void megasys1_typea_state::megasys1A_map(address_map &map)
}

/***************************************************************************
[ Common - System B & C ]
[ Interrupts - System B & C ]
***************************************************************************/

void megasys1_state::megasys1bc_handle_scanline_irq(int scanline)
Expand Down Expand Up @@ -329,24 +340,9 @@ TIMER_DEVICE_CALLBACK_MEMBER(megasys1_bc_iomcu_state::megasys1BC_iomcu_scanline)
}

/***************************************************************************
[ Main CPU - System B ]
[ IO Simulation - System B & C ]
***************************************************************************/

TIMER_DEVICE_CALLBACK_MEMBER(megasys1_state::megasys1Bbl_scanline)
{
int scanline = param;

if(scanline == 240) // vblank-out irq
m_maincpu->set_input_line(4, HOLD_LINE);

if(scanline == 0)
m_maincpu->set_input_line(2, HOLD_LINE);

if(scanline == 128)
m_maincpu->set_input_line(1, HOLD_LINE);
}


/* Read the input ports, through a protection device:
ip_select_values must contain the 5 codes sent to the protection device
Expand All @@ -368,11 +364,11 @@ void megasys1_bc_iosim_state::ip_select_w(u16 data) // TO MCU
int i;

// Coins P1 P2 DSW1 DSW2
// 57 53 54 55 56 < 64street
// 57 53 54 55 56 < 64street (not used anymore / MCU code dumped)
// 37 35 36 33 34 < avspirit
// 58 54 55 56 57 < bigstrik
// 56 52 53 54 55 < cybattlr
// 20 21 22 23 24 < edf
// 58 54 55 56 57 < bigstrik (not used anymore / MCU code dumped)
// 56 52 53 54 55 < cybattlr (not used anymore / MCU code dumped)
// 20 21 22 23 24 < edf (not used anymore / MCU code dumped)
// 51 52 53 54 55 < hayaosi1

/* f(x) = ((x*x)>>4)&0xFF ; f(f($D)) == 6 */
Expand All @@ -398,108 +394,10 @@ void megasys1_bc_iosim_state::ip_select_w(u16 data) // TO MCU
m_maincpu->set_input_line(2, HOLD_LINE);
}

void megasys1_state::megasys1B_map(address_map &map)
{
map.global_mask(0xfffff);
map(0x000000, 0x03ffff).rom();
map(0x044000, 0x044001).w(FUNC(megasys1_state::active_layers_w));
map(0x044008, 0x04400d).rw("scroll2", FUNC(megasys1_tilemap_device::scroll_r), FUNC(megasys1_tilemap_device::scroll_w));
map(0x044100, 0x044101).rw(FUNC(megasys1_state::sprite_flag_r), FUNC(megasys1_state::sprite_flag_w));
map(0x044200, 0x044205).rw("scroll0", FUNC(megasys1_tilemap_device::scroll_r), FUNC(megasys1_tilemap_device::scroll_w));
map(0x044208, 0x04420d).rw("scroll1", FUNC(megasys1_tilemap_device::scroll_r), FUNC(megasys1_tilemap_device::scroll_w));
map(0x044300, 0x044301).w(FUNC(megasys1_state::screen_flag_w));
map(0x044308, 0x044309).w(FUNC(megasys1_state::soundlatch_w));
map(0x048000, 0x0487ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x04e000, 0x04ffff).ram().share("objectram");
map(0x050000, 0x053fff).ram().w("scroll0", FUNC(megasys1_tilemap_device::write)).share("scroll0");
map(0x054000, 0x057fff).ram().w("scroll1", FUNC(megasys1_tilemap_device::write)).share("scroll1");
map(0x058000, 0x05bfff).ram().w("scroll2", FUNC(megasys1_tilemap_device::write)).share("scroll2");
map(0x060000, 0x06ffff).mirror(0x10000).ram().w(FUNC(megasys1_state::ram_w)).share("ram");
map(0x080000, 0x0bffff).rom();
}

void megasys1_bc_iosim_state::megasys1B_iosim_map(address_map &map)
{
megasys1B_map(map);
map(0x0e0000, 0x0e0001).rw(FUNC(megasys1_bc_iosim_state::ip_select_r), FUNC(megasys1_bc_iosim_state::ip_select_w));
}

void megasys1_bc_iomcu_state::megasys1B_iomcu_map(address_map &map)
{
megasys1B_map(map);
map(0x0e0000, 0x0e0001).rw(FUNC(megasys1_bc_iomcu_state::ip_select_iomcu_r), FUNC(megasys1_bc_iomcu_state::ip_select_iomcu_w));
}

void megasys1_state::megasys1B_edfbl_map(address_map &map)
{
map.global_mask(0xfffff);
megasys1B_map(map);
map(0x0e0002, 0x0e0003).portr("SYSTEM");
map(0x0e0004, 0x0e0005).portr("P1");
map(0x0e0006, 0x0e0007).portr("P2");
map(0x0e0008, 0x0e0009).portr("DSW1");
map(0x0e000a, 0x0e000b).portr("DSW2");
//map(0x0e000e, 0x0e000f).w(FUNC(megasys1_state::soundlatch_w));
}

void megasys1_state::megasys1B_monkelf_map(address_map &map)
{
map.global_mask(0xfffff);
megasys1B_map(map);
map(0x044200, 0x044205).w(FUNC(megasys1_state::monkelf_scroll0_w));
map(0x044208, 0x04420d).w(FUNC(megasys1_state::monkelf_scroll1_w));
map(0x0e0002, 0x0e0003).portr("P1");
map(0x0e0004, 0x0e0005).portr("P2");
map(0x0e0006, 0x0e0007).portr("DSW1");
map(0x0e0008, 0x0e0009).portr("DSW2");
map(0x0e000a, 0x0e000b).portr("SYSTEM");
}




/***************************************************************************
[ Main CPU - System C ]
[ IO MCU Emulation - System B & C ]
***************************************************************************/

void megasys1_state::ram_w(offs_t offset, u16 data)
{
// DON'T use COMBINE_DATA
// byte writes end up mirroring in both bytes of the word like nmk16.cpp
// 64th Street and Chimera Beast rely on this for attract inputs

m_ram[offset] = data;
// if (mem_mask != 0xffff) printf("byte write to RAM %04x %04x %04x\n", offset, data, mem_mask);

}

void megasys1_state::megasys1C_map(address_map &map)
{
map.global_mask(0x1fffff);
map(0x000000, 0x07ffff).rom();
map(0x0c2000, 0x0c2005).rw("scroll0", FUNC(megasys1_tilemap_device::scroll_r), FUNC(megasys1_tilemap_device::scroll_w));
map(0x0c2008, 0x0c200d).rw("scroll1", FUNC(megasys1_tilemap_device::scroll_r), FUNC(megasys1_tilemap_device::scroll_w));
map(0x0c2100, 0x0c2105).rw("scroll2", FUNC(megasys1_tilemap_device::scroll_r), FUNC(megasys1_tilemap_device::scroll_w));
map(0x0c2108, 0x0c2109).w(FUNC(megasys1_state::sprite_bank_w));
map(0x0c2200, 0x0c2201).rw(FUNC(megasys1_state::sprite_flag_r), FUNC(megasys1_state::sprite_flag_w));
map(0x0c2208, 0x0c2209).w(FUNC(megasys1_state::active_layers_w));
map(0x0c2308, 0x0c2309).w(FUNC(megasys1_state::screen_flag_w));
map(0x0c8000, 0x0c8001).r(m_soundlatch[1], FUNC(generic_latch_16_device::read)).w(FUNC(megasys1_state::soundlatch_c_w));
map(0x0d2000, 0x0d3fff).ram().share("objectram");
// 64th Street actively uses 0xe4*** for breakable objects.
map(0x0e0000, 0x0e3fff).mirror(0x4000).ram().w("scroll0", FUNC(megasys1_tilemap_device::write)).share("scroll0");
map(0x0e8000, 0x0ebfff).mirror(0x4000).ram().w("scroll1", FUNC(megasys1_tilemap_device::write)).share("scroll1");
map(0x0f0000, 0x0f3fff).mirror(0x4000).ram().w("scroll2", FUNC(megasys1_tilemap_device::write)).share("scroll2");
map(0x0f8000, 0x0f87ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x1c0000, 0x1cffff).mirror(0x30000).ram().w(FUNC(megasys1_state::ram_w)).share("ram"); //0x1f****, Cybattler reads attract mode inputs at 0x1d****
}

void megasys1_bc_iosim_state::megasys1C_iosim_map(address_map &map)
{
megasys1C_map(map);
map(0x0d8000, 0x0d8001).rw(FUNC(megasys1_bc_iosim_state::ip_select_r), FUNC(megasys1_bc_iosim_state::ip_select_w));
}

/*
Used by IO MCU to read data from different inputs (DSW1, DSW2, P1, P2, COIN) depending on
which one was previously selected by the MCU itself using the offset.
Expand Down Expand Up @@ -585,6 +483,112 @@ void megasys1_bc_iomcu_state::iomcu_map(address_map &map)
map(0x000000, 0x0fffff).r(FUNC(megasys1_bc_iomcu_state::mcu_capture_inputs_r));
}

/***************************************************************************
[ Main CPU - System B ]
***************************************************************************/

TIMER_DEVICE_CALLBACK_MEMBER(megasys1_state::megasys1Bbl_scanline)
{
int scanline = param;

if(scanline == 240) // vblank-out irq
m_maincpu->set_input_line(4, HOLD_LINE);

if(scanline == 0)
m_maincpu->set_input_line(2, HOLD_LINE);

if(scanline == 128)
m_maincpu->set_input_line(1, HOLD_LINE);
}

void megasys1_state::megasys1B_map(address_map &map)
{
map.global_mask(0xfffff);
map(0x000000, 0x03ffff).rom();
map(0x044000, 0x044001).w(FUNC(megasys1_state::active_layers_w));
map(0x044008, 0x04400d).rw("scroll2", FUNC(megasys1_tilemap_device::scroll_r), FUNC(megasys1_tilemap_device::scroll_w));
map(0x044100, 0x044101).rw(FUNC(megasys1_state::sprite_flag_r), FUNC(megasys1_state::sprite_flag_w));
map(0x044200, 0x044205).rw("scroll0", FUNC(megasys1_tilemap_device::scroll_r), FUNC(megasys1_tilemap_device::scroll_w));
map(0x044208, 0x04420d).rw("scroll1", FUNC(megasys1_tilemap_device::scroll_r), FUNC(megasys1_tilemap_device::scroll_w));
map(0x044300, 0x044301).w(FUNC(megasys1_state::screen_flag_w));
map(0x044308, 0x044309).w(FUNC(megasys1_state::soundlatch_w));
map(0x048000, 0x0487ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x04e000, 0x04ffff).ram().share("objectram");
map(0x050000, 0x053fff).ram().w("scroll0", FUNC(megasys1_tilemap_device::write)).share("scroll0");
map(0x054000, 0x057fff).ram().w("scroll1", FUNC(megasys1_tilemap_device::write)).share("scroll1");
map(0x058000, 0x05bfff).ram().w("scroll2", FUNC(megasys1_tilemap_device::write)).share("scroll2");
map(0x060000, 0x06ffff).mirror(0x10000).ram().w(FUNC(megasys1_state::ram_w)).share("ram");
map(0x080000, 0x0bffff).rom();
}

void megasys1_bc_iosim_state::megasys1B_iosim_map(address_map &map)
{
megasys1B_map(map);
map(0x0e0000, 0x0e0001).rw(FUNC(megasys1_bc_iosim_state::ip_select_r), FUNC(megasys1_bc_iosim_state::ip_select_w));
}

void megasys1_bc_iomcu_state::megasys1B_iomcu_map(address_map &map)
{
megasys1B_map(map);
map(0x0e0000, 0x0e0001).rw(FUNC(megasys1_bc_iomcu_state::ip_select_iomcu_r), FUNC(megasys1_bc_iomcu_state::ip_select_iomcu_w));
}

void megasys1_state::megasys1B_edfbl_map(address_map &map)
{
map.global_mask(0xfffff);
megasys1B_map(map);
map(0x0e0002, 0x0e0003).portr("SYSTEM");
map(0x0e0004, 0x0e0005).portr("P1");
map(0x0e0006, 0x0e0007).portr("P2");
map(0x0e0008, 0x0e0009).portr("DSW1");
map(0x0e000a, 0x0e000b).portr("DSW2");
//map(0x0e000e, 0x0e000f).w(FUNC(megasys1_state::soundlatch_w));
}

void megasys1_state::megasys1B_monkelf_map(address_map &map)
{
map.global_mask(0xfffff);
megasys1B_map(map);
map(0x044200, 0x044205).w(FUNC(megasys1_state::monkelf_scroll0_w));
map(0x044208, 0x04420d).w(FUNC(megasys1_state::monkelf_scroll1_w));
map(0x0e0002, 0x0e0003).portr("P1");
map(0x0e0004, 0x0e0005).portr("P2");
map(0x0e0006, 0x0e0007).portr("DSW1");
map(0x0e0008, 0x0e0009).portr("DSW2");
map(0x0e000a, 0x0e000b).portr("SYSTEM");
}

/***************************************************************************
[ Main CPU - System C ]
***************************************************************************/

void megasys1_state::megasys1C_map(address_map &map)
{
map.global_mask(0x1fffff);
map(0x000000, 0x07ffff).rom();
map(0x0c2000, 0x0c2005).rw("scroll0", FUNC(megasys1_tilemap_device::scroll_r), FUNC(megasys1_tilemap_device::scroll_w));
map(0x0c2008, 0x0c200d).rw("scroll1", FUNC(megasys1_tilemap_device::scroll_r), FUNC(megasys1_tilemap_device::scroll_w));
map(0x0c2100, 0x0c2105).rw("scroll2", FUNC(megasys1_tilemap_device::scroll_r), FUNC(megasys1_tilemap_device::scroll_w));
map(0x0c2108, 0x0c2109).w(FUNC(megasys1_state::sprite_bank_w));
map(0x0c2200, 0x0c2201).rw(FUNC(megasys1_state::sprite_flag_r), FUNC(megasys1_state::sprite_flag_w));
map(0x0c2208, 0x0c2209).w(FUNC(megasys1_state::active_layers_w));
map(0x0c2308, 0x0c2309).w(FUNC(megasys1_state::screen_flag_w));
map(0x0c8000, 0x0c8001).r(m_soundlatch[1], FUNC(generic_latch_16_device::read)).w(FUNC(megasys1_state::soundlatch_c_w));
map(0x0d2000, 0x0d3fff).ram().share("objectram");
// 64th Street actively uses 0xe4*** for breakable objects.
map(0x0e0000, 0x0e3fff).mirror(0x4000).ram().w("scroll0", FUNC(megasys1_tilemap_device::write)).share("scroll0");
map(0x0e8000, 0x0ebfff).mirror(0x4000).ram().w("scroll1", FUNC(megasys1_tilemap_device::write)).share("scroll1");
map(0x0f0000, 0x0f3fff).mirror(0x4000).ram().w("scroll2", FUNC(megasys1_tilemap_device::write)).share("scroll2");
map(0x0f8000, 0x0f87ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x1c0000, 0x1cffff).mirror(0x30000).ram().w(FUNC(megasys1_state::ram_w)).share("ram"); //0x1f****, Cybattler reads attract mode inputs at 0x1d****
}

void megasys1_bc_iosim_state::megasys1C_iosim_map(address_map &map)
{
megasys1C_map(map);
map(0x0d8000, 0x0d8001).rw(FUNC(megasys1_bc_iosim_state::ip_select_r), FUNC(megasys1_bc_iosim_state::ip_select_w));
}

void megasys1_bc_iomcu_state::megasys1C_iomcu_map(address_map &map)
{
megasys1C_map(map);
Expand Down

0 comments on commit 4c7c141

Please sign in to comment.