2
* c610ui.c - Implementation of the c610-specific part of the UI.
5
* Ettore Perazzoli <ettore@comm2000.it>
6
* Andr� Fachat <a.fachat@physik.tu-chemnitz.de>
8
* This file is part of VICE, the Versatile Commodore Emulator.
9
* See README for copyright notice.
11
* This program is free software; you can redistribute it and/or modify
12
* it under the terms of the GNU General Public License as published by
13
* the Free Software Foundation; either version 2 of the License, or
14
* (at your option) any later version.
16
* This program is distributed in the hope that it will be useful,
17
* but WITHOUT ANY WARRANTY; without even the implied warranty of
18
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
* GNU General Public License for more details.
21
* You should have received a copy of the GNU General Public License
22
* along with this program; if not, write to the Free Software
23
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
37
#include "resources.h"
38
#include "uicommands.h"
40
#include "uidatasette.h"
42
#include "uijoystick2.h"
43
#include "uiperipheral.h"
45
#include "uiscreenshot.h"
46
#include "uisettings.h"
54
/* ------------------------------------------------------------------------- */
56
UI_MENU_DEFINE_RADIO(VideoStandard)
58
ui_menu_entry_t set_video_standard_submenu[] = {
59
{ N_("*PAL-G"), (ui_callback_t)radio_VideoStandard,
60
(ui_callback_data_t)DRIVE_SYNC_PAL, NULL },
61
{ N_("*NTSC-M"), (ui_callback_t)radio_VideoStandard,
62
(ui_callback_data_t)DRIVE_SYNC_NTSC, NULL },
66
/* ------------------------------------------------------------------------- */
68
static ui_menu_entry_t cbm2_romset_submenu[] = {
69
{ N_("Basic 128k, low chars"),
70
(ui_callback_t)ui_set_romset, (ui_callback_data_t)"rom128l.vrs", NULL },
71
{ N_("Basic 256k, low chars"),
72
(ui_callback_t)ui_set_romset, (ui_callback_data_t)"rom256l.vrs", NULL },
73
{ N_("Basic 128k, high chars"),
74
(ui_callback_t)ui_set_romset, (ui_callback_data_t)"rom128h.vrs", NULL },
75
{ N_("Basic 256k, high chars"),
76
(ui_callback_t)ui_set_romset, (ui_callback_data_t)"rom256h.vrs", NULL },
78
{ N_("Load new Kernal"),
79
(ui_callback_t)ui_load_rom_file,
80
(ui_callback_data_t)"KernalName", NULL },
81
{ N_("Load new Chargen"),
82
(ui_callback_t)ui_load_rom_file,
83
(ui_callback_data_t)"ChargenName", NULL },
85
{ N_("Load new Basic"),
86
(ui_callback_t)ui_load_rom_file,
87
(ui_callback_data_t)"BasicName", NULL },
88
{ N_("Unload Basic ROM"),
89
(ui_callback_t)ui_unload_rom_file,
90
(ui_callback_data_t)"BasicName", NULL },
92
{ N_("Load new Cart $1***"),
93
(ui_callback_t)ui_load_rom_file,
94
(ui_callback_data_t)"Cart1Name", NULL },
95
{ N_("Unload Cart $1***"),
96
(ui_callback_t)ui_unload_rom_file,
97
(ui_callback_data_t)"Cart1Name", NULL },
99
{ N_("Load new Cart $2-3***"),
100
(ui_callback_t)ui_load_rom_file,
101
(ui_callback_data_t)"Cart2Name", NULL },
102
{ N_("Unload Cart $2-3***"),
103
(ui_callback_t)ui_unload_rom_file,
104
(ui_callback_data_t)"Cart2Name", NULL },
106
{ N_("Load new Cart $4-5***"),
107
(ui_callback_t)ui_load_rom_file,
108
(ui_callback_data_t)"Cart4Name", NULL },
109
{ N_("Unload Cart $4-5***"),
110
(ui_callback_t)ui_unload_rom_file,
111
(ui_callback_data_t)"Cart4Name", NULL },
113
{ N_("Load new Cart $6-7***"),
114
(ui_callback_t)ui_load_rom_file,
115
(ui_callback_data_t)"Cart6Name", NULL },
116
{ N_("Unload Cart $6-7***"),
117
(ui_callback_t)ui_unload_rom_file,
118
(ui_callback_data_t)"Cart6Name", NULL },
120
{ N_("Load custom ROM set from file"),
121
(ui_callback_t)ui_load_romset, NULL, NULL },
122
{ N_("Dump ROM set definition to file"),
123
(ui_callback_t)ui_dump_romset, NULL, NULL },
127
/* ------------------------------------------------------------------------- */
129
UI_MENU_DEFINE_RADIO(ModelLine)
131
static ui_menu_entry_t c610_modelline_submenu[] = {
133
(ui_callback_t)radio_ModelLine, (ui_callback_data_t)0, NULL },
135
(ui_callback_t)radio_ModelLine, (ui_callback_data_t)1, NULL },
137
(ui_callback_t)radio_ModelLine, (ui_callback_data_t)2, NULL },
141
UI_MENU_DEFINE_RADIO(RamSize)
143
static ui_menu_entry_t c610_memsize_submenu[] = {
145
(ui_callback_t)radio_RamSize, (ui_callback_data_t)128, NULL },
147
(ui_callback_t)radio_RamSize, (ui_callback_data_t)256, NULL },
149
(ui_callback_t)radio_RamSize, (ui_callback_data_t)512, NULL },
151
(ui_callback_t)radio_RamSize, (ui_callback_data_t)1024, NULL },
155
static UI_CALLBACK(ui_set_model)
157
cbm2_set_model(UI_MENU_CB_PARAM, NULL);
161
static ui_menu_entry_t model_defaults_submenu[] = {
163
(ui_callback_t)ui_set_model, (ui_callback_data_t)"510", NULL },
165
(ui_callback_t)ui_set_model, (ui_callback_data_t)"610", NULL },
167
(ui_callback_t)ui_set_model, (ui_callback_data_t)"620", NULL },
169
(ui_callback_t)ui_set_model, (ui_callback_data_t)"620+", NULL },
171
(ui_callback_t)ui_set_model, (ui_callback_data_t)"710", NULL },
173
(ui_callback_t)ui_set_model, (ui_callback_data_t)"720", NULL },
175
(ui_callback_t)ui_set_model, (ui_callback_data_t)"720+", NULL },
181
/* this is partially modeled after the radio_* callbacks */
182
static UI_CALLBACK(set_KeyboardType)
184
int current_value, new_value = 2 * (int)UI_MENU_CB_PARAM;
185
extern char *keymap_file_resource_names[];
187
resources_get_value("KeymapIndex", (resource_value_t)¤t_value);
189
if ((current_value & ~1) != new_value) {
190
resources_set_value("KeymapIndex", (resource_value_t)
191
(current_value & 1) + new_value);
195
ui_menu_set_tick(w, current_value == new_value);
199
static ui_menu_entry_t c610_keybd_submenu[] = {
201
(ui_callback_t)set_KeyboardType, (ui_callback_data_t)1, NULL },
202
{ N_("*Business (UK)"),
203
(ui_callback_t)set_KeyboardType, (ui_callback_data_t)0, NULL },
209
UI_MENU_DEFINE_TOGGLE(Ram08)
210
UI_MENU_DEFINE_TOGGLE(Ram1)
211
UI_MENU_DEFINE_TOGGLE(Ram2)
212
UI_MENU_DEFINE_TOGGLE(Ram4)
213
UI_MENU_DEFINE_TOGGLE(Ram6)
214
UI_MENU_DEFINE_TOGGLE(RamC)
216
UI_CALLBACK(Cbm2modelMenu)
219
ui_menu_set_sensitive(w, !cbm2_is_c500());
223
static ui_menu_entry_t model_settings_submenu[] = {
224
{ N_("Model defaults"),
225
(ui_callback_t)Cbm2modelMenu, NULL, model_defaults_submenu },
228
NULL, NULL, cbm2_romset_submenu },
231
NULL, NULL, c610_memsize_submenu },
232
{ N_("Hardwired switches"),
233
NULL, NULL, c610_modelline_submenu },
235
{ N_("*Bank 15 $0800-$0FFF RAM"),
236
(ui_callback_t)toggle_Ram08, NULL, NULL },
237
{ N_("*Bank 15 $1000-$1FFF RAM"),
238
(ui_callback_t)toggle_Ram1, NULL, NULL },
239
{ N_("*Bank 15 $2000-$3FFF RAM"),
240
(ui_callback_t)toggle_Ram2, NULL, NULL },
241
{ N_("*Bank 15 $4000-$5FFF RAM"),
242
(ui_callback_t)toggle_Ram4, NULL, NULL },
243
{ N_("*Bank 15 $6000-$7FFF RAM"),
244
(ui_callback_t)toggle_Ram6, NULL, NULL },
245
{ N_("*Bank 15 $C000-$CFFF RAM"),
246
(ui_callback_t)toggle_RamC, NULL, NULL },
249
{ N_("Keyboard type"),
250
NULL, NULL, c610_keybd_submenu },
255
/* ------------------------------------------------------------------------- */
257
UI_MENU_DEFINE_RADIO(SidStereoAddressStart)
259
static ui_menu_entry_t set_sid_stereo_address_daxx_submenu[] = {
260
{ "*$DA20", (ui_callback_t)radio_SidStereoAddressStart,
261
(ui_callback_data_t)0xda20, NULL },
262
{ "*$DA40", (ui_callback_t)radio_SidStereoAddressStart,
263
(ui_callback_data_t)0xda40, NULL },
264
{ "*$DA60", (ui_callback_t)radio_SidStereoAddressStart,
265
(ui_callback_data_t)0xda60, NULL },
266
{ "*$DA80", (ui_callback_t)radio_SidStereoAddressStart,
267
(ui_callback_data_t)0xda80, NULL },
268
{ "*$DAA0", (ui_callback_t)radio_SidStereoAddressStart,
269
(ui_callback_data_t)0xdaa0, NULL },
270
{ "*$DAC0", (ui_callback_t)radio_SidStereoAddressStart,
271
(ui_callback_data_t)0xdac0, NULL },
272
{ "*$DAE0", (ui_callback_t)radio_SidStereoAddressStart,
273
(ui_callback_data_t)0xdae0, NULL },
277
UI_MENU_DEFINE_TOGGLE(SidStereo)
278
UI_MENU_DEFINE_TOGGLE(SidFilters)
281
UI_MENU_DEFINE_TOGGLE(SidUseResid)
284
static ui_menu_entry_t sid_submenu[] = {
286
(ui_callback_t)toggle_SidStereo, NULL, NULL },
287
{ N_("*Second SID base address"),
288
NULL, NULL, set_sid_stereo_address_daxx_submenu },
290
{ N_("*Emulate filters"),
291
(ui_callback_t)toggle_SidFilters, NULL, NULL },
293
NULL, NULL, sid_model_submenu },
296
{ N_("*Use reSID emulation"),
297
(ui_callback_t)toggle_SidUseResid, NULL, NULL },
298
{ N_("reSID sampling method"),
299
NULL, NULL, sid_resid_sampling_submenu },
300
{ N_("reSID resampling passband..."),
301
(ui_callback_t)set_sid_resid_passband, NULL, NULL },
306
UI_MENU_DEFINE_TOGGLE(Sound)
308
static ui_menu_entry_t sid_options_submenu[] = {
309
{ N_("*Enable sound playback"),
310
(ui_callback_t)toggle_Sound, NULL, NULL },
312
(ui_callback_t)toggle_SidStereo, NULL, NULL },
313
{ N_("*Second SID base address"),
314
NULL, NULL, set_sid_stereo_address_daxx_submenu },
317
{ N_("*Use reSID emulation"),
318
(ui_callback_t)toggle_SidUseResid, NULL, NULL },
320
{ N_("*Emulate filters"),
321
(ui_callback_t)toggle_SidFilters, NULL, NULL },
323
NULL, NULL, sid_model_submenu },
327
/* ------------------------------------------------------------------------- */
329
static ui_menu_entry_t c610_rs232_submenu[] = {
331
NULL, NULL, acia1_device_submenu },
333
{ N_("Serial 1 device..."), (ui_callback_t)set_rs232_device_file,
334
(ui_callback_data_t)"RsDevice1", NULL },
335
{ N_("Serial 1 baudrate"),
336
NULL, NULL, ser1_baud_submenu },
338
{ N_("Serial 2 device..."), (ui_callback_t)set_rs232_device_file,
339
(ui_callback_data_t)"RsDevice2", NULL },
340
{ N_("Serial 2 baudrate"),
341
NULL, NULL, ser2_baud_submenu },
343
{ N_("Dump filename..."), (ui_callback_t)set_rs232_dump_file,
344
(ui_callback_data_t)"RsDevice3", NULL },
346
{ N_("Program name to exec..."), (ui_callback_t)set_rs232_exec_file,
347
(ui_callback_data_t)"RsDevice4", NULL },
352
/* ------------------------------------------------------------------------- */
354
static UI_CALLBACK(CrtcMenu)
357
ui_menu_set_sensitive(w, !cbm2_is_c500());
361
static UI_CALLBACK(VicMenu)
364
ui_menu_set_sensitive(w, cbm2_is_c500());
368
static ui_menu_entry_t c610_menu[] = {
369
{ N_("CBM-II model settings"),
370
NULL, NULL, model_settings_submenu },
371
{ N_("RS232 settings"),
372
NULL, NULL, c610_rs232_submenu },
374
{ N_("*CRTC Screen color"),
375
(ui_callback_t)CrtcMenu, NULL, crtc_palette_submenu },
376
{ N_("*VIC-II settings"),
377
(ui_callback_t)VicMenu, NULL, vic_submenu },
378
{ N_("SID settings"),
379
NULL, NULL, sid_submenu },
383
/* ------------------------------------------------------------------------- */
385
static UI_CALLBACK(save_screenshot)
387
/* Where does the 1024 come from? */
389
int wid = (int)UI_MENU_CB_PARAM;
391
vsync_suspend_speed_eval();
393
/* The following code depends on a zeroed filename. */
394
memset(filename, 0, 1024);
396
if (ui_screenshot_dialog(filename, wid) < 0)
400
static ui_menu_entry_t ui_screenshot_commands_menu[] = {
401
{ N_("Screenshot..."),
402
(ui_callback_t)save_screenshot, (ui_callback_data_t)0, NULL },
406
/* ------------------------------------------------------------------------- */
408
int c610_ui_init(void)
410
ui_set_application_icon(c610_icon_data);
411
ui_set_left_menu(ui_menu_create("LeftMenu",
412
ui_disk_commands_menu,
414
ui_tape_commands_menu,
415
ui_datasette_commands_menu,
417
ui_directory_commands_menu,
419
ui_snapshot_commands_menu,
420
ui_screenshot_commands_menu,
422
ui_tool_commands_menu,
424
ui_help_commands_menu,
426
ui_run_commands_menu,
428
ui_exit_commands_menu,
431
ui_set_right_menu(ui_menu_create("RightMenu",
432
ui_performance_settings_menu,
434
ui_crtc_video_settings_menu,
435
ui_video_settings_menu,
436
#ifdef USE_XF86_EXTENSIONS
437
ui_fullscreen_settings_menu,
439
ui_keyboard_settings_menu,
440
ui_sound_settings_menu,
441
ui_par_drive_settings_menu,
442
ui_peripheral_settings_menu,
443
joystick_settings_menu,
447
ui_settings_settings_menu,
450
ui_set_tape_menu(ui_menu_create("TapeMenu",
451
ui_tape_commands_menu,
453
datasette_control_submenu,
455
ui_set_topmenu("TopLevelMenu",
457
ui_menu_create("File",
458
ui_smart_attach_commands_menu,
460
ui_disk_commands_menu,
462
ui_tape_commands_menu,
463
ui_datasette_commands_menu,
465
ui_directory_commands_menu,
467
ui_tool_commands_menu,
469
ui_run_commands_menu,
471
ui_exit_commands_menu,
474
ui_menu_create("Snapshot",
475
ui_snapshot_commands_submenu,
477
ui_screenshot_commands_menu,
480
ui_menu_create("Options",
481
ui_performance_settings_menu,
483
#ifdef USE_XF86_EXTENSIONS
484
ui_fullscreen_settings_menu,
487
joystick_options_submenu,
491
ui_drive_options_submenu,
494
ui_menu_create("Settings",
495
ui_crtc_video_settings_menu,
496
ui_video_settings_menu,
497
ui_peripheral_settings_menu,
498
ui_drive_settings_menu,
499
ui_keyboard_settings_menu,
500
joystick_settings_menu,
501
ui_sound_settings_menu,
502
ui_par_drive_settings_menu,
506
ui_settings_settings_menu,
508
/* Translators: RJ means right justify and should be
509
saved in your tranlation! e.g. german "RJHilfe" */
511
ui_menu_create("Help",
512
ui_help_commands_menu,
515
ui_set_speedmenu(ui_menu_create("SpeedMenu",
516
ui_performance_settings_menu,