Browse code

Fixed issue with assembler segfault

neauoire authored on 28/03/2021 17:20:24
Showing 4 changed files
... ...
@@ -28,7 +28,7 @@ else
28 28
 fi
29 29
 
30 30
 echo "Assembling.."
31
-./bin/assembler projects/software/noodle.usm bin/boot.rom
31
+./bin/assembler projects/software/left.usm bin/boot.rom
32 32
 
33 33
 echo "Running.."
34 34
 if [ "${2}" = '--cli' ]; 
... ...
@@ -2,6 +2,10 @@
2 2
 
3 3
 %8+  { #0008 ADD2 }
4 4
 %8*  { #0030 SFT2 }
5
+%MOD2 { #03 AND  }
6
+
7
+;cursor { x 2 y 2 blink 1 }
8
+
5 9
 
6 10
 |0100 ;Console { pad 8 char 1 byte 1 short 2 }
7 11
 |0110 ;Screen { width 2 height 2 pad 4 y 2 x 2 color 1 }
... ...
@@ -15,6 +19,15 @@
15 19
 
16 20
 @FRAME
17 21
 	
22
+	( update cursor )
23
+	#02 ~cursor.blink #01 EQU ADD =Sprite.color
24
+
25
+	,cursor_icn =Sprite.addr
26
+	~cursor.blink MOD2 #00 EQU =cursor.blink
27
+
28
+	
29
+
30
+
18 31
 	~Keys #00 EQU ^$end JNZ
19 32
 
20 33
 	( enter key )
... ...
@@ -34,6 +47,8 @@
34 47
 
35 48
 BRK
36 49
 
50
+@cursor_icn [ ffff ffff ffff ffff ]
51
+
37 52
 @font ( spectrum-zx font ) 
38 53
 [
39 54
 	0000 0000 0000 0000 0000 2400 7e3c 0000 0000 2400 3c42 0000 0000 6c7c 7c38 1000
... ...
@@ -263,11 +263,11 @@ walktoken(char *w)
263 263
 	if(findopcode(w) || scmp(w, "BRK", 4))
264 264
 		return 1;
265 265
 	switch(w[0]) {
266
-	case '=': return 4 - (findlabeladdr(w + 1) < 0x0100); /* POK/STR helper (lit addr(1/2) str) */
267
-	case '~': return 4 - (findlabeladdr(w + 1) < 0x0100); /* PEK/LDR helper (lit addr(1/2) ldr) */
268
-	case ',': return 3;                                   /* lit2 addr-hb addr-lb */
269
-	case '.': return 2;                                   /* addr-hb addr-lb */
270
-	case '^': return 2;                                   /* Relative jump: lit addr-offset */
266
+	case '=': return 4 - (findlabel(w + 1) && findlabeladdr(w + 1) < 0x0100); /* POK/STR helper (lit addr(1/2) str) */
267
+	case '~': return 4 - (findlabel(w + 1) && findlabeladdr(w + 1) < 0x0100); /* PEK/LDR helper (lit addr(1/2) ldr) */
268
+	case ',': return 3;                                                       /* lit2 addr-hb addr-lb */
269
+	case '.': return 2;                                                       /* addr-hb addr-lb */
270
+	case '^': return 2;                                                       /* Relative jump: lit addr-offset */
271 271
 	case '#': return (slen(w + 1) == 2 ? 2 : 3);
272 272
 	}
273 273
 	if((m = findmacro(w))) {
... ...
@@ -436,6 +436,7 @@ datetime_poke(Uxn *u, Uint16 ptr, Uint8 b0, Uint8 b1)
436 436
 	m[ptr + 8] = (t->tm_yday & 0xff00) >> 8;
437 437
 	m[ptr + 9] = t->tm_yday & 0xff;
438 438
 	m[ptr + 10] = t->tm_isdst;
439
+	(void)b0;
439 440
 	return b1;
440 441
 }
441 442