mirror of
https://github.com/holub/mame
synced 2025-10-06 09:00:04 +03:00
Midway V Unit linking stub (#5336)
* minor bugfix and cleanup * midvunit linking stub * more likely implementation of m_comm_flags
This commit is contained in:
parent
5bfb58a6f1
commit
81ddfdc875
@ -54,6 +54,8 @@ void midvunit_state::machine_start()
|
||||
save_item(NAME(m_wheel_board_output));
|
||||
save_item(NAME(m_wheel_board_last));
|
||||
save_item(NAME(m_wheel_board_u8_latch));
|
||||
save_item(NAME(m_comm_flags));
|
||||
save_item(NAME(m_comm_data));
|
||||
|
||||
m_optional_drivers.resolve();
|
||||
}
|
||||
@ -498,6 +500,58 @@ DECLARE_CUSTOM_INPUT_MEMBER(midvunit_state::motion_r)
|
||||
}
|
||||
|
||||
|
||||
READ32_MEMBER(midvunit_state::midvunit_intcs_r)
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
|
||||
uint16_t midvunit_state::comm_bus_out()
|
||||
{
|
||||
uint16_t mask = 0;
|
||||
if (m_comm_flags & 0x20) // COMCOE
|
||||
mask |= (m_comm_data >> 4) & 0xf00;
|
||||
if (m_comm_flags & 0x40) // COMDOE
|
||||
mask |= 0xff;
|
||||
return m_comm_data & mask;
|
||||
}
|
||||
|
||||
// To link multiple machines together will require comm_bus_out()
|
||||
// to be called on each machine and bitwise ORed here.
|
||||
// This must be done in real time with proper synchronization.
|
||||
uint16_t midvunit_state::comm_bus_in()
|
||||
{
|
||||
return comm_bus_out();
|
||||
}
|
||||
|
||||
READ32_MEMBER(midvunit_state::midvunit_comcs_r)
|
||||
{
|
||||
if (offset != 0)
|
||||
{
|
||||
logerror("midvunit_comcs_r(%d)\n", offset);
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
uint16_t data = comm_bus_in();
|
||||
if (m_comm_flags & 0x20) // COMCOE
|
||||
data &= ~((m_comm_data >> 4) & 0xf00);
|
||||
if (m_comm_flags & 0x40) // COMDOE
|
||||
data &= ~0xff;
|
||||
return data << 16;
|
||||
}
|
||||
}
|
||||
|
||||
WRITE32_MEMBER(midvunit_state::midvunit_comcs_w)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
default: logerror("midvunit_comcs_w(%d) = %08X\n", offset, data); break;
|
||||
case 0: m_comm_data = data >> 16; break;
|
||||
case 1: m_comm_flags = (data >> 24) & 0xe0; break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* War Gods I/O ASICs
|
||||
@ -595,7 +649,7 @@ void midvunit_state::midvunit_map(address_map &map)
|
||||
map(0x980040, 0x980040).rw(FUNC(midvunit_state::midvunit_page_control_r), FUNC(midvunit_state::midvunit_page_control_w));
|
||||
map(0x980080, 0x980080).noprw();
|
||||
map(0x980082, 0x980083).r(FUNC(midvunit_state::midvunit_dma_trigger_r));
|
||||
map(0x990000, 0x990000).nopr(); // link PAL (low 4 bits must == 4)
|
||||
map(0x990000, 0x990000).r(FUNC(midvunit_state::midvunit_intcs_r));
|
||||
map(0x991030, 0x991030).lr16("991030", [this]() { return uint16_t(m_in1->read()); });
|
||||
// AM_RANGE(0x991050, 0x991050) AM_READONLY // seems to be another port
|
||||
map(0x991060, 0x991060).r(FUNC(midvunit_state::port0_r));
|
||||
@ -604,7 +658,7 @@ void midvunit_state::midvunit_map(address_map &map)
|
||||
map(0x994000, 0x994000).w(FUNC(midvunit_state::midvunit_control_w));
|
||||
map(0x995000, 0x995000).rw(FUNC(midvunit_state::midvunit_wheel_board_r), FUNC(midvunit_state::midvunit_wheel_board_w));
|
||||
map(0x995020, 0x995020).w(FUNC(midvunit_state::midvunit_cmos_protect_w));
|
||||
map(0x997000, 0x997000).noprw(); // communications
|
||||
map(0x997000, 0x997008).rw(FUNC(midvunit_state::midvunit_comcs_r), FUNC(midvunit_state::midvunit_comcs_w));
|
||||
map(0x9a0000, 0x9a0000).w(FUNC(midvunit_state::midvunit_sound_w));
|
||||
map(0x9c0000, 0x9c1fff).rw(FUNC(midvunit_state::midvunit_cmos_r), FUNC(midvunit_state::midvunit_cmos_w)).share("nvram");
|
||||
map(0x9e0000, 0x9e7fff).ram().w(FUNC(midvunit_state::midvunit_paletteram_w)).share("paletteram");
|
||||
|
@ -129,6 +129,8 @@ private:
|
||||
uint8_t m_wheel_board_output;
|
||||
uint32_t m_wheel_board_last;
|
||||
uint32_t m_wheel_board_u8_latch;
|
||||
uint8_t m_comm_flags;
|
||||
uint16_t m_comm_data;
|
||||
DECLARE_WRITE32_MEMBER(midvunit_dma_queue_w);
|
||||
DECLARE_READ32_MEMBER(midvunit_dma_queue_entries_r);
|
||||
DECLARE_READ32_MEMBER(midvunit_dma_trigger_r);
|
||||
@ -166,6 +168,9 @@ private:
|
||||
DECLARE_READ32_MEMBER(generic_speedup_r);
|
||||
DECLARE_READ32_MEMBER(midvunit_wheel_board_r);
|
||||
DECLARE_WRITE32_MEMBER(midvunit_wheel_board_w);
|
||||
DECLARE_READ32_MEMBER(midvunit_intcs_r);
|
||||
DECLARE_READ32_MEMBER(midvunit_comcs_r);
|
||||
DECLARE_WRITE32_MEMBER(midvunit_comcs_w);
|
||||
void set_input(const char *s);
|
||||
void init_crusnwld_common(offs_t speedup);
|
||||
void init_crusnusa_common(offs_t speedup);
|
||||
@ -192,6 +197,9 @@ private:
|
||||
optional_ioport m_motion;
|
||||
void postload();
|
||||
|
||||
uint16_t comm_bus_out();
|
||||
uint16_t comm_bus_in();
|
||||
|
||||
void midvplus_map(address_map &map);
|
||||
void midvunit_map(address_map &map);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user