Previous 199869 Revisions Next

r19663 Tuesday 18th December, 2012 at 15:36:17 UTC by Curt Coder
(MESS) fp: Floppy modernization. (nw)
[src/mess/drivers]apricotp.c
[src/mess/includes]apricotp.h

trunk/src/mess/drivers/apricotp.c
r19662r19663
7474void fp_state::video_start()
7575{
7676   // allocate memory
77   m_video_ram = auto_alloc_array(machine(), UINT16, 0x20000);
77   m_video_ram.allocate(0x20000);
7878}
7979
8080
r19662r19663
124124{
125125   /*
126126
127        bit     description
127       bit     description
128128
129        0       BUSY
130        1       SE
131        2       _FAULT
132        3       PE
133        4       LP23
134        5       DCNG-L
135        6       J9 1-2
136        7       J9 3-4
129       0       BUSY
130       1       SE
131       2       _FAULT
132       3       PE
133       4       LP23
134       5       DCNG-L
135       6       J9 1-2
136       7       J9 3-4
137137
138    */
138   */
139139
140140   UINT8 data = 0;
141141
142   // centronics
142143   data |= m_centronics->busy_r();
143144   data |= m_centronics->vcc_r() << 1;
144145   data |= m_centronics->fault_r() << 2;
145146   data |= m_centronics->pe_r() << 3;
146147
148   // floppy
149   data |= (m_floppy ? m_floppy->dskchg_r() : 1) << 5;
150
147151   return data;
148152}
149153
r19662r19663
169173{
170174   /*
171175
172        bit     description
176       bit     description
173177
174        0       B
175        1       G
176        2       R
177        3       I
178        4       index
179        5       index
180        6       index
181        7       index
178       0       B
179       1       G
180       2       R
181       3       I
182       4       index
183       5       index
184       6       index
185       7       index
182186
183    */
187   */
184188}
185189
186190
r19662r19663
188192{
189193   /*
190194
191        bit     description
195       bit     description
192196
193        0       CRTRES-H
194        1       SEL1
195        2       DON-H
196        3       LCDON-H
197        4       SEL2
198        5       L3 even access
199        6       L2 odd access
200        7       L1 video RAM enable
201        8
202        9       STOP LED
203        10      POWER LED
204        11      SHIFT LOCK LED
205        12      DISK LED
206        13      VOICE LED
207        14      COLOUR SELECT LED
208        15      CAPS LOCK LED
197       0       CRTRES-H
198       1       SEL1
199       2       DON-H
200       3       LCDON-H
201       4       SEL2
202       5       L3 even access
203       6       L2 odd access
204       7       L1 video RAM enable
205       8
206       9       STOP LED
207       10      POWER LED
208       11      SHIFT LOCK LED
209       12      DISK LED
210       13      VOICE LED
211       14      COLOUR SELECT LED
212       15      CAPS LOCK LED
209213
210    */
214   */
211215
212216   m_video = data & 0xff;
213217}
214218
219void fp_state::lat_ls259_w(offs_t offset, int state)
220{
221   switch (offset)
222   {
223   case 0:
224      {
225         m_floppy = NULL;
215226
227         if (state) m_floppy = m_floppy0->get_device();
228         else m_floppy = m_floppy1->get_device();
229
230         m_fdc->set_floppy(m_floppy);
231
232         if (m_floppy)
233         {
234            m_floppy->set_rpm(600);
235            m_floppy->mon_w(0);
236         }
237      }
238      break;
239   }
240}
241
242WRITE8_MEMBER( fp_state::lat_w )
243{
244   lat_ls259_w((offset >> 1) & 0x07, BIT(data, 0));
245}
246
247
216248READ16_MEMBER( fp_state::mem_r )
217249{
218250   UINT16 data = 0xffff;
r19662r19663
312344
313345static ADDRESS_MAP_START( fp_io, AS_IO, 16, fp_state )
314346   ADDRESS_MAP_UNMAP_HIGH
315   AM_RANGE(0x000, 0x007) AM_DEVREADWRITE8_LEGACY(WD2797_TAG, wd17xx_r, wd17xx_w, 0x00ff)
347   AM_RANGE(0x000, 0x007) AM_DEVREADWRITE8(WD2797_TAG, wd2797_t, read, write, 0x00ff)
316348   AM_RANGE(0x008, 0x00f) AM_DEVREADWRITE8_LEGACY(I8253A5_TAG, pit8253_r, pit8253_w, 0x00ff)
317349   AM_RANGE(0x018, 0x01f) AM_DEVREADWRITE8_LEGACY(Z80SIO0_TAG, z80dart_ba_cd_r, z80dart_ba_cd_w, 0x00ff)
318350   AM_RANGE(0x020, 0x021) AM_DEVWRITE8(CENTRONICS_TAG, centronics_device, write, 0x00ff)
r19662r19663
445477   DEVCB_DEVICE_LINE(I8259A_TAG, pic8259_ir7_w),
446478   DEVCB_NULL,
447479   DEVCB_NULL,
448   { DEVCB_NULL, DEVCB_DEVICE_HANDLER(WD2797_TAG, wd17xx_data_r), DEVCB_NULL, DEVCB_NULL },
449   { DEVCB_NULL, DEVCB_DEVICE_HANDLER(WD2797_TAG, wd17xx_data_w), DEVCB_NULL, DEVCB_NULL },
480   { DEVCB_NULL, DEVCB_DEVICE_MEMBER(WD2797_TAG, wd_fdc_t, data_r), DEVCB_NULL, DEVCB_NULL },
481   { DEVCB_NULL, DEVCB_DEVICE_MEMBER(WD2797_TAG, wd_fdc_t, data_w), DEVCB_NULL, DEVCB_NULL },
450482   { DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL }
451483};
452484
r19662r19663
481513//  wd17xx_interface fdc_intf
482514//-------------------------------------------------
483515
516static SLOT_INTERFACE_START( fp_floppies )
517   SLOT_INTERFACE( "35dd", FLOPPY_35_DD ) // Sony OA-D32W (600 rpm)
518SLOT_INTERFACE_END
519/*
484520static LEGACY_FLOPPY_OPTIONS_START( act )
485   LEGACY_FLOPPY_OPTION( img2hd, "dsk", "2HD disk image", basicdsk_identify_default, basicdsk_construct_default, NULL,
486      HEADS([2])
487      TRACKS([80])
488      SECTORS([16])
489      SECTOR_LENGTH([256])
490      FIRST_SECTOR_ID([1]))
521    LEGACY_FLOPPY_OPTION( img2hd, "dsk", "2HD disk image", basicdsk_identify_default, basicdsk_construct_default, NULL,
522        HEADS([2])
523        TRACKS([80])
524        SECTORS([16])
525        SECTOR_LENGTH([256])
526        FIRST_SECTOR_ID([1]))
491527LEGACY_FLOPPY_OPTIONS_END
528*/
492529
493static const floppy_interface act_floppy_interface =
530void fp_state::fdc_intrq_w(bool state)
494531{
495   DEVCB_NULL,
496   DEVCB_NULL,
497   DEVCB_NULL,
498   DEVCB_NULL,
499   DEVCB_NULL,
500   FLOPPY_STANDARD_3_5_DSDD, // Sony OA-D32W
501   LEGACY_FLOPPY_OPTIONS_NAME(act),
502   "floppy_3_5",
503   NULL
504};
532   m_pic->ir1_w(state);
533}
505534
506static const wd17xx_interface fdc_intf =
535void fp_state::fdc_drq_w(bool state)
507536{
508   DEVCB_LINE_GND,
509   DEVCB_DEVICE_LINE(I8259A_TAG, pic8259_ir1_w),
510   DEVCB_DEVICE_LINE_MEMBER(I8237_TAG, am9517a_device, dreq1_w),
511   { FLOPPY_0, NULL, NULL, NULL }
512};
537   m_dmac->dreq1_w(state);
538}
513539
514540
515541//-------------------------------------------------
r19662r19663
518544
519545WRITE_LINE_MEMBER( fp_state::busy_w )
520546{
521   if (!state)   pic8259_ir6_w(m_pic, ASSERT_LINE);
547   if (!state) pic8259_ir6_w(m_pic, ASSERT_LINE);
522548}
523549
524550static const centronics_interface centronics_intf =
r19662r19663
542568
543569static const sn76496_config psg_intf =
544570{
545    DEVCB_NULL
571   DEVCB_NULL
546572};
547573
548574
r19662r19663
556582
557583void fp_state::machine_start()
558584{
585   // floppy callbacks
586   m_fdc->setup_intrq_cb(wd_fdc_t::line_cb(FUNC(fp_state::fdc_intrq_w), this));
587   m_fdc->setup_drq_cb(wd_fdc_t::line_cb(FUNC(fp_state::fdc_drq_w), this));
588
559589   // register CPU IRQ callback
560590   m_maincpu->set_irq_acknowledge_callback(fp_irq_callback);
561591
562592   // allocate memory
563   m_work_ram = auto_alloc_array(machine(), UINT16, m_ram->size() / 2);
593   m_work_ram.allocate(m_ram->size() / 2);
564594}
565595
566596
r19662r19663
571601void fp_state::machine_reset()
572602{
573603   m_video = 0;
604
605   m_fdc->dden_w(0);
606
607   for (offs_t offset = 0; offset < 7; offset++)
608   {
609      lat_ls259_w(offset, 0);
610   }
574611}
575612
576613
r19662r19663
627664   MCFG_PIC8259_ADD(I8259A_TAG, pic_intf)
628665   MCFG_PIT8253_ADD(I8253A5_TAG, pit_intf)
629666   MCFG_Z80DART_ADD(Z80SIO0_TAG, 2500000, sio_intf)
630   MCFG_WD2797_ADD(WD2797_TAG, fdc_intf)
631   MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(act_floppy_interface)
667   MCFG_WD2797x_ADD(WD2797_TAG, 2000000)
668   MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG":0", fp_floppies, "35dd", NULL, floppy_image_device::default_floppy_formats)
669   MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG":1", fp_floppies, NULL,   NULL, floppy_image_device::default_floppy_formats)
632670   MCFG_CENTRONICS_PRINTER_ADD(CENTRONICS_TAG, centronics_intf)
633671
634672   /* internal ram */
r19662r19663
649687
650688ROM_START( fp )
651689   ROM_REGION( 0x8000, I8086_TAG, 0 )
652   ROM_LOAD16_BYTE( "lo_fp_3.1.ic20", 0x0000, 0x4000, CRC(0572add2) SHA1(c7ab0e5ced477802e37f9232b5673f276b8f5623) )   // Labelled 11212721 F97E PORT LO VR 3.1
653   ROM_LOAD16_BYTE( "hi_fp_3.1.ic9",  0x0001, 0x4000, CRC(3903674b) SHA1(8418682dcc0c52416d7d851760fea44a3cf2f914) )   // Labelled 11212721 BD2D PORT HI VR 3.1
690   ROM_LOAD16_BYTE( "lo_fp_3.1.ic20", 0x0000, 0x4000, CRC(0572add2) SHA1(c7ab0e5ced477802e37f9232b5673f276b8f5623) )   // Labelled 11212721 F97E PORT LO VR 3.1
691   ROM_LOAD16_BYTE( "hi_fp_3.1.ic9",  0x0001, 0x4000, CRC(3903674b) SHA1(8418682dcc0c52416d7d851760fea44a3cf2f914) )   // Labelled 11212721 BD2D PORT HI VR 3.1
654692
655693   ROM_REGION( 0x1000, HD63B01V1_TAG, 0 )
656694   ROM_LOAD( "voice interface hd63b01v01.ic29", 0x0000, 0x1000, NO_DUMP )
trunk/src/mess/includes/apricotp.h
r19662r19663
77#include "emu.h"
88#include "cpu/i86/i86.h"
99#include "cpu/m6800/m6800.h"
10#include "formats/basicdsk.h"
11#include "imagedev/flopdrv.h"
1210#include "machine/am9517a.h"
1311#include "machine/apricotkb.h"
1412#include "machine/ctronics.h"
1513#include "machine/pic8259.h"
1614#include "machine/pit8253.h"
1715#include "machine/ram.h"
18#include "machine/wd17xx.h"
16#include "machine/wd_fdc.h"
1917#include "machine/z80dart.h"
2018#include "sound/sn76496.h"
2119#include "video/mc6845.h"
r19662r19663
2725//  MACROS / CONSTANTS
2826//**************************************************************************
2927
30#define I8086_TAG      "ic7"
31#define I8284_TAG      "ic30"
32#define I8237_TAG      "ic17"
33#define I8259A_TAG      "ic51"
34#define I8253A5_TAG      "ic20"
35#define TMS4500_TAG      "ic42"
36#define MC6845_TAG      "ic69"
37#define HD63B01V1_TAG   "ic29"
38#define AD7574_TAG      "ic34"
39#define AD1408_TAG      "ic37"
40#define Z80SIO0_TAG      "ic6"
41#define WD2797_TAG      "ic5"
42#define SN76489AN_TAG   "ic13"
43#define CENTRONICS_TAG   "centronics"
44#define SCREEN_LCD_TAG   "screen0"
45#define SCREEN_CRT_TAG   "screen1"
28#define I8086_TAG       "ic7"
29#define I8284_TAG       "ic30"
30#define I8237_TAG       "ic17"
31#define I8259A_TAG      "ic51"
32#define I8253A5_TAG     "ic20"
33#define TMS4500_TAG     "ic42"
34#define MC6845_TAG      "ic69"
35#define HD63B01V1_TAG   "ic29"
36#define AD7574_TAG      "ic34"
37#define AD1408_TAG      "ic37"
38#define Z80SIO0_TAG     "ic6"
39#define WD2797_TAG      "ic5"
40#define SN76489AN_TAG   "ic13"
41#define CENTRONICS_TAG  "centronics"
42#define SCREEN_LCD_TAG  "screen0"
43#define SCREEN_CRT_TAG  "screen1"
4644
4745
4846
r19662r19663
5755public:
5856   fp_state(const machine_config &mconfig, device_type type, const char *tag)
5957      : driver_device(mconfig, type, tag),
60        m_maincpu(*this, I8086_TAG),
61        m_soundcpu(*this, HD63B01V1_TAG),
62        m_dmac(*this, I8237_TAG),
63        m_pic(*this, I8259A_TAG),
64        m_pit(*this, I8253A5_TAG),
65        m_sio(*this, Z80SIO0_TAG),
66        m_fdc(*this, WD2797_TAG),
67        m_crtc(*this, MC6845_TAG),
68        m_ram(*this, RAM_TAG),
69        m_floppy0(*this, FLOPPY_0),
70        m_centronics(*this, CENTRONICS_TAG)
58         m_maincpu(*this, I8086_TAG),
59         m_soundcpu(*this, HD63B01V1_TAG),
60         m_dmac(*this, I8237_TAG),
61         m_pic(*this, I8259A_TAG),
62         m_pit(*this, I8253A5_TAG),
63         m_sio(*this, Z80SIO0_TAG),
64         m_fdc(*this, WD2797_TAG),
65         m_crtc(*this, MC6845_TAG),
66         m_ram(*this, RAM_TAG),
67         m_floppy0(*this, WD2797_TAG":0"),
68         m_floppy1(*this, WD2797_TAG":1"),
69         m_floppy(NULL),
70         m_centronics(*this, CENTRONICS_TAG),
71         m_work_ram(*this, "work_ram"),
72         m_video_ram(*this, "video_ram")
7173   { }
7274
7375   required_device<cpu_device> m_maincpu;
r19662r19663
7678   required_device<pic8259_device> m_pic;
7779   required_device<pit8253_device> m_pit;
7880   required_device<z80dart_device> m_sio;
79   required_device<wd2797_device> m_fdc;
81   required_device<wd2797_t> m_fdc;
8082   required_device<mc6845_device> m_crtc;
8183   required_device<ram_device> m_ram;
82   required_device<legacy_floppy_image_device> m_floppy0;
84   required_device<floppy_connector> m_floppy0;
85   required_device<floppy_connector> m_floppy1;
86   floppy_image_device *m_floppy;
8387   required_device<centronics_device> m_centronics;
8488
8589   virtual void machine_start();
r19662r19663
96100   DECLARE_WRITE8_MEMBER( contrast_w );
97101   DECLARE_WRITE8_MEMBER( palette_w );
98102   DECLARE_WRITE16_MEMBER( video_w );
103   DECLARE_WRITE8_MEMBER( lat_w );
99104   DECLARE_WRITE_LINE_MEMBER( busy_w );
105   void fdc_intrq_w(bool state);
106   void fdc_drq_w(bool state);
100107
101   UINT16 *m_work_ram;
108   void lat_ls259_w(offs_t offset, int state);
102109
110   optional_shared_ptr<UINT16> m_work_ram;
111
103112   // video state
104   UINT16 *m_video_ram;
113   optional_shared_ptr<UINT16> m_video_ram;
105114   UINT8 m_video;
106115};
107116

Previous 199869 Revisions Next


© 1997-2024 The MAME Team