v0.2: Merge TomB improvements

This commit is contained in:
Chips-fr 2015-05-17 07:52:43 +00:00
parent 470ce4e523
commit 422ed334f4
58 changed files with 8539 additions and 3900 deletions

View file

@ -94,7 +94,9 @@ static NavigationMap navMap[] =
//PanelRAM
{ "Chipmem", "", "", "RAM", "Slowmem" },
{ "Slowmem", "", "", "Chipmem", "Fastmem" },
{ "Fastmem", "", "", "Slowmem", "RAM" },
{ "Fastmem", "", "", "Slowmem", "Z3mem" },
{ "Z3mem", "", "", "Fastmem", "Gfxmem" },
{ "Gfxmem", "", "", "Z3mem", "RAM" },
//PanelFloppy
{ "DF0:", "Floppy drives", "cboType0", "SaveForDisk", "cboDisk0" },

View file

@ -44,22 +44,31 @@ class CPUButtonActionListener : public gcn::ActionListener
{
changed_prefs.cpu_level = 0;
changed_prefs.address_space_24 = true;
changed_prefs.z3fastmem_size = 0;
changed_prefs.gfxmem_size = 0;
}
else if (actionEvent.getSource() == optCPU68010)
{
changed_prefs.cpu_level = 1;
changed_prefs.address_space_24 = true;
changed_prefs.z3fastmem_size = 0;
changed_prefs.gfxmem_size = 0;
changed_prefs.cpu_compatible = 0;
}
else if (actionEvent.getSource() == optCPU68EC020)
{
changed_prefs.cpu_level = 2;
changed_prefs.address_space_24 = true;
changed_prefs.z3fastmem_size = 0;
changed_prefs.gfxmem_size = 0;
changed_prefs.cpu_compatible = 0;
}
else if (actionEvent.getSource() == optCPU68020)
{
changed_prefs.cpu_level = 2;
if(optFPU68881->isSelected())
changed_prefs.cpu_level = 3; // with 68881
else
changed_prefs.cpu_level = 2; // no fpu
changed_prefs.address_space_24 = false;
changed_prefs.cpu_compatible = 0;
}
@ -70,6 +79,7 @@ class CPUButtonActionListener : public gcn::ActionListener
changed_prefs.cpu_compatible = 0;
}
RefreshPanelCPU();
RefreshPanelRAM();
}
};
static CPUButtonActionListener* cpuButtonActionListener;
@ -290,7 +300,7 @@ void RefreshPanelCPU(void)
}
else
{
if(changed_prefs.cpu_level == 2)
if(changed_prefs.cpu_level == 2 || changed_prefs.cpu_level == 3)
optCPU68020->setSelected(true);
else if(changed_prefs.cpu_level == 4)
optCPU68040->setSelected(true);

View file

@ -37,7 +37,7 @@ bool LoadConfigByName(const char *name)
{
txtName->setText(config->Name);
txtDesc->setText(config->Description);
my_cfgfile_load(&changed_prefs, config->FullPath, 0);
target_cfgfile_load(&changed_prefs, config->FullPath, 0, 0);
strncpy(last_active_config, config->Name, MAX_PATH);
RefreshAllPanels();
}
@ -45,6 +45,12 @@ bool LoadConfigByName(const char *name)
return false;
}
void SetLastActiveConfig(const char *filename)
{
extractFileName(filename, last_active_config);
removeFileExtension(last_active_config);
}
class ConfigsListModel : public gcn::ListModel
{
@ -99,7 +105,7 @@ class ConfigButtonActionListener : public gcn::ActionListener
// Load selected configuration
//-----------------------------------------------
i = lstConfigs->getSelected();
my_cfgfile_load(&changed_prefs, ConfigFilesList[i]->FullPath, 0);
target_cfgfile_load(&changed_prefs, ConfigFilesList[i]->FullPath, 0, 0);
strncpy(last_active_config, ConfigFilesList[i]->Name, MAX_PATH);
RefreshAllPanels();
}
@ -167,10 +173,10 @@ class ConfigsListActionListener : public gcn::ActionListener
//-----------------------------------------------
// Selected same config again -> load and start it
//-----------------------------------------------
my_cfgfile_load(&changed_prefs, ConfigFilesList[selected_item]->FullPath, 0);
target_cfgfile_load(&changed_prefs, ConfigFilesList[selected_item]->FullPath, 0, 0);
strncpy(last_active_config, ConfigFilesList[selected_item]->Name, MAX_PATH);
RefreshAllPanels();
uae_reset(0);
uae_reset(1);
gui_running = false;
}
else

View file

