trunk/src/lib/formats/victor9k_dsk.c
| r242186 | r242187 | |
| 39 | 39 | Interleave factor 3 |
| 40 | 40 | cell 2.13 usec |
| 41 | 41 | |
| 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. |
| 42 | 98 | */ |
| 43 | 99 | |
| 44 | 100 | #include "emu.h" |
| r242186 | r242187 | |
| 84 | 140 | return 0; |
| 85 | 141 | } |
| 86 | 142 | |
| 143 | void 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 | |
| 87 | 208 | floppy_image_format_t::desc_e* victor9k_format::get_sector_desc(const format &f, int ¤t_size, int sector_count) |
| 88 | 209 | { |
| 89 | 210 | static floppy_image_format_t::desc_e desc[] = { |
| r242186 | r242187 | |
| 141 | 262 | |
| 142 | 263 | io_generic_read(io, img, 0, size); |
| 143 | 264 | |
| 265 | log_boot_sector(img); |
| 266 | |
| 144 | 267 | int track_offset = 0; |
| 145 | 268 | |
| 146 | 269 | for (int head = 0; head < f.head_count; head++) { |
| r242186 | r242187 | |
| 207 | 330 | 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, |
| 208 | 331 | 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, |
| 209 | 332 | 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, |
| 212 | 335 | 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, |
| 213 | 336 | 12, 12, 12, 12, 12, 12, 12, 12, 12 |
| 214 | 337 | }, |