minor tweaks

This commit is contained in:
ROSE BARRATT 2024-12-17 10:09:20 +00:00
parent f177471663
commit 1bea05115a
3 changed files with 29 additions and 12 deletions

View File

@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.15)
project(r16) project(r16)
set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD 11 LANGUAGES c)
add_library(carg-parse add_library(carg-parse
./lib/carg-parse/carg-parse.c ./lib/carg-parse/carg-parse.c

View File

@ -88,8 +88,9 @@ AsmInstructionArray *InterpretAssembly(char *data)
{ {
char *d = data; char *d = data;
AsmInstructionArray *asmIA = malloc(sizeof(AsmInstructionArray)); AsmInstructionArray *asmIA = malloc(sizeof(AsmInstructionArray));
uint32_t cSize = 0, mSize = ARRAY_SNAP_SIZE; asmIA->length = 0;
asmIA->instruction = malloc(sizeof(AsmInstruction) * ARRAY_SNAP_SIZE); asmIA->instruction = malloc(sizeof(AsmInstruction) * ARRAY_SNAP_SIZE);
uint32_t cSize = 0, mSize = ARRAY_SNAP_SIZE;
int gfususc = 0; int gfususc = 0;
@ -118,7 +119,9 @@ AsmInstructionArray *InterpretAssembly(char *data)
if (*(FindNextSpaceChar(d, true) - 1) == ':') if (*(FindNextSpaceChar(d, true) - 1) == ':')
{ {
memcpy(&current.label, d, (FindNextSpaceChar(d, true) - 1) - d); size_t l = (FindNextSpaceChar(d, true) - 1) - d;
memcpy(&current.label, d, l);
current.label[l] = '\0';
d = FindNextNonSpaceChar(d, true); d = FindNextNonSpaceChar(d, true);
} }
@ -127,7 +130,8 @@ AsmInstructionArray *InterpretAssembly(char *data)
current.label[0] = '\0'; current.label[0] = '\0';
} }
memcpy(&current.instruction, d, 3); memcpy(&current.instruction, d, sizeof(char) * 3);
current.instruction[3] = '\0';
d = FindNextNonSpaceChar(d, false); d = FindNextNonSpaceChar(d, false);
@ -139,20 +143,26 @@ AsmInstructionArray *InterpretAssembly(char *data)
goto loopEnd; goto loopEnd;
} }
char *comma = FindNextChar(d, ',', true), char *comma = FindNextChar(d + 3, ',', true),
*nline = FindNextChar(d, '\n', true); *nline = FindNextChar(d + 3, '\n', true);
bool a2 = comma < nline; bool a2 = comma < nline;
char *eoA1 = a2 ? comma : nline; char *eoA1 = a2 ? comma : nline;
memcpy(&current.arg1, d, eoA1 - d); size_t s = eoA1 - (d + 3);
memcpy(&current.arg1, d + 3, s);
current.arg1[s] = '\0';
if (!a2) if (!a2)
goto loopEnd; goto loopEnd;
d = FindNextNonSpaceChar(eoA1 + 1, true); d = FindNextNonSpaceChar(eoA1 + 1, true);
memcpy(&current.arg2, d, nline - d); s = nline - d;
memcpy(&current.arg2, d, s);
current.arg2[s] = '\0';
d = nline + 1; d = nline + 1;
printf("l: %s, i: %s, a1: %s, a2: %s\n", current.label, current.instruction, current.arg1, current.arg2);
loopEnd: loopEnd:
cSize++; cSize++;
} }
@ -207,6 +217,10 @@ uint16_t *BinaryInstructionToBin(BinaryInstruction instruction)
return bin; return bin;
} }
static void just() {
}
int WhereIn2DCharArray(int x, int y, char array[25][4], char* val) int WhereIn2DCharArray(int x, int y, char array[25][4], char* val)
{ {
for (int i = 0; i < x; i++) for (int i = 0; i < x; i++)
@ -236,13 +250,13 @@ void ParseArgument(char *argData, AsmLabelArray *labels, uint16_t labelOffset,
{ {
*argInfoOut = value; *argInfoOut = value;
// todo: something here probably??
} }
else else
{ {
*argInfoOut = valueInRegister; *argInfoOut = valueInRegister;
// todo: something here probably??
} }
} }
else if (!pointer && value) // value else if (!pointer && value) // value
@ -284,6 +298,7 @@ void ParseArgument(char *argData, AsmLabelArray *labels, uint16_t labelOffset,
case '7': case '7':
case '8': case '8':
case '9': case '9':
just();
total += '0' - *a; total += '0' - *a;
break; break;
case 'a': case 'a':
@ -330,6 +345,8 @@ uint16_t *CompileAsembly(AsmInstructionArray *assembly, AsmLabelArray *labels)
for (int i = 0; i < assembly->length; i++) for (int i = 0; i < assembly->length; i++)
{ {
printf("cabii: %d\n", i);
BinaryInstruction binaryIns; BinaryInstruction binaryIns;
int instruction = WhereIn2DCharArray(LEN(CpuInstructionsHumanReadable), int instruction = WhereIn2DCharArray(LEN(CpuInstructionsHumanReadable),

View File

@ -8,9 +8,9 @@
const char demo[] = const char demo[] =
"mov R0, 0x1\n\ "mov R0, 0x1\n\
mov ACU, 0x0\n\ mov ACU, 0x0\n\
loop: add ACU, R0\n\ add ACU, R0\n\
out ACU, 0x0\n\ out ACU, 0x0\n\
jmp loop, 0x0\n"; jmp 0x8, 0x0\n";
int main(int argc, char **argv) int main(int argc, char **argv)
{ {