@ -22,8 +22,8 @@ static const char *ChipMem_list[] = { "512 K", "1 MB", "2 MB", "4 MB", "8 MB" };
static const int ChipMem_values[] = { 0x080000, 0x100000, 0x200000, 0x400000, 0x800000 };
static const char *SlowMem_list[] = { "None", "512 K", "1 MB", "1.5 MB", "1.8 MB" };
static const int SlowMem_values[] = { 0x000000, 0x080000, 0x100000, 0x180000, 0x1c0000 };
static const char *FastMem_list[] = { "None", "1 MB", "2 MB", "4 MB", "8 MB" };
static const int FastMem_values[] = { 0x000000, 0x100000, 0x200000, 0x400000, 0x800000 };
static const char *FastMem_list[] = { "None", "1 MB", "2 MB", "4 MB", "8 MB", "16 MB", "32 MB", "64 MB" };
static const int FastMem_values[] = { 0x000000, 0x100000, 0x200000, 0x400000, 0x800000, 0x1000000, 0x2000000, 0x4000000 };
static gcn::Window *grpRAM;
static gcn::Label* lblChipmem;
@ -35,6 +35,12 @@ static gcn::Slider* sldSlowmem;
static gcn::Label* lblFastmem;
static gcn::Label* lblFastsize;
static gcn::Slider* sldFastmem;
static gcn::Label* lblZ3mem;
static gcn::Label* lblZ3size;
static gcn::Slider* sldZ3mem;
static gcn::Label* lblGfxmem;
static gcn::Label* lblGfxsize;
static gcn::Slider* sldGfxmem;
class MemorySliderActionListener : public gcn::ActionListener
@ -57,6 +63,17 @@ class MemorySliderActionListener : public gcn::ActionListener
if (changed_prefs.fastmem_size > 0 && changed_prefs.chipmem_size > 0x200000)
changed_prefs.chipmem_size = 0x200000;
}
if (actionEvent.getSource() == sldZ3mem) {
changed_prefs.z3fastmem_size = FastMem_values[(int)(sldZ3mem->getValue())];
if (changed_prefs.z3fastmem_size > max_z3fastmem)
changed_prefs.z3fastmem_size = max_z3fastmem;
}
if (actionEvent.getSource() == sldGfxmem) {
changed_prefs.gfxmem_size = FastMem_values[(int)(sldGfxmem->getValue())];
}
RefreshPanelRAM();
}
};
@ -96,28 +113,58 @@ void InitPanelRAM(const struct _ConfigCategory& category)
sldFastmem->setId("Fastmem");
sldFastmem->addActionListener(memorySliderActionListener);
lblFastsize = new gcn::Label("None ");
lblZ3mem = new gcn::Label("Z3 fast:");
sldZ3mem = new gcn::Slider(0, 7);
sldZ3mem->setSize(110, SLIDER_HEIGHT);
sldZ3mem->setBaseColor(gui_baseCol);
sldZ3mem->setMarkerLength(20);
sldZ3mem->setStepLength(1);
sldZ3mem->setId("Z3mem");
sldZ3mem->addActionListener(memorySliderActionListener);
lblZ3size = new gcn::Label("None ");
lblGfxmem = new gcn::Label("RTG:");
sldGfxmem = new gcn::Slider(0, 5);
sldGfxmem->setSize(110, SLIDER_HEIGHT);
sldGfxmem->setBaseColor(gui_baseCol);
sldGfxmem->setMarkerLength(20);
sldGfxmem->setStepLength(1);
sldGfxmem->setId("Gfxmem");
sldGfxmem->addActionListener(memorySliderActionListener);
lblGfxsize = new gcn::Label("None ");
grpRAM = new gcn::Window("Memory Settings");
grpRAM->setPosition(DISTANCE_BORDER, DISTANCE_BORDER);
int posY = 10;
grpRAM->add(lblChipmem, 8, posY);
grpRAM->add(sldChipmem, 50, posY);
grpRAM->add(lblChipsize, 50 + sldChipmem->getWidth() + 12, posY);
grpRAM->add(sldChipmem, 70, posY);
grpRAM->add(lblChipsize, 70 + sldChipmem->getWidth() + 12, posY);
posY += sldChipmem->getHeight() + DISTANCE_NEXT_Y;
grpRAM->add(lblSlowmem, 8, posY);
grpRAM->add(sldSlowmem, 50, posY);
grpRAM->add(lblSlowsize, 50 + sldSlowmem->getWidth() + 12, posY);
grpRAM->add(sldSlowmem, 70, posY);
grpRAM->add(lblSlowsize, 70 + sldSlowmem->getWidth() + 12, posY);
posY += sldSlowmem->getHeight() + DISTANCE_NEXT_Y;
grpRAM->add(lblFastmem, 8, posY);
grpRAM->add(sldFastmem, 50, posY);
grpRAM->add(lblFastsize, 50 + sldFastmem->getWidth() + 12, posY);
grpRAM->add(sldFastmem, 70, posY);
grpRAM->add(lblFastsize, 70 + sldFastmem->getWidth() + 12, posY);
posY += sldFastmem->getHeight() + DISTANCE_NEXT_Y;
grpRAM->add(lblZ3mem, 8, posY);
grpRAM->add(sldZ3mem, 70, posY);
grpRAM->add(lblZ3size, 70 + sldZ3mem->getWidth() + 12, posY);
posY += sldZ3mem->getHeight() + DISTANCE_NEXT_Y;
grpRAM->add(lblGfxmem, 8, posY);
grpRAM->add(sldGfxmem, 70, posY);
grpRAM->add(lblGfxsize, 70 + sldGfxmem->getWidth() + 12, posY);
posY += sldGfxmem->getHeight() + DISTANCE_NEXT_Y;
grpRAM->setMovable(false);
grpRAM->setSize(230, posY + DISTANCE_BORDER);
grpRAM->setSize(250, posY + DISTANCE_BORDER);
grpRAM->setBaseColor(gui_baseCol);
category.panel->add(grpRAM);
@ -137,6 +184,12 @@ void ExitPanelRAM(void)
delete lblFastmem;
delete sldFastmem;
delete lblFastsize;
delete lblZ3mem;
delete sldZ3mem;
delete lblZ3size;
delete lblGfxmem;
delete sldGfxmem;
delete lblGfxsize;
delete grpRAM;
delete memorySliderActionListener;
}
@ -175,5 +228,26 @@ void RefreshPanelRAM(void)
break;
}
}
for(i=0; i<8; ++i)
{
if(changed_prefs.z3fastmem_size == FastMem_values[i])
{
sldZ3mem->setValue(i);
lblZ3size->setCaption(FastMem_list[i]);
break;
}
}
sldZ3mem->setEnabled(!changed_prefs.address_space_24);
for(i=0; i<6; ++i)
{
if(changed_prefs.gfxmem_size == FastMem_values[i])
{
sldGfxmem->setValue(i);
lblGfxsize->setCaption(FastMem_list[i]);
break;
}
}
sldGfxmem->setEnabled(!changed_prefs.address_space_24);
}

