Previous 199869 Revisions Next

r19429 Sunday 9th December, 2012 at 18:17:57 UTC by Curt Coder
upd765: Added DP8473 and PC8477A variants. (nw)
(MESS) fd2000: Used correct FDCs. (nw)
[src/emu/machine]upd765.c upd765.h
[src/mess/machine]fd2000.c fd2000.h

trunk/src/emu/machine/upd765.c
r19428r19429
99const device_type SMC37C78 = &device_creator<smc37c78_device>;
1010const device_type N82077AA = &device_creator<n82077aa_device>;
1111const device_type PC_FDC_SUPERIO = &device_creator<pc_fdc_superio_device>;
12const device_type DP8473 = &device_creator<dp8473_device>;
13const device_type PC8477A = &device_creator<pc8477a_device>;
1214
1315DEVICE_ADDRESS_MAP_START(map, 8, upd765a_device)
1416   AM_RANGE(0x0, 0x0) AM_READ(msr_r)
r19428r19429
5860   AM_RANGE(0x7, 0x7) AM_READWRITE(dir_r, ccr_w)
5961ADDRESS_MAP_END
6062
63DEVICE_ADDRESS_MAP_START(map, 8, dp8473_device)
64   AM_RANGE(0x0, 0x0) AM_READ(sra_r)
65   AM_RANGE(0x1, 0x1) AM_READ(srb_r)
66   AM_RANGE(0x2, 0x2) AM_READWRITE(dor_r, dor_w)
67   AM_RANGE(0x3, 0x3) AM_READWRITE(tdr_r, tdr_w)
68   AM_RANGE(0x4, 0x4) AM_READWRITE(msr_r, dsr_w)
69   AM_RANGE(0x5, 0x5) AM_READWRITE(fifo_r, fifo_w)
70   AM_RANGE(0x7, 0x7) AM_READWRITE(dir_r, ccr_w)
71ADDRESS_MAP_END
6172
73DEVICE_ADDRESS_MAP_START(map, 8, pc8477a_device)
74   AM_RANGE(0x0, 0x0) AM_READ(sra_r)
75   AM_RANGE(0x1, 0x1) AM_READ(srb_r)
76   AM_RANGE(0x2, 0x2) AM_READWRITE(dor_r, dor_w)
77   AM_RANGE(0x3, 0x3) AM_READWRITE(tdr_r, tdr_w)
78   AM_RANGE(0x4, 0x4) AM_READWRITE(msr_r, dsr_w)
79   AM_RANGE(0x5, 0x5) AM_READWRITE(fifo_r, fifo_w)
80   AM_RANGE(0x7, 0x7) AM_READWRITE(dir_r, ccr_w)
81ADDRESS_MAP_END
82
83
6284int upd765_family_device::rates[4] = { 500000, 300000, 250000, 1000000 };
6385
6486upd765_family_device::upd765_family_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock) : pc_fdc_interface(mconfig, type, name, tag, owner, clock)
r19428r19429
22012223   ready_connected = false;
22022224   select_connected = true;
22032225}
2226
2227dp8473_device::dp8473_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : upd765_family_device(mconfig, PC_FDC_SUPERIO, "PC FDC SUPERIO", tag, owner, clock)
2228{
2229   m_shortname = "dp8473";
2230   ready_polled = false;
2231   ready_connected = false;
2232   select_connected = true;
2233}
2234
2235pc8477a_device::pc8477a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : upd765_family_device(mconfig, PC_FDC_SUPERIO, "PC FDC SUPERIO", tag, owner, clock)
2236{
2237   m_shortname = "pc8477a";
2238   ready_polled = false;
2239   ready_connected = false;
2240   select_connected = true;
2241}
trunk/src/emu/machine/upd765.h
r19428r19429
4040#define MCFG_PC_FDC_SUPERIO_ADD(_tag)   \
4141   MCFG_DEVICE_ADD(_tag, PC_FDC_SUPERIO, 0)
4242
43#define MCFG_DP8473_ADD(_tag)   \
44   MCFG_DEVICE_ADD(_tag, DP8473, 0)
45
46#define MCFG_PC8477A_ADD(_tag)   \
47   MCFG_DEVICE_ADD(_tag, PC8477A, 0)
48
4349/* Interface required for PC ISA wrapping */
4450class pc_fdc_interface : public device_t {
4551public:
r19428r19429
431437   virtual DECLARE_ADDRESS_MAP(map, 8);
432438};
433439
440class dp8473_device : public upd765_family_device {
441public:
442   dp8473_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
443
444   virtual DECLARE_ADDRESS_MAP(map, 8);
445};
446
447class pc8477a_device : public upd765_family_device {
448public:
449   pc8477a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
450
451   virtual DECLARE_ADDRESS_MAP(map, 8);
452};
453
434454extern const device_type UPD765A;
435455extern const device_type UPD765B;
436456extern const device_type I8272A;
r19428r19429
438458extern const device_type SMC37C78;
439459extern const device_type N82077AA;
440460extern const device_type PC_FDC_SUPERIO;
461extern const device_type DP8473;
462extern const device_type PC8477A;
441463
442464#endif
trunk/src/mess/machine/fd2000.c
r19428r19429
1313
1414   - IEC
1515   - VIA
16   - DP8473/PC8477A command extensions to upd765
1617   - D1M/D2M/D4M image format (http://ist.uwaterloo.ca/~schepers/formats/D2M-DNP.TXT)
1718
1819*/
r19428r19429
9293static ADDRESS_MAP_START( fd2000_mem, AS_PROGRAM, 8, fd2000_device )
9394   AM_RANGE(0x0000, 0x3fff) AM_RAM
9495   AM_RANGE(0x4000, 0x400f) AM_MIRROR(0xbf0) AM_DEVREADWRITE(M6522_TAG, via6522_device, read, write)
95   AM_RANGE(0x4e00, 0x4e07) AM_MIRROR(0x1f8) AM_DEVICE(DP8473_TAG, upd765a_device, map)
96   AM_RANGE(0x4e00, 0x4e07) AM_MIRROR(0x1f8) AM_DEVICE(DP8473_TAG, dp8473_device, map)
9697   AM_RANGE(0x5000, 0x7fff) AM_RAM
9798   AM_RANGE(0x8000, 0xffff) AM_ROM AM_REGION(M6502_TAG, 0)
9899ADDRESS_MAP_END
99100
100101
101102//-------------------------------------------------
102//  via6522_interface via1_intf
103//  ADDRESS_MAP( fd4000_mem )
103104//-------------------------------------------------
104105
106static ADDRESS_MAP_START( fd4000_mem, AS_PROGRAM, 8, fd4000_device )
107   AM_RANGE(0x0000, 0x3fff) AM_RAM
108   AM_RANGE(0x4000, 0x400f) AM_MIRROR(0xbf0) AM_DEVREADWRITE(M6522_TAG, via6522_device, read, write)
109   AM_RANGE(0x4e00, 0x4e07) AM_MIRROR(0x1f8) AM_DEVICE(PC8477AV1_TAG, pc8477a_device, map)
110   AM_RANGE(0x5000, 0x7fff) AM_RAM
111   AM_RANGE(0x8000, 0xffff) AM_ROM AM_REGION(M6502_TAG, 0)
112ADDRESS_MAP_END
113
114
115//-------------------------------------------------
116//  via6522_interface via_intf
117//-------------------------------------------------
118
119READ8_MEMBER( fd2000_device::via_pa_r )
120{
121   /*
122   
123       bit     description
124   
125       0       
126       1       
127       2       
128       3       
129       4       
130       5       
131       6       
132       7       
133   
134   */
135
136   return 0;
137}
138
139WRITE8_MEMBER( fd2000_device::via_pa_w )
140{
141   /*
142   
143       bit     description
144   
145       0       
146       1       
147       2       
148       3       
149       4       
150       5       FAST DIR
151       6       
152       7       
153   
154   */
155}
156
157READ8_MEMBER( fd2000_device::via_pb_r )
158{
159   /*
160   
161       bit     description
162   
163       0       
164       1       
165       2       
166       3       
167       4       
168       5       
169       6       
170       7       FDC INTRQ
171   
172   */
173
174   UINT8 data = 0;
175
176   // FDC interrupt
177   data |= m_fdc->get_irq() << 7;
178
179   return data;
180}
181
182WRITE8_MEMBER( fd2000_device::via_pb_w )
183{
184   /*
185   
186       bit     description
187   
188       0       
189       1       
190       2       
191       3       
192       4       
193       5       LED
194       6       LED
195       7       
196   
197   */
198}
199
105200static const via6522_interface via_intf =
106201{
202   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, fd2000_device, via_pa_r),
203   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, fd2000_device, via_pb_r),
107204   DEVCB_NULL,
108205   DEVCB_NULL,
109206   DEVCB_NULL,
110207   DEVCB_NULL,
111   DEVCB_NULL,
112   DEVCB_NULL,
113208
209   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, fd2000_device, via_pa_w),
210   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, fd2000_device, via_pb_w),
114211   DEVCB_NULL,
115212   DEVCB_NULL,
116213   DEVCB_NULL,
117214   DEVCB_NULL,
118   DEVCB_NULL,
119   DEVCB_NULL,
120215
121216   DEVCB_NULL
122217};
r19428r19429
144239   MCFG_CPU_PROGRAM_MAP(fd2000_mem)
145240
146241   MCFG_VIA6522_ADD(M6522_TAG, 2000000, via_intf)
147   MCFG_UPD765A_ADD(DP8473_TAG, true, true)
242   MCFG_DP8473_ADD(DP8473_TAG)
148243
149244   MCFG_FLOPPY_DRIVE_ADD(DP8473_TAG":0", fd2000_floppies, "35hd", 0, floppy_image_device::default_floppy_formats)//fd2000_device::floppy_formats)
150245MACHINE_CONFIG_END
r19428r19429
156251
157252static MACHINE_CONFIG_FRAGMENT( fd4000 )
158253   MCFG_CPU_ADD(M6502_TAG, M65C02, 2000000)
159   MCFG_CPU_PROGRAM_MAP(fd2000_mem)
254   MCFG_CPU_PROGRAM_MAP(fd4000_mem)
160255
161256   MCFG_VIA6522_ADD(M6522_TAG, 2000000, via_intf)
162   MCFG_UPD765A_ADD(DP8473_TAG, true, true)
257   MCFG_PC8477A_ADD(PC8477AV1_TAG)
163258
164   MCFG_FLOPPY_DRIVE_ADD(DP8473_TAG":0", fd4000_floppies, "35ed", 0, floppy_image_device::default_floppy_formats)//fd2000_device::floppy_formats)
259   MCFG_FLOPPY_DRIVE_ADD(PC8477AV1_TAG":0", fd4000_floppies, "35ed", 0, floppy_image_device::default_floppy_formats)//fd2000_device::floppy_formats)
165260MACHINE_CONFIG_END
166261
167262
r19428r19429
217312    : device_t(mconfig, FD2000, "FD-2000", tag, owner, clock),
218313     device_cbm_iec_interface(mconfig, *this),
219314     m_maincpu(*this, M6502_TAG),
315     m_fdc(*this, DP8473_TAG),
220316     m_floppy0(*this, DP8473_TAG":0"),
221317     m_variant(TYPE_FD2000)
222318{
r19428r19429
226322    : device_t(mconfig, type, name, tag, owner, clock),
227323     device_cbm_iec_interface(mconfig, *this),
228324     m_maincpu(*this, M6502_TAG),
229     m_floppy0(*this, DP8473_TAG":0"),
325     m_fdc(*this, PC8477AV1_TAG),
326     m_floppy0(*this, PC8477AV1_TAG":0"),
230327     m_variant(variant)
231328{
232329}
trunk/src/mess/machine/fd2000.h
r19428r19429
5353   virtual const rom_entry *device_rom_region() const;
5454   virtual machine_config_constructor device_mconfig_additions() const;
5555
56   DECLARE_READ8_MEMBER( via_pa_r );
57   DECLARE_WRITE8_MEMBER( via_pa_w );
58   DECLARE_READ8_MEMBER( via_pb_r );
59   DECLARE_WRITE8_MEMBER( via_pb_w );
60
5661   //DECLARE_FLOPPY_FORMATS( floppy_formats );
5762
5863protected:
r19428r19429
6873   void cbm_iec_reset(int state);
6974
7075   required_device<m65c02_device> m_maincpu;
76   required_device<upd765_family_device> m_fdc;
7177   required_device<floppy_connector> m_floppy0;
7278
7379   int m_variant;

Previous 199869 Revisions Next


© 1997-2024 The MAME Team