diff options
Diffstat (limited to 'src/mame/drivers/ampro.cpp')
-rw-r--r-- | src/mame/drivers/ampro.cpp | 71 |
1 files changed, 40 insertions, 31 deletions
diff --git a/src/mame/drivers/ampro.cpp b/src/mame/drivers/ampro.cpp index 11af05c9dd6..f276f6c50a0 100644 --- a/src/mame/drivers/ampro.cpp +++ b/src/mame/drivers/ampro.cpp @@ -38,21 +38,21 @@ public: ampro_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_ram(*this, "mainram") , m_dart(*this, "dart") , m_ctc(*this, "ctc") , m_fdc(*this, "fdc") , m_floppy0(*this, "fdc:0") + , m_floppy1(*this, "fdc:1") + , m_floppy2(*this, "fdc:2") + , m_floppy3(*this, "fdc:3") , m_ncr(*this, "scsi:7:ncr") , m_printer(*this, "printer") { } void ampro(machine_config &config); - void init_ampro(); - -protected: - virtual void machine_reset() override; - private: TIMER_DEVICE_CALLBACK_MEMBER(ctc_tick); void port00_w(uint8_t data); @@ -62,21 +62,29 @@ private: uint8_t dart_r(offs_t offset); void ctc_w(offs_t offset, uint8_t data); void dart_w(offs_t offset, uint8_t data); + void machine_reset() override; + void machine_start() override; - void ampro_io(address_map &map); - void ampro_mem(address_map &map); + void io_map(address_map &map); + void mem_map(address_map &map); + bool m_rom_in_map; required_device<z80_device> m_maincpu; + required_region_ptr<u8> m_rom; + required_shared_ptr<u8> m_ram; required_device<z80dart_device> m_dart; required_device<z80ctc_device> m_ctc; required_device<wd1772_device> m_fdc; required_device<floppy_connector> m_floppy0; + required_device<floppy_connector> m_floppy1; + required_device<floppy_connector> m_floppy2; + required_device<floppy_connector> m_floppy3; required_device<ncr5380n_device> m_ncr; required_device<centronics_device> m_printer; }; /* -d0..d3 Drive select 0-3 (we only emulate 1 drive) +d0..d3 Drive select 0-3 d4 Side select 0=side0 d5 /DDEN d6 Banking 0=rom @@ -84,10 +92,13 @@ d7 FDC master clock 0=8MHz 1=16MHz (for 20cm disks, not emulated) */ void ampro_state::port00_w(uint8_t data) { - membank("bankr0")->set_entry(BIT(data, 6)); + m_rom_in_map = BIT(~data, 6); m_fdc->dden_w(BIT(data, 5)); floppy_image_device *floppy = nullptr; if (BIT(data, 0)) floppy = m_floppy0->get_device(); + if (BIT(data, 1)) floppy = m_floppy1->get_device(); + if (BIT(data, 2)) floppy = m_floppy2->get_device(); + if (BIT(data, 3)) floppy = m_floppy3->get_device(); m_fdc->set_floppy(floppy); if (floppy) floppy->ss_w(BIT(data, 4)); @@ -123,14 +134,13 @@ void ampro_state::dart_w(offs_t offset, uint8_t data) m_dart->ba_cd_w(offset>>2, data); } -void ampro_state::ampro_mem(address_map &map) +void ampro_state::mem_map(address_map &map) { - map.unmap_value_high(); - map(0x0000, 0x0fff).bankr("bankr0").bankw("bankw0"); - map(0x1000, 0xffff).ram(); + map(0x0000, 0xffff).ram().share("mainram"); + map(0x0000, 0x0fff).lr8(NAME([this] (offs_t offset) { if(m_rom_in_map) return m_rom[offset]; else return m_ram[offset]; })); } -void ampro_state::ampro_io(address_map &map) +void ampro_state::io_map(address_map &map) { map.unmap_value_high(); map.global_mask(0xff); @@ -178,29 +188,25 @@ static INPUT_PORTS_START( ampro ) PORT_DIPSETTING(0x07, "7") INPUT_PORTS_END -void ampro_state::machine_reset() +void ampro_state::machine_start() { - membank("bankw0")->set_entry(0); // always write to ram - - port00_w(0); - clear_strobe(0); + save_item(NAME(m_rom_in_map)); } -void ampro_state::init_ampro() +void ampro_state::machine_reset() { - uint8_t *main = memregion("maincpu")->base(); + m_rom_in_map = 1; - membank("bankr0")->configure_entry(1, &main[0x0000]); - membank("bankr0")->configure_entry(0, &main[0x10000]); - membank("bankw0")->configure_entry(0, &main[0x0000]); + port00_w(0); + clear_strobe(0); } void ampro_state::ampro(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, 16_MHz_XTAL / 4); - m_maincpu->set_addrmap(AS_PROGRAM, &ro_state::ampro_mem); - m_maincpu->set_addrmap(AS_IO, &ro_state::ampro_io); + m_maincpu->set_addrmap(AS_PROGRAM, &ro_state::mem_map); + m_maincpu->set_addrmap(AS_IO, &ro_state::io_map); m_maincpu->set_daisy_config(daisy_chain_intf); /* Devices */ @@ -237,6 +243,9 @@ void ampro_state::ampro(machine_config &config) //m_fdc->drq_wr_callback().set(m_dart, FUNC(z80dart_device::ria_w)); // only if JMP7 shorted m_fdc->ready_wr_callback().set(m_dart, FUNC(z80dart_device::dcdb_w)); // actually from the drive, and not used by the FDC at all FLOPPY_CONNECTOR(config, "fdc:0", ampro_floppies, "525dd", floppy_image_device::default_floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, "fdc:1", ampro_floppies, "525dd", floppy_image_device::default_floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, "fdc:2", ampro_floppies, "525dd", floppy_image_device::default_floppy_formats).enable_sound(true); + FLOPPY_CONNECTOR(config, "fdc:3", ampro_floppies, "525dd", floppy_image_device::default_floppy_formats).enable_sound(true); SOFTWARE_LIST(config, "flop_list").set_original("ampro"); NSCSI_BUS(config, "scsi"); @@ -255,16 +264,16 @@ void ampro_state::ampro(machine_config &config) /* ROM definition */ ROM_START( ampro ) - ROM_REGION( 0x11000, "maincpu", ROMREGION_ERASEFF ) + ROM_REGION( 0x1000, "maincpu", 0 ) ROM_SYSTEM_BIOS( 0, "mntr", "Monitor") - ROMX_LOAD( "mntr", 0x10000, 0x1000, CRC(d59d0909) SHA1(936410f414b1e71445253840eea0045545e4ff0b), ROM_BIOS(0)) + ROMX_LOAD( "mntr", 0x0000, 0x1000, CRC(d59d0909) SHA1(936410f414b1e71445253840eea0045545e4ff0b), ROM_BIOS(0)) ROM_SYSTEM_BIOS( 1, "boot", "Boot") - ROMX_LOAD( "boot", 0x10000, 0x1000, CRC(b3524046) SHA1(5466f7d28c1a04cfbf328095cb35ad1525e91f44), ROM_BIOS(1)) + ROMX_LOAD( "boot", 0x0000, 0x1000, CRC(b3524046) SHA1(5466f7d28c1a04cfbf328095cb35ad1525e91f44), ROM_BIOS(1)) ROM_SYSTEM_BIOS( 2, "scsi", "SCSI Boot") - ROMX_LOAD( "scsi", 0x10000, 0x1000, CRC(8eb20e5d) SHA1(0ab1ff65cf6d3c1a713a8ac5c1ee4c662ac3da0c), ROM_BIOS(2)) + ROMX_LOAD( "scsi", 0x0000, 0x1000, CRC(8eb20e5d) SHA1(0ab1ff65cf6d3c1a713a8ac5c1ee4c662ac3da0c), ROM_BIOS(2)) ROM_END /* Driver */ // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP( 1980, ampro, 0, 0, ampro, ampro, ampro_state, init_ampro, "Ampro", "Little Z80 Board", 0 ) +COMP( 1980, ampro, 0, 0, ampro, ampro, ampro_state, empty_init, "Ampro", "Little Z80 Board", MACHINE_SUPPORTS_SAVE ) |