Got the start of encoding opcodes.
This commit is contained in:
+32
-7
@@ -74,11 +74,11 @@ void ParseTokens(List* tokens) {
|
||||
|
||||
PrintSymbols();
|
||||
DestroyList(SymbolsTable);
|
||||
// for(int i = 0; i < 256; i++) {
|
||||
// if (i != 0 && i % 80 == 0) printf("\n");
|
||||
// printf("%02X ", Memory[i] & 0xFF);
|
||||
// }
|
||||
// printf("\n");
|
||||
for(int i = 0; i < 32; i++) {
|
||||
if (i != 0 && i % 3 == 0) printf("\n");
|
||||
printf("%02X ", Memory[i] & 0xFF);
|
||||
}
|
||||
printf("\n");
|
||||
// printf("Program Counter: %d\n", ProgramCounter);
|
||||
//printf("Heap Top: %#06X\n", HeapTop);
|
||||
}
|
||||
@@ -132,6 +132,9 @@ void HandleAssemblerDirective(void) {
|
||||
}
|
||||
}
|
||||
|
||||
//REG XXX0 0XXX
|
||||
//Constant XXX0 1XXX
|
||||
//Address XXX1 0XXX
|
||||
void HandleOperation(void) {
|
||||
const Instruction* inst = GetOpcodeDetails(PeekToken()->type);
|
||||
|
||||
@@ -141,6 +144,8 @@ void HandleOperation(void) {
|
||||
|
||||
printf("[%#05X] %s ", ProgramCounter, inst->lexeme);
|
||||
|
||||
Memory[ProgramCounter] |= GetInstructionMask(inst->op, inst->parameter_one);
|
||||
|
||||
ProgramCounter++;
|
||||
|
||||
if (inst->parameter_one == None) {
|
||||
@@ -153,6 +158,7 @@ void HandleOperation(void) {
|
||||
|
||||
if (inst->parameter_one & Reg) {
|
||||
//Encode the register number here.
|
||||
Memory[ProgramCounter - 1] |= PeekToken()->type - 29;
|
||||
printf("%s ", PeekToken()->lexeme);
|
||||
}
|
||||
else if (inst->parameter_one & Address || inst->parameter_one & Constant) {
|
||||
@@ -164,9 +170,16 @@ void HandleOperation(void) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
Memory[ProgramCounter - 1] |= 0x10;//0b00010000;
|
||||
Memory[ProgramCounter] = 2 >> symbol->address & 0xFF;
|
||||
Memory[ProgramCounter + 1] = symbol->address & 0xFF;
|
||||
|
||||
printf("[%s@%#04X] ", PeekToken()->lexeme, symbol->address);
|
||||
}
|
||||
else if (PeekToken()->type == NUMBER) printf("%s ", PeekToken()->lexeme);
|
||||
else if (PeekToken()->type == NUMBER) {
|
||||
Memory[ProgramCounter - 1] |= 0x08; //0b00001000;
|
||||
printf("%s ", PeekToken()->lexeme);
|
||||
}
|
||||
|
||||
ProgramCounter += 2;
|
||||
}
|
||||
@@ -198,9 +211,21 @@ void HandleOperation(void) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
Memory[ProgramCounter - 1] |= 0x10;//0b00010000;
|
||||
Memory[ProgramCounter] = 2 >> symbol->address & 0xFF;
|
||||
Memory[ProgramCounter + 1] = symbol->address & 0xFF;
|
||||
|
||||
printf("[%s@%#04X] ", PeekToken()->lexeme, symbol->address);
|
||||
}
|
||||
else if (PeekToken()->type == NUMBER) printf("%s ", PeekToken()->lexeme);
|
||||
else if (PeekToken()->type == NUMBER) {
|
||||
Memory[ProgramCounter - 1] |= 0x08; //0b00001000;
|
||||
int* value = PeekToken()->value;
|
||||
|
||||
Memory[ProgramCounter] = 2 >> *value &0xFF;
|
||||
Memory[ProgramCounter + 1] = *value &0xFF;
|
||||
|
||||
printf("%s ", PeekToken()->lexeme);
|
||||
}
|
||||
|
||||
ProgramCounter += 2;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user