diff options
Diffstat (limited to 'apps/plugins/zxbox/zxbox.c')
-rw-r--r-- | apps/plugins/zxbox/zxbox.c | 293 |
1 files changed, 293 insertions, 0 deletions
diff --git a/apps/plugins/zxbox/zxbox.c b/apps/plugins/zxbox/zxbox.c new file mode 100644 index 0000000000..1ca63d0eb5 --- /dev/null +++ b/apps/plugins/zxbox/zxbox.c | |||
@@ -0,0 +1,293 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (c) 2006 Anton Romanov | ||
11 | * | ||
12 | * All files in this archive are subject to the GNU General Public License. | ||
13 | * See the file COPYING in the source tree root for full license agreement. | ||
14 | * | ||
15 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
16 | * KIND, either express or implied. | ||
17 | * | ||
18 | ****************************************************************************/ | ||
19 | |||
20 | #include "zxconfig.h" | ||
21 | |||
22 | PLUGIN_HEADER | ||
23 | |||
24 | struct plugin_api* rb; | ||
25 | |||
26 | #include "spkey_p.h" | ||
27 | |||
28 | spkeyboard kb_mkey; | ||
29 | bool exit_requested=false; | ||
30 | bool clear_kbd=0; | ||
31 | extern bool zxbox_menu(void); | ||
32 | |||
33 | /* DUMMIES ... to clean */ | ||
34 | unsigned int scrmul=0; | ||
35 | int privatemap; | ||
36 | int use_shm = 0; | ||
37 | int small_screen,pause_on_iconify; | ||
38 | int vga_pause_bg; | ||
39 | |||
40 | #ifdef USE_IRAM | ||
41 | extern char iramcopy[]; | ||
42 | extern char iramstart[]; | ||
43 | extern char iramend[]; | ||
44 | extern char iedata[]; | ||
45 | extern char iend[]; | ||
46 | #endif | ||
47 | |||
48 | #include "keymaps.h" | ||
49 | #include "zxvid_com.h" | ||
50 | #include "spmain.h" | ||
51 | #include "spperif.h" | ||
52 | |||
53 | struct zxbox_settings settings; | ||
54 | |||
55 | /* doesn't fit into .ibss */ | ||
56 | unsigned char image_array [ HEIGHT * WIDTH ]; | ||
57 | |||
58 | static int previous_state; | ||
59 | |||
60 | #ifdef USE_GRAY | ||
61 | static unsigned char *gbuf; | ||
62 | static unsigned int gbuf_size = 0; | ||
63 | #endif | ||
64 | |||
65 | long video_frames = 0; | ||
66 | long start_time = 0; | ||
67 | |||
68 | enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | ||
69 | { | ||
70 | |||
71 | rb = api; | ||
72 | #if CODEC == SWCODEC && !defined SIMULATOR | ||
73 | rb->pcm_play_stop(); | ||
74 | #endif | ||
75 | rb->splash(HZ, true, "Welcome to ZXBox"); | ||
76 | sp_init(); | ||
77 | |||
78 | #ifdef USE_IRAM | ||
79 | /* We need to stop audio playback in order to use IRAM */ | ||
80 | rb->audio_stop(); | ||
81 | |||
82 | rb->memcpy(iramstart, iramcopy, iramend-iramstart); | ||
83 | rb->memset(iedata, 0, iend - iedata); | ||
84 | #endif | ||
85 | |||
86 | #ifdef USE_GRAY | ||
87 | /* get the remainder of the plugin buffer */ | ||
88 | gbuf = (unsigned char *) rb->plugin_get_buffer(&gbuf_size); | ||
89 | #ifdef USE_BUFFERED_GRAY | ||
90 | gray_init(rb, gbuf, gbuf_size, true, LCD_WIDTH, LCD_HEIGHT, 15, 0, NULL); | ||
91 | #else | ||
92 | gray_init(rb, gbuf, gbuf_size, false, LCD_WIDTH, LCD_HEIGHT, 15, 0, NULL); | ||
93 | #endif /* USE_BUFFERED_GRAY */ | ||
94 | /* switch on grayscale overlay */ | ||
95 | gray_show(true); | ||
96 | #endif /* USE_GRAY */ | ||
97 | |||
98 | |||
99 | #if defined(HAVE_ADJUSTABLE_CPU_FREQ) | ||
100 | rb->cpu_boost(true); | ||
101 | #endif | ||
102 | |||
103 | start_time = *rb->current_tick; | ||
104 | start_spectemu(parameter); | ||
105 | |||
106 | #if defined(HAVE_ADJUSTABLE_CPU_FREQ) | ||
107 | rb->cpu_boost(false); | ||
108 | #endif | ||
109 | |||
110 | #ifdef USE_GRAY | ||
111 | gray_show(false); | ||
112 | gray_release(); | ||
113 | #endif | ||
114 | |||
115 | #if CODEC == SWCODEC && !defined SIMULATOR | ||
116 | rb->pcm_play_stop(); | ||
117 | #endif | ||
118 | |||
119 | return PLUGIN_OK; | ||
120 | } | ||
121 | |||
122 | void init_spect_key(void) | ||
123 | { | ||
124 | clear_keystates(); | ||
125 | init_basekeys(); | ||
126 | } | ||
127 | |||
128 | void spkb_process_events( int evenframe ) | ||
129 | { | ||
130 | |||
131 | if(evenframe){ | ||
132 | int ki; | ||
133 | #if (CONFIG_KEYPAD == IPOD_4G_PAD) || \ | ||
134 | (CONFIG_KEYPAD == IPOD_3G_PAD) | ||
135 | if (rb->button_hold()) | ||
136 | { | ||
137 | #if defined(HAVE_ADJUSTABLE_CPU_FREQ) | ||
138 | rb->cpu_boost(false); | ||
139 | #endif | ||
140 | exit_requested=1; | ||
141 | #ifdef USE_GRAY | ||
142 | gray_show(false); | ||
143 | #endif | ||
144 | return; | ||
145 | } | ||
146 | #endif | ||
147 | int buttons = rb->button_status(); | ||
148 | if ( buttons == previous_state ) | ||
149 | return; | ||
150 | previous_state = buttons; | ||
151 | #if (CONFIG_KEYPAD != IPOD_4G_PAD) && \ | ||
152 | (CONFIG_KEYPAD != IPOD_3G_PAD) | ||
153 | if (buttons & ZX_MENU) | ||
154 | { | ||
155 | #if defined(HAVE_ADJUSTABLE_CPU_FREQ) | ||
156 | rb->cpu_boost(false); | ||
157 | #endif | ||
158 | exit_requested=1; | ||
159 | #ifdef USE_GRAY | ||
160 | gray_show(false); | ||
161 | #endif | ||
162 | return; | ||
163 | } | ||
164 | #endif | ||
165 | spkb_state_changed = 1; | ||
166 | if (settings.kempston){ | ||
167 | if ( buttons & ZX_RIGHT ){ | ||
168 | ki = KS_TO_KEY(SK_KP_Right); | ||
169 | spkb_kbstate[ki].state = 1; | ||
170 | } | ||
171 | else if (buttons & ZX_LEFT){ | ||
172 | ki = KS_TO_KEY(SK_KP_Left); | ||
173 | spkb_kbstate[ki].state = 1; | ||
174 | |||
175 | } | ||
176 | else{ | ||
177 | ki = KS_TO_KEY(SK_KP_Right); | ||
178 | spkb_kbstate[ki].state = 0; | ||
179 | ki = KS_TO_KEY(SK_KP_Left); | ||
180 | spkb_kbstate[ki].state = 0; | ||
181 | |||
182 | } | ||
183 | if ( buttons & ZX_UP ){ | ||
184 | ki = KS_TO_KEY(SK_KP_Up); | ||
185 | spkb_kbstate[ki].state = 1; | ||
186 | } | ||
187 | else if (buttons & ZX_DOWN){ | ||
188 | ki = KS_TO_KEY(SK_KP_Down); | ||
189 | spkb_kbstate[ki].state = 1; | ||
190 | } | ||
191 | else{ | ||
192 | ki = KS_TO_KEY(SK_KP_Up); | ||
193 | spkb_kbstate[ki].state = 0; | ||
194 | ki = KS_TO_KEY(SK_KP_Down); | ||
195 | spkb_kbstate[ki].state = 0; | ||
196 | } | ||
197 | |||
198 | if ( buttons & ZX_SELECT ){ | ||
199 | ki = KS_TO_KEY(SK_KP_Insert); | ||
200 | spkb_kbstate[ki].state = 1; | ||
201 | } | ||
202 | else{ | ||
203 | ki = KS_TO_KEY(SK_KP_Insert); | ||
204 | spkb_kbstate[ki].state = 0; | ||
205 | } | ||
206 | |||
207 | } | ||
208 | else { | ||
209 | |||
210 | if ( buttons & ZX_RIGHT ){ | ||
211 | ki = KS_TO_KEY(intkeys[3]); | ||
212 | spkb_kbstate[ki].state = 1; | ||
213 | } | ||
214 | else{ | ||
215 | ki = KS_TO_KEY(intkeys[3]); | ||
216 | spkb_kbstate[ki].state = 0; | ||
217 | } | ||
218 | |||
219 | if ( buttons & ZX_LEFT ){ | ||
220 | ki = KS_TO_KEY(intkeys[2]); | ||
221 | spkb_kbstate[ki].state = 1; | ||
222 | } | ||
223 | else{ | ||
224 | ki = KS_TO_KEY(intkeys[2]); | ||
225 | spkb_kbstate[ki].state = 0; | ||
226 | } | ||
227 | |||
228 | if ( buttons & ZX_UP ){ | ||
229 | ki = KS_TO_KEY(intkeys[0]); | ||
230 | spkb_kbstate[ki].state = 1; | ||
231 | } | ||
232 | else{ | ||
233 | ki = KS_TO_KEY(intkeys[0]); | ||
234 | spkb_kbstate[ki].state = 0; | ||
235 | } | ||
236 | |||
237 | if ( buttons & ZX_DOWN ){ | ||
238 | ki = KS_TO_KEY(intkeys[1]); | ||
239 | spkb_kbstate[ki].state = 1; | ||
240 | } | ||
241 | else{ | ||
242 | ki = KS_TO_KEY(intkeys[1]); | ||
243 | spkb_kbstate[ki].state = 0; | ||
244 | } | ||
245 | |||
246 | if ( buttons & ZX_SELECT ){ | ||
247 | ki = KS_TO_KEY(intkeys[4]); | ||
248 | spkb_kbstate[ki].state = 1; | ||
249 | } | ||
250 | else{ | ||
251 | ki = KS_TO_KEY(intkeys[4]); | ||
252 | spkb_kbstate[ki].state = 0; | ||
253 | } | ||
254 | } | ||
255 | process_keys(); | ||
256 | } | ||
257 | } | ||
258 | |||
259 | void press_key(int c){ | ||
260 | spkb_state_changed = 1; | ||
261 | int ki; | ||
262 | if ( c == 'E' ) | ||
263 | ki = KS_TO_KEY(SK_KP_Enter); | ||
264 | else if (c == 'S' ) | ||
265 | ki = KS_TO_KEY(SK_KP_Space); | ||
266 | else | ||
267 | ki = KS_TO_KEY(c); | ||
268 | spkb_kbstate[ki].state = 1; | ||
269 | process_keys(); | ||
270 | } | ||
271 | |||
272 | void spkey_textmode(void) | ||
273 | { | ||
274 | } | ||
275 | |||
276 | void spkey_screenmode(void) | ||
277 | { | ||
278 | } | ||
279 | |||
280 | void spscr_refresh_colors(void) | ||
281 | { | ||
282 | } | ||
283 | |||
284 | void resize_spect_scr(int s) | ||
285 | { | ||
286 | /* just to disable warning */ | ||
287 | (void)s; | ||
288 | } | ||
289 | |||
290 | int display_keyboard(void) | ||
291 | { | ||
292 | return 0; | ||
293 | } | ||