Browse code

Ported left to new asm syntax

neauoire authored on 14/03/2021 04:51:43
Showing 4 changed files
... ...
@@ -16,23 +16,20 @@ typedef signed char Sint8;
16 16
 typedef unsigned short Uint16;
17 17
 typedef signed short Sint16;
18 18
 
19
-typedef struct
20
-{
19
+typedef struct {
21 20
 	char name[64];
22 21
 	unsigned int size;
23 22
 } Map;
24 23
 
25 24
 typedef struct {
26 25
 	char name[64];
27
-	Uint8 len, offset, refs;
26
+	Uint8 refs, maps;
28 27
 	Uint16 addr;
29
-	/* map */
30 28
 	Map map[16];
31
-	Uint8 maps;
32 29
 } Label;
33 30
 
34 31
 typedef struct {
35
-	Uint8 data[256 * 256], tlen, llen;
32
+	Uint8 data[256 * 256], llen;
36 33
 	Uint16 ptr;
37 34
 	Label labels[256];
38 35
 } Program;
... ...
@@ -122,7 +119,7 @@ findlabellen(char *s)
122 119
 	char *param;
123 120
 	Label *l = findlabel(s);
124 121
 	if(scin(s, '.') < 1)
125
-		return l->len;
122
+		return l->map[0].size;
126 123
 	param = s + scin(s, '.') + 1;
127 124
 	for(i = 0; i < l->maps; ++i)
128 125
 		if(scmp(l->map[i].name, param, 64))
... ...
@@ -183,7 +180,7 @@ makelabel(char *name, Uint16 addr)
183 180
 	l->addr = addr;
184 181
 	l->refs = 0;
185 182
 	scpy(name, l->name, 64);
186
-	printf("New label: %s, at 0x%04x[%d]\n", l->name, l->addr, l->len);
183
+	printf("New label: %s, at 0x%04x\n", l->name, l->addr);
187 184
 	return 1;
188 185
 }
189 186
 
... ...
@@ -302,12 +299,18 @@ pass2(FILE *f)
302 299
 			if(off < -126 || off > 126){ printf("Address %s is too far(%d).\n", w, off); return 0; } 
303 300
 			pushbyte((Sint8)(l->addr - p.ptr - 3), 1); l->refs++; 
304 301
 		}
302
+		else if(w[0] == '=' && (l = findlabel(w + 1))) { 
303
+			if(!findlabellen(w + 1) || findlabellen(w + 1) > 2)
304
+				return error("Invalid load helper", w);
305
+			pushshort(findlabeladdr(w + 1), 1); pushbyte(findopcode(findlabellen(w + 1) == 2 ? "STR2" : "STR"), 0); l->refs++;}
306
+		else if(w[0] == '~' && (l = findlabel(w + 1))) { 
307
+			if(!findlabellen(w + 1) || findlabellen(w + 1) > 2)
308
+				return error("Invalid load helper", w);
309
+			pushshort(findlabeladdr(w + 1), 1); pushbyte(findopcode(findlabellen(w + 1) == 2 ? "LDR2" : "LDR"), 0); l->refs++;}
305 310
 		else if(w[0] == '|') p.ptr = shex(w + 1);
306 311
 		else if((op = findopcode(w)) || scmp(w, "BRK", 4)) pushbyte(op, 0);
307 312
 		else if(w[0] == '.' && (l = findlabel(w + 1))) { pushshort(findlabeladdr(w + 1), 0); l->refs++; }
308 313
 		else if(w[0] == ',' && (l = findlabel(w + 1))) { pushshort(findlabeladdr(w + 1), 1); l->refs++; }
309
-		else if(w[0] == '=' && (l = findlabel(w + 1))) { pushshort(findlabeladdr(w + 1), 1); pushbyte(findopcode(findlabellen(w + 1) == 2 ? "STR2" : "STR"), 0); l->refs++;}
310
-		else if(w[0] == '~' && (l = findlabel(w + 1))) { pushshort(findlabeladdr(w + 1), 1); pushbyte(findopcode(findlabellen(w + 1) == 2 ? "LDR2" : "LDR"), 0); l->refs++;}
311 314
 		else if(w[0] == '#' && sihx(w + 1) && slen(w + 1) == 2) pushbyte(shex(w + 1), 1); 
312 315
 		else if(w[0] == '#' && sihx(w + 1) && slen(w + 1) == 4) pushshort(shex(w + 1), 1);
313 316
 		else if(w[0] == '+' && sihx(w + 1) && slen(w + 1) == 2) pushbyte((Sint8)shex(w + 1), 1);
... ...
@@ -324,7 +327,7 @@ void
324 327
 cleanup(char *filename)
