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