| ... | ... |
@@ -25,6 +25,8 @@ static Ppu ppu; |
| 25 | 25 |
static Apu apu; |
| 26 | 26 |
static Device *devsystem, *devscreen, *devmouse, *devkey, *devctrl, *devapu; |
| 27 | 27 |
|
| 28 |
+Uint8 zoom = 0, debug = 0, reqdraw = 0; |
|
| 29 |
+ |
|
| 28 | 30 |
int |
| 29 | 31 |
clamp(int val, int min, int max) |
| 30 | 32 |
{
|
| ... | ... |
@@ -48,27 +50,27 @@ void |
| 48 | 50 |
redraw(Uint32 *dst, Uxn *u) |
| 49 | 51 |
{
|
| 50 | 52 |
drawppu(&ppu); |
| 51 |
- if(ppu.debugger) |
|
| 53 |
+ if(debug) |
|
| 52 | 54 |
drawdebugger(&ppu, u->wst.dat, u->wst.ptr); |
| 53 | 55 |
SDL_UpdateTexture(gTexture, NULL, dst, ppu.width * sizeof(Uint32)); |
| 54 | 56 |
SDL_RenderClear(gRenderer); |
| 55 | 57 |
SDL_RenderCopy(gRenderer, gTexture, NULL, NULL); |
| 56 | 58 |
SDL_RenderPresent(gRenderer); |
| 57 |
- ppu.reqdraw = 0; |
|
| 59 |
+ reqdraw = 0; |
|
| 58 | 60 |
} |
| 59 | 61 |
|
| 60 | 62 |
void |
| 61 | 63 |
toggledebug(Uxn *u) |
| 62 | 64 |
{
|
| 63 |
- ppu.debugger = !ppu.debugger; |
|
| 65 |
+ debug = !debug; |
|
| 64 | 66 |
redraw(ppu.output, u); |
| 65 | 67 |
} |
| 66 | 68 |
|
| 67 | 69 |
void |
| 68 | 70 |
togglezoom(Uxn *u) |
| 69 | 71 |
{
|
| 70 |
- ppu.zoom = ppu.zoom == 3 ? 1 : ppu.zoom + 1; |
|
| 71 |
- SDL_SetWindowSize(gWindow, ppu.width * ppu.zoom, ppu.height * ppu.zoom); |
|
| 72 |
+ zoom = zoom == 3 ? 1 : zoom + 1; |
|
| 73 |
+ SDL_SetWindowSize(gWindow, ppu.width * zoom, ppu.height * zoom); |
|
| 72 | 74 |
redraw(ppu.output, u); |
| 73 | 75 |
} |
| 74 | 76 |
|
| ... | ... |
@@ -97,7 +99,7 @@ init(Uxn *u) |
| 97 | 99 |
return error("PPU", "Init failure");
|
| 98 | 100 |
if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0) |
| 99 | 101 |
return error("Init", SDL_GetError());
|
| 100 |
- gWindow = SDL_CreateWindow("Uxn", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, ppu.width * ppu.zoom, ppu.height * ppu.zoom, SDL_WINDOW_SHOWN);
|
|
| 102 |
+ gWindow = SDL_CreateWindow("Uxn", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, ppu.width * zoom, ppu.height * zoom, SDL_WINDOW_SHOWN);
|
|
| 101 | 103 |
if(gWindow == NULL) |
| 102 | 104 |
return error("Window", SDL_GetError());
|
| 103 | 105 |
gRenderer = SDL_CreateRenderer(gWindow, -1, 0); |
| ... | ... |
@@ -127,8 +129,8 @@ domouse(Uxn *u, SDL_Event *event) |
| 127 | 129 |
{
|
| 128 | 130 |
Uint8 flag = 0x00; |
| 129 | 131 |
Uint16 addr = devmouse->addr + 2; |
| 130 |
- Uint16 x = clamp(event->motion.x / ppu.zoom - ppu.pad, 0, ppu.hor * 8 - 1); |
|
| 131 |
- Uint16 y = clamp(event->motion.y / ppu.zoom - ppu.pad, 0, ppu.ver * 8 - 1); |
|
| 132 |
+ Uint16 x = clamp(event->motion.x / zoom - ppu.pad, 0, ppu.hor * 8 - 1); |
|
| 133 |
+ Uint16 y = clamp(event->motion.y / zoom - ppu.pad, 0, ppu.ver * 8 - 1); |
|
| 132 | 134 |
mempoke16(u, addr + 0, x); |
| 133 | 135 |
mempoke16(u, addr + 2, y); |
| 134 | 136 |
u->ram.dat[addr + 5] = 0x00; |
| ... | ... |
@@ -214,7 +216,7 @@ screen_poke(Uxn *u, Uint16 ptr, Uint8 b0, Uint8 b1) |
| 214 | 216 |
Uint16 x = (m[ptr] << 8) + m[ptr + 1]; |
| 215 | 217 |
Uint16 y = (m[ptr + 2] << 8) + m[ptr + 3]; |
| 216 | 218 |
putpixel(&ppu, b1 >> 4 & 0xf ? ppu.fg : ppu.bg, x, y, b1 & 0xf); |
| 217 |
- ppu.reqdraw = 1; |
|
| 219 |
+ reqdraw = 1; |
|
| 218 | 220 |
} |
| 219 | 221 |
return b1; |
| 220 | 222 |
} |
| ... | ... |
@@ -238,7 +240,7 @@ sprite_poke(Uxn *u, Uint16 ptr, Uint8 b0, Uint8 b1) |
| 238 | 240 |
continue; |
| 239 | 241 |
putpixel(&ppu, layer, x + h, y + v, ch1 ? blend % 4 : blend / 4); |
| 240 | 242 |
} |
| 241 |
- ppu.reqdraw = 1; |
|
| 243 |
+ reqdraw = 1; |
|
| 242 | 244 |
} |
| 243 | 245 |
return b1; |
| 244 | 246 |
} |
| ... | ... |
@@ -324,6 +326,7 @@ system_poke(Uxn *u, Uint16 ptr, Uint8 b0, Uint8 b1) |
| 324 | 326 |
Uint8 *m = u->ram.dat; |
| 325 | 327 |
m[PAGE_DEVICE + b0] = b1; |
| 326 | 328 |
loadtheme(&ppu, &m[PAGE_DEVICE + 0x0008]); |
| 329 |
+ reqdraw = 1; |
|
| 327 | 330 |
(void)ptr; |
| 328 | 331 |
return b1; |
| 329 | 332 |
} |
| ... | ... |
@@ -376,7 +379,7 @@ start(Uxn *u) |
| 376 | 379 |
} |
| 377 | 380 |
evaluxn(u, devscreen->vector); |
| 378 | 381 |
SDL_UnlockAudioDevice(audio_id); |
| 379 |
- if(ppu.reqdraw) |
|
| 382 |
+ if(reqdraw) |
|
| 380 | 383 |
redraw(ppu.output, u); |
| 381 | 384 |
elapsed = (SDL_GetPerformanceCounter() - start) / (double)SDL_GetPerformanceFrequency() * 1000.0f; |
| 382 | 385 |
SDL_Delay(clamp(16.666f - elapsed, 0, 1000)); |
| ... | ... |
@@ -388,7 +391,7 @@ int |
| 388 | 391 |
main(int argc, char **argv) |
| 389 | 392 |
{
|
| 390 | 393 |
Uxn u; |
| 391 |
- ppu.zoom = 2; |
|
| 394 |
+ zoom = 2; |
|
| 392 | 395 |
|
| 393 | 396 |
if(argc < 2) |
| 394 | 397 |
return error("Input", "Missing");
|