summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/fdc37c93x.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/fdc37c93x.h')
-rw-r--r--src/devices/machine/fdc37c93x.h100
1 files changed, 55 insertions, 45 deletions
diff --git a/src/devices/machine/fdc37c93x.h b/src/devices/machine/fdc37c93x.h
index a4a67d2ccf3..7ec1922498f 100644
--- a/src/devices/machine/fdc37c93x.h
+++ b/src/devices/machine/fdc37c93x.h
@@ -7,24 +7,19 @@ fdc37c93x.h
SMSC FDC37C93x Plug and Play Compatible Ultra I/O Controller
***************************************************************************/
-
#ifndef MAME_MACHINE_FDC37C93X_H
#define MAME_MACHINE_FDC37C93X_H
#pragma once
-#include "machine/8042kbdc.h"
-// floppy disk controller
-#include "machine/upd765.h"
+#include "bus/isa/isa.h"
#include "imagedev/floppy.h"
-#include "formats/pc_dsk.h"
-#include "formats/naslite_dsk.h"
-// parallel port
-#include "machine/pc_lpt.h"
-// serial port
+#include "machine/8042kbdc.h"
+#include "machine/ds128x.h"
#include "machine/ins8250.h"
+#include "machine/pc_lpt.h"
+#include "machine/upd765.h"
-// make sure that pckeybrd.cpp 8042kbdc.cpp are present in project
class fdc37c93x_device : public device_t, public device_isa16_card_interface
{
@@ -51,36 +46,37 @@ public:
void remap(int space_id, offs_t start, offs_t end) override;
// for the internal floppy controller
- DECLARE_WRITE_LINE_MEMBER(irq_floppy_w);
- DECLARE_WRITE_LINE_MEMBER(drq_floppy_w);
+ void irq_floppy_w(int state);
+ void drq_floppy_w(int state);
// for the internal parallel port
- DECLARE_WRITE_LINE_MEMBER(irq_parallel_w);
+ void irq_parallel_w(int state);
// for the internal uarts
- DECLARE_WRITE_LINE_MEMBER(irq_serial1_w);
- DECLARE_WRITE_LINE_MEMBER(txd_serial1_w);
- DECLARE_WRITE_LINE_MEMBER(dtr_serial1_w);
- DECLARE_WRITE_LINE_MEMBER(rts_serial1_w);
- DECLARE_WRITE_LINE_MEMBER(irq_serial2_w);
- DECLARE_WRITE_LINE_MEMBER(txd_serial2_w);
- DECLARE_WRITE_LINE_MEMBER(dtr_serial2_w);
- DECLARE_WRITE_LINE_MEMBER(rts_serial2_w);
+ void irq_serial1_w(int state);
+ void txd_serial1_w(int state);
+ void dtr_serial1_w(int state);
+ void rts_serial1_w(int state);
+ void irq_serial2_w(int state);
+ void txd_serial2_w(int state);
+ void dtr_serial2_w(int state);
+ void rts_serial2_w(int state);
// chip pins for uarts
- DECLARE_WRITE_LINE_MEMBER(rxd1_w);
- DECLARE_WRITE_LINE_MEMBER(ndcd1_w);
- DECLARE_WRITE_LINE_MEMBER(ndsr1_w);
- DECLARE_WRITE_LINE_MEMBER(nri1_w);
- DECLARE_WRITE_LINE_MEMBER(ncts1_w);
- DECLARE_WRITE_LINE_MEMBER(rxd2_w);
- DECLARE_WRITE_LINE_MEMBER(ndcd2_w);
- DECLARE_WRITE_LINE_MEMBER(ndsr2_w);
- DECLARE_WRITE_LINE_MEMBER(nri2_w);
- DECLARE_WRITE_LINE_MEMBER(ncts2_w);
+ void rxd1_w(int state);
+ void ndcd1_w(int state);
+ void ndsr1_w(int state);
+ void nri1_w(int state);
+ void ncts1_w(int state);
+ void rxd2_w(int state);
+ void ndcd2_w(int state);
+ void ndsr2_w(int state);
+ void nri2_w(int state);
+ void ncts2_w(int state);
// rtc
- DECLARE_WRITE_LINE_MEMBER(irq_rtc_w);
+ void irq_rtc_w(int state);
// keyboard
- DECLARE_WRITE_LINE_MEMBER(irq_keyboard_w);
- DECLARE_WRITE_LINE_MEMBER(kbdp21_gp25_gatea20_w);
- DECLARE_WRITE_LINE_MEMBER(kbdp20_gp20_reset_w);
+ void irq_keyboard_w(int state);
+ void irq_mouse_w(int state);
+ void kbdp21_gp25_gatea20_w(int state);
+ void kbdp20_gp20_reset_w(int state);
void unmap_fdc(address_map &map);
void map_lpt(address_map &map);
@@ -100,9 +96,11 @@ public:
uint8_t keybc_status_r();
void keybc_command_w(uint8_t data);
- DECLARE_FLOPPY_FORMATS(floppy_formats);
+ static void floppy_formats(format_registration &fr);
protected:
+ fdc37c93x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
@@ -111,6 +109,9 @@ protected:
virtual void dack_w(int line, uint8_t data) override;
virtual void eop_w(int state) override;
+ u8 m_device_id = 0;
+ u8 m_device_rev = 0;
+
private:
// put your private members here
enum OperatingMode
@@ -147,10 +148,10 @@ private:
devcb_write_line m_txd2_callback;
devcb_write_line m_ndtr2_callback;
devcb_write_line m_nrts2_callback;
- required_device<pc_fdc_interface> floppy_controller_fdcdev;
+ required_device<smc37c78_device> floppy_controller_fdcdev;
required_device<pc_lpt_device> pc_lpt_lptdev;
- required_device<ns16450_device> pc_serial1_comdev;
- required_device<ns16450_device> pc_serial2_comdev;
+ required_device<ns16550_device> pc_serial1_comdev;
+ required_device<ns16550_device> pc_serial2_comdev;
required_device<ds12885_device> ds12885_rtcdev;
required_device<kbdc8042_device> m_kbdc;
int sysopt_pin;
@@ -185,17 +186,26 @@ private:
void write_auxio_configuration_register(int index, int data);
uint16_t read_global_configuration_register(int index);
uint16_t read_logical_configuration_register(int index);
- uint16_t read_fdd_configuration_register(int index) { return 0; }
- uint16_t read_ide1_configuration_register(int index) { return 0; }
- uint16_t read_ide2_configuration_register(int index) { return 0; }
- uint16_t read_parallel_configuration_register(int index) { return 0; }
- uint16_t read_serial1_configuration_register(int index) { return 0; }
- uint16_t read_serial2_configuration_register(int index) { return 0; }
+ uint16_t read_fdd_configuration_register(int index) { return configuration_registers[logical_device][index]; }
+ uint16_t read_ide1_configuration_register(int index) { return configuration_registers[logical_device][index]; }
+ uint16_t read_ide2_configuration_register(int index) { return configuration_registers[logical_device][index]; }
+ uint16_t read_parallel_configuration_register(int index) { return configuration_registers[logical_device][index]; }
+ uint16_t read_serial1_configuration_register(int index) { return configuration_registers[logical_device][index]; }
+ uint16_t read_serial2_configuration_register(int index) { return configuration_registers[logical_device][index]; }
uint16_t read_rtc_configuration_register(int index);
uint16_t read_keyboard_configuration_register(int index);
uint16_t read_auxio_configuration_register(int index);
};
+class fdc37m707_device : public fdc37c93x_device
+{
+public:
+ fdc37m707_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ ~fdc37m707_device() {}
+};
+
DECLARE_DEVICE_TYPE(FDC37C93X, fdc37c93x_device);
+DECLARE_DEVICE_TYPE(FDC37M707, fdc37m707_device);
+
#endif // MAME_MACHINE_FDC37C93X_H