(nw) even more cleanups

This commit is contained in:
Robbbert 2020-06-14 18:31:38 +10:00
parent aa49b3a8b5
commit f114358821
9 changed files with 187 additions and 193 deletions

View File

@ -44,12 +44,12 @@ public:
void c68ksbc(machine_config &config);
private:
void c68ksbc_mem(address_map &map);
void mem_map(address_map &map);
required_device<cpu_device> m_maincpu;
};
void c68ksbc_state::c68ksbc_mem(address_map &map)
void c68ksbc_state::mem_map(address_map &map)
{
map.unmap_value_high();
map(0x000000, 0x002fff).rom();
@ -66,7 +66,7 @@ INPUT_PORTS_END
void c68ksbc_state::c68ksbc(machine_config &config)
{
M68000(config, m_maincpu, 8000000); // text says 8MHz, schematic says 10MHz
m_maincpu->set_addrmap(AS_PROGRAM, &c68ksbc_state::c68ksbc_mem);
m_maincpu->set_addrmap(AS_PROGRAM, &c68ksbc_state::mem_map);
acia6850_device &acia(ACIA6850(config, "acia", 0));
acia.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
@ -90,4 +90,4 @@ ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
COMP( 2002, 68ksbc, 0, 0, c68ksbc, c68ksbc, c68ksbc_state, empty_init, "Wichit Sirichote", "68k Single Board Computer", MACHINE_NO_SOUND_HW)
COMP( 2002, 68ksbc, 0, 0, c68ksbc, c68ksbc, c68ksbc_state, empty_init, "Wichit Sirichote", "68k Single Board Computer", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )

View File

@ -34,17 +34,17 @@ public:
, m_pio0(*this, "pio0")
, m_dma (*this, "dma")
, m_fdc (*this, "fdc")
, m_p_prom(*this, "proms")
, m_floppy0(*this, "fdc:0")
, m_floppy1(*this, "fdc:1")
, m_bankr(*this, "bankr%d", 0)
, m_bankw(*this, "bankw%d", 0)
{ }
void altos5(machine_config &config);
void init_altos5();
DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb);
private:
DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb);
uint8_t memory_read_byte(offs_t offset);
void memory_write_byte(offs_t offset, uint8_t data);
uint8_t io_read_byte(offs_t offset);
@ -54,6 +54,8 @@ private:
void port08_w(uint8_t data);
void port09_w(uint8_t data);
void port14_w(uint8_t data);
void setup_banks(uint8_t source);
uint8_t convert(offs_t offset, bool state);
DECLARE_WRITE_LINE_MEMBER(busreq_w);
DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w);
@ -62,19 +64,22 @@ private:
uint8_t m_port08;
uint8_t m_port09;
uint8_t *m_p_prom;
bool m_ipl;
offs_t m_curr_bank;
floppy_image_device *m_floppy;
uint8_t convert(offs_t offset, bool state);
void setup_banks(uint8_t source);
virtual void machine_reset() override;
std::unique_ptr<u8[]> m_ram; // main ram 192k
std::unique_ptr<u8[]> m_dummy; // for wrpt
void machine_reset() override;
void machine_start() override;
required_device<z80_device> m_maincpu;
required_device<z80pio_device> m_pio0;
required_device<z80dma_device> m_dma;
required_device<fd1797_device> m_fdc;
required_region_ptr<u8> m_p_prom;
required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1;
required_memory_bank_array<16> m_bankr;
required_memory_bank_array<16> m_bankw;
};
@ -91,12 +96,12 @@ void altos5_state::mem_map(address_map &map)
map(0x7000, 0x7fff).bankr("bankr7").bankw("bankw7");
map(0x8000, 0x8fff).bankr("bankr8").bankw("bankw8");
map(0x9000, 0x9fff).bankr("bankr9").bankw("bankw9");
map(0xa000, 0xafff).bankr("bankra").bankw("bankwa");
map(0xb000, 0xbfff).bankr("bankrb").bankw("bankwb");
map(0xc000, 0xcfff).bankr("bankrc").bankw("bankwc");
map(0xd000, 0xdfff).bankr("bankrd").bankw("bankwd");
map(0xe000, 0xefff).bankr("bankre").bankw("bankwe");
map(0xf000, 0xffff).bankr("bankrf").bankw("bankwf");
map(0xa000, 0xafff).bankr("bankr10").bankw("bankw10");
map(0xb000, 0xbfff).bankr("bankr11").bankw("bankw11");
map(0xc000, 0xcfff).bankr("bankr12").bankw("bankw12");
map(0xd000, 0xdfff).bankr("bankr13").bankw("bankw13");
map(0xe000, 0xefff).bankr("bankr14").bankw("bankw14");
map(0xf000, 0xffff).bankr("bankr15").bankw("bankw15");
}
void altos5_state::io_map(address_map &map)
@ -147,40 +152,12 @@ void altos5_state::setup_banks(uint8_t source)
temp = offs;
if ((source == 2) || (temp != m_curr_bank))
{
membank("bankr0")->set_entry(convert(offs++, 0));
membank("bankr1")->set_entry(convert(offs++, 0));
membank("bankr2")->set_entry(convert(offs++, 0));
membank("bankr3")->set_entry(convert(offs++, 0));
membank("bankr4")->set_entry(convert(offs++, 0));
membank("bankr5")->set_entry(convert(offs++, 0));
membank("bankr6")->set_entry(convert(offs++, 0));
membank("bankr7")->set_entry(convert(offs++, 0));
membank("bankr8")->set_entry(convert(offs++, 0));
membank("bankr9")->set_entry(convert(offs++, 0));
membank("bankra")->set_entry(convert(offs++, 0));
membank("bankrb")->set_entry(convert(offs++, 0));
membank("bankrc")->set_entry(convert(offs++, 0));
membank("bankrd")->set_entry(convert(offs++, 0));
membank("bankre")->set_entry(convert(offs++, 0));
membank("bankrf")->set_entry(convert(offs++, 0));
for (auto &bank : m_bankr)
bank->set_entry(convert(offs++, 0));
offs = temp;
membank("bankw0")->set_entry(convert(offs++, 1));
membank("bankw1")->set_entry(convert(offs++, 1));
membank("bankw2")->set_entry(convert(offs++, 1));
membank("bankw3")->set_entry(convert(offs++, 1));
membank("bankw4")->set_entry(convert(offs++, 1));
membank("bankw5")->set_entry(convert(offs++, 1));
membank("bankw6")->set_entry(convert(offs++, 1));
membank("bankw7")->set_entry(convert(offs++, 1));
membank("bankw8")->set_entry(convert(offs++, 1));
membank("bankw9")->set_entry(convert(offs++, 1));
membank("bankwa")->set_entry(convert(offs++, 1));
membank("bankwb")->set_entry(convert(offs++, 1));
membank("bankwc")->set_entry(convert(offs++, 1));
membank("bankwd")->set_entry(convert(offs++, 1));
membank("bankwe")->set_entry(convert(offs++, 1));
membank("bankwf")->set_entry(convert(offs++, 1));
for (auto &bank : m_bankw)
bank->set_entry(convert(offs++, 1));
}
m_curr_bank = temp;
@ -368,44 +345,33 @@ WRITE_LINE_MEMBER( altos5_state::fdc_intrq_w )
m_pio0->port_a_write(data);
}
void altos5_state::init_altos5()
void altos5_state::machine_start()
{
m_p_prom = memregion("proms")->base();
m_ram = make_unique_clear<u8[]>(0x30000);
m_dummy = std::make_unique<u8[]>(0x1000);
uint8_t *RAM = memregion("maincpu")->base();
u8 *r = m_ram.get();
u8 *d = m_dummy.get();
u8 *m = memregion("maincpu")->base();
membank("bankr0")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankr1")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankr2")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankr3")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankr4")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankr5")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankr6")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankr7")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankr8")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankr9")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankra")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankrb")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankrc")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankrd")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankre")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankrf")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankw0")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankw1")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankw2")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankw3")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankw4")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankw5")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankw6")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankw7")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankw8")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankw9")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankwa")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankwb")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankwc")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankwd")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankwe")->configure_entries(0, 50, &RAM[0], 0x1000);
membank("bankwf")->configure_entries(0, 50, &RAM[0], 0x1000);
for (auto &bank : m_bankr)
bank->configure_entries(0, 48, r, 0x1000);
for (auto &bank : m_bankw)
bank->configure_entries(0, 48, r, 0x1000);
for (auto &bank : m_bankr)
bank->configure_entry(48, d);
for (auto &bank : m_bankw)
bank->configure_entry(48, d);
for (auto &bank : m_bankr)
bank->configure_entry(49, m);
for (auto &bank : m_bankw)
bank->configure_entry(49, m);
save_pointer(NAME(m_ram), 0x30000);
save_item(NAME(m_port08));
save_item(NAME(m_port09));
save_item(NAME(m_ipl));
save_item(NAME(m_curr_bank));
}
void altos5_state::altos5(machine_config &config)
@ -479,9 +445,9 @@ void altos5_state::altos5(machine_config &config)
/* ROM definition */
ROM_START( altos5 ) // 00000-2FFFF = ram banks; 30000-30FFF wprt space; 31000-31FFF ROM
ROM_REGION( 0x32000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD("2732.bin", 0x31000, 0x1000, CRC(15fdc7eb) SHA1(e15bdf5d5414ad56f8c4bb84edc6f967a5f01ba9)) // bios
ROM_START( altos5 )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD("2732.bin", 0x0000, 0x1000, CRC(15fdc7eb) SHA1(e15bdf5d5414ad56f8c4bb84edc6f967a5f01ba9)) // bios
ROM_REGION( 0x200, "proms", 0 )
ROM_LOAD("82s141.bin", 0x0000, 0x0200, CRC(35c8078c) SHA1(dce24374bfcc5d23959e2c03485d82a119c0c3c9)) // banking control
@ -490,4 +456,4 @@ ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
COMP( 1982, altos5, 0, 0, altos5, altos5, altos5_state, init_altos5, "Altos", "Altos 5-15", MACHINE_NOT_WORKING )
COMP( 1982, altos5, 0, 0, altos5, altos5, altos5_state, empty_init, "Altos", "Altos 5-15", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )

View File

@ -29,38 +29,38 @@ public:
: 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")
, m_vram(*this, "videoram")
, m_p_chargen(*this, "chargen")
{ }
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void c10(machine_config &config);
private:
void c10_io(address_map &map);
void c10_mem(address_map &map);
virtual void machine_reset() override;
void io_map(address_map &map);
void mem_map(address_map &map);
void machine_reset() override;
void machine_start() override;
memory_passthrough_handler *m_rom_shadow_tap;
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;
required_shared_ptr<u8> m_vram;
required_region_ptr<u8> m_p_chargen;
};
void c10_state::c10_mem(address_map &map)
void c10_state::mem_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x7fff).ram().share("mainram");
map(0x8000, 0xbfff).rom().region("maincpu", 0);
map(0xc000, 0xf0a1).ram();
map(0xf0a2, 0xffff).ram().share("videoram");
}
void c10_state::c10_io(address_map &map)
void c10_state::io_map(address_map &map)
{
map.global_mask(0xff);
}
@ -69,6 +69,10 @@ void c10_state::c10_io(address_map &map)
static INPUT_PORTS_START( c10 )
INPUT_PORTS_END
void c10_state::machine_start()
{
}
void c10_state::machine_reset()
{
address_space &program = m_maincpu->space(AS_PROGRAM);
@ -111,7 +115,7 @@ uint32_t c10_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, c
gfx = 0;
if (ra < 9)
{
chr = m_p_videoram[xx++];
chr = m_vram[xx++];
// /* Take care of flashing characters */
// if ((chr < 0x80) && (framecnt & 0x08))
@ -139,7 +143,7 @@ uint32_t c10_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, c
}
/* F4 Character Displayer */
static const gfx_layout c10_charlayout =
static const gfx_layout charlayout =
{
8, 9, /* 8 x 9 characters */
512, /* 512 characters */
@ -153,7 +157,7 @@ static const gfx_layout c10_charlayout =
};
static GFXDECODE_START( gfx_c10 )
GFXDECODE_ENTRY( "chargen", 0x0000, c10_charlayout, 0, 1 )
GFXDECODE_ENTRY( "chargen", 0x0000, charlayout, 0, 1 )
GFXDECODE_END
@ -161,8 +165,8 @@ void c10_state::c10(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, XTAL(8'000'000) / 2);
m_maincpu->set_addrmap(AS_PROGRAM, &c10_state::c10_mem);
m_maincpu->set_addrmap(AS_IO, &c10_state::c10_io);
m_maincpu->set_addrmap(AS_PROGRAM, &c10_state::mem_map);
m_maincpu->set_addrmap(AS_IO, &c10_state::io_map);
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));

