1
0
mirror of https://github.com/mist-devel/mist-firmware.git synced 2026-01-11 23:43:04 +00:00

[FIRMWARE] 8-Bit OSD improvements

- new Joystick test screen (Joy 1 only for now)
- new About screen (copied from Minimig)
- new logo for MiST (replacing Minimig log)
- added help scroll text on various screens
- minor fixes to joy->key mapping
This commit is contained in:
Newsdee 2016-05-30 23:30:02 +08:00
parent d4b14009de
commit d892cdb569
8 changed files with 518 additions and 204 deletions

71
logo.h
View File

@ -1,8 +1,72 @@
#ifndef LOGO_H
#define LOGO_H
const unsigned char logodata[5][227] = {
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
{0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,
0x00,0x80,0xE0,0xE0,0xF0,0xF0,0xF8,0xF8,0xF8,0xFC,0xFC,0xFC,0xFC,0xF8,0xF8,0xF8,0xF0,0xF0,0xE0,
0xE0,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x40,
0x40,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,
0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x40,
0x40,0x41,0xC3,0xC7,0xC7,0xCF,0xCF,0xCF,0xCF,0xDF,0xDF,0xDF,0xDF,0xCF,0xCF,0xCF,0xCF,0xC7,0xC7,
0x43,0x41,0x40,0x40,0x40,0x40,0x00,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0xC0,
0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,
0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
0xC0,0xE0,0xF8,0x3E,0x1F,0x0F,0x07,0x1F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xF8,
0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0x60,0x70,
0x30,0x38,0x1C,0x1C,0x8C,0xF6,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x1F,
0x0F,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
0xE0,0xF0,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x0F,0x07,0x03,0x01,0x00,0x00,
0x00,0x00,0x00,0x7E,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xE7,
0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x83,0x83,0x83,0x83,0x83,0x87,0x07,0x07,0x07,0x00,0x00,0x07,
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xF0,0xFC,0x3E,0x1F,
0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFE,0x70,0x60,0x30,0x38,0x38,0x1C,0x0C,0x0E,0x07,0x07,0x03,0x01,0x01,0x00,0x80,0xE0,
0xF0,0xF8,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x0F,0x07,0x03,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0xF8,0xFC,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x1F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xC0,0xC1,0xC1,0xC3,0xC3,0xC3,0xC3,0xC7,0xC7,0xC7,0x87,0x87,0x8F,0x8F,0x8F,
0xCF,0xDF,0xDF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFC,0x70,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x0C,0x0C,0x0C,0x0E,0x0F,0x0F,0x0F,0x0F,0x0C,0x0C,0x08,
0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x0F,0x07,0x07,0x03,0x03,
0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x0C,0x0C,0x0C,0x0E,0x0F,0x0F,
0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0D,0x0C,0x08,0x08,0x08,0x08,0x08,0x00,0x00,
0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x0C,0x0C,0x0C,0x0E,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0C,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x07,0x07,0x07,0x03,0x03,0x03,0x03,0x01,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
};
#endif
/* -- original MINIMIG logo, we keep only one to save some space on the firmware binary
const unsigned char logodata_minimig[5][227] = {
{0xFF, 0x00, 0x80, 0xc0, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@ -76,5 +140,4 @@ const unsigned char logodata[5][227] = {
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18}
};
#endif
};*/

224
menu.c
View File

@ -24,6 +24,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#include "AT91SAM7S256.h"
//#include "stdbool.h"
#include <stdlib.h>
#include "stdio.h"
#include "string.h"
#include "errors.h"
@ -43,6 +44,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "debug.h"
#include "boot.h"
#include "archie.h"
#include "usb/joymapping.h"
// test features
#define ALLOW_TEST_MENU 1 //remove to disable in prod version
// other constants
#define DIRSIZE 8 // number of items in directory display window
@ -99,7 +105,7 @@ const char *config_cd32pad_msg[] = {"OFF", "ON"};
enum HelpText_Message {HELPTEXT_NONE,HELPTEXT_MAIN,HELPTEXT_HARDFILE,HELPTEXT_CHIPSET,HELPTEXT_MEMORY,HELPTEXT_VIDEO};
const char *helptexts[]={
0,
" Welcome to Minimig! Use the cursor keys to navigate the menus. Use space bar or enter to select an item. Press Esc or F12 to exit the menus. Joystick emulation on the numeric keypad can be toggled with the numlock key, while pressing Ctrl-Alt-0 (numeric keypad) toggles autofire mode.",
" Welcome to MiST! Use the cursor keys to navigate the menus. Use space bar or enter to select an item. Press Esc or F12 to exit the menus. Joystick emulation on the numeric keypad can be toggled with the numlock key, while pressing Ctrl-Alt-0 (numeric keypad) toggles autofire mode.",
" Minimig can emulate an A600 IDE harddisk interface. The emulation can make use of Minimig-style hardfiles (complete disk images) or UAE-style hardfiles (filesystem images with no partition table). It is also possible to use either the entire SD card or an individual partition as an emulated harddisk.",
" Minimig's processor core can emulate a 68000 or 68020 processor (though the 68020 mode is still experimental.) If you're running software built for 68000, there's no advantage to using the 68020 mode, since the 68000 emulation runs just as fast.",
" Minimig can make use of up to 2 megabytes of Chip RAM, up to 1.5 megabytes of Slow RAM (A500 Trapdoor RAM), and up to 24 megabytes of true Fast RAM. To use the HRTmon feature you will need a file on the SD card named hrtmon.rom.",
@ -204,6 +210,11 @@ static void substrcpy(char *d, char *s, char idx) {
}
#define STD_EXIT " exit"
#define JOY_NO_INPUT " \x14" // center of joystick arrows
#define JOY_VID "VID:"
#define JOY_PID "PID:"
#define HELPTEXT_DELAY 10000
#define FRAME_DELAY 150
@ -220,6 +231,44 @@ void HandleUI(void)
static const char *helptext;
static char helpstate=0;
/* check joystick status */
char joy_0 = 0;
char joy_string[16];
char joy_string2[32];
char joy_string3[16];
/* build USB id key */
unsigned int usb_vid = OsdUsbVidGet();
unsigned int usb_pid = OsdUsbPidGet();
char vid[5] = " ";
char pid[5] = " ";
char usb_id[64];
memset(usb_id, '\0', sizeof(usb_id));
strcpy(usb_id, " ");
if (usb_vid>0) {
itoa(usb_vid, vid, 16);
itoa(usb_pid, pid, 16);
if(strlen(vid)<4) {
for(i=5;i>0;i--) {
vid[i]=vid[i-1];
}
vid[0]='0';
}
if(strlen(pid)<4) {
for(i=5;i>0;i--) {
pid[i]=pid[i-1];
}
pid[0]='0';
}
strcat( usb_id, JOY_VID);
strcat( usb_id, vid);
strcat( usb_id, " ");
strcat( usb_id, JOY_PID);
strcat( usb_id, pid);
} else {
strcat(usb_id, "Atari DB9 Joystick");
}
// get user control codes
c = OsdGetCtrl();
@ -277,10 +326,10 @@ void HandleUI(void)
case KEY_SPACE :
select = true;
break;
case KEY_UP :
case KEY_UP:
up = true;
break;
case KEY_DOWN :
case KEY_DOWN:
down = true;
break;
case KEY_LEFT :
@ -466,7 +515,7 @@ void HandleUI(void)
case MENU_8BIT_MAIN1: {
char entry=0;
helptext=helptexts[HELPTEXT_MAIN];
menumask=0;
p = user_io_get_core_name();
if(!p[0]) OsdSetTitle("8BIT", OSD_ARROW_RIGHT);
@ -543,12 +592,16 @@ void HandleUI(void)
} while(p);
// clear rest of OSD
for(;entry<8;entry++)
for(;entry<7;entry++)
OsdWrite(entry, "", 0,0);
// exit row
OsdWrite(7, STD_EXIT, menusub == entry, 0);
menustate = MENU_8BIT_MAIN2;
parentstate=MENU_8BIT_MAIN1;
} break;
} break; // end MENU_8BIT_MAIN1
case MENU_8BIT_MAIN2 :
// menu key closes menu
@ -596,8 +649,7 @@ void HandleUI(void)
}
}
}
else if (right)
{
else if (right) {
menustate = MENU_8BIT_SYSTEM1;
menusub = 0;
}
@ -618,19 +670,19 @@ void HandleUI(void)
break;
case MENU_8BIT_SYSTEM1:
menumask=3;
helptext=helptexts[HELPTEXT_MAIN];
menumask=0x1f; // 4 selections + Exit
OsdSetTitle("System", OSD_ARROW_LEFT);
menustate = MENU_8BIT_SYSTEM2;
parentstate=MENU_8BIT_SYSTEM1;
parentstate = MENU_8BIT_SYSTEM1;
OsdWrite(0, "", 0,0);
OsdWrite(1, " Firmware & Core \x16", menusub == 0,0);
OsdWrite(2, "", 0,0);
OsdWrite(3, " Save settings", menusub == 1,0);
OsdWrite(2, " Joystick Test \x16", menusub == 1,0);
OsdWrite(3, " Save settings", menusub == 2,0);
OsdWrite(4, "", 0,0);
OsdWrite(5, "", 0,0);
OsdWrite(5, " About", menusub == 3,0);
OsdWrite(6, "", 0,0);
OsdWrite(7, "", 0,0);
OsdWrite(7, STD_EXIT, menusub == 4, 0);
break;
case MENU_8BIT_SYSTEM2 :
@ -641,9 +693,11 @@ void HandleUI(void)
if(menusub == 0) { // Firmware submenu
menustate = MENU_FIRMWARE1;
menusub = 1;
} else if(menusub == 1) {
menustate = MENU_8BIT_TEST1;
menusub = 0;
}
else if(menusub == 1) { // Save settings
if(menusub == 2) { // Save settings
user_io_create_config_name(s);
iprintf("Saving config to %s\n", s);
@ -651,16 +705,148 @@ void HandleUI(void)
// finally write data
sector_buffer[0] = user_io_8bit_set_status(0,0);
FileWrite(&file, sector_buffer);
iprintf("Settings for %s written\n", s);
}
}
if (menusub == 3) {
menustate = MENU_8BIT_ABOUT1; // About logo
menusub = 0;
}
else if (left)
if (menusub == 4) // Exit
{
menustate=MENU_NONE1;
menusub = 0;
}
}
else {
if (left)
{
menustate = MENU_8BIT_MAIN1;
menusub = 0;
}
}
break;
case MENU_8BIT_ABOUT1:
menumask=0;
helptext = helptexts[HELPTEXT_NONE];
OsdSetTitle("About", 0);
menustate = MENU_8BIT_ABOUT2;
parentstate=MENU_8BIT_ABOUT1;
OsdDrawLogo(0,0,1);
OsdDrawLogo(1,1,1);
OsdDrawLogo(2,2,1);
OsdDrawLogo(3,3,1);
OsdDrawLogo(4,4,1);
OsdDrawLogo(6,6,1);
OsdWrite(5, "", 0, 0);
OsdWrite(6, "", 0, 0);
OsdWrite(7, STD_EXIT, menusub==0, 0);
StarsInit();
ScrollReset();
break;
case MENU_8BIT_ABOUT2:
StarsUpdate();
OsdDrawLogo(0,0,1);
OsdDrawLogo(1,1,1);
OsdDrawLogo(2,2,1);
OsdDrawLogo(3,3,1);
OsdDrawLogo(4,4,1);
OsdDrawLogo(6,6,1);
ScrollText(5," MiST by Till Harbaum, based on Minimig and other projects. MiST hardware and software is distributed under the terms of the GNU General Public License version 3. MiST FPGA cores are the work of their respective authors under individual licensing.",0,0,0);
// menu key closes menu
if (menu)
menustate = MENU_NONE1;
if(select) {
//iprintf("Selected", 0);
if (menusub==0) {
menustate = MENU_8BIT_SYSTEM1;
menusub = 0;
}
}
else {
if (left)
{
menustate = MENU_8BIT_SYSTEM1;
menusub = 0;
}
}
break;
case MENU_8BIT_TEST1:
helptext = helptexts[HELPTEXT_NONE];
menumask=1;
OsdSetTitle("Joy1", 0);
menustate = MENU_8BIT_TEST2;
parentstate=MENU_8BIT_TEST1;
OsdWrite(0, " Test Joystick 1", 0, 0);
OsdWrite(1, usb_id, 0, 0);
OsdWrite(2, "", 0, 0);
OsdWrite(3, "", 0, 0);
OsdWrite(4, "", 0, 0);
OsdWrite(5, "", 0, 0);
OsdWrite(6, " ", 0, 0);
OsdWrite(7, " SPACE to exit", menusub==0, 0);
break;
case MENU_8BIT_TEST2:
memset(joy_string, '\0', sizeof(joy_string));
memset(joy_string2, '\0', sizeof(joy_string2));
memset(joy_string3, '\0', sizeof(joy_string3));
joy_0 = OsdJoyGet();
strcat(joy_string, " ");
strcat(joy_string2, " " );
strcat(joy_string3, " " );
if(joy_0 & JOY_UP) strcat(joy_string, "\x12");
if(joy_0 & JOY_DOWN) strcat(joy_string3, "\x13");
if(joy_0 & JOY_LEFT)
strcat(joy_string2, "< \x14 ");
else
strcat(joy_string2, " \x14 ");
if(joy_0 & JOY_RIGHT)
strcat(joy_string2, "> "); //"\x16 ");
else
strcat(joy_string2, " ");
if(joy_0 & JOY_A) strcat(joy_string2, "A ");
else strcat(joy_string2, " ");
if(joy_0 & JOY_B) strcat(joy_string2, "B ");
else strcat(joy_string2, " ");
if(joy_0 & JOY_SELECT) strcat(joy_string2, "Sel ");
else strcat(joy_string2, " ");
if(joy_0 & JOY_START) strcat(joy_string2, "Sta");
OsdWrite(1, usb_id, 0, 0);
if (joy_0!=0) {
OsdWrite(3, joy_string, 0, 0);
OsdWrite(4, joy_string2, 0, 0);
OsdWrite(5, joy_string3, 0, 0);
} else {
OsdWrite(3, "", 0, 0);
OsdWrite(4, JOY_NO_INPUT, 0, 0);
OsdWrite(5, "", 0, 0);
}
// Disallow to allow testing output
//if (menu)
// menustate = MENU_NONE1;
/*
if(select) {
//iprintf("Selected", 0);
if (menusub==1) {
menustate = MENU_8BIT_SYSTEM1;
menusub = 0;
}
}*/
if(c==KEY_SPACE) {
menustate = MENU_8BIT_SYSTEM1;
menusub = 0;
}
//}
break;
/******************************************************************/

