|
|
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.