View File

@ -105,7 +105,7 @@ static INPUT_PORTS_START( c900 )
INPUT_PORTS_END
/* F4 Character Displayer */
static const gfx_layout c900_charlayout =
static const gfx_layout charlayout =
{
8, 16, /* 8 x 16 characters */
256, /* 256 characters */
@ -119,7 +119,7 @@ static const gfx_layout c900_charlayout =
};
static GFXDECODE_START( gfx_c900 )
GFXDECODE_ENTRY( "chargen", 0x0000, c900_charlayout, 0, 1 )
GFXDECODE_ENTRY( "chargen", 0x0000, charlayout, 0, 1 )
GFXDECODE_END
void c900_state::c900(machine_config &config)
@ -168,4 +168,4 @@ ROM_START( c900 )
ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
COMP( 1985, c900, 0, 0, c900, c900, c900_state, empty_init, "Commodore", "Commodore 900", MACHINE_IS_SKELETON )
COMP( 1985, c900, 0, 0, c900, c900, c900_state, empty_init, "Commodore", "Commodore 900", MACHINE_IS_SKELETON | MACHINE_SUPPORTS_SAVE )

View File

@ -265,4 +265,4 @@ ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
COMP( 1976, et3400, 0, 0, et3400, et3400, et3400_state, empty_init, "Heath Company", "Heathkit Model ET-3400 Microprocessor Trainer", 0 )
COMP( 1976, et3400, 0, 0, et3400, et3400, et3400_state, empty_init, "Heath Company", "Heathkit Model ET-3400 Microprocessor Trainer", MACHINE_SUPPORTS_SAVE )

