Previous 199869 Revisions Next

r33675 Thursday 4th December, 2014 at 20:04:16 UTC by Curt Coder
[MESS] victor9k: Floppy WIP. (nw)
[src/lib/formats]victor9k_dsk.c victor9k_dsk.h

trunk/src/lib/formats/victor9k_dsk.c
r242186r242187
3939    Interleave factor 3
4040    cell 2.13 usec
4141
42
43   Boot Disc Label Format
44   Track 0 Sector 0
45
46   Byte
47   Offset         Name                Description
48
49   0              System disc ID      literally, ff,00h for a system
50                                      disc
51
52   2              Load address        paragraph   to   load   booted
53                                      program at. If zero then  boot
54                                      loads in high memory.
55
56   4              Length              paragraph count to load.
57
58   6              Entry offset        I.P.  value  for  transfer  of
59                                      control.
60
61   8              Entry segment       C.S.  value  for  transfer  of
62                                      control.
63
64   10             I.D.                disc identifier.
65
66   18             Part number         system identifier  - displayed
67                                      by early versions of boot.
68
69   26             Sector size         byte count for sectors.
70
71   28             Data start          first   data  sector  on  disc
72                                      (absolute sectors).
73
74   30             Boot start          first   absolute   sector   of
75                                      program  for boot to  load  at
76                                      'load  address'  for  'length'
77                                      paragraphs.
78
79   32             Flags               indicators:
80                                           bit  meaning
81                                          15-12 interleave    factor
82                                                (0-15)
83                                            0   0=single sided
84                                                1=double sided
85
86   34             Disc type           00 = CP/M
87                                      01 = MS-DOS
88
89   35             Reserved
90
91   38             Speed table         information  for speed control
92                                      proc.
93
94   56             Zone table          high track for each zone.
95
96   71             Sector/track        sectors  per  track  for  each
97                                      zone.
4298*/
4399
44100#include "emu.h"
r242186r242187
84140   return 0;
85141}
86142
143void victor9k_format::log_boot_sector(UINT8 *data)
144{
145   // System disc ID
146   logerror("System disc: %s\n", ((data[0] == 0xff) && (data[1] == 0x00)) ? "yes" : "no");
147
148   // Load address
149   logerror("Load address: %04x\n", (data[1] << 8) | data[2]);
150
151   // Length
152   logerror("Length: %04x\n", (data[3] << 8) | data[4]);
153
154   // Entry offset
155   logerror("Entry offset: %04x\n", (data[5] << 8) | data[6]);
156
157   // Entry segment
158   logerror("Entry segment: %04x\n", (data[7] << 8) | data[8]);
159
160   // I.D.
161   //logerror("I.D.: %s\n", data[10]);
162
163   // Part number
164   //logerror("Part number: %s\n", data[18]);
165
166   // Sector size
167   logerror("Sector size: %04x\n", (data[25] << 8) | data[26]);
168
169   // Data start
170   logerror("Data start: %04x\n", (data[27] << 8) | data[28]);
171
172   // Boot start
173   logerror("Boot start: %04x\n", (data[29] << 8) | data[30]);
174
175   // Flags
176   logerror("%s sided\n", BIT(data[33], 0) ? "Double" : "Single");
177   logerror("Interleave factor: %u\n", data[32] >> 4);
178
179   // Disc type
180   switch (data[34]) {
181   case 0x00: logerror("Disc type: CP/M\n"); break;
182   case 0x01: logerror("Disc type: MS-DOS\n"); break;
183   default: logerror("Disc type: unknown\n"); break;
184   }
185
186   // Speed table
187   logerror("Speed table:  ");
188   for (int i = 38; i < 56; i++) {
189      logerror("%02x ", data[i]);
190   }
191   logerror("\n");
192
193   // Zone table
194   logerror("Zone table:            ");
195   for (int i = 56; i < 71; i++) {
196      logerror("%02x ", data[i]);
197   }
198   logerror("\n");
199
200   // Sector/track
201   logerror("Sector/track:          ");
202   for (int i = 71; i < 86; i++) {
203      logerror("%02x ", data[i]);
204   }
205   logerror("\n");
206}
207
87208floppy_image_format_t::desc_e* victor9k_format::get_sector_desc(const format &f, int &current_size, int sector_count)
88209{
89210   static floppy_image_format_t::desc_e desc[] = {
r242186r242187
141262
142263   io_generic_read(io, img, 0, size);
143264
265   log_boot_sector(img);
266
144267   int track_offset = 0;
145268
146269   for (int head = 0; head < f.head_count; head++) {
r242186r242187
207330      18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
208331      17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
209332      16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
210      15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
211      14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
333      15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
334      14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
212335      13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
213336      12, 12, 12, 12, 12, 12, 12, 12, 12
214337   },
trunk/src/lib/formats/victor9k_dsk.h
r242186r242187
3333
3434   int find_size(io_generic *io, UINT32 form_factor);
3535   virtual int identify(io_generic *io, UINT32 form_factor);
36   void log_boot_sector(UINT8 *data);
3637   floppy_image_format_t::desc_e* get_sector_desc(const format &f, int &current_size, int sector_count);
3738   void build_sector_description(const format &f, UINT8 *sectdata, offs_t sect_offs, desc_s *sectors, int sector_count) const;
3839   virtual bool load(io_generic *io, UINT32 form_factor, floppy_image *image);


Previous 199869 Revisions Next


© 1997-2024 The MAME Team