Previous 15994 Revisions Next

r5705 Saturday 12th September, 2009 at 10:33:58 UTC by Miodrag Milanović
Joining code of flopdrv and mflopimg in one (just merge, no cleanup yet)
[src/mess]mess.mak
[src/mess/devices]appldriv.c flopdrv.c flopdrv.h mflopimg.c mflopimg.h sonydriv.c
[src/mess/drivers]abc80.c abc80x.c adam.c amstrad.c apf.c apple2.c apple2gs.c apple3.c aquarius.c at.c atarist.c atom.c b2m.c bbc.c bebox.c bw12.c bw2.c cgenie.c coco.c compis.c comx35.c concept.c dgn_beta.c einstein.c elwro800.c enterp.c exidy.c fm7.c geneve.c kaypro.c kc.c mbee.c mikromik.c msx.c nanos.c nascom1.c nc.c newbrain.c oric.c orion.c osborne1.c osi.c partner.c pc.c pc8801.c pcw.c pcw16.c pk8020.c prof80.c pyl601.c ql.c samcoupe.c sg1000.c sord.c special.c specpls3.c svi318.c thomson.c ti990_4.c ti99_4p.c ti99_4x.c ti99_8.c tiki100.c tmc2000e.c tmc600.c trs80.c v1050.c vector06.c x1.c x68k.c xerox820.c xor100.c z80ne.c
[src/mess/machine]990_dk.c 99_dsk.c beta.c exidy.c msx.c osborne1.c svi318.c

