From 0646927e7a8cca73da01607bcb7336e18cb3f332 Mon Sep 17 00:00:00 2001 From: Dimitris Panokostas Date: Fri, 29 Sep 2017 17:21:56 +0200 Subject: [PATCH] Brought back several PANDORA specific items, using #ifdef PANDORA to enable them conditionally --- src/drawing.cpp | 15 +++- src/include/inputdevice.h | 10 +-- src/inputdevice.cpp | 40 +++++---- src/osdep/amiberry.cpp | 148 ++++++++++++++++++++++++++++++++- src/osdep/amiberry_gfx.cpp | 9 ++ src/osdep/amiberry_gui.cpp | 11 +++ src/osdep/amiberry_rp9.cpp | 3 + src/osdep/gui/PanelDisplay.cpp | 61 +++++++++++++- src/osdep/gui/PanelMisc.cpp | 14 ++-- src/osdep/target.h | 2 + 10 files changed, 274 insertions(+), 39 deletions(-) diff --git a/src/drawing.cpp b/src/drawing.cpp index e206d8eb..cae77ced 100644 --- a/src/drawing.cpp +++ b/src/drawing.cpp @@ -1876,7 +1876,7 @@ void init_row_map(void) static void init_aspect_maps() { - int i, maxl, h; + int i, h; h = gfxvidinfo.drawbuffer.outheight; @@ -1889,15 +1889,18 @@ static void init_aspect_maps() native2amiga_line_map = xmalloc(int, h); - maxl = (MAXVPOS + 1); + int maxl = (MAXVPOS + 1); for (i = 0; i < h; i++) native2amiga_line_map[i] = -1; for (i = maxl - 1; i >= minfirstline; i--) { - int j; - for (j = i - minfirstline; j < h && native2amiga_line_map[j] == -1; j++) + for (int j = i - minfirstline; j < h && native2amiga_line_map[j] == -1; j++) +#ifdef PANDORA + native2amiga_line_map[j] = i + currprefs.pandora_vertical_offset; +#else native2amiga_line_map[j] = i; +#endif } } @@ -2204,7 +2207,11 @@ static void center_image(void) linetoscr_x_adjust_pixels = visible_left_border; linetoscr_x_adjust_pixbytes = linetoscr_x_adjust_pixels * gfxvidinfo.drawbuffer.pixbytes; +#ifdef PANDORA + thisframe_y_adjust_real = minfirstline + currprefs.pandora_vertical_offset; +#else thisframe_y_adjust_real = minfirstline; +#endif max_ypos_thisframe = maxvpos_display - minfirstline + 1; } diff --git a/src/include/inputdevice.h b/src/include/inputdevice.h index fa85bd20..5dfa70d9 100644 --- a/src/include/inputdevice.h +++ b/src/include/inputdevice.h @@ -44,8 +44,8 @@ struct inputdevice_functions { void (*unacquire)(int); void (*read)(void); int (*get_num)(void); - TCHAR* (*get_friendlyname)(int); - TCHAR* (*get_uniquename)(int); + const TCHAR* (*get_friendlyname)(int); + const TCHAR* (*get_uniquename)(int); int (*get_widget_num)(int); int (*get_widget_type)(int,int,TCHAR*,uae_u32*); int (*get_widget_first)(int,int); @@ -183,9 +183,9 @@ extern void inputdevice_swap_compa_ports (struct uae_prefs *p, int portswap); extern void inputdevice_config_change (void); extern int inputdevice_config_change_test (void); extern int inputdevice_get_device_index (int devnum); -extern TCHAR *inputdevice_get_device_name (int type, int devnum); -extern TCHAR *inputdevice_get_device_name2 (int devnum); -extern TCHAR *inputdevice_get_device_unique_name (int type, int devnum); +extern const TCHAR *inputdevice_get_device_name (int type, int devnum); +extern const TCHAR *inputdevice_get_device_name2 (int devnum); +extern const TCHAR *inputdevice_get_device_unique_name (int type, int devnum); extern int inputdevice_get_device_status (int devnum); extern void inputdevice_set_device_status (int devnum, int enabled); extern int inputdevice_get_device_total (int type); diff --git a/src/inputdevice.cpp b/src/inputdevice.cpp index ed2098f1..805be459 100644 --- a/src/inputdevice.cpp +++ b/src/inputdevice.cpp @@ -538,7 +538,7 @@ static void out_config (struct zfile *f, int id, int num, const TCHAR *s1, const static bool write_config_head (struct zfile *f, int idnum, int devnum, const TCHAR *name, struct uae_input_device *id, struct inputdevice_functions *idf) { - TCHAR *s = nullptr; + const TCHAR *s = nullptr; TCHAR tmp2[CONFIG_BLEN]; if (idnum == GAMEPORT_INPUT_SETTINGS) { @@ -1126,8 +1126,8 @@ static int matchdevice(struct inputdevice_functions *inf, const TCHAR *confignam for (int j = 0; j < 2; j++) { bool fullmatch = j == 0; for (int i = 0; i < inf->get_num(); i++) { - TCHAR *aname1 = inf->get_friendlyname(i); - TCHAR *aname2 = inf->get_uniquename(i); + const TCHAR *aname1 = inf->get_friendlyname(i); + const TCHAR *aname2 = inf->get_uniquename(i); if (fullmatch && (!aname1 || !name)) continue; if (aname2 && configname) { @@ -1174,8 +1174,8 @@ static int matchdevice(struct inputdevice_functions *inf, const TCHAR *confignam bool fullmatch = j == 0; match = -1; for (int i = 0; i < inf->get_num(); i++) { - TCHAR *aname1 = inf->get_friendlyname(i); - TCHAR *aname2 = inf->get_uniquename(i); + const TCHAR *aname1 = inf->get_friendlyname(i); + const TCHAR *aname2 = inf->get_uniquename(i); if (aname2 && configname) { const TCHAR *bname2 = configname; bool matched = false; @@ -1202,7 +1202,7 @@ static int matchdevice(struct inputdevice_functions *inf, const TCHAR *confignam if (match < 0) { // no match, try friendly names for (int i = 0; i < inf->get_num(); i++) { - TCHAR *aname1 = inf->get_friendlyname(i); + const TCHAR *aname1 = inf->get_friendlyname(i); if (aname1 && name) { const TCHAR *bname1 = name; if (aname1 && bname1 && !_tcscmp(aname1, bname1)) { @@ -1304,7 +1304,7 @@ void read_inputdevice_config (struct uae_prefs *pr, const TCHAR *option, TCHAR * struct uae_input_device *id = nullptr; const struct inputevent *ie; int devnum, num, button, joystick, subnum, idnum, keynum, devtype; - const TCHAR *p; + const TCHAR *p; TCHAR *p2, *custom; struct temp_uids *tid = &temp_uid; struct inputdevice_functions *idf = nullptr; @@ -2918,7 +2918,7 @@ static int switchdevice (struct uae_input_device *id, int num, bool buttonmode) int newport = 0; int newslot = -1; int flags = 0; - TCHAR *name = nullptr, *fname = nullptr; + const TCHAR *name = nullptr, *fname = nullptr; int otherbuttonpressed = 0; int acc = input_acquired; @@ -2983,7 +2983,7 @@ static int switchdevice (struct uae_input_device *id, int num, bool buttonmode) supermouse = i; } if (supermouse >= 0 && nummouse == 1) { - TCHAR *oldname = name; + const TCHAR *oldname = name; name = idev[IDTYPE_MOUSE].get_uniquename (supermouse); fname = idev[IDTYPE_MOUSE].get_friendlyname(supermouse); issupermouse = true; @@ -4453,8 +4453,8 @@ static void matchdevices (struct inputdevice_functions *inf, struct uae_input_de bool fullmatch = l == 0; int match = -1; for (i = 0; i < inf->get_num (); i++) { - TCHAR *aname1 = inf->get_friendlyname (i); - TCHAR *aname2 = inf->get_uniquename (i); + const TCHAR *aname1 = inf->get_friendlyname (i); + const TCHAR *aname2 = inf->get_uniquename (i); for (j = 0; j < MAX_INPUT_DEVICES; j++) { if (aname2 && uid[j].configname) { bool matched = false; @@ -4862,7 +4862,11 @@ void inputdevice_default_prefs (struct uae_prefs *p) inputdevice_init (); p->input_selected_setting = GAMEPORT_INPUT_SETTINGS; +#ifdef PANDORA p->input_joymouse_multiplier = 20; +#else + p->input_joymouse_multiplier = 2; +#endif p->input_joymouse_deadzone = 33; p->input_joystick_deadzone = 33; p->input_joymouse_speed = 10; @@ -5212,17 +5216,17 @@ int inputdevice_get_device_total (int type) return idev[type].get_num (); } /* returns the name of device */ -TCHAR *inputdevice_get_device_name (int type, int devnum) +const TCHAR *inputdevice_get_device_name (int type, int devnum) { return idev[type].get_friendlyname (devnum); } /* returns the name of device */ -TCHAR *inputdevice_get_device_name2 (int devnum) +const TCHAR *inputdevice_get_device_name2 (int devnum) { return getidf (devnum)->get_friendlyname (inputdevice_get_device_index (devnum)); } /* returns machine readable name of device */ -TCHAR *inputdevice_get_device_unique_name (int type, int devnum) +const TCHAR *inputdevice_get_device_unique_name (int type, int devnum) { return idev[type].get_uniquename (devnum); } @@ -6096,8 +6100,8 @@ int inputdevice_joyport_config (struct uae_prefs *p, const TCHAR *value1, const idf = &idev[dtype]; if (value1 && value2) { for (int i = 0; i < idf->get_num(); i++) { - TCHAR *name1 = idf->get_friendlyname(i); - TCHAR *name2 = idf->get_uniquename(i); + const TCHAR *name1 = idf->get_friendlyname(i); + const TCHAR *name2 = idf->get_uniquename(i); if (name2 && !_tcscmp(name2, value2) && name1 && !_tcscmp(name1, value1)) { // config+friendlyname matched: don't bother to check for duplicates matched = i; @@ -6108,7 +6112,7 @@ int inputdevice_joyport_config (struct uae_prefs *p, const TCHAR *value1, const if (matched < 0 && value2) { matched = -1; for (int i = 0; i < idf->get_num (); i++) { - TCHAR *name2 = idf->get_uniquename (i); + const TCHAR *name2 = idf->get_uniquename (i); if (name2 && !_tcscmp (name2, value2)) { if (matched >= 0) { matched = -2; @@ -6122,7 +6126,7 @@ int inputdevice_joyport_config (struct uae_prefs *p, const TCHAR *value1, const if (matched < 0 && value1) { matched = -1; for (int i = 0; i < idf->get_num (); i++) { - TCHAR *name1 = idf->get_friendlyname (i); + const TCHAR *name1 = idf->get_friendlyname (i); if (name1 && !_tcscmp (name1, value1)) { if (matched >= 0) { matched = -2; diff --git a/src/osdep/amiberry.cpp b/src/osdep/amiberry.cpp index a0b6ef46..2cf0f681 100644 --- a/src/osdep/amiberry.cpp +++ b/src/osdep/amiberry.cpp @@ -231,6 +231,12 @@ void target_fixup_options(struct uae_prefs* p) void target_default_options(struct uae_prefs* p, int type) { +#ifdef PANDORA + p->pandora_vertical_offset = OFFSET_Y_ADJUST; + p->pandora_cpu_speed = defaultCpuSpeed; + p->pandora_hide_idle_led = 0; + p->pandora_tapDelay = 10; +#endif //PANDORA p->customControls = false; _tcscpy(p->custom_up, ""); _tcscpy(p->custom_down, ""); @@ -273,6 +279,12 @@ void target_default_options(struct uae_prefs* p, int type) void target_save_options(struct zfile* f, struct uae_prefs* p) { +#ifdef PANDORA + cfgfile_write (f, "pandora.cpu_speed", "%d", p->pandora_cpu_speed); + cfgfile_write (f, "pandora.hide_idle_led", "%d", p->pandora_hide_idle_led); + cfgfile_write (f, "pandora.tap_delay", "%d", p->pandora_tapDelay); + cfgfile_write (f, "pandora.move_y", "%d", p->pandora_vertical_offset - OFFSET_Y_ADJUST); +#endif //PANDORA cfgfile_write(f, _T("amiberry.kbd_led_num"), _T("%d"), p->kbd_led_num); cfgfile_write(f, _T("amiberry.kbd_led_scr"), _T("%d"), p->kbd_led_scr); cfgfile_write(f, _T("amiberry.scaling_method"), _T("%d"), p->scaling_method); @@ -310,6 +322,18 @@ TCHAR *target_expand_environment(const TCHAR *path, TCHAR *out, int maxlen) int target_parse_option(struct uae_prefs* p, const char* option, const char* value) { +#ifdef PANDORA + if (cfgfile_intval(option, value, "cpu_speed", &p->pandora_cpu_speed, 1) + return 1; + if (cfgfile_intval(option, value, "hide_idle_led", &p->pandora_hide_idle_led, 1) + return 1; + if (cfgfile_intval(option, value, "tap_delay", &p->pandora_tapDelay, 1) + return 1; + if (cfgfile_intval(option, value, "move_y", &p->pandora_vertical_offset, 1) { + p->pandora_vertical_offset += OFFSET_Y_ADJUST; + return 1; + } +#endif //PANDORA if (cfgfile_intval(option, value, "kbd_led_num", &p->kbd_led_num, 1)) return 1; if (cfgfile_intval(option, value, "kbd_led_scr", &p->kbd_led_scr, 1)) @@ -684,6 +708,91 @@ void loadAdfDir(void) } } +int currVSyncRate = 0; +bool SetVSyncRate(int hz) +{ + char cmd[64]; + + if(currVSyncRate != hz && (hz == 50 || hz == 60)) + { +#ifdef PANDORA + snprintf((char*)cmd, 64, "sudo /usr/pandora/scripts/op_lcdrate.sh %d", hz); + system(cmd); +#endif + currVSyncRate = hz; + return true; + } + return false; +} + +void setCpuSpeed() +{ +#ifdef PANDORA + char speedCmd[128]; + + currprefs.pandora_cpu_speed = changed_prefs.pandora_cpu_speed; + + if(currprefs.pandora_cpu_speed != lastCpuSpeed) + { + snprintf((char*)speedCmd, 128, "unset DISPLAY; echo y | sudo -n /usr/pandora/scripts/op_cpuspeed.sh %d", currprefs.pandora_cpu_speed); + system(speedCmd); + lastCpuSpeed = currprefs.pandora_cpu_speed; + cpuSpeedChanged = true; + } +#endif + if(changed_prefs.ntscmode != currprefs.ntscmode) + { + if(changed_prefs.ntscmode) + SetVSyncRate(60); + else + SetVSyncRate(50); + fix_apmodes(&changed_prefs); + } +} + + +int getDefaultCpuSpeed(void) +{ +#ifdef PANDORA + int speed = 600; + FILE* f = fopen ("/etc/pandora/conf/cpu.conf", "rt"); + if(f) + { + char line[128]; + for(int i=0; i<6; ++i) + { + fscanf(f, "%s\n", &line); + if(strncmp(line, "default:", 8) == 0) + { + int value = 0; + sscanf(line, "default:%d", &value); + if(value > 500 && value < 1200) + { + speed = value; + } + } + } + fclose(f); + } + return speed; +#else + return 0; +#endif +} + + +void resetCpuSpeed(void) +{ +#ifdef PANDORA + if(cpuSpeedChanged) + { + lastCpuSpeed = defaultCpuSpeed - 10; + currprefs.pandora_cpu_speed = changed_prefs.pandora_cpu_speed = defaultCpuSpeed; + setCpuSpeed(); + } +#endif +} + void target_addtorecent(const TCHAR *name, int t) { } @@ -890,6 +999,22 @@ int handle_msgpump() ioctl(0, KDSETLED, kbd_led_status); ioctl(0, KDSKBLED, kbd_flags); break; +#ifdef PANDORA + case SDLK_LCTRL: // Select key + inputdevice_add_inputcode (AKS_ENTERGUI, 1); + break; + + case SDLK_LSHIFT: // Shift key + inputdevice_do_keyboard(AK_LSH, 1); + break; + + case SDLK_RSHIFT: // Left shoulder button + case SDLK_RCTRL: // Right shoulder button + if(currprefs.input_tablet > TABLET_OFF) { + // Holding left or right shoulder button -> stylus does right mousebutton + doStylusRightClick = 1; + } +#endif default: if (currprefs.customControls) { @@ -936,8 +1061,14 @@ int handle_msgpump() case SDL_MOUSEBUTTONDOWN: if (currprefs.jports[0].id == JSEM_MICE || currprefs.jports[1].id == JSEM_MICE) { - if (rEvent.button.button == SDL_BUTTON_LEFT) - setmousebuttonstate(0, 0, 1); + if (rEvent.button.button == SDL_BUTTON_LEFT) { + if (currprefs.input_tablet > TABLET_OFF && !doStylusRightClick) +#ifdef PANDORA + delayed_mousebutton = currprefs.pandora_tapDelay << 1; + else +#endif //PANDORA + setmousebuttonstate(0, doStylusRightClick, 1); + } if (rEvent.button.button == SDL_BUTTON_RIGHT) setmousebuttonstate(0, 1, 1); if (rEvent.button.button == SDL_BUTTON_MIDDLE) @@ -949,7 +1080,7 @@ int handle_msgpump() if (currprefs.jports[0].id == JSEM_MICE || currprefs.jports[1].id == JSEM_MICE) { if (rEvent.button.button == SDL_BUTTON_LEFT) - setmousebuttonstate(0, 0, 0); + setmousebuttonstate(0, doStylusRightClick, 0); if (rEvent.button.button == SDL_BUTTON_RIGHT) setmousebuttonstate(0, 1, 0); if (rEvent.button.button == SDL_BUTTON_MIDDLE) @@ -965,7 +1096,16 @@ int handle_msgpump() int mouseScale = currprefs.input_joymouse_multiplier / 2; int x = rEvent.motion.xrel; int y = rEvent.motion.yrel; - +#ifdef PANDORA + if(rEvent.motion.x == 0 && x > -4) + x = -4; + if(rEvent.motion.y == 0 && y > -4) + y = -4; + if(rEvent.motion.x == currprefs.gfx_size.width - 1 && x < 4) + x = 4; + if(rEvent.motion.y == currprefs.gfx_size.height - 1 && y < 4) + y = 4; +#endif //PANDORA setmousestate(0, 0, x * mouseScale, 0); setmousestate(0, 1, y * mouseScale, 0); } diff --git a/src/osdep/amiberry_gfx.cpp b/src/osdep/amiberry_gfx.cpp index 6506c2ad..7786ea41 100644 --- a/src/osdep/amiberry_gfx.cpp +++ b/src/osdep/amiberry_gfx.cpp @@ -205,6 +205,15 @@ int check_prefs_changed_gfx() currprefs.leds_on_screen = changed_prefs.leds_on_screen; changed = 1; } +#ifdef PANDORA + if (currprefs.pandora_hide_idle_led != changed_prefs.pandora_hide_idle_led || + currprefs.pandora_vertical_offset != changed_prefs.pandora_vertical_offset) + { + currprefs.pandora_hide_idle_led = changed_prefs.pandora_hide_idle_led; + currprefs.pandora_vertical_offset = changed_prefs.pandora_vertical_offset; + changed = 1; + } +#endif //PANDORA if (currprefs.chipset_refreshrate != changed_prefs.chipset_refreshrate) { currprefs.chipset_refreshrate = changed_prefs.chipset_refreshrate; diff --git a/src/osdep/amiberry_gui.cpp b/src/osdep/amiberry_gui.cpp index eaab29be..8ee54e8a 100644 --- a/src/osdep/amiberry_gui.cpp +++ b/src/osdep/amiberry_gui.cpp @@ -421,6 +421,9 @@ int gui_init() void gui_exit() { +#ifdef PANDORA + resetCpuSpeed(); +#endif sync(); amiberry_stop_sound(); saveAdfDir(); @@ -507,6 +510,14 @@ void gui_display(int shortcut) fpscounter_reset(); } +void moveVertical(int value) +{ + changed_prefs.pandora_vertical_offset += value; + if(changed_prefs.pandora_vertical_offset < -16 + OFFSET_Y_ADJUST) + changed_prefs.pandora_vertical_offset = -16 + OFFSET_Y_ADJUST; + else if(changed_prefs.pandora_vertical_offset > 16 + OFFSET_Y_ADJUST) + changed_prefs.pandora_vertical_offset = 16 + OFFSET_Y_ADJUST; +} void gui_led(int led, int on) { diff --git a/src/osdep/amiberry_rp9.cpp b/src/osdep/amiberry_rp9.cpp index 0faa1b17..fe9fbffd 100644 --- a/src/osdep/amiberry_rp9.cpp +++ b/src/osdep/amiberry_rp9.cpp @@ -185,6 +185,9 @@ static void parse_clip(struct uae_prefs *p, xmlNode *node) if (attr != NULL) { top = atoi((const char *)attr) / 2; +#ifdef PANDORA + p->pandora_vertical_offset = top - 41 + OFFSET_Y_ADJUST; +#endif //PANDORA xmlFree(attr); } attr = xmlGetProp(curr_node, (const xmlChar *)_T("width")); diff --git a/src/osdep/gui/PanelDisplay.cpp b/src/osdep/gui/PanelDisplay.cpp index 2d637fb6..7a4f92a5 100644 --- a/src/osdep/gui/PanelDisplay.cpp +++ b/src/osdep/gui/PanelDisplay.cpp @@ -21,6 +21,12 @@ static gcn::Window* grpScalingMethod; static gcn::UaeRadioButton* optAuto; static gcn::UaeRadioButton* optNearest; static gcn::UaeRadioButton* optLinear; +#ifdef PANDORA +static gcn::Window *grpAmigaScreen; +static gcn::Label* lblVertPos; +static gcn::Label* lblVertPosInfo; +static gcn::Slider* sldVertPos; +#endif // PANDORA class AmigaScreenActionListener : public gcn::ActionListener { @@ -31,6 +37,16 @@ public: { changed_prefs.gfx_framerate = chkFrameskip->isSelected() ? 1 : 0; } +#ifdef PANDORA + else if (actionEvent.getSource() == sldVertPos) + { + if(changed_prefs.pandora_vertical_offset != (int)(sldVertPos->getValue()) + OFFSET_Y_ADJUST) + { + changed_prefs.pandora_vertical_offset = (int)(sldVertPos->getValue()) + OFFSET_Y_ADJUST; + RefreshPanelDisplay(); + } + } +#endif // PANDORA } }; @@ -82,9 +98,37 @@ void InitPanelDisplay(const struct _ConfigCategory& category) posY += DISTANCE_BORDER + grpScalingMethod->getHeight() + DISTANCE_NEXT_Y; +#ifdef PANDORA + lblVertPos = new gcn::Label("Vert. offset:"); + lblVertPos->setSize(150, LABEL_HEIGHT); + lblVertPos->setAlignment(gcn::Graphics::RIGHT); + sldVertPos = new gcn::Slider(-16, 16); + sldVertPos->setSize(160, SLIDER_HEIGHT); + sldVertPos->setBaseColor(gui_baseCol); + sldVertPos->setMarkerLength(20); + sldVertPos->setStepLength(1); + sldVertPos->setId("sldVertPos"); + sldVertPos->addActionListener(amigaScreenActionListener); + lblVertPosInfo = new gcn::Label("000"); +#endif //PANDORA + chkFrameskip = new gcn::UaeCheckBox("Frameskip"); chkFrameskip->addActionListener(amigaScreenActionListener); +#ifdef PANDORA + grpAmigaScreen = new gcn::Window("Amiga Screen"); + grpAmigaScreen->setPosition(DISTANCE_BORDER, DISTANCE_BORDER); + grpAmigaScreen->add(lblVertPos, 0, posY); + grpAmigaScreen->add(sldVertPos, 160, posY); + grpAmigaScreen->add(lblVertPosInfo, 160 + sldVertPos->getWidth() + 12, posY); + posY += sldVertPos->getHeight() + DISTANCE_NEXT_Y; + grpAmigaScreen->setMovable(false); + grpAmigaScreen->setSize(460, posY + DISTANCE_BORDER); + grpAmigaScreen->setBaseColor(gui_baseCol); + + category.panel->add(grpAmigaScreen); +#endif //PANDORA + category.panel->add(chkFrameskip, DISTANCE_BORDER, posY); RefreshPanelDisplay(); @@ -95,7 +139,12 @@ void ExitPanelDisplay() { delete chkFrameskip; delete amigaScreenActionListener; - +#ifdef PANDORA + delete lblVertPos; + delete sldVertPos; + delete lblVertPosInfo; + delete grpAmigaScreen; +#endif //PANDORA delete optAuto; delete optNearest; delete optLinear; @@ -114,6 +163,11 @@ void RefreshPanelDisplay() optNearest->setSelected(true); else if (changed_prefs.scaling_method == 1) optLinear->setSelected(true); +#ifdef PANDORA + sldVertPos->setValue(changed_prefs.pandora_vertical_offset - OFFSET_Y_ADJUST); + snprintf(tmp, 32, "%d", changed_prefs.pandora_vertical_offset - OFFSET_Y_ADJUST); + lblVertPosInfo->setCaption(tmp); +#endif //PANDORA } bool HelpPanelDisplay(std::vector &helptext) @@ -124,6 +178,11 @@ bool HelpPanelDisplay(std::vector &helptext) helptext.push_back("and crisp image, but it may come with some distortion if your resolution is not an exact multiple."); helptext.push_back("\"Linear\" will give you a smoother scaling but some people might find it a bit blurry."); helptext.push_back(""); +#ifdef PANDORA + helptext.push_back("With \"Vert. offset\" you can adjust the position of the first drawn line of the Amiga screen. You can also change"); + helptext.push_back("this during emulation with left and right shoulder button and dpad up/down."); + helptext.push_back(""); +#endif //PANDORA helptext.push_back("When you activate \"Frameskip\", only every second frame is drawn. This will improve performance and some"); helptext.push_back("more games are playable."); return true; diff --git a/src/osdep/gui/PanelMisc.cpp b/src/osdep/gui/PanelMisc.cpp index 28214239..62cf3599 100644 --- a/src/osdep/gui/PanelMisc.cpp +++ b/src/osdep/gui/PanelMisc.cpp @@ -153,16 +153,16 @@ void InitPanelMisc(const struct _ConfigCategory& category) #ifdef PANDORA lblPandoraSpeed = new gcn::Label("Pandora Speed:"); - lblPandoraSpeed->setSize(110, LABEL_HEIGHT); - lblPandoraSpeed->setAlignment(gcn::Graphics::RIGHT); - sldPandoraSpeed = new gcn::Slider(500, 1260); - sldPandoraSpeed->setSize(200, SLIDER_HEIGHT); - sldPandoraSpeed->setBaseColor(gui_baseCol); + lblPandoraSpeed->setSize(110, LABEL_HEIGHT); + lblPandoraSpeed->setAlignment(gcn::Graphics::RIGHT); + sldPandoraSpeed = new gcn::Slider(500, 1260); + sldPandoraSpeed->setSize(200, SLIDER_HEIGHT); + sldPandoraSpeed->setBaseColor(gui_baseCol); sldPandoraSpeed->setMarkerLength(20); sldPandoraSpeed->setStepLength(20); sldPandoraSpeed->setId("PandSpeed"); - sldPandoraSpeed->addActionListener(miscActionListener); - lblPandoraSpeedInfo = new gcn::Label("1000 MHz"); + sldPandoraSpeed->addActionListener(miscActionListener); + lblPandoraSpeedInfo = new gcn::Label("1000 MHz"); #endif chkBSDSocket = new gcn::UaeCheckBox("bsdsocket.library"); chkBSDSocket->setId("BSDSocket"); diff --git a/src/osdep/target.h b/src/osdep/target.h index abb77416..739a95e9 100644 --- a/src/osdep/target.h +++ b/src/osdep/target.h @@ -18,6 +18,8 @@ STATIC_INLINE FILE *uae_tfopen(const char *path, const char *mode) return fopen(path, mode); } +#define OFFSET_Y_ADJUST 15 + extern int emulating; extern uae_u8* natmem_offset;