View file

@ -11,6 +11,7 @@
#include "sysdeps.h"
#include "config.h"
#include "options.h"
#include "autoconf.h"
#include "xwin.h"
#include "custom.h"
#include "drawing.h"
@ -33,7 +34,8 @@ static gcn::Icon* icoSavestate = 0;
static gcn::Image *imgSavestate = 0;
static gcn::Button* cmdLoadState;
static gcn::Button* cmdSaveState;
static gcn::Label *lblWarningHDDon;
class SavestateActionListener : public gcn::ActionListener
{
@ -140,12 +142,16 @@ void InitPanelSavestate(const struct _ConfigCategory& category)
cmdSaveState->setBaseColor(gui_baseCol);
cmdSaveState->setId("SaveState");
cmdSaveState->addActionListener(savestateActionListener);
lblWarningHDDon = new gcn::Label("State saves do not support harddrive emulation.");
lblWarningHDDon->setSize(360, LABEL_HEIGHT);
category.panel->add(grpNumber, DISTANCE_BORDER, DISTANCE_BORDER);
category.panel->add(wndScreenshot, DISTANCE_BORDER + 100, DISTANCE_BORDER);
int buttonY = category.panel->getHeight() - DISTANCE_BORDER - BUTTON_HEIGHT;
category.panel->add(cmdLoadState, DISTANCE_BORDER, buttonY);
category.panel->add(cmdSaveState, DISTANCE_BORDER + BUTTON_WIDTH + DISTANCE_NEXT_X, buttonY);
category.panel->add(lblWarningHDDon, DISTANCE_BORDER + 100, DISTANCE_BORDER + 50);
RefreshPanelSavestate();
}
@ -169,7 +175,8 @@ void ExitPanelSavestate(void)
delete cmdLoadState;
delete cmdSaveState;
delete lblWarningHDDon;
delete savestateActionListener;
}
@ -230,4 +237,14 @@ void RefreshPanelSavestate(void)
}
}
}
bool enabled = nr_units (currprefs.mountinfo) == 0;
optState0->setEnabled(enabled);
optState1->setEnabled(enabled);
optState2->setEnabled(enabled);
optState3->setEnabled(enabled);
wndScreenshot->setVisible(enabled);
cmdLoadState->setEnabled(enabled);
cmdSaveState->setEnabled(enabled);
lblWarningHDDon->setVisible(!enabled);
}

View file

@ -240,7 +240,7 @@ namespace widgets
//-------------------------------------------------
// Reset Amiga via click on Reset-button
//-------------------------------------------------
uae_reset(0);
uae_reset(1);
gui_running = false;
}
else if(actionEvent.getSource() == cmdRestart)

View file