View File

@ -86,17 +86,17 @@ public:
void pcm(machine_config &config);
private:
uint8_t pcm_85_r();
DECLARE_WRITE_LINE_MEMBER( pcm_82_w );
void pcm_85_w(uint8_t data);
uint8_t port85_r();
DECLARE_WRITE_LINE_MEMBER( port82_w );
void port85_w(uint8_t data);
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void pcm_io(address_map &map);
void pcm_mem(address_map &map);
void io_map(address_map &map);
void mem_map(address_map &map);
bool m_cone;
uint8_t m_85;
virtual void machine_reset() override;
void machine_start() override;
required_device<z80_device> m_maincpu;
required_device<z80pio_device> m_pio_s;
required_device<z80pio_device> m_pio_u;
@ -109,7 +109,7 @@ private:
};
WRITE_LINE_MEMBER( pcm_state::pcm_82_w )
WRITE_LINE_MEMBER( pcm_state::port82_w )
{
if (state)
{
@ -139,7 +139,7 @@ There is also a HALT LED, connected directly to the processor.
*/
uint8_t pcm_state::pcm_85_r()
uint8_t pcm_state::port85_r()
{
uint8_t data = m_85 & 0x7f;
@ -149,7 +149,7 @@ uint8_t pcm_state::pcm_85_r()
return data;
}
void pcm_state::pcm_85_w(uint8_t data)
void pcm_state::port85_w(uint8_t data)
{
if (BIT(data, 5))
m_cass->change_state(CASSETTE_MOTOR_ENABLED,CASSETTE_MASK_MOTOR);
@ -162,15 +162,14 @@ void pcm_state::pcm_85_w(uint8_t data)
void pcm_state::pcm_mem(address_map &map)
void pcm_state::mem_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x1fff).rom(); // ROM
map(0x2000, 0xf7ff).ram(); // RAM
map(0xf800, 0xffff).ram().share("videoram"); // Video RAM
map(0x0000, 0x1fff).rom();
map(0x2000, 0xf7ff).ram();
map(0xf800, 0xffff).ram().share("videoram");
}
void pcm_state::pcm_io(address_map &map)
void pcm_state::io_map(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xff);
@ -189,8 +188,10 @@ void pcm_state::pcm_io(address_map &map)
static INPUT_PORTS_START( pcm )
INPUT_PORTS_END
void pcm_state::machine_reset()
void pcm_state::machine_start()
{
save_item(NAME(m_cone));
save_item(NAME(m_85));
}
uint32_t pcm_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
@ -226,7 +227,7 @@ uint32_t pcm_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, c
}
static const z80_daisy_config pcm_daisy_chain[] =
static const z80_daisy_config daisy_chain[] =
{
{ "ctc_s" }, /* System ctc */
{ "pio_s" }, /* System pio */
@ -238,7 +239,7 @@ static const z80_daisy_config pcm_daisy_chain[] =
/* F4 Character Displayer */
static const gfx_layout pcm_charlayout =
static const gfx_layout charlayout =
{
8, 8, /* 8 x 8 characters */
256, /* 256 characters */
@ -252,16 +253,16 @@ static const gfx_layout pcm_charlayout =
};
static GFXDECODE_START( gfx_pcm )
GFXDECODE_ENTRY( "chargen", 0x0000, pcm_charlayout, 0, 1 )
GFXDECODE_ENTRY( "chargen", 0x0000, charlayout, 0, 1 )
GFXDECODE_END
void pcm_state::pcm(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, XTAL(10'000'000) /4);
m_maincpu->set_addrmap(AS_PROGRAM, &pcm_state::pcm_mem);
m_maincpu->set_addrmap(AS_IO, &pcm_state::pcm_io);
m_maincpu->set_daisy_config(pcm_daisy_chain);
m_maincpu->set_addrmap(AS_PROGRAM, &pcm_state::mem_map);
m_maincpu->set_addrmap(AS_IO, &pcm_state::io_map);
m_maincpu->set_daisy_config(daisy_chain);
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
@ -290,8 +291,8 @@ void pcm_state::pcm(machine_config &config)
Z80PIO(config, m_pio_s, XTAL(10'000'000)/4);
m_pio_s->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
m_pio_s->in_pa_callback().set(K7659_KEYBOARD_TAG, FUNC(k7659_keyboard_device::read));
m_pio_s->in_pb_callback().set(FUNC(pcm_state::pcm_85_r));
m_pio_s->out_pb_callback().set(FUNC(pcm_state::pcm_85_w));
m_pio_s->in_pb_callback().set(FUNC(pcm_state::port85_r));
m_pio_s->out_pb_callback().set(FUNC(pcm_state::port85_w));
Z80SIO(config, "sio", XTAL(10'000'000) /4);
@ -303,7 +304,7 @@ void pcm_state::pcm(machine_config &config)
m_ctc_s->zc_callback<0>().set("sio", FUNC(z80sio_device::rxca_w));
m_ctc_s->zc_callback<0>().append("sio", FUNC(z80sio_device::txca_w));
m_ctc_s->zc_callback<1>().set("sio", FUNC(z80sio_device::rxtxcb_w));
m_ctc_s->zc_callback<2>().set(FUNC(pcm_state::pcm_82_w)); // speaker
m_ctc_s->zc_callback<2>().set(FUNC(pcm_state::port82_w)); // speaker
}
/* ROM definition */
@ -332,4 +333,4 @@ ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
COMP( 1988, pcm, 0, 0, pcm, pcm, pcm_state, empty_init, "Mugler/Mathes", "PC/M", 0)
COMP( 1988, pcm, 0, 0, pcm, pcm, pcm_state, empty_init, "Mugler/Mathes", "PC/M", MACHINE_SUPPORTS_SAVE )

