... | ... |
@@ -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 |
|