@ -303,17 +303,14 @@ static void SetPresetMode(int mode, struct uae_prefs *p)
}
static void SetDefaultMenuSettings(int general)
static void SetDefaultMenuSettings(struct uae_prefs *p)
{
if(general < 2)
{
while(nr_units(currprefs.mountinfo) > 0)
kill_filesys_unit(currprefs.mountinfo, 0);
}
while(nr_units(p->mountinfo) > 0)
kill_filesys_unit(p->mountinfo, 0);
kickstart = 1;
SetPresetMode(2, &changed_prefs);
SetPresetMode(2, p);
}
@ -366,7 +363,7 @@ const char *kickstarts_names[] = { "KS ROM v1.2\0", "KS ROM v1.3\0", "KS ROM v2.
const char *af_kickstarts_rom_names[] = { "amiga-os-120.rom\0", "amiga-os-130.rom\0", "amiga-os-204.rom\0", "amiga-os-310-a1200.rom\0" };
#endif
static bool CheckKickstart(void)
static bool CheckKickstart(struct uae_prefs *p)
{
char kickpath[MAX_DPATH];
int i;
@ -379,7 +376,7 @@ static bool CheckKickstart(void)
if(!strcasecmp(lstAvailableROMs[i]->Path, kickpath))
{
// Found it
strncpy(changed_prefs.romfile, kickpath, sizeof(changed_prefs.romfile));
strncpy(p->romfile, kickpath, sizeof(p->romfile));
return true;
}
}
@ -392,7 +389,7 @@ static bool CheckKickstart(void)
if(!strncasecmp(lstAvailableROMs[i]->Name, kickstarts_names[kickstart], strlen(kickstarts_names[kickstart])))
{
// Found it
strncpy(changed_prefs.romfile, lstAvailableROMs[i]->Path, sizeof(changed_prefs.romfile));
strncpy(p->romfile, lstAvailableROMs[i]->Path, sizeof(p->romfile));
return true;
}
}
@ -403,7 +400,7 @@ static bool CheckKickstart(void)
// In this procedure, we use changed_prefs
int loadconfig_old(const char *orgpath, int general)
int loadconfig_old(struct uae_prefs *p, const char *orgpath)
{
char path[MAX_PATH];
@ -423,7 +420,8 @@ int loadconfig_old(const char *orgpath, int general)
else
{
// Set everthing to default and clear HD settings
SetDefaultMenuSettings(general);
default_prefs(p, 0);
SetDefaultMenuSettings(p);
char filebuffer[256];
int dummy;
@ -434,9 +432,9 @@ int loadconfig_old(const char *orgpath, int general)
#else
fscanf(f,"scaling=%d\n",&mainMenu_enableHWscaling);
#endif
fscanf(f,"showstatus=%d\n", &changed_prefs.leds_on_screen);
fscanf(f,"mousemultiplier=%d\n", &changed_prefs.input_joymouse_multiplier);
changed_prefs.input_joymouse_multiplier *= 10;
fscanf(f,"showstatus=%d\n", &p->leds_on_screen);
fscanf(f,"mousemultiplier=%d\n", &p->input_joymouse_multiplier);
p->input_joymouse_multiplier *= 10;
#if defined(PANDORA) || defined(ANDROIDSDL)
fscanf(f,"systemclock=%d\n",&dummy); // mainMenu_throttle never changes -> removed
fscanf(f,"syncthreshold=%d\n", &dummy); // timeslice_mode never changes -> removed
@ -444,28 +442,28 @@ int loadconfig_old(const char *orgpath, int general)
fscanf(f,"systemclock=%d\n",&mainMenu_throttle);
fscanf(f,"syncthreshold=%d\n", &timeslice_mode);
#endif
fscanf(f,"frameskip=%d\n", &changed_prefs.gfx_framerate);
fscanf(f,"sound=%d\n",&changed_prefs.produce_sound );
if(changed_prefs.produce_sound >= 10)
fscanf(f,"frameskip=%d\n", &p->gfx_framerate);
fscanf(f,"sound=%d\n",&p->produce_sound );
if(p->produce_sound >= 10)
{
changed_prefs.sound_stereo = 1;
changed_prefs.produce_sound -= 10;
if(changed_prefs.produce_sound > 0)
changed_prefs.produce_sound += 1;
p->sound_stereo = 1;
p->produce_sound -= 10;
if(p->produce_sound > 0)
p->produce_sound += 1;
}
else
changed_prefs.sound_stereo = 0;
fscanf(f,"soundrate=%d\n",&changed_prefs.sound_freq);
p->sound_stereo = 0;
fscanf(f,"soundrate=%d\n",&p->sound_freq);
fscanf(f,"autosave=%d\n", &dummy);
fscanf(f,"gp2xclock=%d\n", &dummy);
int joybuffer = 0;
fscanf(f,"joyconf=%d\n",&joybuffer);
changed_prefs.pandora_joyConf = (joybuffer & 0x0f);
changed_prefs.pandora_joyPort = ((joybuffer >> 4) & 0x0f);
fscanf(f,"autofireRate=%d\n",&changed_prefs.input_autofire_framecnt);
p->pandora_joyConf = (joybuffer & 0x0f);
p->pandora_joyPort = ((joybuffer >> 4) & 0x0f);
fscanf(f,"autofireRate=%d\n",&p->input_autofire_framecnt);
fscanf(f,"autofire=%d\n", &dummy);
fscanf(f,"stylusOffset=%d\n",&changed_prefs.pandora_stylusOffset);
fscanf(f,"tapDelay=%d\n",&changed_prefs.pandora_tapDelay);
fscanf(f,"stylusOffset=%d\n",&p->pandora_stylusOffset);
fscanf(f,"tapDelay=%d\n",&p->pandora_tapDelay);
fscanf(f,"scanlines=%d\n", &dummy);
#if defined(PANDORA) || defined(ANDROIDSDL)
fscanf(f,"ham=%d\n",&dummy);
@ -473,169 +471,126 @@ int loadconfig_old(const char *orgpath, int general)
fscanf(f,"ham=%d\n",&mainMenu_ham);
#endif
fscanf(f,"enableScreenshots=%d\n", &dummy);
fscanf(f,"floppyspeed=%d\n",&changed_prefs.floppy_speed);
fscanf(f,"drives=%d\n", &changed_prefs.nr_floppies);
fscanf(f,"videomode=%d\n", &changed_prefs.ntscmode);
if(changed_prefs.ntscmode)
changed_prefs.chipset_refreshrate = 60;
fscanf(f,"floppyspeed=%d\n",&p->floppy_speed);
fscanf(f,"drives=%d\n", &p->nr_floppies);
fscanf(f,"videomode=%d\n", &p->ntscmode);
if(p->ntscmode)
p->chipset_refreshrate = 60;
else
changed_prefs.chipset_refreshrate = 50;
fscanf(f,"mainMenu_cpuSpeed=%d\n",&changed_prefs.pandora_cpu_speed);
p->chipset_refreshrate = 50;
fscanf(f,"mainMenu_cpuSpeed=%d\n",&p->pandora_cpu_speed);
fscanf(f,"presetModeId=%d\n",&presetModeId);
fscanf(f,"moveX=%d\n", &changed_prefs.pandora_horizontal_offset);
fscanf(f,"moveY=%d\n", &changed_prefs.pandora_vertical_offset);
fscanf(f,"displayedLines=%d\n",&changed_prefs.gfx_size.height);
fscanf(f,"screenWidth=%d\n", &changed_prefs.gfx_size_fs.width);
fscanf(f,"moveX=%d\n", &p->pandora_horizontal_offset);
fscanf(f,"moveY=%d\n", &p->pandora_vertical_offset);
fscanf(f,"displayedLines=%d\n",&p->gfx_size.height);
fscanf(f,"screenWidth=%d\n", &p->gfx_size_fs.width);
fscanf(f,"cutLeft=%d\n", &dummy);
fscanf(f,"cutRight=%d\n", &dummy);
fscanf(f,"customControls=%d\n",&changed_prefs.pandora_customControls);
fscanf(f,"custom_dpad=%d\n",&changed_prefs.pandora_custom_dpad);
fscanf(f,"custom_up=%d\n",&changed_prefs.pandora_custom_up);
fscanf(f,"custom_down=%d\n",&changed_prefs.pandora_custom_down);
fscanf(f,"custom_left=%d\n",&changed_prefs.pandora_custom_left);
fscanf(f,"custom_right=%d\n",&changed_prefs.pandora_custom_right);
fscanf(f,"custom_A=%d\n",&changed_prefs.pandora_custom_A);
fscanf(f,"custom_B=%d\n",&changed_prefs.pandora_custom_B);
fscanf(f,"custom_X=%d\n",&changed_prefs.pandora_custom_X);
fscanf(f,"custom_Y=%d\n",&changed_prefs.pandora_custom_Y);
fscanf(f,"custom_L=%d\n",&changed_prefs.pandora_custom_L);
fscanf(f,"custom_R=%d\n",&changed_prefs.pandora_custom_R);
fscanf(f,"cpu=%d\n", &changed_prefs.cpu_level);
if(changed_prefs.cpu_level > M68000)
fscanf(f,"customControls=%d\n",&p->pandora_customControls);
fscanf(f,"custom_dpad=%d\n",&p->pandora_custom_dpad);
fscanf(f,"custom_up=%d\n",&p->pandora_custom_up);
fscanf(f,"custom_down=%d\n",&p->pandora_custom_down);
fscanf(f,"custom_left=%d\n",&p->pandora_custom_left);
fscanf(f,"custom_right=%d\n",&p->pandora_custom_right);
fscanf(f,"custom_A=%d\n",&p->pandora_custom_A);
fscanf(f,"custom_B=%d\n",&p->pandora_custom_B);
fscanf(f,"custom_X=%d\n",&p->pandora_custom_X);
fscanf(f,"custom_Y=%d\n",&p->pandora_custom_Y);
fscanf(f,"custom_L=%d\n",&p->pandora_custom_L);
fscanf(f,"custom_R=%d\n",&p->pandora_custom_R);
fscanf(f,"cpu=%d\n", &p->cpu_level);
if(p->cpu_level > M68000)
// Was old format
changed_prefs.cpu_level = M68020;
fscanf(f,"chipset=%d\n", &changed_prefs.chipset_mask);
changed_prefs.immediate_blits = (changed_prefs.chipset_mask & 0x100) == 0x100;
changed_prefs.pandora_partial_blits = (changed_prefs.chipset_mask & 0x200) == 0x200;
switch (changed_prefs.chipset_mask & 0xff)
p->cpu_level = M68020;
fscanf(f,"chipset=%d\n", &p->chipset_mask);
p->immediate_blits = (p->chipset_mask & 0x100) == 0x100;
p->pandora_partial_blits = (p->chipset_mask & 0x200) == 0x200;
switch (p->chipset_mask & 0xff)
{
case 1: changed_prefs.chipset_mask = CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE; break;
case 2: changed_prefs.chipset_mask = CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE | CSMASK_AGA; break;
default: changed_prefs.chipset_mask = CSMASK_ECS_AGNUS; break;
case 1: p->chipset_mask = CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE; break;
case 2: p->chipset_mask = CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE | CSMASK_AGA; break;
default: p->chipset_mask = CSMASK_ECS_AGNUS; break;
}
fscanf(f,"cpu=%d\n", &changed_prefs.m68k_speed);
if(changed_prefs.m68k_speed < 0)
fscanf(f,"cpu=%d\n", &p->m68k_speed);
if(p->m68k_speed < 0)
{
// New version of this option
changed_prefs.m68k_speed = -changed_prefs.m68k_speed;
p->m68k_speed = -p->m68k_speed;
}
else
{
// Old version (500 5T 1200 12T 12T2)
if(changed_prefs.m68k_speed >= 2)
if(p->m68k_speed >= 2)
{
// 1200: set to 68020 with 14 MHz
changed_prefs.cpu_level = M68020;
changed_prefs.m68k_speed--;
if(changed_prefs.m68k_speed > 2)
changed_prefs.m68k_speed = 2;
p->cpu_level = M68020;
p->m68k_speed--;
if(p->m68k_speed > 2)
p->m68k_speed = 2;
}
}
if(changed_prefs.m68k_speed == 1)
changed_prefs.m68k_speed = M68K_SPEED_14MHZ_CYCLES;
if(changed_prefs.m68k_speed == 2)
changed_prefs.m68k_speed = M68K_SPEED_25MHZ_CYCLES;
changed_prefs.cachesize = 0;
changed_prefs.cpu_compatible = 0;
if(p->m68k_speed == 1)
p->m68k_speed = M68K_SPEED_14MHZ_CYCLES;
if(p->m68k_speed == 2)
p->m68k_speed = M68K_SPEED_25MHZ_CYCLES;
p->cachesize = 0;
p->cpu_compatible = 0;
if(general == 0)
disk_eject(0);
disk_eject(1);
disk_eject(2);
disk_eject(3);
fscanf(f,"df0=%s\n",&filebuffer);
replace(filebuffer,' ','|');
strcpy(p->df[0], filebuffer);
disk_insert(0, filebuffer);
if(p->nr_floppies > 1)
{
disk_eject(0);
disk_eject(1);
disk_eject(2);
disk_eject(3);
fscanf(f,"df0=%s\n",&filebuffer);
memset(filebuffer, 0, 256);
fscanf(f,"df1=%s\n",&filebuffer);
replace(filebuffer,' ','|');
strcpy(changed_prefs.df[0], filebuffer);
disk_insert(0, filebuffer);
if(changed_prefs.nr_floppies > 1)
{
memset(filebuffer, 0, 256);
fscanf(f,"df1=%s\n",&filebuffer);
replace(filebuffer,' ','|');
strcpy(changed_prefs.df[1], filebuffer);
disk_insert(1, filebuffer);
}
if(changed_prefs.nr_floppies > 2)
{
memset(filebuffer, 0, 256);
fscanf(f,"df2=%s\n",&filebuffer);
replace(filebuffer,' ','|');
strcpy(changed_prefs.df[2], filebuffer);
disk_insert(2, filebuffer);
}
if(changed_prefs.nr_floppies > 3)
{
memset(filebuffer, 0, 256);
fscanf(f,"df3=%s\n",&filebuffer);
replace(filebuffer,' ','|');
strcpy(changed_prefs.df[3], filebuffer);
disk_insert(3, filebuffer);
}
strcpy(p->df[1], filebuffer);
disk_insert(1, filebuffer);
}
else
if(p->nr_floppies > 2)
{
fscanf(f,"script=%d\n", &dummy);
fscanf(f,"screenshot=%d\n", &dummy);
fread(filebuffer, 1, 4, f);
fseek(f, -4, SEEK_CUR);
filebuffer[4] = '\0';
if(strcmp(filebuffer, "skip") == 0)
fscanf(f,"skipintro=%d\n", &dummy);
fscanf(f,"boot_hd=%d\n", &dummy);
fscanf(f,"hard_disk_dir=", filebuffer);
filebuffer[0] = '\0';
{
char c[2] = {0, 0};
*c = fgetc(f);
while (*c && (*c != '\n')) {
strcat(filebuffer, c);
*c = fgetc(f);
}
}
if (filebuffer[0] == '*')
filebuffer[0] = '\0';
if(filebuffer[0] != '\0')
parse_filesys_spec(0, filebuffer);
fscanf(f,"hard_disk_file=", filebuffer);
filebuffer[0] = '\0';
{
char c[2] = {0, 0};
*c = fgetc(f);
while (*c && (*c != '\n')) {
strcat(filebuffer, c);
*c = fgetc(f);
}
}
if (filebuffer[0] == '*')
filebuffer[0] = '\0';
if(filebuffer[0] != '\0')
parse_hardfile_spec(filebuffer);
memset(filebuffer, 0, 256);
fscanf(f,"df2=%s\n",&filebuffer);
replace(filebuffer,' ','|');
strcpy(p->df[2], filebuffer);
disk_insert(2, filebuffer);
}
currprefs.nr_floppies = changed_prefs.nr_floppies;
if(p->nr_floppies > 3)
{
memset(filebuffer, 0, 256);
fscanf(f,"df3=%s\n",&filebuffer);
replace(filebuffer,' ','|');
strcpy(p->df[3], filebuffer);
disk_insert(3, filebuffer);
}
for(int i=0; i<4; ++i)
{
if(i < changed_prefs.nr_floppies)
changed_prefs.dfxtype[i] = DRV_35_DD;
if(i < p->nr_floppies)
p->dfxtype[i] = DRV_35_DD;
else
changed_prefs.dfxtype[i] = DRV_NONE;
p->dfxtype[i] = DRV_NONE;
}
fscanf(f,"chipmemory=%d\n",&changed_prefs.chipmem_size);
if(changed_prefs.chipmem_size < 10)
fscanf(f,"chipmemory=%d\n",&p->chipmem_size);
if(p->chipmem_size < 10)
// Was saved in old format
changed_prefs.chipmem_size = 0x80000 << changed_prefs.chipmem_size;
fscanf(f,"slowmemory=%d\n",&changed_prefs.bogomem_size);
if(changed_prefs.bogomem_size > 0 && changed_prefs.bogomem_size < 10)
p->chipmem_size = 0x80000 << p->chipmem_size;
fscanf(f,"slowmemory=%d\n",&p->bogomem_size);
if(p->bogomem_size > 0 && p->bogomem_size < 10)
// Was saved in old format
changed_prefs.bogomem_size =
(changed_prefs.bogomem_size <= 2) ? 0x080000 << changed_prefs.bogomem_size :
(changed_prefs.bogomem_size == 3) ? 0x180000 : 0x1c0000;
fscanf(f,"fastmemory=%d\n",&changed_prefs.fastmem_size);
if(changed_prefs.fastmem_size > 0 && changed_prefs.fastmem_size < 10)
p->bogomem_size =
(p->bogomem_size <= 2) ? 0x080000 << p->bogomem_size :
(p->bogomem_size == 3) ? 0x180000 : 0x1c0000;
fscanf(f,"fastmemory=%d\n",&p->fastmem_size);
if(p->fastmem_size > 0 && p->fastmem_size < 10)
// Was saved in old format
changed_prefs.fastmem_size = 0x080000 << changed_prefs.fastmem_size;
p->fastmem_size = 0x080000 << p->fastmem_size;
#ifdef ANDROIDSDL
fscanf(f,"onscreen=%d\n",&mainMenu_onScreen);
fscanf(f,"onScreen_textinput=%d\n",&mainMenu_onScreen_textinput);
@ -670,9 +625,9 @@ int loadconfig_old(const char *orgpath, int general)
fclose(f);
}
SetPresetMode(presetModeId, &changed_prefs);
SetPresetMode(presetModeId, p);
CheckKickstart();
CheckKickstart(p);
set_joyConf();
return 1;

View file

@ -4,6 +4,8 @@
.global TRACE_Start
.global TRACE_mem
.global pixcpy_swap16
.global pixcpy_swap32
.global ARM_doline_n1
.global NEON_doline_n2
.global NEON_doline_n3
@ -60,6 +62,50 @@ TRACE_Start:
bx lr
@----------------------------------------------------------------
@ pixcpy_swap16
@
@ r0: uae_u16 *dstp
@ r1: uae_u16 *srcp
@ r2: int cols
@
@ void pixcpy_swap16(uae_u16 *dstp, uae_u16 *srcp, int cols);
@
@----------------------------------------------------------------
pixcpy_swap16:
subs r2, r2, #1
bxmi lr
pixcpy_swap16_1:
ldrh r3, [r1], #2
rev16 r3, r3
strh r3, [r0], #2
subs r2, r2, #1
bge pixcpy_swap16_1
bx lr
@----------------------------------------------------------------
@ pixcpy_swap32
@
@ r0: uae_u32 *dstp
@ r1: uae_u32 *srcp
@ r2: int cols
@
@ void pixcpy_swap32(uae_u32 *dstp, uae_u32 *srcp, int cols);
@
@----------------------------------------------------------------
pixcpy_swap32:
subs r2, r2, #1
bxmi lr
pixcpy_swap32_1:
ldr r3, [r1], #4
rev r3, r3
str r3, [r0], #4
subs r2, r2, #1
bge pixcpy_swap32_1
bx lr
@----------------------------------------------------------------
@ ARM_doline_n1
@

View file

@ -43,7 +43,8 @@ extern int justClicked;
extern int fcounter;
extern int keycode2amiga(SDL_keysym *prKeySym);
extern int loadconfig_old(const char *orgpath, int general);
extern int loadconfig_old(struct uae_prefs *p, const char *orgpath);
extern void SetLastActiveConfig(const char *filename);
/* Keyboard and mouse */
/* Keyboard */
@ -120,8 +121,6 @@ void logging_cleanup( void )
void target_default_options (struct uae_prefs *p, int type)
{
memcpy(&changed_prefs, &currprefs, sizeof(struct uae_prefs));
p->pandora_horizontal_offset = 0;
p->pandora_vertical_offset = 0;
p->pandora_cpu_speed = 600;
@ -249,12 +248,12 @@ void fetch_screenshotpath(char *out, int size)
}
int my_cfgfile_load (struct uae_prefs *p, const char *filename, int general)
int target_cfgfile_load (struct uae_prefs *p, char *filename, int type, int isdefault)
{
int result = 0;
while(nr_units(currprefs.mountinfo) > 0)
kill_filesys_unit(currprefs.mountinfo, 0);
while(nr_units(p->mountinfo) > 0)
kill_filesys_unit(p->mountinfo, 0);
char *ptr = strstr(filename, ".uae");
if(ptr > 0)
@ -267,25 +266,20 @@ int my_cfgfile_load (struct uae_prefs *p, const char *filename, int general)
set_joyConf();
extractFileName(filename, last_loaded_config);
}
else if (general >= 0)
result = loadconfig_old(filename, general);
else
result = loadconfig_old(p, filename);
if(result)
{
for(int i=0; i < p->nr_floppies; ++i)
{
if(strncmp(currprefs.df[i], p->df[i], 256))
{
if(strlen(p->df[i]) > 0)
disk_insert(i, p->df[i]);
else
disk_eject(i);
}
if(strlen(p->df[i]) > 0)
AddFileToDiskList(p->df[i], 1);
}
inputdevice_updateconfig (p);
SetLastActiveConfig(filename);
}
return result;

View file

@ -423,11 +423,11 @@ static int getMapping(int customId)
void moveVertical(int value)
{
currprefs.pandora_vertical_offset += value;
if(currprefs.pandora_vertical_offset < -16)
currprefs.pandora_vertical_offset = -16;
else if(currprefs.pandora_vertical_offset > 16)
currprefs.pandora_vertical_offset = 16;
changed_prefs.pandora_vertical_offset += value;
if(changed_prefs.pandora_vertical_offset < -16)
changed_prefs.pandora_vertical_offset = -16;
else if(changed_prefs.pandora_vertical_offset > 16)
changed_prefs.pandora_vertical_offset = 16;
}
void gui_handle_events (void)

View file

@ -12,38 +12,127 @@
uae_u8* natmem_offset = 0;
uae_u32 natmem_size;
static uae_u64 totalAmigaMemSize;
#define MAXAMIGAMEM 0x6000000 // 64 MB (16 MB for standard Amiga stuff, 16 MG RTG, 64 MB Z3 fast)
/*
void TestMemMap(void)
{
void *starting = (void *)0x60000000;
void *base;
void *z3fast;
void *gfx;
base = mmap(starting, 0x1000000, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
printf("TEST: adr for first 16MB: 0x%08x\n", base);
if(base != MAP_FAILED)
{
z3fast = mmap((void *)((int)base + 0x10000000), 0x2000000, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
printf("TEST: adr for z3fast 32MB: 0x%08x\n", z3fast);
if(z3fast != MAP_FAILED)
{
gfx = mmap((void *)((int)base + 0x12000000), 0x800000, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
printf("TEST: adr for gfx 8MB: 0x%08x\n", gfx);
if(gfx != MAP_FAILED)
{
munmap(gfx, 0x800000);
}
munmap(z3fast, 0x2000000);
}
munmap(base, 0x1000000);
}
}
*/
const int totalAmigaMemSize = 0x1000000;
void free_AmigaMem(void)
{
if(natmem_offset != 0)
{
// munlock(natmem_offset, totalAmigaMemSize);
free(natmem_offset);
natmem_offset;
natmem_offset = 0;
}
}
void alloc_AmigaMem(void)
{
int res;
int i;
uae_u64 total;
uae_u32 max_allowed_mman;
free_AmigaMem();
// Get max. available size
total = (uae_u64)sysconf (_SC_PHYS_PAGES) * (uae_u64)getpagesize();
natmem_offset = (uae_u8*)malloc(totalAmigaMemSize);
if(natmem_offset == 0)
{
printf("Failed to alloc complete Amiga memory.\n");
abort();
}
// res = mlock(natmem_offset, totalAmigaMemSize);
// if(res != 0)
// {
// printf("Failed to lock Amiga memory.\n");
// free(natmem_offset);
// abort();
// }
// Limit to max. 64 MB
natmem_size = total;
if (natmem_size > MAXAMIGAMEM)
natmem_size = MAXAMIGAMEM;
// We need at least 16 MB
if (natmem_size < 16 * 1024 * 1024)
natmem_size = 16 * 1024 * 1024;
write_log("Total physical RAM %lluM. Attempting to reserve: %uM.\n", total >> 20, natmem_size >> 20);
natmem_offset = (uae_u8*)valloc (natmem_size);
if (!natmem_offset) {
for (;;) {
natmem_offset = (uae_u8*)valloc (natmem_size);
if (natmem_offset)
break;
natmem_size -= 16 * 1024 * 1024;
if (!natmem_size) {
write_log("Can't allocate 16M of virtual address space!?\n");
abort();
}
}
}
max_z3fastmem = natmem_size - 32 * 1024 * 1024;
if(max_z3fastmem < 0)
max_z3fastmem = 0;
write_log("Reserved: %p-%p (0x%08x %dM)\n", natmem_offset, (uae_u8*)natmem_offset + natmem_size,
natmem_size, natmem_size >> 20);
}
uae_u8 *mapped_malloc (size_t s, const char *file)
{
if(!strcmp(file, "chip"))
return natmem_offset;
if(!strcmp(file, "fast"))
return natmem_offset + 0x200000;
if(!strcmp(file, "bogo"))
return natmem_offset + bogomem_start;
if(!strcmp(file, "rom_f0"))
return natmem_offset + 0xf00000;
if(!strcmp(file, "rom_e0"))
return natmem_offset + 0xe00000;
if(!strcmp(file, "kick"))
return natmem_offset + kickmem_start;
if(!strcmp(file, "z3"))
return natmem_offset + 0x1000000; //z3fastmem_start;
if(!strcmp(file, "gfx"))
return natmem_offset + 0x3000000; //gfxmem_start;
if(!strcmp(file, "rtarea"))
return natmem_offset + RTAREA_BASE;
return NULL;
}
void mapped_free (uae_u8 *p)
{
}

2680
src/od-pandora/picasso96.cpp Normal file

File diff suppressed because it is too large Load diff

View file

@ -76,7 +76,7 @@ static bool handle_arm_instruction(unsigned long *pregs, uintptr addr)
{
unsigned int *pc = (unsigned int *)pregs[ARM_REG_PC];
D(panicbug("IP: %p [%08x] %p\n", pc, pc[0], addr));
panicbug("IP: %p [%08x] %p\n", pc, pc[0], addr);
if (pc == 0) return false;
if (in_handler > 0)
@ -158,11 +158,8 @@ static bool handle_arm_instruction(unsigned long *pregs, uintptr addr)
// }
#endif
if (addr >= 0xff000000)
addr &= 0x00ffffff;
if ((addr < 0x00f00000) || (addr > 0x00ffffff))
goto buserr;
// if ((addr < 0x00f00000) || (addr > 0x00ffffff))
// goto buserr;
if (transfer_type == TYPE_LOAD) {
switch(transfer_size) {
@ -197,14 +194,14 @@ static bool handle_arm_instruction(unsigned long *pregs, uintptr addr)
}
pregs[ARM_REG_PC] += 4;
D(panicbug("processed: %p \n", pregs[ARM_REG_PC]));
panicbug("processed: %p \n", pregs[ARM_REG_PC]);
in_handler--;
return true;
buserr:
D(panicbug("Amiga bus error\n"));
panicbug("Amiga bus error\n");
// BUS_ERROR(addr);
return false;

View file

@ -12,7 +12,8 @@
FILE *debugfile = NULL;
#ifdef WITH_LOGGING
void write_log (const char *format, ...)
void write_log (const char *format,...)
{
int count;
int numwritten;