1 // license:BSD-3-Clause
2 // copyright-holders:Curt Coder
3 /**********************************************************************
4 
5     Luxor 55-10828 "slow" floppy disk controller emulation
6 
7 *********************************************************************/
8 
9 #ifndef MAME_BUS_ABCBUS_LUXOR10828_H
10 #define MAME_BUS_ABCBUS_LUXOR10828_H
11 
12 #pragma once
13 
14 #include "abcbus.h"
15 #include "cpu/z80/z80.h"
16 #include "machine/z80daisy.h"
17 #include "formats/abc800_dsk.h"
18 #include "imagedev/floppy.h"
19 #include "machine/wd_fdc.h"
20 #include "machine/z80pio.h"
21 
22 
23 
24 //**************************************************************************
25 //  MACROS / CONSTANTS
26 //**************************************************************************
27 
28 #define ADDRESS_ABC830          45
29 #define ADDRESS_ABC832          44
30 #define ADDRESS_ABC834          44
31 #define ADDRESS_ABC850          44
32 
33 
34 #define DRIVE_TEAC_FD55F        0x01
35 #define DRIVE_BASF_6138         0x02
36 #define DRIVE_MICROPOLIS_1015F  0x03
37 #define DRIVE_BASF_6118         0x04
38 #define DRIVE_MICROPOLIS_1115F  0x05
39 #define DRIVE_BASF_6106_08      0x08
40 #define DRIVE_MPI_51            0x09
41 #define DRIVE_BASF_6105         0x0e
42 #define DRIVE_BASF_6106         0x0f
43 
44 
45 
46 //**************************************************************************
47 //  TYPE DEFINITIONS
48 //**************************************************************************
49 
50 // ======================> luxor_55_10828_device
51 
52 class luxor_55_10828_device :  public device_t,
53 								public device_abcbus_card_interface
54 {
55 public:
56 	// construction/destruction
57 	luxor_55_10828_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
58 
59 protected:
60 	// device-level overrides
61 	virtual void device_start() override;
62 	virtual void device_reset() override;
63 
64 	// optional information overrides
65 	virtual const tiny_rom_entry *device_rom_region() const override;
66 	virtual void device_add_mconfig(machine_config &config) override;
67 	virtual ioport_constructor device_input_ports() const override;
68 
69 	// device_abcbus_interface overrides
70 	virtual void abcbus_cs(uint8_t data) override;
71 	virtual uint8_t abcbus_inp() override;
72 	virtual void abcbus_out(uint8_t data) override;
73 	virtual uint8_t abcbus_stat() override;
74 	virtual void abcbus_c1(uint8_t data) override;
75 	virtual void abcbus_c3(uint8_t data) override;
76 
77 private:
78 	uint8_t pio_pa_r();
79 	void pio_pa_w(uint8_t data);
80 	uint8_t pio_pb_r();
81 	void pio_pb_w(uint8_t data);
82 
83 	DECLARE_WRITE_LINE_MEMBER( fdc_intrq_w );
84 	DECLARE_WRITE_LINE_MEMBER( fdc_drq_w );
85 
86 	void ctrl_w(uint8_t data);
87 	void status_w(uint8_t data);
88 	uint8_t fdc_r(offs_t offset);
89 	void fdc_w(offs_t offset, uint8_t data);
90 
91 	DECLARE_FLOPPY_FORMATS( floppy_formats );
92 
93 	void luxor_55_10828_io(address_map &map);
94 	void luxor_55_10828_mem(address_map &map);
95 
96 	required_device<z80_device> m_maincpu;
97 	required_device<z80pio_device> m_pio;
98 	required_device<mb8876_device> m_fdc;
99 	required_device<floppy_connector> m_floppy0;
100 	required_device<floppy_connector> m_floppy1;
101 	required_ioport m_sw1;
102 	required_ioport m_s1;
103 
104 	bool m_cs;              // card selected
105 	uint8_t m_status;         // ABC BUS status
106 	uint8_t m_data;           // ABC BUS data
107 	bool m_fdc_irq;         // floppy interrupt
108 	bool m_fdc_drq;         // floppy data request
109 	int m_wait_enable;      // wait enable
110 	int m_sel0;             // drive select 0
111 	int m_sel1;             // drive select 1
112 };
113 
114 
115 // device type definition
116 DECLARE_DEVICE_TYPE(LUXOR_55_10828, luxor_55_10828_device)
117 
118 #endif // MAME_BUS_ABCBUS_LUXOR10828_H
119