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