4
menu.h
View File

@ -97,6 +97,10 @@ enum MENU
MENU_8BIT_MAIN_IMAGE_SELECTED,
MENU_8BIT_SYSTEM1,
MENU_8BIT_SYSTEM2,
MENU_8BIT_ABOUT1,
MENU_8BIT_ABOUT2,
MENU_8BIT_TEST1,
MENU_8BIT_TEST2
};
// UI strings, used by boot messages

28
osd.c
View File

@ -719,3 +719,31 @@ void OsdKeySet(unsigned char c) {
unsigned char OsdKeyGet() {
return osd_key;
}
/* latest joystick state */
static unsigned char osd_joy;
void OsdJoySet(unsigned char c) {
//iprintf("OSD joy: %x\n", c);
osd_joy = c;
}
unsigned char OsdJoyGet() {
return osd_joy;
}
/* connected HID information */
static unsigned int usb_vid;
static unsigned int usb_pid;
void OsdUsbIdSet(unsigned int vid, unsigned int pid) {
usb_vid=vid;
usb_pid=pid;
}
unsigned int OsdUsbVidGet() {
return usb_vid;
}
unsigned int OsdUsbPidGet() {
return usb_pid;
}

7
osd.h
View File

@ -130,5 +130,12 @@ void StarsUpdate();
void OsdKeySet(unsigned char);
unsigned char OsdKeyGet();
void OsdJoySet(unsigned char);
unsigned char OsdJoyGet();
void OsdUsbIdSet(unsigned int vid, unsigned int pid);
unsigned int OsdUsbVidGet();
unsigned int OsdUsbPidGet();
#endif

View File

@ -11,6 +11,7 @@
#include "../user_io.h"
#include "../hardware.h"
#include "../mist_cfg.h"
#include "../osd.h"
static unsigned char kbd_led_state = 0; // default: all leds off
static unsigned char joysticks = 0; // number of detected usb joysticks
@ -732,6 +733,11 @@ static void usb_process_iface (usb_hid_iface_info_t *iface,
if(a[1] > JOYSTICK_AXIS_TRIGGER_MAX) jmap |= JOY_DOWN;
jmap |= btn << JOY_BTN_SHIFT; // add buttons
// report joystick 1 to OSD
if ( iface->jindex==0)
OsdUsbIdSet( conf->joystick_mouse.vid, conf->joystick_mouse.pid );
// map virtual joypad
uint16_t vjoy = jmap;
vjoy |= btn_extra << 8;

View File

@ -332,36 +332,43 @@ void virtual_joystick_keyboard ( uint16_t vjoy, uint8_t keyb_hit ) {
// if OSD is open control it via USB joystick
if(user_io_osd_is_visible() && !mist_cfg.joystick_ignore_osd) {
if(vjoy & JOY_A) buf[0] = 0x28; // ENTER
if(vjoy & JOY_B) buf[0] = 0x29; // ESC
if(vjoy & JOY_START) buf[0] = 0x45; // F12
if(vjoy & JOY_LEFT) buf[0] = 0x50; // left arrow
if(vjoy & JOY_RIGHT) buf[0] = 0x4F; // right arrow
int idx = 0;
if(vjoy & JOY_A) buf[idx++] = 0x28; // ENTER
if(vjoy & JOY_B) buf[idx++] = 0x29; // ESC
if(vjoy & JOY_START) buf[idx++] = 0x45; // F12
if(vjoy & JOY_LEFT) buf[idx++] = 0x50; // left arrow
if(vjoy & JOY_RIGHT) buf[idx++] = 0x4F; // right arrow
// up and down uses SELECT or L for faster scrolling
/*
if(vjoy & JOY_UP) {
if (vjoy & JOY_SELECT || vjoy & JOY_L) buf[1] = 0x4B; // page up
else buf[1] = 0x52; // up arrow
if (vjoy & JOY_SELECT || vjoy & JOY_L) buf[idx] = 0x4B; // page up
else buf[idx] = 0x52; // up arrow
if (idx < 6) idx++; //avoid overflow if we assigned 6 already
}
if(vjoy & JOY_DOWN) {
if (vjoy & JOY_SELECT || vjoy & JOY_L) buf[1] = 0x4E; // page down
else buf[1] = 0x51; // down arrow
if (vjoy & JOY_SELECT || vjoy & JOY_L) buf[idx] = 0x4E; // page down
else buf[idx] = 0x51; // down arrow
if (idx < 6) idx++; //avoid overflow if we assigned 6 already
}
*/
} else {
// shortcuts mapped if start is pressed (take priority)
if (vjoy & JOY_START) {
if(vjoy & JOY_A) buf[0] = 0x28; // ENTER
if(vjoy & JOY_B) buf[1] = 0x2C; // SPACE
if(vjoy & JOY_L) buf[1] = 0x29; // ESC
if(vjoy & JOY_R) buf[1] = 0x3A; // F1
if(vjoy & JOY_SELECT) buf[2] = 0x45; //F12 // i.e. open OSD in most cores
iprintf("joy2key START is pressed\n");
int idx = 0;
if(vjoy & JOY_A) buf[idx++] = 0x28; // ENTER
if(vjoy & JOY_B) buf[idx++] = 0x2C; // SPACE
if(vjoy & JOY_L) buf[idx++] = 0x29; // ESC
if(vjoy & JOY_R) buf[idx++] = 0x3A; // F1
if(vjoy & JOY_SELECT) buf[idx++] = 0x45; //F12 // i.e. open OSD in most cores
} else {
// shortcuts with SELECT - mouse emulation
if (vjoy & JOY_SELECT) {
//iprintf("joy2key SELECT is pressed\n");
unsigned char but = 0;
char a0 = 0;
char a1 = 0;
@ -390,6 +397,7 @@ void virtual_joystick_keyboard ( uint16_t vjoy, uint8_t keyb_hit ) {
if (joy_key_map[i].modifier) {
modifier |= joy_key_map[i].modifier;
mapped_hit=1;
iprintf("joy2key hit (modifier):%d\n", joy_key_map[i].modifier);
}
// only override up to 6 keys,
// and preserve overrides from further up this function
@ -402,7 +410,7 @@ void virtual_joystick_keyboard ( uint16_t vjoy, uint8_t keyb_hit ) {
if (joy_key_map[i].keys[j]) {
buf[k++] = joy_key_map[i].keys[j];
mapped_hit=1;
//iprintf("j2k code:%d\n", joy_buf[j]);
iprintf("joy2key hit:%d\n", joy_key_map[i].keys[j]);
}
}
}

View File

@ -56,6 +56,13 @@ static char caps_lock_toggle = 0;
// avoid multiple keyboard/controllers to interfere
static uint8_t latest_keyb_priority = 0; // keyboard=0, joypad with key mappings=1
// track for debug/display
static unsigned char latest_joy0 = 0;
static unsigned char latest_joy1 = 0;
unsigned char user_io_state_joy0() { return latest_joy0; }
unsigned char user_io_state_joy1() { return latest_joy1; }
// mouse position storage for ps2 and minimig rate limitation
#define X 0
#define Y 1
@ -302,6 +309,11 @@ void user_io_digital_joystick(unsigned char joystick, unsigned char map) {
OSDCTRLUP, OSDCTRLDOWN, OSDCTRLLEFT, OSDCTRLRIGHT };
static uint8_t last_map = 0;
if (joystick==0) latest_joy0 = map;
else latest_joy1 = map;
OsdJoySet(map);
// iprintf("joy to osd\n");
// OsdKeySet(0x80 | usb2ami[pressed[i]]);
@ -1397,7 +1409,7 @@ static char key_used_by_osd(unsigned short s) {
void user_io_kbd(unsigned char m, unsigned char *k, uint8_t priority) {
// ignore lower priority clears if higher priority key was pressed
if (m==0 && k[0]==0 && k[1]==0 && k[2]==0) {
if (m==0 && (k[0] + k[1] + k[2] + k[3] + k[4] + k[5])==0) {
if (priority > latest_keyb_priority) // lower number = higher priority
return;
}