Various Android updates

This commit is contained in:
Dimitris Panokostas 2019-09-02 15:01:01 +02:00
parent 024d624006
commit 77cff6067d
31 changed files with 314 additions and 249 deletions

View file

@ -53,12 +53,16 @@ else ifeq ($(PLATFORM),rpi1)
NAME = amiberry-rpi1-sdl1
else ifeq ($(PLATFORM),android)
CFLAGS += -mfpu=neon -mfloat-abi=soft
CFLAGS += -mfpu=vfp
DEFS += -DARMV6_ASSEMBLY -D_FILE_OFFSET_BITS=64 -DANDROIDSDL -DARMV6T2 -DUSE_ARMNEON -DARM_HAS_DIV -DUSE_SDL1
ANDROID = 1
HAVE_NEON = 1
HAVE_SDL_DISPLAY = 1
NAME = amiberry
NAME = amiberry-android
else ifeq ($(PLATFORM),android64)
DEFS += -DCPU_AARCH64 -DARMV6_ASSEMBLY -D_FILE_OFFSET_BITS=64 -DANDROIDSDL -DARMV6T2 -DUSE_ARMNEON -DARM_HAS_DIV -DUSE_SDL1
ANDROID = 1
AARCH64 = 1
NAME = amiberry-android64
#
# SDL2 with DispmanX targets (RPI only)
@ -223,14 +227,6 @@ USE_SDL2 = 1
HAVE_NEON = 1
NAME = amiberry-rockpro64
else ifeq ($(PLATFORM),android-sdl2)
USE_SDL2 = 1
CFLAGS += -mfpu=neon -mfloat-abi=soft
DEFS += -DARMV6_ASSEMBLY -D_FILE_OFFSET_BITS=64 -DANDROIDSDL -DARMV6T2 -DUSE_ARMNEON -DARM_HAS_DIV -DUSE_SDL2
ANDROID = 1
HAVE_NEON = 1
HAVE_SDL_DISPLAY = 1
NAME = amiberry
endif
RM = rm -f

View file

