--- uae/amiga/source/transdisk.c 2018/04/24 16:38:39 1.1 +++ uae/amiga/source/transdisk.c 2018/04/24 16:39:42 1.1.1.3 @@ -1,11 +1,15 @@ /* - * Transdisk V4 - * Copyright 1995,1996 Bernd Schmidt, Marcus Sundberg, Stefan Ropke + * Transdisk V4.2 + * Copyright 1995-97 Bernd Schmidt, Marcus Sundberg, Stefan Ropke, + * Rodney Hester, Joanne Dow * - * Use DICE and 2.0 includes or above to compile + * Use DICE and 2.0 includes or above to compile. SAS C should work too. */ #include +#include +#include +#include #include #include @@ -15,10 +19,13 @@ #include #include -static void usage() +static void usage(void); + +static void usage(void) { fprintf(stderr, "Usage: transdisk options\n"); fprintf(stderr, "Recognized options:\n"); + fprintf(stderr, "-h: Assume device is high density\n"); fprintf(stderr, "-d device unit: Use this device instead of DF0:\n"); fprintf(stderr, "-s n: Begin transfer at track n\n"); fprintf(stderr, "-e n: End transfer at track n\n"); @@ -38,7 +45,6 @@ int main(int argc, char **argv) FILE *ADFFile; int write=0; struct IOStdReq *ioreq; - int signal; struct MsgPort *port; UBYTE *buffer; @@ -47,6 +53,7 @@ int main(int argc, char **argv) char devicenum = 0; int i; int starttr = 0, endtr = 79; + int sectors = 11; for (i = 1; i < argc;) { if (argv[i][0] != '-' || argv[i][2] != 0) { @@ -54,6 +61,10 @@ int main(int argc, char **argv) exit(1); } switch (argv[i][1]) { + case 'h': + sectors = 22; + i++; + break; case 'd': if (i+2 >= argc) { usage(); @@ -95,7 +106,9 @@ int main(int argc, char **argv) } } fprintf(stderr,"Using %s unit %d\n", devicename, devicenum); + fprintf(stderr,"Tracks are %d sectors\n", sectors); fprintf(stderr,"First track %d, last track %d\n", starttr, endtr); + buffer = AllocMem(512, MEMF_CHIP); if (write) { ADFFile = fopen(filename,openMode); @@ -110,7 +123,7 @@ int main(int argc, char **argv) if (port) { ioreq = CreateStdIO(port); if (ioreq) { - if (OpenDevice(devicename, devicenum, ioreq, 0) == 0) { + if (OpenDevice(devicename, devicenum, (struct IORequest *) ioreq, 0) == 0) { int tr, sec; ioreq->io_Command = write ? CMD_WRITE : CMD_READ; @@ -118,31 +131,32 @@ int main(int argc, char **argv) ioreq->io_Data = buffer; for (tr = starttr*2; tr < (endtr+1)*2; tr++) { fprintf(stderr,"Track: %d\r",tr/2); - for (sec = 0; sec < 11; sec++) { + for (sec = 0; sec < sectors; sec++) { fflush(stderr); if (write) if (fread(buffer, sizeof(UBYTE), 512, ADFFile) < 512) { - printf("Error: ADF file to short?\n"); + fprintf(stderr, "Error: ADF file to short?\n"); exit(1); } - ioreq->io_Offset = 512 * (tr * 11 + sec); - DoIO(ioreq); + ioreq->io_Offset = 512 * (tr * sectors + sec); + DoIO( (struct IORequest *) ioreq); if (!write) fwrite(buffer, sizeof(UBYTE), 512, stdout); } } if (write) { /* Make sure the last track is written to disk */ ioreq->io_Command = CMD_UPDATE; - DoIO(ioreq); + DoIO( (struct IORequest *) ioreq); } ioreq->io_Command = TD_MOTOR; /* Turn Disk-motor off */ ioreq->io_Length = 0; - DoIO(ioreq); - CloseDevice(ioreq); + DoIO( (struct IORequest *) ioreq); + CloseDevice( (struct IORequest *) ioreq); } else fprintf(stderr,"Unable to open %s unit %d\n", devicename, devicenum); DeleteStdIO(ioreq); } + DeletePort(port); } fprintf(stderr,"\n"); FreeMem(buffer, 512);