X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=platform%2Fgp2x%2Femu.c;h=b9079a925112ee75569db477e92b59f7828b0f32;hb=b682092681909a8c8e8165b9c3898833e36708b7;hp=dc785210ab99d9b979a7e567253def0fec9a1bb5;hpb=f8af96349ea464111fbef3c6528016c3dc34cdcf;p=picodrive.git diff --git a/platform/gp2x/emu.c b/platform/gp2x/emu.c index dc78521..b9079a9 100644 --- a/platform/gp2x/emu.c +++ b/platform/gp2x/emu.c @@ -16,17 +16,19 @@ #include "emu.h" #include "gp2x.h" -#include "usbjoy.h" #include "menu.h" +#include "../linux/usbjoy.h" #include "../common/arm_utils.h" #include "../common/fonts.h" #include "../common/emu.h" #include "../common/config.h" +#include "../common/input.h" +#include "../linux/sndout_oss.h" #include "cpuctrl.h" -#include -#include -#include +#include +#include +#include #include //#define PFRAMES @@ -122,12 +124,8 @@ void emu_Deinit(void) SRam.changed = 0; } - if (!(currentConfig.EmuOpt & 0x20)) { - config_writelrom(PicoConfigFile); -#ifndef NO_SYNC - sync(); -#endif - } + if (!(currentConfig.EmuOpt & EOPT_NO_AUTOSVCFG)) + emu_writelrom(); free(PicoDraw2FB); @@ -487,7 +485,7 @@ static void update_volume(int has_changed, int is_up) if (vol > 0) vol--; } wait_frames = 0; - gp2x_sound_volume(vol, vol); + sndout_oss_setvol(vol, vol); currentConfig.volume = vol; } sprintf(noticeMsg, "VOL: %02i", vol); @@ -583,6 +581,10 @@ static void updateKeys(void) keys &= CONFIGURABLE_KEYS; keys2 = keys; +#if 1 + /* FIXME: combos, player2 */ + allActions[0] = in_update(); +#else for (i = 0; i < 32; i++) { if (keys2 & (1 << i)) @@ -610,13 +612,14 @@ static void updateKeys(void) } } } +#endif // add joy inputs if (num_of_joys > 0) { - gp2x_usbjoy_update(); + usbjoy_update(); for (joy = 0; joy < num_of_joys; joy++) { - int btns = gp2x_usbjoy_check2(joy); + int btns = usbjoy_check2(joy); for (i = 0; i < 32; i++) { if (btns & (1 << i)) { int acts = currentConfig.JoyBinds[joy][i]; @@ -662,7 +665,47 @@ static void updateSound(int len) /* avoid writing audio when lagging behind to prevent audio lag */ if (PicoSkipFrame != 2) - gp2x_sound_write(PsndOut, len<<1); + sndout_oss_write(PsndOut, len<<1); +} + +void emu_startSound(void) +{ + static int PsndRate_old = 0, PicoOpt_old = 0, pal_old = 0; + int target_fps = Pico.m.pal ? 50 : 60; + + PsndOut = NULL; + + // prepare sound stuff + if (currentConfig.EmuOpt & 4) + { + int snd_excess_add; + if (PsndRate != PsndRate_old || (PicoOpt&0x20b) != (PicoOpt_old&0x20b) || Pico.m.pal != pal_old || + ((PicoOpt&0x200) && crashed_940)) { + PsndRerate(Pico.m.frame_count ? 1 : 0); + } + snd_excess_add = ((PsndRate - PsndLen*target_fps)<<16) / target_fps; + printf("starting audio: %i len: %i (ex: %04x) stereo: %i, pal: %i\n", + PsndRate, PsndLen, snd_excess_add, (PicoOpt&8)>>3, Pico.m.pal); + sndout_oss_start(PsndRate, 16, (PicoOpt&8)>>3); + sndout_oss_setvol(currentConfig.volume, currentConfig.volume); + PicoWriteSound = updateSound; + update_volume(0, 0); + memset(sndBuffer, 0, sizeof(sndBuffer)); + PsndOut = sndBuffer; + PsndRate_old = PsndRate; + PicoOpt_old = PicoOpt; + pal_old = Pico.m.pal; + } +} + +void emu_endSound(void) +{ +} + +/* wait until we can write more sound */ +void emu_waitSound(void) +{ + // don't need to do anything, writes will block by themselves } @@ -776,8 +819,7 @@ static void tga_dump(void) void emu_Loop(void) { - static int gp2x_old_clock = 200; - static int PsndRate_old = 0, PicoOpt_old = 0, EmuOpt_old = 0, pal_old = 0; + static int gp2x_old_clock = 200, EmuOpt_old = 0; char fpsbuff[24]; // fps count c string struct timeval tval; // timing int pframes_done, pframes_shown, pthissec; // "period" frames, used for sync @@ -821,29 +863,7 @@ void emu_Loop(void) target_frametime = 1000000/target_fps; reset_timing = 1; - // prepare sound stuff - if (currentConfig.EmuOpt & 4) - { - int snd_excess_add; - if (PsndRate != PsndRate_old || (PicoOpt&0x20b) != (PicoOpt_old&0x20b) || Pico.m.pal != pal_old || - ((PicoOpt&0x200) && crashed_940)) { - PsndRerate(Pico.m.frame_count ? 1 : 0); - } - snd_excess_add = ((PsndRate - PsndLen*target_fps)<<16) / target_fps; - printf("starting audio: %i len: %i (ex: %04x) stereo: %i, pal: %i\n", - PsndRate, PsndLen, snd_excess_add, (PicoOpt&8)>>3, Pico.m.pal); - gp2x_start_sound(PsndRate, 16, (PicoOpt&8)>>3); - gp2x_sound_volume(currentConfig.volume, currentConfig.volume); - PicoWriteSound = updateSound; - update_volume(0, 0); - memset(sndBuffer, 0, sizeof(sndBuffer)); - PsndOut = sndBuffer; - PsndRate_old = PsndRate; - PicoOpt_old = PicoOpt; - pal_old = Pico.m.pal; - } else { - PsndOut = NULL; - } + emu_startSound(); // prepare CD buffer if (PicoAHW & PAHW_MCD) PicoCDBufferInit();