summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/machine/swtpc09.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mess/machine/swtpc09.c')
-rw-r--r--src/mess/machine/swtpc09.c149
1 files changed, 35 insertions, 114 deletions
diff --git a/src/mess/machine/swtpc09.c b/src/mess/machine/swtpc09.c
index 719eb29ce0c..29bae501462 100644
--- a/src/mess/machine/swtpc09.c
+++ b/src/mess/machine/swtpc09.c
@@ -126,52 +126,22 @@ WRITE8_MEMBER ( swtpc09_state::dmf2_control_reg_w )
{
LOG(("swtpc09_dmf2_control_reg_w $%02X\n", data));
- switch (data & 0x0F)
- {
- case 0x0e:
- m_fdc->set_drive(0);
- // need to set drive ready as sw checks before doing anything
- machine().device<legacy_floppy_image_device>("floppy0")->floppy_drive_set_ready_state(1,0);
- break;
- case 0x0d:
- m_fdc->set_drive(1);
- machine().device<legacy_floppy_image_device>("floppy1")->floppy_drive_set_ready_state(1,0);
- break;
-
- case 0x0b:
- m_fdc->set_drive(2);
- machine().device<legacy_floppy_image_device>("floppy2")->floppy_drive_set_ready_state(1,0);
- break;
-
- case 0x07:
- m_fdc->set_drive(3);
- machine().device<legacy_floppy_image_device>("floppy3")->floppy_drive_set_ready_state(1,0);
- break;
+ floppy_image_device *floppy = NULL;
- default:
- break;
- }
+ 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();
- // ignore side select in emulation due to sector numbering
- ////side select
- //if (!(data & 0x10)) {
- // wd17xx_set_side(fdc, 1);
- //}
- //if (data & 0x10) {
- // wd17xx_set_side(fdc, 0);
- //}
+ m_fdc->set_floppy(floppy);
-
- /* bit 5 dden select */
-
- if (!(data & 0x20)) {
- m_fdc->dden_w(0);
- LOG(("Density single\n"));
- }
- if (data & 0x20) {
- m_fdc->dden_w(1);
- LOG(("Density double\n"));
+ if (floppy)
+ {
+ floppy->mon_w(0);
+ floppy->ss_w(!BIT(data, 4));
}
+
+ m_fdc->dden_w(!BIT(data, 5));
}
/* FDC controller dma transfer */
@@ -384,52 +354,22 @@ WRITE8_MEMBER ( swtpc09_state::dmf3_control_reg_w )
{
LOG(("swtpc09_dmf3_control_reg_w $%02X\n", data));
- switch (data & 0x0F)
- {
- case 0x01:
- m_fdc->set_drive(0);
- // need to set drive ready as sw checks before doing anything
- machine().device<legacy_floppy_image_device>("floppy0")->floppy_drive_set_ready_state(1,0);
- break;
- case 0x02:
- m_fdc->set_drive(1);
- machine().device<legacy_floppy_image_device>("floppy1")->floppy_drive_set_ready_state(1,0);
- break;
-
- case 0x04:
- m_fdc->set_drive(2);
- machine().device<legacy_floppy_image_device>("floppy2")->floppy_drive_set_ready_state(1,0);
- break;
-
- case 0x08:
- m_fdc->set_drive(3);
- machine().device<legacy_floppy_image_device>("floppy3")->floppy_drive_set_ready_state(1,0);
- break;
-
- default:
- break;
- }
-
- // ignore side select in emulation due to sector numbering
- ////side select
- //if (!(data & 0x10)) {
- // wd17xx_set_side(fdc, 1);
- //}
- //if (data & 0x10) {
- // wd17xx_set_side(fdc, 0);
- //}
+ floppy_image_device *floppy = NULL;
+ 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();
- /* bit 5 dden select */
+ m_fdc->set_floppy(floppy);
- if (data & 0x20) {
- m_fdc->dden_w(0);
- LOG(("Density single\n"));
- }
- if (!(data & 0x20)) {
- m_fdc->dden_w(1);
- LOG(("Density double\n"));
+ if (floppy)
+ {
+ floppy->mon_w(0);
+ floppy->ss_w(BIT(data, 4));
}
+
+ m_fdc->dden_w(BIT(data, 5));
}
// DC4 drive select
@@ -438,33 +378,14 @@ WRITE8_MEMBER ( swtpc09_state::dc4_control_reg_w )
{
LOG(("swtpc09_dc4_control_reg_w $%02X\n", data));
- switch (data & 0x03)
- {
- case 0x00:
- m_fdc->set_drive(0);
- // need to set drive ready as sw checks before doing anything
- machine().device<legacy_floppy_image_device>("floppy0")->floppy_drive_set_ready_state(1,0);
- break;
- case 0x01:
- m_fdc->set_drive(1);
- machine().device<legacy_floppy_image_device>("floppy1")->floppy_drive_set_ready_state(1,0);
- break;
+ floppy_image_device *floppy = NULL;
- case 0x02:
- m_fdc->set_drive(2);
- machine().device<legacy_floppy_image_device>("floppy2")->floppy_drive_set_ready_state(1,0);
- break;
-
- case 0x03:
- m_fdc->set_drive(3);
- machine().device<legacy_floppy_image_device>("floppy3")->floppy_drive_set_ready_state(1,0);
- break;
-
- default:
- break;
- }
+ 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();
- // ignore side select in emulation due to sector numbering
+ m_fdc->set_floppy(floppy);
}
@@ -537,7 +458,7 @@ WRITE8_MEMBER(swtpc09_state::dat_w)
address_space &mem = m_maincpu->space(AS_PROGRAM);
- fd1793_device *fdc = machine().device<fd1793_device>("fdc");
+ fd1793_t *fdc = machine().device<fd1793_t>("fdc");
pia6821_device *pia = machine().device<pia6821_device>("pia");
ptm6840_device *ptm = machine().device<ptm6840_device>("ptm");
acia6850_device *acia = machine().device<acia6850_device>("acia");
@@ -574,7 +495,7 @@ WRITE8_MEMBER(swtpc09_state::dat_w)
mem.install_readwrite_handler(logical_address+0x004, logical_address+0x004, read8_delegate(FUNC(acia6850_device::status_r), acia), write8_delegate(FUNC(acia6850_device::control_w),acia));
mem.install_readwrite_handler(logical_address+0x005, logical_address+0x005, read8_delegate(FUNC(acia6850_device::data_r), acia), write8_delegate(FUNC(acia6850_device::data_w),acia));
mem.install_write_handler(logical_address+0x014, logical_address+0x014, write8_delegate(FUNC(swtpc09_state::dc4_control_reg_w),this));
- mem.install_readwrite_handler(logical_address+0x018, logical_address+0x01b, read8_delegate(FUNC(fd1793_device::read), fdc), write8_delegate(FUNC(fd1793_device::write),fdc));
+ mem.install_readwrite_handler(logical_address+0x018, logical_address+0x01b, read8_delegate(FUNC(fd1793_t::read), fdc), write8_delegate(FUNC(fd1793_t::write),fdc));
//mem.nop_readwrite(logical_address+0x01c, logical_address+0x05f);
mem.install_readwrite_handler(logical_address+0x060, logical_address+0x06f, read8_delegate(FUNC(pia6821_device::read), piaide), write8_delegate(FUNC(pia6821_device::write), piaide));
//mem.nop_readwrite(logical_address+0x070, logical_address+0x07f);
@@ -598,7 +519,7 @@ WRITE8_MEMBER(swtpc09_state::dat_w)
if (m_system_type == UNIFLEX_DMF2 || m_system_type == FLEX_DMF2) // if DMF2 conroller this is the map
{
mem.install_readwrite_handler(logical_address+0x000, logical_address+0x01f, read8_delegate(FUNC(swtpc09_state::m6844_r),this), write8_delegate(FUNC(swtpc09_state::m6844_w),this));
- mem.install_readwrite_handler(logical_address+0x020, logical_address+0x023, read8_delegate(FUNC(fd1793_device::read), fdc), write8_delegate(FUNC(fd1793_device::write),fdc));
+ mem.install_readwrite_handler(logical_address+0x020, logical_address+0x023, read8_delegate(FUNC(fd1793_t::read), fdc), write8_delegate(FUNC(fd1793_t::write),fdc));
mem.install_readwrite_handler(logical_address+0x024, logical_address+0x03f, read8_delegate(FUNC(swtpc09_state::dmf2_control_reg_r),this), write8_delegate(FUNC(swtpc09_state::dmf2_control_reg_w),this));
mem.install_readwrite_handler(logical_address+0x040, logical_address+0x041, read8_delegate(FUNC(swtpc09_state::dmf2_dma_address_reg_r),this), write8_delegate(FUNC(swtpc09_state::dmf2_dma_address_reg_w),this));
//mem.nop_readwrite(logical_address+0x042, logical_address+0x7ff);
@@ -608,7 +529,7 @@ WRITE8_MEMBER(swtpc09_state::dat_w)
else if (m_system_type == FLEX_DC4_PIAIDE) // 2k ram for piaide on s09 board
{
//mem.install_readwrite_handler(logical_address+0x000, logical_address+0x01f, read8_delegate(FUNC(swtpc09_state::m6844_r),this), write8_delegate(FUNC(swtpc09_state::m6844_w),this));
- //mem.install_readwrite_handler(logical_address+0x020, logical_address+0x023, read8_delegate(FUNC(fd1793_device::read), fdc), write8_delegate(FUNC(fd1793_device::write),fdc));
+ //mem.install_readwrite_handler(logical_address+0x020, logical_address+0x023, read8_delegate(FUNC(fd1793_t::read), fdc), write8_delegate(FUNC(fd1793_t::write),fdc));
//mem.install_readwrite_handler(logical_address+0x024, logical_address+0x03f, read8_delegate(FUNC(swtpc09_state::dmf2_control_reg_r),this), write8_delegate(FUNC(swtpc09_state::dmf2_control_reg_w),this));
//mem.install_readwrite_handler(logical_address+0x040, logical_address+0x041, read8_delegate(FUNC(swtpc09_state::dmf2_dma_address_reg_r),this), write8_delegate(FUNC(swtpc09_state::dmf2_dma_address_reg_w),this));
mem.install_ram(logical_address+0x000, logical_address+0x7ff, &RAM[0xf000]);
@@ -618,7 +539,7 @@ WRITE8_MEMBER(swtpc09_state::dat_w)
else // assume DMF3 controller
{
mem.install_readwrite_handler(logical_address+0x000, logical_address+0x01f, read8_delegate(FUNC(swtpc09_state::m6844_r),this), write8_delegate(FUNC(swtpc09_state::m6844_w),this));
- mem.install_readwrite_handler(logical_address+0x020, logical_address+0x023, read8_delegate(FUNC(fd1793_device::read), fdc), write8_delegate(FUNC(fd1793_device::write),fdc));
+ mem.install_readwrite_handler(logical_address+0x020, logical_address+0x023, read8_delegate(FUNC(fd1793_t::read), fdc), write8_delegate(FUNC(fd1793_t::write),fdc));
mem.install_readwrite_handler(logical_address+0x024, logical_address+0x024, read8_delegate(FUNC(swtpc09_state::dmf3_control_reg_r),this), write8_delegate(FUNC(swtpc09_state::dmf3_control_reg_w),this));
mem.install_readwrite_handler(logical_address+0x025, logical_address+0x025, read8_delegate(FUNC(swtpc09_state::dmf3_dma_address_reg_r),this), write8_delegate(FUNC(swtpc09_state::dmf3_dma_address_reg_w),this));
//mem.nop_readwrite(logical_address+0x030, logical_address+0x03f);