diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/devices/machine/pdc.cpp | 60 | ||||
-rw-r--r-- | src/devices/machine/pdc.h | 7 | ||||
-rw-r--r-- | src/mame/drivers/r9751.cpp | 13 |
3 files changed, 63 insertions, 17 deletions
diff --git a/src/devices/machine/pdc.cpp b/src/devices/machine/pdc.cpp index 9a3cee60736..b45146e369d 100644 --- a/src/devices/machine/pdc.cpp +++ b/src/devices/machine/pdc.cpp @@ -67,6 +67,7 @@ static ADDRESS_MAP_START( pdc_io, AS_IO, 8, pdc_device ) AM_RANGE(0x39, 0x39) AM_READ(p39_r) AM_MIRROR(0xFF00) // HDD related AM_RANGE(0x40, 0x41) AM_DEVREADWRITE(HDC_TAG, hdc9224_device,read,write) AM_MIRROR(0xFF00) AM_RANGE(0x42, 0x43) AM_DEVICE(FDC_TAG, upd765a_device, map) AM_MIRROR(0xFF00) + AM_RANGE(0x50, 0x53) AM_WRITE(p50_53_w) AM_MIRROR(0xFF00) AM_RANGE(0x60, 0x6f) AM_DEVREADWRITE(FDCDMA_TAG,am9517a_device,read,write) AM_MIRROR(0xFF00) ADDRESS_MAP_END @@ -111,10 +112,11 @@ static MACHINE_CONFIG_FRAGMENT( pdc ) /* Floppy Disk Controller - uPD765a - NEC D765AC-2 */ MCFG_UPD765A_ADD(FDC_TAG, true, true) MCFG_UPD765_INTRQ_CALLBACK(WRITELINE(pdc_device, fdc_irq)) - MCFG_UPD765_DRQ_CALLBACK(DEVWRITELINE(FDCDMA_TAG, am9517a_device, dreq0_w)) MCFG_DEVCB_INVERT + MCFG_UPD765_DRQ_CALLBACK(DEVWRITELINE(FDCDMA_TAG, am9517a_device, dreq0_w)) //MCFG_DEVCB_INVERT // Floppy disk drive MCFG_FLOPPY_DRIVE_ADD(FDC_TAG":0", pdc_floppies, "35hd", pdc_device::floppy_formats) + //MCFG_FLOPPY_DRIVE_ADD(FDC_TAG":0", pdc_floppies, "35hd", floppy_image_device::default_floppy_formats) /* DMA Controller - Intel P8237A-5 */ /* Channel 0: uPD765a Floppy Disk Controller */ @@ -158,7 +160,8 @@ pdc_device::pdc_device(const machine_config &mconfig, const char *tag, device_t m_pdccpu(*this, Z80_TAG), m_dma8237(*this, FDCDMA_TAG), m_fdc(*this, FDC_TAG), - m_floppy(*this, FDC_TAG ":0"), + //m_floppy(*this, FDC_TAG ":0"), + //m_floppy(*this, FDC_TAG ":0:35hd"), m_hdc9224(*this, HDC_TAG), m_pdc_ram(*this, "pdc_ram"), m_m68k_r_cb(*this), @@ -172,6 +175,10 @@ pdc_device::pdc_device(const machine_config &mconfig, const char *tag, device_t void pdc_device::device_start() { +// m_fdc->set_floppy(m_floppy); +// floppy_image_device *m_floppy; +// m_floppy = machine().device<floppy_connector>("fdc:0")->get_device(); + } //------------------------------------------------- @@ -184,14 +191,22 @@ void pdc_device::device_reset() reg_p38 = 0; reg_p38 |= 4; /* ready for 68k ram DMA */ //reg_p38 |= 0x20; // no idea at all - bit 5 (32) - m_fdc->set_ready_line_connected(false); - m_fdc->ready_w(true); + //m_fdc->ready_w(true); + //m_floppy->mon_w(0); + //m_fdc->set_floppy(m_floppy); + //m_fdc->tc_w(1); + //m_floppy->ready_w(true); + /* Reset CPU */ m_pdccpu->reset(); /* Resolve callbacks */ m_m68k_r_cb.resolve_safe(0); m_m68k_w_cb.resolve_safe(); + + //machine().device<floppy_connector>(FDC_TAG":0")->get_device()->mon_w(false); + //subdevice<floppy_connector>("fdc:0")->get_device()->mon_w(true); + m_fdc->set_rate(500000) ; } //------------------------------------------------- @@ -239,7 +254,7 @@ READ8_MEMBER(pdc_device::m68k_dma_r) UINT32 address; UINT8 data; - address = fdd_68k_dma_address++; + address = fdd_68k_dma_r_address++; data = m_m68k_r_cb(address); logerror("PDC: 8237 DMA CHANNEL 1 READ ADDRESS: %08X, DATA: %02X\n", address, data ); return data; @@ -247,9 +262,9 @@ READ8_MEMBER(pdc_device::m68k_dma_r) WRITE8_MEMBER(pdc_device::m68k_dma_w) { - UINT32 address = fdd_68k_dma_address++; - logerror("PDC: 8237 DMA CHANNEL 1 WRITE ADDRESS: %08X, DATA: %02X\n", address, data ); + logerror("PDC: 8237 DMA CHANNEL 1 WRITE ADDRESS: %08X, DATA: %02X\n", fdd_68k_dma_w_address, data ); m_m68k_w_cb(data); + fdd_68k_dma_w_address++; } WRITE_LINE_MEMBER(pdc_device::hdd_irq) @@ -273,9 +288,11 @@ READ8_MEMBER(pdc_device::p0_7_r) return reg_p1; case 2: /* Port 2: FDD command address low byte [0x5FF0C0B0][0x5FF0C1B0] */ logerror("PDC: Port 0x02 READ: %02X\n", reg_p2); + fdd_68k_dma_r_address = (fdd_68k_dma_r_address & (0xFF<<9)) | (reg_p2 << 1); return reg_p2; case 3: /* Port 3: FDD command address high byte [0x5FF0C0B0][0x5FF0C1B0] */ logerror("PDC: Port 0x03 READ: %02X\n", reg_p3); + fdd_68k_dma_r_address = (fdd_68k_dma_r_address & (0xFF<<1)) | (reg_p3 << 9); return reg_p3; case 6: /* Port 6: FDD data destination address low byte [0x5FF080B0] */ logerror("PDC: Port 0x06 READ: %02X\n", reg_p6); @@ -328,14 +345,14 @@ WRITE8_MEMBER(pdc_device::fdd_68k_w) reg_p38 &= ~2; // Clear bit 1 reg_p21 = data; break; - case 0x23: /* Port 23: FDD 68k DMA low byte */ + case 0x23: /* Port 23: FDD 68k DMA high byte */ /* The address is << 1 on the 68k side */ - fdd_68k_dma_address = (fdd_68k_dma_address & (0xFF<<1)) | (data << 9); + fdd_68k_dma_w_address = (fdd_68k_dma_w_address & (0xFF<<1)) | (data << 9); logerror("PDC: Port %02X WRITE: %02X\n", address, data); break; - case 0x24: /* Port 24: FDD 68k DMA high byte */ + case 0x24: /* Port 24: FDD 68k DMA low byte */ /* The address is << 1 on the 68k side */ - fdd_68k_dma_address = (fdd_68k_dma_address & (0xFF<<9)) | (data << 1); + fdd_68k_dma_w_address = (fdd_68k_dma_w_address & (0xFF<<9)) | (data << 1); logerror("PDC: Port %02X WRITE: %02X\n", address, data); break; case 0x26: @@ -388,3 +405,24 @@ READ8_MEMBER(pdc_device::p39_r) logerror("PDC: Port 0x39 READ: %02X, PC: %X\n", data, space.device().safe_pc()); return data; } + +WRITE8_MEMBER(pdc_device::p50_53_w) +{ + UINT8 address = 0x50 + offset; + switch(address) + { + case 0x53: /* Port 53: Almost certainly not FDD motor control, but seems to work */ + switch(data) + { + case 0x80: + logerror("PDC: FDD Motor on.\n"); + m_fdc->subdevice<floppy_connector>("0")->get_device()->mon_w(0); + break; + default: + logerror("PDC: Port 0x53 WRITE: %x\n", data); + } + break; + default: + logerror("PDC: Port %02x WRITE: %x\n", address, data); + } +} diff --git a/src/devices/machine/pdc.h b/src/devices/machine/pdc.h index b3486897c3e..19733881774 100644 --- a/src/devices/machine/pdc.h +++ b/src/devices/machine/pdc.h @@ -62,6 +62,7 @@ public: DECLARE_WRITE8_MEMBER(p38_w); DECLARE_READ8_MEMBER(p38_r); DECLARE_READ8_MEMBER(p39_r); + DECLARE_WRITE8_MEMBER(p50_53_w); DECLARE_READ8_MEMBER(m68k_dma_r); DECLARE_WRITE8_MEMBER(m68k_dma_w); @@ -80,7 +81,8 @@ public: UINT8 reg_p7; UINT8 reg_p21; UINT8 reg_p38; - UINT32 fdd_68k_dma_address; + UINT32 fdd_68k_dma_r_address; /* m68k -> FDD DMA read address */ + UINT32 fdd_68k_dma_w_address; /* FDD -> m68k DMA write address */ protected: /* Device-level overrides */ virtual void device_start(); @@ -94,7 +96,8 @@ protected: required_device<cpu_device> m_pdccpu; required_device<am9517a_device> m_dma8237; required_device<upd765a_device> m_fdc; - required_device<floppy_connector> m_floppy; + //required_device<floppy_connector> m_floppy; + //required_device<floppy_image_device> m_floppy; optional_device<hdc9224_device> m_hdc9224; mfm_harddisk_device* m_harddisk; required_shared_ptr<UINT8> m_pdc_ram; diff --git a/src/mame/drivers/r9751.cpp b/src/mame/drivers/r9751.cpp index 726ff4d9c0d..33ff46538bb 100644 --- a/src/mame/drivers/r9751.cpp +++ b/src/mame/drivers/r9751.cpp @@ -2,7 +2,7 @@ // copyright-holders:Brandon Munger /****************************************************************************** * -* Rolm CBX 9751 Release 9005 Driver +* Rolm CBX 9751 Driver * * This driver attempts to emulate the following models: * * Model 10 @@ -11,6 +11,10 @@ * * Model 50 * * Model 70 * +* The following software releases are known: +* * 9004 +* * 9005 +* * The basis of this driver was influenced by the zexall.c driver by * Jonathan Gevaryahu and Robbbert. * @@ -65,7 +69,7 @@ public: DECLARE_DRIVER_INIT(r9751); - DECLARE_FLOPPY_FORMATS( floppy_formats ); + //DECLARE_FLOPPY_FORMATS( floppy_formats ); private: required_device<cpu_device> m_maincpu; required_device<pdc_device> m_pdc; @@ -105,7 +109,8 @@ READ8_MEMBER(r9751_state::pdc_dma_r) WRITE8_MEMBER(r9751_state::pdc_dma_w) { - m_maincpu->space(AS_PROGRAM).write_byte(m_pdc->fdd_68k_dma_address,data); + /* NOTE: This needs to be changed to a function that accepts an address and data */ + m_maincpu->space(AS_PROGRAM).write_byte(m_pdc->fdd_68k_dma_w_address,data); } DRIVER_INIT_MEMBER(r9751_state,r9751) @@ -437,4 +442,4 @@ ROM_END ******************************************************************************/ /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ -COMP( 1988, r9751, 0, 0, r9751, r9751, r9751_state, r9751, "ROLM Systems, Inc.", "ROLM 9751 Release 9005 Model 10", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) +COMP( 1988, r9751, 0, 0, r9751, r9751, r9751_state, r9751, "ROLM Systems, Inc.", "ROLM 9751 Model 10", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) |