summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/abcbus/lux21046.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/abcbus/lux21046.cpp')
-rw-r--r--src/devices/bus/abcbus/lux21046.cpp105
1 files changed, 57 insertions, 48 deletions
diff --git a/src/devices/bus/abcbus/lux21046.cpp b/src/devices/bus/abcbus/lux21046.cpp
index 3ec543ead6a..facfeb83c7d 100644
--- a/src/devices/bus/abcbus/lux21046.cpp
+++ b/src/devices/bus/abcbus/lux21046.cpp
@@ -77,6 +77,9 @@ Notes:
#include "emu.h"
#include "lux21046.h"
+#include "formats/abc800_dsk.h"
+#include "formats/abc800i_dsk.h"
+
//**************************************************************************
@@ -111,12 +114,14 @@ ROM_START( luxor_55_21046 )
ROM_DEFAULT_BIOS( "v207" )
ROM_SYSTEM_BIOS( 0, "v105", "Luxor v1.05 (1984-10-04)" )
ROMX_LOAD( "cntr 105.6cd", 0x2000, 0x2000, CRC(44043025) SHA1(17487ca35b399bb49d4015bbeede0809db8e772f), ROM_BIOS(0) )
- ROM_SYSTEM_BIOS( 1, "v107", "Luxor v1.07 (1985-07-03)" )
- ROMX_LOAD( "cntr 1.07 6490318-07.6cd", 0x0000, 0x4000, CRC(db8c1c0e) SHA1(8bccd5bc72124984de529ee058df779f06d2c1d5), ROM_BIOS(1) )
- ROM_SYSTEM_BIOS( 2, "v108", "Luxor v1.08 (1986-03-12)" )
- ROMX_LOAD( "cntr 108.6cd", 0x2000, 0x2000, CRC(229764cb) SHA1(a2e2f6f49c31b827efc62f894de9a770b65d109d), ROM_BIOS(2) )
- ROM_SYSTEM_BIOS( 3, "v207", "DiAB v2.07 (1987-06-24)" )
- ROMX_LOAD( "diab 207.6cd", 0x2000, 0x2000, CRC(86622f52) SHA1(61ad271de53152c1640c0b364fce46d1b0b4c7e2), ROM_BIOS(3) )
+ ROM_SYSTEM_BIOS( 1, "v106", "Luxor v1.06 (1984-12-13)" )
+ ROMX_LOAD( "6490318-06.6cd", 0x2000, 0x2000, CRC(7f4726c9) SHA1(cf576456f135877537c5ee56b00a7259160d2c56), ROM_BIOS(1) )
+ ROM_SYSTEM_BIOS( 2, "v107", "Luxor v1.07 (1985-07-03)" )
+ ROMX_LOAD( "cntr 1.07 6490318-07.6cd", 0x0000, 0x4000, CRC(db8c1c0e) SHA1(8bccd5bc72124984de529ee058df779f06d2c1d5), ROM_BIOS(2) )
+ ROM_SYSTEM_BIOS( 3, "v108", "Luxor v1.08 (1986-03-12)" )
+ ROMX_LOAD( "cntr 108.6cd", 0x2000, 0x2000, CRC(229764cb) SHA1(a2e2f6f49c31b827efc62f894de9a770b65d109d), ROM_BIOS(3) )
+ ROM_SYSTEM_BIOS( 4, "v207", "DiAB v2.07 (1987-06-24)" )
+ ROMX_LOAD( "diab 207.6cd", 0x2000, 0x2000, CRC(86622f52) SHA1(61ad271de53152c1640c0b364fce46d1b0b4c7e2), ROM_BIOS(4) )
ROM_REGION( 0x104, "plds", 0 )
ROM_LOAD( "pal16r4.2a", 0x000, 0x104, NO_DUMP)
@@ -224,7 +229,7 @@ void luxor_55_21046_device::luxor_55_21046_io(address_map &map)
*/
-WRITE_LINE_MEMBER( luxor_55_21046_device::dma_int_w )
+void luxor_55_21046_device::dma_int_w(int state)
{
m_dma_irq = state;
@@ -232,29 +237,32 @@ WRITE_LINE_MEMBER( luxor_55_21046_device::dma_int_w )
m_maincpu->set_input_line(INPUT_LINE_IRQ0, m_fdc_irq || m_dma_irq);
}
-READ8_MEMBER( luxor_55_21046_device::memory_read_byte )
+uint8_t luxor_55_21046_device::memory_read_byte(offs_t offset)
{
return m_maincpu->space(AS_PROGRAM).read_byte(offset);
}
-WRITE8_MEMBER( luxor_55_21046_device::memory_write_byte )
+void luxor_55_21046_device::memory_write_byte(offs_t offset, uint8_t data)
{
return m_maincpu->space(AS_PROGRAM).write_byte(offset, data);
}
-READ8_MEMBER( luxor_55_21046_device::io_read_byte )
+uint8_t luxor_55_21046_device::io_read_byte(offs_t offset)
{
return m_maincpu->space(AS_IO).read_byte(offset);
}
-WRITE8_MEMBER( luxor_55_21046_device::io_write_byte )
+void luxor_55_21046_device::io_write_byte(offs_t offset, uint8_t data)
{
return m_maincpu->space(AS_IO).write_byte(offset, data);
}
-FLOPPY_FORMATS_MEMBER( luxor_55_21046_device::floppy_formats )
- FLOPPY_ABC800_FORMAT
-FLOPPY_FORMATS_END
+void luxor_55_21046_device::floppy_formats(format_registration &fr)
+{
+ fr.add_mfm_containers();
+ fr.add(FLOPPY_ABC800I_FORMAT);
+ fr.add(FLOPPY_ABC800_FORMAT);
+}
static void abc_floppies(device_slot_interface &device)
{
@@ -266,7 +274,7 @@ static void abc_floppies(device_slot_interface &device)
device.option_add("8dsdd", FLOPPY_8_DSDD);
}
-WRITE_LINE_MEMBER( luxor_55_21046_device::fdc_intrq_w )
+void luxor_55_21046_device::fdc_intrq_w(int state)
{
m_fdc_irq = state;
@@ -313,36 +321,36 @@ void luxor_55_21046_device::device_add_mconfig(machine_config & config)
void abc830_device::device_add_mconfig(machine_config &config)
{
luxor_55_21046_device::device_add_mconfig(config);
- FLOPPY_CONNECTOR(config, m_floppy0, abc_floppies, "525ssdd", luxor_55_21046_device::floppy_formats);
- FLOPPY_CONNECTOR(config, m_floppy1, abc_floppies, "525ssdd", luxor_55_21046_device::floppy_formats);
+ for (auto &floppy : m_floppy)
+ FLOPPY_CONNECTOR(config, floppy, abc_floppies, "525ssdd", luxor_55_21046_device::floppy_formats).enable_sound(true);
}
void abc832_device::device_add_mconfig(machine_config &config)
{
luxor_55_21046_device::device_add_mconfig(config);
- FLOPPY_CONNECTOR(config, m_floppy0, abc_floppies, "525qd", luxor_55_21046_device::floppy_formats);
- FLOPPY_CONNECTOR(config, m_floppy1, abc_floppies, "525qd", luxor_55_21046_device::floppy_formats);
+ for (auto &floppy : m_floppy)
+ FLOPPY_CONNECTOR(config, floppy, abc_floppies, "525qd", luxor_55_21046_device::floppy_formats).enable_sound(true);
}
void abc834_device::device_add_mconfig(machine_config &config)
{
luxor_55_21046_device::device_add_mconfig(config);
- FLOPPY_CONNECTOR(config, m_floppy0, abc_floppies, "525qd", luxor_55_21046_device::floppy_formats);
- FLOPPY_CONNECTOR(config, m_floppy1, abc_floppies, "525qd", luxor_55_21046_device::floppy_formats);
+ for (auto &floppy : m_floppy)
+ FLOPPY_CONNECTOR(config, floppy, abc_floppies, "525qd", luxor_55_21046_device::floppy_formats).enable_sound(true);
}
void abc838_device::device_add_mconfig(machine_config &config)
{
luxor_55_21046_device::device_add_mconfig(config);
- FLOPPY_CONNECTOR(config, m_floppy0, abc_floppies, "8dsdd", luxor_55_21046_device::floppy_formats);
- FLOPPY_CONNECTOR(config, m_floppy1, abc_floppies, "8dsdd", luxor_55_21046_device::floppy_formats);
+ for (auto &floppy : m_floppy)
+ FLOPPY_CONNECTOR(config, floppy, abc_floppies, "8dsdd", luxor_55_21046_device::floppy_formats).enable_sound(true);
}
void abc850_floppy_device::device_add_mconfig(machine_config &config)
{
luxor_55_21046_device::device_add_mconfig(config);
- FLOPPY_CONNECTOR(config, m_floppy0, abc_floppies, "525qd", luxor_55_21046_device::floppy_formats);
- FLOPPY_CONNECTOR(config, m_floppy1, abc_floppies, nullptr, luxor_55_21046_device::floppy_formats);
+ FLOPPY_CONNECTOR(config, m_floppy[0], abc_floppies, "525qd", luxor_55_21046_device::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy[1], abc_floppies, nullptr, luxor_55_21046_device::floppy_formats).enable_sound(true);
}
@@ -714,12 +722,11 @@ luxor_55_21046_device::luxor_55_21046_device(const machine_config &mconfig, cons
luxor_55_21046_device::luxor_55_21046_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, type, tag, owner, clock),
device_abcbus_card_interface(mconfig, *this),
- m_floppy0(*this, SAB1793_TAG":0"),
- m_floppy1(*this, SAB1793_TAG":1"),
+ m_floppy(*this, SAB1793_TAG":%u", 0U),
m_maincpu(*this, Z80_TAG),
m_dma(*this, Z80DMA_TAG),
m_fdc(*this, SAB1793_TAG),
- m_floppy(nullptr),
+ m_selected_floppy(nullptr),
m_sw1(*this, "SW1"),
m_sw2(*this, "SW2"),
m_sw3(*this, "SW3"),
@@ -789,10 +796,9 @@ void luxor_55_21046_device::device_reset()
m_maincpu->reset();
- address_space &space = m_maincpu->space(AS_PROGRAM);
- _4b_w(space, 0, 0);
- _9b_w(space, 0, 0);
- _8a_w(space, 0, 0);
+ _4b_w(0);
+ _9b_w(0);
+ _8a_w(0);
}
@@ -932,9 +938,9 @@ void luxor_55_21046_device::abcbus_c4(uint8_t data)
// 3d_r -
//-------------------------------------------------
-READ8_MEMBER( luxor_55_21046_device::out_r )
+uint8_t luxor_55_21046_device::out_r()
{
- if (m_busy)
+ if (m_busy && !machine().side_effects_disabled())
{
m_busy = 0;
}
@@ -947,7 +953,7 @@ READ8_MEMBER( luxor_55_21046_device::out_r )
// 4d_w -
//-------------------------------------------------
-WRITE8_MEMBER( luxor_55_21046_device::inp_w )
+void luxor_55_21046_device::inp_w(uint8_t data)
{
if (m_busy)
{
@@ -962,7 +968,7 @@ WRITE8_MEMBER( luxor_55_21046_device::inp_w )
// 4b_w -
//-------------------------------------------------
-WRITE8_MEMBER( luxor_55_21046_device::_4b_w )
+void luxor_55_21046_device::_4b_w(uint8_t data)
{
/*
@@ -993,7 +999,7 @@ WRITE8_MEMBER( luxor_55_21046_device::_4b_w )
// 9b_w -
//-------------------------------------------------
-WRITE8_MEMBER( luxor_55_21046_device::_9b_w )
+void luxor_55_21046_device::_9b_w(uint8_t data)
{
/*
@@ -1011,20 +1017,23 @@ WRITE8_MEMBER( luxor_55_21046_device::_9b_w )
*/
// drive select
- m_floppy = nullptr;
+ m_selected_floppy = nullptr;
- if (BIT(data, 0)) m_floppy = m_floppy0->get_device();
- if (BIT(data, 1)) m_floppy = m_floppy1->get_device();
+ for (int n = 0; n < 2; n++)
+ {
+ if (BIT(data, n))
+ m_selected_floppy = m_floppy[n]->get_device();
+ }
- m_fdc->set_floppy(m_floppy);
+ m_fdc->set_floppy(m_selected_floppy);
- if (m_floppy)
+ if (m_selected_floppy)
{
// motor enable
- m_floppy->mon_w(!BIT(data, 3));
+ m_selected_floppy->mon_w(!BIT(data, 3));
// side select
- m_floppy->ss_w(BIT(data, 5));
+ m_selected_floppy->ss_w(BIT(data, 5));
}
}
@@ -1033,7 +1042,7 @@ WRITE8_MEMBER( luxor_55_21046_device::_9b_w )
// 8a_w -
//-------------------------------------------------
-WRITE8_MEMBER( luxor_55_21046_device::_8a_w )
+void luxor_55_21046_device::_8a_w(uint8_t data)
{
/*
@@ -1066,7 +1075,7 @@ WRITE8_MEMBER( luxor_55_21046_device::_8a_w )
// 9a_r -
//-------------------------------------------------
-READ8_MEMBER( luxor_55_21046_device::_9a_r )
+uint8_t luxor_55_21046_device::_9a_r(offs_t offset)
{
/*
@@ -1089,8 +1098,8 @@ READ8_MEMBER( luxor_55_21046_device::_9a_r )
data |= m_busy;
// floppy
- data |= (m_floppy ? m_floppy->twosid_r() : 1) << 1;
- //data |= (m_floppy ? m_floppy->dskchg_r() : 1) << 4;
+ data |= (m_selected_floppy ? m_selected_floppy->twosid_r() : 1) << 1;
+ //data |= (m_selected_floppy ? m_selected_floppy->dskchg_r() : 1) << 4;
// SW2
uint8_t sw2 = m_sw2->read() & 0x0f;