X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=sect.c;h=21591a0219146b127a7321dbd07dcea4cab0ba1f;hp=f797300395474822bef6688f02c9fabfd8f9846a;hb=9fb8931331db981c04e062a3ad36c0d79acb30ae;hpb=627f87694bf2d7855b8e3cdafe1bf2693f1b60ad diff --git a/sect.c b/sect.c index f797300..21591a0 100644 --- a/sect.c +++ b/sect.c @@ -38,8 +38,9 @@ LONG fchalloc; // # bytes alloc'd to fixup chunk LONG fchsize; // # bytes used in fixup chunk PTR fchptr; // Deposit point in fixup chunk buffer -unsigned fwdjump[MAXFWDJUMPS]; // forward jump check table -unsigned fwindex = 0; // forward jump index +// BOLLOCKS +//unsigned fwdjump[MAXFWDJUMPS]; // forward jump check table +//unsigned fwindex = 0; // forward jump index // Return a size (SIZB, SIZW, SIZL) or 0, depending on what kind of fixup is // associated with a location. @@ -269,6 +270,7 @@ int fixup(WORD attr, LONG loc, TOKEN * fexpr) CHUNK * cp; SECT * p; // Shamus: Expression lengths are voodoo ATM (varibale "i"). Need to fix this. +#warning "!!! fixup() is filled with VOODOO !!!" DEBUG printf("FIXUP@$%X: $%X\n", loc, attr); // Compute length of expression (could be faster); determine if it's the @@ -385,7 +387,9 @@ int ResolveAllFixups(void) ResolveFixups(TEXT); DEBUG printf("Resolving DATA sections...\n"); ResolveFixups(DATA); - + +//No, no we don't. +#if 0 // We need to do a final check of forward 'jump' destination addresses that // are external for(i=0; i 15)) { @@ -796,6 +799,7 @@ DEBUG { printf("ResolveFixups: cfileno=%u\n", cfileno); } case FU_LONG: if ((w & 0x0F00) == FU_MOVEI) { +#if 0 address = loc + 4; if (eattr & DEFINED) @@ -845,27 +849,33 @@ DEBUG { printf("ResolveFixups: cfileno=%u\n", cfileno); } } } } +#endif eval = ((eval >> 16) & 0x0000FFFF) | ((eval << 16) & 0xFFFF0000); - flags = (MLONG|MMOVEI); + flags = (MLONG | MMOVEI); } else flags = MLONG; if (!(eattr & DEFINED)) { +//printf("Fixup (long): Symbol undefined. loc = $%X, long = $%X, flags = $%x\n", loc, eval, flags); rmark(sno, loc, 0, flags, esym); } else if (tdb) { +//printf("Fixup (long): TDB = $%X. loc =$%X, long = $%X, flags = $%x\n", tdb, loc, eval, flags); rmark(sno, loc, tdb, flags, NULL); } +//else +//printf("Fixup (long): TDB = $%X. loc =$%X, long = $%X, flags = $%x\n", tdb, loc, eval, flags); *locp++ = (char)(eval >> 24); *locp++ = (char)(eval >> 16); *locp++ = (char)(eval >> 8); *locp = (char)eval; break; + // Fixup a 3-bit "QUICK" reference in bits 9..1 // (range of 1..8) in a word. Really bits 1..3 in a byte. case FU_QUICK: @@ -880,6 +890,7 @@ DEBUG { printf("ResolveFixups: cfileno=%u\n", cfileno); } *locp |= (eval & 7) << 1; break; + // Fix up 6502 funny branch case FU_6BRA: eval -= (loc + 1); @@ -889,6 +900,7 @@ DEBUG { printf("ResolveFixups: cfileno=%u\n", cfileno); } *locp = (char)eval; break; + default: interror(4); // Bad fixup type // NOTREACHED @@ -904,3 +916,4 @@ range: return 0; } +