trunk/src/lib/formats/flopimg.c
| r245700 | r245701 | |
| 1224 | 1224 | } |
| 1225 | 1225 | } |
| 1226 | 1226 | |
| 1227 | | void floppy_image_format_t::gcr5_w(std::vector<UINT32> &buffer, int n, UINT32 val, UINT32 size) |
| 1227 | void floppy_image_format_t::gcr5_w(std::vector<UINT32> &buffer, UINT8 val, UINT32 size) |
| 1228 | 1228 | { |
| 1229 | 1229 | UINT32 e0 = gcr5fw_tb[val >> 4]; |
| 1230 | 1230 | UINT32 e1 = gcr5fw_tb[val & 0x0f]; |
| r245700 | r245701 | |
| 1232 | 1232 | raw_w(buffer, 5, e1, size); |
| 1233 | 1233 | } |
| 1234 | 1234 | |
| 1235 | | void floppy_image_format_t::gcr5_w(std::vector<UINT32> &buffer, int start_bit, int n, UINT32 val, UINT32 size) |
| 1235 | void floppy_image_format_t::gcr5_w(std::vector<UINT32> &buffer, UINT8 val, UINT32 size, int offset) |
| 1236 | 1236 | { |
| 1237 | 1237 | UINT32 e0 = gcr5fw_tb[val >> 4]; |
| 1238 | 1238 | UINT32 e1 = gcr5fw_tb[val & 0x0f]; |
| 1239 | | raw_w(buffer, 5, e0, size, start_bit); |
| 1240 | | raw_w(buffer, 5, e1, size, start_bit+5); |
| 1239 | raw_w(buffer, 5, e0, size, offset); |
| 1240 | raw_w(buffer, 5, e1, size, offset+5); |
| 1241 | 1241 | } |
| 1242 | 1242 | |
| 1243 | 1243 | void floppy_image_format_t::_8n1_w(std::vector<UINT32> &buffer, int n, UINT32 val, UINT32 size) |
| r245700 | r245701 | |
| 1268 | 1268 | v = v ^ (gcr5bw_tb[bitn_r(buffer, o, 5)] << 4); |
| 1269 | 1269 | v = v ^ gcr5bw_tb[bitn_r(buffer, o+5, 5)]; |
| 1270 | 1270 | } |
| 1271 | | gcr5_w(buffer, 10, v, 1000, crc->write); |
| 1271 | gcr5_w(buffer, v, 1000, crc->write); |
| 1272 | 1272 | } |
| 1273 | 1273 | |
| 1274 | 1274 | UINT16 floppy_image_format_t::calc_crc_ccitt(const std::vector<UINT32> &buffer, int start, int end) |
| r245700 | r245701 | |
| 1313 | 1313 | UINT8 v = 0; |
| 1314 | 1314 | for(int o = crc->start; o < crc->end; o+=10) |
| 1315 | 1315 | v += ((gcr5bw_tb[bitn_r(buffer, o, 5)] << 4) | gcr5bw_tb[bitn_r(buffer, o+5, 5)]); |
| 1316 | | gcr5_w(buffer, 10, v, 1000, crc->write); |
| 1316 | gcr5_w(buffer, v, 1000, crc->write); |
| 1317 | 1317 | } |
| 1318 | 1318 | |
| 1319 | 1319 | void floppy_image_format_t::fixup_crc_victor_data(std::vector<UINT32> &buffer, const gen_crc_info *crc) |
| r245700 | r245701 | |
| 1321 | 1321 | UINT16 v = 0; |
| 1322 | 1322 | for(int o = crc->start; o < crc->end; o+=10) |
| 1323 | 1323 | v += ((gcr5bw_tb[bitn_r(buffer, o, 5)] << 4) | gcr5bw_tb[bitn_r(buffer, o+5, 5)]); |
| 1324 | | gcr5_w(buffer, 10, v & 0xff, 1000, crc->write); |
| 1325 | | gcr5_w(buffer, 10, v >> 8, 1000, crc->write+10); |
| 1324 | gcr5_w(buffer, v & 0xff, 1000, crc->write); |
| 1325 | gcr5_w(buffer, v >> 8, 1000, crc->write+10); |
| 1326 | 1326 | } |
| 1327 | 1327 | |
| 1328 | 1328 | void floppy_image_format_t::fixup_crcs(std::vector<UINT32> &buffer, gen_crc_info *crcs) |
| r245700 | r245701 | |
| 1435 | 1435 | |
| 1436 | 1436 | case GCR5: |
| 1437 | 1437 | for(int i=0; i<desc[index].p2; i++) |
| 1438 | | gcr5_w(buffer, 10, desc[index].p1); |
| 1438 | gcr5_w(buffer, desc[index].p1); |
| 1439 | 1439 | break; |
| 1440 | 1440 | |
| 1441 | 1441 | case _8N1: |
| r245700 | r245701 | |
| 1471 | 1471 | break; |
| 1472 | 1472 | |
| 1473 | 1473 | case TRACK_ID_DOS2_GCR5: |
| 1474 | | gcr5_w(buffer, 10, 1 + (track >> 1) + (head * 35)); |
| 1474 | gcr5_w(buffer, 1 + (track >> 1) + (head * 35)); |
| 1475 | 1475 | break; |
| 1476 | 1476 | |
| 1477 | 1477 | case TRACK_ID_DOS25_GCR5: |
| 1478 | | gcr5_w(buffer, 10, 1 + track + (head * 77)); |
| 1478 | gcr5_w(buffer, 1 + track + (head * 77)); |
| 1479 | 1479 | break; |
| 1480 | 1480 | |
| 1481 | 1481 | case TRACK_ID_GCR6: |
| r245700 | r245701 | |
| 1487 | 1487 | break; |
| 1488 | 1488 | |
| 1489 | 1489 | case TRACK_ID_VICTOR_GCR5: |
| 1490 | | gcr5_w(buffer, 10, track + (head * 0x80)); |
| 1490 | gcr5_w(buffer, track + (head * 0x80)); |
| 1491 | 1491 | break; |
| 1492 | 1492 | |
| 1493 | 1493 | case HEAD_ID: |
| r245700 | r245701 | |
| 1515 | 1515 | break; |
| 1516 | 1516 | |
| 1517 | 1517 | case SECTOR_ID_GCR5: |
| 1518 | | gcr5_w(buffer, 10, sect[sector_idx].sector_id); |
| 1518 | gcr5_w(buffer, sect[sector_idx].sector_id); |
| 1519 | 1519 | break; |
| 1520 | 1520 | |
| 1521 | 1521 | case SECTOR_ID_GCR6: |
| r245700 | r245701 | |
| 1644 | 1644 | case SECTOR_DATA_GCR5: { |
| 1645 | 1645 | const desc_s *csect = sect + (desc[index].p1 >= 0 ? desc[index].p1 : sector_idx); |
| 1646 | 1646 | for(int i=0; i != csect->size; i++) |
| 1647 | | gcr5_w(buffer, 10, csect->data[i]); |
| 1647 | gcr5_w(buffer, csect->data[i]); |
| 1648 | 1648 | break; |
| 1649 | 1649 | } |
| 1650 | 1650 | |
trunk/src/lib/formats/flopimg.h
| r245700 | r245701 | |
| 558 | 558 | //! MFM-encode every two bits and write |
| 559 | 559 | void mfm_half_w(std::vector<UINT32> &buffer, int start_bit, UINT32 val, UINT32 size = 1000); |
| 560 | 560 | //! GCR5-encode and write a series of bits |
| 561 | | void gcr5_w(std::vector<UINT32> &buffer, int n, UINT32 val, UINT32 size = 1000); |
| 562 | | void gcr5_w(std::vector<UINT32> &buffer, int offset, int n, UINT32 val, UINT32 size = 1000); |
| 561 | void gcr5_w(std::vector<UINT32> &buffer, UINT8 val, UINT32 size = 1000); |
| 562 | void gcr5_w(std::vector<UINT32> &buffer, UINT8 val, UINT32 size, int offset); |
| 563 | 563 | //! 8N1-encode and write a series of bits |
| 564 | 564 | void _8n1_w(std::vector<UINT32> &buffer, int n, UINT32 val, UINT32 size = 1000); |
| 565 | 565 | //! GCR4 encode (Apple II sector header) |