annotate render_sdl.c @ 380:1c8d74f2ab0b

Make the PSG and YM2612 use the master clock internal with an increment based on clock divider so that they stay perflectly in sync. Run both the PSG and YM2612 whenver one of them needs to be run.
author Mike Pavone <pavone@retrodev.com>
date Mon, 03 Jun 2013 21:43:38 -0700
parents 62177cc39049
children c26e48a93fa3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1 #include <SDL.h>
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
2 #include <stdlib.h>
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
3 #include <stdio.h>
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
4 #include "render.h"
66
7a22a0e6c004 Gamepad support
Mike Pavone <pavone@retrodev.com>
parents: 64
diff changeset
5 #include "blastem.h"
20
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
6
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
7 SDL_Surface *screen;
43
3fc57e1a2c56 Add debug render mode and fix vertical flip bit for bg tiles
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
8 uint8_t render_dbg = 0;
135
a81c548cf353 Fix 68K->VDP DMA
Mike Pavone <pavone@retrodev.com>
parents: 66
diff changeset
9 uint8_t debug_pal = 0;
20
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
10
54
3b79cbcf6846 Get Flavio's color bar demo kind of sort of working
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
11 uint32_t last_frame = 0;
3b79cbcf6846 Get Flavio's color bar demo kind of sort of working
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
12
229
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
13 int32_t color_map[1 << 12];
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
14 uint8_t levels[] = {0, 27, 49, 71, 87, 103, 119, 130, 146, 157, 174, 190, 206, 228, 255};
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
15
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
16 uint32_t min_delay;
342
13f994c88c34 Get frame time correct and frame rate sort of correct for EUR region
Mike Pavone <pavone@retrodev.com>
parents: 340
diff changeset
17 uint32_t frame_delay = 1000/60;
229
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
18
364
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
19 int16_t * current_psg = NULL;
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
20 int16_t * current_ym = NULL;
354
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
21
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
22 uint32_t buffer_samples, sample_rate;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
23 uint32_t missing_count;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
24
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
25 SDL_mutex * audio_mutex;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
26 SDL_cond * audio_ready;
364
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
27 SDL_cond * psg_cond;
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
28 SDL_cond * ym_cond;
361
946ae3749260 Fix deadlock on quit
Mike Pavone <pavone@retrodev.com>
parents: 356
diff changeset
29 uint8_t quitting = 0;
354
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
30
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
31 void audio_callback(void * userdata, uint8_t *byte_stream, int len)
20
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
32 {
354
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
33 //puts("audio_callback");
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
34 int16_t * stream = (int16_t *)byte_stream;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
35 int samples = len/(sizeof(int16_t)*2);
364
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
36 int16_t * psg_buf, * ym_buf;
361
946ae3749260 Fix deadlock on quit
Mike Pavone <pavone@retrodev.com>
parents: 356
diff changeset
37 uint8_t local_quit;
354
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
38 SDL_LockMutex(audio_mutex);
364
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
39 psg_buf = NULL;
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
40 ym_buf = NULL;
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
41 do {
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
42 if (!psg_buf) {
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
43 psg_buf = current_psg;
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
44 current_psg = NULL;
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
45 SDL_CondSignal(psg_cond);
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
46 }
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
47 if (!ym_buf) {
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
48 ym_buf = current_ym;
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
49 current_ym = NULL;
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
50 SDL_CondSignal(ym_cond);
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
51 }
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
52 if (!quitting && (!psg_buf || !ym_buf)) {
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
53 SDL_CondWait(audio_ready, audio_mutex);
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
54 }
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
55 } while(!quitting && (!psg_buf || !ym_buf));
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
56
361
946ae3749260 Fix deadlock on quit
Mike Pavone <pavone@retrodev.com>
parents: 356
diff changeset
57 local_quit = quitting;
354
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
58 SDL_UnlockMutex(audio_mutex);
361
946ae3749260 Fix deadlock on quit
Mike Pavone <pavone@retrodev.com>
parents: 356
diff changeset
59 if (!local_quit) {
946ae3749260 Fix deadlock on quit
Mike Pavone <pavone@retrodev.com>
parents: 356
diff changeset
60 for (int i = 0; i < samples; i++) {
364
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
61 *(stream++) = psg_buf[i] + *(ym_buf++);
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
62 *(stream++) = psg_buf[i] + *(ym_buf++);
361
946ae3749260 Fix deadlock on quit
Mike Pavone <pavone@retrodev.com>
parents: 356
diff changeset
63 }
354
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
64 }
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
65 }
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
66
361
946ae3749260 Fix deadlock on quit
Mike Pavone <pavone@retrodev.com>
parents: 356
diff changeset
67 void render_close_audio()
946ae3749260 Fix deadlock on quit
Mike Pavone <pavone@retrodev.com>
parents: 356
diff changeset
68 {
946ae3749260 Fix deadlock on quit
Mike Pavone <pavone@retrodev.com>
parents: 356
diff changeset
69 SDL_LockMutex(audio_mutex);
946ae3749260 Fix deadlock on quit
Mike Pavone <pavone@retrodev.com>
parents: 356
diff changeset
70 quitting = 1;
946ae3749260 Fix deadlock on quit
Mike Pavone <pavone@retrodev.com>
parents: 356
diff changeset
71 SDL_CondSignal(audio_ready);
946ae3749260 Fix deadlock on quit
Mike Pavone <pavone@retrodev.com>
parents: 356
diff changeset
72 SDL_UnlockMutex(audio_mutex);
946ae3749260 Fix deadlock on quit
Mike Pavone <pavone@retrodev.com>
parents: 356
diff changeset
73 SDL_CloseAudio();
946ae3749260 Fix deadlock on quit
Mike Pavone <pavone@retrodev.com>
parents: 356
diff changeset
74 }
946ae3749260 Fix deadlock on quit
Mike Pavone <pavone@retrodev.com>
parents: 356
diff changeset
75
354
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
76 void render_init(int width, int height, char * title, uint32_t fps)
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
77 {
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
78 if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0) {
20
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
79 fprintf(stderr, "Unable to init SDL: %s\n", SDL_GetError());
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
80 exit(1);
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
81 }
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
82 atexit(SDL_Quit);
361
946ae3749260 Fix deadlock on quit
Mike Pavone <pavone@retrodev.com>
parents: 356
diff changeset
83 atexit(render_close_audio);
33
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
84 printf("width: %d, height: %d\n", width, height);
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
85 screen = SDL_SetVideoMode(width, height, 32, SDL_SWSURFACE | SDL_ANYFORMAT);
20
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
86 if (!screen) {
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
87 fprintf(stderr, "Unable to get SDL surface: %s\n", SDL_GetError());
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
88 exit(1);
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
89 }
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
90 if (screen->format->BytesPerPixel < 2) {
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
91 fprintf(stderr, "BlastEm requires at least a 16-bit surface, SDL returned a %d-bit surface\n", screen->format->BytesPerPixel * 8);
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
92 exit(1);
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
93 }
340
58a085cfc6bd Set window title based on ROM header name
Mike Pavone <pavone@retrodev.com>
parents: 339
diff changeset
94 SDL_WM_SetCaption(title, title);
229
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
95 uint8_t b,g,r;
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
96 for (uint16_t color = 0; color < (1 << 12); color++) {
230
d3266cee02c9 Implemented shadow hilight mode.
Mike Pavone <pavone@retrodev.com>
parents: 229
diff changeset
97 if (color & FBUF_SHADOW) {
d3266cee02c9 Implemented shadow hilight mode.
Mike Pavone <pavone@retrodev.com>
parents: 229
diff changeset
98 b = levels[(color >> 9) & 0x7];
d3266cee02c9 Implemented shadow hilight mode.
Mike Pavone <pavone@retrodev.com>
parents: 229
diff changeset
99 g = levels[(color >> 5) & 0x7];
d3266cee02c9 Implemented shadow hilight mode.
Mike Pavone <pavone@retrodev.com>
parents: 229
diff changeset
100 r = levels[(color >> 1) & 0x7];
d3266cee02c9 Implemented shadow hilight mode.
Mike Pavone <pavone@retrodev.com>
parents: 229
diff changeset
101 } else if(color & FBUF_HILIGHT) {
d3266cee02c9 Implemented shadow hilight mode.
Mike Pavone <pavone@retrodev.com>
parents: 229
diff changeset
102 b = levels[((color >> 9) & 0x7) + 7];
d3266cee02c9 Implemented shadow hilight mode.
Mike Pavone <pavone@retrodev.com>
parents: 229
diff changeset
103 g = levels[((color >> 5) & 0x7) + 7];
d3266cee02c9 Implemented shadow hilight mode.
Mike Pavone <pavone@retrodev.com>
parents: 229
diff changeset
104 r = levels[((color >> 1) & 0x7) + 7];
d3266cee02c9 Implemented shadow hilight mode.
Mike Pavone <pavone@retrodev.com>
parents: 229
diff changeset
105 } else {
d3266cee02c9 Implemented shadow hilight mode.
Mike Pavone <pavone@retrodev.com>
parents: 229
diff changeset
106 b = levels[(color >> 8) & 0xE];
d3266cee02c9 Implemented shadow hilight mode.
Mike Pavone <pavone@retrodev.com>
parents: 229
diff changeset
107 g = levels[(color >> 4) & 0xE];
d3266cee02c9 Implemented shadow hilight mode.
Mike Pavone <pavone@retrodev.com>
parents: 229
diff changeset
108 r = levels[color & 0xE];
d3266cee02c9 Implemented shadow hilight mode.
Mike Pavone <pavone@retrodev.com>
parents: 229
diff changeset
109 }
229
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
110 color_map[color] = SDL_MapRGB(screen->format, r, g, b);
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
111 }
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
112 min_delay = 0;
339
80d934369fd5 Increase sample size for min_delay
Mike Pavone <pavone@retrodev.com>
parents: 338
diff changeset
113 for (int i = 0; i < 100; i++) {
229
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
114 uint32_t start = SDL_GetTicks();
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
115 SDL_Delay(1);
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
116 uint32_t delay = SDL_GetTicks()-start;
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
117 if (delay > min_delay) {
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
118 min_delay = delay;
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
119 }
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
120 }
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
121 if (!min_delay) {
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
122 min_delay = 1;
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
123 }
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
124 printf("minimum delay: %d\n", min_delay);
354
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
125
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
126 frame_delay = 1000/fps;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
127
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
128 audio_mutex = SDL_CreateMutex();
364
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
129 psg_cond = SDL_CreateCond();
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
130 ym_cond = SDL_CreateCond();
354
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
131 audio_ready = SDL_CreateCond();
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
132
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
133 SDL_AudioSpec desired, actual;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
134 desired.freq = 48000;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
135 desired.format = AUDIO_S16SYS;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
136 desired.channels = 2;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
137 desired.samples = 1024;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
138 desired.callback = audio_callback;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
139 desired.userdata = NULL;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
140
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
141 if (SDL_OpenAudio(&desired, &actual) < 0) {
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
142 fprintf(stderr, "Unable to open SDL audio: %s\n", SDL_GetError());
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
143 exit(1);
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
144 }
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
145 buffer_samples = actual.samples;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
146 sample_rate = actual.freq;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
147 printf("Initialized audio at frequency %d with a %d sample buffer\n", actual.freq, actual.samples);
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
148 SDL_PauseAudio(0);
20
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
149 }
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
150
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
151 void render_context(vdp_context * context)
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
152 {
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
153 uint8_t *buf_8;
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
154 uint16_t *buf_16;
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
155 uint32_t *buf_32;
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
156 uint8_t b,g,r;
54
3b79cbcf6846 Get Flavio's color bar demo kind of sort of working
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
157 last_frame = SDL_GetTicks();
20
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
158 if (SDL_MUSTLOCK(screen)) {
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
159 if (SDL_LockSurface(screen) < 0) {
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
160 return;
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
161 }
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
162 }
33
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
163 uint16_t repeat_x = screen->clip_rect.w / 320;
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
164 uint16_t repeat_y = screen->clip_rect.h / 240;
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
165 if (repeat_x > repeat_y) {
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
166 repeat_x = repeat_y;
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
167 } else {
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
168 repeat_y = repeat_x;
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
169 }
20
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
170 switch (screen->format->BytesPerPixel) {
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
171 case 2:
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
172 buf_16 = (uint16_t *)screen->pixels;
33
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
173 for (int y = 0; y < 240; y++) {
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
174 for (int i = 0; i < repeat_y; i++,buf_16 += screen->pitch/2) {
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
175 uint16_t *line = buf_16;
229
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
176 uint16_t *src_line = context->framebuf + y * 320;
33
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
177 for (int x = 0; x < 320; x++) {
229
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
178 uint16_t color = color_map[*(src_line++) & 0xFFF];
33
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
179 for (int j = 0; j < repeat_x; j++) {
229
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
180 *(line++) = color;
33
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
181 }
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
182 }
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
183 }
20
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
184 }
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
185 break;
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
186 case 3:
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
187 buf_8 = (uint8_t *)screen->pixels;
33
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
188 for (int y = 0; y < 240; y++) {
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
189 for (int i = 0; i < repeat_y; i++,buf_8 += screen->pitch) {
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
190 uint8_t *line = buf_8;
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
191 for (int x = 0; x < 320; x++) {
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
192 uint16_t gen_color = context->framebuf[y * 320 + x];
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
193 b = ((gen_color >> 8) & 0xE) * 18;
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
194 g = ((gen_color >> 4) & 0xE) * 18;
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
195 r = (gen_color& 0xE) * 18;
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
196 for (int j = 0; j < repeat_x; j++) {
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
197 *(buf_8+screen->format->Rshift/8) = r;
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
198 *(buf_8+screen->format->Gshift/8) = g;
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
199 *(buf_8+screen->format->Bshift/8) = b;
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
200 buf_8 += 3;
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
201 }
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
202 }
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
203 }
20
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
204 }
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
205 break;
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
206 case 4:
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
207 buf_32 = (uint32_t *)screen->pixels;
55
8317f174d916 Add palette debug to SDL renderer
Mike Pavone <pavone@retrodev.com>
parents: 54
diff changeset
208
8317f174d916 Add palette debug to SDL renderer
Mike Pavone <pavone@retrodev.com>
parents: 54
diff changeset
209 for (int y = 0; y < 240; y++) {
8317f174d916 Add palette debug to SDL renderer
Mike Pavone <pavone@retrodev.com>
parents: 54
diff changeset
210 for (int i = 0; i < repeat_y; i++,buf_32 += screen->pitch/4) {
8317f174d916 Add palette debug to SDL renderer
Mike Pavone <pavone@retrodev.com>
parents: 54
diff changeset
211 uint32_t *line = buf_32;
229
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
212 uint16_t *src_line = context->framebuf + y * 320;
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
213 for (int x = 0; x < 320; x++) {
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
214 uint32_t color;
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
215 if (!render_dbg) {
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
216 color = color_map[*(src_line++) & 0xFFF];
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
217 } else if(render_dbg == 2) {
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
218 color = color_map[context->cram[(y/30)*8 + x/40]];
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
219 } else if(render_dbg == 3) {
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
220 if (x & 1) {
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
221 color = color_map[context->cram[ (debug_pal << 4) | (context->vdpmem[(x/8)*32 + (y/8)*32*40 + (x%8)/2 + (y%8)*4] & 0xF) ]];
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
222 } else {
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
223 color = color_map[context->cram[ (debug_pal << 4) | (context->vdpmem[(x/8)*32 + (y/8)*32*40 + (x%8)/2 + (y%8)*4] >> 4) ]];
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
224 }
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
225 }else {
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
226 uint16_t gen_color = context->framebuf[y * 320 + x];
55
8317f174d916 Add palette debug to SDL renderer
Mike Pavone <pavone@retrodev.com>
parents: 54
diff changeset
227 r = g = b = 0;
8317f174d916 Add palette debug to SDL renderer
Mike Pavone <pavone@retrodev.com>
parents: 54
diff changeset
228 switch(gen_color & FBUF_SRC_MASK)
8317f174d916 Add palette debug to SDL renderer
Mike Pavone <pavone@retrodev.com>
parents: 54
diff changeset
229 {
8317f174d916 Add palette debug to SDL renderer
Mike Pavone <pavone@retrodev.com>
parents: 54
diff changeset
230 case FBUF_SRC_A:
8317f174d916 Add palette debug to SDL renderer
Mike Pavone <pavone@retrodev.com>
parents: 54
diff changeset
231 g = 127;
8317f174d916 Add palette debug to SDL renderer
Mike Pavone <pavone@retrodev.com>
parents: 54
diff changeset
232 break;
43
3fc57e1a2c56 Add debug render mode and fix vertical flip bit for bg tiles
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
233 case FBUF_SRC_W:
3fc57e1a2c56 Add debug render mode and fix vertical flip bit for bg tiles
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
234 g = 127;
3fc57e1a2c56 Add debug render mode and fix vertical flip bit for bg tiles
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
235 b = 127;
3fc57e1a2c56 Add debug render mode and fix vertical flip bit for bg tiles
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
236 break;
3fc57e1a2c56 Add debug render mode and fix vertical flip bit for bg tiles
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
237 case FBUF_SRC_B:
3fc57e1a2c56 Add debug render mode and fix vertical flip bit for bg tiles
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
238 b = 127;
3fc57e1a2c56 Add debug render mode and fix vertical flip bit for bg tiles
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
239 break;
3fc57e1a2c56 Add debug render mode and fix vertical flip bit for bg tiles
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
240 case FBUF_SRC_S:
3fc57e1a2c56 Add debug render mode and fix vertical flip bit for bg tiles
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
241 r = 127;
3fc57e1a2c56 Add debug render mode and fix vertical flip bit for bg tiles
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
242 break;
3fc57e1a2c56 Add debug render mode and fix vertical flip bit for bg tiles
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
243 case FBUF_SRC_BG:
3fc57e1a2c56 Add debug render mode and fix vertical flip bit for bg tiles
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
244 r = 127;
3fc57e1a2c56 Add debug render mode and fix vertical flip bit for bg tiles
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
245 b = 127;
55
8317f174d916 Add palette debug to SDL renderer
Mike Pavone <pavone@retrodev.com>
parents: 54
diff changeset
246 }
8317f174d916 Add palette debug to SDL renderer
Mike Pavone <pavone@retrodev.com>
parents: 54
diff changeset
247 if (gen_color & FBUF_BIT_PRIORITY) {
8317f174d916 Add palette debug to SDL renderer
Mike Pavone <pavone@retrodev.com>
parents: 54
diff changeset
248 b *= 2;
8317f174d916 Add palette debug to SDL renderer
Mike Pavone <pavone@retrodev.com>
parents: 54
diff changeset
249 g *= 2;
8317f174d916 Add palette debug to SDL renderer
Mike Pavone <pavone@retrodev.com>
parents: 54
diff changeset
250 r *= 2;
8317f174d916 Add palette debug to SDL renderer
Mike Pavone <pavone@retrodev.com>
parents: 54
diff changeset
251 }
234
f456ee23d372 Add shadow/higlight info to debug renderer
Mike Pavone <pavone@retrodev.com>
parents: 230
diff changeset
252 if (gen_color & FBUF_SHADOW) {
f456ee23d372 Add shadow/higlight info to debug renderer
Mike Pavone <pavone@retrodev.com>
parents: 230
diff changeset
253 b /= 2;
f456ee23d372 Add shadow/higlight info to debug renderer
Mike Pavone <pavone@retrodev.com>
parents: 230
diff changeset
254 g /= 2;
f456ee23d372 Add shadow/higlight info to debug renderer
Mike Pavone <pavone@retrodev.com>
parents: 230
diff changeset
255 r /= 2;
f456ee23d372 Add shadow/higlight info to debug renderer
Mike Pavone <pavone@retrodev.com>
parents: 230
diff changeset
256 } else if(gen_color & FBUF_HILIGHT) {
f456ee23d372 Add shadow/higlight info to debug renderer
Mike Pavone <pavone@retrodev.com>
parents: 230
diff changeset
257 b = b ? b : 64;
f456ee23d372 Add shadow/higlight info to debug renderer
Mike Pavone <pavone@retrodev.com>
parents: 230
diff changeset
258 g = g ? g : 64;
f456ee23d372 Add shadow/higlight info to debug renderer
Mike Pavone <pavone@retrodev.com>
parents: 230
diff changeset
259 r = r ? r : 64;
f456ee23d372 Add shadow/higlight info to debug renderer
Mike Pavone <pavone@retrodev.com>
parents: 230
diff changeset
260 }
229
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
261 color = SDL_MapRGB(screen->format, r, g, b);
43
3fc57e1a2c56 Add debug render mode and fix vertical flip bit for bg tiles
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
262 }
55
8317f174d916 Add palette debug to SDL renderer
Mike Pavone <pavone@retrodev.com>
parents: 54
diff changeset
263 for (int j = 0; j < repeat_x; j++) {
229
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
264 *(line++) = color;
55
8317f174d916 Add palette debug to SDL renderer
Mike Pavone <pavone@retrodev.com>
parents: 54
diff changeset
265 }
8317f174d916 Add palette debug to SDL renderer
Mike Pavone <pavone@retrodev.com>
parents: 54
diff changeset
266 }
8317f174d916 Add palette debug to SDL renderer
Mike Pavone <pavone@retrodev.com>
parents: 54
diff changeset
267 }
8317f174d916 Add palette debug to SDL renderer
Mike Pavone <pavone@retrodev.com>
parents: 54
diff changeset
268 }
8317f174d916 Add palette debug to SDL renderer
Mike Pavone <pavone@retrodev.com>
parents: 54
diff changeset
269 break;
8317f174d916 Add palette debug to SDL renderer
Mike Pavone <pavone@retrodev.com>
parents: 54
diff changeset
270 }
20
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
271 if ( SDL_MUSTLOCK(screen) ) {
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
272 SDL_UnlockSurface(screen);
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
273 }
33
2e15fa26fe58 Add support for simple resolution scaling
Mike Pavone <pavone@retrodev.com>
parents: 28
diff changeset
274 SDL_UpdateRect(screen, 0, 0, screen->clip_rect.w, screen->clip_rect.h);
20
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
275 }
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
276
43
3fc57e1a2c56 Add debug render mode and fix vertical flip bit for bg tiles
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
277 void render_wait_quit(vdp_context * context)
20
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
278 {
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
279 SDL_Event event;
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
280 while(SDL_WaitEvent(&event)) {
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
281 switch (event.type) {
43
3fc57e1a2c56 Add debug render mode and fix vertical flip bit for bg tiles
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
282 case SDL_KEYDOWN:
3fc57e1a2c56 Add debug render mode and fix vertical flip bit for bg tiles
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
283 if (event.key.keysym.sym == SDLK_LEFTBRACKET) {
55
8317f174d916 Add palette debug to SDL renderer
Mike Pavone <pavone@retrodev.com>
parents: 54
diff changeset
284 render_dbg++;
135
a81c548cf353 Fix 68K->VDP DMA
Mike Pavone <pavone@retrodev.com>
parents: 66
diff changeset
285 if (render_dbg == 4) {
55
8317f174d916 Add palette debug to SDL renderer
Mike Pavone <pavone@retrodev.com>
parents: 54
diff changeset
286 render_dbg = 0;
8317f174d916 Add palette debug to SDL renderer
Mike Pavone <pavone@retrodev.com>
parents: 54
diff changeset
287 }
43
3fc57e1a2c56 Add debug render mode and fix vertical flip bit for bg tiles
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
288 render_context(context);
135
a81c548cf353 Fix 68K->VDP DMA
Mike Pavone <pavone@retrodev.com>
parents: 66
diff changeset
289 } else if(event.key.keysym.sym == SDLK_RIGHTBRACKET) {
a81c548cf353 Fix 68K->VDP DMA
Mike Pavone <pavone@retrodev.com>
parents: 66
diff changeset
290 debug_pal++;
a81c548cf353 Fix 68K->VDP DMA
Mike Pavone <pavone@retrodev.com>
parents: 66
diff changeset
291 if (debug_pal == 4) {
a81c548cf353 Fix 68K->VDP DMA
Mike Pavone <pavone@retrodev.com>
parents: 66
diff changeset
292 debug_pal = 0;
a81c548cf353 Fix 68K->VDP DMA
Mike Pavone <pavone@retrodev.com>
parents: 66
diff changeset
293 }
43
3fc57e1a2c56 Add debug render mode and fix vertical flip bit for bg tiles
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
294 }
3fc57e1a2c56 Add debug render mode and fix vertical flip bit for bg tiles
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
295 break;
20
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
296 case SDL_QUIT:
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
297 return;
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
298 }
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
299 }
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
300 }
f664eeb55cb4 Mostly broken VDP core and savestate viewer
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
301
66
7a22a0e6c004 Gamepad support
Mike Pavone <pavone@retrodev.com>
parents: 64
diff changeset
302 #define DPAD_UP 0x01
7a22a0e6c004 Gamepad support
Mike Pavone <pavone@retrodev.com>
parents: 64
diff changeset
303 #define BUTTON_Z 0x01
7a22a0e6c004 Gamepad support
Mike Pavone <pavone@retrodev.com>
parents: 64
diff changeset
304 #define DPAD_DOWN 0x02
7a22a0e6c004 Gamepad support
Mike Pavone <pavone@retrodev.com>
parents: 64
diff changeset
305 #define BUTTON_Y 0x02
7a22a0e6c004 Gamepad support
Mike Pavone <pavone@retrodev.com>
parents: 64
diff changeset
306 #define DPAD_LEFT 0x04
7a22a0e6c004 Gamepad support
Mike Pavone <pavone@retrodev.com>
parents: 64
diff changeset
307 #define BUTTON_X 0x04
7a22a0e6c004 Gamepad support
Mike Pavone <pavone@retrodev.com>
parents: 64
diff changeset
308 #define DPAD_RIGHT 0x08
7a22a0e6c004 Gamepad support
Mike Pavone <pavone@retrodev.com>
parents: 64
diff changeset
309 #define BUTTON_MODE 0x08
7a22a0e6c004 Gamepad support
Mike Pavone <pavone@retrodev.com>
parents: 64
diff changeset
310 #define BUTTON_A 0x10
7a22a0e6c004 Gamepad support
Mike Pavone <pavone@retrodev.com>
parents: 64
diff changeset
311 #define BUTTON_B 0x10
7a22a0e6c004 Gamepad support
Mike Pavone <pavone@retrodev.com>
parents: 64
diff changeset
312 #define BUTTON_START 0x20
7a22a0e6c004 Gamepad support
Mike Pavone <pavone@retrodev.com>
parents: 64
diff changeset
313 #define BUTTON_C 0x20
7a22a0e6c004 Gamepad support
Mike Pavone <pavone@retrodev.com>
parents: 64
diff changeset
314
354
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
315 int32_t handle_event(SDL_Event *event)
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
316 {
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
317 FILE * outfile;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
318 switch (event->type) {
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
319 case SDL_KEYDOWN:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
320 switch(event->key.keysym.sym)
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
321 {
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
322 case SDLK_LEFTBRACKET:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
323 render_dbg++;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
324 if (render_dbg == 4) {
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
325 render_dbg = 0;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
326 }
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
327 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
328 case SDLK_RIGHTBRACKET:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
329 debug_pal++;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
330 if (debug_pal == 4) {
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
331 debug_pal = 0;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
332 }
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
333 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
334 case SDLK_t:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
335 /*outfile = fopen("state.gst", "wb");
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
336 fwrite("GST\0\0\0\xE0\x40", 1, 8, outfile);
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
337 vdp_save_state(context, outfile);
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
338 fclose(outfile);
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
339 puts("state saved to state.gst");*/
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
340 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
341 case SDLK_u:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
342 return 1;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
343 case SDLK_RETURN:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
344 gamepad_1.input[GAMEPAD_TH0] |= BUTTON_START;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
345 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
346 case SDLK_UP:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
347 gamepad_1.input[GAMEPAD_TH0] |= DPAD_UP;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
348 gamepad_1.input[GAMEPAD_TH1] |= DPAD_UP;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
349 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
350 case SDLK_DOWN:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
351 gamepad_1.input[GAMEPAD_TH0] |= DPAD_DOWN;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
352 gamepad_1.input[GAMEPAD_TH1] |= DPAD_DOWN;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
353 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
354 case SDLK_LEFT:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
355 gamepad_1.input[GAMEPAD_TH1] |= DPAD_LEFT;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
356 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
357 case SDLK_RIGHT:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
358 gamepad_1.input[GAMEPAD_TH1] |= DPAD_RIGHT;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
359 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
360 case SDLK_a:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
361 gamepad_1.input[GAMEPAD_TH0] |= BUTTON_A;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
362 //printf("BUTTON_A Dn | GAMEPAD_TH0: %X\n", gamepad_1.input[GAMEPAD_TH0]);
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
363 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
364 case SDLK_s:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
365 gamepad_1.input[GAMEPAD_TH1] |= BUTTON_B;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
366 gamepad_1.input[GAMEPAD_EXTRA] |= BUTTON_B;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
367 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
368 case SDLK_d:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
369 gamepad_1.input[GAMEPAD_TH1] |= BUTTON_C;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
370 gamepad_1.input[GAMEPAD_EXTRA] |= BUTTON_C;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
371 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
372 case SDLK_q:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
373 gamepad_1.input[GAMEPAD_EXTRA] |= BUTTON_X;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
374 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
375 case SDLK_w:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
376 gamepad_1.input[GAMEPAD_EXTRA] |= BUTTON_Y;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
377 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
378 case SDLK_e:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
379 gamepad_1.input[GAMEPAD_EXTRA] |= BUTTON_Z;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
380 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
381 case SDLK_f:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
382 gamepad_1.input[GAMEPAD_EXTRA] |= BUTTON_MODE;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
383 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
384 }
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
385 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
386 case SDL_KEYUP:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
387 switch(event->key.keysym.sym)
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
388 {
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
389 case SDLK_RETURN:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
390 gamepad_1.input[GAMEPAD_TH0] &= ~BUTTON_START;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
391 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
392 case SDLK_UP:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
393 gamepad_1.input[GAMEPAD_TH0] &= ~DPAD_UP;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
394 gamepad_1.input[GAMEPAD_TH1] &= ~DPAD_UP;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
395 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
396 case SDLK_DOWN:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
397 gamepad_1.input[GAMEPAD_TH0] &= ~DPAD_DOWN;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
398 gamepad_1.input[GAMEPAD_TH1] &= ~DPAD_DOWN;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
399 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
400 case SDLK_LEFT:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
401 gamepad_1.input[GAMEPAD_TH1] &= ~DPAD_LEFT;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
402 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
403 case SDLK_RIGHT:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
404 gamepad_1.input[GAMEPAD_TH1] &= ~DPAD_RIGHT;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
405 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
406 case SDLK_a:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
407 gamepad_1.input[GAMEPAD_TH0] &= ~BUTTON_A;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
408 //printf("BUTTON_A Up | GAMEPAD_TH0: %X\n", gamepad_1.input[GAMEPAD_TH0]);
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
409 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
410 case SDLK_s:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
411 gamepad_1.input[GAMEPAD_TH1] &= ~BUTTON_B;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
412 gamepad_1.input[GAMEPAD_EXTRA] &= ~BUTTON_B;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
413 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
414 case SDLK_d:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
415 gamepad_1.input[GAMEPAD_TH1] &= ~BUTTON_C;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
416 gamepad_1.input[GAMEPAD_EXTRA] &= ~BUTTON_C;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
417 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
418 case SDLK_q:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
419 gamepad_1.input[GAMEPAD_EXTRA] &= ~BUTTON_X;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
420 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
421 case SDLK_w:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
422 gamepad_1.input[GAMEPAD_EXTRA] &= ~BUTTON_Y;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
423 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
424 case SDLK_e:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
425 gamepad_1.input[GAMEPAD_EXTRA] &= ~BUTTON_Z;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
426 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
427 case SDLK_f:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
428 gamepad_1.input[GAMEPAD_EXTRA] &= ~BUTTON_MODE;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
429 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
430 }
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
431 break;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
432 case SDL_QUIT:
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
433 puts("");
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
434 exit(0);
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
435 }
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
436 return 0;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
437 }
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
438
63
a6dd5b7a971b Add FPS counter to console output
Mike Pavone <pavone@retrodev.com>
parents: 55
diff changeset
439 uint32_t frame_counter = 0;
a6dd5b7a971b Add FPS counter to console output
Mike Pavone <pavone@retrodev.com>
parents: 55
diff changeset
440 uint32_t start = 0;
338
5c34a9c39394 Re-enable frame limit, but add a command line flag to disable it
Mike Pavone <pavone@retrodev.com>
parents: 322
diff changeset
441 int wait_render_frame(vdp_context * context, int frame_limit)
54
3b79cbcf6846 Get Flavio's color bar demo kind of sort of working
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
442 {
3b79cbcf6846 Get Flavio's color bar demo kind of sort of working
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
443 SDL_Event event;
198
209a37eed3e7 Add support for breaking into the debugger while game is running
Mike Pavone <pavone@retrodev.com>
parents: 135
diff changeset
444 int ret = 0;
54
3b79cbcf6846 Get Flavio's color bar demo kind of sort of working
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
445 while(SDL_PollEvent(&event)) {
354
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
446 ret = handle_event(&event);
54
3b79cbcf6846 Get Flavio's color bar demo kind of sort of working
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
447 }
338
5c34a9c39394 Re-enable frame limit, but add a command line flag to disable it
Mike Pavone <pavone@retrodev.com>
parents: 322
diff changeset
448 if (frame_limit) {
5c34a9c39394 Re-enable frame limit, but add a command line flag to disable it
Mike Pavone <pavone@retrodev.com>
parents: 322
diff changeset
449 //TODO: Adjust frame delay so we actually get 60 FPS rather than 62.5 FPS
5c34a9c39394 Re-enable frame limit, but add a command line flag to disable it
Mike Pavone <pavone@retrodev.com>
parents: 322
diff changeset
450 uint32_t current = SDL_GetTicks();
342
13f994c88c34 Get frame time correct and frame rate sort of correct for EUR region
Mike Pavone <pavone@retrodev.com>
parents: 340
diff changeset
451 uint32_t desired = last_frame + frame_delay;
338
5c34a9c39394 Re-enable frame limit, but add a command line flag to disable it
Mike Pavone <pavone@retrodev.com>
parents: 322
diff changeset
452 if (current < desired) {
342
13f994c88c34 Get frame time correct and frame rate sort of correct for EUR region
Mike Pavone <pavone@retrodev.com>
parents: 340
diff changeset
453 uint32_t delay = last_frame + frame_delay - current;
13f994c88c34 Get frame time correct and frame rate sort of correct for EUR region
Mike Pavone <pavone@retrodev.com>
parents: 340
diff changeset
454 if (delay > min_delay) {
13f994c88c34 Get frame time correct and frame rate sort of correct for EUR region
Mike Pavone <pavone@retrodev.com>
parents: 340
diff changeset
455 SDL_Delay((delay/min_delay)*min_delay);
338
5c34a9c39394 Re-enable frame limit, but add a command line flag to disable it
Mike Pavone <pavone@retrodev.com>
parents: 322
diff changeset
456 }
5c34a9c39394 Re-enable frame limit, but add a command line flag to disable it
Mike Pavone <pavone@retrodev.com>
parents: 322
diff changeset
457 while ((desired) >= SDL_GetTicks()) {
5c34a9c39394 Re-enable frame limit, but add a command line flag to disable it
Mike Pavone <pavone@retrodev.com>
parents: 322
diff changeset
458 }
54
3b79cbcf6846 Get Flavio's color bar demo kind of sort of working
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
459 }
338
5c34a9c39394 Re-enable frame limit, but add a command line flag to disable it
Mike Pavone <pavone@retrodev.com>
parents: 322
diff changeset
460 }
54
3b79cbcf6846 Get Flavio's color bar demo kind of sort of working
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
461 render_context(context);
229
d60837a7d18a Improve color rendering accuracy and optimize SDL renderer a bit
Mike Pavone <pavone@retrodev.com>
parents: 198
diff changeset
462
272
9b04b57434b5 Implement LDI
Mike Pavone <pavone@retrodev.com>
parents: 237
diff changeset
463
64
2b1a65f4b85d Cleanup 68K timing code. Temporarily omment out fFPS counter as it was causing segfaults
Mike Pavone <pavone@retrodev.com>
parents: 63
diff changeset
464 //TODO: Figure out why this causes segfaults
272
9b04b57434b5 Implement LDI
Mike Pavone <pavone@retrodev.com>
parents: 237
diff changeset
465 /*frame_counter++;
63
a6dd5b7a971b Add FPS counter to console output
Mike Pavone <pavone@retrodev.com>
parents: 55
diff changeset
466 if ((last_frame - start) > 1000) {
272
9b04b57434b5 Implement LDI
Mike Pavone <pavone@retrodev.com>
parents: 237
diff changeset
467 if (start && (last_frame-start)) {
63
a6dd5b7a971b Add FPS counter to console output
Mike Pavone <pavone@retrodev.com>
parents: 55
diff changeset
468 printf("\r%f fps", ((float)frame_counter) / (((float)(last_frame-start)) / 1000.0));
a6dd5b7a971b Add FPS counter to console output
Mike Pavone <pavone@retrodev.com>
parents: 55
diff changeset
469 fflush(stdout);
a6dd5b7a971b Add FPS counter to console output
Mike Pavone <pavone@retrodev.com>
parents: 55
diff changeset
470 }
a6dd5b7a971b Add FPS counter to console output
Mike Pavone <pavone@retrodev.com>
parents: 55
diff changeset
471 start = last_frame;
a6dd5b7a971b Add FPS counter to console output
Mike Pavone <pavone@retrodev.com>
parents: 55
diff changeset
472 frame_counter = 0;
64
2b1a65f4b85d Cleanup 68K timing code. Temporarily omment out fFPS counter as it was causing segfaults
Mike Pavone <pavone@retrodev.com>
parents: 63
diff changeset
473 }*/
198
209a37eed3e7 Add support for breaking into the debugger while game is running
Mike Pavone <pavone@retrodev.com>
parents: 135
diff changeset
474 return ret;
54
3b79cbcf6846 Get Flavio's color bar demo kind of sort of working
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
475 }
3b79cbcf6846 Get Flavio's color bar demo kind of sort of working
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
476
364
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
477 void render_wait_psg(psg_context * context)
354
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
478 {
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
479 SDL_LockMutex(audio_mutex);
364
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
480 while (current_psg != NULL) {
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
481 SDL_CondWait(psg_cond, audio_mutex);
354
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
482 }
364
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
483 current_psg = context->audio_buffer;
354
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
484 SDL_CondSignal(audio_ready);
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
485
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
486 context->audio_buffer = context->back_buffer;
364
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
487 context->back_buffer = current_psg;
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
488 SDL_UnlockMutex(audio_mutex);
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
489 context->buffer_pos = 0;
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
490 }
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
491
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
492 void render_wait_ym(ym2612_context * context)
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
493 {
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
494 SDL_LockMutex(audio_mutex);
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
495 while (current_ym != NULL) {
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
496 SDL_CondWait(ym_cond, audio_mutex);
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
497 }
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
498 current_ym = context->audio_buffer;
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
499 SDL_CondSignal(audio_ready);
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
500
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
501 context->audio_buffer = context->back_buffer;
62177cc39049 Incredibly broken YM2612 support plus a fix to Z80 bus request
Mike Pavone <pavone@retrodev.com>
parents: 361
diff changeset
502 context->back_buffer = current_ym;
354
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
503 SDL_UnlockMutex(audio_mutex);
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
504 context->buffer_pos = 0;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
505 }
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
506
342
13f994c88c34 Get frame time correct and frame rate sort of correct for EUR region
Mike Pavone <pavone@retrodev.com>
parents: 340
diff changeset
507 void render_fps(uint32_t fps)
13f994c88c34 Get frame time correct and frame rate sort of correct for EUR region
Mike Pavone <pavone@retrodev.com>
parents: 340
diff changeset
508 {
13f994c88c34 Get frame time correct and frame rate sort of correct for EUR region
Mike Pavone <pavone@retrodev.com>
parents: 340
diff changeset
509 frame_delay = 1000/fps;
13f994c88c34 Get frame time correct and frame rate sort of correct for EUR region
Mike Pavone <pavone@retrodev.com>
parents: 340
diff changeset
510 }
54
3b79cbcf6846 Get Flavio's color bar demo kind of sort of working
Mike Pavone <pavone@retrodev.com>
parents: 43
diff changeset
511
354
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
512 uint32_t render_audio_buffer()
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
513 {
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
514 return buffer_samples;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
515 }
342
13f994c88c34 Get frame time correct and frame rate sort of correct for EUR region
Mike Pavone <pavone@retrodev.com>
parents: 340
diff changeset
516
354
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
517 uint32_t render_sample_rate()
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
518 {
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
519 return sample_rate;
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
520 }
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
521
15dd6418fe67 Initial PSG support. Mostly works, noise channel is borked though.
Mike Pavone <pavone@retrodev.com>
parents: 342
diff changeset
522