From c39dc2ab03293b42f6fd6e9d3893516f9a75422c Mon Sep 17 00:00:00 2001 From: Pecusx Date: Sat, 29 May 2021 09:37:42 +0200 Subject: [PATCH 1/2] Third (final??) attemp at a new Virtual Keyboard (#75) * Atari Console keys Added: Help, Start, Select, Option and Reset keys. * Atari TAB, RETURN and SPACE keys * Return? * Start, Option, Help and Emulator Menu buttons * Help key on Pad Added Atari Help key to joypad mapping. * First try to new keyboard * Shit on VKBD * Control key handle * Shift text UPPER when pressed * Atari 8bit font * Virtual Keyboard keys with Control * Minor error * 1st attemp to new vkbd layout Virtual Keyoboard recreated. Added atari font, Ctrl and Shift funcionality. Console buttons on second page. * % and null character display on VKBD * Revert "% and null character display on VKBD" This reverts commit f4eb848f261ea4da41d9aa84487e5b168c4722f3. * Displaying % and heart on VKBD - maybe... * Set max key description lenght to 3 * Always display only 3 characters of key desc. * Schift & Control status on VKBD * Second page of VKBD New second page. New layout, atari cursor keys and F1-F4 now working. * Minor mistake :) * Correct atari F1-F4 handling * Oooops... minor error * Better keys handling * Better Shift & Control indicators * Much better Shift and Control colors :) * Disable joystick input if Virtual Keyboard active Only for testing * Revert "Disable joystick input if Virtual Keyboard active" This reverts commit 8b942c29e016ee2dad5808383970da6796193998. * One page VKBD layout Atari keyboard fits in one page! * Atari del/Bk Sp properly handling * VKBD opacity Only for testing * Keys names opacity Test only * Still testing VKBD opacity * minor error Still testing opacity * Added VKbd opacity witch switch. * Oppps... --- libretro/core-mapper.c | 7 +- libretro/font2.i | 526 +++++++++++++++++++-------------------- libretro/graph.c | 43 +++- libretro/libretro-core.c | 2 +- libretro/libretro-core.h | 11 +- libretro/platform.c | 76 ++++-- libretro/vkbd.c | 53 +++- libretro/vkbd_def.h | 267 +++++++++++--------- 8 files changed, 559 insertions(+), 426 deletions(-) diff --git a/libretro/core-mapper.c b/libretro/core-mapper.c index 3098fd0..91c82c3 100644 --- a/libretro/core-mapper.c +++ b/libretro/core-mapper.c @@ -41,6 +41,7 @@ char RPATH[512]; //EMU FLAGS int NPAGE=-1, KCOL=1, BKGCOLOR=0; int SHOWKEY=-1; +int VKBD_OPACITY=-1; #if defined(ANDROID) || defined(__ANDROID__) int MOUSE_EMULATED=1; @@ -257,7 +258,11 @@ void retro_virtualkb(void) SHOWKEY=-SHOWKEY; } else if(i==-5) - oldi=-1; + { + //VKbd opacitu on/off + VKBD_OPACITY=-VKBD_OPACITY; + oldi=-1; + } else if(i==-6) oldi=-1; else if(i==-7) diff --git a/libretro/font2.i b/libretro/font2.i index d1868a7..a815c8f 100644 --- a/libretro/font2.i +++ b/libretro/font2.i @@ -1,270 +1,266 @@ -/****************************************************************/ -/* Apple IIgs emulator */ -/* */ -/* Apple 2GS Original fonts. */ -/* All the characters are coded in their original set. */ -/* Only the USA keyboard is recognized with ROM 01. */ -/* */ -/****************************************************************/ +/**************************************/ +/* Atari 800 emulator */ +/* */ +/* Atari 8bit Original fonts. */ +/* */ +/**************************************/ unsigned char font_array[256*8] = { -0xc7, 0xbb, 0xab, 0xa3, 0xa7, 0xbf, 0xc3, 0xff, -0xef, 0xd7, 0xbb, 0xbb, 0x83, 0xbb, 0xbb, 0xff, -0x87, 0xbb, 0xbb, 0x87, 0xbb, 0xbb, 0x87, 0xff, -0xc7, 0xbb, 0xbf, 0xbf, 0xbf, 0xbb, 0xc7, 0xff, -0x87, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x87, 0xff, -0x83, 0xbf, 0xbf, 0x87, 0xbf, 0xbf, 0x83, 0xff, -0x83, 0xbf, 0xbf, 0x87, 0xbf, 0xbf, 0xbf, 0xff, -0xc3, 0xbf, 0xbf, 0xbf, 0xb3, 0xbb, 0xc3, 0xff, -0xbb, 0xbb, 0xbb, 0x83, 0xbb, 0xbb, 0xbb, 0xff, -0xc7, 0xef, 0xef, 0xef, 0xef, 0xef, 0xc7, 0xff, -0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xbb, 0xc7, 0xff, -0xbb, 0xb7, 0xaf, 0x9f, 0xaf, 0xb7, 0xbb, 0xff, -0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0x83, 0xff, -0xbb, 0x93, 0xab, 0xab, 0xbb, 0xbb, 0xbb, 0xff, -0xbb, 0xbb, 0x9b, 0xab, 0xb3, 0xbb, 0xbb, 0xff, -0xc7, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xc7, 0xff, -0x87, 0xbb, 0xbb, 0x87, 0xbf, 0xbf, 0xbf, 0xff, -0xc7, 0xbb, 0xbb, 0xbb, 0xab, 0xb7, 0xcb, 0xff, -0x87, 0xbb, 0xbb, 0x87, 0xaf, 0xb7, 0xbb, 0xff, -0xc7, 0xbb, 0xbf, 0xc7, 0xfb, 0xbb, 0xc7, 0xff, -0x83, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xff, -0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xc7, 0xff, -0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xd7, 0xef, 0xff, -0xbb, 0xbb, 0xbb, 0xab, 0xab, 0x93, 0xbb, 0xff, -0xbb, 0xbb, 0xd7, 0xef, 0xd7, 0xbb, 0xbb, 0xff, -0xbb, 0xbb, 0xd7, 0xef, 0xef, 0xef, 0xef, 0xff, -0x83, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x83, 0xff, -0x83, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x83, 0xff, -0xff, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xff, 0xff, -0x83, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0x83, 0xff, -0xff, 0xff, 0xef, 0xd7, 0xbb, 0xff, 0xff, 0xff, -0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, -0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, -0xef, 0xef, 0xef, 0xef, 0xef, 0xff, 0xef, 0xff, -0xd7, 0xd7, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, -0xd7, 0xd7, 0x83, 0xd7, 0x83, 0xd7, 0xd7, 0xff, -0xef, 0xc3, 0xaf, 0xc7, 0xeb, 0x87, 0xef, 0xff, -0x9f, 0x9b, 0xf7, 0xef, 0xdf, 0xb3, 0xf3, 0xff, -0xdf, 0xaf, 0xaf, 0xdf, 0xab, 0xb7, 0xcb, 0xff, -0xef, 0xef, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, -0xef, 0xdf, 0xbf, 0xbf, 0xbf, 0xdf, 0xef, 0xff, -0xef, 0xf7, 0xfb, 0xfb, 0xfb, 0xf7, 0xef, 0xff, -0xef, 0xab, 0xc7, 0xef, 0xc7, 0xab, 0xef, 0xff, -0xff, 0xef, 0xef, 0x83, 0xef, 0xef, 0xff, 0xff, -0xff, 0xff, 0xff, 0xff, 0xef, 0xef, 0xdf, 0xff, -0xff, 0xff, 0xff, 0x83, 0xff, 0xff, 0xff, 0xff, -0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, -0xff, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0xff, 0xff, -0xc7, 0xbb, 0xb3, 0xab, 0x9b, 0xbb, 0xc7, 0xff, -0xef, 0xcf, 0xef, 0xef, 0xef, 0xef, 0xc7, 0xff, -0xc7, 0xbb, 0xfb, 0xe7, 0xdf, 0xbf, 0x83, 0xff, -0x83, 0xfb, 0xf7, 0xe7, 0xfb, 0xbb, 0xc7, 0xff, -0xf7, 0xe7, 0xd7, 0xb7, 0x83, 0xf7, 0xf7, 0xff, -0x83, 0xbf, 0x87, 0xfb, 0xfb, 0xbb, 0xc7, 0xff, -0xe3, 0xdf, 0xbf, 0x87, 0xbb, 0xbb, 0xc7, 0xff, -0x83, 0xfb, 0xf7, 0xef, 0xdf, 0xdf, 0xdf, 0xff, -0xc7, 0xbb, 0xbb, 0xc7, 0xbb, 0xbb, 0xc7, 0xff, -0xc7, 0xbb, 0xbb, 0xc3, 0xfb, 0xf7, 0x8f, 0xff, -0xff, 0xff, 0xef, 0xff, 0xef, 0xff, 0xff, 0xff, -0xff, 0xff, 0xef, 0xff, 0xef, 0xef, 0xdf, 0xff, -0xf7, 0xef, 0xdf, 0xbf, 0xdf, 0xef, 0xf7, 0xff, -0xff, 0xff, 0x83, 0xff, 0x83, 0xff, 0xff, 0xff, -0xdf, 0xef, 0xf7, 0xfb, 0xf7, 0xef, 0xdf, 0xff, -0xc7, 0xbb, 0xf7, 0xef, 0xef, 0xff, 0xef, 0xff, -0x08, 0x10, 0x6c, 0xfe, 0xfc, 0xfc, 0x7e, 0x6c, -0x08, 0x10, 0x6c, 0x82, 0x84, 0x84, 0x52, 0x6c, -0x00, 0x00, 0x40, 0x60, 0x70, 0x78, 0x6c, 0x42, -0xfe, 0x44, 0x28, 0x10, 0x10, 0x28, 0x54, 0xfe, -0x00, 0x02, 0x04, 0x88, 0x50, 0x20, 0x20, 0x00, -0xfe, 0xfc, 0xfa, 0x36, 0xae, 0xde, 0xde, 0xfe, -0xfc, 0xfc, 0xfc, 0xdc, 0x9c, 0x00, 0x9e, 0xde, -0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0xfe, -0x10, 0x20, 0x40, 0xfe, 0x40, 0x20, 0x10, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, -0x10, 0x10, 0x10, 0x10, 0x92, 0x54, 0x38, 0x10, -0x10, 0x38, 0x54, 0x92, 0x10, 0x10, 0x10, 0x10, -0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x02, 0x02, 0x02, 0x22, 0x62, 0xfe, 0x60, 0x20, -0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, -0xc8, 0x18, 0x38, 0x7e, 0x38, 0x18, 0x08, 0xf6, -0x26, 0x30, 0x38, 0xfc, 0x38, 0x30, 0x20, 0xde, -0x02, 0x12, 0x10, 0xfe, 0x7c, 0x38, 0x12, 0x02, -0x02, 0x12, 0x38, 0x7c, 0xfe, 0x10, 0x12, 0x02, -0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xfe, -0x10, 0x08, 0x04, 0xfe, 0x04, 0x08, 0x10, 0x00, -0x54, 0xaa, 0x54, 0xaa, 0x54, 0xaa, 0x54, 0xaa, -0xaa, 0x54, 0xaa, 0x54, 0xaa, 0x54, 0xaa, 0x54, -0x00, 0x7c, 0x82, 0x80, 0x80, 0x80, 0xfe, 0x00, -0x00, 0x00, 0xfc, 0x02, 0x02, 0x02, 0xfe, 0x00, -0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, -0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, -0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, -0x28, 0x28, 0xee, 0x00, 0xee, 0x28, 0x28, 0x00, -0xfe, 0x02, 0x02, 0x32, 0x32, 0x02, 0x02, 0xfe, -0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, -0xdf, 0xef, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, -0xff, 0xff, 0xc7, 0xfb, 0xc3, 0xbb, 0xc3, 0xff, -0xbf, 0xbf, 0x87, 0xbb, 0xbb, 0xbb, 0x87, 0xff, -0xff, 0xff, 0xc3, 0xbf, 0xbf, 0xbf, 0xc3, 0xff, -0xfb, 0xfb, 0xc3, 0xbb, 0xbb, 0xbb, 0xc3, 0xff, -0xff, 0xff, 0xc7, 0xbb, 0x83, 0xbf, 0xc3, 0xff, -0xe7, 0xdb, 0xdf, 0x87, 0xdf, 0xdf, 0xdf, 0xff, -0xff, 0xff, 0xc7, 0xbb, 0xbb, 0xc3, 0xfb, 0xc7, -0xbf, 0xbf, 0x87, 0xbb, 0xbb, 0xbb, 0xbb, 0xff, -0xef, 0xff, 0xcf, 0xef, 0xef, 0xef, 0xc7, 0xff, -0xf7, 0xff, 0xe7, 0xf7, 0xf7, 0xf7, 0xb7, 0xcf, -0xbf, 0xbf, 0xbb, 0xb7, 0x8f, 0xb7, 0xbb, 0xff, -0xcf, 0xef, 0xef, 0xef, 0xef, 0xef, 0xc7, 0xff, -0xff, 0xff, 0x93, 0xab, 0xab, 0xab, 0xbb, 0xff, -0xff, 0xff, 0x87, 0xbb, 0xbb, 0xbb, 0xbb, 0xff, -0xff, 0xff, 0xc7, 0xbb, 0xbb, 0xbb, 0xc7, 0xff, -0xff, 0xff, 0x87, 0xbb, 0xbb, 0x87, 0xbf, 0xbf, -0xff, 0xff, 0xc3, 0xbb, 0xbb, 0xc3, 0xfb, 0xfb, -0xff, 0xff, 0xa3, 0x9f, 0xbf, 0xbf, 0xbf, 0xff, -0xff, 0xff, 0xc3, 0xbf, 0xc7, 0xfb, 0x87, 0xff, -0xdf, 0xdf, 0x87, 0xdf, 0xdf, 0xdb, 0xe7, 0xff, -0xff, 0xff, 0xbb, 0xbb, 0xbb, 0xb3, 0xcb, 0xff, -0xff, 0xff, 0xbb, 0xbb, 0xbb, 0xd7, 0xef, 0xff, -0xff, 0xff, 0xbb, 0xbb, 0xab, 0xab, 0x93, 0xff, -0xff, 0xff, 0xbb, 0xd7, 0xef, 0xd7, 0xbb, 0xff, -0xff, 0xff, 0xbb, 0xbb, 0xbb, 0xc3, 0xfb, 0xc7, -0xff, 0xff, 0x83, 0xf7, 0xef, 0xdf, 0x83, 0xff, -0xe3, 0xcf, 0xcf, 0x9f, 0xcf, 0xcf, 0xe3, 0xff, -0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, -0x8f, 0xe7, 0xe7, 0xf3, 0xe7, 0xe7, 0x8f, 0xff, -0xcb, 0xa7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, -0xff, 0xab, 0xd7, 0xab, 0xd7, 0xab, 0xff, 0xff, -0x38, 0x44, 0x54, 0x5c, 0x58, 0x40, 0x3c, 0x00, -0x10, 0x28, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x00, -0x78, 0x44, 0x44, 0x78, 0x44, 0x44, 0x78, 0x00, -0x38, 0x44, 0x40, 0x40, 0x40, 0x44, 0x38, 0x00, -0x78, 0x44, 0x44, 0x44, 0x44, 0x44, 0x78, 0x00, -0x7c, 0x40, 0x40, 0x78, 0x40, 0x40, 0x7c, 0x00, -0x7c, 0x40, 0x40, 0x78, 0x40, 0x40, 0x40, 0x00, -0x3c, 0x40, 0x40, 0x40, 0x4c, 0x44, 0x3c, 0x00, -0x44, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x44, 0x00, -0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, -0x04, 0x04, 0x04, 0x04, 0x04, 0x44, 0x38, 0x00, -0x44, 0x48, 0x50, 0x60, 0x50, 0x48, 0x44, 0x00, -0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7c, 0x00, -0x44, 0x6c, 0x54, 0x54, 0x44, 0x44, 0x44, 0x00, -0x44, 0x44, 0x64, 0x54, 0x4c, 0x44, 0x44, 0x00, -0x38, 0x44, 0x44, 0x44, 0x44, 0x44, 0x38, 0x00, -0x78, 0x44, 0x44, 0x78, 0x40, 0x40, 0x40, 0x00, -0x38, 0x44, 0x44, 0x44, 0x54, 0x48, 0x34, 0x00, -0x78, 0x44, 0x44, 0x78, 0x50, 0x48, 0x44, 0x00, -0x38, 0x44, 0x40, 0x38, 0x04, 0x44, 0x38, 0x00, -0x7c, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, -0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x38, 0x00, -0x44, 0x44, 0x44, 0x44, 0x44, 0x28, 0x10, 0x00, -0x44, 0x44, 0x44, 0x54, 0x54, 0x6c, 0x44, 0x00, -0x44, 0x44, 0x28, 0x10, 0x28, 0x44, 0x44, 0x00, -0x44, 0x44, 0x28, 0x10, 0x10, 0x10, 0x10, 0x00, -0x7c, 0x04, 0x08, 0x10, 0x20, 0x40, 0x7c, 0x00, -0x7c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7c, 0x00, -0x00, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00, -0x7c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x7c, 0x00, -0x00, 0x00, 0x10, 0x28, 0x44, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, +0x00, 0x36, 0x7F, 0x7F, 0x3E, 0x1C, 0x08, 0x00, +0x18, 0x18, 0x18, 0x1F, 0x1F, 0x18, 0x18, 0x18, +0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, +0x18, 0x18, 0x18, 0xF8, 0xF8, 0x00, 0x00, 0x00, +0x18, 0x18, 0x18, 0xF8, 0xF8, 0x18, 0x18, 0x18, +0x00, 0x00, 0x00, 0xF8, 0xF8, 0x18, 0x18, 0x18, +0x03, 0x07, 0x0E, 0x1C, 0x38, 0x70, 0xE0, 0xC0, +0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, +0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F, +0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFF, +0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, +0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, +0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, +0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, +0x00, 0x1C, 0x1C, 0x77, 0x77, 0x08, 0x1C, 0x00, +0x00, 0x00, 0x00, 0x1F, 0x1F, 0x18, 0x18, 0x18, +0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, +0x18, 0x18, 0x18, 0xFF, 0xFF, 0x18, 0x18, 0x18, +0x00, 0x00, 0x3C, 0x7E, 0x7E, 0x7E, 0x3C, 0x00, +0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, +0x00, 0x00, 0x00, 0xFF, 0xFF, 0x18, 0x18, 0x18, +0x18, 0x18, 0x18, 0xFF, 0xFF, 0x00, 0x00, 0x00, +0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, +0x18, 0x18, 0x18, 0x1F, 0x1F, 0x00, 0x00, 0x00, +0x78, 0x60, 0x78, 0x60, 0x7E, 0x18, 0x1E, 0x00, +0x00, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x00, +0x00, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x00, +0x00, 0x18, 0x30, 0x7E, 0x30, 0x18, 0x00, 0x00, +0x00, 0x18, 0x0C, 0x7E, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x10, 0x00, -0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, -0x28, 0x28, 0x7c, 0x28, 0x7c, 0x28, 0x28, 0x00, -0x10, 0x3c, 0x50, 0x38, 0x14, 0x78, 0x10, 0x00, -0x60, 0x64, 0x08, 0x10, 0x20, 0x4c, 0x0c, 0x00, -0x20, 0x50, 0x50, 0x20, 0x54, 0x48, 0x34, 0x00, -0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, -0x10, 0x20, 0x40, 0x40, 0x40, 0x20, 0x10, 0x00, -0x10, 0x08, 0x04, 0x04, 0x04, 0x08, 0x10, 0x00, -0x10, 0x54, 0x38, 0x10, 0x38, 0x54, 0x10, 0x00, -0x00, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x20, 0x00, -0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, -0x00, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00, -0x38, 0x44, 0x4c, 0x54, 0x64, 0x44, 0x38, 0x00, -0x10, 0x30, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, -0x38, 0x44, 0x04, 0x18, 0x20, 0x40, 0x7c, 0x00, -0x7c, 0x04, 0x08, 0x18, 0x04, 0x44, 0x38, 0x00, -0x08, 0x18, 0x28, 0x48, 0x7c, 0x08, 0x08, 0x00, -0x7c, 0x40, 0x78, 0x04, 0x04, 0x44, 0x38, 0x00, -0x1c, 0x20, 0x40, 0x78, 0x44, 0x44, 0x38, 0x00, -0x7c, 0x04, 0x08, 0x10, 0x20, 0x20, 0x20, 0x00, -0x38, 0x44, 0x44, 0x38, 0x44, 0x44, 0x38, 0x00, -0x38, 0x44, 0x44, 0x3c, 0x04, 0x08, 0x70, 0x00, -0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, -0x00, 0x00, 0x10, 0x00, 0x10, 0x10, 0x20, 0x00, -0x08, 0x10, 0x20, 0x40, 0x20, 0x10, 0x08, 0x00, -0x00, 0x00, 0x7c, 0x00, 0x7c, 0x00, 0x00, 0x00, -0x20, 0x10, 0x08, 0x04, 0x08, 0x10, 0x20, 0x00, -0x38, 0x44, 0x08, 0x10, 0x10, 0x00, 0x10, 0x00, -0x38, 0x44, 0x54, 0x5c, 0x58, 0x40, 0x3c, 0x00, -0x10, 0x28, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x00, -0x78, 0x44, 0x44, 0x78, 0x44, 0x44, 0x78, 0x00, -0x38, 0x44, 0x40, 0x40, 0x40, 0x44, 0x38, 0x00, -0x78, 0x44, 0x44, 0x44, 0x44, 0x44, 0x78, 0x00, -0x7c, 0x40, 0x40, 0x78, 0x40, 0x40, 0x7c, 0x00, -0x7c, 0x40, 0x40, 0x78, 0x40, 0x40, 0x40, 0x00, -0x3c, 0x40, 0x40, 0x40, 0x4c, 0x44, 0x3c, 0x00, -0x44, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x44, 0x00, -0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, -0x04, 0x04, 0x04, 0x04, 0x04, 0x44, 0x38, 0x00, -0x44, 0x48, 0x50, 0x60, 0x50, 0x48, 0x44, 0x00, -0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7c, 0x00, -0x44, 0x6c, 0x54, 0x54, 0x44, 0x44, 0x44, 0x00, -0x44, 0x44, 0x64, 0x54, 0x4c, 0x44, 0x44, 0x00, -0x38, 0x44, 0x44, 0x44, 0x44, 0x44, 0x38, 0x00, -0x78, 0x44, 0x44, 0x78, 0x40, 0x40, 0x40, 0x00, -0x38, 0x44, 0x44, 0x44, 0x54, 0x48, 0x34, 0x00, -0x78, 0x44, 0x44, 0x78, 0x50, 0x48, 0x44, 0x00, -0x38, 0x44, 0x40, 0x38, 0x04, 0x44, 0x38, 0x00, -0x7c, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, -0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x38, 0x00, -0x44, 0x44, 0x44, 0x44, 0x44, 0x28, 0x10, 0x00, -0x44, 0x44, 0x44, 0x54, 0x54, 0x6c, 0x44, 0x00, -0x44, 0x44, 0x28, 0x10, 0x28, 0x44, 0x44, 0x00, -0x44, 0x44, 0x28, 0x10, 0x10, 0x10, 0x10, 0x00, -0x7c, 0x04, 0x08, 0x10, 0x20, 0x40, 0x7c, 0x00, -0x7c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7c, 0x00, -0x00, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00, -0x7c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x7c, 0x00, -0x00, 0x00, 0x10, 0x28, 0x44, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, -0x20, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x38, 0x04, 0x3c, 0x44, 0x3c, 0x00, -0x40, 0x40, 0x78, 0x44, 0x44, 0x44, 0x78, 0x00, -0x00, 0x00, 0x3c, 0x40, 0x40, 0x40, 0x3c, 0x00, -0x04, 0x04, 0x3c, 0x44, 0x44, 0x44, 0x3c, 0x00, -0x00, 0x00, 0x38, 0x44, 0x7c, 0x40, 0x3c, 0x00, -0x18, 0x24, 0x20, 0x78, 0x20, 0x20, 0x20, 0x00, -0x00, 0x00, 0x38, 0x44, 0x44, 0x3c, 0x04, 0x38, -0x40, 0x40, 0x78, 0x44, 0x44, 0x44, 0x44, 0x00, -0x10, 0x00, 0x30, 0x10, 0x10, 0x10, 0x38, 0x00, -0x08, 0x00, 0x18, 0x08, 0x08, 0x08, 0x48, 0x30, -0x40, 0x40, 0x44, 0x48, 0x70, 0x48, 0x44, 0x00, -0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, -0x00, 0x00, 0x6c, 0x54, 0x54, 0x54, 0x44, 0x00, -0x00, 0x00, 0x78, 0x44, 0x44, 0x44, 0x44, 0x00, -0x00, 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, -0x00, 0x00, 0x78, 0x44, 0x44, 0x78, 0x40, 0x40, -0x00, 0x00, 0x3c, 0x44, 0x44, 0x3c, 0x04, 0x04, -0x00, 0x00, 0x5c, 0x60, 0x40, 0x40, 0x40, 0x00, -0x00, 0x00, 0x3c, 0x40, 0x38, 0x04, 0x78, 0x00, -0x20, 0x20, 0x78, 0x20, 0x20, 0x24, 0x18, 0x00, -0x00, 0x00, 0x44, 0x44, 0x44, 0x4c, 0x34, 0x00, -0x00, 0x00, 0x44, 0x44, 0x44, 0x28, 0x10, 0x00, -0x00, 0x00, 0x44, 0x44, 0x54, 0x54, 0x6c, 0x00, -0x00, 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, -0x00, 0x00, 0x44, 0x44, 0x44, 0x3c, 0x04, 0x38, -0x00, 0x00, 0x7c, 0x08, 0x10, 0x20, 0x7c, 0x00, -0x1c, 0x30, 0x30, 0x60, 0x30, 0x30, 0x1c, 0x00, -0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, -0x70, 0x18, 0x18, 0x0c, 0x18, 0x18, 0x70, 0x00, -0x34, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x54, 0x28, 0x54, 0x28, 0x54, 0x00, 0x00, +0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x00, +0x00, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, +0x00, 0x66, 0xFF, 0x66, 0x66, 0xFF, 0x66, 0x00, +0x18, 0x3E, 0x60, 0x3C, 0x06, 0x7C, 0x18, 0x00, +0x00, 0x66, 0x6C, 0x18, 0x30, 0x66, 0x46, 0x00, +0x1C, 0x36, 0x1C, 0x38, 0x6F, 0x66, 0x3B, 0x00, +0x00, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, +0x00, 0x0E, 0x1C, 0x18, 0x18, 0x1C, 0x0E, 0x00, +0x00, 0x70, 0x38, 0x18, 0x18, 0x38, 0x70, 0x00, +0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00, +0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, +0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, +0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00, +0x00, 0x3C, 0x66, 0x6E, 0x76, 0x66, 0x3C, 0x00, +0x00, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7E, 0x00, +0x00, 0x3C, 0x66, 0x0C, 0x18, 0x30, 0x7E, 0x00, +0x00, 0x7E, 0x0C, 0x18, 0x0C, 0x66, 0x3C, 0x00, +0x00, 0x0C, 0x1C, 0x3C, 0x6C, 0x7E, 0x0C, 0x00, +0x00, 0x7E, 0x60, 0x7C, 0x06, 0x66, 0x3C, 0x00, +0x00, 0x3C, 0x60, 0x7C, 0x66, 0x66, 0x3C, 0x00, +0x00, 0x7E, 0x06, 0x0C, 0x18, 0x30, 0x30, 0x00, +0x00, 0x3C, 0x66, 0x3C, 0x66, 0x66, 0x3C, 0x00, +0x00, 0x3C, 0x66, 0x3E, 0x06, 0x0C, 0x38, 0x00, +0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, +0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x30, +0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00, +0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, +0x60, 0x30, 0x18, 0x0C, 0x18, 0x30, 0x60, 0x00, +0x00, 0x3C, 0x66, 0x0C, 0x18, 0x00, 0x18, 0x00, +0x00, 0x3C, 0x66, 0x6E, 0x6E, 0x60, 0x3E, 0x00, +0x00, 0x18, 0x3C, 0x66, 0x66, 0x7E, 0x66, 0x00, +0x00, 0x7C, 0x66, 0x7C, 0x66, 0x66, 0x7C, 0x00, +0x00, 0x3C, 0x66, 0x60, 0x60, 0x66, 0x3C, 0x00, +0x00, 0x78, 0x6C, 0x66, 0x66, 0x6C, 0x78, 0x00, +0x00, 0x7E, 0x60, 0x7C, 0x60, 0x60, 0x7E, 0x00, +0x00, 0x7E, 0x60, 0x7C, 0x60, 0x60, 0x60, 0x00, +0x00, 0x3E, 0x60, 0x60, 0x6E, 0x66, 0x3E, 0x00, +0x00, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00, +0x00, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, +0x00, 0x06, 0x06, 0x06, 0x06, 0x66, 0x3C, 0x00, +0x00, 0x66, 0x6C, 0x78, 0x78, 0x6C, 0x66, 0x00, +0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7E, 0x00, +0x00, 0x63, 0x77, 0x7F, 0x6B, 0x63, 0x63, 0x00, +0x00, 0x66, 0x76, 0x7E, 0x7E, 0x6E, 0x66, 0x00, +0x00, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, +0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x00, +0x00, 0x3C, 0x66, 0x66, 0x66, 0x6C, 0x36, 0x00, +0x00, 0x7C, 0x66, 0x66, 0x7C, 0x6C, 0x66, 0x00, +0x00, 0x3C, 0x60, 0x3C, 0x06, 0x06, 0x3C, 0x00, +0x00, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, +0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7E, 0x00, +0x00, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00, +0x00, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00, +0x00, 0x66, 0x66, 0x3C, 0x3C, 0x66, 0x66, 0x00, +0x00, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x00, +0x00, 0x7E, 0x0C, 0x18, 0x30, 0x60, 0x7E, 0x00, +0x00, 0x1E, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00, +0x00, 0x40, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00, +0x00, 0x78, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00, +0x00, 0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, +0x00, 0x18, 0x3C, 0x7E, 0x7E, 0x3C, 0x18, 0x00, +0x00, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, +0x00, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C, 0x00, +0x00, 0x00, 0x3C, 0x60, 0x60, 0x60, 0x3C, 0x00, +0x00, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3E, 0x00, +0x00, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, +0x00, 0x0E, 0x18, 0x3E, 0x18, 0x18, 0x18, 0x00, +0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x7C, +0x00, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x00, +0x00, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3C, 0x00, +0x00, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x3C, +0x00, 0x60, 0x60, 0x6C, 0x78, 0x6C, 0x66, 0x00, +0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, +0x00, 0x00, 0x66, 0x7F, 0x7F, 0x6B, 0x63, 0x00, +0x00, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x00, +0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, +0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, +0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x06, +0x00, 0x00, 0x7C, 0x66, 0x60, 0x60, 0x60, 0x00, +0x00, 0x00, 0x3E, 0x60, 0x3C, 0x06, 0x7C, 0x00, +0x00, 0x18, 0x7E, 0x18, 0x18, 0x18, 0x0E, 0x00, +0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, +0x00, 0x00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00, +0x00, 0x00, 0x63, 0x6B, 0x7F, 0x3E, 0x36, 0x00, +0x00, 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x00, +0x00, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x0C, 0x78, +0x00, 0x00, 0x7E, 0x0C, 0x18, 0x30, 0x7E, 0x00, +0x00, 0x18, 0x3C, 0x7E, 0x7E, 0x18, 0x3C, 0x00, +0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, +0x00, 0x7E, 0x78, 0x7C, 0x6E, 0x66, 0x06, 0x00, +0x08, 0x18, 0x38, 0x78, 0x38, 0x18, 0x08, 0x00, +0x10, 0x18, 0x1C, 0x1E, 0x1C, 0x18, 0x10, 0x00, +0xFF, 0xC9, 0x80, 0x80, 0xC1, 0xE3, 0xF7, 0xFF, +0xE7, 0xE7, 0xE7, 0xE0, 0xE0, 0xE7, 0xE7, 0xE7, +0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, +0xE7, 0xE7, 0xE7, 0x07, 0x07, 0xFF, 0xFF, 0xFF, +0xE7, 0xE7, 0xE7, 0x07, 0x07, 0xE7, 0xE7, 0xE7, +0xFF, 0xFF, 0xFF, 0x07, 0x07, 0xE7, 0xE7, 0xE7, +0xFC, 0xF8, 0xF1, 0xE3, 0xC7, 0x8F, 0x1F, 0x3F, +0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, +0xFE, 0xFC, 0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x00, +0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, +0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01, 0x00, +0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, +0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, +0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, +0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F, +0xFF, 0xE3, 0xE3, 0x88, 0x88, 0xF7, 0xE3, 0xFF, +0xFF, 0xFF, 0xFF, 0xE0, 0xE0, 0xE7, 0xE7, 0xE7, +0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, +0xE7, 0xE7, 0xE7, 0x00, 0x00, 0xE7, 0xE7, 0xE7, +0xFF, 0xFF, 0xC3, 0x81, 0x81, 0x81, 0xC3, 0xFF, +0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, +0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, +0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xE7, 0xE7, 0xE7, +0xE7, 0xE7, 0xE7, 0x00, 0x00, 0xFF, 0xFF, 0xFF, +0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, +0xE7, 0xE7, 0xE7, 0xE0, 0xE0, 0xFF, 0xFF, 0xFF, +0x87, 0x9F, 0x87, 0x9F, 0x81, 0xE7, 0xE1, 0xFF, +0xFF, 0xE7, 0xC3, 0x81, 0xE7, 0xE7, 0xE7, 0xFF, +0xFF, 0xE7, 0xE7, 0xE7, 0x81, 0xC3, 0xE7, 0xFF, +0xFF, 0xE7, 0xCF, 0x81, 0xCF, 0xE7, 0xFF, 0xFF, +0xFF, 0xE7, 0xF3, 0x81, 0xF3, 0xE7, 0xFF, 0xFF, +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +0xFF, 0xE7, 0xE7, 0xE7, 0xE7, 0xFF, 0xE7, 0xFF, +0xFF, 0x99, 0x99, 0x99, 0xFF, 0xFF, 0xFF, 0xFF, +0xFF, 0x99, 0x00, 0x99, 0x99, 0x00, 0x99, 0xFF, +0xE7, 0xC1, 0x9F, 0xC3, 0xF9, 0x83, 0xE7, 0xFF, +0xFF, 0x99, 0x93, 0xE7, 0xCF, 0x99, 0xB9, 0xFF, +0xE3, 0xC9, 0xE3, 0xC7, 0x90, 0x99, 0xC4, 0xFF, +0xFF, 0xE7, 0xE7, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, +0xFF, 0xF1, 0xE3, 0xE7, 0xE7, 0xE3, 0xF1, 0xFF, +0xFF, 0x8F, 0xC7, 0xE7, 0xE7, 0xC7, 0x8F, 0xFF, +0xFF, 0x99, 0xC3, 0x00, 0xC3, 0x99, 0xFF, 0xFF, +0xFF, 0xE7, 0xE7, 0x81, 0xE7, 0xE7, 0xFF, 0xFF, +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xE7, 0xCF, +0xFF, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xFF, 0xFF, +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xE7, 0xFF, +0xFF, 0xF9, 0xF3, 0xE7, 0xCF, 0x9F, 0xBF, 0xFF, +0xFF, 0xC3, 0x99, 0x91, 0x89, 0x99, 0xC3, 0xFF, +0xFF, 0xE7, 0xC7, 0xE7, 0xE7, 0xE7, 0x81, 0xFF, +0xFF, 0xC3, 0x99, 0xF3, 0xE7, 0xCF, 0x81, 0xFF, +0xFF, 0x81, 0xF3, 0xE7, 0xF3, 0x99, 0xC3, 0xFF, +0xFF, 0xF3, 0xE3, 0xC3, 0x93, 0x81, 0xF3, 0xFF, +0xFF, 0x81, 0x9F, 0x83, 0xF9, 0x99, 0xC3, 0xFF, +0xFF, 0xC3, 0x9F, 0x83, 0x99, 0x99, 0xC3, 0xFF, +0xFF, 0x81, 0xF9, 0xF3, 0xE7, 0xCF, 0xCF, 0xFF, +0xFF, 0xC3, 0x99, 0xC3, 0x99, 0x99, 0xC3, 0xFF, +0xFF, 0xC3, 0x99, 0xC1, 0xF9, 0xF3, 0xC7, 0xFF, +0xFF, 0xFF, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0xFF, +0xFF, 0xFF, 0xE7, 0xE7, 0xFF, 0xE7, 0xE7, 0xCF, +0xF9, 0xF3, 0xE7, 0xCF, 0xE7, 0xF3, 0xF9, 0xFF, +0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, +0x9F, 0xCF, 0xE7, 0xF3, 0xE7, 0xCF, 0x9F, 0xFF, +0xFF, 0xC3, 0x99, 0xF3, 0xE7, 0xFF, 0xE7, 0xFF, +0xFF, 0xC3, 0x99, 0x91, 0x91, 0x9F, 0xC1, 0xFF, +0xFF, 0xE7, 0xC3, 0x99, 0x99, 0x81, 0x99, 0xFF, +0xFF, 0x83, 0x99, 0x83, 0x99, 0x99, 0x83, 0xFF, +0xFF, 0xC3, 0x99, 0x9F, 0x9F, 0x99, 0xC3, 0xFF, +0xFF, 0x87, 0x93, 0x99, 0x99, 0x93, 0x87, 0xFF, +0xFF, 0x81, 0x9F, 0x83, 0x9F, 0x9F, 0x81, 0xFF, +0xFF, 0x81, 0x9F, 0x83, 0x9F, 0x9F, 0x9F, 0xFF, +0xFF, 0xC1, 0x9F, 0x9F, 0x91, 0x99, 0xC1, 0xFF, +0xFF, 0x99, 0x99, 0x81, 0x99, 0x99, 0x99, 0xFF, +0xFF, 0x81, 0xE7, 0xE7, 0xE7, 0xE7, 0x81, 0xFF, +0xFF, 0xF9, 0xF9, 0xF9, 0xF9, 0x99, 0xC3, 0xFF, +0xFF, 0x99, 0x93, 0x87, 0x87, 0x93, 0x99, 0xFF, +0xFF, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x81, 0xFF, +0xFF, 0x9C, 0x88, 0x80, 0x94, 0x9C, 0x9C, 0xFF, +0xFF, 0x99, 0x89, 0x81, 0x81, 0x91, 0x99, 0xFF, +0xFF, 0xC3, 0x99, 0x99, 0x99, 0x99, 0xC3, 0xFF, +0xFF, 0x83, 0x99, 0x99, 0x83, 0x9F, 0x9F, 0xFF, +0xFF, 0xC3, 0x99, 0x99, 0x99, 0x93, 0xC9, 0xFF, +0xFF, 0x83, 0x99, 0x99, 0x83, 0x93, 0x99, 0xFF, +0xFF, 0xC3, 0x9F, 0xC3, 0xF9, 0xF9, 0xC3, 0xFF, +0xFF, 0x81, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xFF, +0xFF, 0x99, 0x99, 0x99, 0x99, 0x99, 0x81, 0xFF, +0xFF, 0x99, 0x99, 0x99, 0x99, 0xC3, 0xE7, 0xFF, +0xFF, 0x9C, 0x9C, 0x94, 0x80, 0x88, 0x9C, 0xFF, +0xFF, 0x99, 0x99, 0xC3, 0xC3, 0x99, 0x99, 0xFF, +0xFF, 0x99, 0x99, 0xC3, 0xE7, 0xE7, 0xE7, 0xFF, +0xFF, 0x81, 0xF3, 0xE7, 0xCF, 0x9F, 0x81, 0xFF, +0xFF, 0xE1, 0xE7, 0xE7, 0xE7, 0xE7, 0xE1, 0xFF, +0xFF, 0xBF, 0x9F, 0xCF, 0xE7, 0xF3, 0xF9, 0xFF, +0xFF, 0x87, 0xE7, 0xE7, 0xE7, 0xE7, 0x87, 0xFF, +0xFF, 0xF7, 0xE3, 0xC9, 0x9C, 0xFF, 0xFF, 0xFF, +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, +0xFF, 0xE7, 0xC3, 0x81, 0x81, 0xC3, 0xE7, 0xFF, +0xFF, 0xFF, 0xC3, 0xF9, 0xC1, 0x99, 0xC1, 0xFF, +0xFF, 0x9F, 0x9F, 0x83, 0x99, 0x99, 0x83, 0xFF, +0xFF, 0xFF, 0xC3, 0x9F, 0x9F, 0x9F, 0xC3, 0xFF, +0xFF, 0xF9, 0xF9, 0xC1, 0x99, 0x99, 0xC1, 0xFF, +0xFF, 0xFF, 0xC3, 0x99, 0x81, 0x9F, 0xC3, 0xFF, +0xFF, 0xF1, 0xE7, 0xC1, 0xE7, 0xE7, 0xE7, 0xFF, +0xFF, 0xFF, 0xC1, 0x99, 0x99, 0xC1, 0xF9, 0x83, +0xFF, 0x9F, 0x9F, 0x83, 0x99, 0x99, 0x99, 0xFF, +0xFF, 0xE7, 0xFF, 0xC7, 0xE7, 0xE7, 0xC3, 0xFF, +0xFF, 0xF9, 0xFF, 0xF9, 0xF9, 0xF9, 0xF9, 0xC3, +0xFF, 0x9F, 0x9F, 0x93, 0x87, 0x93, 0x99, 0xFF, +0xFF, 0xC7, 0xE7, 0xE7, 0xE7, 0xE7, 0xC3, 0xFF, +0xFF, 0xFF, 0x99, 0x80, 0x80, 0x94, 0x9C, 0xFF, +0xFF, 0xFF, 0x83, 0x99, 0x99, 0x99, 0x99, 0xFF, +0xFF, 0xFF, 0xC3, 0x99, 0x99, 0x99, 0xC3, 0xFF, +0xFF, 0xFF, 0x83, 0x99, 0x99, 0x83, 0x9F, 0x9F, +0xFF, 0xFF, 0xC1, 0x99, 0x99, 0xC1, 0xF9, 0xF9, +0xFF, 0xFF, 0x83, 0x99, 0x9F, 0x9F, 0x9F, 0xFF, +0xFF, 0xFF, 0xC1, 0x9F, 0xC3, 0xF9, 0x83, 0xFF, +0xFF, 0xE7, 0x81, 0xE7, 0xE7, 0xE7, 0xF1, 0xFF, +0xFF, 0xFF, 0x99, 0x99, 0x99, 0x99, 0xC1, 0xFF, +0xFF, 0xFF, 0x99, 0x99, 0x99, 0xC3, 0xE7, 0xFF, +0xFF, 0xFF, 0x9C, 0x94, 0x80, 0xC1, 0xC9, 0xFF, +0xFF, 0xFF, 0x99, 0xC3, 0xE7, 0xC3, 0x99, 0xFF, +0xFF, 0xFF, 0x99, 0x99, 0x99, 0xC1, 0xF3, 0x87, +0xFF, 0xFF, 0x81, 0xF3, 0xE7, 0xCF, 0x81, 0xFF, +0xFF, 0xE7, 0xC3, 0x81, 0x81, 0xE7, 0xC3, 0xFF, +0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, +0xFF, 0x81, 0x87, 0x83, 0x91, 0x99, 0xF9, 0xFF, +0xF7, 0xE7, 0xC7, 0x87, 0xC7, 0xE7, 0xF7, 0xFF, +0xEF, 0xE7, 0xE3, 0xE1, 0xE3, 0xE7, 0xEF, 0xFF, }; - -/* Well, this is finally done ! */ diff --git a/libretro/graph.c b/libretro/graph.c index 55e1fef..5cfe819 100755 --- a/libretro/graph.c +++ b/libretro/graph.c @@ -8,6 +8,24 @@ #include "libretro-core.h" extern int VIRTUAL_WIDTH; +extern int VKBD_OPACITY; + +unsigned Opacity(unsigned color1, unsigned color2){ + + unsigned r,g,b; + + if (VKBD_OPACITY==1){ + r=(R_RGB565(color1)/2)+(R_RGB565(color2)/2); + g=(G_RGB565(color1)/2)+(G_RGB565(color2)/2); + b=(B_RGB565(color1)/2)+(B_RGB565(color2)/2); + return RGB565(r,g,b); + } + else + { + return color2; + } + +} void DrawFBoxBmp(char *buffer,int x,int y,int dx,int dy,unsigned color){ @@ -24,7 +42,7 @@ unsigned short *mbuffer=(unsigned short *)buffer; for(j=y;j= dx) { y -= dx; @@ -297,7 +315,8 @@ unsigned char *mbuffer=(unsigned char *)surf; #endif if(string==NULL)return; - for(strlen = 0; strlenmaxstrlen) strlen = maxstrlen; int surfw=strlen * 7 * xscale; int surfh=8 * yscale; @@ -342,7 +361,7 @@ unsigned char *mbuffer=(unsigned char *)surf; for(yrepeat = y; yrepeat < y+ surfh; yrepeat++) for(xrepeat = x; xrepeat< x+surfw; xrepeat++,yptr++) - if(*yptr!=0)mbuffer[xrepeat+yrepeat*VIRTUAL_WIDTH] = *yptr; + if(*yptr!=0)mbuffer[xrepeat+yrepeat*VIRTUAL_WIDTH] = Opacity(mbuffer[xrepeat+yrepeat*VIRTUAL_WIDTH],*yptr); free(linesurf); diff --git a/libretro/libretro-core.c b/libretro/libretro-core.c index eeb89d1..8f9c24e 100644 --- a/libretro/libretro-core.c +++ b/libretro/libretro-core.c @@ -564,7 +564,7 @@ void retro_init(void) { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "Fire 1" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "Return" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, "Fire 2" }, - { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "Y" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "Help" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, "Select" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "Right" }, diff --git a/libretro/libretro-core.h b/libretro/libretro-core.h index 3563680..329e49b 100644 --- a/libretro/libretro-core.h +++ b/libretro/libretro-core.h @@ -42,7 +42,7 @@ extern char Key_Sate2[512]; extern int pauseg; #define NPLGN 12 -#define NLIGN 5 +#define NLIGN 6 #define NLETT 5 #define XSIDE (CROP_WIDTH/NPLGN -1) @@ -58,11 +58,20 @@ extern int pauseg; #ifndef RENDER16B #define RGB565(r, g, b) (((r) << (5+16)) | ((g) << (5+8)) | (b<<5)) +#define R_RGB565(rgb) (((rgb) >> (5+16)) & 255) +#define G_RGB565(rgb) (((rgb) >> (5+8)) & 255) +#define B_RGB565(rgb) ((rgb>>5) & 255) #else #if defined(ABGR1555) #define RGB565(r, g, b) (((b) << (10)) | ((g) << 5) | (r)) +#define B_RGB565(rgb) (((rgb) >> (10)) & 31) +#define G_RGB565(rgb) (((rgb) >> 5) & 31) +#define R_RGB565(rgb) (rgb & 31) #else #define RGB565(r, g, b) (((r) << (5+6)) | ((g) << 6) | (b)) +#define R_RGB565(rgb) (((rgb) >> (5+6)) & 31) +#define G_RGB565(rgb) (((rgb) >> 6) & 31) +#define B_RGB565(rgb) (rgb & 31) #endif #endif #define uint32 unsigned int diff --git a/libretro/platform.c b/libretro/platform.c index 060760b..c7bda7b 100644 --- a/libretro/platform.c +++ b/libretro/platform.c @@ -44,6 +44,8 @@ extern char Key_Sate[512]; #include "libretro.h" #include "retroscreen.h" +extern int SHIFTON; +extern int CTRLON; extern int UI_is_active; static int swap_joysticks = FALSE; @@ -193,13 +195,15 @@ int PLATFORM_Keyboard(void) } /* SHIFT STATE */ - if ((Key_Sate[RETROK_LSHIFT]) || (Key_Sate[RETROK_RSHIFT])) + //if ((Key_Sate[RETROK_LSHIFT]) || (Key_Sate[RETROK_RSHIFT])) + if (SHIFTON == 1) INPUT_key_shift = 1; else INPUT_key_shift = 0; /* CONTROL STATE */ - if ((Key_Sate[RETROK_LCTRL]) || (Key_Sate[RETROK_RCTRL])) + //if ((Key_Sate[RETROK_LCTRL]) || (Key_Sate[RETROK_RCTRL])) + if (CTRLON == 1) key_control = 1; else key_control = 0; @@ -221,13 +225,6 @@ int PLATFORM_Keyboard(void) if (Key_Sate[RETROK_F5]) return INPUT_key_shift ? AKEY_COLDSTART : AKEY_WARMSTART; - if (Key_Sate[RETROK_F8]){ - UI_alt_function = UI_MENU_MONITOR; - } - - if (Key_Sate[RETROK_F9])return AKEY_EXIT; - - if (Key_Sate[RETROK_F10])return INPUT_key_shift ? AKEY_SCREENSHOT_INTERLACE : AKEY_SCREENSHOT; if (Key_Sate[RETROK_F12])return AKEY_TURBO; @@ -300,7 +297,7 @@ int PLATFORM_Keyboard(void) if (Key_Sate[RETROK_HOME]) return key_control ? AKEY_LESS|shiftctrl : AKEY_CLEAR; - if (Key_Sate[RETROK_PAUSE] || Key_Sate[RETROK_F7] ) + if (Key_Sate[RETROK_PAUSE]) { if (BINLOAD_wait_active) { BINLOAD_pause_loading = TRUE; @@ -319,8 +316,14 @@ int PLATFORM_Keyboard(void) if (Key_Sate[RETROK_SPACE]) return AKEY_SPACE ^ shiftctrl; - if (Key_Sate[RETROK_BACKSPACE]) - return AKEY_BACKSPACE|shiftctrl; + if (Key_Sate[RETROK_BACKSPACE]){ + if (INPUT_key_shift) + return AKEY_DELETE_CHAR; + else if (key_control) + return AKEY_DELETE_LINE; + else + return AKEY_BACKSPACE; + } if (Key_Sate[RETROK_RETURN]) return AKEY_RETURN ^ shiftctrl; @@ -458,6 +461,18 @@ int PLATFORM_Keyboard(void) if (Key_Sate[RETROK_COMMA])return (AKEY_CTRL | AKEY_COMMA); if (Key_Sate[RETROK_PERIOD])return (AKEY_CTRL | AKEY_FULLSTOP); if (Key_Sate[RETROK_SEMICOLON])return (AKEY_CTRL | AKEY_SEMICOLON); + + if (Key_Sate[RETROK_F7])return (AKEY_CTRL | AKEY_F1); + if (Key_Sate[RETROK_F8])return (AKEY_CTRL | AKEY_F2); + if (Key_Sate[RETROK_F9])return (AKEY_CTRL | AKEY_F3); + if (Key_Sate[RETROK_F10])return (AKEY_CTRL | AKEY_F4); + + // cursor keys + if (Key_Sate[RETROK_PLUS])return AKEY_LEFT; + if (Key_Sate[RETROK_ASTERISK])return AKEY_RIGHT; + if (Key_Sate[RETROK_EQUALS])return AKEY_DOWN; + if (Key_Sate[RETROK_UNDERSCORE])return AKEY_UP; + } @@ -492,26 +507,35 @@ int PLATFORM_Keyboard(void) if (Key_Sate[RETROK_z])return AKEY_Z; if (Key_Sate[RETROK_1])return AKEY_EXCLAMATION; - if (Key_Sate[RETROK_2])return AKEY_AT; + if (Key_Sate[RETROK_2])return AKEY_DBLQUOTE; if (Key_Sate[RETROK_3])return AKEY_HASH; if (Key_Sate[RETROK_4])return AKEY_DOLLAR; if (Key_Sate[RETROK_5])return AKEY_PERCENT; - if (Key_Sate[RETROK_6])return AKEY_CARET; - if (Key_Sate[RETROK_7])return AKEY_AMPERSAND; - if (Key_Sate[RETROK_8])return AKEY_ASTERISK; + if (Key_Sate[RETROK_6])return AKEY_AMPERSAND; + if (Key_Sate[RETROK_7])return AKEY_QUOTE; + if (Key_Sate[RETROK_8])return AKEY_AT; if (Key_Sate[RETROK_9])return AKEY_PARENLEFT; if (Key_Sate[RETROK_0])return AKEY_PARENRIGHT; if (Key_Sate[RETROK_BACKSLASH])return AKEY_BAR; - if (Key_Sate[RETROK_COMMA])return AKEY_LESS; - if (Key_Sate[RETROK_PERIOD])return AKEY_GREATER; - if (Key_Sate[RETROK_MINUS])return AKEY_UNDERSCORE; - if (Key_Sate[RETROK_EQUALS])return AKEY_PLUS; + if (Key_Sate[RETROK_COMMA])return AKEY_BRACKETLEFT; + if (Key_Sate[RETROK_PERIOD])return AKEY_BRACKETRIGHT; + if (Key_Sate[RETROK_UNDERSCORE])return AKEY_MINUS; + if (Key_Sate[RETROK_PLUS])return AKEY_BACKSLASH; + if (Key_Sate[RETROK_EQUALS])return AKEY_BAR; if (Key_Sate[RETROK_LEFTBRACKET])return AKEY_BRACKETLEFT; // no curly braces on Atari if (Key_Sate[RETROK_RIGHTBRACKET])return AKEY_BRACKETRIGHT; // no curly braces on Atari if (Key_Sate[RETROK_SEMICOLON])return AKEY_COLON; if (Key_Sate[RETROK_QUOTE])return AKEY_DBLQUOTE; if (Key_Sate[RETROK_SLASH])return AKEY_QUESTION; + if (Key_Sate[RETROK_ASTERISK])return AKEY_CIRCUMFLEX; + if (Key_Sate[RETROK_LESS])return AKEY_LESS; + if (Key_Sate[RETROK_GREATER])return AKEY_GREATER; + + if (Key_Sate[RETROK_F7])return (AKEY_SHFT | AKEY_F1); + if (Key_Sate[RETROK_F8])return (AKEY_SHFT | AKEY_F2); + if (Key_Sate[RETROK_F9])return (AKEY_SHFT | AKEY_F3); + if (Key_Sate[RETROK_F10])return (AKEY_SHFT | AKEY_F4); } else { if (Key_Sate[RETROK_a])return AKEY_a; @@ -556,12 +580,22 @@ int PLATFORM_Keyboard(void) if (Key_Sate[RETROK_COMMA])return AKEY_COMMA; if (Key_Sate[RETROK_PERIOD])return AKEY_FULLSTOP; if (Key_Sate[RETROK_MINUS])return AKEY_MINUS; + if (Key_Sate[RETROK_PLUS])return AKEY_PLUS; if (Key_Sate[RETROK_EQUALS])return AKEY_EQUAL; if (Key_Sate[RETROK_LEFTBRACKET])return AKEY_BRACKETLEFT; if (Key_Sate[RETROK_RIGHTBRACKET])return AKEY_BRACKETRIGHT; if (Key_Sate[RETROK_SEMICOLON])return AKEY_SEMICOLON; if (Key_Sate[RETROK_QUOTE])return AKEY_QUOTE; if (Key_Sate[RETROK_SLASH])return AKEY_SLASH; + if (Key_Sate[RETROK_ASTERISK])return AKEY_ASTERISK; + if (Key_Sate[RETROK_LESS])return AKEY_LESS; + if (Key_Sate[RETROK_GREATER])return AKEY_GREATER; + if (Key_Sate[RETROK_UNDERSCORE])return AKEY_UNDERSCORE; + + if (Key_Sate[RETROK_F7])return AKEY_F1; + if (Key_Sate[RETROK_F8])return AKEY_F2; + if (Key_Sate[RETROK_F9])return AKEY_F3; + if (Key_Sate[RETROK_F10])return AKEY_F4; } @@ -581,6 +615,8 @@ int PLATFORM_Keyboard(void) return AKEY_ESCAPE; if (mbt[RETRO_DEVICE_ID_JOYPAD_B]) return AKEY_RETURN; + if (mbt[RETRO_DEVICE_ID_JOYPAD_Y]) + return AKEY_HELP; } if (UI_is_active){ diff --git a/libretro/vkbd.c b/libretro/vkbd.c index 3e0fbe5..752fa6a 100644 --- a/libretro/vkbd.c +++ b/libretro/vkbd.c @@ -10,6 +10,7 @@ extern int NPAGE; extern int KCOL; extern int BKGCOLOR; extern int SHIFTON; +extern int CTRLON; void virtual_kdb(char *buffer,int vx,int vy) { @@ -23,7 +24,7 @@ unsigned *pix=(unsigned*)buffer; unsigned short *pix=(unsigned short *)buffer; #endif - page = (NPAGE == -1) ? 0 : 5*NPLGN; + page = (NPAGE == -1) ? 0 : NLIGN*NPLGN; coul = RGB565(28, 28, 31); BKGCOLOR = (KCOL>0?0xFF808080:0); @@ -33,15 +34,55 @@ unsigned short *pix=(unsigned short *)buffer; for(y=0;y" ,RETROK_PERIOD}, - { " /" ," ?" ,RETROK_SLASH}, - { " \\"," \\" ,RETROK_BACKSLASH}, - { "SHFT" ,"SHFT" ,0x25}, + { "Ctl", "Ctl", "Ctl", RETROK_LCTRL}, // page 1, line 4 + { " a ", " A ", "A \x01", RETROK_a}, + { " s ", " S ", "S \x13", RETROK_s}, + { " d ", " D ", "D \x04", RETROK_d}, + { " f ", " F ", "F \x06", RETROK_f}, + { " g ", " G ", "G \x07", RETROK_g}, + { " h ", " H ", "H \x08", RETROK_h}, + { " j ", " J ", "J \x0a", RETROK_j}, + { " k ", " K ", "K \x0b", RETROK_k}, + { " l ", " L ", "L \x0c", RETROK_l}, + { " ; ", " : ", "; \x7b", RETROK_SEMICOLON}, + { "Cap", "Cap", "Cap", RETROK_CAPSLOCK}, - { "PG2","PG2" ,-2}, //40+8 - { "TAB","TAB" ,0x54}, - { "CPSL" ,"CPSL" ,0x86}, - { "RET" ,"RET" ,0x22}, - { "DEL" ,"DEL" ,0x97}, - { "CTRL" ,"CTRL" ,0x27}, - { "CLR" ,"CLR" , 0x20}, - { "Spc" ,"Spc",0x57}, - { "= " ,"= " ,RETROK_EQUALS}, - { " *" ," *", RETROK_ASTERISK}, - { "# " ,"# " ,RETROK_HASH}, - { "Ent" ,"Ent",0x06}, + { "Shf", "Shf", "Shf", RETROK_LSHIFT}, // page 1, line 5 + { " z ", " Z ", "Z \x1a", RETROK_z}, + { " x ", " X ", "X \x18", RETROK_x}, + { " c ", " C ", "C \x03", RETROK_c}, + { " v ", " V ", "V \x16", RETROK_v}, + { " b ", " B ", "B \x02", RETROK_b}, + { " n ", " N ", "N \x0e", RETROK_n}, + { " m ", " M ", "M \x0d", RETROK_m}, + { " , ", " [ ", ", \x00", RETROK_COMMA}, + { " . ", " ] ", ". \x60", RETROK_PERIOD}, + { " \x9c ", " \x9c ", " \x9c ", RETROK_UP}, + { "Inv", "Inv", "Inv", RETROK_LSUPER}, + + { "OPC", "OPC", "OPC", -5}, // page 1, line 6 + { "Spc", "Spc", "Spc", RETROK_SPACE}, + { " + ", " \\ ", " \x1e ", RETROK_PLUS}, + { " _ ", " - ", " \x1c ", RETROK_UNDERSCORE}, + { " = ", " | ", " \x1d ", RETROK_EQUALS}, + { " * ", " ^ ", " \x1f ", RETROK_ASTERISK}, + { " / ", " ? ", " / ", RETROK_SLASH}, + { " < ", " < ", " < ", RETROK_LESS}, + { " > ", " > ", " > ", RETROK_GREATER}, + { " \x9e ", " \x9e ", " \x9e ", RETROK_LEFT}, + { " \x9d ", " \x9d ", " \x9d ", RETROK_DOWN}, + { " \x9f ", " \x9f ", " \x9f ", RETROK_RIGHT}, - { "ESC" ,"ESC" ,RETROK_ESCAPE },//50+1° - { " 1" ," !" , RETROK_1 },//0 - { " 2" ," \"" ,RETROK_2 }, - { " 3" ," #" ,RETROK_3 }, - { " 4" ," $" ,RETROK_4 }, - { " 5" ," %" ,RETROK_5 }, - { " 6" ," &" ,RETROK_6 }, - { " 7" ," \'" ,RETROK_7 }, - { " 8" ," (" ,RETROK_8 }, - { " 9" ," )" ,RETROK_9 }, - { " 0" ," _" ,RETROK_0 }, - { " ^" ,"Pnd" ,0x30 }, + { "Esc", "Esc", "Esc", RETROK_ESCAPE}, // page 2, line 1 + { "HLP", "HLP", "HLP", RETROK_F6}, + { "STA", "STA", "STA", RETROK_F4}, + { "SEL", "SEL", "SEL", RETROK_F3}, + { "OPT", "OPT", "OPT", RETROK_F2}, + { "RES", "RES", "RES", RETROK_F5}, + { " F1", " F1", " F1", RETROK_F7}, + { " F2", " F2", " F2", RETROK_F8}, + { " F3", " F3", " F3", RETROK_F9}, + { " F4", " F4", " F4", RETROK_F10}, + { "GUI", "GUI", "GUI", RETROK_F1}, + { "Brk", "Brk", "Brk", RETROK_PAUSE}, - { " F7" ," F7" ,RETROK_F7}, //60+12 - { " F8" ," F8" ,RETROK_F8}, - { " F9" ," F9" ,RETROK_F9}, - { " F0" ," F0" ,RETROK_F10}, - { " t" ," T" ,0x63}, - { " /\\" ," /\\" ,0x00}, - { " u" ," U" ,0x52}, - { " i" ," I" ,0x43}, - { " o" ," O" ,0x42}, - { " p" ," P" ,0x33}, - { " @" ," |" ,0x32}, - { " [" ," [" ,0x21}, + { "Esc", "Esc", "Esc", RETROK_ESCAPE}, // page 2, line 2 + { "HLP", "HLP", "HLP", RETROK_F6}, + { "STA", "STA", "STA", RETROK_F4}, + { "SEL", "SEL", "SEL", RETROK_F3}, + { "OPT", "OPT", "OPT", RETROK_F2}, + { "RES", "RES", "RES", RETROK_F5}, + { " F1", " F1", " F1", RETROK_F7}, + { " F2", " F2", " F2", RETROK_F8}, + { " F3", " F3", " F3", RETROK_F9}, + { " F4", " F4", " F4", RETROK_F10}, + { "GUI", "GUI", "GUI", RETROK_F1}, + { "Brk", "Brk", "Brk", RETROK_PAUSE}, - { " F4" ," F4" ,RETROK_F4}, //70+14 - { " F5" ," F5" ,RETROK_F5}, - { " F6" ," F6" ,RETROK_F6}, - { " ." ," ." ,0x07}, - { " <-" ," <-" ,0x10}, - { "COPY" ,"COPY" ,0x11}, - { " ->" ," ->" ,0x01}, - { " r" ," R" ,RETROK_r}, - { " p" ," P" ,RETROK_p}, - { "= " ,"= " ,RETROK_EQUALS}, - { " *" ," *", RETROK_ASTERISK}, - { "# " ,"# " ,RETROK_HASH}, + { "Tab", "Tab", "Tab", RETROK_TAB}, // page 2, line 3 + { " q ", " Q ", "Q \x11", RETROK_q}, + { " w ", " W ", "W \x17", RETROK_w}, + { " e ", " E ", "E \x05", RETROK_e}, + { " r ", " R ", "R \x12", RETROK_r}, + { " \x9c ", " \x9c ", " \x9c ", RETROK_UP}, + { " y ", " Y ", "Y \x19", RETROK_y}, + { " u ", " U ", "U \x15", RETROK_u}, + { " i ", " I ", "I \x09", RETROK_i}, + { " o ", " O ", "O \x0f", RETROK_o}, + { " p ", " P ", "P \x10", RETROK_p}, + { "Ret", "Ret", "Ret", RETROK_RETURN}, - { " F1" ," F1" ,RETROK_F1},//80+16 - { " F2" ," F2" ,RETROK_F2}, - { " F3" ," F3" ,RETROK_F3}, - { "Ent" ,"Ent" ,0x06}, - { " b" ," B" ,0x66}, - { " \\/" ," \\/" ,0x02}, - { " m"," M" ,0x46}, - { " ,"," <" ,0x47}, - { " ."," >" ,0x37}, - { "TAPE" ,"TAPE" ,-8}, - { "EXIT","EXIT" ,-6}, - { "SNA" ,"SNA" ,-7}, + { "Ctl", "Ctl", "Ctl", RETROK_LCTRL}, // page 2, line 4 + { " a ", " A ", "A \x01", RETROK_a}, + { " s ", " S ", "S \x13", RETROK_s}, + { " d ", " D ", "D \x04", RETROK_d}, + { " \x9e ", " \x9e ", " \x9e ", RETROK_LEFT}, + { "Ret", "Ret", "Ret", RETROK_RETURN}, + { " \x9f ", " \x9f ", " \x9f ", RETROK_RIGHT}, + { " j ", " J ", "J \x0a", RETROK_j}, + { " k ", " K ", "K \x0b", RETROK_k}, + { " l ", " L ", "L \x0c", RETROK_l}, + { " ; ", " : ", "; \x7b", RETROK_SEMICOLON}, + { "Cap", "Cap", "Cap", RETROK_CAPSLOCK}, + { "Shf", "Shf", "Shf", RETROK_LSHIFT}, // page 2, line 5 + { " z ", " Z ", "Z \x1a", RETROK_z}, + { " x ", " X ", "X \x18", RETROK_x}, + { " c ", " C ", "C \x03", RETROK_c}, + { " v ", " V ", "V \x16", RETROK_v}, + { " \x9d ", " \x9d ", " \x9d ", RETROK_DOWN}, + { " n ", " N ", "N \x0e", RETROK_n}, + { " m ", " M ", "M \x0d", RETROK_m}, + { " , ", " [ ", ", \x00", RETROK_COMMA}, + { " . ", " ] ", ". \x60", RETROK_PERIOD}, + { " / ", " ? ", " / ", RETROK_SLASH}, + { "Inv", "Inv", "Inv", RETROK_LSUPER}, - { "PG1","PG1" ,-2},//90+18 - { "DSK","DSK" ,-5}, - { "GUI","GUI" ,-13}, - { "COL" ,"COL",-3}, - { "CTRL" ,"CTRL" ,0x27}, - { "SPC" ,"SPC" ,0x57}, - { "SHFT" ,"SHFT" ,0x25}, - { "ESC","ESC",0x82}, - { "CLR" ,"CLR",0x20}, - { "DEL" ,"DEL",0x97}, - { "Ent" ,"Ent",0x22}, - { "KBD" ,"KBD",-4}, + { "PG1", "PG1", "PG1", -2}, // page 2, line 6 + { "Spc", "Spc", "Spc", RETROK_SPACE}, + { "Del", "Del", "Del", RETROK_DELETE}, + { "Clr", "Clr", "Clr", RETROK_HOME}, + { "Ins", "Ins", "Ins", RETROK_INSERT}, + { " + ", " \\ ", " \x1e ", RETROK_PLUS}, + { " _ ", " - ", " \x1c ", RETROK_UNDERSCORE}, + { " = ", " | ", " \x1d ", RETROK_EQUALS}, + { " * ", " ^ ", " \x1f ", RETROK_ASTERISK}, + { " < ", " < ", " < ", RETROK_LESS}, + { " > ", " > ", " > ", RETROK_GREATER}, + { "PG1", "PG1", "PG1", -2}, } ; From b59fb7e92577b734cfdd7b73bfc9821bfab247c2 Mon Sep 17 00:00:00 2001 From: crystalct Date: Sat, 29 May 2021 09:38:27 +0200 Subject: [PATCH 2/2] Fixed PS3/Psl1ght build (#72) --- Makefile | 18 +++++++---- atari800/src/atari.c | 2 ++ atari800/src/cfg.c | 12 +++++++ atari800/src/devices.h | 6 ++++ atari800/src/ide.c | 2 +- atari800/src/ui_basic.c | 3 ++ atari800/src/util.c | 5 +++ libretro/config.h | 30 +++++++++++++++++ libretro/libretro-common/include/memmap.h | 2 +- .../libretro-common/vfs/vfs_implementation.c | 32 ++++++++++++++++++- 10 files changed, 102 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index 758490e..1d701bb 100644 --- a/Makefile +++ b/Makefile @@ -171,13 +171,17 @@ else ifeq ($(platform), qnx) PLATFORM_DEFINES := -D__BLACKBERRY_QNX__ -fexceptions -marm -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=softfp # Lightweight PS3 Homebrew SDK -else ifeq ($(platform), psl1ght) - TARGET := $(TARGET_NAME)_libretro_psl1ght.a - CC = $(PS3DEV)/ppu/bin/ppu-gcc$(EXE_EXT) - CC_AS = $(PS3DEV)/ppu/bin/ppu-gcc$(EXE_EXT) - CXX = $(PS3DEV)/ppu/bin/ppu-g++$(EXE_EXT) - AR = $(PS3DEV)/ppu/bin/ppu-ar$(EXE_EXT) - PLATFORM_DEFINES := +else ifneq (,$(filter $(platform), ps3 psl1ght)) + ifeq ($(platform), psl1ght) + PLATFORM_DEFINES := -D__PS3__ -D__PSLIGHT__ + else + PLATFORM_DEFINES := -D__PS3__ + endif + TARGET := $(TARGET_NAME)_libretro_$(platform).a + CC = $(PS3DEV)/ppu/bin/ppu-$(COMMONLV)gcc$(EXE_EXT) + CC_AS = $(PS3DEV)/ppu/bin/ppu-$(COMMONLV)gcc$(EXE_EXT) + CXX = $(PS3DEV)/ppu/bin/ppu-$(COMMONLV)g++$(EXE_EXT) + AR = $(PS3DEV)/ppu/bin/ppu-$(COMMONLV)ar$(EXE_EXT) STATIC_LINKING = 1 HAVE_COMPAT = 1 diff --git a/atari800/src/atari.c b/atari800/src/atari.c index f71bc4a..d099618 100644 --- a/atari800/src/atari.c +++ b/atari800/src/atari.c @@ -443,7 +443,9 @@ int Atari800_Initialise(int *argc, char *argv[]) #if defined(__LIBRETRO__) SYSROM_FindInDir(retro_system_directory, TRUE); #endif +#if !defined(__PS3__) && !defined(__PSL1GHT__) SYSROM_FindInDir(".", TRUE); /* current directory */ +#endif #if defined(unix) || defined(__unix__) || defined(__linux__) SYSROM_FindInDir("/usr/share/atari800", TRUE); #endif diff --git a/atari800/src/cfg.c b/atari800/src/cfg.c index 224c8ff..90b721a 100644 --- a/atari800/src/cfg.c +++ b/atari800/src/cfg.c @@ -64,6 +64,9 @@ #endif int CFG_save_on_exit = FALSE; +#if defined(__LIBRETRO__) +extern const char *retro_system_directory; +#endif /* If another default path config path is defined use it otherwise use the default one */ @@ -75,6 +78,10 @@ int CFG_save_on_exit = FALSE; #define SYSTEM_WIDE_CFG_FILE "/etc/atari800.cfg" #endif +#if defined (__PS3__) || defined(__PSL1GHT__) +#define DEFAULT_CFG_NAME "/atari800.cfg" +#endif + #ifdef WIIU #define DEFAULT_CFG_NAME "sd:/retroarch/cores/system/atari800.cfg" #define SYSTEM_WIDE_CFG_FILE "sd:/retroarch/cores/system/atari800.cfg" @@ -101,11 +108,16 @@ int CFG_LoadConfig(const char *alternate_config_filename) } /* else use the default config name under the HOME folder */ else { +#if !defined(__PS3__) && !defined(__PSL1GHT__) char *home = getenv("HOME"); if (home != NULL) Util_catpath(rtconfig_filename, home, DEFAULT_CFG_NAME); else strcpy(rtconfig_filename, DEFAULT_CFG_NAME); +#else + strcpy(rtconfig_filename, retro_system_directory); + strcat(rtconfig_filename, DEFAULT_CFG_NAME); +#endif } fp = fopen(fname, "r"); diff --git a/atari800/src/devices.h b/atari800/src/devices.h index 9c707d1..b24bef1 100644 --- a/atari800/src/devices.h +++ b/atari800/src/devices.h @@ -4,6 +4,12 @@ #include /* FILENAME_MAX */ #include "atari.h" /* UWORD */ +#if defined(__PS3__) && !defined(__PSL1GHT__) +#define S_IREAD S_IRUSR +#define S_IWRITE S_IWUSR +#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) +#endif + int Devices_Initialise(int *argc, char *argv[]); void Devices_Exit(void); int Devices_PatchOS(void); diff --git a/atari800/src/ide.c b/atari800/src/ide.c index 7ce2a7b..f8413d3 100644 --- a/atari800/src/ide.c +++ b/atari800/src/ide.c @@ -81,7 +81,7 @@ # define fseeko _fseek # define ftello _ftell # define PRId64 "lld" -#elif defined (__DJGPP__) +#elif defined (__DJGPP__) || defined(__PS3__) && !defined(__PSL1GHT__) # define fseeko fseek # define ftello ftell # define PRId64 "lld" diff --git a/atari800/src/ui_basic.c b/atari800/src/ui_basic.c index 708e648..baed0ad 100644 --- a/atari800/src/ui_basic.c +++ b/atari800/src/ui_basic.c @@ -44,6 +44,9 @@ #ifdef HAVE_WINDOWS_H #include #endif +#if defined(__PS3__) && !defined(__PSL1GHT__) +#include "devices.h" +#endif #include "antic.h" #include "atari.h" diff --git a/atari800/src/util.c b/atari800/src/util.c index 970cf32..0fbc6d8 100644 --- a/atari800/src/util.c +++ b/atari800/src/util.c @@ -57,6 +57,11 @@ #include #endif +#if defined(__PS3__) && !defined(__PSL1GHT__) +#include +#define usleep sys_timer_usleep +#endif + #include "atari.h" #include "platform.h" #include "util.h" diff --git a/libretro/config.h b/libretro/config.h index 589451f..b5be5e3 100644 --- a/libretro/config.h +++ b/libretro/config.h @@ -583,3 +583,33 @@ #undef HAVE_NANOSLEEP #endif + +#if defined(__PS3__) && !defined(__PSL1GHT__) +#undef HAVE_FSEEKO +#undef HAVE_GETCWD +#undef HAVE_NANOSLEEP +#undef HAVE_MKSTEMP +#undef HAVE_MKTEMP +#undef HAVE_SIGNAL +#undef HAVE_SIGNAL_H +#undef HAVE_SYSTEM +#undef HAVE_TMPFILE +#undef HAVE_TMPNAM +#undef HAVE_STRINGS_H +#include +#define O_RDONLY CELL_FS_O_RDONLY +#define O_WRONLY CELL_FS_O_WRONLY +#define O_CREAT CELL_FS_O_CREAT +#define O_TRUNC CELL_FS_O_TRUNC +#define O_RDWR CELL_FS_O_RDWR +#define sysFsStat cellFsStat +#define sysFSStat CellFsStat +#define sysFSDirent CellFsDirent +#define sysFsOpendir cellFsOpendir +#define sysFsReaddir cellFsReaddir +#define sysFSDirent CellFsDirent +#define sysFsClosedir cellFsClosedir +#define WORDS_BIGENDIAN 1 +#define FS_SUCCEEDED 0 +#define FS_TYPE_DIR 1 +#endif diff --git a/libretro/libretro-common/include/memmap.h b/libretro/libretro-common/include/memmap.h index ebbc307..8897877 100644 --- a/libretro/libretro-common/include/memmap.h +++ b/libretro/libretro-common/include/memmap.h @@ -26,7 +26,7 @@ #include #include -#if defined(PSP) || defined(PS2) || defined(GEKKO) || defined(VITA) || defined(_XBOX) || defined(_3DS) || defined(WIIU) || defined(SWITCH) || defined(HAVE_LIBNX) +#if defined(PSP) || defined(PS2) || defined(GEKKO) || defined(VITA) || defined(_XBOX) || defined(_3DS) || defined(WIIU) || defined(SWITCH) || defined(HAVE_LIBNX) || defined(__PS3__) || defined(__PSL1GHT__) /* No mman available */ #elif defined(_WIN32) && !defined(_XBOX) #include diff --git a/libretro/libretro-common/vfs/vfs_implementation.c b/libretro/libretro-common/vfs/vfs_implementation.c index 034d8f3..46259e6 100644 --- a/libretro/libretro-common/vfs/vfs_implementation.c +++ b/libretro/libretro-common/vfs/vfs_implementation.c @@ -909,6 +909,19 @@ int retro_vfs_stat_impl(const char *path, int32_t *size) orbisDclose(dir_ret); is_character_special = S_ISCHR(buf.st_mode); +#elif defined(__PSL1GHT__) || defined(__PS3__) + /* Lowlevel Lv2 */ + sysFSStat buf; + + if (!path || !*path) + return 0; + if (sysFsStat(path, &buf) < 0) + return 0; + + if (size) + *size = (int32_t)buf.st_size; + + is_dir = ((buf.st_mode & S_IFMT) == S_IFDIR); #elif defined(_WIN32) /* Windows */ DWORD file_info; @@ -1081,6 +1094,10 @@ struct libretro_vfs_implementation_dir #elif defined(VITA) || defined(PSP) SceUID directory; SceIoDirent entry; +#elif defined(__PSL1GHT__) || defined(__PS3__) + int error; + int directory; + sysFSDirent entry; #elif defined(ORBIS) int directory; struct dirent entry; @@ -1096,6 +1113,8 @@ static bool dirent_check_error(libretro_vfs_implementation_dir *rdir) return (rdir->directory == INVALID_HANDLE_VALUE); #elif defined(VITA) || defined(PSP) || defined(ORBIS) return (rdir->directory < 0); +#elif defined(__PSL1GHT__) || defined(__PS3__) + return (rdir->error != FS_SUCCEEDED); #else return !(rdir->directory); #endif @@ -1159,6 +1178,8 @@ libretro_vfs_implementation_dir *retro_vfs_opendir_impl( #elif defined(_3DS) rdir->directory = !string_is_empty(name) ? opendir(name) : NULL; rdir->entry = NULL; +#elif defined(__PSL1GHT__) || defined(__PS3__) + rdir->error = sysFsOpendir(name, &rdir->directory); #elif defined(ORBIS) rdir->directory = orbisDopen(name); #else @@ -1194,6 +1215,10 @@ bool retro_vfs_readdir_impl(libretro_vfs_implementation_dir *rdir) return (rdir->directory != INVALID_HANDLE_VALUE); #elif defined(VITA) || defined(PSP) return (sceIoDread(rdir->directory, &rdir->entry) > 0); +#elif defined(__PSL1GHT__) || defined(__PS3__) + uint64_t nread; + rdir->error = sysFsReaddir(rdir->directory, &rdir->entry, &nread); + return (nread != 0); #elif defined(ORBIS) return (orbisDread(rdir->directory, &rdir->entry) > 0); #else @@ -1214,7 +1239,7 @@ const char *retro_vfs_dirent_get_name_impl(libretro_vfs_implementation_dir *rdir if (name) free(name); return (char*)rdir->entry.cFileName; -#elif defined(VITA) || defined(PSP) || defined(ORBIS) +#elif defined(VITA) || defined(PSP) || defined(ORBIS) || defined(__PSL1GHT__) || defined(__PS3__) return rdir->entry.d_name; #else if (!rdir || !rdir->entry) @@ -1235,6 +1260,9 @@ bool retro_vfs_dirent_is_dir_impl(libretro_vfs_implementation_dir *rdir) #elif defined(VITA) return SCE_S_ISDIR(entry->d_stat.st_mode); #endif +#elif defined(__PSL1GHT__) || defined(__PS3__) + sysFSDirent* entry = (sysFSDirent*)&rdir->entry; + return (entry->d_type == FS_TYPE_DIR); #elif defined(ORBIS) const struct dirent *entry = &rdir->entry; if (entry->d_type == DT_DIR) @@ -1271,6 +1299,8 @@ int retro_vfs_closedir_impl(libretro_vfs_implementation_dir *rdir) FindClose(rdir->directory); #elif defined(VITA) || defined(PSP) sceIoDclose(rdir->directory); +#elif defined(__PSL1GHT__) || defined(__PS3__) + rdir->error = sysFsClosedir(rdir->directory); #elif defined(ORBIS) orbisDclose(rdir->directory); #else