Skip to content

Commit d38920d

Browse files
authored
ipc: Implement differences between IPB and IPC
* Use correct clock rates for each board (4.0MHz for IPC, 2.6MHz for IPB) * Make IPB's CPU a 8080A * Remove bogus ROM range between 0xF000 and 0xF7FF * Correct board full names and release years * Only map 32KiB RAM on IPB (IPC has 64KiB, partially shadowed by ROM)
1 parent 1d934a5 commit d38920d

File tree

1 file changed

+34
-8
lines changed

1 file changed

+34
-8
lines changed

src/mame/intel/ipc.cpp

+34-8
Original file line numberDiff line numberDiff line change
@@ -61,19 +61,30 @@ class ipc_state : public driver_device
6161
void ipc(machine_config &config);
6262

6363
private:
64+
void board_common(machine_config &config);
6465
void io_map(address_map &map) ATTR_COLD;
65-
void mem_map(address_map &map) ATTR_COLD;
66+
void ipb_mem_map(address_map &map) ATTR_COLD;
67+
void ipc_mem_map(address_map &map) ATTR_COLD;
6668

6769
virtual void machine_reset() override ATTR_COLD;
6870
required_device<cpu_device> m_maincpu;
6971
};
7072

7173

72-
void ipc_state::mem_map(address_map &map)
74+
void ipc_state::ipb_mem_map(address_map &map)
75+
{
76+
map.unmap_value_high();
77+
map(0x0000, 0x7fff).ram();
78+
map(0xe800, 0xe7ff).rom().region("roms", 0);
79+
map(0xf800, 0xffff).rom().region("roms", 0x800);
80+
}
81+
82+
83+
void ipc_state::ipc_mem_map(address_map &map)
7384
{
7485
map.unmap_value_high();
7586
map(0x0000, 0xdfff).ram();
76-
map(0xe800, 0xefff).rom().region("roms", 0);
87+
map(0xe800, 0xe7ff).rom().region("roms", 0);
7788
map(0xf800, 0xffff).rom().region("roms", 0x800);
7889
}
7990

@@ -100,10 +111,25 @@ void ipc_state::machine_reset()
100111
void ipc_state::ipc(machine_config &config)
101112
{
102113
/* basic machine hardware */
103-
I8085A(config, m_maincpu, XTAL(19'660'800) / 4);
104-
m_maincpu->set_addrmap(AS_PROGRAM, &ipc_state::mem_map);
114+
I8085A(config, m_maincpu, XTAL(8'000'000) / 2);
115+
m_maincpu->set_addrmap(AS_PROGRAM, &ipc_state::ipc_mem_map);
105116
m_maincpu->set_addrmap(AS_IO, &ipc_state::io_map);
117+
board_common(config);
118+
}
119+
106120

121+
void ipc_state::ipb(machine_config &config)
122+
{
123+
/* basic machine hardware */
124+
I8080A(config, m_maincpu, XTAL(23'400'000) / 9);
125+
m_maincpu->set_addrmap(AS_PROGRAM, &ipc_state::ipb_mem_map);
126+
m_maincpu->set_addrmap(AS_IO, &ipc_state::io_map);
127+
board_common(config);
128+
}
129+
130+
131+
void ipc_state::board_common(machine_config &config)
132+
{
107133
pit8253_device &pit(PIT8253(config, "pit", 0));
108134
pit.set_clk<0>(XTAL(19'660'800) / 16);
109135
pit.set_clk<1>(XTAL(19'660'800) / 16);
@@ -151,6 +177,6 @@ ROM_END
151177

152178
/* Driver */
153179

154-
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
155-
COMP( 19??, ipb, 0, 0, ipc, ipc, ipc_state, empty_init, "Intel", "iPB", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )
156-
COMP( 19??, ipc, ipb, 0, ipc, ipc, ipc_state, empty_init, "Intel", "iPC", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )
180+
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
181+
COMP( 1977, ipb, 0, 0, ipb, ipc, ipc_state, empty_init, "Intel", "Integrated Processor Board", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )
182+
COMP( 1979, ipc, ipb, 0, ipc, ipc, ipc_state, empty_init, "Intel", "Integrated Processor Card", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )

0 commit comments

Comments
 (0)