diff --git a/.build.yml b/.build.yml
index 8a0b0fd..12d430e 100644
--- a/.build.yml
+++ b/.build.yml
@@ -19,3 +19,4 @@
       ./6502 -h
 artifacts:
   - 6502/build/6502
+  - 6502/build/as/6502-as
diff --git a/as/as.c b/as/as.c
index 36d9637..5f0a001 100644
--- a/as/as.c
+++ b/as/as.c
@@ -60,14 +60,16 @@
 
 bool is_ident(char c)
 {
-	return c && (isalpha(c) || isdigit(c));
+	return c && (isalpha(c) || isdigit(c)
+				 || c == '_' || c == '-'
+				 || c == '$' || c == '.');
 }
 
 uint32_t skip_ws(char **code)
 {
 	uint32_t len = 0;
 
-	for (; isspace(**code); (*code)++, len++)
+	for (; **code == ' ' || **code == '\t'; (*code)++, len++)
 	{}
 
 	return len;
@@ -108,7 +110,7 @@
 
 	skip_ws(code);
 
-	if (**code == ':')
+	if (*code != start && **code == ':')
 	{
 		**code = 0;
 		(*code)++;
@@ -127,12 +129,19 @@
 	for (; isalpha(**code); (*code)++)
 	{}
 
-	**code = 0;
-
 	if (start == *code)
 		return NULL;
 
-	(*code)++;
+	// If code is incremented when it points to \0, it will wrap to the next line
+	// returned by strtok(), which causes a bug where instructions followed immediately
+	// by a newline and no arguments causes the next instruction to parse the entire
+	// program as its argument (not good)
+	if (**code)
+	{
+		**code = 0;
+		(*code)++;
+	}
+
 	return start;
 }
 
@@ -140,7 +149,6 @@
 {
 	return c == ';' ||
 		c == '\n' ||
-		c == '\r' ||
 		c == '\0';
 }
 
@@ -388,16 +396,26 @@
 	{
 		skip_ws(&line);
 
-		printf("\033[36m%.9s\033[0m\n", line);
+		printf("line: \033[36m%.12s\033[0m  ", line);
 		
-		char *label = parse_label(&line),
-			*mn = parse_inst(&line);
+		char *label = parse_label(&line);
+		char *mn = parse_inst(&line);
+		printf(" skipping %d ", skip_ws(&line));
+		//printf("\033[33m%s\033[0m\n", line);
+		
+		bool no_argument = false;
+		printf("eol is %c ($%x)\n", *line, *line);
+		if (is_eol(*line))
+		{
+			no_argument = true;
+			printf("... no argument\n");
+		}
 		int32_t mnemonic = -1;
 
 		if (label)
 		{
 			map_set(labels, label, (void *)pc);
-			printf("Set label %s at %lu\n", label, pc);
+			printf("Set label %s at $%lx\n", label, pc);
 		}
 
 		if (mn)
@@ -416,12 +434,13 @@
 			inst_t arg;
 			// printf("Parsing '%s'\n", line);
 #define INST(_mn, am, op, len) \
-			if (mnemonic == _mn && parse_arg(line, am, &arg)) \
-			{												  \
-				arg.opcode = op;							  \
-				pc += len;									  \
-				print_inst(&arg);							  \
-			}												  \
+			if ((no_argument && (_mn == AM_IMP || _mn == AM_ACC))		\
+				 || (mnemonic == _mn && parse_arg(line, am, &arg)))		\
+			{															\
+				arg.opcode = op;										\
+				pc += len;												\
+				print_inst(&arg);										\
+			}															\
 			else
 
 			INSTRUCTIONS
diff --git a/as/test/test.s b/as/test/test.s
index edca24a..66ca095 100644
--- a/as/test/test.s
+++ b/as/test/test.s
@@ -1,5 +1,22 @@
+;;; This file is meant to test the parsing capabilities of the assembler.
+;;; It should contain every address mode to its parsing, as well as a
+;;; range of instructions to test.
+
+;;; When the assembler supports macros, those will be tested here as well.
+
 start:
 	lda #$32 					; Store $32 in a
 	tax							; Transfer a to x
 	stx $200					; Store x at $200
 	jmp ($FFAA)					; Jump to the address at $FFAA
+second_label:
+	lda $30, X
+	inc
+	adc #$3
+	bne start
+	jsr another_subroutine
+	tax
+	hlt
+
+another_subroutine:
+	ret
diff --git a/cpu.c b/cpu.c
index ce489cc..ef544a7 100644
--- a/cpu.c
+++ b/cpu.c
@@ -1,8 +1,6 @@
 #include "cpu.h"
 #include "common.h"
 #include "instructions.h"
-#define SCREEN_ONLY_SDL
-#include "screen.h"
 
 #include "dbg.h"
 #include <errno.h>
@@ -16,9 +14,6 @@
 	printf("\033[33m" m "\033[0m\n", ##__VA_ARGS__);
 
 
-sdl_screen_t *g_scr = NULL;
-
-
 void reset(cpu_t *cpu)
 {
 	cpu->regs[SP] = 0xFF; // stack at is 0x100 + SP
diff --git a/csv2h.awk b/csv2h.awk
index dfebaec..368cc48 100755
--- a/csv2h.awk
+++ b/csv2h.awk
@@ -5,6 +5,10 @@
 	print "#define INSTRUCTIONS \\"
 }
 
-/0x.+/ {
+/0x/ {
 	print "	INST(" $2 ", AM_" $3 ", " $1", " $4 ") \\"
 }
+
+END {
+    print ""
+}
diff --git a/instructions.h b/instructions.h
index 082016f..c2c18d0 100644
--- a/instructions.h
+++ b/instructions.h
@@ -159,3 +159,4 @@
 	INST(STY, AM_ZP, 0x84, 2) \
 	INST(STY, AM_ZPX, 0x94, 2) \
 	INST(STY, AM_ABS, 0x8c, 3) \
+
