trunk/src/lib/formats/dsk_dsk.c
| r19887 | r19888 | |
| 333 | 333 | UINT8 sector_size_code; |
| 334 | 334 | UINT8 fdc_status_reg1; |
| 335 | 335 | UINT8 fdc_status_reg2; |
| 336 | | UINT16 data_lenght; |
| 336 | UINT16 data_length; |
| 337 | 337 | }; |
| 338 | 338 | |
| 339 | 339 | #pragma pack() |
| r19887 | r19888 | |
| 343 | 343 | UINT8 header[100]; |
| 344 | 344 | bool extendformat = FALSE; |
| 345 | 345 | |
| 346 | int image_size = io_generic_size(io); |
| 347 | |
| 346 | 348 | io_generic_read(io, &header, 0, sizeof(header)); |
| 347 | 349 | if ( memcmp( header, EXT_FORMAT_HEADER, 16 ) ==0) { |
| 348 | 350 | extendformat = TRUE; |
| r19887 | r19888 | |
| 377 | 379 | int counter = 0; |
| 378 | 380 | for(int track=0; track < tracks; track++) { |
| 379 | 381 | for(int side=0; side < heads; side++) { |
| 380 | | // read location of |
| 382 | if(track_offsets[(track<<1)+side] >= image_size) |
| 383 | continue; |
| 381 | 384 | track_header tr; |
| 382 | 385 | io_generic_read(io, &tr,track_offsets[(track<<1)+side],sizeof(tr)); |
| 383 | | //printf("%d,%d %d, %d\n",track,side,tr.track_number, tr.gap3_length); |
| 384 | | //int sec_location = track_offsets[(track<<1)+side] + 0x100; |
| 385 | | for(int j=0;j<tr.number_of_sector;j++) |
| 386 | | { |
| 386 | desc_pc_sector sects[256]; |
| 387 | UINT8 sect_data[65536]; |
| 388 | int sdatapos = 0; |
| 389 | int pos = track_offsets[(track<<1)+side] + 0x100; |
| 390 | for(int j=0;j<tr.number_of_sector;j++) { |
| 387 | 391 | sector_header sector; |
| 388 | 392 | io_generic_read(io, §or,track_offsets[(track<<1)+side]+sizeof(tr)+(sizeof(sector)*j),sizeof(sector)); |
| 389 | | //printf("sec %02x %08x\n",sector.sector_id,sec_location); |
| 390 | 393 | |
| 391 | | //sec_location += sector.data_lenght; |
| 394 | sects[j].track = sector.track; |
| 395 | sects[j].head = sector.side; |
| 396 | sects[j].sector = sector.sector_id; |
| 397 | sects[j].size = sector.sector_size_code; |
| 398 | sects[j].actual_size = sector.data_length; |
| 399 | sects[j].deleted = sector.fdc_status_reg1 == 0xb2; |
| 400 | sects[j].bad_crc = sector.fdc_status_reg1 == 0xb5; |
| 401 | |
| 402 | if(!sects[j].deleted) { |
| 403 | sects[j].data = sect_data + sdatapos; |
| 404 | io_generic_read(io, sects[j].data, pos, sects[j].actual_size); |
| 405 | sdatapos += sects[j].actual_size; |
| 406 | |
| 407 | } else |
| 408 | sects[j].data = NULL; |
| 409 | |
| 410 | if(extendformat) |
| 411 | pos += sector.data_length; |
| 412 | else |
| 413 | pos += 128 << tr.sector_size_code; |
| 392 | 414 | } |
| 415 | build_pc_track_mfm(track, side, image, 100000, tr.number_of_sector, sects, tr.gap3_length); |
| 393 | 416 | counter++; |
| 394 | 417 | } |
| 395 | 418 | } |
trunk/src/mess/drivers/amstrad.c
| r19887 | r19888 | |
| 105 | 105 | #include "imagedev/cartslot.h" |
| 106 | 106 | #include "imagedev/cassette.h" |
| 107 | 107 | #include "formats/tzx_cas.h" |
| 108 | #include "formats/dsk_dsk.h" |
| 108 | 109 | |
| 109 | 110 | #include "machine/ram.h" |
| 110 | 111 | |
| r19887 | r19888 | |
| 883 | 884 | MCFG_RAM_DEFAULT_SIZE("128K") |
| 884 | 885 | MACHINE_CONFIG_END |
| 885 | 886 | |
| 887 | FLOPPY_FORMATS_MEMBER( amstrad_state::floppy_formats ) |
| 888 | FLOPPY_DSK_FORMAT |
| 889 | FLOPPY_FORMATS_END |
| 886 | 890 | |
| 887 | 891 | static MACHINE_CONFIG_DERIVED( amstrad, amstrad_nofdc ) |
| 888 | 892 | MCFG_UPD765A_ADD("upd765", true, true) |
| 889 | 893 | |
| 890 | | MCFG_FLOPPY_DRIVE_ADD("upd765:0", amstrad_floppies, "3ssdd", 0, floppy_image_device::default_floppy_formats) |
| 891 | | MCFG_FLOPPY_DRIVE_ADD("upd765:1", amstrad_floppies, "3ssdd", 0, floppy_image_device::default_floppy_formats) |
| 894 | MCFG_FLOPPY_DRIVE_ADD("upd765:0", amstrad_floppies, "3ssdd", 0, amstrad_state::floppy_formats) |
| 895 | MCFG_FLOPPY_DRIVE_ADD("upd765:1", amstrad_floppies, "3ssdd", 0, amstrad_state::floppy_formats) |
| 892 | 896 | |
| 893 | 897 | MCFG_SOFTWARE_LIST_ADD("flop_list","cpc_flop") |
| 894 | 898 | MACHINE_CONFIG_END |