src/mess/machine/99_dsk.c
r5704r5705
3131#include "99_dsk.h"
3232#include "mm58274c.h"
3333#include "formats/basicdsk.h"
34#include "devices/mflopimg.h"
34#include "devices/flopdrv.h"
3535
3636
3737#define MAX_FLOPPIES 4
src/mess/machine/990_dk.c
r5704r5705
1212
1313#include "990_dk.h"
1414#include "formats/basicdsk.h"
15#include "devices/mflopimg.h"
15#include "devices/flopdrv.h"
1616
1717#define MAX_FLOPPIES 4
1818
src/mess/machine/osborne1.c
r5704r5705
2222#include "cpu/z80/z80daisy.h"
2323#include "sound/beep.h"
2424#include "includes/osborne1.h"
25#include "devices/mflopimg.h"
25#include "devices/flopdrv.h"
2626
2727#define RAMMODE      (0x01)
2828
src/mess/machine/svi318.c
r5704r5705
1414#include "machine/ins8250.h"
1515#include "machine/wd17xx.h"
1616#include "machine/ctronics.h"
17#include "devices/mflopimg.h"
17#include "devices/flopdrv.h"
1818#include "devices/cassette.h"
1919#include "formats/svi_cas.h"
2020#include "sound/dac.h"
src/mess/machine/msx.c
r5704r5705
1717#include "includes/msx.h"
1818#include "machine/tc8521.h"
1919#include "machine/wd17xx.h"
20#include "devices/mflopimg.h"
20#include "devices/flopdrv.h"
2121#include "formats/basicdsk.h"
2222#include "video/tms9928a.h"
2323#include "cpu/z80/z80.h"
src/mess/machine/beta.c
r5704r5705
88
99*********************************************************************/
1010#include "driver.h"
11#include "devices/mflopimg.h"
11#include "devices/flopdrv.h"
1212#include "formats/trd_dsk.h"
1313#include "machine/wd17xx.h"
1414#include "machine/beta.h"
src/mess/machine/exidy.c
r5704r5705
1313#include "devices/cartslot.h"
1414#include "machine/ay31015.h"
1515#include "includes/exidy.h"
16#include "devices/mflopimg.h"
16#include "devices/flopdrv.h"
1717
1818
1919static const device_config *exidy_ay31015;
src/mess/mess.mak
r5704r5705
395395   $(MESS_FORMATS)/dsk_dsk.o   \
396396   $(MESS_DEVICES)/flopdrv.o   \
397397   $(MESS_DEVICES)/harddriv.o   \
398   $(MESS_DEVICES)/mflopimg.o   \
399398   $(MESS_DEVICES)/microdrv.o   \
400399   $(MESS_DEVICES)/multcart.o   \
401400   $(MESS_DEVICES)/printer.o   \
src/mess/devices/mflopimg.c
r5704r5705
1/*********************************************************************
2
3   mflopimg.c
4
5   MESS interface to the floppy disk image abstraction code
6
7*********************************************************************/
8
9#include "mame.h"
10#include "mflopimg.h"
11#include "flopdrv.h"
12#include "formats/flopimg.h"
13
14
15
16/***************************************************************************
17    CONSTANTS
18***************************************************************************/
19
20#define FLOPPY_TAG      "floptag"
21#define LOG_FLOPPY      0
22
23
24
25/***************************************************************************
26    TYPE DEFINITIONS
27***************************************************************************/
28
29typedef struct _mess_flopimg mess_flopimg;
30struct _mess_flopimg
31{
32   floppy_image *floppy;
33   int track;
34   void (*load_proc)(const device_config *image);
35   void (*unload_proc)(const device_config *image);
36   int (*tracktranslate_proc)(const device_config *image, floppy_image *floppy, int physical_track);
37};
38
39
40
41typedef struct _floppy_error_map floppy_error_map;
42struct _floppy_error_map
43{
44   floperr_t ferr;
45   image_error_t ierr;
46   const char *message;
47};
48
49
50
51/***************************************************************************
52    GLOBAL VARIABLES
53***************************************************************************/
54
55static const floppy_error_map errmap[] =
56{
57   { FLOPPY_ERROR_SUCCESS,         IMAGE_ERROR_SUCCESS },
58   { FLOPPY_ERROR_INTERNAL,      IMAGE_ERROR_INTERNAL },
59   { FLOPPY_ERROR_UNSUPPORTED,      IMAGE_ERROR_UNSUPPORTED },
60   { FLOPPY_ERROR_OUTOFMEMORY,      IMAGE_ERROR_OUTOFMEMORY },
61   { FLOPPY_ERROR_INVALIDIMAGE,   IMAGE_ERROR_INVALIDIMAGE }
62};
63
64/***************************************************************************
65    IMPLEMENTATION
66***************************************************************************/
67
68static mess_flopimg *get_flopimg(const device_config *image)
69{
70   return (mess_flopimg *) image_lookuptag(image, FLOPPY_TAG);
71}
72
73
74
75floppy_image *flopimg_get_image(const device_config *image)
76{
77   return get_flopimg(image)->floppy;
78}
79
80
81
82static void flopimg_seek_callback(const device_config *image, int physical_track)
83{
84   mess_flopimg *flopimg;
85
86   flopimg = get_flopimg(image);
87   if (!flopimg || !flopimg->floppy)
88      return;
89
90   /* translate the track number if necessary */
91   if (flopimg->tracktranslate_proc)
92      physical_track = flopimg->tracktranslate_proc(image, flopimg->floppy, physical_track);
93
94   flopimg->track = physical_track;
95}
96
97
98
99static int flopimg_get_sectors_per_track(const device_config *image, int side)
100{
101   mess_flopimg *flopimg;
102   floperr_t err;
103   int sector_count;
104
105   flopimg = get_flopimg(image);
106   if (!flopimg || !flopimg->floppy)
107      return 0;
108
109   err = floppy_get_sector_count(flopimg->floppy, side, flopimg->track, &sector_count);
110   if (err)
111      return 0;
112   return sector_count;
113}
114
115
116
117static void flopimg_get_id_callback(const device_config *image, chrn_id *id, int id_index, int side)
118{
119   mess_flopimg *flopimg;
120   int cylinder, sector, N;
121   unsigned long flags;
122   UINT32 sector_length;
123
124   flopimg = get_flopimg(image);
125   if (!flopimg || !flopimg->floppy)
126      return;
127
128   floppy_get_indexed_sector_info(flopimg->floppy, side, flopimg->track, id_index, &cylinder, &side, &sector, &sector_length, &flags);
129
130   N = compute_log2(sector_length);
131
132   id->C = cylinder;
133   id->H = side;
134   id->R = sector;
135   id->data_id = id_index;
136   id->flags = flags;
137   id->N = ((N >= 7) && (N <= 10)) ? N - 7 : 0;
138}
139
140
141
142static void log_readwrite(const char *name, int head, int track, int sector, const char *buf, int length)
143{
144   char membuf[1024];
145   int i;
146   for (i = 0; i < length; i++)
147      sprintf(membuf + i*2, "%02x", (int) (UINT8) buf[i]);
148   logerror("%s:  head=%i track=%i sector=%i buffer='%s'\n", name, head, track, sector, membuf);
149}
150
151
152
153static void flopimg_read_sector_data_into_buffer(const device_config *image, int side, int index1, char *ptr, int length)
154{
155   mess_flopimg *flopimg;
156
157   flopimg = get_flopimg(image);
158   if (!flopimg || !flopimg->floppy)
159      return;
160
161   floppy_read_indexed_sector(flopimg->floppy, side, flopimg->track, index1, 0, ptr, length);
162
163   if (LOG_FLOPPY)
164      log_readwrite("sector_read", side, flopimg->track, index1, ptr, length);
165}
166
167
168
169static void flopimg_write_sector_data_from_buffer(const device_config *image, int side, int index1, const char *ptr, int length, int ddam)
170{
171   mess_flopimg *flopimg;
172
173   flopimg = get_flopimg(image);
174   if (!flopimg || !flopimg->floppy)
175      return;
176
177   if (LOG_FLOPPY)
178      log_readwrite("sector_write", side, flopimg->track, index1, ptr, length);
179
180   floppy_write_indexed_sector(flopimg->floppy, side, flopimg->track, index1, 0, ptr, length, ddam);
181}
182
183
184
185static void flopimg_read_track_data_info_buffer(const device_config *image, int side, void *ptr, int *length)
186{
187   mess_flopimg *flopimg;
188
189   flopimg = get_flopimg(image);
190   if (!flopimg || !flopimg->floppy)
191      return;
192
193   floppy_read_track_data(flopimg->floppy, side, flopimg->track, ptr, *length);
194}
195
196
197
198static void flopimg_write_track_data_info_buffer(const device_config *image, int side, const void *ptr, int *length)
199{
200   mess_flopimg *flopimg;
201
202   flopimg = get_flopimg(image);
203   if (!flopimg || !flopimg->floppy)
204      return;
205
206   floppy_write_track_data(flopimg->floppy, side, flopimg->track, ptr, *length);
207}
208
209
210
211static const floppy_interface mess_floppy_interface =
212{
213   flopimg_seek_callback,
214   flopimg_get_sectors_per_track,
215   flopimg_get_id_callback,
216   flopimg_read_sector_data_into_buffer,
217   flopimg_write_sector_data_from_buffer,
218   flopimg_read_track_data_info_buffer,
219   flopimg_write_track_data_info_buffer,
220   NULL
221};
222
223/* ----------------------------------------------------------------------- */
224
225static int image_fseek_thunk(void *file, INT64 offset, int whence)
226{
227   return image_fseek((const device_config *) file, offset, whence);
228}
229
230static size_t image_fread_thunk(void *file, void *buffer, size_t length)
231{
232   return image_fread((const device_config *) file, buffer, length);
233}
234
235static size_t image_fwrite_thunk(void *file, const void *buffer, size_t length)
236{
237   return image_fwrite((const device_config *) file, buffer, length);
238}
239
240static UINT64 image_fsize_thunk(void *file)
241{
242   return image_length((const device_config *) file);
243}
244
245/* ----------------------------------------------------------------------- */
246
247const struct io_procs mess_ioprocs =
248{
249   NULL,
250   image_fseek_thunk,
251   image_fread_thunk,
252   image_fwrite_thunk,
253   image_fsize_thunk
254};
255
256
257
258
259/* ----------------------------------------------------------------------- */
260
261
262static DEVICE_START( floppy )
263{
264    image_alloctag(device, FLOPPY_TAG, sizeof(mess_flopimg));
265   floppy_drive_init(device, &mess_floppy_interface);
266}
267
268
269
270static int internal_floppy_device_load(const device_config *image, int create_format, option_resolution *create_args)
271{
272   floperr_t err;
273   mess_flopimg *flopimg;
274   const mess_device_class *devclass;
275   const struct FloppyFormat *floppy_options;
276   int floppy_flags, i;
277   const char *extension;
278   int keep_geometry = 0;
279
280   /* look up instance data */
281   flopimg = get_flopimg(image);
282
283   /* figure out the floppy options */
284   devclass = mess_devclass_from_core_device(image);
285   floppy_options = mess_device_get_info_ptr(devclass, MESS_DEVINFO_PTR_FLOPPY_OPTIONS);
286
287   if (image_has_been_created(image))
288   {
289      /* creating an image */
290      assert(create_format >= 0);
291      err = floppy_create((void *) image, &mess_ioprocs, &floppy_options[create_format], create_args, &flopimg->floppy);
292      if (err)
293         goto error;
294   }
295   else
296   {
297      /* opening an image */
298      floppy_flags = image_is_writable(image) ? FLOPPY_FLAGS_READWRITE : FLOPPY_FLAGS_READONLY;
299      extension = image_filetype(image);
300      err = floppy_open_choices((void *) image, &mess_ioprocs, extension, floppy_options, floppy_flags, &flopimg->floppy);
301      if (err)
302         goto error;
303   }
304       
305   /* if we can get head and track counts, then set the geometry accordingly
306      However, at least the ti99 system family requires that medium track
307      count and drive track count be handled separately.
308      It is possible to insert a 40 track medium in an 80 track drive; the
309      TI controllers read the track count from sector 0 and automatically
310      apply double steps. Setting the track count of the drive to the
311      medium track count will then lead to unreachable tracks.
312   */
313   keep_geometry = (int)mess_device_get_info_int(mess_devclass_from_core_device(image), MESS_DEVINFO_INT_KEEP_DRIVE_GEOMETRY);
314
315   if (!keep_geometry
316            && floppy_callbacks(flopimg->floppy)->get_heads_per_disk
317      && floppy_callbacks(flopimg->floppy)->get_tracks_per_disk)
318   {
319      floppy_drive_set_geometry_absolute(image,
320         floppy_get_tracks_per_disk(flopimg->floppy),
321         floppy_get_heads_per_disk(flopimg->floppy));
322   }
323   return INIT_PASS;
324
325error:
326   for (i = 0; i < sizeof(errmap) / sizeof(errmap[0]); i++)
327   {
328      if (err == errmap[i].ferr)
329         image_seterror(image, errmap[i].ierr, errmap[i].message);
330   }
331   return INIT_FAIL;
332}
333
334
335
336static DEVICE_IMAGE_LOAD( floppy )
337{
338   mess_flopimg *flopimg;
339   int retVal = internal_floppy_device_load(image, -1, NULL);
340   flopimg = image_lookuptag(image, FLOPPY_TAG);
341   if (retVal==INIT_PASS) {
342      /* if we have one of our hacky unload procs, call it */
343      if (flopimg->load_proc)
344         flopimg->load_proc(image);
345   }
346   return retVal;
347}
348
349
350
351static DEVICE_IMAGE_CREATE( floppy )
352{
353   return internal_floppy_device_load(image, create_format, create_args);   
354}
355
356
357
358static DEVICE_IMAGE_UNLOAD( floppy )
359{
360   mess_flopimg *flopimg;
361   flopimg = image_lookuptag(image, FLOPPY_TAG);
362
363   /* if we have one of our hacky unload procs, call it */
364   if (flopimg->unload_proc)
365      flopimg->unload_proc(image);
366
367   floppy_close(flopimg->floppy);
368   flopimg->floppy = NULL;
369}
370
371
372
373/*************************************
374 *
375 *   Hacks for specific systems
376 *
377 *************************************/
378
379void floppy_install_load_proc(const device_config *image, void (*proc)(const device_config *image))
380{
381   mess_flopimg *flopimg;
382   flopimg = image_lookuptag(image, FLOPPY_TAG);
383   flopimg->load_proc = proc;
384}
385
386void floppy_install_unload_proc(const device_config *image, void (*proc)(const device_config *image))
387{
388   mess_flopimg *flopimg;
389   flopimg = image_lookuptag(image, FLOPPY_TAG);
390   flopimg->unload_proc = proc;
391}
392
393
394
395void floppy_install_tracktranslate_proc(const device_config *image, int (*proc)(const device_config *image, floppy_image *floppy, int physical_track))
396{
397   mess_flopimg *flopimg;
398   flopimg = image_lookuptag(image, FLOPPY_TAG);
399   flopimg->tracktranslate_proc = proc;
400}
401
402/*************************************
403 *
404 *   Device specification function
405 *
406 *************************************/
407
408void floppy_device_getinfo(const mess_device_class *devclass, UINT32 state, union devinfo *info)
409{
410   char *s;
411   int i, count;
412   const struct FloppyFormat *floppy_options;
413
414   switch(state)
415   {
416      /* --- the following bits of info are returned as 64-bit signed integers --- */
417      case MESS_DEVINFO_INT_TYPE:            info->i = IO_FLOPPY; break;
418      case MESS_DEVINFO_INT_READABLE:         info->i = 1; break;
419      case MESS_DEVINFO_INT_WRITEABLE:         info->i = 1; break;
420      case MESS_DEVINFO_INT_CREATABLE:
421         floppy_options = mess_device_get_info_ptr(devclass, MESS_DEVINFO_PTR_FLOPPY_OPTIONS);
422         info->i = floppy_options->param_guidelines ? 1 : 0;
423         break;
424
425      case MESS_DEVINFO_INT_CREATE_OPTCOUNT:
426         /* count total floppy options */
427         floppy_options = mess_device_get_info_ptr(devclass, MESS_DEVINFO_PTR_FLOPPY_OPTIONS);
428         for (count = 0; floppy_options[count].construct; count++)
429            ;
430         info->i = count;
431         break;
432
433      case MESS_DEVINFO_INT_KEEP_DRIVE_GEOMETRY:
434         info->i = 0;
435         break;
436
437      /* --- the following bits of info are returned as NULL-terminated strings --- */
438      case MESS_DEVINFO_STR_FILE_EXTENSIONS:
439         /* retrieve the floppy options */
440         floppy_options = mess_device_get_info_ptr(devclass, MESS_DEVINFO_PTR_FLOPPY_OPTIONS);
441
442         /* set up a temporary string */
443         s = device_temp_str();
444         info->s = s;
445         s[0] = '\0';
446
447         /* append each of the extensions */
448         for (i = 0; floppy_options[i].construct; i++)
449            specify_extension(s, 256, floppy_options[i].extensions);
450         break;
451
452      /* --- the following bits of info are returned as pointers to data or functions --- */
453      case MESS_DEVINFO_PTR_START:            info->start = DEVICE_START_NAME(floppy); break;
454      case MESS_DEVINFO_PTR_LOAD:            info->load = DEVICE_IMAGE_LOAD_NAME(floppy); break;
455      case MESS_DEVINFO_PTR_CREATE:         info->create = DEVICE_IMAGE_CREATE_NAME(floppy); break;
456      case MESS_DEVINFO_PTR_UNLOAD:         info->unload = DEVICE_IMAGE_UNLOAD_NAME(floppy); break;
457      case MESS_DEVINFO_PTR_CREATE_OPTGUIDE:   info->p = (void *) floppy_option_guide; break;
458
459      default:
460         floppy_options = mess_device_get_info_ptr(devclass, MESS_DEVINFO_PTR_FLOPPY_OPTIONS);
461         if ((state >= MESS_DEVINFO_STR_CREATE_OPTNAME) && (state < MESS_DEVINFO_STR_CREATE_OPTNAME + DEVINFO_CREATE_OPTMAX))
462         {
463            info->s = (void *) floppy_options[state - MESS_DEVINFO_STR_CREATE_OPTNAME].name;
464         }
465         else if ((state >= MESS_DEVINFO_STR_CREATE_OPTDESC) && (state < MESS_DEVINFO_STR_CREATE_OPTDESC + DEVINFO_CREATE_OPTMAX))
466         {
467            info->s = (void *) floppy_options[state - MESS_DEVINFO_STR_CREATE_OPTDESC].description;
468         }
469         else if ((state >= MESS_DEVINFO_STR_CREATE_OPTEXTS) && (state < MESS_DEVINFO_STR_CREATE_OPTEXTS + DEVINFO_CREATE_OPTMAX))
470         {
471            info->s = (void *) floppy_options[state - MESS_DEVINFO_STR_CREATE_OPTEXTS].extensions;
472         }
473         else if ((state >= MESS_DEVINFO_PTR_CREATE_OPTSPEC) && (state < MESS_DEVINFO_PTR_CREATE_OPTSPEC + DEVINFO_CREATE_OPTMAX))
474         {
475            info->p = (void *) floppy_options[state - MESS_DEVINFO_PTR_CREATE_OPTSPEC].param_guidelines;
476         }
477         break;
478   }
479}
480
src/mess/devices/mflopimg.h
r5704r5705
1/*********************************************************************
2
3   mflopimg.h
4
5   MESS interface to the floppy disk image abstraction code
6
7*********************************************************************/
8
9#ifndef MFLOPIMG_H
10#define MFLOPIMG_H
11
12#include "device.h"
13#include "image.h"
14#include "flopdrv.h"
15#include "formats/flopimg.h"
16
17
18enum
19{
20   MESS_DEVINFO_PTR_FLOPPY_OPTIONS = MESS_DEVINFO_PTR_DEV_SPECIFIC,
21   MESS_DEVINFO_INT_KEEP_DRIVE_GEOMETRY = MESS_DEVINFO_INT_DEV_SPECIFIC
22};
23
24floppy_image *flopimg_get_image(const device_config *image);
25
26void floppy_device_getinfo(const mess_device_class *devclass, UINT32 state, union devinfo *info);
27
28/* hack for apple II; replace this when we think of something better */
29void floppy_install_unload_proc(const device_config *image, void (*proc)(const device_config *image));
30
31void floppy_install_load_proc(const device_config *image, void (*proc)(const device_config *image));
32
33/* hack for TI99; replace this when we think of something better */
34void floppy_install_tracktranslate_proc(const device_config *image, int (*proc)(const device_config *image, floppy_image *floppy, int physical_track));
35
36#endif /* MFLOPIMG_H */
src/mess/devices/flopdrv.c
r5704r5705
519519   drv->controller = controller;
520520}
521521
522
523
524/***************************************************************************
525    CONSTANTS
526***************************************************************************/
527
528#define FLOPPY_TAG      "floptag"
529#define LOG_FLOPPY      0
530
531
532
533/***************************************************************************
534    TYPE DEFINITIONS
535***************************************************************************/
536
537typedef struct _mess_flopimg mess_flopimg;
538struct _mess_flopimg
539{
540   floppy_image *floppy;
541   int track;
542   void (*load_proc)(const device_config *image);
543   void (*unload_proc)(const device_config *image);
544   int (*tracktranslate_proc)(const device_config *image, floppy_image *floppy, int physical_track);
545};
546
547
548
549typedef struct _floppy_error_map floppy_error_map;
550struct _floppy_error_map
551{
552   floperr_t ferr;
553   image_error_t ierr;
554   const char *message;
555};
556
557
558
559/***************************************************************************
560    GLOBAL VARIABLES
561***************************************************************************/
562
563static const floppy_error_map errmap[] =
564{
565   { FLOPPY_ERROR_SUCCESS,         IMAGE_ERROR_SUCCESS },
566   { FLOPPY_ERROR_INTERNAL,      IMAGE_ERROR_INTERNAL },
567   { FLOPPY_ERROR_UNSUPPORTED,      IMAGE_ERROR_UNSUPPORTED },
568   { FLOPPY_ERROR_OUTOFMEMORY,      IMAGE_ERROR_OUTOFMEMORY },
569   { FLOPPY_ERROR_INVALIDIMAGE,   IMAGE_ERROR_INVALIDIMAGE }
570};
571
572/***************************************************************************
573    IMPLEMENTATION
574***************************************************************************/
575
576static mess_flopimg *get_flopimg(const device_config *image)
577{
578   return (mess_flopimg *) image_lookuptag(image, FLOPPY_TAG);
579}
580
581
582
583floppy_image *flopimg_get_image(const device_config *image)
584{
585   return get_flopimg(image)->floppy;
586}
587
588
589
590static void flopimg_seek_callback(const device_config *image, int physical_track)
591{
592   mess_flopimg *flopimg;
593
594   flopimg = get_flopimg(image);
595   if (!flopimg || !flopimg->floppy)
596      return;
597
598   /* translate the track number if necessary */
599   if (flopimg->tracktranslate_proc)
600      physical_track = flopimg->tracktranslate_proc(image, flopimg->floppy, physical_track);
601
602   flopimg->track = physical_track;
603}
604
605
606
607static int flopimg_get_sectors_per_track(const device_config *image, int side)
608{
609   mess_flopimg *flopimg;
610   floperr_t err;
611   int sector_count;
612
613   flopimg = get_flopimg(image);
614   if (!flopimg || !flopimg->floppy)
615      return 0;
616
617   err = floppy_get_sector_count(flopimg->floppy, side, flopimg->track, &sector_count);
618   if (err)
619      return 0;
620   return sector_count;
621}
622
623
624
625static void flopimg_get_id_callback(const device_config *image, chrn_id *id, int id_index, int side)
626{
627   mess_flopimg *flopimg;
628   int cylinder, sector, N;
629   unsigned long flags;
630   UINT32 sector_length;
631
632   flopimg = get_flopimg(image);
633   if (!flopimg || !flopimg->floppy)
634      return;
635
636   floppy_get_indexed_sector_info(flopimg->floppy, side, flopimg->track, id_index, &cylinder, &side, &sector, &sector_length, &flags);
637
638   N = compute_log2(sector_length);
639
640   id->C = cylinder;
641   id->H = side;
642   id->R = sector;
643   id->data_id = id_index;
644   id->flags = flags;
645   id->N = ((N >= 7) && (N <= 10)) ? N - 7 : 0;
646}
647
648
649
650static void log_readwrite(const char *name, int head, int track, int sector, const char *buf, int length)
651{
652   char membuf[1024];
653   int i;
654   for (i = 0; i < length; i++)
655      sprintf(membuf + i*2, "%02x", (int) (UINT8) buf[i]);
656   logerror("%s:  head=%i track=%i sector=%i buffer='%s'\n", name, head, track, sector, membuf);
657}
658
659
660
661static void flopimg_read_sector_data_into_buffer(const device_config *image, int side, int index1, char *ptr, int length)
662{
663   mess_flopimg *flopimg;
664
665   flopimg = get_flopimg(image);
666   if (!flopimg || !flopimg->floppy)
667      return;
668
669   floppy_read_indexed_sector(flopimg->floppy, side, flopimg->track, index1, 0, ptr, length);
670
671   if (LOG_FLOPPY)
672      log_readwrite("sector_read", side, flopimg->track, index1, ptr, length);
673}
674
675
676
677static void flopimg_write_sector_data_from_buffer(const device_config *image, int side, int index1, const char *ptr, int length, int ddam)
678{
679   mess_flopimg *flopimg;
680
681   flopimg = get_flopimg(image);
682   if (!flopimg || !flopimg->floppy)
683      return;
684
685   if (LOG_FLOPPY)
686      log_readwrite("sector_write", side, flopimg->track, index1, ptr, length);
687
688   floppy_write_indexed_sector(flopimg->floppy, side, flopimg->track, index1, 0, ptr, length, ddam);
689}
690
691
692
693static void flopimg_read_track_data_info_buffer(const device_config *image, int side, void *ptr, int *length)
694{
695   mess_flopimg *flopimg;
696
697   flopimg = get_flopimg(image);
698   if (!flopimg || !flopimg->floppy)
699      return;
700
701   floppy_read_track_data(flopimg->floppy, side, flopimg->track, ptr, *length);
702}
703
704
705
706static void flopimg_write_track_data_info_buffer(const device_config *image, int side, const void *ptr, int *length)
707{
708   mess_flopimg *flopimg;
709
710   flopimg = get_flopimg(image);
711   if (!flopimg || !flopimg->floppy)
712      return;
713
714   floppy_write_track_data(flopimg->floppy, side, flopimg->track, ptr, *length);
715}
716
717
718
719static const floppy_interface mess_floppy_interface =
720{
721   flopimg_seek_callback,
722   flopimg_get_sectors_per_track,
723   flopimg_get_id_callback,
724   flopimg_read_sector_data_into_buffer,
725   flopimg_write_sector_data_from_buffer,
726   flopimg_read_track_data_info_buffer,
727   flopimg_write_track_data_info_buffer,
728   NULL
729};
730
731/* ----------------------------------------------------------------------- */
732
733static int image_fseek_thunk(void *file, INT64 offset, int whence)
734{
735   return image_fseek((const device_config *) file, offset, whence);
736}
737
738static size_t image_fread_thunk(void *file, void *buffer, size_t length)
739{
740   return image_fread((const device_config *) file, buffer, length);
741}
742
743static size_t image_fwrite_thunk(void *file, const void *buffer, size_t length)
744{
745   return image_fwrite((const device_config *) file, buffer, length);
746}
747
748static UINT64 image_fsize_thunk(void *file)
749{
750   return image_length((const device_config *) file);
751}
752
753/* ----------------------------------------------------------------------- */
754
755const struct io_procs mess_ioprocs =
756{
757   NULL,
758   image_fseek_thunk,
759   image_fread_thunk,
760   image_fwrite_thunk,
761   image_fsize_thunk
762};
763
764
765
766
767/* ----------------------------------------------------------------------- */
768
769
770static DEVICE_START( floppy )
771{
772    image_alloctag(device, FLOPPY_TAG, sizeof(mess_flopimg));
773   floppy_drive_init(device, &mess_floppy_interface);
774}
775
776
777
778static int internal_floppy_device_load(const device_config *image, int create_format, option_resolution *create_args)
779{
780   floperr_t err;
781   mess_flopimg *flopimg;
782   const mess_device_class *devclass;
783   const struct FloppyFormat *floppy_options;
784   int floppy_flags, i;
785   const char *extension;
786   int keep_geometry = 0;
787
788   /* look up instance data */
789   flopimg = get_flopimg(image);
790
791   /* figure out the floppy options */
792   devclass = mess_devclass_from_core_device(image);
793   floppy_options = mess_device_get_info_ptr(devclass, MESS_DEVINFO_PTR_FLOPPY_OPTIONS);
794
795   if (image_has_been_created(image))
796   {
797      /* creating an image */
798      assert(create_format >= 0);
799      err = floppy_create((void *) image, &mess_ioprocs, &floppy_options[create_format], create_args, &flopimg->floppy);
800      if (err)
801         goto error;
802   }
803   else
804   {
805      /* opening an image */
806      floppy_flags = image_is_writable(image) ? FLOPPY_FLAGS_READWRITE : FLOPPY_FLAGS_READONLY;
807      extension = image_filetype(image);
808      err = floppy_open_choices((void *) image, &mess_ioprocs, extension, floppy_options, floppy_flags, &flopimg->floppy);
809      if (err)
810         goto error;
811   }
812       
813   /* if we can get head and track counts, then set the geometry accordingly
814      However, at least the ti99 system family requires that medium track
815      count and drive track count be handled separately.
816      It is possible to insert a 40 track medium in an 80 track drive; the
817      TI controllers read the track count from sector 0 and automatically
818      apply double steps. Setting the track count of the drive to the
819      medium track count will then lead to unreachable tracks.
820   */
821   keep_geometry = (int)mess_device_get_info_int(mess_devclass_from_core_device(image), MESS_DEVINFO_INT_KEEP_DRIVE_GEOMETRY);
822
823   if (!keep_geometry
824            && floppy_callbacks(flopimg->floppy)->get_heads_per_disk
825      && floppy_callbacks(flopimg->floppy)->get_tracks_per_disk)
826   {
827      floppy_drive_set_geometry_absolute(image,
828         floppy_get_tracks_per_disk(flopimg->floppy),
829         floppy_get_heads_per_disk(flopimg->floppy));
830   }
831   return INIT_PASS;
832
833error:
834   for (i = 0; i < sizeof(errmap) / sizeof(errmap[0]); i++)
835   {
836      if (err == errmap[i].ferr)
837         image_seterror(image, errmap[i].ierr, errmap[i].message);
838   }
839   return INIT_FAIL;
840}
841
842
843
844static DEVICE_IMAGE_LOAD( floppy )
845{
846   mess_flopimg *flopimg;
847   int retVal = internal_floppy_device_load(image, -1, NULL);
848   flopimg = image_lookuptag(image, FLOPPY_TAG);
849   if (retVal==INIT_PASS) {
850      /* if we have one of our hacky unload procs, call it */
851      if (flopimg->load_proc)
852         flopimg->load_proc(image);
853   }
854   return retVal;
855}
856
857
858
859static DEVICE_IMAGE_CREATE( floppy )
860{
861   return internal_floppy_device_load(image, create_format, create_args);   
862}
863
864
865
866static DEVICE_IMAGE_UNLOAD( floppy )
867{
868   mess_flopimg *flopimg;
869   flopimg = image_lookuptag(image, FLOPPY_TAG);
870
871   /* if we have one of our hacky unload procs, call it */
872   if (flopimg->unload_proc)
873      flopimg->unload_proc(image);
874
875   floppy_close(flopimg->floppy);
876   flopimg->floppy = NULL;
877}
878
879
880
881/*************************************
882 *
883 *   Hacks for specific systems
884 *
885 *************************************/
886
887void floppy_install_load_proc(const device_config *image, void (*proc)(const device_config *image))
888{
889   mess_flopimg *flopimg;
890   flopimg = image_lookuptag(image, FLOPPY_TAG);
891   flopimg->load_proc = proc;
892}
893
894void floppy_install_unload_proc(const device_config *image, void (*proc)(const device_config *image))
895{
896   mess_flopimg *flopimg;
897   flopimg = image_lookuptag(image, FLOPPY_TAG);
898   flopimg->unload_proc = proc;
899}
900
901
902
903void floppy_install_tracktranslate_proc(const device_config *image, int (*proc)(const device_config *image, floppy_image *floppy, int physical_track))
904{
905   mess_flopimg *flopimg;
906   flopimg = image_lookuptag(image, FLOPPY_TAG);
907   flopimg->tracktranslate_proc = proc;
908}
909
910/*************************************
911 *
912 *   Device specification function
913 *
914 *************************************/
915
916void floppy_device_getinfo(const mess_device_class *devclass, UINT32 state, union devinfo *info)
917{
918   char *s;
919   int i, count;
920   const struct FloppyFormat *floppy_options;
921
922   switch(state)
923   {
924      /* --- the following bits of info are returned as 64-bit signed integers --- */
925      case MESS_DEVINFO_INT_TYPE:            info->i = IO_FLOPPY; break;
926      case MESS_DEVINFO_INT_READABLE:         info->i = 1; break;
927      case MESS_DEVINFO_INT_WRITEABLE:         info->i = 1; break;
928      case MESS_DEVINFO_INT_CREATABLE:
929         floppy_options = mess_device_get_info_ptr(devclass, MESS_DEVINFO_PTR_FLOPPY_OPTIONS);
930         info->i = floppy_options->param_guidelines ? 1 : 0;
931         break;
932
933      case MESS_DEVINFO_INT_CREATE_OPTCOUNT:
934         /* count total floppy options */
935         floppy_options = mess_device_get_info_ptr(devclass, MESS_DEVINFO_PTR_FLOPPY_OPTIONS);
936         for (count = 0; floppy_options[count].construct; count++)
937            ;
938         info->i = count;
939         break;
940
941      case MESS_DEVINFO_INT_KEEP_DRIVE_GEOMETRY:
942         info->i = 0;
943         break;
944
945      /* --- the following bits of info are returned as NULL-terminated strings --- */
946      case MESS_DEVINFO_STR_FILE_EXTENSIONS:
947         /* retrieve the floppy options */
948         floppy_options = mess_device_get_info_ptr(devclass, MESS_DEVINFO_PTR_FLOPPY_OPTIONS);
949
950         /* set up a temporary string */
951         s = device_temp_str();
952         info->s = s;
953         s[0] = '\0';
954
955         /* append each of the extensions */
956         for (i = 0; floppy_options[i].construct; i++)
957            specify_extension(s, 256, floppy_options[i].extensions);
958         break;
959
960      /* --- the following bits of info are returned as pointers to data or functions --- */
961      case MESS_DEVINFO_PTR_START:            info->start = DEVICE_START_NAME(floppy); break;
962      case MESS_DEVINFO_PTR_LOAD:            info->load = DEVICE_IMAGE_LOAD_NAME(floppy); break;
963      case MESS_DEVINFO_PTR_CREATE:         info->create = DEVICE_IMAGE_CREATE_NAME(floppy); break;
964      case MESS_DEVINFO_PTR_UNLOAD:         info->unload = DEVICE_IMAGE_UNLOAD_NAME(floppy); break;
965      case MESS_DEVINFO_PTR_CREATE_OPTGUIDE:   info->p = (void *) floppy_option_guide; break;
966
967      default:
968         floppy_options = mess_device_get_info_ptr(devclass, MESS_DEVINFO_PTR_FLOPPY_OPTIONS);
969         if ((state >= MESS_DEVINFO_STR_CREATE_OPTNAME) && (state < MESS_DEVINFO_STR_CREATE_OPTNAME + DEVINFO_CREATE_OPTMAX))
970         {
971            info->s = (void *) floppy_options[state - MESS_DEVINFO_STR_CREATE_OPTNAME].name;
972         }
973         else if ((state >= MESS_DEVINFO_STR_CREATE_OPTDESC) && (state < MESS_DEVINFO_STR_CREATE_OPTDESC + DEVINFO_CREATE_OPTMAX))
974         {
975            info->s = (void *) floppy_options[state - MESS_DEVINFO_STR_CREATE_OPTDESC].description;
976         }
977         else if ((state >= MESS_DEVINFO_STR_CREATE_OPTEXTS) && (state < MESS_DEVINFO_STR_CREATE_OPTEXTS + DEVINFO_CREATE_OPTMAX))
978         {
979            info->s = (void *) floppy_options[state - MESS_DEVINFO_STR_CREATE_OPTEXTS].extensions;
980         }
981         else if ((state >= MESS_DEVINFO_PTR_CREATE_OPTSPEC) && (state < MESS_DEVINFO_PTR_CREATE_OPTSPEC + DEVINFO_CREATE_OPTMAX))
982         {
983            info->p = (void *) floppy_options[state - MESS_DEVINFO_PTR_CREATE_OPTSPEC].param_guidelines;
984         }
985         break;
986   }
987}
988
src/mess/devices/sonydriv.c
r5704r5705
4141#include "sonydriv.h"
4242#include "formats/ap_dsk35.h"
4343#include "flopdrv.h"
44#include "mflopimg.h"
4544
4645
4746#ifdef MAME_DEBUG
src/mess/devices/flopdrv.h
r5704r5705
66
77#include "device.h"
88#include "image.h"
9#include "formats/flopimg.h"
910
1011
1112typedef enum
r5704r5705
167168void floppy_drive_set_rpm(const device_config *image, float rpm);
168169
169170void floppy_drive_set_controller(const device_config *img, const device_config *controller);
171
172enum
173{
174   MESS_DEVINFO_PTR_FLOPPY_OPTIONS = MESS_DEVINFO_PTR_DEV_SPECIFIC,
175   MESS_DEVINFO_INT_KEEP_DRIVE_GEOMETRY = MESS_DEVINFO_INT_DEV_SPECIFIC
176};
177
178floppy_image *flopimg_get_image(const device_config *image);
179
180void floppy_device_getinfo(const mess_device_class *devclass, UINT32 state, union devinfo *info);
181
182/* hack for apple II; replace this when we think of something better */
183void floppy_install_unload_proc(const device_config *image, void (*proc)(const device_config *image));
184
185void floppy_install_load_proc(const device_config *image, void (*proc)(const device_config *image));
186
187/* hack for TI99; replace this when we think of something better */
188void floppy_install_tracktranslate_proc(const device_config *image, int (*proc)(const device_config *image, floppy_image *floppy, int physical_track));
189
190
170191#endif /* FLOPDRV_H */
src/mess/devices/appldriv.c
r5704r5705
88
99#include "appldriv.h"
1010#include "flopdrv.h"
11#include "mflopimg.h"
1211#include "formats/ap2_dsk.h"
1312
1413
src/mess/drivers/dgn_beta.c
r5704r5705
4545#include "includes/dgn_beta.h"
4646#include "machine/6551.h"
4747#include "formats/coco_dsk.h"
48#include "devices/mflopimg.h"
48#include "devices/flopdrv.h"
4949#include "devices/coco_vhd.h"
5050
5151/*
src/mess/drivers/apple3.c
r5704r5705
1414#include "cpu/m6502/m6502.h"
1515#include "includes/apple3.h"
1616#include "includes/apple2.h"
17#include "devices/mflopimg.h"
17#include "devices/flopdrv.h"
1818#include "formats/ap2_dsk.h"
1919#include "machine/6551.h"
2020#include "machine/6522via.h"
src/mess/drivers/adam.c
r5704r5705
191191#include "includes/adam.h"
192192#include "cpu/m6800/m6800.h"
193193#include "devices/cartslot.h"
194#include "devices/mflopimg.h"
194#include "devices/flopdrv.h"
195195#include "formats/adam_dsk.h"
196196
197197static ADDRESS_MAP_START( adam_mem, ADDRESS_SPACE_PROGRAM, 8)
src/mess/drivers/mbee.c
r5704r5705
6666#include "cpu/z80/z80.h"
6767#include "cpu/z80/z80daisy.h"
6868#include "sound/wave.h"
69#include "devices/mflopimg.h"
69#include "devices/flopdrv.h"
7070#include "formats/basicdsk.h"
7171#include "includes/mbee.h"
7272
src/mess/drivers/coco.c
r5704r5705
3838#include "formats/coco_dsk.h"
3939#include "formats/coco_cas.h"
4040#include "devices/printer.h"
41#include "devices/mflopimg.h"
41#include "devices/flopdrv.h"
4242#include "devices/cassette.h"
4343#include "devices/bitbngr.h"
4444#include "devices/snapquik.h"
src/mess/drivers/ti99_8.c
r5704r5705
169169#include "machine/99_dsk.h"
170170#include "machine/99_ide.h"
171171#include "cpu/tms9900/tms9900.h"
172#include "devices/mflopimg.h"
172#include "devices/flopdrv.h"
173173#include "devices/cassette.h"
174174#include "devices/cartslot.h"
175175#include "machine/smartmed.h"
src/mess/drivers/x1.c
r5704r5705
153153
154154#include "machine/wd17xx.h"
155155#include "devices/cassette.h"
156#include "devices/mflopimg.h"
156#include "devices/flopdrv.h"
157157#include "formats/basicdsk.h"
158158#include "formats/fm7_dsk.h"
159159#include "formats/x1_tap.h"
src/mess/drivers/xor100.c
r5704r5705
4242#include "includes/xor100.h"
4343#include "cpu/z80/z80.h"
4444#include "formats/basicdsk.h"
45#include "devices/mflopimg.h"
45#include "devices/flopdrv.h"
4646#include "devices/cassette.h"
4747#include "machine/com8116.h"
4848#include "machine/i8255a.h"
src/mess/drivers/tmc600.c
r5704r5705
8181
8282#include "driver.h"
8383#include "machine/ctronics.h"
84#include "devices/mflopimg.h"
84#include "devices/flopdrv.h"
8585#include "formats/basicdsk.h"
8686#include "devices/cassette.h"
8787#include "devices/snapquik.h"
src/mess/drivers/b2m.c
r5704r5705
1515#include "machine/pic8259.h"
1616#include "machine/msm8251.h"
1717#include "machine/wd17xx.h"
18#include "devices/mflopimg.h"
18#include "devices/flopdrv.h"
1919#include "formats/basicdsk.h"
2020#include "includes/b2m.h"
2121
src/mess/drivers/thomson.c
r5704r5705
7575#include "includes/thomson.h"
7676#include "machine/6821pia.h"
7777#include "machine/ctronics.h"
78#include "devices/mflopimg.h"
78#include "devices/flopdrv.h"
7979#include "formats/basicdsk.h"
8080
8181/**************************** common *******************************/
src/mess/drivers/abc80.c
r5704r5705
8787#include "machine/conkort.h"
8888
8989/* Devices */
90#include "devices/mflopimg.h"
90#include "devices/flopdrv.h"
9191#include "devices/cassette.h"
9292#include "devices/printer.h"
9393
src/mess/drivers/atarist.c
r5704r5705
33#include "cpu/m68000/m68000.h"
44#include "cpu/m6800/m6800.h"
55#include "formats/atarist_dsk.h"
6#include "devices/mflopimg.h"
6#include "devices/flopdrv.h"
77#include "devices/cartslot.h"
88#include "machine/ctronics.h"
99#include "includes/serial.h"
src/mess/drivers/sg1000.c
r5704r5705
6666#include "driver.h"
6767#include "cpu/z80/z80.h"
6868#include "includes/sg1000.h"
69#include "devices/mflopimg.h"
69#include "devices/flopdrv.h"
7070#include "formats/basicdsk.h"
7171#include "devices/cartslot.h"
7272#include "devices/cassette.h"
src/mess/drivers/mikromik.c
r5704r5705
11#include "driver.h"
22#include "includes/mikromik.h"
33#include "formats/basicdsk.h"
4#include "devices/mflopimg.h"
4#include "devices/flopdrv.h"
55#include "cpu/i8085/i8085.h"
66#include "machine/8237dma.h"
77#include "machine/i8212.h"
src/mess/drivers/pcw.c
r5704r5705
9797// nec765 interface
9898#include "machine/nec765.h"
9999#include "formats/dsk_dsk.h"
100#include "devices/mflopimg.h"
100#include "devices/flopdrv.h"
101101// pcw video hardware
102102#include "includes/pcw.h"
103103// pcw/pcw16 beeper
src/mess/drivers/osi.c
r5704r5705
183183#include "machine/6821pia.h"
184184#include "sound/discrete.h"
185185#include "sound/beep.h"
186#include "devices/mflopimg.h"
186#include "devices/flopdrv.h"
187187#include "formats/basicdsk.h"
188188#include "devices/cassette.h"
189189
src/mess/drivers/oric.c
r5704r5705
2121#include "sound/wave.h"
2222#include "includes/oric.h"
2323#include "machine/ctronics.h"
24#include "devices/mflopimg.h"
24#include "devices/flopdrv.h"
2525#include "devices/cassette.h"
2626#include "formats/oric_dsk.h"
2727#include "formats/ap2_dsk.h"
src/mess/drivers/at.c
r5704r5705
4343
4444#include "machine/pcshare.h"
4545
46#include "devices/mflopimg.h"
46#include "devices/flopdrv.h"
4747#include "devices/harddriv.h"
4848#include "formats/pc_dsk.h"
4949
src/mess/drivers/vector06.c
r5704r5705
1515#include "machine/wd17xx.h"
1616#include "devices/cassette.h"
1717#include "devices/cartslot.h"
18#include "devices/mflopimg.h"
18#include "devices/flopdrv.h"
1919#include "formats/basicdsk.h"
2020#include "includes/vector06.h"
2121
src/mess/drivers/v1050.c
r5704r5705
113113#include "cpu/m6502/m6502.h"
114114#include "cpu/mcs48/mcs48.h"
115115#include "formats/basicdsk.h"
116#include "devices/mflopimg.h"
116#include "devices/flopdrv.h"
117117#include "machine/ctronics.h"
118118#include "machine/i8214.h"
119119#include "machine/i8255a.h"
src/mess/drivers/ql.c
r5704r5705
4242#include "includes/ql.h"
4343#include "cpu/mcs48/mcs48.h"
4444#include "cpu/m68000/m68000.h"
45#include "devices/mflopimg.h"
45#include "devices/flopdrv.h"
4646#include "formats/basicdsk.h"
4747#include "devices/cartslot.h"
4848#include "devices/microdrv.h"
src/mess/drivers/abc80x.c
r5704r5705
8080#include "sound/discrete.h"
8181
8282/* Devices */
83#include "devices/mflopimg.h"
83#include "devices/flopdrv.h"
8484#include "devices/cassette.h"
8585#include "devices/printer.h"
8686
src/mess/drivers/orion.c
r5704r5705
1616#include "sound/wave.h"
1717#include "machine/mc146818.h"
1818#include "machine/wd17xx.h"
19#include "devices/mflopimg.h"
19#include "devices/flopdrv.h"
2020#include "formats/basicdsk.h"
2121#include "devices/cassette.h"
2222#include "devices/cartslot.h"
src/mess/drivers/nascom1.c
r5704r5705
5959#include "machine/z80pio.h"
6060
6161/* Devices */
62#include "devices/mflopimg.h"
62#include "devices/flopdrv.h"
6363#include "formats/basicdsk.h"
6464#include "devices/cartslot.h"
6565#include "devices/cassette.h"
src/mess/drivers/newbrain.c
r5704r5705
99#include "machine/z80sio.h"
1010#include "includes/newbrain.h"
1111#include "includes/serial.h"
12#include "devices/mflopimg.h"
12#include "devices/flopdrv.h"
1313#include "formats/basicdsk.h"
1414#include "devices/cassette.h"
1515#include "machine/rescap.h"
src/mess/drivers/einstein.c
r5704r5705
5858#include "machine/ctronics.h"
5959#include "machine/msm8251.h"
6060#include "formats/dsk_dsk.h"
61#include "devices/mflopimg.h"
61#include "devices/flopdrv.h"
6262#include "sound/ay8910.h"
6363#include "video/mc6845.h"
6464#include "rendlay.h"
src/mess/drivers/osborne1.c
r5704r5705
3838#include "cpu/z80/z80.h"
3939#include "cpu/z80/z80daisy.h"
4040#include "sound/beep.h"
41#include "devices/mflopimg.h"
41#include "devices/flopdrv.h"
4242#include "formats/basicdsk.h"
4343#include "machine/wd17xx.h"
4444#include "machine/6821pia.h"
src/mess/drivers/amstrad.c
r5704r5705
9999
100100/* Devices */
101101#include "formats/dsk_dsk.h"      /* for CPCEMU style disk images */
102#include "devices/mflopimg.h"
102#include "devices/flopdrv.h"
103103#include "formats/basicdsk.h"
104104#include "includes/msx_slot.h"
105105#include "includes/msx.h"  /* MSX floppy device load */
src/mess/drivers/samcoupe.c
r5704r5705
4242#include "sound/speaker.h"
4343
4444/* devices */
45#include "devices/mflopimg.h"
45#include "devices/flopdrv.h"
4646#include "formats/coupedsk.h"
4747#include "formats/dsk_dsk.h"
4848
src/mess/drivers/comx35.c
r5704r5705
1515#include "cpu/cdp1802/cdp1802.h"
1616#include "sound/cdp1869.h"
1717#include "sound/wave.h"
18#include "devices/mflopimg.h"
18#include "devices/flopdrv.h"
1919#include "formats/comx35_dsk.h"
2020#include "devices/cassette.h"
2121#include "devices/printer.h"
src/mess/drivers/trs80.c
r5704r5705
145145#include "sound/speaker.h"
146146
147147/* Devices */
148#include "devices/mflopimg.h"
148#include "devices/flopdrv.h"
149149#include "formats/trs_dsk.h"
150150#include "devices/cassette.h"
151151#include "formats/trs_cas.h"
src/mess/drivers/tiki100.c
r5704r5705
2727#include "includes/tiki100.h"
2828#include "cpu/z80/z80.h"
2929#include "cpu/z80/z80daisy.h"
30#include "devices/mflopimg.h"
30#include "devices/flopdrv.h"
3131#include "formats/basicdsk.h"
3232#include "machine/z80ctc.h"
3333#include "machine/z80dart.h"
src/mess/drivers/svi318.c
r5704r5705
1818#include "machine/i8255a.h"
1919#include "machine/wd17xx.h"
2020#include "machine/ctronics.h"
21#include "devices/mflopimg.h"
21#include "devices/flopdrv.h"
2222#include "formats/svi_dsk.h"
2323#include "devices/cartslot.h"
2424#include "devices/cassette.h"
src/mess/drivers/nanos.c
r5704r5705
1313#include "machine/z80sio.h"
1414#include "machine/z80ctc.h"
1515#include "machine/nec765.h"
16#include "devices/mflopimg.h"
16#include "devices/flopdrv.h"
1717#include "formats/basicdsk.h"
1818
1919static const UINT8 *FNT;
src/mess/drivers/fm7.c
r5704r5705
4545#include "devices/cassette.h"
4646#include "formats/fm7_cas.h"
4747#include "machine/wd17xx.h"
48#include "devices/mflopimg.h"
48#include "devices/flopdrv.h"
4949#include "formats/fm7_dsk.h"
5050#include "machine/ctronics.h"
5151
src/mess/drivers/compis.c
r5704r5705
3737#include "machine/ctronics.h"
3838#include "includes/compis.h"
3939#include "video/i82720.h"
40#include "devices/mflopimg.h"
40#include "devices/flopdrv.h"
4141#include "machine/pit8253.h"
4242#include "machine/pic8259.h"
4343#include "machine/mm58274c.h"
src/mess/drivers/z80ne.c
r5704r5705
9292#include "driver.h"
9393#include "cpu/z80/z80.h"
9494#include "includes/z80ne.h"
95#include "devices/mflopimg.h"
95#include "devices/flopdrv.h"
9696#include "devices/cassette.h"
9797#include "formats/z80ne_dsk.h"
9898
src/mess/drivers/apple2gs.c
r5704r5705
4444#include "cpu/g65816/g65816.h"
4545#include "includes/apple2.h"
4646#include "machine/ay3600.h"
47#include "devices/mflopimg.h"
47#include "devices/flopdrv.h"
4848#include "formats/ap2_dsk.h"
4949#include "includes/apple2gs.h"
5050#include "devices/sonydriv.h"
src/mess/drivers/nc.c
r5704r5705
102102#include "machine/mc146818.h"   /* for NC200 real time clock */
103103#include "machine/tc8521.h"   /* for NC100 real time clock */
104104#include "machine/nec765.h"      /* for NC200 disk drive interface */
105#include "devices/mflopimg.h"   /* for NC200 disk image */
105#include "devices/flopdrv.h"   /* for NC200 disk image */
106106#include "formats/pc_dsk.h"      /* for NC200 disk image */
107107#include "devices/cartslot.h"
108108#include "sound/beep.h"
src/mess/drivers/sord.c
r5704r5705
4040
4141/* FD-5 floppy support */
4242#include "machine/8255ppi.h"
43#include "devices/mflopimg.h"
43#include "devices/flopdrv.h"
4444#include "formats/basicdsk.h"
4545#include "machine/nec765.h"
4646
src/mess/drivers/bw12.c
r5704r5705
2626#include "driver.h"
2727#include "includes/bw12.h"
2828#include "cpu/z80/z80.h"
29#include "devices/mflopimg.h"
29#include "devices/flopdrv.h"
3030#include "formats/basicdsk.h"
3131#include "machine/6821pia.h"
3232#include "machine/ctronics.h"
src/mess/drivers/concept.c
r5704r5705
3131#include "driver.h"
3232#include "cpu/m68000/m68000.h"
3333#include "includes/concept.h"
34#include "devices/mflopimg.h"
34#include "devices/flopdrv.h"
3535#include "formats/basicdsk.h"
3636#include "devices/harddriv.h"
3737#include "machine/mm58274c.h"
src/mess/drivers/pcw16.c
r5704r5705
103103
104104/* Devices */
105105#include "formats/pc_dsk.h"      /* pc disk images */
106#include "devices/mflopimg.h"
106#include "devices/flopdrv.h"
107107
108108
109109// interrupt counter
src/mess/drivers/ti990_4.c
r5704r5705
4444#else
4545#include "video/733_asr.h"
4646#endif
47#include "devices/mflopimg.h"
47#include "devices/flopdrv.h"
4848
4949static MACHINE_RESET(ti990_4)
5050{
src/mess/drivers/msx.c
r5704r5705
286286#include "machine/ctronics.h"
287287#include "includes/msx_slot.h"
288288#include "includes/msx.h"
289#include "devices/mflopimg.h"
289#include "devices/flopdrv.h"
290290#include "devices/cartslot.h"
291291#include "devices/cassette.h"
292292#include "formats/fmsx_cas.h"
src/mess/drivers/prof80.c
r5704r5705
3939#include "machine/z80sti.h"
4040#include "machine/ctronics.h"
4141#include "machine/rescap.h"
42#include "devices/mflopimg.h"
42#include "devices/flopdrv.h"
4343#include "formats/basicdsk.h"
4444
4545
src/mess/drivers/aquarius.c
r5704r5705
2323#include "cpu/z80/z80.h"
2424#include "sound/ay8910.h"
2525#include "sound/speaker.h"
26#include "devices/mflopimg.h"
26#include "devices/flopdrv.h"
2727#include "formats/basicdsk.h"
2828#include "devices/cartslot.h"
2929#include "devices/cassette.h"
src/mess/drivers/cgenie.c
r5704r5705
2929#include "driver.h"
3030#include "cpu/z80/z80.h"
3131#include "includes/cgenie.h"
32#include "devices/mflopimg.h"
32#include "devices/flopdrv.h"
3333#include "formats/basicdsk.h"
3434#include "devices/cartslot.h"
3535#include "devices/cassette.h"
src/mess/drivers/specpls3.c
r5704r5705
157157/* +3 hardware */
158158#include "machine/nec765.h"
159159#include "formats/dsk_dsk.h"
160#include "devices/mflopimg.h"
160#include "devices/flopdrv.h"
161161
162162
163163/****************************************************************************************************/
src/mess/drivers/x68k.c
r5704r5705
128128#include "machine/8530scc.h"
129129#include "machine/hd63450.h"
130130#include "machine/rp5c15.h"
131#include "devices/mflopimg.h"
131#include "devices/flopdrv.h"
132132#include "formats/basicdsk.h"
133133#include "formats/dim_dsk.h"
134134#include "devices/harddriv.h"
src/mess/drivers/kaypro.c
r5704r5705
4141#include "machine/kay_kbd.h"
4242#include "sound/beep.h"
4343#include "devices/snapquik.h"
44#include "devices/mflopimg.h"
44#include "devices/flopdrv.h"
4545#include "formats/basicdsk.h"
4646#include "includes/kaypro.h"
4747
src/mess/drivers/geneve.c
r5704r5705
212212#include "machine/994x_ser.h"
213213#include "machine/99_dsk.h"
214214#include "machine/99_ide.h"
215#include "devices/mflopimg.h"
215#include "devices/flopdrv.h"
216216#include "machine/smartmed.h"
217217#include "devices/harddriv.h"
218218#include "machine/idectrl.h"
src/mess/drivers/exidy.c
r5704r5705
146146#include "devices/snapquik.h"
147147#include "devices/cartslot.h"
148148#include "machine/ay31015.h"
149#include "devices/mflopimg.h"
149#include "devices/flopdrv.h"
150150#include "formats/basicdsk.h"
151151#include "includes/exidy.h"
152152
src/mess/drivers/pc8801.c
r5704r5705
8888#include "machine/8255ppi.h"
8989#include "includes/pc8801.h"
9090#include "machine/nec765.h"
91#include "devices/mflopimg.h"
91#include "devices/flopdrv.h"
9292#include "formats/fm7_dsk.h"
9393#include "sound/2203intf.h"
9494
src/mess/drivers/bw2.c
r5704r5705
3636#include "machine/msm8251.h"
3737#include "machine/wd17xx.h"
3838#include "machine/pit8253.h"
39#include "devices/mflopimg.h"
39#include "devices/flopdrv.h"
4040#include "formats/basicdsk.h"
4141#include "video/msm6255.h"
4242
src/mess/drivers/enterp.c
r5704r5705
2020#include "audio/dave.h"
2121#include "video/epnick.h"
2222#include "machine/wd17xx.h"
23#include "devices/mflopimg.h"
23#include "devices/flopdrv.h"
2424#include "formats/basicdsk.h"
2525
2626#define ENTERPRISE_XTAL_X1   XTAL_8MHz
src/mess/drivers/atom.c
r5704r5705
6969#include "video/m6847.h"
7070
7171/* Devices */
72#include "devices/mflopimg.h"
72#include "devices/flopdrv.h"
7373#include "formats/basicdsk.h"
7474#include "devices/cassette.h"
7575#include "devices/snapquik.h"
src/mess/drivers/apf.c
r5704r5705
2020
2121#include "machine/6821pia.h"
2222#include "machine/wd17xx.h"
23#include "devices/mflopimg.h"
23#include "devices/flopdrv.h"
2424#include "formats/basicdsk.h"
2525#include "devices/cassette.h"
2626#include "devices/cartslot.h"
src/mess/drivers/partner.c
r5704r5705
1515#include "machine/wd17xx.h"
1616#include "video/i8275.h"
1717#include "devices/cassette.h"
18#include "devices/mflopimg.h"
18#include "devices/flopdrv.h"
1919#include "formats/basicdsk.h"
2020#include "formats/rk_cas.h"
2121#include "includes/radio86.h"
src/mess/drivers/tmc2000e.c
r5704r5705
3333#include "includes/tmc2000e.h"
3434#include "cpu/cdp1802/cdp1802.h"
3535#include "devices/printer.h"
36#include "devices/mflopimg.h"
36#include "devices/flopdrv.h"
3737#include "formats/basicdsk.h"
3838#include "devices/cassette.h"
3939#include "video/cdp1864.h"
src/mess/drivers/bebox.c
r5704r5705
3030#include "machine/mpc105.h"
3131
3232/* Devices */
33#include "devices/mflopimg.h"
33#include "devices/flopdrv.h"
3434#include "devices/chd_cd.h"
3535#include "devices/harddriv.h"
3636#include "formats/pc_dsk.h"
src/mess/drivers/elwro800.c
r5704r5705
3333
3434/* Devices */
3535#include "formats/dsk_dsk.h"
36#include "devices/mflopimg.h"
36#include "devices/flopdrv.h"
3737#include "devices/cassette.h"
3838#include "formats/tzx_cas.h"
3939
src/mess/drivers/special.c
r5704r5705
1717#include "machine/i8255a.h"
1818#include "machine/pit8253.h"
1919#include "devices/cassette.h"
20#include "devices/mflopimg.h"
20#include "devices/flopdrv.h"
2121#include "formats/basicdsk.h"
2222#include "formats/rk_cas.h"
2323#include "machine/wd17xx.h"
src/mess/drivers/pyl601.c
r5704r5705
99#include "driver.h"
1010#include "cpu/m6800/m6800.h"
1111#include "video/mc6845.h"
12#include "devices/mflopimg.h"
12#include "devices/flopdrv.h"
1313#include "formats/basicdsk.h"
1414#include "machine/nec765.h"
1515
src/mess/drivers/apple2.c
r5704r5705
184184#include "cpu/m6502/m6502.h"
185185#include "deprecat.h"
186186#include "devices/appldriv.h"
187#include "devices/mflopimg.h"
187#include "devices/flopdrv.h"
188188#include "formats/ap2_dsk.h"
189189#include "includes/apple2.h"
190190#include "machine/ay3600.h"
src/mess/drivers/xerox820.c
r5704r5705
3434#include "machine/z80sio.h"
3535#include "machine/wd17xx.h"
3636#include "machine/com8116.h"
37#include "devices/mflopimg.h"
37#include "devices/flopdrv.h"
3838#include "formats/basicdsk.h"
3939
4040INLINE const device_config *get_floppy_image(running_machine *machine, int drive)
src/mess/drivers/ti99_4p.c
r5704r5705
4242#include "machine/994x_ser.h"
4343#include "machine/99_dsk.h"
4444#include "machine/99_ide.h"
45#include "devices/mflopimg.h"
45#include "devices/flopdrv.h"
4646#include "devices/cassette.h"
4747#include "machine/smartmed.h"
4848#include "devices/harddriv.h"
src/mess/drivers/pc.c
r5704r5705
146146#include "includes/pc.h"
147147
148148#include "machine/pc_hdc.h"
149#include "devices/mflopimg.h"
149#include "devices/flopdrv.h"
150150#include "devices/harddriv.h"
151151#include "devices/cassette.h"
152152#include "devices/cartslot.h"
src/mess/drivers/ti99_4x.c
r5704r5705
3434#include "machine/99_dsk.h"
3535#include "machine/99_ide.h"
3636#include "machine/99_hsgpl.h"
37#include "devices/mflopimg.h"
37#include "devices/flopdrv.h"
3838#include "devices/harddriv.h"
3939#include "devices/cassette.h"
4040#include "machine/smartmed.h"
r5704r5705
885885      /* --- the following bits of info are returned as 64-bit signed integers --- */
886886      case MESS_DEVINFO_INT_COUNT:                     info->i = 4; break;
887887
888                /* Used within mflopimg.c. */
889                case MESS_DEVINFO_INT_KEEP_DRIVE_GEOMETRY:                                  info->i = 1; break;
888        case MESS_DEVINFO_INT_KEEP_DRIVE_GEOMETRY:                                  info->i = 1; break;
890889      /* --- the following bits of info are returned as pointers to data or functions --- */
891890      case MESS_DEVINFO_PTR_FLOPPY_OPTIONS:            info->p = (void *) floppyoptions_ti99; break;
892891
src/mess/drivers/pk8020.c
r5704r5705
1010#include "driver.h"
1111#include "cpu/i8085/i8085.h"
1212#include "machine/i8255a.h"
13#include "devices/mflopimg.h"
13#include "devices/flopdrv.h"
1414#include "formats/basicdsk.h"
1515#include "includes/pk8020.h"
1616
src/mess/drivers/bbc.c
r5704r5705
1717#include "includes/bbc.h"
1818#include "machine/upd7002.h"
1919#include "machine/ctronics.h"
20#include "devices/mflopimg.h"
20#include "devices/flopdrv.h"
2121#include "formats/basicdsk.h"
2222#include "devices/cartslot.h"
2323#include "devices/cassette.h"
src/mess/drivers/kc.c
r5704r5705
2727
2828/* Devices */
2929#include "devices/cassette.h"
30#include "devices/mflopimg.h"
30#include "devices/flopdrv.h"
3131#include "formats/basicdsk.h"
3232
3333static READ8_HANDLER(kc85_4_port_r)

Previous 15994 Revisions Next


© 1998-2018 The MESS Team