@ -15,7 +15,9 @@
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#ifdef HAVE_SYS_TIMEB_H
#include <sys/timeb.h>
#endif
#include <sys/types.h>
#include <sys/wait.h>
@ -412,13 +414,19 @@ static bool cdda_play_func2 (struct cdunit *cdu, int *outpos)
#ifdef WIN32
struct _timeb tb1, tb2;
#else
#ifdef HAVE_SYS_TIMEB_H
struct timeb tb1, tb2;
#else
#warning Missing timing functions
#endif
#endif
idleframes = 0;
silentframes = 0;
foundsub = false;
#ifdef HAVE_SYS_TIMEB_H
_ftime (&tb1);
#endif
cdda_pos = cdu->cdda_start;
oldplay = cdu->cdda_play;
sector = cdu->cd_last_pos = cdda_pos;
@ -473,9 +481,13 @@ static bool cdda_play_func2 (struct cdunit *cdu, int *outpos)
cdda_pos -= idleframes;
if (*outpos < 0) {
#ifdef HAVE_SYS_TIMEB_H
_ftime (&tb2);
diff = (tb2.time * (uae_s64)1000 + tb2.millitm) - (tb1.time * (uae_s64)1000 + tb1.millitm);
diff -= cdu->cdda_delay;
#else
diff = 0;
#endif
if (idleframes >= 0 && diff < 0 && cdu->cdda_play > 0)
sleep_millis(-diff);
setstate (cdu, AUDIO_STATUS_IN_PROGRESS, cdda_pos);

View file

@ -2338,7 +2338,6 @@ Don't touch this if you don't know what you are doing. */
#define DATA_POINTER(n) (line_data[lineno] + (n) * MAX_WORDS_PER_LINE * 2)
#if defined(CPU_AARCH64) || defined(USE_ARMNEON) && !defined(ANDROID)
// FIXME: these neon helper functions caused text rel problem on android
#ifdef __cplusplus
extern "C" {

View file

@ -544,6 +544,7 @@ void comp_fpp_opp (uae_u32 opcode, uae_u16 extra)
}
FAIL (1);
return;
#ifndef ANDROID
case 6:
case 7:
{
@ -661,6 +662,7 @@ void comp_fpp_opp (uae_u32 opcode, uae_u16 extra)
}
}
return;
#endif
case 2: /* from <EA> to FPx */
dont_care_fflags ();
if ((extra & 0xfc00) == 0x5c00) { /* FMOVECR */

View file

@ -476,63 +476,63 @@ void graphics_subshutdown()
void update_onscreen()
{
SDL_ANDROID_SetScreenKeyboardFloatingJoystick(changed_prefs.floatingJoystick);
if (changed_prefs.onScreen == 0)
if (changed_prefs.onScreen==0)
{
SDL_ANDROID_SetScreenKeyboardShown(0);
SDL_ANDROID_SetScreenKeyboardShown(0);
}
else
{
SDL_ANDROID_SetScreenKeyboardShown(1);
SDL_Rect pos_textinput, pos_dpad, pos_button1, pos_button2, pos_button3, pos_button4, pos_button5, pos_button6;
pos_textinput.x = changed_prefs.pos_x_textinput*(SDL_ListModes(NULL, 0)[0]->w / (float)480);
pos_textinput.y = changed_prefs.pos_y_textinput*(SDL_ListModes(NULL, 0)[0]->h / (float)360);
pos_textinput.h = SDL_ListModes(NULL, 0)[0]->h / (float)10;
pos_textinput.w = pos_textinput.h;
SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_TEXT, &pos_textinput);
pos_dpad.x = changed_prefs.pos_x_dpad*(SDL_ListModes(NULL, 0)[0]->w / (float)480);
pos_dpad.y = changed_prefs.pos_y_dpad*(SDL_ListModes(NULL, 0)[0]->h / (float)360);
pos_dpad.h = SDL_ListModes(NULL, 0)[0]->h / (float)2.5;
pos_dpad.w = pos_dpad.h;
SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD, &pos_dpad);
pos_button1.x = changed_prefs.pos_x_button1*(SDL_ListModes(NULL, 0)[0]->w / (float)480);
pos_button1.y = changed_prefs.pos_y_button1*(SDL_ListModes(NULL, 0)[0]->h / (float)360);
pos_button1.h = SDL_ListModes(NULL, 0)[0]->h / (float)5;
pos_button1.w = pos_button1.h;
SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_0, &pos_button1);
pos_button2.x = changed_prefs.pos_x_button2*(SDL_ListModes(NULL, 0)[0]->w / (float)480);
pos_button2.y = changed_prefs.pos_y_button2*(SDL_ListModes(NULL, 0)[0]->h / (float)360);
pos_button2.h = SDL_ListModes(NULL, 0)[0]->h / (float)5;
pos_button2.w = pos_button2.h;
SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_1, &pos_button2);
pos_button3.x = changed_prefs.pos_x_button3*(SDL_ListModes(NULL, 0)[0]->w / (float)480);
pos_button3.y = changed_prefs.pos_y_button3*(SDL_ListModes(NULL, 0)[0]->h / (float)360);
pos_button3.h = SDL_ListModes(NULL, 0)[0]->h / (float)5;
pos_button3.w = pos_button3.h;
SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_2, &pos_button3);
pos_button4.x = changed_prefs.pos_x_button4*(SDL_ListModes(NULL, 0)[0]->w / (float)480);
pos_button4.y = changed_prefs.pos_y_button4*(SDL_ListModes(NULL, 0)[0]->h / (float)360);
pos_button4.h = SDL_ListModes(NULL, 0)[0]->h / (float)5;
pos_button4.w = pos_button4.h;
SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_3, &pos_button4);
pos_button5.x = changed_prefs.pos_x_button5*(SDL_ListModes(NULL, 0)[0]->w / (float)480);
pos_button5.y = changed_prefs.pos_y_button5*(SDL_ListModes(NULL, 0)[0]->h / (float)360);
pos_button5.h = SDL_ListModes(NULL, 0)[0]->h / (float)5;
pos_button5.w = pos_button5.h;
SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_4, &pos_button5);
pos_button6.x = changed_prefs.pos_x_button6*(SDL_ListModes(NULL, 0)[0]->w / (float)480);
pos_button6.y = changed_prefs.pos_y_button6*(SDL_ListModes(NULL, 0)[0]->h / (float)360);
pos_button6.h = SDL_ListModes(NULL, 0)[0]->h / (float)5;
pos_button6.w = pos_button6.h;
SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_5, &pos_button6);
SDL_ANDROID_SetScreenKeyboardShown(1);
SDL_Rect pos_textinput, pos_dpad, pos_button1, pos_button2, pos_button3, pos_button4, pos_button5, pos_button6;
pos_textinput.x = changed_prefs.pos_x_textinput*(SDL_ListModes(NULL, 0)[0]->w/(float)480);
pos_textinput.y = changed_prefs.pos_y_textinput*(SDL_ListModes(NULL, 0)[0]->h/(float)360);
pos_textinput.h=SDL_ListModes(NULL, 0)[0]->h / (float)10;
pos_textinput.w=pos_textinput.h;
SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_TEXT, &pos_textinput);
pos_dpad.x = changed_prefs.pos_x_dpad*(SDL_ListModes(NULL, 0)[0]->w/(float)480);
pos_dpad.y = changed_prefs.pos_y_dpad*(SDL_ListModes(NULL, 0)[0]->h/(float)360);
pos_dpad.h=SDL_ListModes(NULL, 0)[0]->h / (float)2.5;
pos_dpad.w=pos_dpad.h;
SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD, &pos_dpad);
pos_button1.x = changed_prefs.pos_x_button1*(SDL_ListModes(NULL, 0)[0]->w/(float)480);
pos_button1.y = changed_prefs.pos_y_button1*(SDL_ListModes(NULL, 0)[0]->h/(float)360);
pos_button1.h=SDL_ListModes(NULL, 0)[0]->h / (float)5;
pos_button1.w=pos_button1.h;
SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_0, &pos_button1);
pos_button2.x = changed_prefs.pos_x_button2*(SDL_ListModes(NULL, 0)[0]->w/(float)480);
pos_button2.y = changed_prefs.pos_y_button2*(SDL_ListModes(NULL, 0)[0]->h/(float)360);
pos_button2.h=SDL_ListModes(NULL, 0)[0]->h / (float)5;
pos_button2.w=pos_button2.h;
SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_1, &pos_button2);
pos_button3.x = changed_prefs.pos_x_button3*(SDL_ListModes(NULL, 0)[0]->w/(float)480);
pos_button3.y = changed_prefs.pos_y_button3*(SDL_ListModes(NULL, 0)[0]->h/(float)360);
pos_button3.h=SDL_ListModes(NULL, 0)[0]->h / (float)5;
pos_button3.w=pos_button3.h;
SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_2, &pos_button3);
pos_button4.x = changed_prefs.pos_x_button4*(SDL_ListModes(NULL, 0)[0]->w/(float)480);
pos_button4.y = changed_prefs.pos_y_button4*(SDL_ListModes(NULL, 0)[0]->h/(float)360);
pos_button4.h=SDL_ListModes(NULL, 0)[0]->h / (float)5;
pos_button4.w=pos_button4.h;
SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_3, &pos_button4);
pos_button5.x = changed_prefs.pos_x_button5*(SDL_ListModes(NULL, 0)[0]->w/(float)480);
pos_button5.y = changed_prefs.pos_y_button5*(SDL_ListModes(NULL, 0)[0]->h/(float)360);
pos_button5.h=SDL_ListModes(NULL, 0)[0]->h / (float)5;
pos_button5.w=pos_button5.h;
SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_4, &pos_button5);
pos_button6.x = changed_prefs.pos_x_button6*(SDL_ListModes(NULL, 0)[0]->w/(float)480);
pos_button6.y = changed_prefs.pos_y_button6*(SDL_ListModes(NULL, 0)[0]->h/(float)360);
pos_button6.h=SDL_ListModes(NULL, 0)[0]->h / (float)5;
pos_button6.w=pos_button6.h;
SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_5, &pos_button6);
SDL_ANDROID_SetScreenKeyboardButtonShown(SDL_ANDROID_SCREENKEYBOARD_BUTTON_TEXT, changed_prefs.onScreen_textinput);
SDL_ANDROID_SetScreenKeyboardButtonShown(SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD, changed_prefs.onScreen_dpad);
SDL_ANDROID_SetScreenKeyboardButtonShown(SDL_ANDROID_SCREENKEYBOARD_BUTTON_0, changed_prefs.onScreen_button1);
SDL_ANDROID_SetScreenKeyboardButtonShown(SDL_ANDROID_SCREENKEYBOARD_BUTTON_1, changed_prefs.onScreen_button2);
SDL_ANDROID_SetScreenKeyboardButtonShown(SDL_ANDROID_SCREENKEYBOARD_BUTTON_2, changed_prefs.onScreen_button3);
SDL_ANDROID_SetScreenKeyboardButtonShown(SDL_ANDROID_SCREENKEYBOARD_BUTTON_3, changed_prefs.onScreen_button4);
SDL_ANDROID_SetScreenKeyboardButtonShown(SDL_ANDROID_SCREENKEYBOARD_BUTTON_4, changed_prefs.onScreen_button5);
SDL_ANDROID_SetScreenKeyboardButtonShown(SDL_ANDROID_SCREENKEYBOARD_BUTTON_5, changed_prefs.onScreen_button6);
SDL_ANDROID_SetScreenKeyboardButtonShown(SDL_ANDROID_SCREENKEYBOARD_BUTTON_TEXT, changed_prefs.onScreen_textinput);
SDL_ANDROID_SetScreenKeyboardButtonShown(SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD, changed_prefs.onScreen_dpad);
SDL_ANDROID_SetScreenKeyboardButtonShown(SDL_ANDROID_SCREENKEYBOARD_BUTTON_0, changed_prefs.onScreen_button1);
SDL_ANDROID_SetScreenKeyboardButtonShown(SDL_ANDROID_SCREENKEYBOARD_BUTTON_1, changed_prefs.onScreen_button2);
SDL_ANDROID_SetScreenKeyboardButtonShown(SDL_ANDROID_SCREENKEYBOARD_BUTTON_2, changed_prefs.onScreen_button3);
SDL_ANDROID_SetScreenKeyboardButtonShown(SDL_ANDROID_SCREENKEYBOARD_BUTTON_3, changed_prefs.onScreen_button4);
SDL_ANDROID_SetScreenKeyboardButtonShown(SDL_ANDROID_SCREENKEYBOARD_BUTTON_4, changed_prefs.onScreen_button5);
SDL_ANDROID_SetScreenKeyboardButtonShown(SDL_ANDROID_SCREENKEYBOARD_BUTTON_5, changed_prefs.onScreen_button6);
}
}
#endif

