|
|
1.1 root 1: /*
2: Hatari - dlgMemory.c
3:
4: This file is distributed under the GNU Public License, version 2 or at
5: your option any later version. Read the file gpl.txt for details.
6: */
7: const char DlgMemory_fileid[] = "Hatari dlgMemory.c : " __DATE__ " " __TIME__;
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"
15:
16:
1.1.1.2 ! root 17: #define DLGMEM_8MB 4
! 18: #define DLGMEM_16MB 5
! 19: #define DLGMEM_32MB 6
! 20: #define DLGMEM_64MB 8
! 21: #define DLGMEM_128MB 9
! 22: #define DLGMEM_CUSTOM 7
! 23:
! 24: #define DLGMEM_120NS 12
! 25: #define DLGMEM_100NS 13
! 26: #define DLGMEM_80NS 14
! 27: #define DLGMEM_60NS 15
! 28:
! 29: #define DLGMEM_FILENAME 19
! 30: #define DLGMEM_SAVE 20
! 31: #define DLGMEM_RESTORE 21
! 32: #define DLGMEM_AUTOSAVE 22
1.1 root 33:
1.1.1.2 ! root 34: #define DLGMEM_EXIT 23
1.1 root 35:
36:
1.1.1.2 ! root 37: void Dialog_MemDlgDraw(void);
! 38: static char dlgSnapShotName[36+1];
! 39: char custom_memsize[16] = "Customize";
1.1 root 40:
41: /* The memory dialog: */
42: static SGOBJ memorydlg[] =
43: {
1.1.1.2 ! root 44: { SGBOX, 0, 0, 0,0, 41,28, NULL },
! 45: { SGTEXT, 0, 0, 14,1, 12,1, "Memory options" },
1.1 root 46:
1.1.1.2 ! root 47: { SGBOX, 0, 0, 1,3, 19,10, NULL },
! 48: { SGTEXT, 0, 0, 2,4, 12,1, "Memory size" },
! 49: { SGRADIOBUT, 0, 0, 3,6, 6,1, "8 MB" },
! 50: { SGRADIOBUT, 0, 0, 3,7, 7,1, "16 MB" },
! 51: { SGRADIOBUT, 0, 0, 3,8, 7,1, "32 MB" },
! 52: { SGRADIOBUT, 0, 0, 3,11, 11,1, custom_memsize },
! 53: { SGRADIOBUT, 0, 0, 3,9, 7,1, "64 MB" },
! 54: { SGRADIOBUT, 0, 0, 3,10, 8,1, "128 MB" },
! 55:
! 56: { SGBOX, 0, 0, 21,3, 19,10, NULL },
! 57: { SGTEXT, 0, 0, 22,4, 12,1, "Memory speed" },
! 58: { SGRADIOBUT, 0, 0, 23,6, 8,1, "120 ns" },
! 59: { SGRADIOBUT, 0, 0, 23,7, 8,1, "100 ns" },
! 60: { SGRADIOBUT, 0, 0, 23,8, 7,1, "80 ns" },
! 61: { SGRADIOBUT, 0, 0, 23,9, 7,1, "60 ns" },
! 62:
! 63: { SGBOX, 0, 0, 1,14, 39,10, NULL },
! 64: { SGTEXT, 0, 0, 2,15, 17,1, "Load/Save memory state (untested)" },
! 65: { SGTEXT, 0, 0, 2,17, 20,1, "Snap-shot file name:" },
! 66: { SGTEXT, 0, 0, 2,18, 36,1, dlgSnapShotName },
! 67: { SGBUTTON, 0, 0, 8,20, 10,1, "Save" },
! 68: { SGBUTTON, 0, 0, 22,20, 10,1, "Restore" },
! 69: { SGCHECKBOX, 0, 0, 2,22, 37,1, "Load/save state at start-up/exit" },
1.1 root 70:
1.1.1.2 ! root 71: { SGBUTTON, SG_DEFAULT, 0, 10,26, 20,1, "Back to main menu" },
1.1 root 72: { -1, 0, 0, 0,0, 0,0, NULL }
73: };
74:
1.1.1.2 ! root 75: /* Variable objects */
! 76: SGOBJ disable_128mb_option = { SGTEXT, 0, 0, 3,10, 8,1, " " };
! 77: SGOBJ enable_128mb_option = { SGRADIOBUT, 0, 0, 3,10, 8,1, "128 MB" };
! 78: SGOBJ disable_64mb_option = { SGTEXT, 0, 0, 3,9, 7,1, " " };
! 79: SGOBJ enable_64mb_option = { SGRADIOBUT, 0, 0, 3,9, 7,1, "64 MB" };
! 80:
! 81: /* Default configuration constants */
! 82: int defsize[9][4] = {
! 83: { 4, 4, 0, 0}, /* 8 MB for monochrome non-turbo */
! 84: { 8, 0, 0, 0}, /* 8 MB for turbo and non-turbo color */
! 85: {16, 0, 0, 0}, /* 16 MB for monochrome non-turbo */
! 86: { 8, 8, 0, 0}, /* 16 MB for turbo and non-turbo color */
! 87: {16,16, 0, 0}, /* 32 MB for monochrome non-turbo */
! 88: { 8, 8, 8, 8}, /* 32 MB for turbo and non-turbo color */
! 89: {16,16,16,16}, /* 64 MB for monochrome non-turbo */
! 90: {32,32, 0, 0}, /* 64 MB for turbo */
! 91: {32,32,32,32} /* 128 MB for turbo */
! 92: };
! 93: int defsizecount=0; /* Compare defsizes up to this value */
1.1 root 94:
95: /**
96: * Show and process the memory dialog.
97: * @return true if a memory snapshot has been loaded, false otherwise
98: */
99: bool Dialog_MemDlg(void)
100: {
101: int but;
102:
103: SDLGui_CenterDlg(memorydlg);
1.1.1.2 ! root 104:
! 105: /* Remove 64 and 128MB option if system is non-Turbo Slab,
! 106: * remove 128MB option if system is not Turbo */
! 107: if (ConfigureParams.System.bTurbo) {
! 108: memorydlg[DLGMEM_64MB] = enable_64mb_option;
! 109: memorydlg[DLGMEM_128MB] = enable_128mb_option;
! 110: defsizecount = 9;
! 111: } else if (ConfigureParams.System.bColor ||
! 112: ConfigureParams.System.nMachineType == NEXT_STATION) {
! 113: memorydlg[DLGMEM_64MB] = disable_64mb_option;
! 114: memorydlg[DLGMEM_128MB] = disable_128mb_option;
! 115: defsizecount = 6;
! 116: } else {
! 117: memorydlg[DLGMEM_64MB] = enable_64mb_option;
! 118: memorydlg[DLGMEM_128MB] = disable_128mb_option;
! 119: defsizecount = 8;
! 120: }
1.1 root 121:
1.1.1.2 ! root 122: /* Draw dialog from actual values */
1.1 root 123:
1.1.1.2 ! root 124: Dialog_MemDlgDraw();
1.1 root 125:
126: do
127: {
128: but = SDLGui_DoDialog(memorydlg, NULL);
1.1.1.2 ! root 129:
1.1 root 130: switch (but)
131: {
1.1.1.2 ! root 132: case DLGMEM_8MB:
! 133: if (ConfigureParams.System.bColor || ConfigureParams.System.bTurbo) {
! 134: memcpy(ConfigureParams.Memory.nMemoryBankSize, defsize[1],
! 135: sizeof(ConfigureParams.Memory.nMemoryBankSize));
! 136: } else {
! 137: memcpy(ConfigureParams.Memory.nMemoryBankSize, defsize[0],
! 138: sizeof(ConfigureParams.Memory.nMemoryBankSize));
! 139: }
! 140: sprintf(custom_memsize, "Customize");
! 141: break;
! 142: case DLGMEM_16MB:
! 143: if (ConfigureParams.System.bColor || ConfigureParams.System.bTurbo) {
! 144: memcpy(ConfigureParams.Memory.nMemoryBankSize, defsize[3],
! 145: sizeof(ConfigureParams.Memory.nMemoryBankSize));
! 146: } else {
! 147: memcpy(ConfigureParams.Memory.nMemoryBankSize, defsize[2],
! 148: sizeof(ConfigureParams.Memory.nMemoryBankSize));
! 149: }
! 150: sprintf(custom_memsize, "Customize");
! 151: break;
! 152: case DLGMEM_32MB:
! 153: if (ConfigureParams.System.bColor || ConfigureParams.System.bTurbo) {
! 154: memcpy(ConfigureParams.Memory.nMemoryBankSize, defsize[5],
! 155: sizeof(ConfigureParams.Memory.nMemoryBankSize));
! 156: } else {
! 157: memcpy(ConfigureParams.Memory.nMemoryBankSize, defsize[4],
! 158: sizeof(ConfigureParams.Memory.nMemoryBankSize));
! 159: }
! 160: sprintf(custom_memsize, "Customize");
! 161: break;
! 162: case DLGMEM_64MB:
! 163: if (ConfigureParams.System.bTurbo) {
! 164: memcpy(ConfigureParams.Memory.nMemoryBankSize, defsize[7],
! 165: sizeof(ConfigureParams.Memory.nMemoryBankSize));
! 166: } else {
! 167: memcpy(ConfigureParams.Memory.nMemoryBankSize, defsize[6],
! 168: sizeof(ConfigureParams.Memory.nMemoryBankSize));
! 169: }
! 170: sprintf(custom_memsize, "Customize");
! 171: break;
! 172: case DLGMEM_128MB:
! 173: memcpy(ConfigureParams.Memory.nMemoryBankSize, defsize[8],
! 174: sizeof(ConfigureParams.Memory.nMemoryBankSize));
! 175: sprintf(custom_memsize, "Customize");
! 176: break;
! 177: case DLGMEM_CUSTOM:
! 178: Dialog_MemAdvancedDlg(ConfigureParams.Memory.nMemoryBankSize);
! 179: Dialog_MemDlgDraw();
! 180: break;
! 181: case DLGMEM_SAVE: /* Save memory snap-shot */
! 182: if (SDLGui_FileConfSelect(dlgSnapShotName,
! 183: ConfigureParams.Memory.szMemoryCaptureFileName,
! 184: memorydlg[DLGMEM_FILENAME].w, true))
! 185: {
! 186: MemorySnapShot_Capture(ConfigureParams.Memory.szMemoryCaptureFileName, true);
! 187: }
! 188: break;
! 189: case DLGMEM_RESTORE: /* Load memory snap-shot */
! 190: if (SDLGui_FileConfSelect(dlgSnapShotName,
! 191: ConfigureParams.Memory.szMemoryCaptureFileName,
! 192: memorydlg[DLGMEM_FILENAME].w, false))
! 193: {
! 194: MemorySnapShot_Restore(ConfigureParams.Memory.szMemoryCaptureFileName, true);
! 195: return true;
! 196: }
! 197: break;
1.1 root 198: }
199: }
200: while (but != DLGMEM_EXIT && but != SDLGUI_QUIT
1.1.1.2 ! root 201: && but != SDLGUI_ERROR && !bQuitProgram );
1.1 root 202:
203: /* Read new values from dialog: */
204:
1.1.1.2 ! root 205: if (memorydlg[DLGMEM_120NS].state & SG_SELECTED)
! 206: ConfigureParams.Memory.nMemorySpeed = MEMORY_120NS;
! 207: else if (memorydlg[DLGMEM_100NS].state & SG_SELECTED)
! 208: ConfigureParams.Memory.nMemorySpeed = MEMORY_100NS;
! 209: else if (memorydlg[DLGMEM_80NS].state & SG_SELECTED)
! 210: ConfigureParams.Memory.nMemorySpeed = MEMORY_80NS;
! 211: else
! 212: ConfigureParams.Memory.nMemorySpeed = MEMORY_60NS;
! 213:
1.1 root 214: ConfigureParams.Memory.bAutoSave = (memorydlg[DLGMEM_AUTOSAVE].state & SG_SELECTED);
215:
216: return false;
217: }
1.1.1.2 ! root 218:
! 219:
! 220: void Dialog_MemDlgDraw(void) {
! 221: int i;
! 222: int memsum, memsize;
! 223:
! 224: sprintf(custom_memsize, "Customize");
! 225:
! 226: for (i = DLGMEM_8MB; i <= DLGMEM_128MB; i++)
! 227: {
! 228: memorydlg[i].state &= ~SG_SELECTED;
! 229: }
! 230:
! 231: for (i = DLGMEM_120NS; i <= DLGMEM_60NS; i++)
! 232: {
! 233: memorydlg[i].state &= ~SG_SELECTED;
! 234: }
! 235:
! 236: /* Check memory configuration and find out if it is one of our default configurations */
! 237: memsum = Configuration_CheckMemory(ConfigureParams.Memory.nMemoryBankSize);
! 238:
! 239: for (i=0; i<defsizecount; i++) {
! 240: if (memcmp(ConfigureParams.Memory.nMemoryBankSize, defsize[i],
! 241: sizeof(ConfigureParams.Memory.nMemoryBankSize))) {
! 242: memsize = 0;
! 243: } else {
! 244: memsize = memsum;
! 245: break;
! 246: }
! 247: }
! 248:
! 249: switch (memsize)
! 250: {
! 251: case 8:
! 252: memorydlg[DLGMEM_8MB].state |= SG_SELECTED;
! 253: break;
! 254: case 16:
! 255: memorydlg[DLGMEM_16MB].state |= SG_SELECTED;
! 256: break;
! 257: case 32:
! 258: memorydlg[DLGMEM_32MB].state |= SG_SELECTED;
! 259: break;
! 260: case 64:
! 261: memorydlg[DLGMEM_64MB].state |= SG_SELECTED;
! 262: break;
! 263: case 128:
! 264: memorydlg[DLGMEM_128MB].state |= SG_SELECTED;
! 265: break;
! 266: default:
! 267: memorydlg[DLGMEM_CUSTOM].state |= SG_SELECTED;
! 268: sprintf(custom_memsize, "Custom (%i MB)", memsum);
! 269: break;
! 270: }
! 271:
! 272: switch (ConfigureParams.Memory.nMemorySpeed) {
! 273: case MEMORY_120NS:
! 274: memorydlg[DLGMEM_120NS].state |= SG_SELECTED;
! 275: break;
! 276: case MEMORY_100NS:
! 277: memorydlg[DLGMEM_100NS].state |= SG_SELECTED;
! 278: break;
! 279: case MEMORY_80NS:
! 280: memorydlg[DLGMEM_80NS].state |= SG_SELECTED;
! 281: break;
! 282: case MEMORY_60NS:
! 283: memorydlg[DLGMEM_60NS].state |= SG_SELECTED;
! 284: break;
! 285:
! 286: default:
! 287: ConfigureParams.Memory.nMemorySpeed = MEMORY_100NS;
! 288: memorydlg[DLGMEM_100NS].state |= SG_SELECTED;
! 289: break;
! 290: }
! 291:
! 292: File_ShrinkName(dlgSnapShotName, ConfigureParams.Memory.szMemoryCaptureFileName, memorydlg[DLGMEM_FILENAME].w);
! 293:
! 294:
! 295: if (ConfigureParams.Memory.bAutoSave)
! 296: memorydlg[DLGMEM_AUTOSAVE].state |= SG_SELECTED;
! 297: else
! 298: memorydlg[DLGMEM_AUTOSAVE].state &= ~SG_SELECTED;
! 299: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.