View File

@ -80,6 +80,8 @@ public:
pimps_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_rom(*this, "roms")
, m_ram(*this, "mainram")
{ }
void pimps(machine_config &config);
@ -89,14 +91,16 @@ private:
void mem_map(address_map &map);
virtual void machine_reset() override;
memory_passthrough_handler *m_rom_shadow_tap;
required_device<cpu_device> m_maincpu;
required_region_ptr<u8> m_rom;
required_shared_ptr<u8> m_ram;
};
void pimps_state::mem_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0xefff).ram();
map(0x0000, 0xefff).ram().share("mainram");
map(0xf000, 0xffff).rom().region("roms", 0);
}
@ -114,7 +118,22 @@ INPUT_PORTS_END
void pimps_state::machine_reset()
{
m_maincpu->set_pc(0xf000);
address_space &program = m_maincpu->space(AS_PROGRAM);
program.install_rom(0x0000, 0x07ff, m_rom); // do it here for F3
m_rom_shadow_tap = program.install_read_tap(0xf000, 0xf7ff, "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, 0x07ff, m_ram);
}
// return the original data
return data;
});
}
// baud is not documented, we will use 9600
@ -163,11 +182,11 @@ void pimps_state::pimps(machine_config &config)
/* ROM definition */
ROM_START( pimps )
ROM_REGION( 0x1000, "roms", ROMREGION_ERASEFF )
ROM_REGION( 0x1000, "roms", 0 )
ROM_LOAD( "pimps.bin", 0x0000, 0x1000, CRC(5da1898f) SHA1(d20e31d0981a1f54c83186dbdfcf4280e49970d0))
ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS */
COMP( 197?, pimps, 0, 0, pimps, pimps, pimps_state, empty_init, "Henry Colford", "P.I.M.P.S.", MACHINE_NO_SOUND_HW) // terminal beeps
COMP( 197?, pimps, 0, 0, pimps, pimps, pimps_state, empty_init, "Henry Colford", "P.I.M.P.S.", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE ) // terminal beeps

