...
|
...
|
@@ -69,10 +69,15 @@ clamp(int v, int min, int max)
|
69
|
69
|
static Uint8
|
70
|
70
|
audio_dei(int instance, Uint8 *d, Uint8 port)
|
71
|
71
|
{
|
|
72
|
+ Uint8 *addr;
|
|
73
|
+ Uint16 vu;
|
72
|
74
|
if(!audio_id) return d[port];
|
73
|
75
|
switch(port) {
|
74
|
76
|
case 0x4: return audio_get_vu(instance);
|
75
|
|
- case 0x2: POKE2(d + 0x2, audio_get_position(instance)); /* fall through */
|
|
77
|
+ case 0x2:
|
|
78
|
+ addr = d + 2;
|
|
79
|
+ vu = audio_get_position(instance);
|
|
80
|
+ POKE2(addr, vu); /* fall through */
|
76
|
81
|
default: return d[port];
|
77
|
82
|
}
|
78
|
83
|
}
|
...
|
...
|
@@ -353,8 +358,10 @@ handle_events(Uxn *u)
|
353
|
358
|
SDL_free(event.drop.file);
|
354
|
359
|
}
|
355
|
360
|
/* Audio */
|
356
|
|
- else if(event.type >= audio0_event && event.type < audio0_event + POLYPHONY)
|
357
|
|
- uxn_eval(u, PEEK2(&u->dev[0x30 + 0x10 * (event.type - audio0_event)]));
|
|
361
|
+ else if(event.type >= audio0_event && event.type < audio0_event + POLYPHONY) {
|
|
362
|
+ Uint8 *addr = &u->dev[0x30 + 0x10 * (event.type - audio0_event)];
|
|
363
|
+ uxn_eval(u, PEEK2(addr));
|
|
364
|
+ }
|
358
|
365
|
/* Mouse */
|
359
|
366
|
else if(event.type == SDL_MOUSEMOTION)
|
360
|
367
|
mouse_pos(u, &u->dev[0x90], clamp(event.motion.x - PAD, 0, uxn_screen.width - 1), clamp(event.motion.y - PAD, 0, uxn_screen.height - 1));
|
...
|
...
|
@@ -446,6 +453,7 @@ emu_run(Uxn *u, char *rom)
|
446
|
453
|
{
|
447
|
454
|
Uint64 next_refresh = 0;
|
448
|
455
|
Uint64 frame_interval = SDL_GetPerformanceFrequency() / 60;
|
|
456
|
+ Uint8 *vector_addr = &u->dev[0x20];
|
449
|
457
|
window_created = 1;
|
450
|
458
|
emu_window = SDL_CreateWindow(rom, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, (uxn_screen.width + PAD2) * zoom, (uxn_screen.height + PAD2) * zoom, SDL_WINDOW_SHOWN | SDL_WINDOW_ALLOW_HIGHDPI);
|
451
|
459
|
if(emu_window == NULL)
|
...
|
...
|
@@ -464,7 +472,7 @@ emu_run(Uxn *u, char *rom)
|
464
|
472
|
exec_deadline = now + deadline_interval;
|
465
|
473
|
if(!handle_events(u))
|
466
|
474
|
return 0;
|
467
|
|
- screen_vector = PEEK2(&u->dev[0x20]);
|
|
475
|
+ screen_vector = PEEK2(vector_addr);
|
468
|
476
|
if(now >= next_refresh) {
|
469
|
477
|
now = SDL_GetPerformanceCounter();
|
470
|
478
|
next_refresh = now + frame_interval;
|