src/mess/formats/d88_dsk.c
| r8580 | r8581 | |
| 39 | 39 | UINT32 trackoffset[164]; |
| 40 | 40 | UINT8 write_protect; |
| 41 | 41 | UINT8 disk_type; |
| 42 | UINT8 heads; |
| 42 | 43 | }; |
| 43 | 44 | |
| 44 | 45 | static struct d88_tag *get_d88_tag(floppy_image *floppy) |
| r8580 | r8581 | |
| 53 | 54 | UINT8 sector_hdr[16]; |
| 54 | 55 | int x; |
| 55 | 56 | |
| 56 | | offset = tag->trackoffset[(track*2)+head]; |
| 57 | offset = tag->trackoffset[(track*tag->heads)+head]; |
| 57 | 58 | |
| 58 | 59 | if(offset == 0) |
| 59 | 60 | return 0; |
| r8580 | r8581 | |
| 80 | 81 | |
| 81 | 82 | static int d88_get_heads_per_disk(floppy_image *floppy) |
| 82 | 83 | { |
| 83 | | return 2; // 2 heads |
| 84 | struct d88_tag* tag = get_d88_tag(floppy); |
| 85 | return tag->heads; |
| 84 | 86 | } |
| 85 | 87 | |
| 86 | 88 | static int d88_get_sectors_per_track(floppy_image *floppy, int head, int track) |
| r8580 | r8581 | |
| 89 | 91 | UINT32 offset; |
| 90 | 92 | UINT8 sector_hdr[16]; |
| 91 | 93 | |
| 92 | | offset = tag->trackoffset[(track*2)+head]; |
| 94 | offset = tag->trackoffset[(track*tag->heads)+head]; |
| 93 | 95 | |
| 94 | 96 | floppy_image_read(floppy,sector_hdr,offset,16); |
| 95 | 97 | |
| r8580 | r8581 | |
| 104 | 106 | UINT32 len; |
| 105 | 107 | int count,secs; |
| 106 | 108 | |
| 107 | | offset = tag->trackoffset[(track*2)+head]; |
| 109 | offset = tag->trackoffset[(track*tag->heads)+head]; |
| 108 | 110 | |
| 109 | 111 | floppy_image_read(floppy,sector_hdr,offset,16); |
| 110 | 112 | secs = sector_hdr[4]; |
| r8580 | r8581 | |
| 143 | 145 | int count; |
| 144 | 146 | |
| 145 | 147 | // get offset of the beginning of the track |
| 146 | | offset = tag->trackoffset[(track*2)+head]; |
| 148 | offset = tag->trackoffset[(track*tag->heads)+head]; |
| 147 | 149 | |
| 148 | 150 | floppy_image_read(floppy,sector_hdr,offset,16); |
| 149 | 151 | secs = sector_hdr[4]; |
| r8580 | r8581 | |
| 171 | 173 | UINT8 sector_hdr[16]; |
| 172 | 174 | int x; |
| 173 | 175 | |
| 174 | | offset = tag->trackoffset[(track*2)+head]; |
| 176 | offset = tag->trackoffset[(track*tag->heads)+head]; |
| 175 | 177 | |
| 176 | 178 | if(offset == 0) |
| 177 | 179 | return FLOPPY_ERROR_SEEKERROR; |
| r8580 | r8581 | |
| 277 | 279 | if(prot) |
| 278 | 280 | *prot = header[0x1a]; |
| 279 | 281 | if(type) |
| 280 | | *prot = header[0x1b]; |
| 282 | *type = header[0x1b]; |
| 281 | 283 | if(size) |
| 282 | 284 | { |
| 283 | 285 | s = 0; |
| r8580 | r8581 | |
| 344 | 346 | |
| 345 | 347 | tag->write_protect = prot; |
| 346 | 348 | tag->disk_type = type; |
| 349 | tag->heads = 2; |
| 350 | if (tag->disk_type==0x30 || tag->disk_type==0x40) tag->heads = 1; |
| 351 | |
| 347 | 352 | tag->image_size = size; |
| 348 | 353 | for(x=0;x<164;x++) |
| 349 | 354 | tag->trackoffset[x] = offs[x]; |