Take BSS into account (like done for Apple GEOS in the first place).

git-svn-id: svn://svn.cc65.org/cc65/trunk@5563 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
ol.sc
2012-02-27 19:37:32 +00:00
parent e4aab75bb0
commit 5817cf1476

View File

@@ -164,7 +164,7 @@ static void OptTarget (const char* Opt attribute ((unused)), const char* Arg)
static void OptVersion (const char* Opt attribute ((unused)), static void OptVersion (const char* Opt attribute ((unused)),
const char* Arg attribute ((unused))) const char* Arg attribute ((unused)))
/* Print the assembler version */ /* Print the program version */
{ {
fprintf (stderr, fprintf (stderr,
"grc65 V%s - (C) Copyright, Maciej 'YTM/Elysium' Witkowiak\n", "grc65 V%s - (C) Copyright, Maciej 'YTM/Elysium' Witkowiak\n",
@@ -266,7 +266,7 @@ static void fillOut (char *name, int len, char *filler)
{ {
int a; int a;
setLen(name, len); setLen (name, len);
fprintf (outputSFile, "\t.byte \"%s\"\n", name); fprintf (outputSFile, "\t.byte \"%s\"\n", name);
a = strlen (name); a = strlen (name);
@@ -319,7 +319,7 @@ static void DoMenu (void)
myMenu.top = atoi (nextWord ()); myMenu.top = atoi (nextWord ());
myMenu.type = nextWord (); myMenu.type = nextWord ();
if (strcmp(nextWord (), "{") != 0) { if (strcmp (nextWord (), "{") != 0) {
AbEnd ("Menu '%s' description has no opening bracket!", myMenu.name); AbEnd ("Menu '%s' description has no opening bracket!", myMenu.name);
} }
curItem = xmalloc (sizeof(struct menuitem)); curItem = xmalloc (sizeof(struct menuitem));
@@ -328,13 +328,13 @@ static void DoMenu (void)
for (;;) { for (;;) {
token = nextWord (); token = nextWord ();
if (strcmp (token, "}") == 0) break; if (strcmp (token, "}") == 0) break;
if (token[strlen(token) - 1] != '"') { if (token[strlen (token) - 1] != '"') {
strcpy (namebuff, token); strcpy (namebuff, token);
do { do {
token = nextWord (); token = nextWord ();
strcat (namebuff, " "); strcat (namebuff, " ");
strcat (namebuff, token); strcat (namebuff, token);
} while (token[strlen(token) - 1] != '"'); } while (token[strlen (token) - 1] != '"');
token = xmalloc (strlen (namebuff)); token = xmalloc (strlen (namebuff));
strcpy (token, namebuff); strcpy (token, namebuff);
} }
@@ -430,7 +430,7 @@ static void DoHeader (void)
token = nextWord (); token = nextWord ();
i = findToken(hdrFTypes, token); i = findToken (hdrFTypes, token);
if (apple == 1) { if (apple == 1) {
switch (i) { switch (i) {
@@ -674,11 +674,11 @@ static void DoMemory (void)
stacksize = -1; stacksize = -1;
overlaysize = -1; overlaysize = -1;
memset (overlaytable, 0, sizeof(overlaytable)); memset (overlaytable, 0, sizeof (overlaytable));
lastnumber = -1; lastnumber = -1;
backbuffer = -1; backbuffer = -1;
if (strcmp(nextWord (), "{") != 0) { if (strcmp (nextWord (), "{") != 0) {
AbEnd ("MEMORY description has no opening bracket!"); AbEnd ("MEMORY description has no opening bracket!");
} }
@@ -785,8 +785,8 @@ static void DoMemory (void)
for (number = 0; number <= lastnumber; number++) { for (number = 0; number <= lastnumber; number++) {
if (overlaytable[number] == 1) { if (overlaytable[number] == 1) {
fprintf (outputSFile, fprintf (outputSFile,
"\t.import __VLIR%i_START__, __VLIR%i_LAST__\n", "\t.import __VLIR%i_START__, __VLIR%i_LAST__%s\n",
number, number); number, number, number == 0 ? ", __BSS_SIZE__" : "");
} }
} }
fprintf (outputSFile, fprintf (outputSFile,
@@ -795,9 +795,10 @@ static void DoMemory (void)
for (number = 0; number <= lastnumber; number++) { for (number = 0; number <= lastnumber; number++) {
if (overlaytable[number] == 1) { if (overlaytable[number] == 1) {
fprintf (outputSFile, fprintf (outputSFile,
"\t.byte .lobyte ((__VLIR%i_LAST__ - __VLIR%i_START__ - 1) / 254) + 1\n" "\t.byte .lobyte ((__VLIR%i_LAST__ - __VLIR%i_START__%s - 1) / 254) + 1\n"
"\t.byte .lobyte ((__VLIR%i_LAST__ - __VLIR%i_START__ - 1) .MOD 254) + 2\n", "\t.byte .lobyte ((__VLIR%i_LAST__ - __VLIR%i_START__%s - 1) .MOD 254) + 2\n",
number, number, number, number); number, number, number == 0 ? " - __BSS_SIZE__" : "",
number, number, number == 0 ? " - __BSS_SIZE__" : "");
} else { } else {
fprintf (outputSFile, fprintf (outputSFile,
"\t.byte $00\n" "\t.byte $00\n"