X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=rmac.c;h=9d7522d93eea7e7eb50d90606790acd8b4958e8d;hp=3cc24f4e3ee74dc80416735311ede284c72cb74d;hb=295836a17362d5f57e171018fb6658f845f419e8;hpb=3385b366632d03745033fa6b19faabf60219bc6b diff --git a/rmac.c b/rmac.c index 3cc24f4..9d7522d 100644 --- a/rmac.c +++ b/rmac.c @@ -37,7 +37,7 @@ int rgpu, rdsp; // Assembling Jaguar GPU or DSP code int list_fd; // File to write listing to int regbank; // RISC register bank int segpadsize; // Segment padding size -int in_main; // In main memory flag for GPUMAIN +//int in_main; // In main memory flag for GPUMAIN int endian; // Host processor endianess char * objfname; // Object filename pointer char * firstfname; // First source filename @@ -308,14 +308,16 @@ char * amem(LONG amount) { char * p; - if (amount & 1) // Keep word alignment - ++amount; +// if (amount & 1) // Keep word alignment +// amount++; + amount = (amount + 1) & ~(0x01); // Keep word alignment + // Honor *small* request (< 64 bytes) if (amount < A_THRESH) - { // Honor *small* request + { if (a_amount < amount) { - a_ptr = amem(A_AMOUNT); + a_ptr = amem(A_AMOUNT); // Allocate 4K bytes a_amount = A_AMOUNT; } @@ -325,11 +327,11 @@ char * amem(LONG amount) } else { - amemtot += amount; // Bump total alloc - p = (char *)malloc(amount); // Get memory from malloc + amemtot += amount; // Bump total alloc + p = (char *)malloc(amount); // Get memory from malloc - if ((LONG)p == (LONG)NULL) - fatal("memory exhausted"); + if (p == NULL) + fatal("Memory exhausted!"); memset(p, 0, amount); } @@ -558,20 +560,20 @@ int process(int argc, char ** argv) orgwarning = 0; // No ORG warning issued a_amount = 0; segpadsize = 2; // Initialise segment padding size - in_main = 0; +// in_main = 0; // Initialise modules - init_sym(); // Symbol table + InitSymbolTable(); // Symbol table init_token(); // Tokenizer init_procln(); // Line processor init_expr(); // Expression analyzer init_sect(); // Section manager / code generator init_mark(); // Mark tape-recorder - init_macro(); // Macro processor + InitMacro(); // Macro processor init_list(); // Listing generator // Process command line arguments and assemble source files - for(argno = 0; argno < argc; ++argno) + for(argno=0; argnosvalue = 0; } @@ -626,7 +628,7 @@ int process(int argc, char ** argv) break; default: printf("-f: unknown object format specified\n"); - ++errcnt; + errcnt++; return errcnt; } break; @@ -643,7 +645,7 @@ int process(int argc, char ** argv) list_fname = argv[argno] + 2; listing = 1; list_flag = 1; - ++lnsave; + lnsave++; break; case 'o': // Direct object file output case 'O': @@ -654,7 +656,7 @@ int process(int argc, char ** argv) if (++argno >= argc) { printf("Missing argument to -o"); - ++errcnt; + errcnt++; return errcnt; } objfname = argv[argno]; @@ -711,20 +713,20 @@ int process(int argc, char ** argv) firstfname = defname; include(0, "(stdin)"); - assemble(); + Assemble(); break; case 'h': // Display command line usage case 'H': case '?': display_version(); display_help(); - ++errcnt; + errcnt++; break; default: display_version(); printf("Unknown switch: %s\n\n", argv[argno]); display_help(); - ++errcnt; + errcnt++; break; } } @@ -741,12 +743,12 @@ int process(int argc, char ** argv) if (fd < 0) { printf("Cannot open: %s\n", fnbuf); - ++errcnt; + errcnt++; continue; } include(fd, fnbuf); - assemble(); + Assemble(); } } @@ -791,8 +793,8 @@ int process(int argc, char ** argv) // (`lo68' format, extended (postfix) format....) // (2) generate the output file image and symbol table; // (3) generate relocation information from left-over fixups. - fixups(); // Do all fixups - stopmark(); // Stop mark tape-recorder + ResolveAllFixups(); // Do all fixups + stopmark(); // Stop mark tape-recorder if (errcnt == 0) {