View file

@ -9,6 +9,10 @@
#include "uae/mman.h"
#include <sys/mman.h>
#ifdef ANDROID
#define valloc(x) memalign(getpagesize(), x)
#endif
static uae_u32 natmem_size;
uae_u32 max_z3fastmem;

View file

@ -47,10 +47,9 @@ static NavigationMap navMap[] =
#ifdef ANDROIDSDL
{ "Savestates", "State0", "State0", "Miscellaneous", "OnScreen" },
{ "OnScreen", "OnScrButton3", "OnScrCtrl", "Savestates", "Shutdown" },
{ "Shutdown", "Start", "Quit", "OnScreen", "Paths" },
{ "Quit", "Shutdown", "Help", "OnScreen", "Paths" },
{ "Quit", "Start", "Help", "OnScreen", "Paths" },
{ "Help", "Quit", "Start", "OnScreen", "Paths" },
{ "Start", "Help", "Shutdown", "OnScreen", "Paths" },
{ "Start", "Help", "Quit", "OnScreen", "Paths" },
#else
{ "Savestates", "State0", "State0", "Miscellaneous", "Shutdown" },
{ "Shutdown", "Start", "Quit", "Savestates", "Paths" },

View file

@ -447,17 +447,17 @@ bool HelpPanelCPU(std::vector<std::string> &helptext)
helptext.emplace_back("addressing (68020). The option \"More compatible\" is only available if 68000 or 68010");
helptext.emplace_back("is selected and emulates simple prefetch of the 68000. This may improve compatibility");
helptext.emplace_back("in few situations but is not required for most games and demos.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("JIT enables the Just-in-time compiler. This may break compatibility in some games.");
helptext.emplace_back("");
helptext.emplace_back("The available FPU models depending on the selected CPU.");
helptext.emplace_back("The option \"More compatible\" activates more accurate rounding and compare of two floats.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("With \"CPU Speed\" you can choose the clock rate of the Amiga.");
helptext.emplace_back("Use 7MHz for A500 games or 14MHz for A1200 ones. Fastest uses more emulation time");
helptext.emplace_back("for the CPU, and Turbo will give only the minimum time to the chipset, using as");
helptext.emplace_back("much as possible for the CPU, usually resulting in dropping frames also.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("In current version, you will not see a difference in the performance for 68020,");
helptext.emplace_back("68030 and 68040 CPUs. The CPU cycles for the opcodes are based on 68020. The different");
helptext.emplace_back("cycles for 68030 and 68040 may come in a later version.");

View file

@ -397,15 +397,15 @@ bool HelpPanelChipset(std::vector<std::string> &helptext)
helptext.emplace_back("an entry in \"Extra\", all internal chipset settings will become the required values");
helptext.emplace_back("for the specified Amiga model. For some games, you have to activate \"NTSC\"");
helptext.emplace_back("(60 Hz instead of 50 Hz) for correct timing.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("When you see some graphic issues in a game, try \"Immediate\" or \"Wait for blit.\"");
helptext.emplace_back("for blitter and/or disable \"Fast copper\".");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("\"Fast copper\" uses a prediction algorithm instead of checking the copper state");
helptext.emplace_back("on a more regular basis. This may cause issues but brings a big performance improvement.");
helptext.emplace_back("The option was removed in WinUAE in an early state, but for most games, it works fine and");
helptext.emplace_back("the better performance is helpful for low powered devices.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("For \"Collision Level\", select \"Sprites and Sprites vs. Playfield\" which is fine");
helptext.emplace_back("for nearly all games.");
return true;

View file

@ -363,10 +363,10 @@ bool HelpPanelConfig(std::vector<std::string> &helptext)
helptext.clear();
helptext.emplace_back("To load a configuration, select the entry in the list and then click on \"Load\".");
helptext.emplace_back("If you doubleclick on an entry in the list, the emulation starts with this configuration.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("If you want to create a new configuration, setup all options, enter a new name in");
helptext.emplace_back(R"("Name", provide a short description and then click on "Save".)");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("\"Delete\" will delete the selected configuration.");
return true;
}

View file

@ -796,17 +796,17 @@ bool HelpPanelCustom(vector<string>& helptext)
helptext.clear();
helptext.emplace_back("Set up Custom input actions for each Amiga port, such as Keyboard remapping,");
helptext.emplace_back("or emulator functions.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("Select the port which you wish to re-map with 'Joystick Port'.");
helptext.emplace_back("The currently selected Input Device will then be displayed under 'Input Device'.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("Buttons which are not available on this device (detected with RetroArch ");
helptext.emplace_back("configuration files) are unavailable to remap.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("The HotKey button (used for secondary functions) is also unavailable for custom options. ");
helptext.emplace_back("The actions performed by pressing the HotKey with other buttons can also be remapped.");
helptext.emplace_back("Pre-defined functions such as Quit/Reset/Menu will be displayed as the 'default' option.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("The Function of the individual buttons are selectable via the marked drop-down boxes.");
return true;
}

View file

@ -378,20 +378,20 @@ bool HelpPanelDisplay(std::vector<std::string> &helptext)
helptext.emplace_back("in Chipset, a value greater than 240 for \"Height\" makes no sense. When the game,");
helptext.emplace_back("Demo or Workbench uses HiRes mode and you selected a value for \"Width\" lower than 640,");
helptext.emplace_back("you will only see half of the pixels.");
helptext.emplace_back("");
helptext.emplace_back(" ");
#ifdef USE_SDL2
helptext.emplace_back("Select the scaling method for the Amiga screen. The default option \"Auto\", ");
helptext.emplace_back("will try to find the best looking scaling method depending on your monitor's resolution. ");
helptext.emplace_back("\"Nearest Neighbor\" will give you a more pixelated and crisp image, but it may come with ");
helptext.emplace_back("some distortion if your resolution is not an exact multiple. ");
helptext.emplace_back("\"Linear\" will give you a smoother scaling but some people might find it a bit blurry.");
helptext.emplace_back("");
helptext.emplace_back(" ");
#endif
helptext.emplace_back("With \"Vert. offset\" you can adjust the position of the first drawn line of the Amiga ");
helptext.emplace_back("screen.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("Activate line doubling to remove flicker in interlace modes, or Scanlines for the CRT effect.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("When you activate \"Frameskip\", only every second frame is drawn.");
helptext.emplace_back("This will improve performance and some more games are playable.");
return true;

View file

@ -617,15 +617,15 @@ bool HelpPanelFloppy(std::vector<std::string> &helptext)
helptext.emplace_back("on the host filesystem.");
helptext.emplace_back("The button \"...\" opens a dialog to select the required");
helptext.emplace_back("disk file. With the dropdown control, you can select one of the disks you recently used.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("You can reduce the loading time for lot of games by increasing the floppy drive");
helptext.emplace_back("emulation speed. A few games will not load with higher drive speed and you have");
helptext.emplace_back("to select 100%.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("\"Save config for disk\" will create a new configuration file with the name of");
helptext.emplace_back("the disk in DF0. This configuration will be loaded each time you select the disk");
helptext.emplace_back("and have the option \"Load config with same name as disk\" enabled.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back(R"(With the buttons "Create 3.5'' DD disk" and "Create 3.5'' HD disk" you can)");
helptext.emplace_back("create a new and empty disk.");
return true;

View file

@ -657,16 +657,16 @@ bool HelpPanelHD(std::vector<std::string>& helptext)
helptext.emplace_back(R"(Use "Add Directory" to add a folder or "Add Hardfile" to add a HDF file as)");
helptext.emplace_back("a hard disk. To edit the settings of a HDD, click on \"...\" left to the entry in");
helptext.emplace_back("the list. With the red cross, you can delete an entry.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("With \"Create Hardfile\", you can create a new formatted HDF file up to 2 GB.");
helptext.emplace_back("For large files, it will take some time to create the new hard disk. You have to");
helptext.emplace_back("format the new HDD in the Amiga via the Workbench.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("If \"Master harddrive write protection\" is activated, you can't write to any HD.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back(R"(Activate "CD drive" to emulate CD for CD32. Use "Eject" to remove current CD)");
helptext.emplace_back("and click on \"...\" to open a dialog to select the iso/cue file for CD emulation.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("In current version, WAV, MP3 and FLAC is supported for audio tracks.");
return true;
}

View file

@ -573,14 +573,14 @@ bool HelpPanelInput(std::vector<std::string> &helptext)
{
helptext.clear();
helptext.emplace_back("You can select the control type for both ports and the rate for autofire.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("Set the emulated mouse speed to .25x, .5x, 1x, 2x and 4x to slow down or ");
helptext.emplace_back("speed up the mouse.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("When \"Enable mousehack\" is activated, you can use touch input to set .");
helptext.emplace_back("the mouse pointer to the exact position. This works very well on Workbench, ");
helptext.emplace_back("but many games using their own mouse handling and will not profit from this mode.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("\"Tap Delay\" specifies the time between taping the screen and an emulated ");
helptext.emplace_back("mouse button click.");
return true;

View file

@ -402,13 +402,13 @@ bool HelpPanelMisc(std::vector<std::string> &helptext)
helptext.emplace_back("When you have a HDD in your Amiga emulation, the HD indicator shows read (blue) and write");
helptext.emplace_back("(red) access to the HDD. The next values are showing the track number for each disk drive");
helptext.emplace_back("and indicates disk access.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("When you deactivate the option \"Show GUI on startup\" and use this configuration ");
helptext.emplace_back("by specifying it with the command line parameter \"-config=<file>\", ");
helptext.emplace_back("the emulation starts directly without showing the GUI.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("\"bsdsocket.library\" enables network functions (i.e. for web browsers in OS3.9).");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("\"Master floppy drive protection\" will disable all write access to floppy disks.");
return true;
}

View file

@ -39,7 +39,7 @@ static gcn::Window *window_pos_button4;
static gcn::Window *window_pos_button5;
static gcn::Window *window_pos_button6;
static gcn::Label* label_setup_onscreen;
extern gcn::TextField *txtName;
static gcn::TextField *textInput;
class OnScreenActionListener : public gcn::ActionListener
{
@ -48,74 +48,74 @@ class OnScreenActionListener : public gcn::ActionListener
{
if (actionEvent.getSource() == checkBox_onscreen_control) {
if (checkBox_onscreen_control->isSelected())
changed_prefs.onScreen=1;
workprefs.onScreen=1;
else
changed_prefs.onScreen=0;
workprefs.onScreen=0;
}
if (actionEvent.getSource() == checkBox_onscreen_textinput) {
if (checkBox_onscreen_textinput->isSelected())
changed_prefs.onScreen_textinput=1;
workprefs.onScreen_textinput=1;
else
changed_prefs.onScreen_textinput=0;
workprefs.onScreen_textinput=0;
}
if (actionEvent.getSource() == checkBox_onscreen_dpad) {
if (checkBox_onscreen_dpad->isSelected())
changed_prefs.onScreen_dpad=1;
workprefs.onScreen_dpad=1;
else
changed_prefs.onScreen_dpad=0;
workprefs.onScreen_dpad=0;
}
if (actionEvent.getSource() == checkBox_onscreen_button1) {
if (checkBox_onscreen_button1->isSelected())
changed_prefs.onScreen_button1=1;
workprefs.onScreen_button1=1;
else
changed_prefs.onScreen_button1=0;
workprefs.onScreen_button1=0;
}
if (actionEvent.getSource() == checkBox_onscreen_button2) {
if (checkBox_onscreen_button2->isSelected())
changed_prefs.onScreen_button2=1;
workprefs.onScreen_button2=1;
else
changed_prefs.onScreen_button2=0;
workprefs.onScreen_button2=0;
}
if (actionEvent.getSource() == checkBox_onscreen_button3) {
if (checkBox_onscreen_button3->isSelected())
changed_prefs.onScreen_button3=1;
workprefs.onScreen_button3=1;
else
changed_prefs.onScreen_button3=0;
workprefs.onScreen_button3=0;
}
if (actionEvent.getSource() == checkBox_onscreen_button4) {
if (checkBox_onscreen_button4->isSelected())
changed_prefs.onScreen_button4=1;
workprefs.onScreen_button4=1;
else
changed_prefs.onScreen_button4=0;
workprefs.onScreen_button4=0;
}
if (actionEvent.getSource() == checkBox_onscreen_button5) {
if (checkBox_onscreen_button5->isSelected())
changed_prefs.onScreen_button5=1;
workprefs.onScreen_button5=1;
else
changed_prefs.onScreen_button5=0;
workprefs.onScreen_button5=0;
}
if (actionEvent.getSource() == checkBox_onscreen_button6) {
if (checkBox_onscreen_button6->isSelected())
changed_prefs.onScreen_button6=1;
workprefs.onScreen_button6=1;
else
changed_prefs.onScreen_button6=0;
workprefs.onScreen_button6=0;
}
if (actionEvent.getSource() == checkBox_onscreen_custompos) {
if (checkBox_onscreen_custompos->isSelected())
changed_prefs.custom_position=1;
workprefs.custom_position=1;
else
changed_prefs.custom_position=0;
workprefs.custom_position=0;
}
if (actionEvent.getSource() == checkBox_floatingJoystick)
if (checkBox_floatingJoystick->isSelected())
changed_prefs.floatingJoystick=1;
workprefs.floatingJoystick=1;
else
changed_prefs.floatingJoystick=0;
workprefs.floatingJoystick=0;
if (actionEvent.getSource() == checkBox_disableMenuVKeyb)
if (checkBox_disableMenuVKeyb->isSelected())
changed_prefs.disableMenuVKeyb=1;
workprefs.disableMenuVKeyb=1;
else
changed_prefs.disableMenuVKeyb=0;
workprefs.disableMenuVKeyb=0;
RefreshPanelOnScreen();
}
};
@ -137,41 +137,41 @@ class WindowPosButtonActionListener : public gcn::ActionListener
public:
void action(const gcn::ActionEvent& actionEvent) {
if (actionEvent.getSource() == button_onscreen_ok) {
changed_prefs.pos_x_textinput = window_pos_textinput->getX();
changed_prefs.pos_y_textinput = window_pos_textinput->getY();
changed_prefs.pos_x_dpad = window_pos_dpad->getX();
changed_prefs.pos_y_dpad = window_pos_dpad->getY();
changed_prefs.pos_x_button1 = window_pos_button1->getX();
changed_prefs.pos_y_button1 = window_pos_button1->getY();
changed_prefs.pos_x_button2 = window_pos_button2->getX();
changed_prefs.pos_y_button2 = window_pos_button2->getY();
changed_prefs.pos_x_button3 = window_pos_button3->getX();
changed_prefs.pos_y_button3 = window_pos_button3->getY();
changed_prefs.pos_x_button4 = window_pos_button4->getX();
changed_prefs.pos_y_button4 = window_pos_button4->getY();
changed_prefs.pos_x_button5 = window_pos_button5->getX();
changed_prefs.pos_y_button5 = window_pos_button5->getY();
changed_prefs.pos_x_button6 = window_pos_button6->getX();
changed_prefs.pos_y_button6 = window_pos_button6->getY();
workprefs.pos_x_textinput = window_pos_textinput->getX();
workprefs.pos_y_textinput = window_pos_textinput->getY();
workprefs.pos_x_dpad = window_pos_dpad->getX();
workprefs.pos_y_dpad = window_pos_dpad->getY();
workprefs.pos_x_button1 = window_pos_button1->getX();
workprefs.pos_y_button1 = window_pos_button1->getY();
workprefs.pos_x_button2 = window_pos_button2->getX();
workprefs.pos_y_button2 = window_pos_button2->getY();
workprefs.pos_x_button3 = window_pos_button3->getX();
workprefs.pos_y_button3 = window_pos_button3->getY();
workprefs.pos_x_button4 = window_pos_button4->getX();
workprefs.pos_y_button4 = window_pos_button4->getY();
workprefs.pos_x_button5 = window_pos_button5->getX();
workprefs.pos_y_button5 = window_pos_button5->getY();
workprefs.pos_x_button6 = window_pos_button6->getX();
workprefs.pos_y_button6 = window_pos_button6->getY();
window_setup_position->setVisible(false);
}
if (actionEvent.getSource() == button_onscreen_reset) {
changed_prefs.pos_x_textinput = 0;
changed_prefs.pos_y_textinput = 0;
changed_prefs.pos_x_dpad = 4;
changed_prefs.pos_y_dpad = 215;
changed_prefs.pos_x_button1 = 430;
changed_prefs.pos_y_button1 = 286;
changed_prefs.pos_x_button2 = 378;
changed_prefs.pos_y_button2 = 286;
changed_prefs.pos_x_button3 = 430;
changed_prefs.pos_y_button3 = 214;
changed_prefs.pos_x_button4 = 378;
changed_prefs.pos_y_button4 = 214;
changed_prefs.pos_x_button5 = 430;
changed_prefs.pos_y_button5 = 142;
changed_prefs.pos_x_button6 = 378;
changed_prefs.pos_y_button6 = 142;
workprefs.pos_x_textinput = 0;
workprefs.pos_y_textinput = 0;
workprefs.pos_x_dpad = 4;
workprefs.pos_y_dpad = 215;
workprefs.pos_x_button1 = 430;
workprefs.pos_y_button1 = 286;
workprefs.pos_x_button2 = 378;
workprefs.pos_y_button2 = 286;
workprefs.pos_x_button3 = 430;
workprefs.pos_y_button3 = 214;
workprefs.pos_x_button4 = 378;
workprefs.pos_y_button4 = 214;
workprefs.pos_x_button5 = 430;
workprefs.pos_y_button5 = 142;
workprefs.pos_x_button6 = 378;
workprefs.pos_y_button6 = 142;
window_setup_position->setVisible(false);
}
}
@ -247,6 +247,8 @@ void InitPanelOnScreen(const struct _ConfigCategory& category)
button_onscreen_reset->addActionListener(windowPosButtonActionListener);
label_setup_onscreen = new gcn::Label("Try drag and drop window then press ok");
label_setup_onscreen->setPosition(100,140);
textInput = new gcn::TextField();
// label_setup_onscreen->setFont(font14);
window_pos_textinput = new gcn::Window("Ab");
@ -345,6 +347,7 @@ void ExitPanelOnScreen(void)
delete window_pos_button5;
delete window_pos_button6;
delete label_setup_onscreen;
delete textInput;
delete setupPosButtonActionListener;
delete windowPosButtonActionListener;
delete onScreenActionListener;
@ -353,82 +356,82 @@ void ExitPanelOnScreen(void)
void RefreshPanelOnScreen(void)
{
if (changed_prefs.onScreen==0)
if (workprefs.onScreen==0)
checkBox_onscreen_control->setSelected(false);
else if (changed_prefs.onScreen==1)
else if (workprefs.onScreen==1)
checkBox_onscreen_control->setSelected(true);
if (changed_prefs.onScreen_textinput==0)
if (workprefs.onScreen_textinput==0)
checkBox_onscreen_textinput->setSelected(false);
else if (changed_prefs.onScreen_textinput==1)
else if (workprefs.onScreen_textinput==1)
checkBox_onscreen_textinput->setSelected(true);
if (changed_prefs.onScreen_dpad==0)
if (workprefs.onScreen_dpad==0)
checkBox_onscreen_dpad->setSelected(false);
else if (changed_prefs.onScreen_dpad==1)
else if (workprefs.onScreen_dpad==1)
checkBox_onscreen_dpad->setSelected(true);
if (changed_prefs.onScreen_button1==0)
if (workprefs.onScreen_button1==0)
checkBox_onscreen_button1->setSelected(false);
else if (changed_prefs.onScreen_button1==1)
else if (workprefs.onScreen_button1==1)
checkBox_onscreen_button1->setSelected(true);
if (changed_prefs.onScreen_button2==0)
if (workprefs.onScreen_button2==0)
checkBox_onscreen_button2->setSelected(false);
else if (changed_prefs.onScreen_button2==1)
else if (workprefs.onScreen_button2==1)
checkBox_onscreen_button2->setSelected(true);
if (changed_prefs.onScreen_button3==0)
if (workprefs.onScreen_button3==0)
checkBox_onscreen_button3->setSelected(false);
else if (changed_prefs.onScreen_button3==1)
else if (workprefs.onScreen_button3==1)
checkBox_onscreen_button3->setSelected(true);
if (changed_prefs.onScreen_button4==0)
if (workprefs.onScreen_button4==0)
checkBox_onscreen_button4->setSelected(false);
else if (changed_prefs.onScreen_button4==1)
else if (workprefs.onScreen_button4==1)
checkBox_onscreen_button4->setSelected(true);
if (changed_prefs.onScreen_button5==0)
if (workprefs.onScreen_button5==0)
checkBox_onscreen_button5->setSelected(false);
else if (changed_prefs.onScreen_button5==1)
else if (workprefs.onScreen_button5==1)
checkBox_onscreen_button5->setSelected(true);
if (changed_prefs.onScreen_button6==0)
if (workprefs.onScreen_button6==0)
checkBox_onscreen_button6->setSelected(false);
else if (changed_prefs.onScreen_button6==1)
else if (workprefs.onScreen_button6==1)
checkBox_onscreen_button6->setSelected(true);
if (changed_prefs.custom_position==0)
if (workprefs.custom_position==0)
checkBox_onscreen_custompos->setSelected(false);
else if (changed_prefs.custom_position==1)
else if (workprefs.custom_position==1)
checkBox_onscreen_custompos->setSelected(true);
if (changed_prefs.floatingJoystick)
if (workprefs.floatingJoystick)
checkBox_floatingJoystick->setSelected(true);
else
checkBox_floatingJoystick->setSelected(false);
if (changed_prefs.disableMenuVKeyb)
if (workprefs.disableMenuVKeyb)
checkBox_disableMenuVKeyb->setSelected(true);
else
checkBox_disableMenuVKeyb->setSelected(false);
txtName->disableVirtualKeyboard(changed_prefs.disableMenuVKeyb);
textInput->disableVirtualKeyboard(workprefs.disableMenuVKeyb);
window_pos_textinput->setX(changed_prefs.pos_x_textinput);
window_pos_textinput->setY(changed_prefs.pos_y_textinput);
window_pos_textinput->setVisible(changed_prefs.onScreen_textinput);
window_pos_dpad->setX(changed_prefs.pos_x_dpad);
window_pos_dpad->setY(changed_prefs.pos_y_dpad);
window_pos_dpad->setVisible(changed_prefs.onScreen_dpad);
window_pos_button1->setX(changed_prefs.pos_x_button1);
window_pos_button1->setY(changed_prefs.pos_y_button1);
window_pos_button1->setVisible(changed_prefs.onScreen_button1);
window_pos_button2->setX(changed_prefs.pos_x_button2);
window_pos_button2->setY(changed_prefs.pos_y_button2);
window_pos_button2->setVisible(changed_prefs.onScreen_button2);
window_pos_button3->setX(changed_prefs.pos_x_button3);
window_pos_button3->setY(changed_prefs.pos_y_button3);
window_pos_button3->setVisible(changed_prefs.onScreen_button3);
window_pos_button4->setX(changed_prefs.pos_x_button4);
window_pos_button4->setY(changed_prefs.pos_y_button4);
window_pos_button4->setVisible(changed_prefs.onScreen_button4);
window_pos_button5->setX(changed_prefs.pos_x_button5);
window_pos_button5->setY(changed_prefs.pos_y_button5);
window_pos_button5->setVisible(changed_prefs.onScreen_button5);
window_pos_button6->setX(changed_prefs.pos_x_button6);
window_pos_button6->setY(changed_prefs.pos_y_button6);
window_pos_button6->setVisible(changed_prefs.onScreen_button6);
button_onscreen_pos->setVisible(changed_prefs.custom_position);
window_pos_textinput->setX(workprefs.pos_x_textinput);
window_pos_textinput->setY(workprefs.pos_y_textinput);
window_pos_textinput->setVisible(workprefs.onScreen_textinput);
window_pos_dpad->setX(workprefs.pos_x_dpad);
window_pos_dpad->setY(workprefs.pos_y_dpad);
window_pos_dpad->setVisible(workprefs.onScreen_dpad);
window_pos_button1->setX(workprefs.pos_x_button1);
window_pos_button1->setY(workprefs.pos_y_button1);
window_pos_button1->setVisible(workprefs.onScreen_button1);
window_pos_button2->setX(workprefs.pos_x_button2);
window_pos_button2->setY(workprefs.pos_y_button2);
window_pos_button2->setVisible(workprefs.onScreen_button2);
window_pos_button3->setX(workprefs.pos_x_button3);
window_pos_button3->setY(workprefs.pos_y_button3);
window_pos_button3->setVisible(workprefs.onScreen_button3);
window_pos_button4->setX(workprefs.pos_x_button4);
window_pos_button4->setY(workprefs.pos_y_button4);
window_pos_button4->setVisible(workprefs.onScreen_button4);
window_pos_button5->setX(workprefs.pos_x_button5);
window_pos_button5->setY(workprefs.pos_y_button5);
window_pos_button5->setVisible(workprefs.onScreen_button5);
window_pos_button6->setX(workprefs.pos_x_button6);
window_pos_button6->setY(workprefs.pos_y_button6);
window_pos_button6->setVisible(workprefs.onScreen_button6);
button_onscreen_pos->setVisible(workprefs.custom_position);
}
bool HelpPanelOnScreen(std::vector<std::string> &helptext)

View file

@ -430,7 +430,7 @@ bool HelpPanelPaths(std::vector<std::string> &helptext)
helptext.emplace_back("Specify the location of your kickstart roms and the folders where the configurations");
helptext.emplace_back("and controller files should be stored. With the button \"...\" you can open a dialog");
helptext.emplace_back("to choose the folder.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("After changing the location of the kickstart roms, click on \"Rescan\" to refresh");
helptext.emplace_back("the list of the available ROMs.");
return true;

View file

@ -68,6 +68,9 @@ static struct amigamodels amodels[] = {
"Basic non-expanded configuration",
"2 MB Chip RAM expanded configuration",
"4 MB Fast RAM expanded configuration",
#ifdef ANDROID
" ", " ", " ",
#endif
"\0"
}
},
@ -76,6 +79,9 @@ static struct amigamodels amodels[] = {
"Basic non-expanded configuration",
"2 MB Chip RAM expanded configuration",
"4 MB Fast RAM expanded configuration",
#ifdef ANDROID
" ", " ", " ",
#endif
"\0"
}
},
@ -89,6 +95,9 @@ static struct amigamodels amodels[] = {
4, "Amiga 1200", {
"Basic non-expanded configuration",
"4 MB Fast RAM expanded configuration",
#ifdef ANDROID
" ", " ", " ", " ",
#endif
"\0"
}
},
@ -104,6 +113,9 @@ static struct amigamodels amodels[] = {
1, "Amiga 4000", {
"68030, 3.1 ROM, 2MB Chip + 8MB Fast",
"68040, 3.1 ROM, 2MB Chip + 8MB Fast",
#ifdef ANDROID
" ", " ", " ", " ",
#endif
"\0"
}
},
@ -118,6 +130,9 @@ static struct amigamodels amodels[] = {
3, "CD32", {
"CD32",
"CD32 with Full Motion Video cartridge",
#ifdef ANDROID
" ", " ", " ", " ",
#endif
"\0"
}
},
@ -938,10 +953,10 @@ bool HelpPanelQuickstart(vector<string>& helptext)
helptext.clear();
helptext.emplace_back("Simplified start of emulation by just selecting the Amiga model and the disk/CD");
helptext.emplace_back("you want to use.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("After selecting the Amiga model, you can choose from a small list of standard");
helptext.emplace_back("configurations for this model to start with.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("When you activate \"Start in Quickstart mode\", the next time you run the emulator,");
helptext.emplace_back("it will start with the QuickStart panel. Otherwise you start in configurations panel.");
return true;

View file

@ -354,7 +354,7 @@ bool HelpPanelRAM(vector<string>& helptext)
{
helptext.clear();
helptext.emplace_back("Select the amount of RAM for each type you want to emulate in your Amiga.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("\"Slow\" is the simple memory extension of an Amiga 500.");
helptext.emplace_back("\"Z2 Fast\" is real fast memory in 24 bit address space.");
helptext.emplace_back("\"Z3 Fast\" is real fast memory in 32 bit address space and only available if");
@ -362,7 +362,7 @@ bool HelpPanelRAM(vector<string>& helptext)
helptext.emplace_back("\"RTG board\" is the graphics memory used by Picasso96 and only available if");
helptext.emplace_back("a 32 bit CPU is selected. If you select some memory for this type,");
helptext.emplace_back("the Z3 RTG board will be activated.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("A4000 motherboard and processor board memory is only detected by the Amiga if ");
helptext.emplace_back("you choose the correct Kickstart ROM (A4000).");
return true;

View file

@ -69,7 +69,7 @@ public:
auto currIdx = -1;
if (ROMType & (ROMTYPE_ALL_EXT | ROMTYPE_ALL_CART))
{
roms.push_back("");
roms.push_back(" ");
idxToAvailableROMs.push_back(-1);
currIdx = 0;
}
@ -115,7 +115,7 @@ public:
if (rom != nullptr)
strncpy(workprefs.romextfile, rom->Path, sizeof(workprefs.romextfile));
else
strncpy(workprefs.romextfile, "", sizeof(workprefs.romextfile));
strncpy(workprefs.romextfile, " ", sizeof(workprefs.romextfile));
}
};
@ -311,9 +311,9 @@ bool HelpPanelROM(std::vector<std::string> &helptext)
{
helptext.clear();
helptext.emplace_back("Select the required kickstart ROM for the Amiga you want to emulate in \"Main ROM File\".");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("In \"Extended ROM File\", you can only select the required ROM for CD32 emulation.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("In \"Cartridge ROM File\", you can select the CD32 FMV module to activate video");
helptext.emplace_back("playback in CD32. There are also some Action Replay and Freezer cards and the built-in");
helptext.emplace_back("HRTMon available.");

View file

@ -262,11 +262,11 @@ bool HelpPanelSavestate(std::vector<std::string> &helptext)
helptext.clear();
helptext.emplace_back("Savestates are stored with the name of the disk in drive DF0 attached");
helptext.emplace_back("with the selected number.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("When you hold left shoulder button and press 'l' during emulation, ");
helptext.emplace_back("the state of the last active number will be loaded. Hold left shoulder ");
helptext.emplace_back("button and press 's' to save the current state in the last active slot.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("Note: Savestates will not work with HDDs.");
return true;
}

View file

@ -473,13 +473,13 @@ bool HelpPanelSound(std::vector<std::string> &helptext)
helptext.clear();
helptext.emplace_back("You can turn on sound emulation with different levels of accuracy and");
helptext.emplace_back("choose between Mono and Stereo.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("The different types of interpolation have different impact on performance. ");
helptext.emplace_back("Play with the settings to find the type you like most. You may need headphones .");
helptext.emplace_back("to really hear the difference between the interpolation types.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back("With \"Filter\", you can select the type of the Amiga audio filter.");
helptext.emplace_back("");
helptext.emplace_back(" ");
helptext.emplace_back(R"(With "Stereo separation" and "Stereo delay", you can adjust how the left )");
helptext.emplace_back("and right audio channels of the Amiga are mixed to the left and right channels ");
helptext.emplace_back("of your device. A value of 70% for separation and no delay is a good start.");

View file

@ -32,6 +32,7 @@
#ifdef ANDROIDSDL
#include "androidsdl_event.h"
#endif
#define DIALOG_WIDTH 520
#define DIALOG_HEIGHT 400
@ -190,6 +191,19 @@ public:
static SelectFileActionListener* selectFileActionListener;
#ifdef ANDROID
class EditFilePathActionListener : public gcn::ActionListener
{
public:
void action(const gcn::ActionEvent& actionEvent)
{
char tmp[MAX_PATH];
strncpy(tmp, txtCurrent->getText().c_str(), MAX_PATH - 1);
checkfoldername(tmp);
}
};
static EditFilePathActionListener* editFilePathActionListener;
#endif
static void InitSelectFile(const char* title)
{
@ -219,7 +233,13 @@ static void InitSelectFile(const char* title)
txtCurrent = new gcn::TextField();
txtCurrent->setSize(DIALOG_WIDTH - 2 * DISTANCE_BORDER - 4, TEXTFIELD_HEIGHT);
txtCurrent->setPosition(DISTANCE_BORDER, 10);
txtCurrent->setEnabled(false);
#ifdef ANDROID
txtCurrent->setEnabled(true);
editFilePathActionListener = new EditFilePathActionListener();
txtCurrent->addActionListener(editFilePathActionListener);
#else
txtCurrent->setEnabled(false);
#endif
selectFileActionListener = new SelectFileActionListener();
fileList = new SelectFileListModel(".");
@ -238,7 +258,11 @@ static void InitSelectFile(const char* title)
#endif
scrAreaFiles->setPosition(DISTANCE_BORDER, 10 + TEXTFIELD_HEIGHT + 10);
scrAreaFiles->setSize(DIALOG_WIDTH - 2 * DISTANCE_BORDER - 4, 272);
scrAreaFiles->setScrollbarWidth(20);
#ifdef ANDROID
scrAreaFiles->setScrollbarWidth(30);
#else
scrAreaFiles->setScrollbarWidth(20);
#endif
scrAreaFiles->setBaseColor(gui_baseCol);
if (createNew)
@ -283,6 +307,9 @@ static void ExitSelectFile()
delete lstFiles;
delete scrAreaFiles;
delete selectFileActionListener;
#ifdef ANDROID
delete editFilePathActionListener;
#endif
delete fileList;
if (createNew)
{

View file

@ -133,6 +133,19 @@ public:
static ListBoxActionListener* listBoxActionListener;
#ifdef ANDROID
class EditDirPathActionListener : public gcn::ActionListener
{
public:
void action(const gcn::ActionEvent& actionEvent)
{
char tmp[MAX_PATH];
strncpy(tmp, txtCurrent->getText().c_str(), MAX_PATH - 1);
checkfoldername(tmp);
}
};
static EditDirPathActionListener* editDirPathActionListener;
#endif
static void InitSelectFolder(const char* title)
{
@ -162,7 +175,13 @@ static void InitSelectFolder(const char* title)
txtCurrent = new gcn::TextField();
txtCurrent->setSize(DIALOG_WIDTH - 2 * DISTANCE_BORDER - 4, TEXTFIELD_HEIGHT);
txtCurrent->setPosition(DISTANCE_BORDER, 10);
txtCurrent->setEnabled(false);
#ifdef ANDROID
txtCurrent->setEnabled(true);
editDirPathActionListener = new EditDirPathActionListener();
txtCurrent->addActionListener(editDirPathActionListener);
#else
txtCurrent->setEnabled(false);
#endif
listBoxActionListener = new ListBoxActionListener();
@ -180,7 +199,11 @@ static void InitSelectFolder(const char* title)
#endif
scrAreaFolders->setPosition(DISTANCE_BORDER, 10 + TEXTFIELD_HEIGHT + 10);
scrAreaFolders->setSize(DIALOG_WIDTH - 2 * DISTANCE_BORDER - 4, 272);
scrAreaFolders->setScrollbarWidth(20);
#ifdef ANDROID
scrAreaFolders->setScrollbarWidth(30);
#else
scrAreaFolders->setScrollbarWidth(20);
#endif
scrAreaFolders->setBaseColor(gui_baseCol);
wndSelectFolder->add(cmdOK);

View file

@ -53,10 +53,6 @@ public:
static ShowMessageActionListener* showMessageActionListener;
#ifdef ANDROIDSDL
#include "androidsdl_event.h"
#endif
static void InitShowMessage()
{
wndShowMessage = new gcn::Window("Message");

View file

@ -18,7 +18,11 @@ namespace gcn
ListBox* listBox)
: DropDown(listModel, scrollArea, listBox)
{
mScrollArea->setScrollbarWidth(20);
#ifdef ANDROID
mScrollArea->setScrollbarWidth(30);
#else
mScrollArea->setScrollbarWidth(20);
#endif
}

View file

@ -1,5 +1,3 @@
#include <string.h>
#ifdef USE_SDL1
#include <guichan/sdl.hpp>
#elif USE_SDL2

View file

@ -1006,7 +1006,9 @@ namespace widgets
//--------------------------------------------------
// Place everything on main form
//--------------------------------------------------
#ifndef ANDROIDSDL
gui_top->add(cmdShutdown, DISTANCE_BORDER, GUI_HEIGHT - DISTANCE_BORDER - BUTTON_HEIGHT);
#endif
gui_top->add(cmdQuit, DISTANCE_BORDER + BUTTON_WIDTH + DISTANCE_NEXT_X, GUI_HEIGHT - DISTANCE_BORDER - BUTTON_HEIGHT);
gui_top->add(cmdRestart, DISTANCE_BORDER + 2 * BUTTON_WIDTH + 2 * DISTANCE_NEXT_X, GUI_HEIGHT - DISTANCE_BORDER - BUTTON_HEIGHT);
gui_top->add(cmdHelp, DISTANCE_BORDER + 3 * BUTTON_WIDTH + 3 * DISTANCE_NEXT_X, GUI_HEIGHT - DISTANCE_BORDER - BUTTON_HEIGHT);

View file

@ -39,7 +39,13 @@
#include <asm/sigcontext.h>
#include <signal.h>
#include <dlfcn.h>
#ifndef ANDROID
#include <execinfo.h>
#else
int backtrace(void**,int){ return 0; }
char** backtrace_symbols(void* const*,int){return NULL; }
void backtrace_symbols_fd(void* const*,int,int){}
#endif
#include <SDL.h>
#ifdef JIT

View file

@ -570,27 +570,6 @@ typedef char TCHAR;
#define _wunlink(x) unlink(x)
#define _istalnum(x) isalnum(x)
#ifdef ANDROID
#define fmodl(x,y) fmod(x,y)
#define remainderl(x,y) remainder(x,y)
#define sinhl(x) sinh(x)
#define sqrtl(x) sqrt(x)
#define log1pl(x) log1p(x)
#define expm1l(x) expm1(x)
#define tanhl(x) tanh(x)
#define atanl(x) atan(x)
#define atanhl(x) atanh(x)
#define sinl(x) sin(x)
#define asinl(x) asin(x)
#define tanl(x) tan(x)
#define expl(x) exp(x)
#define powl(x,y) pow(x,y)
#define logl(x) log(x)
#define log10l(x) log10(x)
#if defined(ANDROID) && !defined(CPU_AARCH64)
#define log2l(x) (log(x)/log(2))
#define lrintl(x) lrint(x)
#define rintl(x) rint(x)
#define coshl(x) cosh(x)
#define acosl(x) acos(x)
#define cosl(x) cos(x)
#endif