|
|
Power 6/32 Unix version 1.21
#include "vdfmt.h"
/*
** The sector format of the SMD controller looks like this:
** 32 bytes sector gap (header error)
** 1 byte sync (0x19) (header error)
** 2 bytes cylinder address (header error)
** 1 byte track address (header error)
** 1 byte sector address (header error)
** 2 bytes alt cylinder address (header error)
** 1 byte alt track address (header error)
** 1 byte alt sector address (header error)
** 4 bytes header crc (header error)
** 34 bytes header gap (data error)
** 512 bytes data (data error)
** 4 byte ecc (data error)
** ?? trailing pad (data error)
*/
fmt_err smd_e_decode_position(bad_entry)
bs_entry bad_entry;
{
fmt_err error;
int sector_length = CURRENT->nbyte / CURRENT->nsec;
int offset = (bad_entry.bs_offset-2) % sector_length;
int bytes = (bad_entry.bs_length / 8) + 4;
error.err_adr.cylinder = bad_entry.bs_cyl;
error.err_adr.track = bad_entry.bs_trk;
error.err_adr.sector = (bad_entry.bs_offset-2) / sector_length;
if(error.err_adr.sector >= CURRENT->nsec) {
error.err_adr.sector = CURRENT->nsec - 1;
error.err_stat = DATA_ERROR;
}
else if((offset < 45) || ((offset+bytes) > sector_length))
error.err_stat = HEADER_ERROR;
else
error.err_stat = DATA_ERROR;
return error;
}
/*
**
*/
bs_entry smd_e_code_position(error)
fmt_err error;
{
int sector_length = CURRENT->nbyte / CURRENT->nsec;
bs_entry temp;
temp.bs_length = 1;
temp.bs_cyl = error.err_adr.cylinder;
temp.bs_trk = error.err_adr.track;
temp.bs_offset = error.err_adr.sector * sector_length;
if(error.err_stat & HEADER_ERROR) {
temp.bs_offset += 1;
}
else {
temp.bs_offset += 60;
}
temp.bs_alt.cylinder = 0;
temp.bs_alt.track = 0;
temp.bs_alt.sector = 0;
temp.bs_how = scanning;
return temp;
}
/*
**
*/
int smd_e_cyl_skew()
{
return 0;
}
/*
**
*/
int smd_e_trk_skew()
{
return 0;
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.