|
|
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.