Fixed up the RemoveCurrentToken function which was causing all sorts of bugs, and added the ability to delcare a data byte, '.db', to have a variable's address as a value. This will be needed for building up an interrupt table at least with the version I have in mind.

This commit is contained in:
2023-04-04 22:14:17 -05:00
parent c3d12da54a
commit aa3888b578
2 changed files with 13 additions and 6 deletions
+4 -1
View File
@@ -1,4 +1,5 @@
;.include "./another_test.asm"
.db labelsz reference
.db video_start 0xF37F
.db msg "Hello, world!", 0
.db NOTERM "No terminating byte here"
@@ -9,11 +10,13 @@ something_insance:
load r1, unknown_symbol
load byte r1, r3
load r1, 5
.db fun_alright 0x70
load r3, r4
store byte r3, r5
store r5, r7
cmp r1, r4
unknown_symbol:
cmp r1, 5
cmp r1, r2
and r1, r2
add r4, r7
inc r1 ;increment r1
+9 -5
View File
@@ -67,8 +67,8 @@ IRState* ParseTokens(List* tokens) {
}
break;
default:
//fprintf(stderr, "[Warning] Line %d: Syntax error, expected start of expression, got '%c' [%d].\n", t->LineNumber, t->Value.Punctuation, t->Class);
//exit(1);
fprintf(stderr, "[Warning] Line %d: Syntax error, expected start of expression, got '%c' [%d].\n", t->LineNumber, t->Value.Punctuation, t->Class);
exit(1);
//IgnoreParserLine();
break;
}
@@ -99,6 +99,11 @@ void HandleAssemblerDirective() {
ExpectLineEndOrFileEnd(RemoveExpected);
}
else if (PeekToken()->Class == IdentifierClass) {
symbol = ExpectIdentifier(0, RemoveExpected);
ExpectLineEndOrFileEnd(RemoveExpected);
}
HeapSize += symbol->Length;
}
@@ -149,7 +154,7 @@ void HandleAssemblerDirective() {
exit(3);
}
RemoveCurrentToken(); AdvanceParser(); //byte
RemoveCurrentToken(); //byte
ExpectRegister();
@@ -186,7 +191,6 @@ void HandleAssemblerDirective() {
}
RemoveCurrentToken(); //Remove byte modifier token.
AdvanceParser();
directive->Value.Mnemonic = STOB;
directive->Class = MnemonicClass;
@@ -473,5 +477,5 @@ void IgnoreParserLine(void) {
void RemoveCurrentToken(void) {
RemoveItem(CurrentToken, TokensList);
if (CurrentToken > 0) CurrentToken--;
//if (CurrentToken > 0) CurrentToken--;
}