Compare commits
2 Commits
a3d4e414e7
...
7b7e22e68f
| Author | SHA1 | Date | |
|---|---|---|---|
| 7b7e22e68f | |||
| b7590e11b0 |
BIN
hello_user.exe
BIN
hello_user.exe
Binary file not shown.
@ -74,25 +74,65 @@ int ntsys_asm_from_string(size_t* mempos, char* str, FILE* fp, byte_t cycle, nts
|
|||||||
return ntsys_run_asm_parser(parser);
|
return ntsys_run_asm_parser(parser);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ntsys_compile_asm(char* filename, char* asm_out) {
|
void ntsys_compile_asm_stadion1(FILE* fp, size_t* lb_size) {
|
||||||
FILE* fp = fopen(filename, "r");
|
|
||||||
if (fp == NULL) {
|
|
||||||
ntsys_error("Cannot open assembler file!");
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
char* st = NULL;
|
char* st = NULL;
|
||||||
size_t mem_pos = 0;
|
|
||||||
size_t lb_size = 0;
|
|
||||||
while ((st = ntsys_get_str(st, fp)) != NULL) {
|
while ((st = ntsys_get_str(st, fp)) != NULL) {
|
||||||
char* cp = st;
|
char* cp = st;
|
||||||
ntsys_asm_save_t __save = create_ntsys_asm_save(cp);
|
ntsys_asm_save_t __save = create_ntsys_asm_save(cp);
|
||||||
ntsys_asm_cache_t sv = create_ntsys_asm_cache(__save);
|
ntsys_asm_cache_t sv = create_ntsys_asm_cache(__save);
|
||||||
char* str = ntsys_get_arg(sv);
|
char* str = ntsys_get_arg(sv);
|
||||||
if (str[strlen(str) - 1] == ':') {
|
if (str[strlen(str) - 1] == ':') {
|
||||||
lb_size ++;
|
*lb_size += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(st);
|
free(st);
|
||||||
|
}
|
||||||
|
|
||||||
|
int ntsys_compile_asm_stadion2(
|
||||||
|
FILE* fp,
|
||||||
|
FILE* tmp,
|
||||||
|
size_t lb_size,
|
||||||
|
size_t* mem_pos,
|
||||||
|
char** labels,
|
||||||
|
word_t* labels_pos,
|
||||||
|
size_t* labels_count,
|
||||||
|
dword_t* fsz,
|
||||||
|
byte_t num
|
||||||
|
) {
|
||||||
|
char* st = NULL;
|
||||||
|
while ((st = ntsys_get_str(st, fp)) != NULL) {
|
||||||
|
if (ntsys_asm_from_string(mem_pos, st, tmp, num, labels, labels_pos, labels_count, fsz) != EXIT_SUCCESS) {
|
||||||
|
free(st);
|
||||||
|
fclose(fp);
|
||||||
|
fclose(tmp);
|
||||||
|
size_t i = 0;
|
||||||
|
while (i < lb_size) {
|
||||||
|
if (labels[i] != NULL) free(labels[i]);
|
||||||
|
i ++;
|
||||||
|
}
|
||||||
|
free(labels);
|
||||||
|
free(labels_pos);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(st);
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define ntsys_load_image_from_file(file, num) ( ntsys_compile_asm_stadion2( \
|
||||||
|
fp, (file), lb_size, &mem_pos, \
|
||||||
|
labels, labels_pos, &labels_count, &fsz, (num) \
|
||||||
|
) != EXIT_SUCCESS )
|
||||||
|
|
||||||
|
int ntsys_compile_asm(char* filename, char* asm_out) {
|
||||||
|
FILE* fp = fopen(filename, "r");
|
||||||
|
if (fp == NULL) {
|
||||||
|
ntsys_error("Cannot open assembler file!");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
size_t mem_pos = 0;
|
||||||
|
size_t lb_size = 0;
|
||||||
|
ntsys_compile_asm_stadion1(fp, &lb_size);
|
||||||
char** labels = malloc(sizeof(char*) * lb_size);
|
char** labels = malloc(sizeof(char*) * lb_size);
|
||||||
word_t* labels_pos = malloc(sizeof(word_t) * lb_size);
|
word_t* labels_pos = malloc(sizeof(word_t) * lb_size);
|
||||||
size_t u = 0;
|
size_t u = 0;
|
||||||
@ -109,22 +149,7 @@ int ntsys_compile_asm(char* filename, char* asm_out) {
|
|||||||
fclose(fp);
|
fclose(fp);
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
while ((st = ntsys_get_str(st, fp)) != NULL) {
|
if (ntsys_load_image_from_file(tmp, 0) != EXIT_SUCCESS) return EXIT_FAILURE;
|
||||||
if (ntsys_asm_from_string(&mem_pos, st, tmp, 0, labels, labels_pos, &labels_count, &fsz) != EXIT_SUCCESS) {
|
|
||||||
free(st);
|
|
||||||
fclose(fp);
|
|
||||||
fclose(tmp);
|
|
||||||
size_t i = 0;
|
|
||||||
while (i < lb_size) {
|
|
||||||
if (labels[i] != NULL) free(labels[i]);
|
|
||||||
i ++;
|
|
||||||
}
|
|
||||||
free(labels);
|
|
||||||
free(labels_pos);
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
free(st);
|
|
||||||
fclose(tmp);
|
fclose(tmp);
|
||||||
rewind(fp);
|
rewind(fp);
|
||||||
FILE* fw = fopen(asm_out, "wb");
|
FILE* fw = fopen(asm_out, "wb");
|
||||||
@ -133,25 +158,9 @@ int ntsys_compile_asm(char* filename, char* asm_out) {
|
|||||||
fclose(fp);
|
fclose(fp);
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
while ((st = ntsys_get_str(st, fp)) != NULL) {
|
if (ntsys_load_image_from_file(fw, 1) != EXIT_SUCCESS) return EXIT_FAILURE;
|
||||||
if (ntsys_asm_from_string(&mem_pos, st, fw, 1, labels, labels_pos, &labels_count, &fsz) != EXIT_SUCCESS) {
|
|
||||||
free(st);
|
|
||||||
fclose(fp);
|
|
||||||
fclose(fw);
|
|
||||||
size_t i = 0;
|
|
||||||
while (i < lb_size) {
|
|
||||||
if (labels[i] != NULL) free(labels[i]);
|
|
||||||
i ++;
|
|
||||||
}
|
|
||||||
free(labels);
|
|
||||||
free(labels_pos);
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fflush(fw);
|
fflush(fw);
|
||||||
free(st);
|
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
fclose(fw);
|
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
while (i < lb_size) {
|
while (i < lb_size) {
|
||||||
if (labels[i] != NULL) free(labels[i]);
|
if (labels[i] != NULL) free(labels[i]);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user