#include "compiler.h" #include "strres.h" #include "xmil.h" #include "sysmng.h" #include "pccore.h" #include "vramhdl.h" #include "menubase.h" #include "menustr.h" #include "sysmenu.res" #if !defined(SIZE_QVGA) #include "palettes.h" #endif enum { DID_Z80A = DID_USER, DID_Z80B, DID_Z80H, DID_RATE11, DID_RATE22, DID_RATE44, DID_BUFFER, DID_BUFSTR, DID_SKIPLINE, DID_SKIPRATIO, DID_SKIPLIGHT, DID_SKIPSTR }; static const OEMCHAR str_cpu[] = OEMTEXT("CPU"); static const OEMCHAR str_z80a[] = OEMTEXT("Z80A - 4MHz"); static const OEMCHAR str_z80b[] = OEMTEXT("Z80B - 6MHz"); static const OEMCHAR str_z80h[] = OEMTEXT("Z80H - 8MHz"); static const OEMCHAR str_sound[] = OEMTEXT("Sound"); static const OEMCHAR str_rate[] = OEMTEXT("Rate"); static const OEMCHAR str_11khz[] = OEMTEXT("11KHz"); static const OEMCHAR str_22khz[] = OEMTEXT("22KHz"); static const OEMCHAR str_44khz[] = OEMTEXT("44KHz"); static const OEMCHAR str_buffer[] = OEMTEXT("Buffer"); #if !defined(SIZE_QVGA) static const OEMCHAR str_screen[] = OEMTEXT("Screen"); static const OEMCHAR str_skipline[] = OEMTEXT("Use skipline revisions"); static const OEMCHAR str_ratio[] = OEMTEXT("Ratio"); #endif #if defined(SIZE_QVGA) static const MENUPRM res_cfg[] = { {DLGTYPE_FRAME, DID_STATIC, 0, str_cpu, 6, 6, 185, 59}, {DLGTYPE_RADIO, DID_Z80A, MENU_TABSTOP, str_z80a, 16, 20, 120, 11}, {DLGTYPE_RADIO, DID_Z80B, MENU_GRAY, str_z80b, 16, 34, 120, 11}, {DLGTYPE_RADIO, DID_Z80H, MENU_GRAY, str_z80h, 16, 48, 120, 11}, {DLGTYPE_FRAME, DID_STATIC, 0, str_sound, 6, 70, 244, 52}, {DLGTYPE_LTEXT, DID_STATIC, 0, str_rate, 16, 86, 40, 11}, {DLGTYPE_RADIO, DID_RATE11, MENU_TABSTOP, str_11khz, 60, 86, 60, 11}, {DLGTYPE_RADIO, DID_RATE22, 0, str_22khz, 120, 86, 60, 11}, {DLGTYPE_RADIO, DID_RATE44, 0, str_44khz, 180, 86, 60, 11}, {DLGTYPE_LTEXT, DID_STATIC, 0, str_buffer, 16, 105, 40, 11}, {DLGTYPE_SLIDER, DID_BUFFER, MSS_BOTH | MENU_TABSTOP, (void *)SLIDERPOS(100, 1000), 60, 104, 140, 13}, {DLGTYPE_RTEXT, DID_BUFSTR, 0, NULL, 200, 105, 44, 11}, {DLGTYPE_BUTTON, DID_OK, MENU_TABSTOP, mstr_ok, 197, 11, 52, 15}, {DLGTYPE_BUTTON, DID_CANCEL, MENU_TABSTOP, mstr_cancel, 197, 30, 52, 15}}; #else static const MENUPRM res_cfg[] = { {DLGTYPE_FRAME, DID_STATIC, 0, str_cpu, 8, 7, 202, 70}, {DLGTYPE_RADIO, DID_Z80A, MENU_TABSTOP, str_z80a, 20, 24, 120, 13}, {DLGTYPE_RADIO, DID_Z80B, MENU_GRAY, str_z80b, 20, 40, 120, 13}, {DLGTYPE_RADIO, DID_Z80H, MENU_GRAY, str_z80h, 20, 56, 120, 13}, {DLGTYPE_FRAME, DID_STATIC, 0, str_sound, 8, 82, 288, 60}, {DLGTYPE_LTEXT, DID_STATIC, 0, str_rate, 20, 100, 48, 13}, {DLGTYPE_RADIO, DID_RATE11, MENU_TABSTOP, str_11khz, 68, 100, 66, 13}, {DLGTYPE_RADIO, DID_RATE22, 0, str_22khz, 134, 100, 66, 13}, {DLGTYPE_RADIO, DID_RATE44, 0, str_44khz, 200, 100, 66, 13}, {DLGTYPE_LTEXT, DID_STATIC, 0, str_buffer, 20, 120, 48, 13}, {DLGTYPE_SLIDER, DID_BUFFER, MSS_BOTH | MENU_TABSTOP, (void *)SLIDERPOS(100, 1000), 68, 120, 160, 13}, {DLGTYPE_RTEXT, DID_BUFSTR, 0, NULL, 228, 120, 48, 13}, {DLGTYPE_FRAME, DID_STATIC, 0, str_screen, 8, 146, 288, 60}, {DLGTYPE_CHECK, DID_SKIPLINE, 0, str_skipline, 20, 164, 192, 13}, {DLGTYPE_LTEXT, DID_SKIPRATIO, 0, str_ratio, 28, 184, 40, 13}, {DLGTYPE_SLIDER, DID_SKIPLIGHT, MSS_BOTH | MENU_TABSTOP, (void *)SLIDERPOS(0, 256), 68, 184, 160, 13}, {DLGTYPE_RTEXT, DID_SKIPSTR, 0, NULL, 228, 184, 48, 13}, {DLGTYPE_BUTTON, DID_OK, MENU_TABSTOP, mstr_ok, 218, 13, 77, 21}, {DLGTYPE_BUTTON, DID_CANCEL, MENU_TABSTOP, mstr_cancel, 218, 38, 77, 21}}; #endif // ---- static const OEMCHAR str_buffmt[] = OEMTEXT("%ums"); static void setbufstr(void) { UINT val; OEMCHAR work[32]; val = menudlg_getval(DID_BUFFER); if (val < 100) { val = 100; } else if (val > 1000) { val = 1000; } OEMSPRINTF(work, str_buffmt, val); menudlg_settext(DID_BUFSTR, work); } #if !defined(SIZE_QVGA) static void setskipen(UINT en) { menudlg_setenable(DID_SKIPRATIO, en); menudlg_setenable(DID_SKIPLIGHT, en); menudlg_setenable(DID_SKIPSTR, en); } static void setskipstr(void) { UINT val; OEMCHAR work[32]; val = menudlg_getval(DID_SKIPLIGHT); if (val > 256) { val = 256; } OEMSPRINTF(work, str_u, val); menudlg_settext(DID_SKIPSTR, work); } #endif static void dlginit(void) { MENUID id; menudlg_appends(res_cfg, NELEMENTS(res_cfg)); menudlg_setval(DID_Z80A, 1); if (xmilcfg.samplingrate < ((11025 + 22050) / 2)) { id = DID_RATE11; } else if (xmilcfg.samplingrate < ((22050 + 44100) / 2)) { id = DID_RATE22; } else { id = DID_RATE44; } menudlg_setval(id, 1); menudlg_setval(DID_BUFFER, xmilcfg.delayms); setbufstr(); #if !defined(SIZE_QVGA) menudlg_setval(DID_SKIPLINE, xmilcfg.skipline); menudlg_setval(DID_SKIPLIGHT, xmilcfg.skiplight); setskipen(xmilcfg.skipline); setskipstr(); #endif } static void dlgupdate(void) { UINT update; UINT val; #if !defined(SIZE_QVGA) BRESULT renewalflg; #endif update = 0; if (menudlg_getval(DID_RATE11)) { val = 11025; } else if (menudlg_getval(DID_RATE44)) { val = 44100; } else { val = 22050; } if (xmilcfg.samplingrate != (UINT16)val) { xmilcfg.samplingrate = (UINT16)val; update |= SYS_UPDATECFG; corestat.soundrenewal = 1; } val = menudlg_getval(DID_BUFFER); if (val < 100) { val = 100; } else if (val > 1000) { val = 1000; } if (xmilcfg.delayms != (UINT16)val) { xmilcfg.delayms = (UINT16)val; update |= SYS_UPDATECFG; corestat.soundrenewal = 1; } #if !defined(SIZE_QVGA) renewalflg = FALSE; val = menudlg_getval(DID_SKIPLINE); if (xmilcfg.skipline != (UINT8)val) { xmilcfg.skipline = (UINT8)val; renewalflg = TRUE; } val = menudlg_getval(DID_SKIPLIGHT); if (val > 256) { val = 256; } if (xmilcfg.skiplight != (UINT16)val) { xmilcfg.skiplight = (UINT16)val; renewalflg = TRUE; } if (renewalflg) { pal_reset(); update |= SYS_UPDATECFG; } #endif sysmng_update(update); } int dlgcfg_cmd(int msg, MENUID id, long param) { switch(msg) { case DLGMSG_CREATE: dlginit(); break; case DLGMSG_COMMAND: switch(id) { case DID_OK: dlgupdate(); menubase_close(); break; case DID_CANCEL: menubase_close(); break; case DID_BUFFER: setbufstr(); break; #if !defined(SIZE_QVGA) case DID_SKIPLINE: setskipen(menudlg_getval(DID_SKIPLINE)); break; case DID_SKIPLIGHT: setskipstr(); break; #endif } break; case DLGMSG_CLOSE: menubase_close(); break; } (void)param; return(0); }