mirror of
https://github.com/Oibaf66/fbzx-wii.git
synced 2024-12-29 01:51:53 +01:00
Auto turbo mode, B button as escape, IR wiimote in virtual keyboard
This commit is contained in:
parent
badba6a9d7
commit
e1ebc8a118
@ -132,11 +132,22 @@ struct virtkey *get_key_internal()
|
||||
while(1)
|
||||
{
|
||||
uint32_t k;
|
||||
int x,y,i=0;
|
||||
int screen_w = VirtualKeyboard.screen->w;
|
||||
int screen_h = VirtualKeyboard.screen->h;
|
||||
int key_w = 54/RATIO;
|
||||
int key_h = 36/RATIO;
|
||||
int border_x = (screen_w - (key_w * KEY_COLS)) / 2;
|
||||
int border_y = (screen_h - (key_h * KEY_ROWS)) / 2 + 50/RATIO;
|
||||
|
||||
draw();
|
||||
SDL_Flip(VirtualKeyboard.screen);
|
||||
|
||||
SDL_ShowCursor(SDL_ENABLE);
|
||||
|
||||
k = menu_wait_key_press();
|
||||
|
||||
SDL_ShowCursor(SDL_DISABLE);
|
||||
|
||||
if (k & KEY_UP)
|
||||
select_next_kb(0, -1);
|
||||
@ -150,7 +161,15 @@ struct virtkey *get_key_internal()
|
||||
return NULL;
|
||||
else if (k & KEY_SELECT)
|
||||
{
|
||||
virtkey_t *key = &keys[ VirtualKeyboard.sel_y * KEY_COLS + VirtualKeyboard.sel_x ];
|
||||
if (!(k & KEY_SELECT_A)) i= VirtualKeyboard.sel_y * KEY_COLS + VirtualKeyboard.sel_x;
|
||||
else
|
||||
{
|
||||
SDL_GetMouseState(&x, &y);
|
||||
i= (y-border_y+10/RATIO)/key_h * KEY_COLS + (x-border_x+10/RATIO)/key_w;
|
||||
if ((i<0)||(i>=KEY_COLS * KEY_ROWS)) i=KEY_COLS * KEY_ROWS - 1; //NULL
|
||||
}
|
||||
|
||||
virtkey_t *key = &keys[i];
|
||||
|
||||
if ((key->sdl_code == 304) && !keys[3 * KEY_COLS + 8 ].is_done)
|
||||
keys[3 * KEY_COLS + 0 ].is_done = !keys[3 * KEY_COLS + 0 ].is_done; //Caps Shit
|
||||
|
@ -108,6 +108,8 @@ void computer_init () { //Called only on start-up
|
||||
ordenador.joystick[1] = 0; // Cursor
|
||||
ordenador.rumble[0] = 0;
|
||||
ordenador.rumble[1] = 0;
|
||||
ordenador.turbo = 0;
|
||||
ordenador.turbo_state = 0;
|
||||
ordenador.precision = 0;
|
||||
|
||||
ordenador.tape_readed = 0;
|
||||
@ -549,7 +551,7 @@ inline void show_screen (int tstados) {
|
||||
if (ordenador.tstados_counter>=ordenador.tstatodos_frame) {
|
||||
ordenador.tstados_counter-=ordenador.tstatodos_frame;
|
||||
ordenador.interr = 1;
|
||||
if ((ordenador.turbo == 0) || (curr_frames%7 == 0)) ordenador.readkeyboard = 1;
|
||||
if ((ordenador.turbo_state == 0) || (curr_frames%7 == 0)) ordenador.readkeyboard = 1;
|
||||
curr_frames++;
|
||||
}
|
||||
return;
|
||||
@ -678,7 +680,7 @@ inline void show_screen (int tstados) {
|
||||
}
|
||||
}
|
||||
|
||||
//Write the screen from 14339 state
|
||||
//Write the screen from 14339 state for 48K and from 14365 for 128k
|
||||
|
||||
inline void show_screen_precision (int tstados) {
|
||||
|
||||
@ -1507,8 +1509,8 @@ void ResetComputer () {
|
||||
ordenador.lower_border_line = 64 + 192;
|
||||
ordenador.cpufreq = 3500000;
|
||||
ordenador.tstatodos_frame= 69888;
|
||||
ordenador.start_contention = 14335;
|
||||
ordenador.end_contention = 14335+224*192;
|
||||
//ordenador.start_contention = 14335;
|
||||
//ordenador.end_contention = 14335+224*192;
|
||||
ordenador.first_line = 40;
|
||||
ordenador.last_line = 280;
|
||||
}
|
||||
@ -1519,8 +1521,8 @@ void ResetComputer () {
|
||||
ordenador.lower_border_line = 40 + 192;
|
||||
ordenador.cpufreq = 3527500;
|
||||
ordenador.tstatodos_frame= 59136;
|
||||
ordenador.start_contention = 8959;
|
||||
ordenador.end_contention = 8959+224*192;
|
||||
//ordenador.start_contention = 8959;
|
||||
//ordenador.end_contention = 8959+224*192;
|
||||
ordenador.first_line = 16;
|
||||
ordenador.last_line = 256;
|
||||
}
|
||||
@ -1543,8 +1545,8 @@ void ResetComputer () {
|
||||
ordenador.lower_border_line = 63 + 192;
|
||||
ordenador.cpufreq = 3546900;
|
||||
ordenador.tstatodos_frame= 70908;
|
||||
ordenador.start_contention = 14361;
|
||||
ordenador.end_contention = 14361+228*192;
|
||||
//ordenador.start_contention = 14361;
|
||||
//ordenador.end_contention = 14361+228*192;
|
||||
ordenador.first_line = 40;
|
||||
ordenador.last_line = 280;
|
||||
ordenador.start_screen=45;
|
||||
|
@ -78,8 +78,8 @@ struct computer {
|
||||
int tstatodos_frame; //number of tstados per frame
|
||||
int pixels_octect; //2 bits in the octect
|
||||
int pixels_word; //2 bits in the word
|
||||
int start_contention; //start tstados for contention
|
||||
int end_contention; //end tstados for contention
|
||||
//int start_contention; //start tstados for contention
|
||||
//int end_contention; //end tstados for contention
|
||||
|
||||
unsigned char screen_snow; // 0-> no emulate snow; 1-> emulate snow
|
||||
unsigned char fetch_state;
|
||||
@ -219,6 +219,7 @@ struct computer {
|
||||
unsigned char other_ret; // 0=no change; 1=memory returns RET (201)
|
||||
|
||||
unsigned char turbo;
|
||||
unsigned char turbo_state;
|
||||
unsigned int keyboard_buffer[2][10];
|
||||
unsigned int kbd_buffer_pointer;
|
||||
unsigned char *key;
|
||||
|
@ -661,6 +661,7 @@ int save_config(struct computer *object, char *filename) {
|
||||
fprintf(fconfig,"rumble2=%c%c",48+object->rumble[1],10);
|
||||
fprintf(fconfig,"port=%c%c",48+object->port,10);
|
||||
fprintf(fconfig,"autoconf=%c%c",48+object->autoconf,10);
|
||||
fprintf(fconfig,"turbo=%c%c",48+object->turbo,10);
|
||||
|
||||
|
||||
for (joy_n=0; joy_n<2; joy_n++)
|
||||
@ -829,7 +830,7 @@ int load_config(struct computer *object, char *filename) {
|
||||
FILE *fconfig;
|
||||
unsigned char volume=255,mode128k=255,issue=255,ntsc=255, joystick1=255,joystick2=255,ay_emul=255,mdr_active=255,
|
||||
dblscan=255,framerate =255, screen =255, text=255, precision=255, bw=255, tap_fast=255, audio_mode=255,
|
||||
joypad1=255, joypad2=255, rumble1=255, rumble2=255, joy_n=255, key_n=255, port=255, autoconf=255;
|
||||
joypad1=255, joypad2=255, rumble1=255, rumble2=255, joy_n=255, key_n=255, port=255, autoconf=255, turbo=225;
|
||||
|
||||
if (filename) strcpy(config_path,filename);
|
||||
else return -2;
|
||||
@ -951,6 +952,10 @@ int load_config(struct computer *object, char *filename) {
|
||||
autoconf=line[9]-'0';
|
||||
continue;
|
||||
}
|
||||
if (!strncmp(line,"turbo=",6)) {
|
||||
turbo=line[6]-'0';
|
||||
continue;
|
||||
}
|
||||
if (!strncmp(line,"joybutton_",10)) {
|
||||
sscanf(line, "joybutton_%c_%c=%3d",&joy_n ,&key_n, &key_sdl);
|
||||
if ((joy_n<50) && (joy_n>47) && (key_n<119) && (key_n>96))
|
||||
@ -1026,6 +1031,9 @@ int load_config(struct computer *object, char *filename) {
|
||||
if (autoconf<2) {
|
||||
object->autoconf=autoconf;
|
||||
}
|
||||
if (turbo<2) {
|
||||
object->turbo=turbo;
|
||||
}
|
||||
|
||||
fclose(fconfig);
|
||||
return 0;
|
||||
|
@ -79,10 +79,10 @@ static const char *emulation_messages[] = {
|
||||
/*01*/ "^|48k_2|48K_3|128k|+2|+2A/+3|128K_Sp|NTSC",
|
||||
/*02*/ "Frame rate",
|
||||
/*03*/ "^|100%|50%|33%|25%|20%",
|
||||
/*04*/ "Tap fast speed",
|
||||
/*04*/ "Tap instant load",
|
||||
/*05*/ "^|on|off",
|
||||
/*06*/ "Turbo mode",
|
||||
/*07*/ "^|off|speed|ultraspeed",
|
||||
/*07*/ "^|off|auto|fast|ultrafast",
|
||||
/*08*/ "Precision",
|
||||
/*09*/ "^|on|off",
|
||||
NULL
|
||||
@ -523,19 +523,24 @@ static void emulation_settings(void)
|
||||
{
|
||||
switch(ordenador.turbo)
|
||||
{
|
||||
case 1: //auto
|
||||
ordenador.precision =0;
|
||||
case 0: //off
|
||||
update_frequency(0); //set machine frequency
|
||||
jump_frames=0;
|
||||
break;
|
||||
case 1: //speed
|
||||
ordenador.turbo_state=0;
|
||||
break;
|
||||
case 2: //fast
|
||||
update_frequency(10000000);
|
||||
jump_frames=4;
|
||||
ordenador.precision =0;
|
||||
ordenador.turbo_state=2;
|
||||
break;
|
||||
case 2: //ultra speed
|
||||
case 3: //ultra fast
|
||||
update_frequency(15000000);
|
||||
jump_frames=24;
|
||||
ordenador.precision =0;
|
||||
ordenador.turbo_state=3;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@ -550,6 +555,7 @@ static void emulation_settings(void)
|
||||
update_frequency(0);
|
||||
jump_frames=0;
|
||||
ordenador.turbo =0;
|
||||
ordenador.turbo_state=0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -774,7 +774,7 @@ uint32_t menu_wait_key_press(void)
|
||||
SDL_Joystick *joy;
|
||||
static int joy_keys_changed;
|
||||
static int joy_keys_last;
|
||||
static int joy_bottons_last[2][7];
|
||||
static int joy_bottons_last[2][8];
|
||||
SDL_JoystickUpdate();
|
||||
/* Wii-specific, sorry */
|
||||
for (nr = 0; nr < ordenador.joystick_number; nr++) {
|
||||
@ -806,14 +806,16 @@ uint32_t menu_wait_key_press(void)
|
||||
else if( axis1 > 15000 ) keys |= KEY_DOWN;
|
||||
|
||||
|
||||
if ((!SDL_JoystickGetButton(joy, 0) && joy_bottons_last[nr][0]) || /* A */
|
||||
(!SDL_JoystickGetButton(joy, 3) && joy_bottons_last[nr][1]) || /* 2 */
|
||||
if (!SDL_JoystickGetButton(joy, 0) && joy_bottons_last[nr][0]) /* A */
|
||||
{keys |= KEY_SELECT; keys |= KEY_SELECT_A;}
|
||||
if ((!SDL_JoystickGetButton(joy, 3) && joy_bottons_last[nr][1]) || /* 2 */
|
||||
(!SDL_JoystickGetButton(joy, 9) && joy_bottons_last[nr][2]) || /* CA */
|
||||
(!SDL_JoystickGetButton(joy, 10) && joy_bottons_last[nr][3])) /* CB */
|
||||
keys |= KEY_SELECT;
|
||||
if ((!SDL_JoystickGetButton(joy, 2) && joy_bottons_last[nr][4]) || /* 1 */
|
||||
(!SDL_JoystickGetButton(joy, 11) && joy_bottons_last[nr][5]) || /* CX */
|
||||
(!SDL_JoystickGetButton(joy, 12) && joy_bottons_last[nr][6])) /* CY */
|
||||
(!SDL_JoystickGetButton(joy, 12) && joy_bottons_last[nr][6])|| /* CY */
|
||||
(!SDL_JoystickGetButton(joy, 1) && joy_bottons_last[nr][7])) /* B */
|
||||
keys |= KEY_ESCAPE;
|
||||
if (SDL_JoystickGetButton(joy, 5) != 0 || /* + */
|
||||
SDL_JoystickGetButton(joy, 18) != 0) /* C+ */
|
||||
@ -829,6 +831,7 @@ uint32_t menu_wait_key_press(void)
|
||||
joy_bottons_last[nr][4] =SDL_JoystickGetButton(joy, 2) ; /* 1 */
|
||||
joy_bottons_last[nr][5] =SDL_JoystickGetButton(joy, 11) ; /* CX */
|
||||
joy_bottons_last[nr][6] =SDL_JoystickGetButton(joy, 12) ; /* CY */
|
||||
joy_bottons_last[nr][7] =SDL_JoystickGetButton(joy, 1) ; /* B */
|
||||
}
|
||||
|
||||
joy_keys_changed = keys != joy_keys_last;
|
||||
@ -885,7 +888,7 @@ uint32_t menu_wait_key_press(void)
|
||||
|
||||
if (keys != 0)
|
||||
break;
|
||||
SDL_Delay(100);
|
||||
SDL_Delay(50);
|
||||
}
|
||||
return keys;
|
||||
}
|
||||
|
@ -38,6 +38,7 @@
|
||||
#define KEY_PAGEDOWN 64
|
||||
#define KEY_PAGEUP 128
|
||||
#define KEY_HELP 256
|
||||
#define KEY_SELECT_A 512
|
||||
|
||||
int FULL_DISPLAY_X; //640
|
||||
int FULL_DISPLAY_Y; //480
|
||||
|
15
src/menus.c
15
src/menus.c
@ -153,9 +153,9 @@ void settings_menu() {
|
||||
print_string(fbuffer,texto,-1,125,12,0,ancho);
|
||||
|
||||
if(ordenador.turbo)
|
||||
sprintf(texto,"TURBO mode: enabled");
|
||||
sprintf(texto,"TURBO auto mode: enabled");
|
||||
else
|
||||
sprintf(texto,"TURBO mode: disabled");
|
||||
sprintf(texto,"TURBO auto mode: disabled");
|
||||
print_string(fbuffer,texto,-1,145,14,0,ancho);
|
||||
|
||||
if (ordenador.bw) {
|
||||
@ -288,14 +288,13 @@ void settings_menu() {
|
||||
break;
|
||||
case SDLK_t:
|
||||
curr_frames=0;
|
||||
update_frequency(0); //set deafult machine frequency
|
||||
jump_frames=0;
|
||||
ordenador.turbo_state = 0;
|
||||
if(ordenador.turbo){
|
||||
update_frequency(0); //set machine frequency
|
||||
ordenador.turbo = 0;
|
||||
jump_frames=0;
|
||||
ordenador.turbo = 0;
|
||||
} else {
|
||||
update_frequency(10000000); //5,0 MHz max emulation speed for wii at full frames
|
||||
ordenador.turbo = 1;
|
||||
jump_frames=4;
|
||||
ordenador.turbo = 1; //Auto mode
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
21
src/tape.c
21
src/tape.c
@ -33,8 +33,25 @@ char elbit=0;
|
||||
inline void tape_read(FILE *fichero, int tstados) {
|
||||
|
||||
if(ordenador.pause)
|
||||
return;
|
||||
|
||||
{
|
||||
if ((ordenador.turbo_state != 0)&&(ordenador.turbo==1))
|
||||
{
|
||||
update_frequency(0); //set machine frequency
|
||||
jump_frames=0;
|
||||
ordenador.turbo_state = 0;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
//Auto ultra fast mode
|
||||
if ((ordenador.turbo_state != 3)&&(ordenador.turbo==1))
|
||||
{
|
||||
update_frequency(15000000);
|
||||
jump_frames=24;
|
||||
ordenador.precision =0;
|
||||
ordenador.turbo_state = 3;
|
||||
}
|
||||
|
||||
if(ordenador.tape_file_type == TAP_TAP)
|
||||
tape_read_tap(fichero,tstados);
|
||||
else
|
||||
|
Loading…
Reference in New Issue
Block a user