]> git.sur5r.net Git - cc65/commitdiff
New default for start address
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 18 Aug 2003 20:36:38 +0000 (20:36 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 18 Aug 2003 20:36:38 +0000 (20:36 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@2366 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/da65/code.c
src/da65/code.h
src/da65/global.c
src/da65/global.h
src/da65/main.c

index 210bb26e9a17d2f2bb23d3ba288a7c6c87ab414e..72246b387fa0ea02cc4aa335b03b3126cc471880 100644 (file)
@@ -6,10 +6,10 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 2000      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
+/* (C) 2000-2003 Ullrich von Bassewitz                                       */
+/*               Römerstrasse 52                                             */
+/*               D-70794 Filderstadt                                         */
+/* EMail:        uz@cc65.org                                                 */
 /*                                                                           */
 /*                                                                           */
 /* This software is provided 'as-is', without any expressed or implied       */
@@ -41,8 +41,9 @@
 #include "check.h"
 
 /* da65 */
-#include "error.h"
 #include "code.h"
+#include "error.h"
+#include "global.h"
 
 
 
@@ -65,53 +66,65 @@ unsigned long PC;                   /* Current PC */
 
 
 
-void LoadCode (const char* Name, unsigned long StartAddress)
+void LoadCode (void)
 /* Load the code from the given file */
 {
     long Count, MaxCount, Size;
     FILE* F;
 
 
-    PRECONDITION (StartAddress < 0x10000);
-
-    /* Calculate the maximum code size */
-    MaxCount = 0x10000 - StartAddress;
+    PRECONDITION (StartAddr < 0x10000);
 
     /* Open the file */
-    F = fopen (Name, "rb");
+    F = fopen (InFile, "rb");
     if (F == 0) {
-       Error ("Cannot open `%s': %s", Name, strerror (errno));
+       Error ("Cannot open `%s': %s", InFile, strerror (errno));
     }
 
     /* Seek to the end to get the size of the file */
     if (fseek (F, 0, SEEK_END) != 0) {
-       Error ("Cannot seek on file `%s': %s", Name, strerror (errno));
+       Error ("Cannot seek on file `%s': %s", InFile, strerror (errno));
     }
     Size = ftell (F);
     rewind (F);
 
+    /* If the start address was not given, set it so that the code loads to
+     * 0x10000 - Size. This is a reasonable default assuming that the file
+     * is a ROM that contains the hardware vectors at $FFFA.
+     */
+    if (StartAddr < 0) {
+       if (Size > 0x10000) {
+           StartAddr = 0;
+       } else {
+           StartAddr = 0x10000 - Size;
+       }
+    }
+
+    /* Calculate the maximum code size */
+    MaxCount = 0x10000 - StartAddr;
+
     /* Check if the size is larger than what we can read */
     if (Size == 0) {
-       Error ("File `%s' contains no data", Name);
+               Error ("File `%s' contains no data", InFile);
     }
     if (Size > MaxCount) {
-       Warning ("File `%s' is too large, ignoring %ld bytes",
-                Name, Size - MaxCount);
+               Warning ("File `%s' is too large, ignoring %ld bytes",
+                        InFile, Size - MaxCount);
     } else if (MaxCount > Size) {
-       MaxCount = (unsigned) Size;
+               MaxCount = (unsigned) Size;
     }
 
     /* Read from the file and remember the number of bytes read */
-    Count = fread (CodeBuf + StartAddress, 1, MaxCount, F);
+    Count = fread (CodeBuf + StartAddr, 1, MaxCount, F);
     if (ferror (F) || Count != MaxCount) {
-       Error ("Error reading from `%s': %s", Name, strerror (errno));
+       Error ("Error reading from `%s': %s", InFile, strerror (errno));
     }
 
     /* Close the file */
     fclose (F);
 
     /* Set the buffer variables */
-    CodeStart = PC = StartAddress;
+    CodeStart = PC = StartAddr;
     CodeEnd = CodeStart + Count - 1;   /* CodeEnd is inclusive */
 }
 
index 22cb7b23b1f4c36f8bc61acb33a53a0ed7aec6f4..3a1536437291a40a0a1eb3689001a76adad1c331 100644 (file)
@@ -6,10 +6,10 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 2000      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
+/* (C) 2000-2003 Ullrich von Bassewitz                                       */
+/*               Römerstrasse 52                                             */
+/*               D-70794 Filderstadt                                         */
+/* EMail:        uz@cc65.org                                                 */
 /*                                                                           */
 /*                                                                           */
 /* This software is provided 'as-is', without any expressed or implied       */
@@ -57,7 +57,7 @@ extern unsigned long PC;                      /* Current PC */
 
 
 
-void LoadCode (const char* Name, unsigned long StartAddress);
+void LoadCode (void);
 /* Load the code from the given file */
 
 unsigned char GetCodeByte (unsigned Addr);
index 04c4c68e1c088123117025d9f499f45328a998e2..32d24738b2f10697fa8b0476130e9933c4b09ac8 100644 (file)
@@ -55,7 +55,7 @@ const char CfgExt[]                 = ".cfg"; /* Config file extension */
 unsigned char DebugInfo       = 0;      /* Add debug info to the object file */
 unsigned char FormFeeds              = 0;      /* Add form feeds to the output? */
 unsigned char PassCount              = 2;      /* How many passed do we do? */
-unsigned long StartAddr              = 0xC000; /* Start/load address of the program */
+long         StartAddr       = -1;     /* Start/load address of the program */
 
 /* Stuff needed by many routines */
 unsigned char Pass           = 0;      /* Disassembler pass */
index 73af8d4a6c799f6e2ecf2e5bf46bfdad29eeba1e..2e8be8a5757b5ba02ae3d275715554530c698d22 100644 (file)
@@ -56,7 +56,7 @@ extern const char     CfgExt[];       /* Config file extension */
 extern unsigned char    DebugInfo;      /* Add debug info to the object file */
 extern unsigned char   FormFeeds;      /* Add form feeds to the output? */
 extern unsigned char   PassCount;      /* How many passed do we do? */
-extern unsigned long   StartAddr;      /* Start/load address of the program */
+extern long                    StartAddr;      /* Start/load address of the program */
 
 
 /* Stuff needed by many routines */
index 0a4192b9bd67f0239e11bc37bcfc9e78ac86585a..d4623216ecd10e46b3688436c6a41f4480011737 100644 (file)
@@ -424,7 +424,7 @@ int main (int argc, char* argv [])
     }
 
     /* Load the input file */
-    LoadCode (InFile, StartAddr);
+    LoadCode ();
 
     /* Open the output file */
     OpenOutput (OutFile);