summaryrefslogtreecommitdiff
path: root/apps/plugins/zxbox/zxbox.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/zxbox/zxbox.c')
-rw-r--r--apps/plugins/zxbox/zxbox.c293
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
22PLUGIN_HEADER
23
24struct plugin_api* rb;
25
26#include "spkey_p.h"
27
28spkeyboard kb_mkey;
29bool exit_requested=false;
30bool clear_kbd=0;
31extern bool zxbox_menu(void);
32
33/* DUMMIES ... to clean */
34unsigned int scrmul=0;
35int privatemap;
36int use_shm = 0;
37int small_screen,pause_on_iconify;
38int vga_pause_bg;
39
40#ifdef USE_IRAM
41extern char iramcopy[];
42extern char iramstart[];
43extern char iramend[];
44extern char iedata[];
45extern char iend[];
46#endif
47
48#include "keymaps.h"
49#include "zxvid_com.h"
50#include "spmain.h"
51#include "spperif.h"
52
53struct zxbox_settings settings;
54
55/* doesn't fit into .ibss */
56unsigned char image_array [ HEIGHT * WIDTH ];
57
58static int previous_state;
59
60#ifdef USE_GRAY
61static unsigned char *gbuf;
62static unsigned int gbuf_size = 0;
63#endif
64
65long video_frames = 0;
66long start_time = 0;
67
68enum 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
111gray_show(false);
112gray_release();
113#endif
114
115#if CODEC == SWCODEC && !defined SIMULATOR
116 rb->pcm_play_stop();
117#endif
118
119return PLUGIN_OK;
120}
121
122void init_spect_key(void)
123{
124 clear_keystates();
125 init_basekeys();
126}
127
128void 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
259void 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
272void spkey_textmode(void)
273{
274}
275
276void spkey_screenmode(void)
277{
278}
279
280void spscr_refresh_colors(void)
281{
282}
283
284void resize_spect_scr(int s)
285{
286 /* just to disable warning */
287 (void)s;
288}
289
290int display_keyboard(void)
291{
292 return 0;
293}