diff --git a/menu.cpp b/menu.cpp index 41a4451..c9be1ba 100644 --- a/menu.cpp +++ b/menu.cpp @@ -1323,7 +1323,7 @@ void HandleUI(void) else if (left) { menustate = MENU_8BIT_INFO; - menusub = 1; + menusub = 2; } break; @@ -1866,7 +1866,7 @@ void HandleUI(void) else if (left && !page) { menustate = MENU_8BIT_INFO; - menusub = 1; + menusub = 2; } break; @@ -2557,7 +2557,7 @@ void HandleUI(void) case MENU_8BIT_INFO: OsdSetSize(16); helptext = 0; - menumask = 3; + menumask = 7; menustate = MENU_8BIT_INFO2; OsdSetTitle("System", OSD_ARROW_RIGHT); @@ -2566,8 +2566,18 @@ void HandleUI(void) OsdWrite(3, " Information"); + m = get_core_volume(); + { + strcpy(s, " Core Volume: "); + memset(s + strlen(s), 0, 10); + char *bar = s + strlen(s); + memset(bar, 0x8C, 8); + memset(bar, 0x7f, 8 - m); + } + OsdWrite(12, s, menusub == 0); + m = get_volume(); - strcpy(s, " Volume: "); + strcpy(s, " Global Volume: "); if (m & 0x10) { strcat(s, "< Mute >"); @@ -2576,22 +2586,28 @@ void HandleUI(void) { memset(s+strlen(s), 0, 10); char *bar = s + strlen(s); - memset(bar, 0x8C, 8); - memset(bar, 0x7f, 8 - m); + int vol = get_core_volume(); + memset(bar, 0x8C, 8 - vol); + memset(bar, 0x7f, 8 - vol - m); } + OsdWrite(13, s, menusub == 1); - OsdWrite(13, s, menusub == 0); - OsdWrite(15, STD_EXIT, menusub == 1, 0, OSD_ARROW_RIGHT); + OsdWrite(15, STD_EXIT, menusub == 2, 0, OSD_ARROW_RIGHT); break; case MENU_8BIT_INFO2: printSysInfo(); - if ((select && menusub == 1) || menu) + if ((select && menusub == 2) || menu) { menustate = MENU_NONE1; break; } - else if(menusub == 0 && (right || left || select)) + else if(menusub == 0 && (right || left)) + { + set_core_volume(right ? 1 : -1); + menustate = MENU_8BIT_INFO; + } + else if (menusub == 1 && (right || left || select)) { set_volume(right ? 1 : left ? -1 : 0); menustate = MENU_8BIT_INFO; @@ -3055,7 +3071,7 @@ void HandleUI(void) else if (left) { menustate = MENU_8BIT_INFO; - menusub = 1; + menusub = 2; } else if (select) { @@ -3616,7 +3632,7 @@ void HandleUI(void) else if (left) { menustate = MENU_8BIT_INFO; - menusub = 1; + menusub = 2; } break; diff --git a/user_io.cpp b/user_io.cpp index e036269..9435578 100644 --- a/user_io.cpp +++ b/user_io.cpp @@ -39,6 +39,7 @@ static char core_path[1024] = {}; static char rbf_path[1024] = {}; static uint8_t vol_att = 0; +static uint8_t corevol_att = 0; unsigned long vol_set_timeout = 0; static fileTYPE sd_image[4] = {}; @@ -765,9 +766,16 @@ void user_io_init(const char *path, const char *xml) video_mode_load(); if(strlen(cfg.font)) LoadFont(cfg.font); + FileLoadConfig("Volume.dat", &vol_att, 1); - vol_att &= 0x1F; - spi_uio_cmd8(UIO_AUDVOL, vol_att); + if (!is_menu()) + { + static char cfg_name[128]; + sprintf(cfg_name, "%s_volume.cfg", user_io_get_core_name_ex()); + FileLoadConfig(cfg_name, &corevol_att, 1); + } + send_volume(); + user_io_send_buttons(1); switch (core_type) @@ -2661,6 +2669,10 @@ void user_io_poll() { vol_set_timeout = 0; FileSaveConfig("Volume.dat", &vol_att, 1); + + static char cfg_name[128]; + sprintf(cfg_name, "%s_volume.cfg", user_io_get_core_name_ex()); + FileSaveConfig(cfg_name, &corevol_att, 1); } if (diskled_is_on && CheckTimer(diskled_timer)) @@ -2946,11 +2958,26 @@ void user_io_osd_key_enable(char on) input_switch(-1); } +void send_volume() +{ + get_volume(); + get_core_volume(); + if (!(vol_att & 0x10) && vol_att + corevol_att > 7) vol_att = 7 - corevol_att; + spi_uio_cmd8(UIO_AUDVOL, vol_att + corevol_att); +} + int get_volume() { return vol_att & 0x17; } +int get_core_volume() +{ + corevol_att &= 7; + if (corevol_att > 6) corevol_att = 6; + return corevol_att; +} + void set_volume(int cmd) { vol_set_timeout = GetTimer(1000); @@ -2961,7 +2988,7 @@ void set_volume(int cmd) else if (cmd < 0 && vol_att < 7) vol_att += 1; else if (cmd > 0 && vol_att > 0) vol_att -= 1; - spi_uio_cmd8(UIO_AUDVOL, vol_att); + send_volume(); if (vol_att & 0x10) { @@ -2974,12 +3001,25 @@ void set_volume(int cmd) sprintf(str, "\x8d "); char *bar = str + strlen(str); - memset(bar, 0x8C, 8); - memset(bar, 0x7f, 8 - vol_att); + + int vol = get_core_volume(); + memset(bar, 0x8C, 8 - vol); + memset(bar, 0x7f, 8 - vol - vol_att); Info(str, 1000); } } +void set_core_volume(int cmd) +{ + vol_set_timeout = GetTimer(1000); + + corevol_att &= 7; + if (cmd < 0 && corevol_att < 6) corevol_att += 1; + if (cmd > 0 && corevol_att > 0) corevol_att -= 1; + + send_volume(); +} + void user_io_kbd(uint16_t key, int press) { if(is_menu()) spi_uio_cmd(UIO_KEYBOARD); //ping the Menu core to wakeup diff --git a/user_io.h b/user_io.h index 0cc11e4..b9a6c2d 100644 --- a/user_io.h +++ b/user_io.h @@ -249,6 +249,9 @@ void SetMidiLinkMode(int mode); void set_volume(int cmd); int get_volume(); +int get_core_volume(); +void set_core_volume(int cmd); +void send_volume(); void user_io_store_filename(char *filename); int user_io_use_cheats();