xref: /original-bsd/sys/tahoe/stand/vdformat/smd.c (revision e59fb703)
1 #ifndef lint
2 static char sccsid[] = "@(#)smd.c	1.3 (Berkeley/CCI) 06/07/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 }
70