Some refactoring to update everything to use the new structures and some new considerations for how Symbols and Instructions shoudl be represented.
This commit is contained in:
+17
-12
@@ -10,7 +10,7 @@ int CurrentToken = 0;
|
||||
//int HeapStart = 4; // zero indexed, used for declared variables.
|
||||
//int BinaryEnd = 4; // Zero indexed (binary starts with a 4 byte header)
|
||||
|
||||
IROpcode* CreateIROpcode(Mnemonic mnemonic);
|
||||
//IROpcode* CreateIROpcode(Mnemonic mnemonic);
|
||||
void PrintSymbols(void);
|
||||
void HandleOperation(void);
|
||||
void HandleAssemblerDirective(void);
|
||||
@@ -19,8 +19,8 @@ Token* PeekToken(void);
|
||||
int ParserAtEnd(void);
|
||||
int Expect(int, ...);
|
||||
//List* SymbolsTable;
|
||||
unsigned int HeapTop = 4;
|
||||
unsigned int ProgramCounter = 0;
|
||||
// unsigned int HeapTop = 4;
|
||||
// unsigned int ProgramCounter = 0;
|
||||
// unsigned char Heap[HIGHMEMORY];
|
||||
// unsigned char Memory[HIGHMEMORY];
|
||||
IRState MachineState;
|
||||
@@ -34,7 +34,7 @@ IRState* ParseTokens(List* tokens) {
|
||||
TokensList = tokens;
|
||||
|
||||
MachineState.SymbolsTable = CreateSymbolTable();
|
||||
MachineState.Opcodes = CreateList();
|
||||
MachineState.Instructions = CreateList();
|
||||
|
||||
while(!ParserAtEnd()) {
|
||||
Token* t = PeekToken();
|
||||
@@ -48,7 +48,8 @@ IRState* ParseTokens(List* tokens) {
|
||||
break;
|
||||
case LabelClass:
|
||||
printf("%s: \n", t->Lemexe);
|
||||
AddSymbol(t, 2, ProgramCounter, 1);
|
||||
AddSymbolToTable(t->Lemexe, NULL, strlen(t->Lemexe), MachineState.SymbolsTable);
|
||||
//AddSymbol(t, 2, ProgramCounter, 1);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -105,7 +106,7 @@ void HandleAssemblerDirective(void) {
|
||||
// }
|
||||
|
||||
//ProgramCounter += strlen(PeekToken()->lexeme);
|
||||
HeapTop += strlen(identifier->Lemexe);
|
||||
//HeapTop += strlen(identifier->Lemexe);
|
||||
symbol->Length = strlen(identifier->Lemexe);
|
||||
|
||||
AdvanceParser();
|
||||
@@ -124,7 +125,7 @@ void HandleAssemblerDirective(void) {
|
||||
// identifier->value = identifier->lexeme;
|
||||
// identifier->lexeme[oldLength + 1] = '\0';//*PeekToken()->lexeme & 0x0F;
|
||||
symbol->Length++; //Basically, read in the NULL byte at the end of the string.
|
||||
HeapTop++;
|
||||
//HeapTop++;
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -140,11 +141,11 @@ void HandleAssemblerDirective(void) {
|
||||
void HandleRegisterBasedOpcode(unsigned char mask) {
|
||||
//Memory[ProgramCounter] = mask;
|
||||
|
||||
ProgramCounter++;
|
||||
//ProgramCounter++;
|
||||
|
||||
Token* token = PeekToken();
|
||||
|
||||
IROpcode* opcode = CreateIROpcode(token->Value.Mnemonic);
|
||||
Instruction* opcode = CreateInstruction(token->Value.Mnemonic); //CreateIROpcode(token->Value.Mnemonic);
|
||||
|
||||
AdvanceParser();
|
||||
|
||||
@@ -152,15 +153,19 @@ void HandleRegisterBasedOpcode(unsigned char mask) {
|
||||
|
||||
if (token->Class == RegisterClass) {
|
||||
//Memory[ProgramCounter - 1] |= (PeekToken()->type - R1) & 0x07;
|
||||
opcode->ParameterOneType = RegisterClass;
|
||||
opcode->ParameterOneType = RegisterParameter;
|
||||
AdvanceParser();
|
||||
}
|
||||
else if (token->Class & AddressClass && token->Value.Mnemonic == COPY) {
|
||||
//opcode->ParameterOneType = Address;
|
||||
|
||||
Symbol* symbol = GetSymbol(token->Lemexe);
|
||||
Symbol* symbol = TryGetSymbol(token->Lemexe, MachineState.SymbolsTable); //GetSymbol(token->Lemexe);
|
||||
|
||||
if (!symbol) opcode->ParameterOne.Address = AddSymbol(token, 2, 0, 0);
|
||||
if (!symbol) {
|
||||
opcode->ParameterOneType = AddressParameter;
|
||||
//AddSymbol(token, 2, 0, 0);
|
||||
opcode->ParameterOne.Symbol = AddSymbolToTable(token->Lemexe, NULL, strlen(token->Lemexe), MachineState.SymbolsTable);
|
||||
}
|
||||
else opcode->ParameterOne.Address = symbol;//CreateSymbol(token, symbol->address, symbol->resolved);
|
||||
}
|
||||
else {
|
||||
|
||||
Reference in New Issue
Block a user