mirror of
https://github.com/holub/mame
synced 2025-04-24 17:30:55 +03:00
(nw) even more cleanups
This commit is contained in:
parent
aa49b3a8b5
commit
f114358821
@ -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 )
|
||||
|
@ -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 )
|
||||
|
@ -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));
|
||||
|
@ -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 )
|
||||
|
@ -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 )
|
||||
|
@ -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 )
|
||||
|
@ -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
|
||||
|
@ -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 )
|
||||
|
@ -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 )
|
||||
|
Loading…
Reference in New Issue
Block a user