(nw) c10: added tap

This commit is contained in:
Robbbert 2020-05-16 23:49:26 +10:00
parent c2ec9b789a
commit 842dba5d9c
2 changed files with 33 additions and 39 deletions

View File

@ -25,30 +25,28 @@ constantly looking at.
class c10_state : public driver_device
{
public:
enum
{
TIMER_RESET
};
c10_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_rom(*this, "maincpu")
, m_p_videoram(*this, "videoram")
, m_p_chargen(*this, "chargen")
, m_ram(*this, "mainram")
{ }
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void init_c10();
void c10(machine_config &config);
private:
void c10_io(address_map &map);
void c10_mem(address_map &map);
private:
required_device<cpu_device> m_maincpu;
required_shared_ptr<uint8_t> m_p_videoram;
required_region_ptr<u8> m_p_chargen;
virtual void machine_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
required_device<z80_device> m_maincpu;
required_region_ptr<u8> m_rom;
required_shared_ptr<u8> m_p_videoram;
required_region_ptr<u8> m_p_chargen;
memory_passthrough_handler *m_rom_shadow_tap;
required_shared_ptr<u8> m_ram;
};
@ -56,9 +54,8 @@ private:
void c10_state::c10_mem(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x0fff).bankrw("boot");
map(0x1000, 0x7fff).ram();
map(0x8000, 0xbfff).rom();
map(0x0000, 0x7fff).ram().share("mainram");
map(0x8000, 0xbfff).rom().region("maincpu", 0);
map(0xc000, 0xf0a1).ram();
map(0xf0a2, 0xffff).ram().share("videoram");
}
@ -72,23 +69,24 @@ void c10_state::c10_io(address_map &map)
static INPUT_PORTS_START( c10 )
INPUT_PORTS_END
void c10_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
switch (id)
{
case TIMER_RESET:
/* after the first 4 bytes have been read from ROM, switch the ram back in */
membank("boot")->set_entry(0);
break;
default:
throw emu_fatalerror("Unknown id in c10_state::device_timer");
}
}
void c10_state::machine_reset()
{
membank("boot")->set_entry(1);
timer_set(attotime::from_usec(4), TIMER_RESET);
address_space &program = m_maincpu->space(AS_PROGRAM);
program.install_rom(0x0000, 0x0fff, m_rom); // do it here for F3
m_rom_shadow_tap = program.install_read_tap(0x8000, 0x8fff, "rom_shadow_r",[this](offs_t offset, u8 &data, u8 mem_mask)
{
if (!machine().side_effects_disabled())
{
// delete this tap
m_rom_shadow_tap->remove();
// reinstall ram over the rom shadow
m_maincpu->space(AS_PROGRAM).install_ram(0x0000, 0x0fff, m_ram);
}
// return the original data
return data;
});
}
/* This system appears to have inline attribute bytes of unknown meaning.
@ -178,16 +176,11 @@ void c10_state::c10(machine_config &config)
PALETTE(config, "palette", palette_device::MONOCHROME);
}
void c10_state::init_c10()
{
uint8_t *RAM = memregion("maincpu")->base();
membank("boot")->configure_entries(0, 2, &RAM[0x0000], 0x8000);
}
/* ROM definition */
ROM_START( c10 )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "502-0055.ic16", 0x8000, 0x4000, CRC(2ccf5983) SHA1(52f7c497f5284bf5df9eb0d6e9142bb1869d8c24))
ROM_REGION( 0x4000, "maincpu", 0 )
ROM_LOAD( "502-0055.ic16", 0x0000, 0x4000, CRC(2ccf5983) SHA1(52f7c497f5284bf5df9eb0d6e9142bb1869d8c24))
ROM_REGION( 0x2000, "chargen", 0 )
ROM_LOAD( "c10_char.ic9", 0x0000, 0x2000, CRC(cb530b6f) SHA1(95590bbb433db9c4317f535723b29516b9b9fcbf))
@ -196,4 +189,5 @@ ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
COMP( 1982, c10, 0, 0, c10, c10, c10_state, init_c10, "Cromemco", "C-10", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
COMP( 1982, c10, 0, 0, c10, c10, c10_state, empty_init, "Cromemco", "C-10", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )

View File

@ -273,5 +273,5 @@ ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
COMP( 1981, pulsarlb, 0, 0, pulsar, pulsar, pulsar_state, empty_init, "Pulsar", "Little Big Board (6000 series)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW )
COMP( 1981, pulsarlb, 0, 0, pulsar, pulsar, pulsar_state, empty_init, "Pulsar", "Little Big Board (6000 series)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )