|
|
1.1 root 1: /*
2: Hatari - dlgMemory.c
3:
1.1.1.8 root 4: This file is distributed under the GNU General Public License, version 2
5: or at your option any later version. Read the file gpl.txt for details.
1.1 root 6: */
1.1.1.7 root 7: const char DlgMemory_fileid[] = "Hatari dlgMemory.c : " __DATE__ " " __TIME__;
1.1 root 8:
9: #include "main.h"
10: #include "dialog.h"
11: #include "sdlgui.h"
12: #include "memorySnapShot.h"
13: #include "file.h"
14: #include "screen.h"
1.1.1.9 root 15: #include "options.h"
1.1 root 16:
17:
1.1.1.11! root 18: #define DLGMEM_256KB 4
! 19: #define DLGMEM_512KB 5
! 20: #define DLGMEM_1MB 6
! 21: #define DLGMEM_2MB 7
! 22: #define DLGMEM_2_5MB 8
! 23: #define DLGMEM_4MB 9
! 24: #define DLGMEM_8MB 10
! 25: #define DLGMEM_14MB 11
! 26: #define DLGMEM_TTRAM_LESS 13
! 27: #define DLGMEM_TTRAM_TEXT 14
! 28: #define DLGMEM_TTRAM_MORE 15
! 29: #define DLGMEM_FILENAME 20
! 30: #define DLGMEM_SAVE 21
! 31: #define DLGMEM_RESTORE 22
! 32: #define DLGMEM_AUTOSAVE 23
! 33: #define DLGMEM_EXIT 24
1.1.1.9 root 34:
35:
36: /* String for TT RAM size */
37: static char sTTRamSize[4];
38:
39: #define DLG_TTRAM_STEP 4
40: #define DLG_TTRAM_MIN 0
41: #define DLG_TTRAM_MAX 256
1.1 root 42:
43: static char dlgSnapShotName[36+1];
44:
45:
46: /* The memory dialog: */
47: static SGOBJ memorydlg[] =
48: {
1.1.1.11! root 49: { SGBOX, 0, 0, 0,0, 40,25, NULL },
1.1 root 50:
1.1.1.11! root 51: { SGBOX, 0, 0, 1,1, 38,10, NULL },
1.1.1.5 root 52: { SGTEXT, 0, 0, 15,2, 12,1, "Memory setup" },
53: { SGTEXT, 0, 0, 4,4, 12,1, "ST-RAM size:" },
1.1.1.11! root 54: { SGRADIOBUT, 0, 0, 18,4, 9,1, "256 KiB" },
! 55: { SGRADIOBUT, 0, 0, 18,5, 9,1, "_512 KiB" },
! 56: { SGRADIOBUT, 0, 0, 18,6, 7,1, "_1 MiB" },
! 57: { SGRADIOBUT, 0, 0, 18,7, 7,1, "_2 MiB" },
! 58: { SGRADIOBUT, 0, 0, 29,4, 7,1, "2.5 MiB" },
! 59: { SGRADIOBUT, 0, 0, 29,5, 7,1, "_4 MiB" },
! 60: { SGRADIOBUT, 0, 0, 29,6, 7,1, "_8 MiB" },
! 61: { SGRADIOBUT, 0, 0, 29,7, 8,1, "14 _MiB" },
! 62: { SGTEXT, 0, 0, 4,9,12,1, "TT-RAM size:" },
! 63: { SGBUTTON, 0, 0, 18,9, 1,1, "\x04", SG_SHORTCUT_LEFT },
! 64: { SGTEXT, 0, 0, 20,9, 3,1, sTTRamSize },
! 65: { SGBUTTON, 0, 0, 24,9, 1,1, "\x03", SG_SHORTCUT_RIGHT },
! 66: { SGTEXT, 0, 0, 26,9,12,1, "MiB" },
! 67:
! 68: { SGBOX, 0, 0, 1,12, 38,10, NULL },
! 69: { SGTEXT, 0, 0, 12,13, 17,1, "Memory state save" },
! 70: { SGTEXT, 0, 0, 2,15, 20,1, "Snap-shot file name:" },
! 71: { SGTEXT, 0, 0, 2,16, 36,1, dlgSnapShotName },
! 72: { SGBUTTON, 0, 0, 8,18, 10,1, "_Save" },
! 73: { SGBUTTON, 0, 0, 22,18, 10,1, "_Restore" },
! 74: { SGCHECKBOX, 0, 0, 2,20, 34,1, "_Load/save state at start-up/exit" },
1.1 root 75:
1.1.1.11! root 76: { SGBUTTON, SG_DEFAULT, 0, 10,23, 20,1, "Back to main menu" },
1.1.1.10 root 77: { SGSTOP, 0, 0, 0,0, 0,0, NULL }
1.1 root 78: };
79:
80:
1.1.1.7 root 81:
82: /**
83: * Show and process the memory dialog.
84: * @return true if a memory snapshot has been loaded, false otherwise
85: */
86: bool Dialog_MemDlg(void)
1.1 root 87: {
1.1.1.9 root 88: int i, memsize;
1.1.1.5 root 89: int but;
1.1 root 90:
1.1.1.5 root 91: SDLGui_CenterDlg(memorydlg);
92:
1.1.1.11! root 93: for (i = DLGMEM_256KB; i <= DLGMEM_14MB; i++)
1.1.1.5 root 94: {
95: memorydlg[i].state &= ~SG_SELECTED;
96: }
97:
1.1.1.11! root 98: switch (ConfigureParams.Memory.STRamSize_KB)
1.1.1.5 root 99: {
1.1.1.11! root 100: case 256:
! 101: memorydlg[DLGMEM_256KB].state |= SG_SELECTED;
! 102: break;
! 103: case 512:
1.1.1.5 root 104: memorydlg[DLGMEM_512KB].state |= SG_SELECTED;
105: break;
1.1.1.11! root 106: case 1024:
1.1.1.5 root 107: memorydlg[DLGMEM_1MB].state |= SG_SELECTED;
108: break;
1.1.1.11! root 109: case 2*1024:
1.1.1.5 root 110: memorydlg[DLGMEM_2MB].state |= SG_SELECTED;
111: break;
1.1.1.11! root 112: case 2*1024+512:
! 113: memorydlg[DLGMEM_2_5MB].state |= SG_SELECTED;
! 114: break;
! 115: case 4*1024:
1.1.1.5 root 116: memorydlg[DLGMEM_4MB].state |= SG_SELECTED;
117: break;
1.1.1.11! root 118: case 8*1024:
1.1.1.5 root 119: memorydlg[DLGMEM_8MB].state |= SG_SELECTED;
120: break;
121: default:
122: memorydlg[DLGMEM_14MB].state |= SG_SELECTED;
123: break;
124: }
1.1.1.11! root 125: memsize = ConfigureParams.Memory.TTRamSize_KB/1024;
! 126: if (memsize < DLG_TTRAM_MIN)
! 127: memsize = DLG_TTRAM_MIN;
! 128: else if (memsize > DLG_TTRAM_MAX)
! 129: memsize = DLG_TTRAM_MAX;
1.1.1.9 root 130: #if ENABLE_WINUAE_CPU
131: sprintf(sTTRamSize, "%3i", memsize);
132: #else
133: strcpy(sTTRamSize, "N/A");
134: #endif
1.1.1.6 root 135: File_ShrinkName(dlgSnapShotName, ConfigureParams.Memory.szMemoryCaptureFileName, memorydlg[DLGMEM_FILENAME].w);
1.1.1.5 root 136:
137:
1.1.1.6 root 138: if (ConfigureParams.Memory.bAutoSave)
1.1.1.5 root 139: memorydlg[DLGMEM_AUTOSAVE].state |= SG_SELECTED;
140: else
141: memorydlg[DLGMEM_AUTOSAVE].state &= ~SG_SELECTED;
142:
143: do
144: {
1.1.1.9 root 145: but = SDLGui_DoDialog(memorydlg, NULL, false);
1.1.1.5 root 146:
147: switch (but)
148: {
1.1.1.9 root 149: #if ENABLE_WINUAE_CPU
150: case DLGMEM_TTRAM_LESS:
151: memsize = Opt_ValueAlignMinMax(memsize - DLG_TTRAM_STEP, DLG_TTRAM_STEP, DLG_TTRAM_MIN, DLG_TTRAM_MAX);
152: sprintf(sTTRamSize, "%3i", memsize);
153: break;
154: case DLGMEM_TTRAM_MORE:
155: memsize = Opt_ValueAlignMinMax(memsize + DLG_TTRAM_STEP, DLG_TTRAM_STEP, DLG_TTRAM_MIN, DLG_TTRAM_MAX);
156: sprintf(sTTRamSize, "%3i", memsize);
157: break;
158: #endif
1.1.1.5 root 159: case DLGMEM_SAVE: /* Save memory snap-shot */
1.1.1.9 root 160: if (SDLGui_FileConfSelect("Save memory snapshot:", dlgSnapShotName,
1.1.1.6 root 161: ConfigureParams.Memory.szMemoryCaptureFileName,
1.1.1.7 root 162: memorydlg[DLGMEM_FILENAME].w, true))
163: {
164: MemorySnapShot_Capture(ConfigureParams.Memory.szMemoryCaptureFileName, true);
165: }
1.1.1.5 root 166: break;
167: case DLGMEM_RESTORE: /* Load memory snap-shot */
1.1.1.9 root 168: if (SDLGui_FileConfSelect("Load memory snapshot:", dlgSnapShotName,
1.1.1.6 root 169: ConfigureParams.Memory.szMemoryCaptureFileName,
1.1.1.7 root 170: memorydlg[DLGMEM_FILENAME].w, false))
171: {
172: MemorySnapShot_Restore(ConfigureParams.Memory.szMemoryCaptureFileName, true);
173: return true;
174: }
1.1.1.5 root 175: break;
176: }
177: }
178: while (but != DLGMEM_EXIT && but != SDLGUI_QUIT
179: && but != SDLGUI_ERROR && !bQuitProgram );
180:
181: /* Read new values from dialog: */
182:
1.1.1.11! root 183: if (memorydlg[DLGMEM_256KB].state & SG_SELECTED)
! 184: ConfigureParams.Memory.STRamSize_KB = 256;
! 185: else if (memorydlg[DLGMEM_512KB].state & SG_SELECTED)
! 186: ConfigureParams.Memory.STRamSize_KB = 512;
1.1.1.5 root 187: else if (memorydlg[DLGMEM_1MB].state & SG_SELECTED)
1.1.1.11! root 188: ConfigureParams.Memory.STRamSize_KB = 1024;
1.1.1.5 root 189: else if (memorydlg[DLGMEM_2MB].state & SG_SELECTED)
1.1.1.11! root 190: ConfigureParams.Memory.STRamSize_KB = 2*1024;
! 191: else if (memorydlg[DLGMEM_2_5MB].state & SG_SELECTED)
! 192: ConfigureParams.Memory.STRamSize_KB = 2*1024+512;
1.1.1.5 root 193: else if (memorydlg[DLGMEM_4MB].state & SG_SELECTED)
1.1.1.11! root 194: ConfigureParams.Memory.STRamSize_KB = 4*1024;
1.1.1.5 root 195: else if (memorydlg[DLGMEM_8MB].state & SG_SELECTED)
1.1.1.11! root 196: ConfigureParams.Memory.STRamSize_KB = 8*1024;
1.1.1.5 root 197: else
1.1.1.11! root 198: ConfigureParams.Memory.STRamSize_KB = 14*1024;
! 199:
! 200: ConfigureParams.Memory.TTRamSize_KB = memsize*1024;
1.1.1.5 root 201:
1.1.1.6 root 202: ConfigureParams.Memory.bAutoSave = (memorydlg[DLGMEM_AUTOSAVE].state & SG_SELECTED);
1.1.1.7 root 203:
204: return false;
1.1 root 205: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.