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"
|
;.include "./another_test.asm"
|
||||||
|
.db labelsz reference
|
||||||
.db video_start 0xF37F
|
.db video_start 0xF37F
|
||||||
.db msg "Hello, world!", 0
|
.db msg "Hello, world!", 0
|
||||||
.db NOTERM "No terminating byte here"
|
.db NOTERM "No terminating byte here"
|
||||||
@@ -9,11 +10,13 @@ something_insance:
|
|||||||
load r1, unknown_symbol
|
load r1, unknown_symbol
|
||||||
load byte r1, r3
|
load byte r1, r3
|
||||||
load r1, 5
|
load r1, 5
|
||||||
|
.db fun_alright 0x70
|
||||||
load r3, r4
|
load r3, r4
|
||||||
store byte r3, r5
|
store byte r3, r5
|
||||||
store r5, r7
|
store r5, r7
|
||||||
cmp r1, r4
|
unknown_symbol:
|
||||||
cmp r1, 5
|
cmp r1, 5
|
||||||
|
cmp r1, r2
|
||||||
and r1, r2
|
and r1, r2
|
||||||
add r4, r7
|
add r4, r7
|
||||||
inc r1 ;increment r1
|
inc r1 ;increment r1
|
||||||
|
|||||||
+9
-5
@@ -67,8 +67,8 @@ IRState* ParseTokens(List* tokens) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
//fprintf(stderr, "[Warning] Line %d: Syntax error, expected start of expression, got '%c' [%d].\n", t->LineNumber, t->Value.Punctuation, t->Class);
|
fprintf(stderr, "[Warning] Line %d: Syntax error, expected start of expression, got '%c' [%d].\n", t->LineNumber, t->Value.Punctuation, t->Class);
|
||||||
//exit(1);
|
exit(1);
|
||||||
//IgnoreParserLine();
|
//IgnoreParserLine();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -99,6 +99,11 @@ void HandleAssemblerDirective() {
|
|||||||
|
|
||||||
ExpectLineEndOrFileEnd(RemoveExpected);
|
ExpectLineEndOrFileEnd(RemoveExpected);
|
||||||
}
|
}
|
||||||
|
else if (PeekToken()->Class == IdentifierClass) {
|
||||||
|
symbol = ExpectIdentifier(0, RemoveExpected);
|
||||||
|
|
||||||
|
ExpectLineEndOrFileEnd(RemoveExpected);
|
||||||
|
}
|
||||||
|
|
||||||
HeapSize += symbol->Length;
|
HeapSize += symbol->Length;
|
||||||
}
|
}
|
||||||
@@ -149,7 +154,7 @@ void HandleAssemblerDirective() {
|
|||||||
exit(3);
|
exit(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
RemoveCurrentToken(); AdvanceParser(); //byte
|
RemoveCurrentToken(); //byte
|
||||||
|
|
||||||
ExpectRegister();
|
ExpectRegister();
|
||||||
|
|
||||||
@@ -186,7 +191,6 @@ void HandleAssemblerDirective() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
RemoveCurrentToken(); //Remove byte modifier token.
|
RemoveCurrentToken(); //Remove byte modifier token.
|
||||||
AdvanceParser();
|
|
||||||
|
|
||||||
directive->Value.Mnemonic = STOB;
|
directive->Value.Mnemonic = STOB;
|
||||||
directive->Class = MnemonicClass;
|
directive->Class = MnemonicClass;
|
||||||
@@ -473,5 +477,5 @@ void IgnoreParserLine(void) {
|
|||||||
void RemoveCurrentToken(void) {
|
void RemoveCurrentToken(void) {
|
||||||
RemoveItem(CurrentToken, TokensList);
|
RemoveItem(CurrentToken, TokensList);
|
||||||
|
|
||||||
if (CurrentToken > 0) CurrentToken--;
|
//if (CurrentToken > 0) CurrentToken--;
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user