|
|
1.1 root 1: /*
1.1.1.3 root 2: Previous - dlgSystem.c
1.1 root 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: */
8: const char DlgAdvanced_fileid[] = "Hatari dlgAdvanced.c : " __DATE__ " " __TIME__;
9:
10: #include "main.h"
11: #include "configuration.h"
12: #include "dialog.h"
13: #include "sdlgui.h"
14:
15:
1.1.1.4 ! root 16: #define DLGADV_REALTIME 4
! 17: #define DLGADV_16MHZ 5
! 18: #define DLGADV_20MHZ 6
! 19: #define DLGADV_25MHZ 7
! 20: #define DLGADV_33MHZ 8
! 21: #define DLGADV_40MHZ 9
! 22:
! 23: #define DLGADV_CUSTOM 12
! 24: #define DLGADV_8MB 13
! 25: #define DLGADV_16MB 14
! 26: #define DLGADV_32MB 15
! 27: #define DLGADV_64MB 16
! 28: #define DLGADV_128MB 17
! 29:
! 30: #define DLGADV_120NS 20
! 31: #define DLGADV_100NS 21
! 32: #define DLGADV_80NS 22
! 33: #define DLGADV_60NS 23
! 34:
! 35: #define DLGADV_DSPNONE 26
! 36: #define DLGADV_DSP56001 27
! 37: #define DLGADV_DSPMEM24 29
! 38: #define DLGADV_DSPMEM96 30
! 39:
! 40: #define DLGADV_NBIC 33
1.1.1.3 root 41:
1.1.1.4 ! root 42: #define DLGADV_SCSI_OLD 36
! 43: #define DLGADV_SCSI_NEW 37
1.1 root 44:
1.1.1.4 ! root 45: #define DLGADV_RTC_OLD 40
! 46: #define DLGADV_RTC_NEW 41
1.1 root 47:
1.1.1.4 ! root 48: #define DLGADV_EXIT 42
1.1 root 49:
1.1.1.3 root 50: char custom_memory[16] = "Customize";
1.1 root 51:
1.1.1.4 ! root 52: #define DLG_VAR_Y 16
! 53: #define DLG_MEM_Y 16
! 54:
1.1 root 55: static SGOBJ advanceddlg[] =
56: {
1.1.1.3 root 57: { SGBOX, 0, 0, 0,0, 63,31, NULL },
58: { SGTEXT, 0, 0, 20,1, 23,1, "Advanced system options" },
1.1 root 59:
1.1.1.3 root 60: { SGBOX, 0, 0, 2,3, 14,15, NULL },
61: { SGTEXT, 0, 0, 3,4, 12,1, "CPU clock" },
1.1.1.4 ! root 62: { SGRADIOBUT, 0, 0, 4,DLG_VAR_Y, 10,1, "Variable" },
1.1.1.3 root 63: { SGRADIOBUT, 0, 0, 4,6, 8,1, "16 MHz" },
64: { SGRADIOBUT, 0, 0, 4,8, 8,1, "20 MHz" },
65: { SGRADIOBUT, 0, 0, 4,10, 8,1, "25 MHz" },
66: { SGRADIOBUT, 0, 0, 4,12, 8,1, "33 MHz" },
67: { SGRADIOBUT, 0, 0, 4,14, 8,1, "40 MHz" },
68:
69: { SGBOX, 0, 0, 17,3, 14,15, NULL },
70: { SGTEXT, 0, 0, 18,4, 12,1, "Memory size" },
1.1.1.4 ! root 71: { SGRADIOBUT, 0, 0, 19,DLG_MEM_Y, 8,1, custom_memory },
1.1.1.3 root 72: { SGRADIOBUT, 0, 0, 19,6, 6,1, "8 MB" },
73: { SGRADIOBUT, 0, 0, 19,8, 7,1, "16 MB" },
74: { SGRADIOBUT, 0, 0, 19,10, 7,1, "32 MB" },
75: { SGRADIOBUT, 0, 0, 19,12, 7,1, "64 MB" },
76: { SGRADIOBUT, 0, 0, 19,14, 8,1, "128 MB" },
77:
78: { SGBOX, 0, 0, 32,3, 14,15, NULL },
79: { SGTEXT, 0, 0, 33,4, 12,1, "Memory speed" },
80: { SGRADIOBUT, 0, 0, 34,6, 8,1, "120 ns" },
81: { SGRADIOBUT, 0, 0, 34,8, 8,1, "100 ns" },
82: { SGRADIOBUT, 0, 0, 34,10, 7,1, "80 ns" },
83: { SGRADIOBUT, 0, 0, 34,12, 7,1, "60 ns" },
84:
85: { SGBOX, 0, 0, 47,3, 14,15, NULL },
86: { SGTEXT, 0, 0, 48,4, 12,1, "DSP type" },
87: { SGRADIOBUT, 0, 0, 49,6, 6,1, "none" },
88: { SGRADIOBUT, 0, 0, 49,8, 7,1, "56001" },
89: { SGTEXT, 0, 0, 48,10, 8,1, "DSP memory" },
90: { SGRADIOBUT, 0, 0, 49,12, 7,1, "24 kB" },
91: { SGRADIOBUT, 0, 0, 49,14, 7,1, "96 kB" },
92:
93: { SGBOX, 0, 0, 2,19, 19,7, NULL },
94: { SGTEXT, 0, 0, 3,20, 14,1, "NBIC" },
95: { SGCHECKBOX, 0, 0, 4,22, 10,1, "present" },
96:
97: { SGBOX, 0, 0, 22,19, 19,7, NULL },
98: { SGTEXT, 0, 0, 23,20, 14,1, "SCSI chip" },
99: { SGRADIOBUT, 0, 0, 24,22, 10,1, "NCR53C90" },
100: { SGRADIOBUT, 0, 0, 24,24, 11,1, "NCR53C90A" },
101:
102: { SGBOX, 0, 0, 42,19, 19,7, NULL },
103: { SGTEXT, 0, 0, 43,20, 14,1, "RTC chip" },
104: { SGRADIOBUT, 0, 0, 44,22, 12,1, "MC68HC68T1" },
105: { SGRADIOBUT, 0, 0, 44,24, 10,1, "MCCS1850" },
106:
107: { SGBUTTON, SG_DEFAULT, 0, 20,28, 23,1, "Back to system menu" },
1.1 root 108: { -1, 0, 0, 0,0, 0,0, NULL }
109: };
110:
111:
1.1.1.3 root 112: /* Variable objects */
1.1.1.4 ! root 113: SGOBJ disable_128mb_opt = { SGTEXT, 0, 0, 19,14, 0,1, "" };
1.1.1.3 root 114: SGOBJ enable_128mb_opt = { SGRADIOBUT, 0, 0, 19,14, 8,1, "128 MB" };
1.1.1.4 ! root 115: SGOBJ disable_64mb_opt = { SGTEXT, 0, 0, 19,12, 0,1, "" };
1.1.1.3 root 116: SGOBJ enable_64mb_opt = { SGRADIOBUT, 0, 0, 19,12, 7,1, "64 MB" };
1.1.1.4 ! root 117: SGOBJ disable_40mhz_opt = { SGTEXT, 0, 0, 4,14, 0,1, "" };
1.1.1.3 root 118: SGOBJ enable_40mhz_opt = { SGRADIOBUT, 0, 0, 4,14, 8,1, "40 MHz" };
119:
120: /* Default configuration constants */
121: int defmemsize[9][4] = {
122: { 4, 4, 0, 0}, /* 8 MB for monochrome non-turbo */
123: { 8, 0, 0, 0}, /* 8 MB for turbo and non-turbo color */
124: {16, 0, 0, 0}, /* 16 MB for monochrome non-turbo */
125: { 8, 8, 0, 0}, /* 16 MB for turbo and non-turbo color */
126: {16,16, 0, 0}, /* 32 MB for monochrome non-turbo */
127: { 8, 8, 8, 8}, /* 32 MB for turbo and non-turbo color */
128: {16,16,16,16}, /* 64 MB for monochrome non-turbo */
129: {32,32, 0, 0}, /* 64 MB for turbo */
130: {32,32,32,32} /* 128 MB for turbo */
131: };
132: int defmemsizecount=0; /* Compare defsizes up to this value */
133:
134: /*-----------------------------------------------------------------------*/
135: /**
136: * Draw the memory options.
137: */
1.1.1.4 ! root 138: static void Dialog_AdvancedDlg_MemDraw(void) {
1.1.1.3 root 139: int i;
140: int memsum, memsize;
141:
142: sprintf(custom_memory, "Customize");
143:
1.1.1.4 ! root 144: for (i = DLGADV_CUSTOM; i <= DLGADV_128MB; i++)
1.1.1.3 root 145: {
146: advanceddlg[i].state &= ~SG_SELECTED;
147: }
148:
149: for (i = DLGADV_120NS; i <= DLGADV_60NS; i++)
150: {
151: advanceddlg[i].state &= ~SG_SELECTED;
152: }
153:
154: /* Check memory configuration and find out if it is one of our default configurations */
155: memsum = Configuration_CheckMemory(ConfigureParams.Memory.nMemoryBankSize);
156:
157: for (i=0; i<defmemsizecount; i++) {
158: if (memcmp(ConfigureParams.Memory.nMemoryBankSize, defmemsize[i],
159: sizeof(ConfigureParams.Memory.nMemoryBankSize))) {
160: memsize = 0;
161: } else {
162: memsize = memsum;
163: break;
164: }
165: }
166:
167: switch (memsize)
168: {
169: case 8:
170: advanceddlg[DLGADV_8MB].state |= SG_SELECTED;
171: break;
172: case 16:
173: advanceddlg[DLGADV_16MB].state |= SG_SELECTED;
174: break;
175: case 32:
176: advanceddlg[DLGADV_32MB].state |= SG_SELECTED;
177: break;
178: case 64:
179: advanceddlg[DLGADV_64MB].state |= SG_SELECTED;
180: break;
181: case 128:
182: advanceddlg[DLGADV_128MB].state |= SG_SELECTED;
183: break;
184: default:
185: advanceddlg[DLGADV_CUSTOM].state |= SG_SELECTED;
186: sprintf(custom_memory, "Custom");
187: break;
188: }
189:
190: switch (ConfigureParams.Memory.nMemorySpeed) {
191: case MEMORY_120NS:
192: advanceddlg[DLGADV_120NS].state |= SG_SELECTED;
193: break;
194: case MEMORY_100NS:
195: advanceddlg[DLGADV_100NS].state |= SG_SELECTED;
196: break;
197: case MEMORY_80NS:
198: advanceddlg[DLGADV_80NS].state |= SG_SELECTED;
199: break;
200: case MEMORY_60NS:
201: advanceddlg[DLGADV_60NS].state |= SG_SELECTED;
202: break;
203:
204: default:
205: ConfigureParams.Memory.nMemorySpeed = MEMORY_100NS;
206: advanceddlg[DLGADV_100NS].state |= SG_SELECTED;
207: break;
208: }
209: }
210:
1.1 root 211:
212: /*-----------------------------------------------------------------------*/
213: /**
1.1.1.3 root 214: * Show and process the "Advanced" dialog.
1.1 root 215: */
216: void Dialog_AdvancedDlg(void) {
217:
218: int i;
219: int but;
220:
221: SDLGui_CenterDlg(advanceddlg);
222:
223: /* Set up dialog from actual values: */
224:
225: for (i = DLGADV_16MHZ; i <= DLGADV_40MHZ; i++)
226: {
227: advanceddlg[i].state &= ~SG_SELECTED;
228: }
1.1.1.4 ! root 229:
! 230: /* Remove 40 MHz option if system is non-Turbo */
! 231: if (ConfigureParams.System.bTurbo) {
! 232: advanceddlg[DLGADV_40MHZ] = enable_40mhz_opt;
! 233: advanceddlg[DLGADV_REALTIME].y = DLG_VAR_Y;
! 234: } else {
! 235: advanceddlg[DLGADV_40MHZ] = disable_40mhz_opt;
! 236: advanceddlg[DLGADV_REALTIME].y = DLG_VAR_Y-2;
1.1 root 237: }
1.1.1.4 ! root 238:
! 239: if (ConfigureParams.System.bRealtime) {
! 240: advanceddlg[DLGADV_REALTIME].state |= SG_SELECTED;
! 241: } else {
! 242: advanceddlg[DLGADV_REALTIME].state &= ~SG_SELECTED;
! 243: switch (ConfigureParams.System.nCpuFreq)
! 244: {
! 245: case 16:
! 246: advanceddlg[DLGADV_16MHZ].state |= SG_SELECTED;
! 247: break;
! 248: case 20:
! 249: advanceddlg[DLGADV_20MHZ].state |= SG_SELECTED;
! 250: break;
! 251: case 25:
! 252: advanceddlg[DLGADV_25MHZ].state |= SG_SELECTED;
! 253: break;
! 254: case 33:
! 255: advanceddlg[DLGADV_33MHZ].state |= SG_SELECTED;
! 256: break;
! 257: case 40:
! 258: advanceddlg[DLGADV_40MHZ].state |= SG_SELECTED;
! 259: break;
! 260: default:
! 261: break;
! 262: }
! 263: }
! 264:
1.1.1.3 root 265: /* Remove 64 and 128MB option if system is non-Turbo Slab,
266: * remove 128MB option if system is not Turbo */
267: if (ConfigureParams.System.bTurbo) {
268: advanceddlg[DLGADV_64MB] = enable_64mb_opt;
269: advanceddlg[DLGADV_128MB] = enable_128mb_opt;
1.1.1.4 ! root 270: advanceddlg[DLGADV_CUSTOM].y = DLG_MEM_Y;
1.1.1.3 root 271: defmemsizecount = 9;
272: } else if (ConfigureParams.System.bColor ||
273: ConfigureParams.System.nMachineType == NEXT_STATION) {
274: advanceddlg[DLGADV_64MB] = disable_64mb_opt;
275: advanceddlg[DLGADV_128MB] = disable_128mb_opt;
1.1.1.4 ! root 276: advanceddlg[DLGADV_CUSTOM].y = DLG_MEM_Y-4;
1.1.1.3 root 277: defmemsizecount = 6;
278: } else {
279: advanceddlg[DLGADV_64MB] = enable_64mb_opt;
280: advanceddlg[DLGADV_128MB] = disable_128mb_opt;
1.1.1.4 ! root 281: advanceddlg[DLGADV_CUSTOM].y = DLG_MEM_Y-2;
1.1.1.3 root 282: defmemsizecount = 8;
283: }
284:
285: /* Display memory speed options depending on system type */
286: if (ConfigureParams.System.bTurbo) {
287: advanceddlg[DLGADV_120NS].txt = "60 ns";
288: advanceddlg[DLGADV_100NS].txt = "70 ns";
289: advanceddlg[DLGADV_80NS].txt = "80 ns";
290: advanceddlg[DLGADV_60NS].txt = "100 ns";
291: } else {
292: advanceddlg[DLGADV_120NS].txt = "120 ns";
293: advanceddlg[DLGADV_100NS].txt = "100 ns";
294: advanceddlg[DLGADV_80NS].txt = "80 ns";
295: advanceddlg[DLGADV_60NS].txt = "60 ns";
296: }
297: Dialog_AdvancedDlg_MemDraw();
298:
299: advanceddlg[DLGADV_DSPNONE].state &= ~SG_SELECTED;
300: advanceddlg[DLGADV_DSP56001].state &= ~SG_SELECTED;
301: switch (ConfigureParams.System.nDSPType) {
302: case DSP_TYPE_NONE:
303: case DSP_TYPE_DUMMY:
304: advanceddlg[DLGADV_DSPNONE].state |= SG_SELECTED;
1.1 root 305: break;
1.1.1.3 root 306: case DSP_TYPE_EMU:
307: advanceddlg[DLGADV_DSP56001].state |= SG_SELECTED;
1.1 root 308: break;
309: default:
310: break;
1.1.1.3 root 311: }
312:
313: advanceddlg[DLGADV_DSPMEM24].state &= ~SG_SELECTED;
314: advanceddlg[DLGADV_DSPMEM96].state &= ~SG_SELECTED;
315: if (ConfigureParams.System.bDSPMemoryExpansion) {
316: advanceddlg[DLGADV_DSPMEM96].state |= SG_SELECTED;
317: } else {
318: advanceddlg[DLGADV_DSPMEM24].state |= SG_SELECTED;
319: }
320:
321: advanceddlg[DLGADV_NBIC].state &= ~SG_SELECTED;
322: if (ConfigureParams.System.bNBIC) {
323: advanceddlg[DLGADV_NBIC].state |= SG_SELECTED;
324: }
1.1 root 325:
326: for (i = DLGADV_SCSI_OLD; i <= DLGADV_SCSI_NEW; i++)
327: {
328: advanceddlg[i].state &= ~SG_SELECTED;
329: }
330: switch (ConfigureParams.System.nSCSI)
331: {
332: case NCR53C90:
333: advanceddlg[DLGADV_SCSI_OLD].state |= SG_SELECTED;
334: break;
335: case NCR53C90A:
336: advanceddlg[DLGADV_SCSI_NEW].state |= SG_SELECTED;
337: break;
338: default:
339: break;
340: }
341:
342: for (i = DLGADV_RTC_OLD; i <= DLGADV_RTC_NEW; i++)
343: {
344: advanceddlg[i].state &= ~SG_SELECTED;
345: }
346: switch (ConfigureParams.System.nRTC)
347: {
348: case MC68HC68T1:
349: advanceddlg[DLGADV_RTC_OLD].state |= SG_SELECTED;
350: break;
1.1.1.3 root 351: case MCCS1850:
1.1 root 352: advanceddlg[DLGADV_RTC_NEW].state |= SG_SELECTED;
353: break;
354: default:
355: break;
356: }
357:
358:
359: /* Draw and process the dialog: */
360:
361: do
362: {
363: but = SDLGui_DoDialog(advanceddlg, NULL);
1.1.1.3 root 364:
1.1 root 365: switch (but) {
1.1.1.3 root 366: case DLGADV_8MB:
367: if (ConfigureParams.System.bColor || ConfigureParams.System.bTurbo) {
368: memcpy(ConfigureParams.Memory.nMemoryBankSize, defmemsize[1],
369: sizeof(ConfigureParams.Memory.nMemoryBankSize));
370: } else {
371: memcpy(ConfigureParams.Memory.nMemoryBankSize, defmemsize[0],
372: sizeof(ConfigureParams.Memory.nMemoryBankSize));
373: }
374: sprintf(custom_memory, "Customize");
375: break;
376: case DLGADV_16MB:
377: if (ConfigureParams.System.bColor || ConfigureParams.System.bTurbo) {
378: memcpy(ConfigureParams.Memory.nMemoryBankSize, defmemsize[3],
379: sizeof(ConfigureParams.Memory.nMemoryBankSize));
380: } else {
381: memcpy(ConfigureParams.Memory.nMemoryBankSize, defmemsize[2],
382: sizeof(ConfigureParams.Memory.nMemoryBankSize));
383: }
384: sprintf(custom_memory, "Customize");
385: break;
386: case DLGADV_32MB:
387: if (ConfigureParams.System.bColor || ConfigureParams.System.bTurbo) {
388: memcpy(ConfigureParams.Memory.nMemoryBankSize, defmemsize[5],
389: sizeof(ConfigureParams.Memory.nMemoryBankSize));
390: } else {
391: memcpy(ConfigureParams.Memory.nMemoryBankSize, defmemsize[4],
392: sizeof(ConfigureParams.Memory.nMemoryBankSize));
393: }
394: sprintf(custom_memory, "Customize");
395: break;
396: case DLGADV_64MB:
397: if (ConfigureParams.System.bTurbo) {
398: memcpy(ConfigureParams.Memory.nMemoryBankSize, defmemsize[7],
399: sizeof(ConfigureParams.Memory.nMemoryBankSize));
400: } else {
401: memcpy(ConfigureParams.Memory.nMemoryBankSize, defmemsize[6],
402: sizeof(ConfigureParams.Memory.nMemoryBankSize));
403: }
404: sprintf(custom_memory, "Customize");
405: break;
406: case DLGADV_128MB:
407: memcpy(ConfigureParams.Memory.nMemoryBankSize, defmemsize[8],
408: sizeof(ConfigureParams.Memory.nMemoryBankSize));
409: sprintf(custom_memory, "Customize");
410: break;
411: case DLGADV_CUSTOM:
412: Dialog_MemAdvancedDlg(ConfigureParams.Memory.nMemoryBankSize);
413: Dialog_AdvancedDlg_MemDraw();
414: break;
415:
1.1 root 416: default:
417: break;
418: }
419: }
420: while (but != DLGADV_EXIT && but != SDLGUI_QUIT
421: && but != SDLGUI_ERROR && !bQuitProgram);
422:
423:
424: /* Read values from dialog: */
1.1.1.4 ! root 425:
! 426: if (advanceddlg[DLGADV_REALTIME].state & SG_SELECTED) {
! 427: ConfigureParams.System.bRealtime = true;
! 428: ConfigureParams.System.nCpuFreq = ConfigureParams.System.bTurbo ? 33 : 25;
! 429: } else {
! 430: ConfigureParams.System.bRealtime = false;
! 431:
! 432: if (advanceddlg[DLGADV_16MHZ].state & SG_SELECTED)
! 433: ConfigureParams.System.nCpuFreq = 16;
! 434: else if (advanceddlg[DLGADV_20MHZ].state & SG_SELECTED)
! 435: ConfigureParams.System.nCpuFreq = 20;
! 436: else if (advanceddlg[DLGADV_25MHZ].state & SG_SELECTED)
! 437: ConfigureParams.System.nCpuFreq = 25;
! 438: else if (advanceddlg[DLGADV_33MHZ].state & SG_SELECTED)
! 439: ConfigureParams.System.nCpuFreq = 33;
! 440: else
! 441: ConfigureParams.System.nCpuFreq = 40;
! 442: }
! 443:
1.1.1.3 root 444: if (advanceddlg[DLGADV_120NS].state & SG_SELECTED)
445: ConfigureParams.Memory.nMemorySpeed = MEMORY_120NS;
446: else if (advanceddlg[DLGADV_100NS].state & SG_SELECTED)
447: ConfigureParams.Memory.nMemorySpeed = MEMORY_100NS;
448: else if (advanceddlg[DLGADV_80NS].state & SG_SELECTED)
449: ConfigureParams.Memory.nMemorySpeed = MEMORY_80NS;
1.1 root 450: else
1.1.1.3 root 451: ConfigureParams.Memory.nMemorySpeed = MEMORY_60NS;
452:
453: if (advanceddlg[DLGADV_DSP56001].state & SG_SELECTED) {
454: ConfigureParams.System.nDSPType = DSP_TYPE_EMU;
455: } else {
456: ConfigureParams.System.nDSPType = DSP_TYPE_NONE;
457: }
1.1 root 458:
1.1.1.3 root 459: if (advanceddlg[DLGADV_DSPMEM96].state & SG_SELECTED) {
460: ConfigureParams.System.bDSPMemoryExpansion = true;
461: } else {
462: ConfigureParams.System.bDSPMemoryExpansion = false;
463: }
464:
465: if (advanceddlg[DLGADV_NBIC].state & SG_SELECTED)
466: ConfigureParams.System.bNBIC = true;
467: else
468: ConfigureParams.System.bNBIC = false;
469:
1.1 root 470: if (advanceddlg[DLGADV_SCSI_OLD].state & SG_SELECTED)
471: ConfigureParams.System.nSCSI = NCR53C90;
472: else
473: ConfigureParams.System.nSCSI = NCR53C90A;
474:
475: if (advanceddlg[DLGADV_RTC_OLD].state & SG_SELECTED)
476: ConfigureParams.System.nRTC = MC68HC68T1;
477: else
1.1.1.3 root 478: ConfigureParams.System.nRTC = MCCS1850;
1.1 root 479: }
480:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.