Browse code

Added experimental dev1

neauoire authored on 05/02/2021 19:57:37
Showing 6 changed files
... ...
@@ -25,6 +25,7 @@ cc uxn.c -std=c89 -Os -DNDEBUG -g0 -s -Wall -Wno-unknown-pragmas -o uxn
25 25
 
26 26
 - `( comment )`, toggle parsing on/off
27 27
 - `|0010`, move to position in the program
28
+- `"hello`, push literal bytes for word "hello"
28 29
 
29 30
 ```
30 31
 ;value ( alloc a zero-page variable )
... ...
@@ -29,7 +29,7 @@ contexts:
29 29
     - match: '\;(\S+)\s?'
30 30
       scope: string.control
31 31
       pop: true
32
-    - match: '\_(\S+)\s?'
32
+    - match: '\@(\S+)\s?'
33 33
       scope: string.control
34 34
       pop: true
35 35
     - match: '\,(\S+)\s?'
... ...
@@ -38,6 +38,9 @@ contexts:
38 38
     - match: '\.(\S+)\s?'
39 39
       scope: keyword.control
40 40
       pop: true
41
+    - match: '\"(\S+)\s?'
42
+      scope: keyword.control
43
+      pop: true
41 44
 
42 45
   comments:
43 46
     - match: '\('
... ...
@@ -1,24 +1,27 @@
1 1
 ( blank project )
2 2
 
3 3
 ;variable1
4
-;variable2
5
-_constant1 abcd
4
+:constant1 9abc
6 5
 
7 6
 |0100 ( -------------------------------- )
8 7
 
9
-:RESET BRK
8
+@RESET
10 9
 
11
-|c000 ( -------------------------------- )
10
+,abcd
11
+
12
+BRK ( RESET-END )
12 13
 
13
-:FRAME ( FRAME-START )
14
+|c000 ( -------------------------------- )
14 15
 
16
+@FRAME ( FRAME-START )
15 17
 
18
+,abcd
16 19
 
17 20
 BRK ( FRAME-END )
18 21
 
19 22
 |d000 ( -------------------------------- )
20 23
 
21
-:ERROR BRK
24
+@ERROR BRK
22 25
 
23 26
 |FFFA ( -------------------------------- )
24 27
 
... ...
@@ -1,30 +1,21 @@
1 1
 ( blank project )
2 2
 
3 3
 ;variable1
4
-:constant1 9abc
4
+:dev1r FFF0
5
+:dev1w FFF1
5 6
 
6
-|0100 ( -------------------------------- )
7
+|0100 @RESET
7 8
 
8
-@RESET
9
+"hello 
9 10
 
10
-,abcd
11
+,dev1w STR
12
+,dev1w STR
13
+,dev1w STR
14
+,dev1w STR
15
+,dev1w STR
11 16
 
12
-BRK ( RESET-END )
17
+BRK ( RESET )
13 18
 
14
-|c000 ( -------------------------------- )
15
-
16
-@FRAME ( FRAME-START )
17
-
18
-,abcd
19
-
20
-BRK ( FRAME-END )
21
-
22
-|d000 ( -------------------------------- )
23
-
24
-@ERROR BRK
25
-
26
-|FFFA ( -------------------------------- )
27
-
28
-.RESET
29
-.FRAME
30
-.ERROR
19
+|c000 @FRAME BRK 
20
+|d000 @ERROR BRK 
21
+|FFFA .RESET .FRAME .ERROR
... ...
@@ -85,7 +85,7 @@ echom(Memory *m, Uint8 len, char *name)
85 85
 
86 86
 /* clang-format off */
87 87
 
88
-Uint8 mempeek8(Uint16 s) { return cpu.rom.dat[s] & 0xff; }
88
+Uint8 rampeek8(Uint16 s) { return cpu.ram.dat[s] & 0xff; }
89 89
 Uint16 mempeek16(Uint16 s) { return (cpu.rom.dat[s] << 8) + (cpu.rom.dat[s+1] & 0xff); }
90 90
 void wspush8(Uint8 b) { cpu.wst.dat[cpu.wst.ptr++] = b; }
91 91
 Uint8 wspop8(void) { return cpu.wst.dat[--cpu.wst.ptr]; }
... ...
@@ -158,6 +158,14 @@ error(char *name)
158 158
 	return 0;
159 159
 }
160 160
 
161
+int
162
+device1(Uint8 *read, Uint8 *write)
163
+{
164
+	printf("%c", *write);
165
+	*write = 0;
166
+	return 0;
167
+}
168
+
161 169
 int
162 170
 eval(void)
163 171
 {
... ...
@@ -192,12 +200,15 @@ start(FILE *f)
192 200
 	cpu.vframe = mempeek16(0xfffc);
193 201
 	cpu.verror = mempeek16(0xfffe);
194 202
 	/* eval reset */
195
-	printf("Phase: reset\n");
203
+	printf("\nPhase: reset\n");
196 204
 	cpu.rom.ptr = cpu.vreset;
197
-	while(!(cpu.status & FLAG_HALT) && eval())
198
-		;
205
+	while(!(cpu.status & FLAG_HALT) && eval()) {
206
+		/* experimental */
207
+		if(cpu.ram.dat[0xfff1])
208
+			device1(&cpu.ram.dat[0xfff0], &cpu.ram.dat[0xfff1]);
209
+	}
199 210
 	/*eval frame */
200
-	printf("Phase: frame\n");
211
+	printf("\nPhase: frame\n");
201 212
 	setflag(FLAG_HALT, 0);
202 213
 	cpu.rom.ptr = cpu.vframe;
203 214
 	while(!(cpu.status & FLAG_HALT) && eval())
... ...
@@ -148,6 +148,16 @@ pushshort(Uint16 s, int lit)
148 148
 	pushbyte(s & 0xff, 0);
149 149
 }
150 150
 
151
+void
152
+pushword(char *w)
153
+{
154
+	int i = slen(w);
155
+	pushbyte(0x02, 0);
156
+	pushbyte(slen(w), 0);
157
+	while(i > 0)
158
+		pushbyte(w[--i], 0);
159
+}
160
+
151 161
 Label *
152 162
 findlabel(char *s)
153 163
 {
... ...
@@ -228,6 +238,8 @@ pass1(FILE *f)
228 238
 			addr += 0;
229 239
 		else if(w[0] == '.')
230 240
 			addr += 2;
241
+		else if(w[0] == '"')
242
+			addr += slen(w + 1);
231 243
 		else if(w[0] == ',')
232 244
 			addr += 4;
233 245
 		else if(ismarker(w))
... ...
@@ -255,6 +267,8 @@ pass2(FILE *f)
255 267
 			p.ptr = shex(w + 1);
256 268
 		else if(w[0] == ':')
257 269
 			fscanf(f, "%s", w);
270
+		else if(w[0] == '"')
271
+			pushword(w + 1);
258 272
 		else if((op = findop(w)) || scmp(w, "BRK"))
259 273
 			pushbyte(op, 0);
260 274
 		else if((l = findlabel(w + 1)))