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:
+4
-1
@@ -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
@@ -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--;
|
||||
}
|
||||
Reference in New Issue
Block a user