ldc: Small fixes (includes, less warnings etc.)
[h316.git] / pc-tools / ldc / ldc.c
index ae9ee517320bc323bb4ebb095dfdf945600cd67d..26a469edea560b05f59596d72e2f9ee3fc92a46d 100644 (file)
@@ -6,6 +6,10 @@
 #include <sys/select.h>
 #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++);