X-Git-Url: http://gitweb.hachti.de/?a=blobdiff_plain;f=pc-tools%2Fldc%2Fldc.c;h=26a469edea560b05f59596d72e2f9ee3fc92a46d;hb=d34afc1e025c289b7454d33504b116a74eb20498;hp=ae9ee517320bc323bb4ebb095dfdf945600cd67d;hpb=77ce3d6adf5a51792f1a11593e7156ee226ee9e1;p=h316.git diff --git a/pc-tools/ldc/ldc.c b/pc-tools/ldc/ldc.c index ae9ee51..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 /********************************************************/ @@ -33,6 +38,8 @@ int ignore = 0; int dosplit = 0; int splitnum = 0; int silent = 0; +int read_pos = -5; +int block_pos= -5; /********************************************************/ @@ -171,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 } @@ -214,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]); @@ -234,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)); @@ -246,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); @@ -302,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 @@ -407,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++);