... | ... |
@@ -120,7 +120,7 @@ screen_resize(Uint16 width, Uint16 height) |
120 | 120 |
{ |
121 | 121 |
Uint8 *bg, *fg; |
122 | 122 |
Uint32 *pixels = NULL; |
123 |
- if(width < 0x8 || height < 0x8 || width >= 0x400 || height >= 0x400) |
|
123 |
+ if(width < 0x8 || height < 0x8 || width >= 0x800 || height >= 0x800) |
|
124 | 124 |
return; |
125 | 125 |
if(uxn_screen.width == width && uxn_screen.height == height) |
126 | 126 |
return; |
... | ... |
@@ -116,6 +116,16 @@ system_init(Uxn *u, Uint8 *ram, char *rom) |
116 | 116 |
|
117 | 117 |
/* IO */ |
118 | 118 |
|
119 |
+Uint8 |
|
120 |
+system_dei(Uxn *u, Uint8 addr) |
|
121 |
+{ |
|
122 |
+ switch(addr) { |
|
123 |
+ case 0x4: return u->wst.ptr; |
|
124 |
+ case 0x5: return u->rst.ptr; |
|
125 |
+ default: return u->dev[addr]; |
|
126 |
+ } |
|
127 |
+} |
|
128 |
+ |
|
119 | 129 |
void |
120 | 130 |
system_deo(Uxn *u, Uint8 *d, Uint8 port) |
121 | 131 |
{ |
... | ... |
@@ -134,6 +144,12 @@ system_deo(Uxn *u, Uint8 *d, Uint8 port) |
134 | 144 |
ram[dst + (Uint16)(b_addr + i)] = ram[src + (Uint16)(a_addr + i)]; |
135 | 145 |
} |
136 | 146 |
break; |
147 |
+ case 0x4: |
|
148 |
+ u->wst.ptr = d[4]; |
|
149 |
+ break; |
|
150 |
+ case 0x5: |
|
151 |
+ u->rst.ptr = d[5]; |
|
152 |
+ break; |
|
137 | 153 |
case 0xe: |
138 | 154 |
system_inspect(u); |
139 | 155 |
break; |
... | ... |
@@ -9,9 +9,9 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
9 | 9 |
WITH REGARD TO THIS SOFTWARE. |
10 | 10 |
*/ |
11 | 11 |
|
12 |
-#define SYSTEM_VERSION 1 |
|
13 |
-#define SYSTEM_DEIMASK 0x0000 |
|
14 |
-#define SYSTEM_DEOMASK 0xff08 |
|
12 |
+#define SYSTEM_VERSION 2 |
|
13 |
+#define SYSTEM_DEIMASK 0x0030 |
|
14 |
+#define SYSTEM_DEOMASK 0xff38 |
|
15 | 15 |
|
16 | 16 |
#define RAM_PAGES 0x10 |
17 | 17 |
|
... | ... |
@@ -24,4 +24,5 @@ int system_version(Uxn *u, char *emulator, char *date); |
24 | 24 |
int system_error(char *msg, const char *err); |
25 | 25 |
int system_init(Uxn *u, Uint8 *ram, char *rom); |
26 | 26 |
|
27 |
+Uint8 system_dei(Uxn *u, Uint8 addr); |
|
27 | 28 |
void system_deo(Uxn *u, Uint8 *d, Uint8 port); |
... | ... |
@@ -24,6 +24,7 @@ Uint8 |
24 | 24 |
emu_dei(Uxn *u, Uint8 addr) |
25 | 25 |
{ |
26 | 26 |
switch(addr & 0xf0) { |
27 |
+ case 0x00: return system_dei(u, addr); |
|
27 | 28 |
case 0xc0: return datetime_dei(u, addr); |
28 | 29 |
} |
29 | 30 |
return u->dev[addr]; |
... | ... |
@@ -73,7 +74,7 @@ main(int argc, char **argv) |
73 | 74 |
system_connect(&u, 0xc, DATETIME_VERSION, DATETIME_DEIMASK, DATETIME_DEOMASK); |
74 | 75 |
/* Read flags */ |
75 | 76 |
if(argv[i][0] == '-' && argv[i][1] == 'v') |
76 |
- return system_version(&u, "Uxncli - Console Varvara Emulator", "17 Aug 2023"); |
|
77 |
+ return system_version(&u, "Uxncli - Console Varvara Emulator", "19 Aug 2023"); |
|
77 | 78 |
if(!system_init(&u, (Uint8 *)calloc(0x10000 * RAM_PAGES, sizeof(Uint8)), argv[i++])) |
78 | 79 |
return system_error("Init", "Failed to initialize uxn."); |
79 | 80 |
/* Game Loop */ |
... | ... |
@@ -96,6 +96,7 @@ emu_dei(Uxn *u, Uint8 addr) |
96 | 96 |
{ |
97 | 97 |
Uint8 p = addr & 0x0f, d = addr & 0xf0; |
98 | 98 |
switch(d) { |
99 |
+ case 0x00: return system_dei(u, addr); |
|
99 | 100 |
case 0x20: return screen_dei(u, addr); |
100 | 101 |
case 0x30: return audio_dei(0, &u->dev[d], p); |
101 | 102 |
case 0x40: return audio_dei(1, &u->dev[d], p); |
... | ... |
@@ -516,7 +517,7 @@ main(int argc, char **argv) |
516 | 517 |
system_connect(&u, 0xc, DATETIME_VERSION, DATETIME_DEIMASK, DATETIME_DEOMASK); |
517 | 518 |
/* Read flags */ |
518 | 519 |
if(argv[i][0] == '-' && argv[i][1] == 'v') |
519 |
- return system_version(&u, "Uxnemu - Graphical Varvara Emulator", "17 Aug 2023"); |
|
520 |
+ return system_version(&u, "Uxnemu - Graphical Varvara Emulator", "19 Aug 2023"); |
|
520 | 521 |
if(strcmp(argv[i], "-2x") == 0 || strcmp(argv[i], "-3x") == 0) |
521 | 522 |
set_zoom(argv[i++][1] - '0', 0); |
522 | 523 |
if(!emu_init()) |