This is a SCSI benchmark test program under ASPI. It can measure Hard-Disk, MO-Disk, CD-ROM drive's performance. All the part of this program are written by Borland C++ V3.1. Complete source files are included. By using its SCSI handling routine, you can write SCSI program very easily. How to use ~~~~~~~~~~ This program uses ASPI function call to handling SCSI, so you must add adequate ASPI manager to your config.sys. For example, if you are using Adaptec AHA-1542B, you must add ASPI4DOS.sys to your config.sys. To execute program, type "ASBENCH", then press key. If your ASPI manager is working correctly, device select menu like below will appear. ------------------------------------------------------------------------------- ASPI SCSI benchmark test V0.2 copyright(c) by Tsuru-Zoh, Nov.23,1992 Target No.0 : HA#0 ID1 MAXTOR LXT-535S 8.57 CCS1 Rigid Target No.1 : HA#0 ID2 MAXTOR XT-8760S B6B CCS1 Rigid Target No.2 : HA#0 ID6 HITACHI CDR-3650/1650S 0003 CCS1 Removable Enter target number ( 0 to 2 ) : ------------------------------------------------------------------------------- The devices except HDD/MO/CD-ROM will not appear in this menu. Choose target number to test, then benchmark test will starts. For example, in this case if you want to test LXT-535S, press '0' and . If you want to test CDR-3650, press '2' and . This benchmark contains 6 tests. There are no data write operations in tests, so no data in device will be damaged. 1: Test Unit Ready command overhead time 2: Seek command to Logical block 0 overhead time (no motion seek) 3: Sequential block seek command time 4: Random block seek command time 5: Sequential block read transfer rate 6: Random block read transfer rate This program measures how many commands executed in 5 seconds. For example, the drive can execute Random Seek 350 times in 5 seconds, average random seek time is 5 / 350[sec] = 14[ms] If the drive can execute 120 times of 8192 bytes sequential read in 5 seconds, average transfer rate is 8192 * 120 / 5 = 196 KB/s. This program displays performance rate by Bar-Graph, this value is based on Hard Disk performance rates that I think it's average value. So if you measure MO-Disk or CD-ROM drive, its performance rate becomes "Poor" or "OK", but it's no problem. Performance rate chart is below. Performance rate chart: Poor | OK | Good | Great | Superb Test Unit Ready command >2.5ms> >1.9ms> >1.3ms> >0.6ms> No Motion Seek command >3.5ms> >2.6ms> >1.8ms> >0.9ms> Sequential Seek >10ms> >7.5ms> >5ms> >2.5ms> Random Seek >40ms> >30ms> >20ms> >10ms> Sequential Read <400KB/s< <800KB/s< <1.2MB/s< <1.6MB/s< Random Read <300KB/s< <600KB/s< <900KB/s< <1.2MB/s< Please notice that these results includes ASPI manager and SCSI Host Adapter's overhead time. For example, Adaptec's AHA-1542B has 1.5 to 2ms of command overhead time. Known Bugs: ~~~~~~~~~~~ Some of CD-ROM media contains several sector size (ex. 2048/2340Bytes). In that case, this program will be terminated by read error. If it occurred, please change CD-ROM media and try again. @TsuruZoh Tachibanaya Nifty-Serve ID : PEE00476 Compuserve ID : 74440,476 Freeware Licence ~~~~~~~~~~~~~~~~ This program, program sources, associated files may be copied, used and posted on any BBS without charge or permission. The program, program sources, associated files may not be modified, sold, or used as part of a commercial package without permission of the author. Appendix: How to use aspiscsi.c ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Here is a sample program to use aspiscsi.c. It read 1 sector from "Host adapter No.0, SCSI-ID 0, SCSI logical block address(LBA) 0" then dump it. If you save this program as "test.c", please compile it like below. bcc test.c aspiscsi.c If you want to get detailed specs about ASPI, please access Adaptec BBS (1-408-945-7727). There are document file of ASPI specs for DOS (ASPIDOS.txt) in their Data Library. ----------------------------------------------------------------------- #include #include "aspi.h" #define HA_NO 0 // host adapter no. 0 #define SCSI_ID 0 // target ID 0 #define SCT_SIZE 512 // sector size is 512 unsigned char _far buffer[ 1024 ]; main() { int i, j; // initialize ASPI handler if( AspiInit() ){ return( -1 ); } // check target is ready or not if( TestUnitReady( HA_NO, SCSI_ID ) ){ return( -1 ); } // read 1 sector from LBA=0L if( ScsiRead( HA_NO, SCSI_ID, 0L, SCT_SIZE, 1, buffer ) ){ return( -1 ); } // dump data for( i = 0; i < 512; i += 16 ){ for( j = 0; j < 16; j++ ){ printf( "%02x ", buffer[ i + j ] ); } putchar( '\n' ); } return( 0 ); } -----------------------------------------------------------------------