From b3c4ab5ebb5a4d7a94f1616d3f8100b457d02cd9 Mon Sep 17 00:00:00 2001 From: Curt Coder Date: Thu, 9 May 2019 22:14:16 +0300 Subject: c64: Added Westfalia Technica 1541 clone ROM [Curt Coder, dec_hl] --- src/devices/bus/cbmiec/c1541.cpp | 279 +++++++++++++++++++++----------------- src/devices/bus/cbmiec/c1541.h | 121 +++++++++-------- src/devices/bus/cbmiec/cbmiec.cpp | 1 + 3 files changed, 223 insertions(+), 178 deletions(-) diff --git a/src/devices/bus/cbmiec/c1541.cpp b/src/devices/bus/cbmiec/c1541.cpp index 30b5eb8f255..3868c55618f 100644 --- a/src/devices/bus/cbmiec/c1541.cpp +++ b/src/devices/bus/cbmiec/c1541.cpp @@ -161,18 +161,19 @@ // DEVICE DEFINITIONS //************************************************************************** -DEFINE_DEVICE_TYPE(C1540, c1540_device, "c1540", "Commodore 1540 Disk Drive") -DEFINE_DEVICE_TYPE(C1541, c1541_device, "c1541", "Commodore 1541 Disk Drive") -DEFINE_DEVICE_TYPE(C1541C, c1541c_device, "c1541c", "Commodore 1541C Disk Drive") -DEFINE_DEVICE_TYPE(C1541II, c1541ii_device, "c1541ii", "Commodore 1541-II Disk Drive") -DEFINE_DEVICE_TYPE(SX1541, sx1541_device, "sx1541", "SX1541 Disk Drive") -DEFINE_DEVICE_TYPE(FSD1, fsd1_device, "fsd1", "FSD-1 Disk Drive") -DEFINE_DEVICE_TYPE(FSD2, fsd2_device, "fsd2", "FSD-2 Disk Drive") -DEFINE_DEVICE_TYPE(CSD1, csd1_device, "csd1", "CSD-1 Disk Drive") -DEFINE_DEVICE_TYPE(C1541_DOLPHIN_DOS, c1541_dolphin_dos_device, "c1541dd", "Commodore 1541 Dolphin-DOS 2.0 Disk Drive") -DEFINE_DEVICE_TYPE(C1541_PROFESSIONAL_DOS_V1, c1541_professional_dos_v1_device, "c1541pd", "Commodore 1541 Professional-DOS v1 Disk Drive") -DEFINE_DEVICE_TYPE(C1541_PROLOGIC_DOS_CLASSIC, c1541_prologic_dos_classic_device, "c1541pdc", "Commodore 1541 ProLogic-DOS Classic Disk Drive") -DEFINE_DEVICE_TYPE(INDUS_GT, indus_gt_device, "indusgt", "Indus GT Disk Drive") +DEFINE_DEVICE_TYPE(C1540, c1540_t, "c1540", "Commodore 1540 Disk Drive") +DEFINE_DEVICE_TYPE(C1541, c1541_t, "c1541", "Commodore 1541 Disk Drive") +DEFINE_DEVICE_TYPE(C1541C, c1541c_t, "c1541c", "Commodore 1541C Disk Drive") +DEFINE_DEVICE_TYPE(C1541II, c1541ii_t, "c1541ii", "Commodore 1541-II Disk Drive") +DEFINE_DEVICE_TYPE(SX1541, sx1541_t, "sx1541", "SX1541 Disk Drive") +DEFINE_DEVICE_TYPE(FSD1, fsd1_t, "fsd1", "FSD-1 Disk Drive") +DEFINE_DEVICE_TYPE(FSD2, fsd2_t, "fsd2", "FSD-2 Disk Drive") +DEFINE_DEVICE_TYPE(CSD1, csd1_t, "csd1", "CSD-1 Disk Drive") +DEFINE_DEVICE_TYPE(C1541_DOLPHIN_DOS, c1541_dolphin_dos_t, "c1541dd", "Commodore 1541 Dolphin-DOS 2.0 Disk Drive") +DEFINE_DEVICE_TYPE(C1541_PROFESSIONAL_DOS_V1, c1541_professional_dos_v1_t, "c1541pd", "Commodore 1541 Professional-DOS v1 Disk Drive") +DEFINE_DEVICE_TYPE(C1541_PROLOGIC_DOS_CLASSIC, c1541_prologic_dos_classic_t, "c1541pdc", "Commodore 1541 ProLogic-DOS Classic Disk Drive") +DEFINE_DEVICE_TYPE(INDUS_GT, indus_gt_t, "indusgt", "Indus GT Disk Drive") +DEFINE_DEVICE_TYPE(TECHNICA, technica_t, "technica", "Westfalia Technica Disk Drive") //------------------------------------------------- @@ -190,7 +191,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *c1540_device::device_rom_region() const +const tiny_rom_entry *c1540_t::device_rom_region() const { return ROM_NAME( c1540 ); } @@ -234,7 +235,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *c1541_device::device_rom_region() const +const tiny_rom_entry *c1541_t::device_rom_region() const { return ROM_NAME( c1541 ); } @@ -258,7 +259,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *c1541c_device::device_rom_region() const +const tiny_rom_entry *c1541c_t::device_rom_region() const { return ROM_NAME( c1541c ); } @@ -284,7 +285,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *c1541ii_device::device_rom_region() const +const tiny_rom_entry *c1541ii_t::device_rom_region() const { return ROM_NAME( c1541ii ); } @@ -312,7 +313,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *sx1541_device::device_rom_region() const +const tiny_rom_entry *sx1541_t::device_rom_region() const { return ROM_NAME( sx1541 ); } @@ -332,7 +333,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *fsd1_device::device_rom_region() const +const tiny_rom_entry *fsd1_t::device_rom_region() const { return ROM_NAME( fsd1 ); } @@ -360,7 +361,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *fsd2_device::device_rom_region() const +const tiny_rom_entry *fsd2_t::device_rom_region() const { return ROM_NAME( fsd2 ); } @@ -381,7 +382,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *csd1_device::device_rom_region() const +const tiny_rom_entry *csd1_t::device_rom_region() const { return ROM_NAME( csd1 ); } @@ -401,7 +402,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *c1541_dolphin_dos_device::device_rom_region() const +const tiny_rom_entry *c1541_dolphin_dos_t::device_rom_region() const { return ROM_NAME( c1541dd ); } @@ -422,7 +423,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *c1541_professional_dos_v1_device::device_rom_region() const +const tiny_rom_entry *c1541_professional_dos_v1_t::device_rom_region() const { return ROM_NAME( c1541pd ); } @@ -447,7 +448,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *c1541_prologic_dos_classic_device::device_rom_region() const +const tiny_rom_entry *c1541_prologic_dos_classic_t::device_rom_region() const { return ROM_NAME( c1541pdc ); } @@ -471,17 +472,37 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *indus_gt_device::device_rom_region() const +const tiny_rom_entry *indus_gt_t::device_rom_region() const { return ROM_NAME( indusgt ); } +//------------------------------------------------- +// ROM( technica ) +//------------------------------------------------- + +ROM_START( technica ) + ROM_REGION( 0x4000, M6502_TAG, 0 ) // data lines should be scrambled + ROM_LOAD( "technica dos plus.bin", 0x0000, 0x4000, BAD_DUMP CRC(6a1ef3ff) SHA1(1aaa52ed4a3f120ec8664bcefec890c7f9aaecf2) ) +ROM_END + + +//------------------------------------------------- +// rom_region - device-specific ROM region +//------------------------------------------------- + +const tiny_rom_entry *technica_t::device_rom_region() const +{ + return ROM_NAME( technica ); +} + + //------------------------------------------------- // read - //------------------------------------------------- -READ8_MEMBER( c1541_prologic_dos_classic_device::read ) +READ8_MEMBER( c1541_prologic_dos_classic_t::read ) { return 0; } @@ -491,7 +512,7 @@ READ8_MEMBER( c1541_prologic_dos_classic_device::read ) // write - //------------------------------------------------- -WRITE8_MEMBER( c1541_prologic_dos_classic_device::write ) +WRITE8_MEMBER( c1541_prologic_dos_classic_t::write ) { } @@ -500,7 +521,7 @@ WRITE8_MEMBER( c1541_prologic_dos_classic_device::write ) // ADDRESS_MAP( c1541_mem ) //------------------------------------------------- -void c1541_device_base::c1541_mem(address_map &map) +void c1541_base_t::c1541_mem(address_map &map) { map(0x0000, 0x07ff).mirror(0x6000).ram(); map(0x1800, 0x180f).mirror(0x63f0).rw(M6522_0_TAG, FUNC(via6522_device::read), FUNC(via6522_device::write)); @@ -513,7 +534,7 @@ void c1541_device_base::c1541_mem(address_map &map) // ADDRESS_MAP( c1541dd_mem ) //------------------------------------------------- -void c1541_device_base::c1541dd_mem(address_map &map) +void c1541_base_t::c1541dd_mem(address_map &map) { map(0x0000, 0x07ff).mirror(0x6000).ram(); map(0x1800, 0x180f).mirror(0x63f0).rw(M6522_0_TAG, FUNC(via6522_device::read), FUNC(via6522_device::write)); @@ -527,7 +548,7 @@ void c1541_device_base::c1541dd_mem(address_map &map) // ADDRESS_MAP( c1541pd_mem ) //------------------------------------------------- -void c1541_device_base::c1541pd_mem(address_map &map) +void c1541_base_t::c1541pd_mem(address_map &map) { map(0x0000, 0x07ff).mirror(0x6000).ram(); map(0x1800, 0x180f).mirror(0x63f0).rw(M6522_0_TAG, FUNC(via6522_device::read), FUNC(via6522_device::write)); @@ -542,9 +563,9 @@ void c1541_device_base::c1541pd_mem(address_map &map) // ADDRESS_MAP( c1541pdc_mem ) //------------------------------------------------- -void c1541_prologic_dos_classic_device::c1541pdc_mem(address_map &map) +void c1541_prologic_dos_classic_t::c1541pdc_mem(address_map &map) { - map(0x0000, 0xffff).rw(FUNC(c1541_prologic_dos_classic_device::read), FUNC(c1541_prologic_dos_classic_device::write)); + map(0x0000, 0xffff).rw(FUNC(c1541_prologic_dos_classic_t::read), FUNC(c1541_prologic_dos_classic_t::write)); /* AM_RANGE(0x0000, 0x07ff) AM_MIRROR(0x6000) AM_RAM AM_SHARE("share1") AM_RANGE(0x1800, 0x180f) AM_MIRROR(0x63f0) AM_DEVREADWRITE(M6522_0_TAG, via6522_device, read, write) AM_RANGE(0x1c00, 0x1c0f) AM_MIRROR(0x63f0) AM_DEVREADWRITE(M6522_1_TAG, via6522_device, read, write) @@ -556,20 +577,20 @@ void c1541_prologic_dos_classic_device::c1541pdc_mem(address_map &map) } -WRITE_LINE_MEMBER( c1541_device_base::via0_irq_w ) +WRITE_LINE_MEMBER( c1541_base_t::via0_irq_w ) { m_via0_irq = state; m_maincpu->set_input_line(INPUT_LINE_IRQ0, (m_via0_irq || m_via1_irq) ? ASSERT_LINE : CLEAR_LINE); } -READ8_MEMBER( c1541_device_base::via0_pa_r ) +READ8_MEMBER( c1541_base_t::via0_pa_r ) { // dummy read to acknowledge ATN IN interrupt return m_parallel_data; } -WRITE8_MEMBER( c1541_device_base::via0_pa_w ) +WRITE8_MEMBER( c1541_base_t::via0_pa_w ) { if (m_other != nullptr) { @@ -577,7 +598,7 @@ WRITE8_MEMBER( c1541_device_base::via0_pa_w ) } } -READ8_MEMBER( c1541_device_base::via0_pb_r ) +READ8_MEMBER( c1541_base_t::via0_pb_r ) { /* @@ -611,7 +632,7 @@ READ8_MEMBER( c1541_device_base::via0_pb_r ) return data; } -WRITE8_MEMBER( c1541_device_base::via0_pb_w ) +WRITE8_MEMBER( c1541_base_t::via0_pb_w ) { /* @@ -638,7 +659,7 @@ WRITE8_MEMBER( c1541_device_base::via0_pb_w ) m_bus->clk_w(this, !BIT(data, 3)); } -WRITE_LINE_MEMBER( c1541_device_base::via0_ca2_w ) +WRITE_LINE_MEMBER( c1541_base_t::via0_ca2_w ) { if (m_other != nullptr) { @@ -646,7 +667,7 @@ WRITE_LINE_MEMBER( c1541_device_base::via0_ca2_w ) } } -READ8_MEMBER( c1541c_device::via0_pa_r ) +READ8_MEMBER( c1541c_t::via0_pa_r ) { /* @@ -667,14 +688,14 @@ READ8_MEMBER( c1541c_device::via0_pa_r ) } -WRITE_LINE_MEMBER( c1541_device_base::via1_irq_w ) +WRITE_LINE_MEMBER( c1541_base_t::via1_irq_w ) { m_via1_irq = state; m_maincpu->set_input_line(INPUT_LINE_IRQ0, (m_via0_irq || m_via1_irq) ? ASSERT_LINE : CLEAR_LINE); } -READ8_MEMBER( c1541_device_base::via1_pb_r ) +READ8_MEMBER( c1541_base_t::via1_pb_r ) { /* @@ -702,7 +723,7 @@ READ8_MEMBER( c1541_device_base::via1_pb_r ) return data; } -WRITE8_MEMBER( c1541_device_base::via1_pb_w ) +WRITE8_MEMBER( c1541_base_t::via1_pb_w ) { /* @@ -737,12 +758,12 @@ WRITE8_MEMBER( c1541_device_base::via1_pb_w ) // C64H156_INTERFACE( ga_intf ) //------------------------------------------------- -WRITE_LINE_MEMBER( c1541_device_base::atn_w ) +WRITE_LINE_MEMBER( c1541_base_t::atn_w ) { set_iec_data(); } -WRITE_LINE_MEMBER( c1541_device_base::byte_w ) +WRITE_LINE_MEMBER( c1541_base_t::byte_w ) { m_maincpu->set_input_line(M6502_SET_OVERFLOW, state); @@ -754,23 +775,23 @@ WRITE_LINE_MEMBER( c1541_device_base::byte_w ) // FLOPPY_FORMATS( floppy_formats ) //------------------------------------------------- -FLOPPY_FORMATS_MEMBER( c1541_device_base::floppy_formats ) +FLOPPY_FORMATS_MEMBER( c1541_base_t::floppy_formats ) FLOPPY_D64_FORMAT, FLOPPY_G64_FORMAT FLOPPY_FORMATS_END -READ8_MEMBER( c1541_prologic_dos_classic_device::pia_r ) +READ8_MEMBER( c1541_prologic_dos_classic_t::pia_r ) { return m_pia->read((offset >> 2) & 0x03); } -WRITE8_MEMBER( c1541_prologic_dos_classic_device::pia_w ) +WRITE8_MEMBER( c1541_prologic_dos_classic_t::pia_w ) { m_pia->write((offset >> 2) & 0x03, data); } -WRITE8_MEMBER( c1541_prologic_dos_classic_device::pia_pa_w ) +WRITE8_MEMBER( c1541_prologic_dos_classic_t::pia_pa_w ) { /* @@ -788,12 +809,12 @@ WRITE8_MEMBER( c1541_prologic_dos_classic_device::pia_pa_w ) */ } -READ8_MEMBER( c1541_prologic_dos_classic_device::pia_pb_r ) +READ8_MEMBER( c1541_prologic_dos_classic_t::pia_pb_r ) { return m_parallel_data; } -WRITE8_MEMBER( c1541_prologic_dos_classic_device::pia_pb_w ) +WRITE8_MEMBER( c1541_prologic_dos_classic_t::pia_pb_w ) { m_parallel_data = data; @@ -805,71 +826,71 @@ WRITE8_MEMBER( c1541_prologic_dos_classic_device::pia_pb_w ) // device_add_mconfig - add device configuration //------------------------------------------------- -void c1541_device_base::device_add_mconfig(machine_config &config) +void c1541_base_t::device_add_mconfig(machine_config &config) { M6502(config, m_maincpu, XTAL(16'000'000)/16); - m_maincpu->set_addrmap(AS_PROGRAM, &c1541_device_base::c1541_mem); + m_maincpu->set_addrmap(AS_PROGRAM, &c1541_base_t::c1541_mem); config.m_perfect_cpu_quantum = subtag(M6502_TAG); VIA6522(config, m_via0, XTAL(16'000'000)/16); - m_via0->readpa_handler().set(FUNC(c1541_device_base::via0_pa_r)); - m_via0->readpb_handler().set(FUNC(c1541_device_base::via0_pb_r)); - m_via0->writepa_handler().set(FUNC(c1541_device_base::via0_pa_w)); - m_via0->writepb_handler().set(FUNC(c1541_device_base::via0_pb_w)); - m_via0->cb2_handler().set(FUNC(c1541_device_base::via0_ca2_w)); - m_via0->irq_handler().set(FUNC(c1541_device_base::via0_irq_w)); + m_via0->readpa_handler().set(FUNC(c1541_base_t::via0_pa_r)); + m_via0->readpb_handler().set(FUNC(c1541_base_t::via0_pb_r)); + m_via0->writepa_handler().set(FUNC(c1541_base_t::via0_pa_w)); + m_via0->writepb_handler().set(FUNC(c1541_base_t::via0_pb_w)); + m_via0->cb2_handler().set(FUNC(c1541_base_t::via0_ca2_w)); + m_via0->irq_handler().set(FUNC(c1541_base_t::via0_irq_w)); VIA6522(config, m_via1, XTAL(16'000'000)/16); m_via1->readpa_handler().set(C64H156_TAG, FUNC(c64h156_device::yb_r)); - m_via1->readpb_handler().set(FUNC(c1541_device_base::via1_pb_r)); + m_via1->readpb_handler().set(FUNC(c1541_base_t::via1_pb_r)); m_via1->writepa_handler().set(C64H156_TAG, FUNC(c64h156_device::yb_w)); - m_via1->writepb_handler().set(FUNC(c1541_device_base::via1_pb_w)); + m_via1->writepb_handler().set(FUNC(c1541_base_t::via1_pb_w)); m_via1->ca2_handler().set(C64H156_TAG, FUNC(c64h156_device::soe_w)); m_via1->cb2_handler().set(C64H156_TAG, FUNC(c64h156_device::oe_w)); - m_via1->irq_handler().set(FUNC(c1541_device_base::via1_irq_w)); + m_via1->irq_handler().set(FUNC(c1541_base_t::via1_irq_w)); C64H156(config, m_ga, XTAL(16'000'000)); - m_ga->atn_callback().set(FUNC(c1541_device_base::atn_w)); - m_ga->byte_callback().set(FUNC(c1541_device_base::byte_w)); + m_ga->atn_callback().set(FUNC(c1541_base_t::atn_w)); + m_ga->byte_callback().set(FUNC(c1541_base_t::byte_w)); floppy_connector &connector(FLOPPY_CONNECTOR(config, C64H156_TAG":0", 0)); connector.option_add("525ssqd", ALPS_3255190X); connector.set_default_option("525ssqd"); connector.set_fixed(true); - connector.set_formats(c1541_device_base::floppy_formats); + connector.set_formats(c1541_base_t::floppy_formats); } -void c1541c_device::device_add_mconfig(machine_config &config) +void c1541c_t::device_add_mconfig(machine_config &config) { - c1541_device_base::device_add_mconfig(config); + c1541_base_t::device_add_mconfig(config); } -void c1541_dolphin_dos_device::device_add_mconfig(machine_config &config) +void c1541_dolphin_dos_t::device_add_mconfig(machine_config &config) { - c1541_device_base::device_add_mconfig(config); - m_maincpu->set_addrmap(AS_PROGRAM, &c1541_dolphin_dos_device::c1541dd_mem); + c1541_base_t::device_add_mconfig(config); + m_maincpu->set_addrmap(AS_PROGRAM, &c1541_dolphin_dos_t::c1541dd_mem); } -void c1541_professional_dos_v1_device::device_add_mconfig(machine_config &config) +void c1541_professional_dos_v1_t::device_add_mconfig(machine_config &config) { - c1541_device_base::device_add_mconfig(config); - m_maincpu->set_addrmap(AS_PROGRAM, &c1541_professional_dos_v1_device::c1541pd_mem); + c1541_base_t::device_add_mconfig(config); + m_maincpu->set_addrmap(AS_PROGRAM, &c1541_professional_dos_v1_t::c1541pd_mem); } -void c1541_prologic_dos_classic_device::device_add_mconfig(machine_config &config) +void c1541_prologic_dos_classic_t::device_add_mconfig(machine_config &config) { - c1541_device_base::device_add_mconfig(config); + c1541_base_t::device_add_mconfig(config); - m_maincpu->set_addrmap(AS_PROGRAM, &c1541_prologic_dos_classic_device::c1541pdc_mem); + m_maincpu->set_addrmap(AS_PROGRAM, &c1541_prologic_dos_classic_t::c1541pdc_mem); PIA6821(config, m_pia, 0); - m_pia->readpb_handler().set(FUNC(c1541_prologic_dos_classic_device::pia_pb_r)); - m_pia->writepa_handler().set(FUNC(c1541_prologic_dos_classic_device::pia_pa_w)); - m_pia->writepb_handler().set(FUNC(c1541_prologic_dos_classic_device::pia_pb_w)); + m_pia->readpb_handler().set(FUNC(c1541_prologic_dos_classic_t::pia_pb_r)); + m_pia->writepa_handler().set(FUNC(c1541_prologic_dos_classic_t::pia_pa_w)); + m_pia->writepb_handler().set(FUNC(c1541_prologic_dos_classic_t::pia_pb_w)); m_pia->ca2_handler().set(CENTRONICS_TAG, FUNC(centronics_device::write_strobe)); centronics_device ¢ronics(CENTRONICS(config, CENTRONICS_TAG, centronics_devices, "printer")); @@ -898,7 +919,7 @@ INPUT_PORTS_END // input_ports - device-specific input ports //------------------------------------------------- -ioport_constructor c1541_device_base::device_input_ports() const +ioport_constructor c1541_base_t::device_input_ports() const { return INPUT_PORTS_NAME( c1541 ); } @@ -913,7 +934,7 @@ ioport_constructor c1541_device_base::device_input_ports() const // set_iec_data - //------------------------------------------------- -inline void c1541_device_base::set_iec_data() +inline void c1541_base_t::set_iec_data() { int data = !m_data_out && !m_ga->atn_r(); @@ -927,10 +948,10 @@ inline void c1541_device_base::set_iec_data() //************************************************************************** //------------------------------------------------- -// c1541_device_base - constructor +// c1541_base_t - constructor //------------------------------------------------- -c1541_device_base::c1541_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : +c1541_base_t::c1541_base_t(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, type, tag, owner, clock), device_cbm_iec_interface(mconfig, *this), device_c64_floppy_parallel_interface(mconfig, *this), @@ -949,91 +970,91 @@ c1541_device_base::c1541_device_base(const machine_config &mconfig, device_type //------------------------------------------------- -// c1540_device - constructor +// c1540_t - constructor //------------------------------------------------- -c1540_device::c1540_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_device_base(mconfig, C1540, tag, owner, clock) { } +c1540_t::c1540_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : c1541_base_t(mconfig, C1540, tag, owner, clock) { } //------------------------------------------------- -// c1541_device - constructor +// c1541_t - constructor //------------------------------------------------- -c1541_device::c1541_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_device_base(mconfig, C1541, tag, owner, clock) { } +c1541_t::c1541_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : c1541_base_t(mconfig, C1541, tag, owner, clock) { } //------------------------------------------------- -// c1541c_device - constructor +// c1541c_t - constructor //------------------------------------------------- -c1541c_device::c1541c_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_device_base(mconfig, C1541C, tag, owner, clock) { } +c1541c_t::c1541c_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : c1541_base_t(mconfig, C1541C, tag, owner, clock) { } //------------------------------------------------- -// c1541ii_device - constructor +// c1541ii_t - constructor //------------------------------------------------- -c1541ii_device::c1541ii_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_device_base(mconfig, C1541II, tag, owner, clock) { } +c1541ii_t::c1541ii_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : c1541_base_t(mconfig, C1541II, tag, owner, clock) { } //------------------------------------------------- -// sx1541_device - constructor +// sx1541_t - constructor //------------------------------------------------- -sx1541_device::sx1541_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_device_base(mconfig, SX1541, tag, owner, clock) { } +sx1541_t::sx1541_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : c1541_base_t(mconfig, SX1541, tag, owner, clock) { } //------------------------------------------------- -// fsd1_device - constructor +// fsd1_t - constructor //------------------------------------------------- -fsd1_device::fsd1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_device_base(mconfig, FSD1, tag, owner, clock) { } +fsd1_t::fsd1_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : c1541_base_t(mconfig, FSD1, tag, owner, clock) { } //------------------------------------------------- -// fsd2_device - constructor +// fsd2_t - constructor //------------------------------------------------- -fsd2_device::fsd2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_device_base(mconfig, FSD2, tag, owner, clock) { } +fsd2_t::fsd2_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : c1541_base_t(mconfig, FSD2, tag, owner, clock) { } //------------------------------------------------- -// csd1_device - constructor +// csd1_t - constructor //------------------------------------------------- -csd1_device::csd1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_device_base(mconfig, CSD1, tag, owner, clock) { } +csd1_t::csd1_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : c1541_base_t(mconfig, CSD1, tag, owner, clock) { } //------------------------------------------------- -// c1541_dolphin_dos_device - constructor +// c1541_dolphin_dos_t - constructor //------------------------------------------------- -c1541_dolphin_dos_device::c1541_dolphin_dos_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_device_base(mconfig, C1541_DOLPHIN_DOS, tag, owner, clock) { } +c1541_dolphin_dos_t::c1541_dolphin_dos_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : c1541_base_t(mconfig, C1541_DOLPHIN_DOS, tag, owner, clock) { } //------------------------------------------------- -// c1541_professional_dos_v1_device - constructor +// c1541_professional_dos_v1_t - constructor //------------------------------------------------- -c1541_professional_dos_v1_device::c1541_professional_dos_v1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_device_base(mconfig, C1541_PROFESSIONAL_DOS_V1, tag, owner, clock) { } +c1541_professional_dos_v1_t::c1541_professional_dos_v1_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : c1541_base_t(mconfig, C1541_PROFESSIONAL_DOS_V1, tag, owner, clock) { } //------------------------------------------------- -// c1541_prologic_dos_classic_device - constructor +// c1541_prologic_dos_classic_t - constructor //------------------------------------------------- -c1541_prologic_dos_classic_device::c1541_prologic_dos_classic_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_device_base(mconfig, C1541_PROLOGIC_DOS_CLASSIC, tag, owner, clock), +c1541_prologic_dos_classic_t::c1541_prologic_dos_classic_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : c1541_base_t(mconfig, C1541_PROLOGIC_DOS_CLASSIC, tag, owner, clock), m_pia(*this, MC6821_TAG), m_cent_data_out(*this, "cent_data_out"), m_mmu_rom(*this, "mmu") @@ -1042,18 +1063,26 @@ c1541_prologic_dos_classic_device::c1541_prologic_dos_classic_device(const machi //------------------------------------------------- -// indus_gt_device - constructor +// indus_gt_t - constructor +//------------------------------------------------- + +indus_gt_t::indus_gt_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : c1541_base_t(mconfig, INDUS_GT, tag, owner, clock) { } + + +//------------------------------------------------- +// technica_t - constructor //------------------------------------------------- -indus_gt_device::indus_gt_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_device_base(mconfig, INDUS_GT, tag, owner, clock) { } +technica_t::technica_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : c1541_base_t(mconfig, TECHNICA, tag, owner, clock) { } //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- -void c1541_device_base::device_start() +void c1541_base_t::device_start() { m_leds.resolve(); @@ -1066,9 +1095,9 @@ void c1541_device_base::device_start() save_item(NAME(m_via1_irq)); } -void fsd2_device::device_start() +void fsd2_t::device_start() { - c1541_device_base::device_start(); + c1541_base_t::device_start(); // decrypt ROM uint8_t *rom = memregion(M6502_TAG)->base(); @@ -1086,7 +1115,7 @@ void fsd2_device::device_start() // device_reset - device-specific reset //------------------------------------------------- -void c1541_device_base::device_reset() +void c1541_base_t::device_reset() { m_maincpu->reset(); @@ -1103,7 +1132,7 @@ void c1541_device_base::device_reset() // iec_atn_w - //------------------------------------------------- -void c1541_device_base::cbm_iec_atn(int state) +void c1541_base_t::cbm_iec_atn(int state) { m_via0->write_ca1(!state); m_ga->atni_w(!state); @@ -1116,7 +1145,7 @@ void c1541_device_base::cbm_iec_atn(int state) // iec_reset_w - //------------------------------------------------- -void c1541_device_base::cbm_iec_reset(int state) +void c1541_base_t::cbm_iec_reset(int state) { if (!state) { @@ -1129,7 +1158,7 @@ void c1541_device_base::cbm_iec_reset(int state) // parallel_data_w - //------------------------------------------------- -void c1541_device_base::parallel_data_w(uint8_t data) +void c1541_base_t::parallel_data_w(uint8_t data) { m_parallel_data = data; } @@ -1139,7 +1168,7 @@ void c1541_device_base::parallel_data_w(uint8_t data) // parallel_strobe_w - //------------------------------------------------- -void c1541_device_base::parallel_strobe_w(int state) +void c1541_base_t::parallel_strobe_w(int state) { m_via0->write_cb1(state); } diff --git a/src/devices/bus/cbmiec/c1541.h b/src/devices/bus/cbmiec/c1541.h index 473fda5d51b..e184ec9375c 100644 --- a/src/devices/bus/cbmiec/c1541.h +++ b/src/devices/bus/cbmiec/c1541.h @@ -33,15 +33,15 @@ // TYPE DEFINITIONS //************************************************************************** -// ======================> c1541_device_base +// ======================> c1541_base_t -class c1541_device_base : public device_t, - public device_cbm_iec_interface, - public device_c64_floppy_parallel_interface +class c1541_base_t : public device_t, + public device_cbm_iec_interface, + public device_c64_floppy_parallel_interface { protected: // construction/destruction - c1541_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + c1541_base_t(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); // device-level overrides virtual void device_start() override; @@ -105,13 +105,13 @@ private: }; -// ======================> c1540_device +// ======================> c1540_t -class c1540_device : public c1541_device_base +class c1540_t : public c1541_base_t { public: // construction/destruction - c1540_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + c1540_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: // optional information overrides @@ -119,13 +119,13 @@ protected: }; -// ======================> c1541_device +// ======================> c1541_t -class c1541_device : public c1541_device_base +class c1541_t : public c1541_base_t { public: // construction/destruction - c1541_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + c1541_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: // optional information overrides @@ -133,13 +133,13 @@ protected: }; -// ======================> c1541c_device +// ======================> c1541c_t -class c1541c_device : public c1541_device_base +class c1541c_t : public c1541_base_t { public: // construction/destruction - c1541c_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + c1541c_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: // optional information overrides @@ -152,13 +152,13 @@ private: }; -// ======================> c1541ii_device +// ======================> c1541ii_t -class c1541ii_device : public c1541_device_base +class c1541ii_t : public c1541_base_t { public: // construction/destruction - c1541ii_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + c1541ii_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: // optional information overrides @@ -166,13 +166,13 @@ protected: }; -// ======================> sx1541_device +// ======================> sx1541_t -class sx1541_device : public c1541_device_base +class sx1541_t : public c1541_base_t { public: // construction/destruction - sx1541_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + sx1541_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: // optional information overrides @@ -180,13 +180,13 @@ protected: }; -// ======================> fsd1_device +// ======================> fsd1_t -class fsd1_device : public c1541_device_base +class fsd1_t : public c1541_base_t { public: // construction/destruction - fsd1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + fsd1_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: // optional information overrides @@ -194,13 +194,13 @@ protected: }; -// ======================> fsd2_device +// ======================> fsd2_t -class fsd2_device : public c1541_device_base +class fsd2_t : public c1541_base_t { public: // construction/destruction - fsd2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + fsd2_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: // optional information overrides @@ -211,13 +211,13 @@ protected: }; -// ======================> csd1_device +// ======================> csd1_t -class csd1_device : public c1541_device_base +class csd1_t : public c1541_base_t { public: // construction/destruction - csd1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + csd1_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: // optional information overrides @@ -225,13 +225,13 @@ protected: }; -// ======================> c1541_dolphin_dos_device +// ======================> c1541_dolphin_dos_t -class c1541_dolphin_dos_device : public c1541_device_base +class c1541_dolphin_dos_t : public c1541_base_t { public: // construction/destruction - c1541_dolphin_dos_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + c1541_dolphin_dos_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: // optional information overrides @@ -240,13 +240,13 @@ protected: }; -// ======================> c1541_professional_dos_v1_device +// ======================> c1541_professional_dos_v1_t -class c1541_professional_dos_v1_device : public c1541_device_base +class c1541_professional_dos_v1_t : public c1541_base_t { public: // construction/destruction - c1541_professional_dos_v1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + c1541_professional_dos_v1_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: // optional information overrides @@ -255,13 +255,13 @@ protected: }; -// ======================> c1541_prologic_dos_classic_device +// ======================> c1541_prologic_dos_classic_t -class c1541_prologic_dos_classic_device : public c1541_device_base +class c1541_prologic_dos_classic_t : public c1541_base_t { public: // construction/destruction - c1541_prologic_dos_classic_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + c1541_prologic_dos_classic_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: // optional information overrides @@ -285,13 +285,27 @@ private: }; -// ======================> indus_gt_device +// ======================> indus_gt_t -class indus_gt_device : public c1541_device_base +class indus_gt_t : public c1541_base_t { public: // construction/destruction - indus_gt_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + indus_gt_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + // optional information overrides + virtual const tiny_rom_entry *device_rom_region() const override; +}; + + +// ======================> technica_t + +class technica_t : public c1541_base_t +{ +public: + // construction/destruction + technica_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: // optional information overrides @@ -300,18 +314,19 @@ protected: // device type definition -DECLARE_DEVICE_TYPE(C1540, c1540_device) -DECLARE_DEVICE_TYPE(C1541, c1541_device) -DECLARE_DEVICE_TYPE(C1541C, c1541c_device) -DECLARE_DEVICE_TYPE(C1541II, c1541ii_device) -DECLARE_DEVICE_TYPE(SX1541, sx1541_device) -DECLARE_DEVICE_TYPE(FSD1, fsd1_device) -DECLARE_DEVICE_TYPE(FSD2, fsd2_device) -DECLARE_DEVICE_TYPE(CSD1, csd1_device) -DECLARE_DEVICE_TYPE(C1541_DOLPHIN_DOS, c1541_dolphin_dos_device) -DECLARE_DEVICE_TYPE(C1541_PROFESSIONAL_DOS_V1, c1541_professional_dos_v1_device) -DECLARE_DEVICE_TYPE(C1541_PROLOGIC_DOS_CLASSIC, c1541_prologic_dos_classic_device) -DECLARE_DEVICE_TYPE(INDUS_GT, indus_gt_device) +DECLARE_DEVICE_TYPE(C1540, c1540_t) +DECLARE_DEVICE_TYPE(C1541, c1541_t) +DECLARE_DEVICE_TYPE(C1541C, c1541c_t) +DECLARE_DEVICE_TYPE(C1541II, c1541ii_t) +DECLARE_DEVICE_TYPE(SX1541, sx1541_t) +DECLARE_DEVICE_TYPE(FSD1, fsd1_t) +DECLARE_DEVICE_TYPE(FSD2, fsd2_t) +DECLARE_DEVICE_TYPE(CSD1, csd1_t) +DECLARE_DEVICE_TYPE(C1541_DOLPHIN_DOS, c1541_dolphin_dos_t) +DECLARE_DEVICE_TYPE(C1541_PROFESSIONAL_DOS_V1, c1541_professional_dos_v1_t) +DECLARE_DEVICE_TYPE(C1541_PROLOGIC_DOS_CLASSIC, c1541_prologic_dos_classic_t) +DECLARE_DEVICE_TYPE(INDUS_GT, indus_gt_t) +DECLARE_DEVICE_TYPE(TECHNICA, technica_t) diff --git a/src/devices/bus/cbmiec/cbmiec.cpp b/src/devices/bus/cbmiec/cbmiec.cpp index 277863930c8..0ac1f83cce9 100644 --- a/src/devices/bus/cbmiec/cbmiec.cpp +++ b/src/devices/bus/cbmiec/cbmiec.cpp @@ -530,4 +530,5 @@ void cbm_iec_devices(device_slot_interface &device) device.option_add("vic1515", VIC1515); device.option_add("vic1520", VIC1520); device.option_add("c1526", C1526); + device.option_add("technica", TECHNICA); } -- cgit v1.2.3