|
|
Power 6/32 Unix version 1.2b
#include "udc.h"
#define SCRATCH CMD_R
#define TSTBLK 5010
extern long Probe, iob0, iob1, iob2, iob3, iob4;
long u_err;
/* Routine to exercise UDC
*/
u_ex()
{
Probe = 1;
u_probe(CMD_R);
u_probe(CMD_F);
Probe = 0;
u_ex1(1);
u_ex1(2);
u_ex1(3);
if (!u_err) writes("\nUDC passed..\n");
else writes("\nUDC failed..\n");
}
u_ex1(factor)
long factor;
{ register long ix, pat, *sptr, *dptr, blk, loop;
unsigned short *s, *d;
char sdev;
sdev = SCRATCH; /* Play on the removable */
blk = TSTBLK; /* Read write test from block no. */
pat = 0xababab00; /* Pattern */
sptr = &iob0; /* Source buffer */
dptr = &iob3; /* Destination buffer */
for(u_err=loop=0;loop<40;loop++)
{
/* initialize pattern in source buffer */
for (ix=0; ix<(BLKSIZ/4)*factor; ix++) {
sptr[ix] = pat + ix; /* init. pattern in source buffer */
dptr[ix] = 0; /* Clear destination buffer */
}
/* Write 1 block of data */
if (disk_rw(WRITE,sdev,blk,factor,&iob0)==0) { u_err=1; return(0); }
/* Read 1 block of data */
if (disk_rw(READ,sdev,blk,factor,&iob3)==0) { u_err=1; return(0); }
s = (unsigned short *)&iob0; /* Source buffer */
d = (unsigned short *)&iob3; /* Destination buffer */
for (ix=0; ix<(BLKSIZ/2)*factor; ix++) {
if (s[ix] != d[ix]) {
writes("\nExpected ");
writeh(s[ix] & 0xffff);
writes(" , actual "); writeh(d[ix] & 0xffff);
writes(", address "); writeh(&d[ix]);
u_err = 1;
}
}
if (u_err) loop = 0; /* If error then loop forever */
}
}
/* routine to probe CMD disk
*/
u_probe(sdev)
char sdev;
{ register long *dptr, blk, inc;
inc = 200;
blk = 0;
while (inc != 1) {
for(;;blk += inc) { /* Read 1 block (1K) of data */
if (disk_rw(READ,sdev,blk,1,&iob0)==0)
{ blk -= inc; break; }
}
inc /= 2;
}
if (sdev == CMD_F) writes("\n** CMD fixed has ");
else writes("\n** CMD removable has ");
writed(blk); writes(" Kbytes\n");
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.