NP2kai/embed/menu/dlgscr.c
2020-05-16 05:29:23 +09:00

427 lines
13 KiB
C
Executable File

#include <compiler.h>
#include <common/strres.h>
#include <scrnmng.h>
#include <sysmng.h>
#include <pccore.h>
#include <io/iocore.h>
#include <vram/scrndraw.h>
#include <vram/palettes.h>
#include <embed/vramhdl.h>
#include <embed/menubase/menubase.h>
#include <embed/menu/menustr.h>
#include "sysmenu.res"
#include <embed/menu/dlgscr.h>
enum {
DID_TAB = DID_USER,
DID_LCD,
DID_LCDX,
DID_SKIPLINE,
DID_SKIPLIGHT,
DID_LIGHTSTR,
DID_GDC7220,
DID_GDC72020,
DID_GRCGNON,
DID_GRCG,
DID_GRCG2,
DID_EGC,
DID_PC980124,
DID_TRAMWAIT,
DID_TRAMSTR,
DID_VRAMWAIT,
DID_VRAMSTR,
DID_GRCGWAIT,
DID_GRCGSTR,
DID_REALPAL,
DID_REALPALSTR
};
static const OEMCHAR str_video[] = OEMTEXT("Video");
static const OEMCHAR str_lcd[] = OEMTEXT("Liquid Crystal Display");
static const OEMCHAR str_lcdx[] = OEMTEXT("Reverse");
static const OEMCHAR str_skipline[] = OEMTEXT("Use skipline revisions");
static const OEMCHAR str_skiplght[] = OEMTEXT("Ratio");
static const OEMCHAR str_chip[] = OEMTEXT("Chip");
static const OEMCHAR str_gdc[] = OEMTEXT("GDC");
static const OEMCHAR str_gdc0[] = OEMTEXT("uPD7220");
static const OEMCHAR str_gdc1[] = OEMTEXT("uPD72020");
static const OEMCHAR str_grcg[] = OEMTEXT("Graphic Charger");
static const OEMCHAR str_grcg0[] = OEMTEXT("None");
static const OEMCHAR str_grcg1[] = OEMTEXT("GRCG");
static const OEMCHAR str_grcg2[] = OEMTEXT("GRCG+");
static const OEMCHAR str_grcg3[] = OEMTEXT("EGC");
static const OEMCHAR str_pc980124[] = OEMTEXT("Enable 16color (PC-9801-24)");
static const OEMCHAR str_timing[] = OEMTEXT("Timing");
static const OEMCHAR str_tram[] = OEMTEXT("T-RAM");
static const OEMCHAR str_vram[] = OEMTEXT("V-RAM");
static const OEMCHAR str_clock[] = OEMTEXT("clock");
static const OEMCHAR str_realpal[] = OEMTEXT("RealPalettes Adjust");
#if defined(NP2_SIZE_QVGA)
static const MENUPRM res_scr0[] = {
{DLGTYPE_TABLIST, DID_TAB, 0,
NULL, 5, 3, 270, 144},
{DLGTYPE_BUTTON, DID_OK, MENU_TABSTOP,
mstr_ok, 152, 150, 58, 15},
{DLGTYPE_BUTTON, DID_CANCEL, MENU_TABSTOP,
mstr_cancel, 214, 150, 58, 15}};
static const MENUPRM res_scr1[] = {
{DLGTYPE_CHECK, DID_LCD, MENU_TABSTOP,
str_lcd, 18, 28, 240, 11},
{DLGTYPE_CHECK, DID_LCDX, MENU_TABSTOP,
str_lcdx, 32, 43, 226, 11},
{DLGTYPE_CHECK, DID_SKIPLINE, MENU_GRAY | MENU_TABSTOP,
str_skipline, 18, 62, 240, 11},
{DLGTYPE_LTEXT, DID_STATIC, MENU_GRAY,
str_skiplght, 32, 77, 32, 11},
{DLGTYPE_SLIDER, DID_SKIPLIGHT, MENU_GRAY |
MSS_BOTH | MENU_TABSTOP,
(void *)SLIDERPOS(0, 255), 66, 77, 112, 11},
{DLGTYPE_RTEXT, DID_LIGHTSTR, MENU_GRAY,
NULL, 186, 77, 20, 11}};
static const MENUPRM res_scr2[] = {
{DLGTYPE_FRAME, DID_STATIC, 0,
str_gdc, 18, 26, 153, 32},
{DLGTYPE_RADIO, DID_GDC7220, MENU_TABSTOP,
str_gdc0, 32, 40, 64, 11},
{DLGTYPE_RADIO, DID_GDC72020, 0,
str_gdc1, 96, 40, 64, 11},
{DLGTYPE_FRAME, DID_STATIC, 0,
str_grcg, 18, 64, 196, 32},
{DLGTYPE_RADIO, DID_GRCGNON, MENU_TABSTOP,
str_grcg0, 32, 78, 44, 11},
{DLGTYPE_RADIO, DID_GRCG, 0,
str_grcg1, 76, 78, 44, 11},
{DLGTYPE_RADIO, DID_GRCG2, 0,
str_grcg2, 120, 78, 48, 11},
{DLGTYPE_RADIO, DID_EGC, 0,
str_grcg3, 168, 78, 40, 11},
{DLGTYPE_CHECK, DID_PC980124, MENU_TABSTOP,
str_pc980124, 28, 104, 224, 11}};
static const MENUPRM res_scr3[] = {
{DLGTYPE_LTEXT, DID_STATIC, 0,
str_tram, 18, 28, 42, 11},
{DLGTYPE_SLIDER, DID_TRAMWAIT, MSS_BOTH | MENU_TABSTOP,
(void *)SLIDERPOS(0, 48), 60, 28, 96, 11},
{DLGTYPE_RTEXT, DID_TRAMSTR, 0,
NULL, 168, 28, 22, 11},
{DLGTYPE_LTEXT, DID_STATIC, 0,
str_clock, 192, 28, 32, 11},
{DLGTYPE_LTEXT, DID_STATIC, 0,
str_vram, 18, 46, 42, 11},
{DLGTYPE_SLIDER, DID_VRAMWAIT, MSS_BOTH | MENU_TABSTOP,
(void *)SLIDERPOS(0, 48), 60, 46, 96, 11},
{DLGTYPE_RTEXT, DID_VRAMSTR, 0,
NULL, 168, 46, 22, 11},
{DLGTYPE_LTEXT, DID_STATIC, 0,
str_clock, 192, 46, 32, 11},
{DLGTYPE_LTEXT, DID_STATIC, 0,
str_grcg1, 18, 64, 42, 11},
{DLGTYPE_SLIDER, DID_GRCGWAIT, MSS_BOTH | MENU_TABSTOP,
(void *)SLIDERPOS(0, 48), 60, 64, 96, 11},
{DLGTYPE_RTEXT, DID_GRCGSTR, 0,
NULL, 168, 64, 22, 11},
{DLGTYPE_LTEXT, DID_STATIC, 0,
str_clock, 192, 64, 32, 11},
{DLGTYPE_LTEXT, DID_STATIC, 0,
str_realpal, 18, 84, 192, 11},
{DLGTYPE_SLIDER, DID_REALPAL, MSS_BOTH | MENU_TABSTOP,
(void *)SLIDERPOS(0, 64), 60, 98, 96, 11},
{DLGTYPE_RTEXT, DID_REALPALSTR, 0,
NULL, 168, 98, 22, 11}};
#else
static const MENUPRM res_scr0[] = {
{DLGTYPE_TABLIST, DID_TAB, 0,
NULL, 7, 6, 379, 196},
{DLGTYPE_BUTTON, DID_OK, MENU_TABSTOP,
mstr_ok, 204, 208, 88, 21},
{DLGTYPE_BUTTON, DID_CANCEL, MENU_TABSTOP,
mstr_cancel, 299, 208, 88, 21}};
static const MENUPRM res_scr1[] = {
{DLGTYPE_CHECK, DID_LCD, MENU_TABSTOP,
str_lcd, 25, 40, 358, 13},
{DLGTYPE_CHECK, DID_LCDX, MENU_TABSTOP,
str_lcdx, 46, 64, 337, 13},
{DLGTYPE_CHECK, DID_SKIPLINE, MENU_TABSTOP,
str_skipline, 25, 88, 358, 13},
{DLGTYPE_LTEXT, DID_STATIC, 0,
str_skiplght, 46, 109, 40, 13},
{DLGTYPE_SLIDER, DID_SKIPLIGHT, MSS_BOTH | MENU_TABSTOP,
(void *)SLIDERPOS(0, 255), 92, 110, 160, 11},
{DLGTYPE_RTEXT, DID_LIGHTSTR, 0,
NULL, 264, 109, 26, 13}};
static const MENUPRM res_scr2[] = {
{DLGTYPE_FRAME, DID_STATIC, 0,
str_gdc, 25, 39, 214, 42},
{DLGTYPE_RADIO, DID_GDC7220, MENU_TABSTOP,
str_gdc0, 47, 58, 90, 13},
{DLGTYPE_RADIO, DID_GDC72020, 0,
str_gdc1, 138, 58, 90, 13},
{DLGTYPE_FRAME, DID_STATIC, 0,
str_grcg, 25, 90, 273, 42},
{DLGTYPE_RADIO, DID_GRCGNON, MENU_TABSTOP,
str_grcg0, 47, 109, 60, 13},
{DLGTYPE_RADIO, DID_GRCG, 0,
str_grcg1, 107, 109, 60, 13},
{DLGTYPE_RADIO, DID_GRCG2, 0,
str_grcg2, 167, 109, 69, 13},
{DLGTYPE_RADIO, DID_EGC, 0,
str_grcg3, 236, 109, 60, 13},
{DLGTYPE_CHECK, DID_PC980124, MENU_TABSTOP,
str_pc980124, 39, 148, 224, 13}};
static const MENUPRM res_scr3[] = {
{DLGTYPE_LTEXT, DID_STATIC, 0,
str_tram, 24, 41, 60, 13},
{DLGTYPE_SLIDER, DID_TRAMWAIT, MSS_BOTH | MENU_TABSTOP,
(void *)SLIDERPOS(0, 48), 86, 42, 130, 11},
{DLGTYPE_RTEXT, DID_TRAMSTR, 0,
NULL, 234, 41, 28, 13},
{DLGTYPE_LTEXT, DID_STATIC, 0,
str_clock, 268, 41, 48, 13},
{DLGTYPE_LTEXT, DID_STATIC, 0,
str_vram, 24, 65, 60, 13},
{DLGTYPE_SLIDER, DID_VRAMWAIT, MSS_BOTH | MENU_TABSTOP,
(void *)SLIDERPOS(0, 48), 86, 66, 130, 11},
{DLGTYPE_RTEXT, DID_VRAMSTR, 0,
NULL, 234, 65, 28, 13},
{DLGTYPE_LTEXT, DID_STATIC, 0,
str_clock, 268, 65, 48, 13},
{DLGTYPE_LTEXT, DID_STATIC, 0,
str_grcg1, 24, 89, 60, 13},
{DLGTYPE_SLIDER, DID_GRCGWAIT, MSS_BOTH | MENU_TABSTOP,
(void *)SLIDERPOS(0, 48), 86, 90, 130, 11},
{DLGTYPE_RTEXT, DID_GRCGSTR, 0,
NULL, 234, 89, 28, 13},
{DLGTYPE_LTEXT, DID_STATIC, 0,
str_clock, 268, 89, 48, 13},
{DLGTYPE_LTEXT, DID_STATIC, 0,
str_realpal, 24, 116, 224, 13},
{DLGTYPE_SLIDER, DID_REALPAL, MSS_BOTH | MENU_TABSTOP,
(void *)SLIDERPOS(0, 64), 86, 137, 130, 11},
{DLGTYPE_RTEXT, DID_REALPALSTR, 0,
NULL, 234, 136, 28, 13}};
#endif
typedef struct {
const OEMCHAR *tab;
const MENUPRM *prm;
UINT count;
} TABLISTS;
static const MENUID gdcchip[4] = {DID_GRCGNON, DID_GRCG, DID_GRCG2, DID_EGC};
static const TABLISTS tablist[] = {
{str_video, res_scr1, NELEMENTS(res_scr1)},
{str_chip, res_scr2, NELEMENTS(res_scr2)},
{str_timing,res_scr3, NELEMENTS(res_scr3)},
};
static void setpage(UINT page) {
UINT i;
for (i=0; i<NELEMENTS(tablist); i++) {
menudlg_disppagehidden((MENUID)(i + 1), (i != page));
}
}
static void setintstr(MENUID id, int val) {
OEMCHAR buf[64];
OEMSNPRINTF(buf, sizeof(buf), str_d, val);
menudlg_settext(id, buf);
}
static void dlginit(void) {
UINT i;
const TABLISTS *tl;
menudlg_appends(res_scr0, NELEMENTS(res_scr0));
tl = tablist;
for (i=0; i<NELEMENTS(tablist); i++, tl++) {
menudlg_setpage((MENUID)(i + 1));
menudlg_itemappend(DID_TAB, (OEMCHAR *)tl->tab);
menudlg_appends(tl->prm, tl->count);
}
menudlg_setval(DID_LCD, np2cfg.LCD_MODE & 1);
menudlg_setenable(DID_LCDX, np2cfg.LCD_MODE & 1);
menudlg_setval(DID_LCDX, np2cfg.LCD_MODE & 2);
menudlg_setval(DID_SKIPLINE, np2cfg.skipline);
menudlg_setval(DID_SKIPLIGHT, np2cfg.skiplight);
setintstr(DID_LIGHTSTR, np2cfg.skiplight);
if (!np2cfg.uPD72020) {
menudlg_setval(DID_GDC7220, TRUE);
}
else {
menudlg_setval(DID_GDC72020, TRUE);
}
menudlg_setval(gdcchip[np2cfg.grcg & 3], TRUE);
menudlg_setval(DID_PC980124, np2cfg.color16);
menudlg_setval(DID_TRAMWAIT, np2cfg.wait[0]);
setintstr(DID_TRAMSTR, np2cfg.wait[0]);
menudlg_setval(DID_VRAMWAIT, np2cfg.wait[2]);
setintstr(DID_VRAMSTR, np2cfg.wait[2]);
menudlg_setval(DID_GRCGWAIT, np2cfg.wait[4]);
setintstr(DID_GRCGSTR, np2cfg.wait[4]);
menudlg_setval(DID_REALPAL, np2cfg.realpal);
setintstr(DID_REALPALSTR, np2cfg.realpal - 32);
menudlg_setval(DID_TAB, 0);
setpage(0);
}
static void dlgupdate(void) {
UINT update;
BOOL renewal;
UINT val;
UINT8 value[6];
update = 0;
renewal = FALSE;
val = menudlg_getval(DID_SKIPLINE);
if (np2cfg.skipline != (UINT8)val) {
np2cfg.skipline = (UINT8)val;
renewal = TRUE;
}
val = menudlg_getval(DID_SKIPLIGHT);
if (val > 255) {
val = 255;
}
if (np2cfg.skiplight != (UINT16)val) {
np2cfg.skiplight = (UINT16)val;
renewal = TRUE;
}
if (renewal) {
pal_makeskiptable();
}
val = menudlg_getval(DID_LCD) + (menudlg_getval(DID_LCDX) << 1);
if (np2cfg.LCD_MODE != (UINT8)val) {
np2cfg.LCD_MODE = (UINT8)val;
pal_makelcdpal();
renewal = TRUE;
}
if (renewal) {
scrndraw_redraw();
update |= SYS_UPDATECFG;
}
val = menudlg_getval(DID_GDC72020);
if (np2cfg.uPD72020 != (UINT8)val) {
np2cfg.uPD72020 = (UINT8)val;
update |= SYS_UPDATECFG;
gdc_restorekacmode();
gdcs.grphdisp |= GDCSCRN_ALLDRAW2;
}
for (val=0; (val<3) && (!menudlg_getval(gdcchip[val])); val++) { }
if (np2cfg.grcg != (UINT8)val) {
np2cfg.grcg = (UINT8)val;
update |= SYS_UPDATECFG;
gdcs.grphdisp |= GDCSCRN_ALLDRAW2;
}
val = menudlg_getval(DID_PC980124);
if (np2cfg.color16 != (UINT8)val) {
np2cfg.color16 = (UINT8)val;
update |= SYS_UPDATECFG;
}
ZeroMemory(value, sizeof(value));
value[0] = (UINT8)menudlg_getval(DID_TRAMWAIT);
if (value[0]) {
value[1] = 1;
}
value[2] = (UINT8)menudlg_getval(DID_VRAMWAIT);
if (value[2]) {
value[3] = 1;
}
value[4] = (UINT8)menudlg_getval(DID_GRCGWAIT);
if (value[4]) {
value[5] = 1;
}
for (val=0; val<6; val++) {
if (np2cfg.wait[val] != value[val]) {
np2cfg.wait[val] = value[val];
update |= SYS_UPDATECFG;
}
}
val = menudlg_getval(DID_REALPAL);
if (np2cfg.realpal != (UINT8)val) {
np2cfg.realpal = (UINT8)val;
update |= SYS_UPDATECFG;
}
sysmng_update(update);
}
int dlgscr_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_TAB:
setpage(menudlg_getval(DID_TAB));
break;
case DID_LCD:
menudlg_setenable(DID_LCDX, menudlg_getval(DID_LCD));
break;
case DID_SKIPLIGHT:
setintstr(DID_LIGHTSTR, menudlg_getval(DID_SKIPLIGHT));
break;
case DID_TRAMWAIT:
setintstr(DID_TRAMSTR, menudlg_getval(DID_TRAMWAIT));
break;
case DID_VRAMWAIT:
setintstr(DID_VRAMSTR, menudlg_getval(DID_VRAMWAIT));
break;
case DID_GRCGWAIT:
setintstr(DID_GRCGSTR, menudlg_getval(DID_GRCGWAIT));
break;
case DID_REALPAL:
setintstr(DID_REALPALSTR,
menudlg_getval(DID_REALPAL) - 32);
break;
}
break;
case DLGMSG_CLOSE:
menubase_close();
break;
}
(void)param;
return(0);
}