| ... | ... |
@@ -82,6 +82,38 @@ console_deo(Uint8 *d, Uint8 port) |
| 82 | 82 |
} |
| 83 | 83 |
} |
| 84 | 84 |
|
| 85 |
+static Uint8 |
|
| 86 |
+emu_dei(Uxn *u, Uint8 addr) |
|
| 87 |
+{
|
|
| 88 |
+ Uint8 p = addr & 0x0f, d = addr & 0xf0; |
|
| 89 |
+ switch(d) {
|
|
| 90 |
+ case 0x20: return screen_dei(&u->dev[d], p); |
|
| 91 |
+ case 0xa0: return file_dei(0, &u->dev[d], p); |
|
| 92 |
+ case 0xb0: return file_dei(1, &u->dev[d], p); |
|
| 93 |
+ case 0xc0: return datetime_dei(&u->dev[d], p); |
|
| 94 |
+ } |
|
| 95 |
+ return u->dev[addr]; |
|
| 96 |
+ return 0; |
|
| 97 |
+} |
|
| 98 |
+ |
|
| 99 |
+static void |
|
| 100 |
+emu_deo(Uxn *u, Uint8 addr, Uint8 v) |
|
| 101 |
+{
|
|
| 102 |
+ Uint8 p = addr & 0x0f, d = addr & 0xf0; |
|
| 103 |
+ u->dev[addr] = v; |
|
| 104 |
+ switch(d) {
|
|
| 105 |
+ case 0x00: |
|
| 106 |
+ system_deo(u, &u->dev[d], p); |
|
| 107 |
+ if(p > 0x7 && p < 0xe) |
|
| 108 |
+ screen_palette(&uxn_screen, &u->dev[0x8]); |
|
| 109 |
+ break; |
|
| 110 |
+ case 0x10: console_deo(&u->dev[d], p); break; |
|
| 111 |
+ case 0x20: screen_deo(u->ram, &u->dev[d], p); break; |
|
| 112 |
+ case 0xa0: file_deo(0, u->ram, &u->dev[d], p); break; |
|
| 113 |
+ case 0xb0: file_deo(1, u->ram, &u->dev[d], p); break; |
|
| 114 |
+ } |
|
| 115 |
+} |
|
| 116 |
+ |
|
| 85 | 117 |
#pragma mark - Generics |
| 86 | 118 |
|
| 87 | 119 |
static void |
| ... | ... |
@@ -127,7 +159,7 @@ set_window_size(SDL_Window *window, int w, int h) |
| 127 | 159 |
SDL_SetWindowSize(window, w, h); |
| 128 | 160 |
} |
| 129 | 161 |
|
| 130 |
-int |
|
| 162 |
+static int |
|
| 131 | 163 |
set_size(void) |
| 132 | 164 |
{
|
| 133 | 165 |
gRect.x = PAD; |
| ... | ... |
@@ -195,45 +227,6 @@ init(void) |
| 195 | 227 |
|
| 196 | 228 |
#pragma mark - Devices |
| 197 | 229 |
|
| 198 |
-static Uint8 |
|
| 199 |
-emu_dei(Uxn *u, Uint8 addr) |
|
| 200 |
-{
|
|
| 201 |
- Uint8 p = addr & 0x0f, d = addr & 0xf0; |
|
| 202 |
- switch(d) {
|
|
| 203 |
- case 0x20: return screen_dei(&u->dev[d], p); |
|
| 204 |
- case 0xa0: return file_dei(0, &u->dev[d], p); |
|
| 205 |
- case 0xb0: return file_dei(1, &u->dev[d], p); |
|
| 206 |
- case 0xc0: return datetime_dei(&u->dev[d], p); |
|
| 207 |
- } |
|
| 208 |
- return u->dev[addr]; |
|
| 209 |
- return 0; |
|
| 210 |
-} |
|
| 211 |
- |
|
| 212 |
-static void |
|
| 213 |
-emu_deo(Uxn *u, Uint8 addr, Uint8 v) |
|
| 214 |
-{
|
|
| 215 |
- Uint8 p = addr & 0x0f, d = addr & 0xf0; |
|
| 216 |
- u->dev[addr] = v; |
|
| 217 |
- switch(d) {
|
|
| 218 |
- case 0x00: |
|
| 219 |
- system_deo(u, &u->dev[d], p); |
|
| 220 |
- if(p > 0x7 && p < 0xe) |
|
| 221 |
- screen_palette(&uxn_screen, &u->dev[0x8]); |
|
| 222 |
- break; |
|
| 223 |
- case 0x10: console_deo(&u->dev[d], p); break; |
|
| 224 |
- case 0x20: screen_deo(u->ram, &u->dev[d], p); break; |
|
| 225 |
- case 0xa0: file_deo(0, u->ram, &u->dev[d], p); break; |
|
| 226 |
- case 0xb0: file_deo(1, u->ram, &u->dev[d], p); break; |
|
| 227 |
- } |
|
| 228 |
-} |
|
| 229 |
- |
|
| 230 |
-void |
|
| 231 |
-system_deo_special(Device *d, Uint8 port) |
|
| 232 |
-{
|
|
| 233 |
- if(port > 0x7 && port < 0xe) |
|
| 234 |
- screen_palette(&uxn_screen, &d->dat[0x8]); |
|
| 235 |
-} |
|
| 236 |
- |
|
| 237 | 230 |
static Uint8 |
| 238 | 231 |
audio_dei(Device *d, Uint8 port) |
| 239 | 232 |
{
|
| ... | ... |
@@ -261,32 +254,18 @@ audio_deo(Device *d, Uint8 port) |
| 261 | 254 |
|
| 262 | 255 |
/* Boot */ |
| 263 | 256 |
|
| 264 |
-static int |
|
| 265 |
-load(Uxn *u, char *rom) |
|
| 266 |
-{
|
|
| 267 |
- SDL_RWops *f; |
|
| 268 |
- int r; |
|
| 269 |
- if(!(f = SDL_RWFromFile(rom, "rb"))) return 0; |
|
| 270 |
- r = f->read(f, u->ram + PAGE_PROGRAM, 1, 0x10000 - PAGE_PROGRAM); |
|
| 271 |
- f->close(f); |
|
| 272 |
- if(r < 1) return 0; |
|
| 273 |
- fprintf(stderr, "Loaded %s\n", rom); |
|
| 274 |
- fflush(stderr); |
|
| 275 |
- SDL_SetWindowTitle(gWindow, rom); |
|
| 276 |
- return 1; |
|
| 277 |
-} |
|
| 278 |
- |
|
| 279 | 257 |
static int |
| 280 | 258 |
start(Uxn *u, char *rom) |
| 281 | 259 |
{
|
| 282 | 260 |
free(u->ram); |
| 283 | 261 |
if(!uxn_boot(u, (Uint8 *)calloc(0x10300, sizeof(Uint8)), emu_dei, emu_deo)) |
| 284 | 262 |
return error("Boot", "Failed to start uxn.");
|
| 285 |
- if(!load(u, rom)) |
|
| 263 |
+ if(!load_rom(u, rom)) |
|
| 286 | 264 |
return error("Boot", "Failed to load rom.");
|
| 287 | 265 |
exec_deadline = SDL_GetPerformanceCounter() + deadline_interval; |
| 288 | 266 |
if(!uxn_eval(u, PAGE_PROGRAM)) |
| 289 |
- return error("Boot", "Failed to start rom.");
|
|
| 267 |
+ return error("Boot", "Failed to eval rom.");
|
|
| 268 |
+ SDL_SetWindowTitle(gWindow, rom); |
|
| 290 | 269 |
return 1; |
| 291 | 270 |
} |
| 292 | 271 |
|