X-Git-Url: http://gitweb.hachti.de/?a=blobdiff_plain;f=pc-tools%2Fldc%2Fldc.c;h=26a469edea560b05f59596d72e2f9ee3fc92a46d;hb=d34afc1e025c289b7454d33504b116a74eb20498;hp=7d67a28bf2a215e0bed2dd5622f902a38cf11118;hpb=437b3ba835f66625031f4711cd0a963be67ccf5a;p=h316.git diff --git a/pc-tools/ldc/ldc.c b/pc-tools/ldc/ldc.c index 7d67a28..26a469e 100644 --- a/pc-tools/ldc/ldc.c +++ b/pc-tools/ldc/ldc.c @@ -6,6 +6,10 @@ #include #include "hw_types.h" #include "hw_helpers.h" +#include "tape.h" +#include "process.h" +#include "split.h" + #define XON 0x11 #define XOFF 0x13 #define CHAR_START 0x81 @@ -16,8 +20,9 @@ #define MAX_BLOCK_SIZE 500 //#define DEBUG -//#define DEBUG_CHECKSUM -//#define DEBUG_STRUCTURE +#define DEBUG_CHECKSUM +#define DEBUG_STRUCTURE +#define DEBUG_COMBINE //#define IGNORE_CHECKSUM #define HARDCORE_DEBUG /********************************************************/ @@ -32,6 +37,9 @@ int inputfd; int ignore = 0; int dosplit = 0; int splitnum = 0; +int silent = 0; +int read_pos = -5; +int block_pos= -5; /********************************************************/ @@ -90,7 +98,7 @@ void errf (char *format, ...) void say (char *string) { - printf ("%s\n", string); + if (!silent) printf ("%s\n", string); } void sayf (char *format, ...) @@ -170,10 +178,9 @@ void combine466 (unsigned char *raw, unsigned char *data) result->tape.low = r3; #ifdef DEBUG_COMBINE - msgf ("combine466 (data) : %s%s%s", bin2str (r1, 4), bin2str (r2, 6), - bin2str (r3, 6)); - msgf ("combine466 (rawmem) : %s%s", bin2str (data[1], 8), - bin2str (data[0], 8)); + msgf ("combine466 (data) : %02x %02x %02x",r1,r2,r3, 6); +// msgf ("combine466 (rawmem) : %s%s", bin2str (data[1], 8), +// bin2str (data[0], 8)); msgf ("combine466 (structure): %s", bin2str (result->value, 16)); #endif } @@ -213,7 +220,8 @@ datablock *get_block() if (tapemode) tapestart (); do { - ret = read (inputfd, buffer, 1); + read_pos+=ret=read (inputfd, buffer, 1); + #ifdef HARDCORE_DEBUG msgf ("READ : (hex)%02x (bin)%s (dec)%3i (oct)%3o", buffer[0], bin2str (buffer[0], 8), buffer[0], buffer[0]); @@ -233,7 +241,8 @@ datablock *get_block() } } while (*buffer != (unsigned char) CHAR_START); - + + block_pos=read_pos; msg ("get_block(): Blockstart erkannt"); // blk_data = (hw16 *) malloc (MAX_BLOCK_SIZE * sizeof (hw16)); @@ -245,6 +254,7 @@ datablock *get_block() do { complete = 0; ret = read (inputfd, buffer + round, 1); + read_pos+=ret; #ifdef HARDCORE_DEBUG static int lochzahl = 0; char *bin = bin2str (buffer[round], 8); @@ -301,12 +311,13 @@ datablock *get_block() if (checksum_error (blk_data, blk_size)) { - err ("get_block(): Checksummenfehler"); + errf ("get_block(): Checksum error!\nBlock start: %i (0x%x), read address %i (0x%x).", + block_pos,block_pos,read_pos,read_pos); #ifdef CHECKSUM_DUMP dump_data (buffer, 3); - read (inputfd, buffer, 3); + read_pos+=read (inputfd, buffer, 3); dump_data (buffer, 3); #endif @@ -348,16 +359,19 @@ int main (int argc, char **args) //msgf ("Action %c, Arg dazu:%s", action, parm); switch (action) { case 'I': - ignore++; + ignore=1; break; case 't': - tapemode++; + tapemode=1; break; case 'S': - splitnum++; + splitnum=1; case 's': - dosplit++; + dosplit=1; break; + case 'l': + silent=1; + break; default: say ("Usage:\n"); sayf ("%s [-t] [-S] [-n] [-I] [filename]", args[0]); @@ -366,6 +380,7 @@ int main (int argc, char **args) sayf (" -S Split library tape into separate numbered files"); sayf (" -s same as -S but no numbering"); sayf (" -I Ignore errors"); + sayf (" -l be silent"); sayf (""); exit (1); break; @@ -402,6 +417,9 @@ int main (int argc, char **args) } datablock *akt_block; + /* Initialize read position */ + read_pos=0; + while (1) { msg ("********************************************************"); msgf ("Block no. %5i", blk_no++);