--- previous/src/gui-sdl/dlgMemory.c 2018/04/24 19:25:10 1.1 +++ previous/src/gui-sdl/dlgMemory.c 2018/04/24 19:30:46 1.1.1.3 @@ -1,10 +1,10 @@ /* - Hatari - dlgMemory.c + Previous - dlgMemory.c This file is distributed under the GNU Public License, version 2 or at your option any later version. Read the file gpl.txt for details. */ -const char DlgMemory_fileid[] = "Hatari dlgMemory.c : " __DATE__ " " __TIME__; +const char DlgMemory_fileid[] = "Previous dlgMemory.c : " __DATE__ " " __TIME__; #include "main.h" #include "dialog.h" @@ -13,51 +13,95 @@ const char DlgMemory_fileid[] = "Hatari #include "file.h" #include "screen.h" +#define GUI_SAVE_MEMORY 0 -#define DLGMEM_512KB 4 -#define DLGMEM_1MB 5 -#define DLGMEM_2MB 6 -#define DLGMEM_4MB 7 -#define DLGMEM_8MB 8 -#define DLGMEM_14MB 9 -#define DLGMEM_FILENAME 13 -#define DLGMEM_SAVE 14 -#define DLGMEM_RESTORE 15 -#define DLGMEM_AUTOSAVE 16 -#define DLGMEM_EXIT 17 - +#define DLGMEM_8MB 4 +#define DLGMEM_16MB 5 +#define DLGMEM_32MB 6 +#define DLGMEM_64MB 8 +#define DLGMEM_128MB 9 +#define DLGMEM_CUSTOM 7 + +#define DLGMEM_120NS 12 +#define DLGMEM_100NS 13 +#define DLGMEM_80NS 14 +#define DLGMEM_60NS 15 + +#if GUI_SAVE_MEMORY +#define DLGMEM_FILENAME 19 +#define DLGMEM_SAVE 20 +#define DLGMEM_RESTORE 21 +#define DLGMEM_AUTOSAVE 22 + +#define DLGMEM_EXIT 23 +#else +#define DLGMEM_EXIT 16 +#endif +void Dialog_MemDlgDraw(void); static char dlgSnapShotName[36+1]; - +char custom_memsize[16] = "Customize"; /* The memory dialog: */ static SGOBJ memorydlg[] = { - { SGBOX, 0, 0, 0,0, 40,22, NULL }, - - { SGBOX, 0, 0, 1,1, 38,7, NULL }, - { SGTEXT, 0, 0, 15,2, 12,1, "Memory setup" }, - { SGTEXT, 0, 0, 4,4, 12,1, "ST-RAM size:" }, - { SGRADIOBUT, 0, 0, 18,4, 9,1, "512 KiB" }, - { SGRADIOBUT, 0, 0, 18,5, 7,1, "1 MiB" }, - { SGRADIOBUT, 0, 0, 18,6, 7,1, "2 MiB" }, - { SGRADIOBUT, 0, 0, 29,4, 7,1, "4 MiB" }, - { SGRADIOBUT, 0, 0, 29,5, 7,1, "8 MiB" }, - { SGRADIOBUT, 0, 0, 29,6, 8,1, "14 MiB" }, - - { SGBOX, 0, 0, 1,9, 38,10, NULL }, - { SGTEXT, 0, 0, 12,10, 17,1, "Memory state save" }, - { SGTEXT, 0, 0, 2,12, 20,1, "Snap-shot file name:" }, - { SGTEXT, 0, 0, 2,13, 36,1, dlgSnapShotName }, - { SGBUTTON, 0, 0, 8,15, 10,1, "Save" }, - { SGBUTTON, 0, 0, 22,15, 10,1, "Restore" }, - { SGCHECKBOX, 0, 0, 2,17, 37,1, "Load/save state at start-up/exit" }, - - { SGBUTTON, SG_DEFAULT, 0, 10,20, 20,1, "Back to main menu" }, +#if GUI_SAVE_MEMORY + { SGBOX, 0, 0, 0,0, 41,28, NULL }, +#else + { SGBOX, 0, 0, 0,0, 41,18, NULL }, +#endif + { SGTEXT, 0, 0, 14,1, 12,1, "Memory options" }, + + { SGBOX, 0, 0, 1,3, 19,10, NULL }, + { SGTEXT, 0, 0, 2,4, 12,1, "Memory size" }, + { SGRADIOBUT, 0, 0, 3,6, 6,1, "8 MB" }, + { SGRADIOBUT, 0, 0, 3,7, 7,1, "16 MB" }, + { SGRADIOBUT, 0, 0, 3,8, 7,1, "32 MB" }, + { SGRADIOBUT, 0, 0, 3,11, 11,1, custom_memsize }, + { SGRADIOBUT, 0, 0, 3,9, 7,1, "64 MB" }, + { SGRADIOBUT, 0, 0, 3,10, 8,1, "128 MB" }, + + { SGBOX, 0, 0, 21,3, 19,10, NULL }, + { SGTEXT, 0, 0, 22,4, 12,1, "Memory speed" }, + { SGRADIOBUT, 0, 0, 23,6, 8,1, "120 ns" }, + { SGRADIOBUT, 0, 0, 23,7, 8,1, "100 ns" }, + { SGRADIOBUT, 0, 0, 23,8, 7,1, "80 ns" }, + { SGRADIOBUT, 0, 0, 23,9, 7,1, "60 ns" }, + + { SGBUTTON, SG_DEFAULT, 0, 10,15, 23,1, "Back to system menu" }, +#if GUI_SAVE_MEMORY + { SGBOX, 0, 0, 1,14, 39,10, NULL }, + { SGTEXT, 0, 0, 2,15, 17,1, "Load/Save memory state (untested)" }, + { SGTEXT, 0, 0, 2,17, 20,1, "Snap-shot file name:" }, + { SGTEXT, 0, 0, 2,18, 36,1, dlgSnapShotName }, + { SGBUTTON, 0, 0, 8,20, 10,1, "Save" }, + { SGBUTTON, 0, 0, 22,20, 10,1, "Restore" }, + { SGCHECKBOX, 0, 0, 2,22, 37,1, "Load/save state at start-up/exit" }, + + { SGBUTTON, SG_DEFAULT, 0, 10,26, 21,1, "Back to main menu" }, +#endif { -1, 0, 0, 0,0, 0,0, NULL } }; - +/* Variable objects */ +SGOBJ disable_128mb_option = { SGTEXT, 0, 0, 3,10, 8,1, " " }; +SGOBJ enable_128mb_option = { SGRADIOBUT, 0, 0, 3,10, 8,1, "128 MB" }; +SGOBJ disable_64mb_option = { SGTEXT, 0, 0, 3,9, 7,1, " " }; +SGOBJ enable_64mb_option = { SGRADIOBUT, 0, 0, 3,9, 7,1, "64 MB" }; + +/* Default configuration constants */ +int defsize[9][4] = { + { 4, 4, 0, 0}, /* 8 MB for monochrome non-turbo */ + { 8, 0, 0, 0}, /* 8 MB for turbo and non-turbo color */ + {16, 0, 0, 0}, /* 16 MB for monochrome non-turbo */ + { 8, 8, 0, 0}, /* 16 MB for turbo and non-turbo color */ + {16,16, 0, 0}, /* 32 MB for monochrome non-turbo */ + { 8, 8, 8, 8}, /* 32 MB for turbo and non-turbo color */ + {16,16,16,16}, /* 64 MB for monochrome non-turbo */ + {32,32, 0, 0}, /* 64 MB for turbo */ + {32,32,32,32} /* 128 MB for turbo */ +}; +int defsizecount=0; /* Compare defsizes up to this value */ /** * Show and process the memory dialog. @@ -65,90 +109,218 @@ static SGOBJ memorydlg[] = */ bool Dialog_MemDlg(void) { - int i; int but; SDLGui_CenterDlg(memorydlg); - - for (i = DLGMEM_512KB; i <= DLGMEM_14MB; i++) - { - memorydlg[i].state &= ~SG_SELECTED; + + /* Remove 64 and 128MB option if system is non-Turbo Slab, + * remove 128MB option if system is not Turbo */ + if (ConfigureParams.System.bTurbo) { + memorydlg[DLGMEM_64MB] = enable_64mb_option; + memorydlg[DLGMEM_128MB] = enable_128mb_option; + defsizecount = 9; + } else if (ConfigureParams.System.bColor || + ConfigureParams.System.nMachineType == NEXT_STATION) { + memorydlg[DLGMEM_64MB] = disable_64mb_option; + memorydlg[DLGMEM_128MB] = disable_128mb_option; + defsizecount = 6; + } else { + memorydlg[DLGMEM_64MB] = enable_64mb_option; + memorydlg[DLGMEM_128MB] = disable_128mb_option; + defsizecount = 8; + } + + /* Display memory speed options depending on system type */ + if (ConfigureParams.System.bTurbo) { + memorydlg[DLGMEM_120NS].txt = "60 ns"; + memorydlg[DLGMEM_100NS].txt = "70 ns"; + memorydlg[DLGMEM_80NS].txt = "80 ns"; + memorydlg[DLGMEM_60NS].txt = "100 ns"; + } else { + memorydlg[DLGMEM_120NS].txt = "120 ns"; + memorydlg[DLGMEM_100NS].txt = "100 ns"; + memorydlg[DLGMEM_80NS].txt = "80 ns"; + memorydlg[DLGMEM_60NS].txt = "60 ns"; } - switch (ConfigureParams.Memory.nMemorySize) - { - case 0: - memorydlg[DLGMEM_512KB].state |= SG_SELECTED; - break; - case 1: - memorydlg[DLGMEM_1MB].state |= SG_SELECTED; - break; - case 2: - memorydlg[DLGMEM_2MB].state |= SG_SELECTED; - break; - case 4: - memorydlg[DLGMEM_4MB].state |= SG_SELECTED; - break; - case 8: - memorydlg[DLGMEM_8MB].state |= SG_SELECTED; - break; - default: - memorydlg[DLGMEM_14MB].state |= SG_SELECTED; - break; - } + /* Draw dialog from actual values */ - File_ShrinkName(dlgSnapShotName, ConfigureParams.Memory.szMemoryCaptureFileName, memorydlg[DLGMEM_FILENAME].w); - - - if (ConfigureParams.Memory.bAutoSave) - memorydlg[DLGMEM_AUTOSAVE].state |= SG_SELECTED; - else - memorydlg[DLGMEM_AUTOSAVE].state &= ~SG_SELECTED; + Dialog_MemDlgDraw(); do { but = SDLGui_DoDialog(memorydlg, NULL); - + switch (but) { - case DLGMEM_SAVE: /* Save memory snap-shot */ - if (SDLGui_FileConfSelect(dlgSnapShotName, - ConfigureParams.Memory.szMemoryCaptureFileName, - memorydlg[DLGMEM_FILENAME].w, true)) - { - MemorySnapShot_Capture(ConfigureParams.Memory.szMemoryCaptureFileName, true); - } - break; - case DLGMEM_RESTORE: /* Load memory snap-shot */ - if (SDLGui_FileConfSelect(dlgSnapShotName, - ConfigureParams.Memory.szMemoryCaptureFileName, - memorydlg[DLGMEM_FILENAME].w, false)) - { - MemorySnapShot_Restore(ConfigureParams.Memory.szMemoryCaptureFileName, true); - return true; - } - break; + case DLGMEM_8MB: + if (ConfigureParams.System.bColor || ConfigureParams.System.bTurbo) { + memcpy(ConfigureParams.Memory.nMemoryBankSize, defsize[1], + sizeof(ConfigureParams.Memory.nMemoryBankSize)); + } else { + memcpy(ConfigureParams.Memory.nMemoryBankSize, defsize[0], + sizeof(ConfigureParams.Memory.nMemoryBankSize)); + } + sprintf(custom_memsize, "Customize"); + break; + case DLGMEM_16MB: + if (ConfigureParams.System.bColor || ConfigureParams.System.bTurbo) { + memcpy(ConfigureParams.Memory.nMemoryBankSize, defsize[3], + sizeof(ConfigureParams.Memory.nMemoryBankSize)); + } else { + memcpy(ConfigureParams.Memory.nMemoryBankSize, defsize[2], + sizeof(ConfigureParams.Memory.nMemoryBankSize)); + } + sprintf(custom_memsize, "Customize"); + break; + case DLGMEM_32MB: + if (ConfigureParams.System.bColor || ConfigureParams.System.bTurbo) { + memcpy(ConfigureParams.Memory.nMemoryBankSize, defsize[5], + sizeof(ConfigureParams.Memory.nMemoryBankSize)); + } else { + memcpy(ConfigureParams.Memory.nMemoryBankSize, defsize[4], + sizeof(ConfigureParams.Memory.nMemoryBankSize)); + } + sprintf(custom_memsize, "Customize"); + break; + case DLGMEM_64MB: + if (ConfigureParams.System.bTurbo) { + memcpy(ConfigureParams.Memory.nMemoryBankSize, defsize[7], + sizeof(ConfigureParams.Memory.nMemoryBankSize)); + } else { + memcpy(ConfigureParams.Memory.nMemoryBankSize, defsize[6], + sizeof(ConfigureParams.Memory.nMemoryBankSize)); + } + sprintf(custom_memsize, "Customize"); + break; + case DLGMEM_128MB: + memcpy(ConfigureParams.Memory.nMemoryBankSize, defsize[8], + sizeof(ConfigureParams.Memory.nMemoryBankSize)); + sprintf(custom_memsize, "Customize"); + break; + case DLGMEM_CUSTOM: + Dialog_MemAdvancedDlg(ConfigureParams.Memory.nMemoryBankSize); + Dialog_MemDlgDraw(); + break; +#if GUI_SAVE_MEMORY + case DLGMEM_SAVE: /* Save memory snap-shot */ + if (SDLGui_FileConfSelect(dlgSnapShotName, + ConfigureParams.Memory.szMemoryCaptureFileName, + memorydlg[DLGMEM_FILENAME].w, true)) + { + MemorySnapShot_Capture(ConfigureParams.Memory.szMemoryCaptureFileName, true); + } + break; + case DLGMEM_RESTORE: /* Load memory snap-shot */ + if (SDLGui_FileConfSelect(dlgSnapShotName, + ConfigureParams.Memory.szMemoryCaptureFileName, + memorydlg[DLGMEM_FILENAME].w, false)) + { + MemorySnapShot_Restore(ConfigureParams.Memory.szMemoryCaptureFileName, true); + return true; + } + break; +#endif } } while (but != DLGMEM_EXIT && but != SDLGUI_QUIT - && but != SDLGUI_ERROR && !bQuitProgram ); + && but != SDLGUI_ERROR && !bQuitProgram ); /* Read new values from dialog: */ - if (memorydlg[DLGMEM_512KB].state & SG_SELECTED) - ConfigureParams.Memory.nMemorySize = 0; - else if (memorydlg[DLGMEM_1MB].state & SG_SELECTED) - ConfigureParams.Memory.nMemorySize = 1; - else if (memorydlg[DLGMEM_2MB].state & SG_SELECTED) - ConfigureParams.Memory.nMemorySize = 2; - else if (memorydlg[DLGMEM_4MB].state & SG_SELECTED) - ConfigureParams.Memory.nMemorySize = 4; - else if (memorydlg[DLGMEM_8MB].state & SG_SELECTED) - ConfigureParams.Memory.nMemorySize = 8; - else - ConfigureParams.Memory.nMemorySize = 14; - + if (memorydlg[DLGMEM_120NS].state & SG_SELECTED) + ConfigureParams.Memory.nMemorySpeed = MEMORY_120NS; + else if (memorydlg[DLGMEM_100NS].state & SG_SELECTED) + ConfigureParams.Memory.nMemorySpeed = MEMORY_100NS; + else if (memorydlg[DLGMEM_80NS].state & SG_SELECTED) + ConfigureParams.Memory.nMemorySpeed = MEMORY_80NS; + else + ConfigureParams.Memory.nMemorySpeed = MEMORY_60NS; +#if GUI_SAVE_MEMORY ConfigureParams.Memory.bAutoSave = (memorydlg[DLGMEM_AUTOSAVE].state & SG_SELECTED); - +#endif return false; } + + +void Dialog_MemDlgDraw(void) { + int i; + int memsum, memsize; + + sprintf(custom_memsize, "Customize"); + + for (i = DLGMEM_8MB; i <= DLGMEM_128MB; i++) + { + memorydlg[i].state &= ~SG_SELECTED; + } + + for (i = DLGMEM_120NS; i <= DLGMEM_60NS; i++) + { + memorydlg[i].state &= ~SG_SELECTED; + } + + /* Check memory configuration and find out if it is one of our default configurations */ + memsum = Configuration_CheckMemory(ConfigureParams.Memory.nMemoryBankSize); + + for (i=0; i