| ... | ... |
@@ -49,9 +49,14 @@ typedef struct Uxn {
|
| 49 | 49 |
Uint8 *ram; |
| 50 | 50 |
Stack wst, rst; |
| 51 | 51 |
Device dev[16]; |
| 52 |
+ Uint8 (*dei)(struct Uxn *u, Uint8 addr); |
|
| 53 |
+ void (*deo)(struct Uxn *u, Uint8 addr, Uint8 value); |
|
| 52 | 54 |
} Uxn; |
| 53 | 55 |
|
| 54 |
-int uxn_boot(Uxn *u, Uint8 *ram); |
|
| 56 |
+typedef Uint8 Dei(Uxn *u, Uint8 addr); |
|
| 57 |
+typedef void Deo(Uxn *u, Uint8 addr, Uint8 value); |
|
| 58 |
+ |
|
| 59 |
+int uxn_boot(Uxn *u, Uint8 *ram, Dei *dei, Deo *deo); |
|
| 55 | 60 |
int uxn_eval(Uxn *u, Uint16 pc); |
| 56 | 61 |
int uxn_interrupt(void); |
| 57 | 62 |
int uxn_halt(Uxn *u, Uint8 error, Uint16 addr); |
| ... | ... |
@@ -24,6 +24,17 @@ error(char *msg, const char *err) |
| 24 | 24 |
return 0; |
| 25 | 25 |
} |
| 26 | 26 |
|
| 27 |
+static Uint8 |
|
| 28 |
+emu_dei(Uxn *u, Uint8 addr) |
|
| 29 |
+{
|
|
| 30 |
+ return 0; |
|
| 31 |
+} |
|
| 32 |
+ |
|
| 33 |
+static void |
|
| 34 |
+emu_deo(Uxn *u, Uint8 addr, Uint8 v) |
|
| 35 |
+{
|
|
| 36 |
+} |
|
| 37 |
+ |
|
| 27 | 38 |
void |
| 28 | 39 |
system_deo_special(Device *d, Uint8 port) |
| 29 | 40 |
{
|
| ... | ... |
@@ -83,7 +94,7 @@ uxn_interrupt(void) |
| 83 | 94 |
static int |
| 84 | 95 |
start(Uxn *u) |
| 85 | 96 |
{
|
| 86 |
- if(!uxn_boot(u, (Uint8 *)calloc(0x10000, sizeof(Uint8)))) |
|
| 97 |
+ if(!uxn_boot(u, (Uint8 *)calloc(0x10000, sizeof(Uint8)), emu_dei, emu_deo)) |
|
| 87 | 98 |
return error("Boot", "Failed");
|
| 88 | 99 |
/* system */ uxn_port(u, 0x0, system_dei, system_deo); |
| 89 | 100 |
/* console */ uxn_port(u, 0x1, nil_dei, console_deo); |
| ... | ... |
@@ -176,6 +176,17 @@ init(void) |
| 176 | 176 |
|
| 177 | 177 |
#pragma mark - Devices |
| 178 | 178 |
|
| 179 |
+static Uint8 |
|
| 180 |
+emu_dei(Uxn *u, Uint8 addr) |
|
| 181 |
+{
|
|
| 182 |
+ return 0; |
|
| 183 |
+} |
|
| 184 |
+ |
|
| 185 |
+static void |
|
| 186 |
+emu_deo(Uxn *u, Uint8 addr, Uint8 v) |
|
| 187 |
+{
|
|
| 188 |
+} |
|
| 189 |
+ |
|
| 179 | 190 |
void |
| 180 | 191 |
system_deo_special(Device *d, Uint8 port) |
| 181 | 192 |
{
|
| ... | ... |
@@ -253,7 +264,7 @@ static int |
| 253 | 264 |
start(Uxn *u, char *rom) |
| 254 | 265 |
{
|
| 255 | 266 |
free(u->ram); |
| 256 |
- if(!uxn_boot(u, calloc(0x10000, 1))) |
|
| 267 |
+ if(!uxn_boot(u, calloc(0x10000, 1), emu_dei, emu_deo)) |
|
| 257 | 268 |
return error("Boot", "Failed to start uxn.");
|
| 258 | 269 |
if(!load(u, rom)) |
| 259 | 270 |
return error("Boot", "Failed to load rom.");
|