View File

@ -68,26 +68,26 @@ public:
, m_maincpu(*this, "maincpu")
, m_videocpu(*this, "videocpu")
, m_terminal(*this, "terminal")
, m_keyboard(*this, "X%u", 0)
, m_keyboard(*this, "X%u", 0U)
{ }
void sbc6510(machine_config &config);
private:
uint8_t a2_r();
void a2_w(uint8_t data);
uint8_t psg_a_r();
uint8_t psg_b_r();
void key_w(uint8_t data);
uint8_t key_r();
u8 a2_r();
void a2_w(u8 data);
u8 psg_a_r();
u8 psg_b_r();
void key_w(u8 data);
u8 key_r();
void sbc6510_mem(address_map &map);
void sbc6510_video_data(address_map &map);
void sbc6510_video_io(address_map &map);
void sbc6510_video_mem(address_map &map);
void main_mem_map(address_map &map);
void video_data_map(address_map &map);
void video_io_map(address_map &map);
void video_mem_map(address_map &map);
uint8_t m_key_row;
uint8_t m_2;
u8 m_key_row;
u8 m_2;
virtual void machine_start() override;
virtual void machine_reset() override;
required_device<cpu_device> m_maincpu;
@ -97,7 +97,7 @@ private:
};
void sbc6510_state::sbc6510_mem(address_map &map)
void sbc6510_state::main_mem_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x0001).ram();
@ -106,20 +106,20 @@ void sbc6510_state::sbc6510_mem(address_map &map)
map(0xe000, 0xe00f).mirror(0x1f0).rw("cia6526", FUNC(mos6526_device::read), FUNC(mos6526_device::write));
map(0xe800, 0xe800).mirror(0x1ff).w("ay8910", FUNC(ay8910_device::address_w));
map(0xea00, 0xea00).mirror(0x1ff).rw("ay8910", FUNC(ay8910_device::data_r), FUNC(ay8910_device::data_w));
map(0xf000, 0xffff).rom();
map(0xf000, 0xffff).rom().region("maincpu",0);
}
void sbc6510_state::sbc6510_video_mem(address_map &map)
void sbc6510_state::video_mem_map(address_map &map)
{
map(0x0000, 0x1fff).rom();
}
void sbc6510_state::sbc6510_video_data(address_map &map)
void sbc6510_state::video_data_map(address_map &map)
{
map(0x0100, 0x04ff).ram();
}
void sbc6510_state::sbc6510_video_io(address_map &map)
void sbc6510_state::video_io_map(address_map &map)
{
}
@ -213,12 +213,12 @@ static INPUT_PORTS_START( sbc6510 ) // cbm keyboard
INPUT_PORTS_END
uint8_t sbc6510_state::a2_r()
u8 sbc6510_state::a2_r()
{
return m_2;
}
void sbc6510_state::a2_w(uint8_t data)
void sbc6510_state::a2_w(u8 data)
{
m_2 = data;
m_terminal->write(data);
@ -226,6 +226,8 @@ void sbc6510_state::a2_w(uint8_t data)
void sbc6510_state::machine_start()
{
save_item(NAME(m_key_row));
save_item(NAME(m_2));
}
@ -233,17 +235,17 @@ void sbc6510_state::machine_reset()
{
}
uint8_t sbc6510_state::psg_a_r()
u8 sbc6510_state::psg_a_r()
{
return 0xff;
}
uint8_t sbc6510_state::psg_b_r()
u8 sbc6510_state::psg_b_r()
{
return 0x7f;
}
uint8_t sbc6510_state::key_r()
u8 sbc6510_state::key_r()
{
u8 i, data=0;
@ -254,7 +256,7 @@ uint8_t sbc6510_state::key_r()
return ~data;
}
void sbc6510_state::key_w(uint8_t data)
void sbc6510_state::key_w(u8 data)
{
m_key_row = data;
}
@ -280,12 +282,12 @@ void sbc6510_state::sbc6510(machine_config &config)
{
/* basic machine hardware */
M6510(config, m_maincpu, XTAL(1'000'000));
m_maincpu->set_addrmap(AS_PROGRAM, &sbc6510_state::sbc6510_mem);
m_maincpu->set_addrmap(AS_PROGRAM, &sbc6510_state::main_mem_map);
ATMEGA88(config, m_videocpu, XTAL(16'000'000)); // Video CPU trips SLEEP opcode, needs to be emulated
m_videocpu->set_addrmap(AS_PROGRAM, &sbc6510_state::sbc6510_video_mem);
m_videocpu->set_addrmap(AS_DATA, &sbc6510_state::sbc6510_video_data);
m_videocpu->set_addrmap(AS_IO, &sbc6510_state::sbc6510_video_io);
m_videocpu->set_addrmap(AS_PROGRAM, &sbc6510_state::video_mem_map);
m_videocpu->set_addrmap(AS_DATA, &sbc6510_state::video_data_map);
m_videocpu->set_addrmap(AS_IO, &sbc6510_state::video_io_map);
m_videocpu->set_eeprom_tag("eeprom");
PALETTE(config, "palette", palette_device::MONOCHROME); // for F4 displayer only
@ -311,16 +313,19 @@ void sbc6510_state::sbc6510(machine_config &config)
/* ROM definition */
ROM_START( sbc6510 )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "sbc6510.rom", 0xf000, 0x1000, CRC(e13a5e62) SHA1(1e7482e9b98b39d0cc456254fbe8fd0981e9377e))
ROM_REGION( 0x10000, "videocpu", ROMREGION_ERASEFF ) // ATMEGA8 at 16MHz
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "sbc6510.rom", 0x0000, 0x1000, CRC(e13a5e62) SHA1(1e7482e9b98b39d0cc456254fbe8fd0981e9377e))
ROM_REGION( 0x2000, "videocpu", 0 ) // ATMEGA8 at 16MHz
ROM_LOAD( "video.bin", 0x0000, 0x2000, CRC(809f31ce) SHA1(4639de5f7b8f6c036d74f217ba85e7e897039094))
ROM_REGION( 0x200, "gal", ROMREGION_ERASEFF )
ROM_REGION( 0x0200, "gal", ROMREGION_ERASEFF )
ROM_LOAD( "sbc6510.gal", 0x0000, 0x0117, CRC(f78f9927) SHA1(b951163958f5722032826d0d17a07c81dbd5f68e))
ROM_REGION( 0x2000, "eeprom", ROMREGION_ERASEFF )
ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
COMP( 2009, sbc6510, 0, 0, sbc6510, sbc6510, sbc6510_state, empty_init, "Josip Perusanec", "SBC6510", MACHINE_NOT_WORKING )
COMP( 2009, sbc6510, 0, 0, sbc6510, sbc6510, sbc6510_state, empty_init, "Josip Perusanec", "SBC6510", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )

