home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GEMini Atari
/
GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso
/
files
/
diskutil
/
ff32bin
/
disktest.c
next >
Wrap
C/C++ Source or Header
|
1993-08-05
|
5KB
|
147 lines
/*
Disktest -- test the speed of reading and writing floppy
Copyright (C) 1989 by Robert Fischer
This program costs no money; you can redistribute it and/or modify it
under the terms of the Lynxware General License as published by Robert
Fischer; either version 1, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Lynxware General License for more details.
You should have received a copy of the Lynxware General License
along with this program; if not, write to the author.
To contact the author, call or write:
Robert Fischer
80 Killdeer Road
Hamden, CT 06517
(203) 288-9599
E-mail: fischer-robert@cs.yale.edu
*/
/* This is meant to compile under Mark Williams C */
/* For other C compilers, the GEMDOS and BIOS macros may need to be changed.. */
/* ================= Pulled from my Include files ================== */
typedef unsigned long LONG;
#define HZ_200 *( (LONG *)0x4BAL )
#define Cconin() gemdos(0x1)
#define Cconout(a) gemdos(0x2,a)
#define Cnecin() gemdos(0x8)
#define Cconws(a) gemdos(0x9,a)
#define Super(a) gemdos(0x20,(LONG)(a))
#define Getbpb(a) bios(7,a)
#define Rwabs(a,b,c,d,e) bios(4,a,(LONG)b,c,d,e)
# define B_READ 0
# define B_WRITE 1
# define B_READ_NOCHANGE 2
# define B_WRITE_NOCHANGE 3
# define FLOP_A 0
# define FLOP_B 1
extern char *lmalloc();
/* ========================== Start of code ======================== */
#define STARTSEC 27
#define NUM_TRACKS 20 /* Number of tracks per trial */
#define NUM_TRIALS 10 /* Number of trials to do */
char *buf;
/* ------------------------------------------------------- */
long clock()
{
LONG usp;
long ret;
usp = Super(0);
ret = HZ_200;
Super(usp);
return ret;
}
/* ------------------------------------------------------- */
insert_disk(sides)
int sides;
{
printf("Insert your junk %d-sided, 9-sector floppy in drive A\n",
sides);
Cnecin();
Getbpb(FLOP_A);
}
/* ------------------------------------------------------- */
int test_disk(rowr, sides)
int rowr; /* 1 for write, 0 for read */
int sides;
{
long start_time;
int elapsed;
Rwabs(B_READ, buf, 2, STARTSEC - 9, FLOP_A); /* Start motor going */
start_time = clock();
Rwabs(rowr, buf, NUM_TRACKS * 9 * sides, STARTSEC, FLOP_A); /* Do the timed read */
elapsed = clock() - start_time;
return elapsed;
}
/* ------------------------------------------------------- */
run_trial(rorw, sides)
int rorw; /* 1 for write, 0 for read */
int sides;
{
long total;
int tpt; /* Time per track */
int i;
/* Test the disk */
for (total = 0, i = 0; i < NUM_TRIALS; i++) {
total += test_disk(rorw, sides);
}
tpt = (total / (NUM_TRACKS * NUM_TRIALS));
printf("%cS %s: %d ms/track avg.\n",
(sides == 1 ? 'S' : 'D'),
(rorw == B_READ ? " Read" : "Write"),
tpt * 5);
}
/* ------------------------------------------------------- */
main()
{
int c;
int sides;
buf = lmalloc((long)NUM_TRACKS * 9L * 512L);
Cconws("\033EDisktest -- test the speed of reading and writing floppy disks.\r\n");
Cconws("Copyright \275 1989 by Robert Fischer\r\n");
Cconws("Disktest comes with ABSOLUTELY NO WARRANTY.\r\n"
"This program is Lynxware and is subject to the terms of the Lynxware\r\n"
"General License; either version 1, or (at your option) any later version.\r\n\n"
);
Cconws("To use Disktest, you need a formatted junk 9-sector single or\r\n");
Cconws("double-sided floppy disk, and a few minutes. DISKTEST WILL DESTROY\r\n");
Cconws("THE DATA ON THE DISK YOU INSERT! If you wish to continue, press 'C'.\r\n");
Cconws("Any other key will exit. ");
c = Cconin() & 0xFF;
if (c != 'c' && c != 'C') exit(0);
Cconws("\r\nHow many sides does your disk have? ");
c = Cconin() & 0xFF;
sides = (c == '2' ? 2 : 1);
Cconws("\r\n");
insert_disk(sides);
Cconws("Are you sure you want to continue with Disktest and destroy ALL THE\r\n");
Cconws("DATA in drive A? ");
c = Cconin() & 0xFF;
Cconws("\r\n\r\n");
if (c != 'y' && c != 'Y') exit(0);
run_trial(B_READ, sides);
run_trial(B_WRITE, sides);
Cconws("Press any key to return to the Desktop.\r\n");
Cnecin();
}
/* ------------------------------------------------------- */