Fixed a bug where words weren't being written to 'memory' correctly.

This commit is contained in:
2023-06-24 18:00:13 -05:00
parent 980b0449fc
commit 2918f2964d
+5 -10
View File
@@ -115,7 +115,9 @@ void WriteByte(unsigned char byte) {
} }
void WriteWord(unsigned short word) { void WriteWord(unsigned short word) {
mem[PC2] = word; mem[PC2] = (word >> 8) & 0xFF;
mem[PC2 + 1] = word & 0xFF;
PC2 += 2;
} }
unsigned short GetValueFromToken(Token* token) { unsigned short GetValueFromToken(Token* token) {
@@ -124,7 +126,7 @@ unsigned short GetValueFromToken(Token* token) {
if (TryGetSymbol(token->Lemexe, Symbols, &symbol)) { if (TryGetSymbol(token->Lemexe, Symbols, &symbol)) {
printf("Returning %d for address of %s.\n", symbol->Address, symbol->Name); printf("Returning %d for address of %s.\n", symbol->Address, symbol->Name);
return symbol->Address; return 0xABCD;//symbol->Address;
} }
else { else {
fprintf(stderr, "Failed to find symbol %s while assembling.\n", token->Lemexe); fprintf(stderr, "Failed to find symbol %s while assembling.\n", token->Lemexe);
@@ -154,7 +156,6 @@ void assemble() {
WriteByte(current->Value.Mnemonic | ((Token*) LIST->content[CurrentIndex])->Value.Register); WriteByte(current->Value.Mnemonic | ((Token*) LIST->content[CurrentIndex])->Value.Register);
CurrentIndex++; CurrentIndex++;
WriteWord(GetValueFromToken(LIST->content[CurrentIndex])); WriteWord(GetValueFromToken(LIST->content[CurrentIndex]));
PC2 += 2;
break; break;
case COPYRA: case COPYRA:
case COPYRAB: case COPYRAB:
@@ -173,15 +174,13 @@ void assemble() {
WriteByte(current->Value.Mnemonic | ((Token*) LIST->content[CurrentIndex])->Value.Register); WriteByte(current->Value.Mnemonic | ((Token*) LIST->content[CurrentIndex])->Value.Register);
CurrentIndex++; CurrentIndex++;
WriteWord(GetValueFromToken(LIST->content[CurrentIndex])); WriteWord(GetValueFromToken(LIST->content[CurrentIndex]));
PC2 += 2;
break; break;
case COPYB: case COPYB:
CurrentIndex++; CurrentIndex++;
WriteByte(current->Value.Mnemonic | ((Token*) LIST->content[CurrentIndex])->Value.Register); WriteByte(current->Value.Mnemonic | ((Token*) LIST->content[CurrentIndex])->Value.Register);
CurrentIndex++; CurrentIndex++;
WriteWord((unsigned char)GetValueFromToken(LIST->content[CurrentIndex])); WriteByte((unsigned char)GetValueFromToken(LIST->content[CurrentIndex]));
PC2 += 1;
break; break;
case CMP: case CMP:
CurrentIndex++; CurrentIndex++;
@@ -196,7 +195,6 @@ void assemble() {
WriteByte(current->Value.Mnemonic | ((Token*) LIST->content[CurrentIndex])->Value.Register); WriteByte(current->Value.Mnemonic | ((Token*) LIST->content[CurrentIndex])->Value.Register);
CurrentIndex++; CurrentIndex++;
WriteWord(GetValueFromToken(LIST->content[CurrentIndex])); WriteWord(GetValueFromToken(LIST->content[CurrentIndex]));
PC2 += 2;
break; break;
case ADD: case ADD:
case SUB: case SUB:
@@ -216,7 +214,6 @@ void assemble() {
WriteByte(current->Value.Mnemonic | ((Token*) LIST->content[CurrentIndex])->Value.Register); WriteByte(current->Value.Mnemonic | ((Token*) LIST->content[CurrentIndex])->Value.Register);
CurrentIndex++; CurrentIndex++;
WriteWord(GetValueFromToken(LIST->content[CurrentIndex])); WriteWord(GetValueFromToken(LIST->content[CurrentIndex]));
PC2 += 2;
break; break;
case INC: case INC:
case DEC: case DEC:
@@ -234,7 +231,6 @@ void assemble() {
WriteByte(current->Value.Mnemonic); WriteByte(current->Value.Mnemonic);
CurrentIndex++; CurrentIndex++;
WriteWord(GetValueFromToken(LIST->content[CurrentIndex])); WriteWord(GetValueFromToken(LIST->content[CurrentIndex]));
PC2 += 2;
break; break;
case NOP: case NOP:
case RET: case RET:
@@ -244,7 +240,6 @@ void assemble() {
WriteByte(current->Value.Mnemonic); WriteByte(current->Value.Mnemonic);
CurrentIndex++; CurrentIndex++;
WriteWord(GetValueFromToken(LIST->content[CurrentIndex])); WriteWord(GetValueFromToken(LIST->content[CurrentIndex]));
PC2 += 2;
default: default:
break; break;
} }