Okay, what the heck, just after midnight, nothing on the one-eyed monster (who the heck actually looks at the Grammy awards, anyway?), so I figured I'd take a stab at the code.
Success.
With the new code, the Norton 4.5 SI numbers stack up this way:
8GB Maxtor 91531U3 IDE drive: CPU: 4.77MHz SI =1.0 Disk SI = 6.3
8GB Maxtor 91531U3 IDE drive: CPU: 8.00MHz SI =1.7 Disk SI = 6.4
192MB Toshiba CF card: CPU: 4.77MHz SI=1.0 Disk SI = 6.1
192MB Toshiba CF card: CPU: 8.00MHz SI=1.0 Disk SI = 6.3
That's close to a 6x improvement on the disk and 4-5 on the CF.
I don't think CPU speed is a factor any longer at least for these devices. And I suspect that DMA would actually be slower.
The mod was pretty simple--I cut the A0 and A3 traces at each via (near the edge connector) on the wiring side of the PCB and just ran two wires soldered from said vias to the appropriate 74LS138 pins.
The swap shouldn't matter with the ROM unless you're using an externally-programmed EPROM like me. In that case, use the following C program to swap the bytes around in the BIOS image file before programming:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define K_TO_SHUFFLE 8
#define BYTES_TO_SHUFFLE (K_TO_SHUFFLE * 1024) // self-explanatory
// Program to shuffle data addressed by interchange A0 and A3 lines.
// -----------------------------------------------------------------
//
// Done originally for the XTIDE modifications, but may find some
// other application.
//
// Re-arranges bytes such that:
//
// 0123456789abcdef -> 082a4c6e193b5d7f
//
// Chuck Guzis, February, 2011.
//
void main( int argc, char *argv[])
{
FILE
*in,
*out; // input and output FDs
unsigned char
image[ BYTES_TO_SHUFFLE], // shuffler
temp; // temporary byte
int
i, j, k; // scratch integers
printf( "\nROM A0-A3 swap data shuffler (%dKiB version)\n", K_TO_SHUFFLE);
if ( argc != 3)
{
fprintf( stderr, "\nCommand syntax is %s <input-file> <output-file>\n",
argv[0]);
exit(-1); // quit after giving summary
} // if improper number of arguments
in = fopen( argv[1], "rb");
if ( !in)
{
fprintf( stderr, "\nERROR - Could not open input file %s\n", argv[1]);
exit(1);
} // if input won't open
out = fopen( argv[2], "wb");
if ( !in)
{
fprintf( stderr, "\nERROR - could not open output file %s\n", argv[2]);
exit(2);
} // if output won't open
memset( image, 0, BYTES_TO_SHUFFLE); // clear buffer
k = fread( image, sizeof( unsigned char), BYTES_TO_SHUFFLE, in);
if ( k != BYTES_TO_SHUFFLE)
fprintf( stderr, "\nWAarning - Short read; buffer padded with zero.\n");
fclose( in);
// Do the shuffle.
for ( i = 0; i < BYTES_TO_SHUFFLE; i += 16)
{
for ( j = 1; j < 8; j +=2)
{
temp = image[ i+j];
image[i + j] = image[ i+j+7];
image[i+j+7] = temp; // swap 4 pairs of bytes
} // swap odd-numbered bytes
} // shuffle in 16-byte blocks
k = fwrite( image, sizeof( unsigned char), BYTES_TO_SHUFFLE, out);
fclose( out);
if ( k != BYTES_TO_SHUFFLE)
{
fprintf( stderr, "\nError - Write error; only %d of %d bytes written\n.",
k, BYTES_TO_SHUFFLE);
exit(10);
} // if short write
printf( "\nAll done.\n");
exit(0);
} // end of main
Enjoy!
P.S. Attached are the "un-swapped" and "swapped" BIOS images that I used.
Bookmarks