|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)smd_e.c 1.3 (Berkeley/CCI) 6/7/88"; ! 3: #endif ! 4: ! 5: #include "vdfmt.h" ! 6: ! 7: ! 8: /* ! 9: ** The sector format of the SMD controller looks like this: ! 10: ** 32 bytes sector gap (header error) ! 11: ** 1 byte sync (0x19) (header error) ! 12: ** 2 bytes cylinder address (header error) ! 13: ** 1 byte track address (header error) ! 14: ** 1 byte sector address (header error) ! 15: ** 2 bytes alt cylinder address (header error) ! 16: ** 1 byte alt track address (header error) ! 17: ** 1 byte alt sector address (header error) ! 18: ** 4 bytes header crc (header error) ! 19: ** 34 bytes header gap (data error) ! 20: ** 512 bytes data (data error) ! 21: ** 4 byte ecc (data error) ! 22: ** ?? trailing pad (data error) ! 23: */ ! 24: ! 25: smd_e_decode_position(bad_entry, error) ! 26: register bs_entry *bad_entry; ! 27: register fmt_err *error; ! 28: { ! 29: int sector_length = lab->d_traksize / lab->d_nsectors; ! 30: int offset = (bad_entry->bs_offset-2) % sector_length; ! 31: int bytes = (bad_entry->bs_length / 8) + 4; ! 32: ! 33: error->err_adr.cylinder = bad_entry->bs_cyl; ! 34: error->err_adr.track = bad_entry->bs_trk; ! 35: error->err_adr.sector = (bad_entry->bs_offset-2) / sector_length; ! 36: if(error->err_adr.sector >= lab->d_nsectors) { ! 37: error->err_adr.sector = lab->d_nsectors - 1; ! 38: error->err_stat = DATA_ERROR; ! 39: } ! 40: else if((offset < 45) || ((offset+bytes) > sector_length)) ! 41: error->err_stat = HEADER_ERROR; ! 42: else ! 43: error->err_stat = DATA_ERROR; ! 44: } ! 45: ! 46: ! 47: /* ! 48: ** ! 49: */ ! 50: ! 51: smd_e_code_position(error, badent) ! 52: register fmt_err *error; ! 53: register bs_entry *badent; ! 54: { ! 55: int sector_length = lab->d_traksize / lab->d_nsectors; ! 56: ! 57: badent->bs_length = 1; ! 58: badent->bs_cyl = error->err_adr.cylinder; ! 59: badent->bs_trk = error->err_adr.track; ! 60: badent->bs_offset = error->err_adr.sector * sector_length; ! 61: if(error->err_stat & HEADER_ERROR) { ! 62: badent->bs_offset += 1; ! 63: } ! 64: else { ! 65: badent->bs_offset += 60; ! 66: } ! 67: badent->bs_alt.cylinder = 0; ! 68: badent->bs_alt.track = 0; ! 69: badent->bs_alt.sector = 0; ! 70: badent->bs_how = scanning; ! 71: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.