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 endian; // Host processor endianess
char * objfname; // Object filename pointer
char * firstfname; // First source filename
}
+#if 0
//
// Allocate memory; Panic and Quit if we Run Out
//
{
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;
}
}
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);
}
return p;
}
+#endif
//
orgwarning = 0; // No ORG warning issued
a_amount = 0;
segpadsize = 2; // Initialise segment padding size
- 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; argno<argc; ++argno)
{
if (*argv[argno] == '-')
{
if (sy == NULL)
{
- sy = newsym(argv[argno] + 2, LABEL, 0);
+ sy = NewSymbol(argv[argno] + 2, LABEL, 0);
sy->svalue = 0;
}
break;
default:
printf("-f: unknown object format specified\n");
- ++errcnt;
+ errcnt++;
return errcnt;
}
break;
list_fname = argv[argno] + 2;
listing = 1;
list_flag = 1;
- ++lnsave;
+ lnsave++;
break;
case 'o': // Direct object file output
case 'O':
if (++argno >= argc)
{
printf("Missing argument to -o");
- ++errcnt;
+ errcnt++;
return errcnt;
}
objfname = argv[argno];
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;
}
}
if (fd < 0)
{
printf("Cannot open: %s\n", fnbuf);
- ++errcnt;
+ errcnt++;
continue;
}
include(fd, fnbuf);
- assemble();
+ Assemble();
}
}
// (`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)
{
//
int main(int argc, char ** argv)
{
- int status;
- int i;
-
perm_verb_flag = 0; // Clobber "permanent" verbose flag
cmdlnexec = argv[0]; // Obtain executable name
endian = get_endianess(); // Get processor endianess
- for(i=0; i<MAXFWDJUMPS; i++)
- fwdjump[i] = 0;
-
- // Full command line passed
+ // If commands were passed in, process them
if (argc > 1)
{
- status = process(argc - 1, argv + 1);
- }
- else
- {
- display_version();
- display_help();
+ return process(argc - 1, argv + 1);
}
- return status;
+ display_version();
+ display_help();
+
+ return 0;
}