325 328
 {
326 329
 	int i;
327
-	printf("Assembled %s.\n\n", filename);
330
+	printf("Assembled %s, %d labels.\n\n", filename, p.llen);
328 331
 	for(i = 0; i < p.llen; ++i)
329 332
 		if(!p.labels[i].refs)
330 333
 			printf("--- Unused label: %s\n", p.labels[i].name);
... ...
@@ -20,5 +20,5 @@ cc -std=c89 -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wextra -Werr
20 20
 # cc uxn.c emulator.c -std=c89 -Os -DNDEBUG -g0 -s -Wall -Wno-unknown-pragmas -L/usr/local/lib -lSDL2 -o bin/emulator
21 21
 
22 22
 # run
23
-./bin/assembler projects/examples/win.editor.usm bin/boot.rom
23
+./bin/assembler projects/software/left.usm bin/boot.rom
24 24
 ./bin/emulator bin/boot.rom
... ...
@@ -25,11 +25,6 @@
25 25
 BRK
26 26
 
27 27
 @FRAME 
28
-	
29
-	~pointer.x ~Mouse.x NEQU2
30
-	~pointer.y ~Mouse.y NEQU2
31
-
32
-	#0000 EQU2 BRK? ( Return if unchanged )
33 28
 
34 29
 	,no-ctrl ~Controller.buttons #00 EQU JMP2? POP2
35 30
 
... ...
@@ -161,6 +156,11 @@ RTS
161 156
 
162 157
 @draw-cursor
163 158
 
159
+	~pointer.x ~Mouse.x NEQU2
160
+	~pointer.y ~Mouse.y NEQU2
161
+
162
+	#0000 EQU2 BRK? ( Return if unchanged )
163
+	
164 164
 	( clear last cursor )
165 165
 	,clear_icn =Sprite.addr 
166 166
 	~pointer.x =Sprite.x 
... ...
@@ -13,32 +13,22 @@
13 13
 			- Don't scroll past oef
14 14
 			- Hor scroll
15 15
 			- Real scrolling distance
16
-)
17
-
18
-&Console    { pad 8 char 1 byte 1 short 2 }
19
-&Screen 	{ width 2 height 2 pad 4 x 2 y 2 color 1 }
20
-&Sprite 	{ pad 8 x 2 y 2 addr 2 color 1 }
21
-&Controller { buttons 1 }
22
-&Keyboard 	{ key 1 }
23
-&Mouse  	{ x 2 y 2 state 1 chord 1 xt 1 yt 1 }
24
-&File       { pad 8 name 2 length 2 load 2 save 2 }
25
-
26
-&Document   { eof 2 body 8000 }
27
-&Clip       { len 2 body 256 }
28
-
29
-&Range2d 	{ from 2 to 2 }
30
-&Point2d 	{ x 2 y 2 }
31
-&Label2d 	{ x 2 y 2 color 1 addr 2 }
32
-&Textarea2d { x1 2 y1 2 x2 2 y2 2 addr 2 cursor 1 }
33
-&Touch2d    { x1 2 y1 2 x2 2 y2 2 state 1 }
34
-
35
-;lock 1
36
-;i 2 ;j 2 ;k 1 ;l 1 ;addr 2
37
-
38
-;selection Range2d ;position Point2d ;scroll Point2d
39
-;pt Point2d ;mouse Point2d ;touch Touch2d
40
-;textarea Textarea2d
41
-;label Label2d ( remove )
16
+)  
17
+
18
+;lock { byte 1 }
19
+;k { byte 1 } 
20
+;l { byte 1 } 
21
+;i { short 2 } 
22
+;j { short 2 } 
23
+;addr { short 2 }
24
+;selection { from 2 to 2 } 
25
+;position { x 2 y 2 } 
26
+;scroll { x 2 y 2 }
27
+;pt { x 2 y 2 } 
28
+;mouse { x 2 y 2 } 
29
+;touch { x1 2 y1 2 x2 2 y2 2 state 1 }
30
+;textarea { x1 2 y1 2 x2 2 y2 2 addr 2 cursor 1 }
31
+;label { x 2 y 2 color 1 addr 2 } ( remove )
42 32
 
43 33
 |0100 @RESET
44 34
 	
... ...
@@ -125,7 +115,6 @@ BRK
125 115
 		,$no-backspace ~KEYS #08 NEQ JMP2? POP2
126 116
 			( erase )
127 117
 			,$erase-multiple ~selection.to ~selection.from SUB2 #0001 NEQ2 JMP2? POP2
128
-			$erase-single
129 118
 				~selection.to ~selection.from SUB2 ,shift-left JSR2
130 119
 				,$erase-end JMP2
131 120
 			$erase-multiple
... ...
@@ -703,18 +692,18 @@ RTS
703 692
 @filepath1     [ projects/examples/gui.hover.usm 00 ]
704 693
 @filepath      [ projects/software/left.usm 00 ]
705 694
 
706
-|3000 ;document Document
707
-|c000 ;clip Clip
695
+|3000 ;document { eof 2 body 8000 }
696
+|c000 ;clip { len 2 body 256 }
708 697
 
709 698
 |d000 @ERROR BRK 
710 699
 
711
-|FF00 ;CNSL Console
712
-|FF10 ;SCRN Screen
713
-|FF20 ;SPRT Sprite
714
-|FF30 ;CTRL Controller
715
-|FF40 ;KEYS Keyboard
716
-|FF50 ;MOUS Mouse
717
-|FF60 ;FILE File
700
+|FF00 ;CNSL { pad 8 char 1 byte 1 short 2 }
701
+|FF10 ;SCRN { width 2 height 2 pad 4 x 2 y 2 color 1 }
702
+|FF20 ;SPRT { pad 8 x 2 y 2 addr 2 color 1 }
703
+|FF30 ;CTRL { buttons 1 }
704
+|FF40 ;KEYS { key 1 }
705
+|FF50 ;MOUS { x 2 y 2 state 1 chord 1 xt 1 yt 1 }
706
+|FF60 ;FILE { pad 8 name 2 length 2 load 2 save 2 }
718 707
 
719 708
 |FFF0 .RESET .FRAME .ERROR ( vectors )
720 709
 |FFF8 [ 30ff e0f3 b0f3 ] ( palette )