|
|
1.1 root 1: /*
2: Previous - dlgSystem.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: */
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:
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
41:
42: #define DLGADV_SCSI_OLD 36
43: #define DLGADV_SCSI_NEW 37
44:
45: #define DLGADV_RTC_OLD 40
46: #define DLGADV_RTC_NEW 41
47:
48: #define DLGADV_EXIT 42
49:
50: char custom_memory[16] = "Customize";
51:
52: #define DLG_VAR_Y 16
53: #define DLG_MEM_Y 16
54:
55: static SGOBJ advanceddlg[] =
56: {
57: { SGBOX, 0, 0, 0,0, 63,31, NULL },
58: { SGTEXT, 0, 0, 20,1, 23,1, "Advanced system options" },
59:
60: { SGBOX, 0, 0, 2,3, 14,15, NULL },
61: { SGTEXT, 0, 0, 3,4, 12,1, "CPU clock" },
62: { SGRADIOBUT, 0, 0, 4,DLG_VAR_Y, 10,1, "Variable" },
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" },
71: { SGRADIOBUT, 0, 0, 19,DLG_MEM_Y, 8,1, custom_memory },
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" },
108: { -1, 0, 0, 0,0, 0,0, NULL }
109: };
110:
111:
112: /* Variable objects */
113: SGOBJ disable_128mb_opt = { SGTEXT, 0, 0, 19,14, 0,1, "" };
114: SGOBJ enable_128mb_opt = { SGRADIOBUT, 0, 0, 19,14, 8,1, "128 MB" };
115: SGOBJ disable_64mb_opt = { SGTEXT, 0, 0, 19,12, 0,1, "" };
116: SGOBJ enable_64mb_opt = { SGRADIOBUT, 0, 0, 19,12, 7,1, "64 MB" };
117: SGOBJ disable_40mhz_opt = { SGTEXT, 0, 0, 4,14, 0,1, "" };
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: */
138: static void Dialog_AdvancedDlg_MemDraw(void) {
139: int i;
140: int memsum, memsize;
141:
142: sprintf(custom_memory, "Customize");
143:
144: for (i = DLGADV_CUSTOM; i <= DLGADV_128MB; i++)
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:
211:
212: /*-----------------------------------------------------------------------*/
213: /**
214: * Show and process the "Advanced" dialog.
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: }
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;
237: }
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:
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;
270: advanceddlg[DLGADV_CUSTOM].y = DLG_MEM_Y;
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;
276: advanceddlg[DLGADV_CUSTOM].y = DLG_MEM_Y-4;
277: defmemsizecount = 6;
278: } else {
279: advanceddlg[DLGADV_64MB] = enable_64mb_opt;
280: advanceddlg[DLGADV_128MB] = disable_128mb_opt;
281: advanceddlg[DLGADV_CUSTOM].y = DLG_MEM_Y-2;
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;
305: break;
306: case DSP_TYPE_EMU:
307: advanceddlg[DLGADV_DSP56001].state |= SG_SELECTED;
308: break;
309: default:
310: break;
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: }
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;
351: case MCCS1850:
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);
364:
365: switch (but) {
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:
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: */
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:
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;
450: else
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: }
458:
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:
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
478: ConfigureParams.System.nRTC = MCCS1850;
479: }
480:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.