Browse code

Use calloc for memory array

neauoire authored on 01/01/2022 23:20:48
Showing 6 changed files
... ...
@@ -1,7 +1,9 @@
1 1
 ( dev/console )
2 2
 
3
-|00 @System $e &debug
4
-|10 @Console $8 &write
3
+%HALT   { #010f DEO }
4
+%EMIT   { #18 DEO }
5
+%DEBUG  { ;print-hex/byte JSR2 #0a EMIT }
6
+%DEBUG2 { ;print-hex JSR2 #0a EMIT }
5 7
 
6 8
 ( init )
7 9
 
... ...
@@ -9,11 +11,28 @@
9 11
 
10 12
 	;hello-word 
11 13
 	&while
12
-		( send ) LDAk .Console/write DEO
14
+		( send ) LDAk EMIT
15
+		#20 EMIT
16
+		DUP2 ;print-hex JSR2
17
+		#20 EMIT
18
+		LDAk ;print-hex/byte JSR2
19
+		#0a EMIT
13 20
 		INC2 LDAk ,&while JCN
14 21
 	POP2
15
-	( show debugger ) #01 .System/debug DEO
22
+	( stop ) HALT
16 23
 
17 24
 BRK
18 25
 
26
+@print-hex ( value* -- )
27
+
28
+	SWP ,&byte JSR 
29
+	&byte ( byte -- )
30
+		STHk #04 SFT ,&parse JSR #18 DEO
31
+		STHr #0f AND ,&parse JSR #18 DEO
32
+	JMP2r
33
+	&parse ( byte -- char ) DUP #09 GTH ,&above JCN #30 ADD JMP2r 
34
+	&above #57 ADD JMP2r
35
+
36
+JMP2r
37
+
19 38
 @hello-word "Hello 20 "Uxn!
20 39
\ No newline at end of file
... ...
@@ -4018,12 +4018,13 @@ error:
4018 4018
 }
4019 4019
 
4020 4020
 int
4021
-uxn_boot(Uxn *u)
4021
+uxn_boot(Uxn *u, Uint8 *memory)
4022 4022
 {
4023 4023
 	unsigned int i;
4024 4024
 	char *cptr = (char *)u;
4025 4025
 	for(i = 0; i < sizeof(*u); ++i)
4026 4026
 		cptr[i] = 0x00;
4027
+	u->ram.dat = memory;
4027 4028
 	return 1;
4028 4029
 }
4029 4030
 
... ...
@@ -136,12 +136,13 @@ uxn_eval(Uxn *u, Uint16 vec)
136 136
 /* clang-format on */
137 137
 
138 138
 int
139
-uxn_boot(Uxn *u)
139
+uxn_boot(Uxn *u, Uint8 *memory)
140 140
 {
141 141
 	Uint32 i;
142 142
 	char *cptr = (char *)u;
143 143
 	for(i = 0; i < sizeof(*u); ++i)
144 144
 		cptr[i] = 0x00;
145
+	u->ram.dat = memory;
145 146
 	return 1;
146 147
 }
147 148
 
... ...
@@ -24,7 +24,7 @@ typedef struct {
24 24
 
25 25
 typedef struct {
26 26
 	Uint16 ptr;
27
-	Uint8 dat[65536];
27
+	Uint8 *dat;
28 28
 } Memory;
29 29
 
30 30
 typedef struct Device {
... ...
@@ -44,7 +44,7 @@ typedef struct Uxn {
44 44
 void poke16(Uint8 *m, Uint16 a, Uint16 b);
45 45
 Uint16 peek16(Uint8 *m, Uint16 a);
46 46
 
47
-int uxn_boot(Uxn *c);
47
+int uxn_boot(Uxn *c, Uint8 *memory);
48 48
 int uxn_eval(Uxn *u, Uint16 vec);
49 49
 int uxn_halt(Uxn *u, Uint8 error, char *name, int id);
50 50
 Device *uxn_port(Uxn *u, Uint8 id, Uint8 (*deifn)(Device *, Uint8), void (*deofn)(Device *, Uint8));
... ...
@@ -1,4 +1,5 @@
1 1
 #include <stdio.h>
2
+#include <stdlib.h>
2 3
 #include <unistd.h>
3 4
 #include <time.h>
4 5
 #include "uxn.h"
... ...
@@ -147,7 +148,7 @@ load(Uxn *u, char *filepath)
147 148
 	FILE *f;
148 149
 	int r;
149 150
 	if(!(f = fopen(filepath, "rb"))) return 0;
150
-	r = fread(u->ram.dat + PAGE_PROGRAM, 1, sizeof(u->ram.dat) - PAGE_PROGRAM, f);
151
+	r = fread(u->ram.dat + PAGE_PROGRAM, 1, 0xffff - PAGE_PROGRAM, f);
151 152
 	fclose(f);
152 153
 	if(r < 1) return 0;
153 154
 	fprintf(stderr, "Loaded %s\n", filepath);
... ...
@@ -160,7 +161,7 @@ main(int argc, char **argv)
160 161
 	Uxn u;
161 162
 	int i, loaded = 0;
162 163
 
163
-	if(!uxn_boot(&u))
164
+	if(!uxn_boot(&u, (Uint8 *)calloc(0xffff, sizeof(Uint8))))
164 165
 		return error("Boot", "Failed");
165 166
 
166 167
 	/* system   */ devsystem = uxn_port(&u, 0x0, system_dei, system_deo);
... ...
@@ -273,7 +273,7 @@ load(Uxn *u, char *rom)
273 273
 	SDL_RWops *f;
274 274
 	int r;
275 275
 	if(!(f = SDL_RWFromFile(rom, "rb"))) return 0;
276
-	r = f->read(f, u->ram.dat + PAGE_PROGRAM, 1, sizeof(u->ram.dat) - PAGE_PROGRAM);
276
+	r = f->read(f, u->ram.dat + PAGE_PROGRAM, 1, 0xffff - PAGE_PROGRAM);
277 277
 	f->close(f);
278 278
 	if(r < 1) return 0;
279 279
 	fprintf(stderr, "Loaded %s\n", rom);
... ...
@@ -284,7 +284,8 @@ load(Uxn *u, char *rom)
284 284
 static int
285 285
 start(Uxn *u, char *rom)
286 286
 {
287
-	if(!uxn_boot(u))
287
+	Uint8 *memory = (Uint8 *)calloc(0xffff, sizeof(Uint8));
288
+	if(!uxn_boot(u, memory))
288 289
 		return error("Boot", "Failed to start uxn.");
289 290
 	if(!load(u, rom))
290 291
 		return error("Boot", "Failed to load rom.");