View File

@ -72,8 +72,8 @@ private:
virtual void machine_start() override;
virtual void machine_reset() override;
void sv8000_io(address_map &map);
void sv8000_mem(address_map &map);
void io_map(address_map &map);
void mem_map(address_map &map);
required_device<cpu_device> m_maincpu;
required_device<s68047_device> m_s68047p;
@ -98,7 +98,7 @@ private:
};
void sv8000_state::sv8000_mem(address_map &map)
void sv8000_state::mem_map(address_map &map)
{
map.unmap_value_high();
//map(0x0000, 0x0fff) // mapped by the cartslot
@ -107,7 +107,7 @@ void sv8000_state::sv8000_mem(address_map &map)
}
void sv8000_state::sv8000_io(address_map &map)
void sv8000_state::io_map(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xff);
@ -172,15 +172,6 @@ INPUT_PORTS_END
void sv8000_state::machine_start()
{
m_ag = 0;
m_gm2 = 0;
m_gm1 = 0;
m_gm0 = 0;
m_as = 0;
m_css = 0;
m_intext = 0;
m_inv = 0;
if (m_cart->exists())
m_maincpu->space(AS_PROGRAM).install_read_handler(0x0000, 0x0fff, read8sm_delegate(*m_cart, FUNC(generic_slot_device::read_rom)));
@ -199,6 +190,14 @@ void sv8000_state::machine_start()
void sv8000_state::machine_reset()
{
m_column = 0xff;
m_ag = 0;
m_gm2 = 0;
m_gm1 = 0;
m_gm0 = 0;
m_as = 0;
m_css = 0;
m_intext = 0;
m_inv = 0;
}
@ -238,15 +237,15 @@ uint8_t sv8000_state::i8255_portb_r()
//logerror("i8255_portb_r\n");
if (!(m_column & 0x01))
if (!BIT(m_column, 0))
{
data &= m_io_row0->read();
}
if (!(m_column & 0x02))
if (!BIT(m_column, 1))
{
data &= m_io_row1->read();
}
if (!(m_column & 0x04))
if (!BIT(m_column, 2))
{
data &= m_io_row2->read();
}
@ -378,8 +377,8 @@ void sv8000_state::sv8000(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, XTAL(10'738'635)/3); /* Not verified */
m_maincpu->set_addrmap(AS_PROGRAM, &sv8000_state::sv8000_mem);
m_maincpu->set_addrmap(AS_IO, &sv8000_state::sv8000_io);
m_maincpu->set_addrmap(AS_PROGRAM, &sv8000_state::mem_map);
m_maincpu->set_addrmap(AS_IO, &sv8000_state::io_map);
m_maincpu->set_vblank_int("screen", FUNC(sv8000_state::irq0_line_hold));
i8255_device &ppi(I8255(config, "i8255"));
@ -424,4 +423,4 @@ ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS */
CONS( 1979, sv8000, 0, 0, sv8000, sv8000, sv8000_state, empty_init, "Bandai", "Super Vision 8000 (TV Jack 8000)", 0 )
CONS( 1979, sv8000, 0, 0, sv8000, sv8000, sv8000_state, empty_init, "Bandai", "Super Vision 8000 (TV Jack 8000)", MACHINE_SUPPORTS_SAVE )