From 3536d6e4b4c6adcfc88bcc6b9db89fe160067cc9 Mon Sep 17 00:00:00 2001 From: sorgelig Date: Fri, 29 Dec 2017 18:06:06 +0800 Subject: [PATCH] Stereo mix for Minimig. --- boot.c | 1 + config.c | 1 + config.h | 2 +- menu.c | 27 ++++++++++++++++++--------- osd.c | 5 +++++ osd.h | 2 ++ 6 files changed, 28 insertions(+), 10 deletions(-) diff --git a/boot.c b/boot.c index a5153da..ea4e7d5 100644 --- a/boot.c +++ b/boot.c @@ -435,6 +435,7 @@ void BootInit() //default video config till real config loaded. ConfigVideo(0,0, 0x40); + ConfigAudio(0); WaitTimer(100); diff --git a/config.c b/config.c index aad933a..95e6d35 100644 --- a/config.c +++ b/config.c @@ -443,6 +443,7 @@ void ApplyConfiguration(char reloadkickstart) } ConfigVideo(config.filter.hires, config.filter.lores, config.scanlines); + ConfigAudio(config.audio); ConfigAutofire(config.autofire, 0xC); } diff --git a/config.h b/config.h index d7c0e69..46e523f 100644 --- a/config.h +++ b/config.h @@ -31,7 +31,7 @@ typedef struct unsigned char disable_ar3; unsigned char enable_ide; unsigned char scanlines; - unsigned char pad1; + unsigned char audio; hardfileTYPE hardfile[2]; unsigned char cpu; unsigned char autofire; diff --git a/menu.c b/menu.c index f2b04a6..6a43643 100644 --- a/menu.c +++ b/menu.c @@ -173,6 +173,7 @@ const char *config_cd32pad_msg[] = { "OFF", "ON" }; char *config_button_turbo_msg[] = { "OFF", "FAST", "MEDIUM", "SLOW" }; char *config_button_turbo_choice_msg[] = { "A only", "B only", "A & B" }; char *joy_button_map[] = { "RIGHT", "LEFT", "DOWN", "UP", "BUTTON 1", "BUTTON 2", "BUTTON 3", "BUTTON 4", "KBD TOGGLE", "BUTTON OSD" }; +const char *config_stereo_msg[] = { "0%", "25%", "50%", "100%" }; char joy_bnames[12][32]; int joy_bcount = 0; @@ -1867,14 +1868,14 @@ void HandleUI(void) OsdWrite(5, s, menusub == 4, 0); OsdWrite(6, "", 0, 0); - OsdWrite(7, " Hard disk settings \x16", menusub == 5, 0); - OsdWrite(8, " chipset settings \x16", menusub == 6, 0); - OsdWrite(9, " memory settings \x16", menusub == 7, 0); - OsdWrite(10, " video settings \x16", menusub == 8, 0); + OsdWrite(7, " Hard disk", menusub == 5, 0); + OsdWrite(8, " Chipset", menusub == 6, 0); + OsdWrite(9, " Memory", menusub == 7, 0); + OsdWrite(10, " Audio & Video", menusub == 8, 0); OsdWrite(11, "", 0, 0); - OsdWrite(12, " save configuration", menusub == 9, 0); - OsdWrite(13, " load configuration", menusub == 10, 0); + OsdWrite(12, " Save configuration", menusub == 9, 0); + OsdWrite(13, " Load configuration", menusub == 10, 0); OsdWrite(14, "", 0, 0); OsdWrite(15, STD_EXIT, menusub == 11, 0); @@ -2795,7 +2796,7 @@ void HandleUI(void) /* video settings menu */ /******************************************************************/ case MENU_SETTINGS_VIDEO1: - menumask = 0xf; + menumask = 0x1f; parentstate = menustate; helptext = 0; // helptexts[HELPTEXT_VIDEO]; @@ -2812,9 +2813,11 @@ void HandleUI(void) strcat(s, config_ar_msg[(config.scanlines >> 4) & 1]); OsdWrite(4, s, menusub == 2, 0); OsdWrite(5, "", 0, 0); - OsdWrite(6, "", 0, 0); + strcpy(s, " Stereo mix : "); + strcat(s, config_stereo_msg[config.audio & 3]); + OsdWrite(6, s, menusub == 3, 0); for (int i = 7; i < OsdGetSize() - 1; i++) OsdWrite(i, "", 0, 0); - OsdWrite(OsdGetSize() - 1, STD_EXIT, menusub == 3, 0); + OsdWrite(OsdGetSize() - 1, STD_EXIT, menusub == 4, 0); menustate = MENU_SETTINGS_VIDEO2; break; @@ -2845,6 +2848,12 @@ void HandleUI(void) ConfigVideo(config.filter.hires, config.filter.lores, config.scanlines); } else if (menusub == 3) + { + config.audio = (config.audio + 1) & 3; + menustate = MENU_SETTINGS_VIDEO1; + ConfigAudio(config.audio); + } + else if (menusub == 4) { menustate = MENU_MAIN1; menusub = 8; diff --git a/osd.c b/osd.c index 631886b..a16219f 100644 --- a/osd.c +++ b/osd.c @@ -506,6 +506,11 @@ void ConfigVideo(unsigned char hires, unsigned char lores, unsigned char scanlin spi_osd_cmd16(OSD_CMD_VID, (((scanlines >> 6) & 0x03) << 10) | (((scanlines >> 4) & 0x03) << 8) | (((scanlines >> 2) & 0x03) << 6) | ((hires & 0x03) << 4) | ((lores & 0x03) << 2) | (scanlines & 0x03)); } +void ConfigAudio(unsigned char audio) +{ + spi_osd_cmd8(OSD_CMD_AUD, audio); +} + void ConfigMemory(unsigned char memory) { spi_osd_cmd8(OSD_CMD_MEM, memory); diff --git a/osd.h b/osd.h index 15a28f1..03fff67 100644 --- a/osd.h +++ b/osd.h @@ -40,6 +40,7 @@ #define OSD_CMD_FLP 0x44 #define OSD_CMD_HDD 0x54 #define OSD_CMD_JOY 0x64 +#define OSD_CMD_AUD 0x74 #define OSD_CMD_OSD_WR 0x0c #define OSD_CMD_WR 0x1c #define OSD_CMD_VERSION 0x88 @@ -78,6 +79,7 @@ void OsdReconfig(); // Reset to Chameleon core. void MM1_ConfigFilter(unsigned char lores, unsigned char hires); void MM1_ConfigScanlines(unsigned char scanlines); void ConfigVideo(unsigned char hires, unsigned char lores, unsigned char scanlines); +void ConfigAudio(unsigned char audio); void ConfigMemory(unsigned char memory); void ConfigCPU(unsigned char cpu); void ConfigChipset(unsigned char chipset);