commit e162b4f083a10daba435f33fad97bcbcd9bbc4c8
parent 0027296839eb50a7663aeff4e0c9c925e162003a
Author: neauoire <aliceffekt@gmail.com>
Date: Mon, 1 Mar 2021 09:16:40 -0800
Cleanup
Diffstat:
7 files changed, 27 insertions(+), 26 deletions(-)
diff --git a/README.md b/README.md
@@ -118,7 +118,6 @@ A device that works like a NES controller, each button is a bit from a single by
- Includes
- Defines
-- Print unused labels
## Refs
diff --git a/assembler.c b/assembler.c
@@ -17,17 +17,17 @@ typedef unsigned short Uint16;
typedef signed short Sint16;
typedef struct {
- int ptr;
- Uint8 data[65536];
+ Uint8 data[256 * 256];
+ Uint16 ptr;
} Program;
typedef struct {
+ Uint8 len, length[16], size, refs;
char name[64], params[16][64];
- Uint8 len, length[16], size;
} Macro;
typedef struct {
- Uint8 len, offset;
+ Uint8 len, offset, refs;
Uint16 addr;
char name[64];
Macro *macro;
@@ -222,6 +222,7 @@ makelabel(char *name, Uint16 addr, Uint8 len, Macro *m)
l = &labels[labelslen++];
l->addr = addr;
l->len = len;
+ l->refs = 0;
scpy(name, l->name, 64);
if(m)
l->macro = m;
@@ -246,9 +247,10 @@ makevariable(char *id, Uint16 *addr, FILE *f)
Macro *m = NULL;
fscanf(f, "%s", wv);
origin = *addr;
- if((m = findmacro(wv)))
+ if((m = findmacro(wv))) {
len = m->size;
- else
+ m->refs++;
+ } else
len = shex(wv);
*addr += len;
return makelabel(id, origin, len, m);
@@ -349,17 +351,29 @@ pass2(FILE *f)
else if(w[0] == '+' && sihx(w + 1) && slen(w + 1) == 4) pushshort((Sint16)shex(w + 1), 1);
else if(w[0] == '-' && sihx(w + 1) && slen(w + 1) == 2) pushbyte((Sint8)(shex(w + 1) * -1), 1);
else if(w[0] == '-' && sihx(w + 1) && slen(w + 1) == 4) pushshort((Sint16)(shex(w + 1) * -1), 1);
- else if(w[0] == '=' && (l = findlabel(w + 1)) && l->len){ pushshort(findlabeladdr(w+1), 1); pushbyte(findopcode(findlabellen(w+1) == 2 ? "STR2" : "STR"), 0); }
- else if(w[0] == '~' && (l = findlabel(w + 1)) && l->len){ pushshort(findlabeladdr(w+1), 1); pushbyte(findopcode(findlabellen(w+1) == 2 ? "LDR2" : "LDR"), 0); }
+ else if(w[0] == '=' && (l = findlabel(w + 1)) && l->len){ pushshort(findlabeladdr(w+1), 1); pushbyte(findopcode(findlabellen(w+1) == 2 ? "STR2" : "STR"), 0); l->refs++;}
+ else if(w[0] == '~' && (l = findlabel(w + 1)) && l->len){ pushshort(findlabeladdr(w+1), 1); pushbyte(findopcode(findlabellen(w+1) == 2 ? "LDR2" : "LDR"), 0); l->refs++;}
else if(w[0] == '=' && sihx(w + 1)) { pushshort(shex(w + 1), 1); pushbyte(findopcode("STR2"), 0); }
else if(w[0] == '~' && sihx(w + 1)) { pushshort(shex(w + 1), 1); pushbyte(findopcode("LDR2"), 0); }
- else if((l = findlabel(w + 1))) pushshort(findlabeladdr(w+1), w[0] == ',');
+ else if((l = findlabel(w + 1))) { pushshort(findlabeladdr(w+1), w[0] == ','); l->refs++; }
else return error("Unknown label in second pass", w);
/* clang-format on */
}
return 1;
}
+void
+cleanup(void)
+{
+ int i;
+ for(i = 0; i < labelslen; ++i)
+ if(!labels[i].refs)
+ printf("--- Unused label: %s\n", labels[i].name);
+ for(i = 0; i < macroslen; ++i)
+ if(!macros[i].refs)
+ printf("--- Unused macro: %s\n", macros[i].name);
+}
+
int
main(int argc, char *argv[])
{
@@ -373,5 +387,6 @@ main(int argc, char *argv[])
fwrite(p.data, sizeof(p.data), 1, fopen(argv[2], "wb"));
fclose(f);
printf("Assembled %s.\n\n", argv[2]);
+ cleanup();
return 0;
}
diff --git a/build.sh b/build.sh
@@ -20,5 +20,5 @@ cc -std=c89 -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wextra -Werr
# cc uxn.c emulator.c -std=c89 -Os -DNDEBUG -g0 -s -Wall -Wno-unknown-pragmas -L/usr/local/lib -lSDL2 -o bin/emulator
# run
-./bin/assembler examples/gui.hover.usm bin/boot.rom
+./bin/assembler examples/dev.mouse.usm bin/boot.rom
./bin/emulator bin/boot.rom
diff --git a/examples/dev.mouse.usm b/examples/dev.mouse.usm
@@ -10,7 +10,6 @@
;label Label2d
;cat Point2d
;mouse Point2d
-;pos Point2d
;color 1
;timer 1
@@ -106,9 +105,7 @@ RTS
@animate-polycat-tail-next2
( look-at )
~mouse.x ~cat.x #0008 ADD2 GTH2 ,animate-polycat-right ROT JMP? POP2
- @animate-polycat-left
~mouse.y ~cat.y #0008 ADD2 GTH2 ,animate-polycat-left-down ROT JMP? POP2
- @animate-polycat-left-up
,polycat #0040 ADD2 ~cat.x ~cat.y #0008 ADD2 ,draw-sprite-chr JSR
,polycat #0050 ADD2 ~cat.x #0008 ADD2 ~cat.y #0008 ADD2 ,draw-sprite-chr JSR
RTS
@@ -118,7 +115,6 @@ RTS
RTS
@animate-polycat-right
~mouse.y ~cat.y #0008 ADD2 GTH2 ,animate-polycat-right-down ROT JMP? POP2
- @animate-polycat-right-up
,polycat #0060 ADD2 ~cat.x ~cat.y #0008 ADD2 ,draw-sprite-chr JSR
,polycat #0070 ADD2 ~cat.x #0008 ADD2 ~cat.y #0008 ADD2 ,draw-sprite-chr JSR
RTS
@@ -217,9 +213,6 @@ RTS
0008 0808 0808 0800 0030 1008 0810 3000 0000 0032 4c00 0000 3c42 99a1 a199 423c
]
-@chord0_text [ no chord ] <1 .00
-@chord1_text [ chord 1_ ] <1 .00
-@chord2_text [ chord _2 ] <1 .00
@mouse0_text [ no click ] <1 .00
@mouse1_text [ mouse 1_ ] <1 .00
@mouse2_text [ mouse _2 ] <1 .00
diff --git a/examples/gui.hover.usm b/examples/gui.hover.usm
@@ -4,8 +4,6 @@
&Sprite { pad 8 x 2 y 2 addr 2 color 1 }
&Mouse { x 2 y 2 state 1 chord 1 }
-&Label2d { x 2 y 2 color 1 addr 2 }
-&Picture2d { x 2 y 2 width 2 height 2 color 1 addr 2 }
&Rect2d { x1 2 y1 2 x2 2 y2 2 }
&Point2d { x 2 y 2 }
@@ -95,11 +93,9 @@ RTS
RTS
@clear_icn [ 0000 0000 0000 0000 ]
-@pointer_icn [ 80c0 e0f0 f8e0 1000 ]
+@pointer_icn [ 80c0 e0f0 f8e0 1000 ]
@hand_icn [ 4040 4070 f8f8 f870 ]
-@text [ Label Text ] <1 .00 ( add characters to memory )
-
|d000 @ERROR BRK
|FF10 ;dev/screen Screen
diff --git a/examples/gui.picture.usm b/examples/gui.picture.usm
@@ -4,7 +4,6 @@
&Sprite { pad 8 x 2 y 2 addr 2 color 1 }
&Picture2d { x 2 y 2 width 2 height 2 color 1 addr 2 }
-&Point2d { x 2 y 2 }
;pict Picture2d
diff --git a/examples/gui.shapes.usm b/examples/gui.shapes.usm
@@ -6,13 +6,12 @@
&Label2d { x 2 y 2 color 1 addr 2 }
&Picture2d { x 2 y 2 width 2 height 2 color 1 addr 2 }
&Rect2d { x1 2 y1 2 x2 2 y2 2 }
-&Point2d { x 2 y 2 }
;label Label2d
;pict Picture2d
;rect Rect2d
-;color 1 ;x1 2 ;x2 2 ;y1 2 ;y2 2
+;color 1
|0100 @RESET