From e093aba79dd1ed88cb490b7cd69c81f0b14bea11 Mon Sep 17 00:00:00 2001
From: mrb0nk500 <b0nk@b0nk.xyz>
Date: Sun, 19 Apr 2020 13:31:49 -0400
Subject: Removed most of the commented code, and optimized the emulator some
 more.

I optimized the emulator by replacing the main loop
from a conditional while loop, to an unconditional for
loop.
---
 asmmon.c             | 23 ++++++++---------------
 lexer.c              | 21 ---------------------
 programs/subeditor.s |  2 +-
 sux.c                | 14 ++++----------
 test/asr.s           |  3 ++-
 test/test-stack.s    |  2 +-
 6 files changed, 16 insertions(+), 49 deletions(-)

diff --git a/asmmon.c b/asmmon.c
index b1aead9..16865eb 100644
--- a/asmmon.c
+++ b/asmmon.c
@@ -181,7 +181,6 @@ void list(uint16_t start, uint16_t end, uint8_t all, uint8_t ln, uint8_t addr, u
 		}
 		if (flags & 0x20) {
 			printf("%s", symbols[tokline[i].sym]->name);
-			/*get_symname(tokline[i].sym, 0));*/
 			if (tokline[i].islabel) {
 				printf(": ");
 			} else if (tokline[i].issym) {
@@ -363,13 +362,11 @@ uint64_t assemble(uint8_t dbg) {
 		opsize = 0;
 		skip = 0;
 		if ((flags & 0x53) == 0x42) {
-			/*value = use_symbol("", symid, tmpaddr, 1, 0);*/
 			value = symbols[symid]->val;
 		} else {
 			value = tokline[i].op;
 		}
 		if ((flags & 0x51) == 0x41) {
-			/*value = use_symbol("", symid, tmpaddr, 1, 0);*/
 			value = symbols[symid]->val;
 		}
 		if (flags & 0x220) {
@@ -583,23 +580,19 @@ int asmmon(const char *fn) {
 	uint8_t dbg = 0;
 	init_symbol();
 	while (!done) {
-		/*char *buf = NULL;*/
 		char *cmd;
 		char *arg = malloc(sizeof(char *)*128);
 		char *tmp = malloc(sizeof(char *)*128);
-		char *lex_line = NULL;
-		size_t size;
-		ssize_t line_len;
+		char lex_line[0x1000];
+		uint16_t size = 0;
 		uint8_t cmds = 0;
-		/* Is shortend command. */
+		uint8_t dummy = 0;
+		/* Is single character command. */
 		uint8_t isshcmd = 0;
-		if (!strcasecmp(fn, "stdin")) {
-			line_len = getline(&lex_line, &size, stdin);
-		} else {
-			line_len = getline(&lex_line, &size, fp);
-		}
-		cmd = malloc(sizeof(char *)*(line_len+1));
-		memcpy(cmd, lex_line, line_len+1);
+		fgets(lex_line, sizeof(lex_line), (!strcasecmp(fn, "stdin")) ? stdin : fp);
+		size = strlen(lex_line)+1;
+		cmd = malloc(size);
+		memcpy(cmd, lex_line, size);
 		cmd = strtok_r(cmd, " \t\n", &tmp);
 		if (cmd != NULL) {
 			isshcmd = (cmd[1] == '\0' || cmd[1] == ' ');
diff --git a/lexer.c b/lexer.c
index 3e460d6..8b5b840 100644
--- a/lexer.c
+++ b/lexer.c
@@ -107,7 +107,6 @@ uint8_t set_symval(const char *name, uint16_t id, uint64_t val, uint8_t useid, u
 }
 
 char *get_symname(uint16_t id, uint8_t dbg) {
-	/*struct symbol *s = mksymbol("", 0, 0, 1, id, dbg);*/
 	if (symbols[id]->def) {
 		return symbols[id]->name;
 	} else {
@@ -208,28 +207,11 @@ uint16_t get_string(const char *str, uint8_t dbg) {
 uint16_t reslv_fixups(uint8_t dbg) {
 	uint16_t i = 0, j = 0;
 	for (; fixups[j]; j++) {
-		/*printf("f: $%016"PRIX64", f->nxt: $%016"PRIX64", f->s->name: %s, f->s->val: $%016"PRIX64"\n", &f, &f->nxt, f->s->name, f->s->val);*/
 		if (fixups[j]->s->def) {
 			if (dbg) {
 				printf("reslv_fixups(): Symbol ID: $%X, Symbol Name: %s.\n", fixups[j]->s->id, fixups[j]->s->name);
 			}
 			tokline[fixups[j]->ln].sym = fixups[j]->s->id;
-			/*if (f->ln == 0xFFFF) {
-				addr[f->adr] = f->s->val & 0xFF;
-				if (f->s->val & 0xFF00)
-					addr[f->adr+1] = f->s->val >> 8;
-				if (f->s->val & 0xFF000000) {
-					addr[f->adr+2] = f->s->val >> 16;
-					addr[f->adr+3] = f->s->val >> 24;
-				}
-				if (f->s->val & 0xFF00000000000000) {
-					addr[f->adr+4] = f->s->val >> 32;
-					addr[f->adr+5] = f->s->val >> 40;
-					addr[f->adr+6] = f->s->val >> 48;
-					addr[f->adr+7] = f->s->val >> 56;
-				}
-			} else {
-			}*/
 		} else {
 			if (dbg) {
 				printf("reslv_fixups(): oof, undefined reference to '%s', at $%016"PRIX64".\n", fixups[j]->s->name, fixups[j]->adr);
@@ -293,7 +275,6 @@ uint64_t update_addr(uint64_t address, uint8_t fixup, uint16_t l, uint8_t dbg) {
 			value = 0;
 		} else {
 			value = use_symbol("", symid, address, 1, dbg);
-			/*value = symbols[symid]->val;*/
 		}
 	} else {
 		value = tokline[l].op;
@@ -390,7 +371,6 @@ uint64_t update_addr(uint64_t address, uint8_t fixup, uint16_t l, uint8_t dbg) {
 							printf("update_addr(): ");
 							puts("Addressing Mode has been set to Zero Matrix.");
 						}
-						/*address += !(opsize-1);*/
 					}
 					break;
 				case 1:
@@ -897,7 +877,6 @@ uint64_t lex(char *str, uint64_t address, uint8_t dbg) {
 			printf("lex(): lexeme: %s, lex_type: %s\n", lexeme, (lex_type != 0xFF) ? lex_tok[lex_type] : "TOK_NONE");
 		}
 		isstart = 0;
-		/*lex_type = 0xFF;*/
 		j = 0;
 		if (lex_type == TOK_OPCODE && !isop) {
 			j = 0;
diff --git a/programs/subeditor.s b/programs/subeditor.s
index fddc729..8eec46a 100644
--- a/programs/subeditor.s
+++ b/programs/subeditor.s
@@ -1179,5 +1179,5 @@ rdrwln_done:
 .org $FFC0
 .qword reset
 a
-done
+d
 
diff --git a/sux.c b/sux.c
index 4dffc37..d81a88d 100644
--- a/sux.c
+++ b/sux.c
@@ -36,7 +36,6 @@ uint64_t inss;
 uint8_t threads_done = 0;
 uint8_t kbd_rdy = 0;
 uint8_t step = 0;
-uint8_t irq = 0;
 
 
 #if !bench
@@ -64,7 +63,6 @@ void *run(void *args) {
 	uint64_t address = 0;
 	uint8_t prefix = 0;
 	uint8_t opcode = 0;
-	uint8_t end = 0;
 	uint64_t sum = 0;
 	uint64_t value = 0;
 	uint64_t reg = 0;
@@ -72,7 +70,7 @@ void *run(void *args) {
 	uint64_t iclk = 0;
 	#endif
 	uint64_t ins = 0;
-	uint64_t sign = 0;
+	uint8_t sign = 0;
 	uint8_t tmp;
 	uint8_t tmp2;
 #if !bench
@@ -99,7 +97,7 @@ void *run(void *args) {
 	pthread_mutex_unlock(&mutex);
 	#endif
 #endif
-	while (!end) {
+	for (;;) {
 		address = 0;
 		prefix = addr[cpu->pc[thread]];
 		if ((prefix & 0x03) != 0x03) {
@@ -130,13 +128,9 @@ void *run(void *args) {
 		wprintw(scr,
 			", sp: $%04X"
 			", ps: $%02"PRIX64
-			/*", prefix: $%02X"
-			", opcode: $%02X"*/
 			", inst: "
 			, cpu->sp[thread]
 			, cpu->ps);
-			/*, prefix
-			, opcode);*/
 		#if keypoll
 		pthread_mutex_unlock(&mutex);
 		#endif
@@ -855,7 +849,7 @@ void *run(void *args) {
 			case ASR_AB: /* ASR Absolute. */
 			case ASR_Z: /* ASR Zero Matrix. */
 				sign = cpu->a[thread] >> 63;
-				sum = (value < 64) ? (cpu->a[thread] >> value) | sign : 0;
+				sum = (value < 64) ? (cpu->a[thread] >> value) | ((uint64_t)sign << 63) : 0;
 				setflag(sum == 0, Z);
 				setflag(sum >> 63, N);
 				setflag(cpu->a[thread] & 1, C);
@@ -1258,7 +1252,6 @@ void *run(void *args) {
 		#endif
 		#elif bench
 		if (ins >= BENCH_INST) {
-			end = 1;
 			pthread_mutex_lock(&main_mutex);
 			threads_done++;
 			inst[thread] = ins;
@@ -1268,6 +1261,7 @@ void *run(void *args) {
 			pthread_cond_signal(&main_cond);
 			pthread_mutex_unlock(&main_mutex);
 			gettimeofday(&en[thread], 0);
+			break;
 		}
 		#endif
 	}
diff --git a/test/asr.s b/test/asr.s
index a3b72c0..b251a84 100644
--- a/test/asr.s
+++ b/test/asr.s
@@ -5,8 +5,9 @@
 reset:
 	cps
 start:
+	clc
 	lda #0
-	sbc #$FFFF
+	sbc.w #$FFFF
 	ldb #0
 	deb
 signshft:
diff --git a/test/test-stack.s b/test/test-stack.s
index b9218a0..a63f54a 100644
--- a/test/test-stack.s
+++ b/test/test-stack.s
@@ -2,7 +2,7 @@ init:
 	cps
 	ldx.w #$FFFF
 	txs
-
+	tax
 loop:
 	inc
 	pha #1
-- 
cgit v1.2.3-13-gbd6f