|
|
1.1 ! root 1: #include "vdfmt.h" ! 2: ! 3: ! 4: /* ! 5: ** The sector format of the SMD controller looks like this: ! 6: ** 32 bytes sector gap (header error) ! 7: ** 1 byte sync (0x19) (header error) ! 8: ** 2 bytes cylinder address (header error) ! 9: ** 1 byte track address (header error) ! 10: ** 1 byte sector address (header error) ! 11: ** 2 bytes alt cylinder address (header error) ! 12: ** 1 byte alt track address (header error) ! 13: ** 1 byte alt sector address (header error) ! 14: ** 4 bytes header crc (header error) ! 15: ** 34 bytes header gap (data error) ! 16: ** 512 bytes data (data error) ! 17: ** 4 byte ecc (data error) ! 18: ** ?? trailing pad (data error) ! 19: */ ! 20: ! 21: fmt_err smd_e_decode_position(bad_entry) ! 22: bs_entry bad_entry; ! 23: { ! 24: fmt_err error; ! 25: int sector_length = CURRENT->nbyte / CURRENT->nsec; ! 26: int offset = (bad_entry.bs_offset-2) % sector_length; ! 27: int bytes = (bad_entry.bs_length / 8) + 4; ! 28: ! 29: error.err_adr.cylinder = bad_entry.bs_cyl; ! 30: error.err_adr.track = bad_entry.bs_trk; ! 31: error.err_adr.sector = (bad_entry.bs_offset-2) / sector_length; ! 32: if(error.err_adr.sector >= CURRENT->nsec) { ! 33: error.err_adr.sector = CURRENT->nsec - 1; ! 34: error.err_stat = DATA_ERROR; ! 35: } ! 36: else if((offset < 45) || ((offset+bytes) > sector_length)) ! 37: error.err_stat = HEADER_ERROR; ! 38: else ! 39: error.err_stat = DATA_ERROR; ! 40: return error; ! 41: } ! 42: ! 43: ! 44: /* ! 45: ** ! 46: */ ! 47: ! 48: bs_entry smd_e_code_position(error) ! 49: fmt_err error; ! 50: { ! 51: int sector_length = CURRENT->nbyte / CURRENT->nsec; ! 52: bs_entry temp; ! 53: ! 54: temp.bs_length = 1; ! 55: temp.bs_cyl = error.err_adr.cylinder; ! 56: temp.bs_trk = error.err_adr.track; ! 57: temp.bs_offset = error.err_adr.sector * sector_length; ! 58: if(error.err_stat & HEADER_ERROR) { ! 59: temp.bs_offset += 1; ! 60: } ! 61: else { ! 62: temp.bs_offset += 60; ! 63: } ! 64: temp.bs_alt.cylinder = 0; ! 65: temp.bs_alt.track = 0; ! 66: temp.bs_alt.sector = 0; ! 67: temp.bs_how = scanning; ! 68: return temp; ! 69: } ! 70: ! 71: ! 72: /* ! 73: ** ! 74: */ ! 75: ! 76: int smd_e_cyl_skew() ! 77: { ! 78: return 0; ! 79: } ! 80: ! 81: ! 82: /* ! 83: ** ! 84: */ ! 85: ! 86: int smd_e_trk_skew() ! 87: { ! 88: return 0; ! 89: } ! 90:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.