X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=gp2x%2Femu.c;h=92a18315fd2cc42dc1333040f866053b696b563d;hb=84e21f25e41b90d9729088dba5991a84330964ea;hp=f580f8434b92f3fe726ba304ec6c3a94dccf84fa;hpb=2b395ee02a212090ac5d499e8e915373d57185e0;p=libpicofe.git diff --git a/gp2x/emu.c b/gp2x/emu.c index f580f84..92a1831 100644 --- a/gp2x/emu.c +++ b/gp2x/emu.c @@ -141,7 +141,7 @@ void emu_prepareDefaultConfig(void) { memset(&defaultConfig, 0, sizeof(defaultConfig)); defaultConfig.EmuOpt = 0x1d | 0x00700; // | <- ram_tmng, confirm_save, cd_leds - defaultConfig.s_PicoOpt = 0x0f | 0x20e00; // | <- use_940, cd_pcm, cd_cdda, svp drc + defaultConfig.s_PicoOpt = 0x0f | POPT_EXT_FM|POPT_EN_MCD_PCM|POPT_EN_MCD_CDDA|POPT_EN_SVP_DRC|POPT_ACC_SPRITES; defaultConfig.s_PsndRate = 44100; defaultConfig.s_PicoRegion = 0; // auto defaultConfig.s_PicoAutoRgnOrder = 0x184; // US, EU, JP @@ -291,26 +291,39 @@ static void blit(const char *fps, const char *notice) // 8bit accurate renderer if (Pico.m.dirtyPal) { + int pallen = 0x40; Pico.m.dirtyPal = 0; - if(Pico.video.reg[0xC]&8) { // shadow/hilight mode + if (Pico.video.reg[0xC]&8) // shadow/hilight mode + { vidConvCpyRGB32(localPal, Pico.cram, 0x40); vidConvCpyRGB32sh(localPal+0x40, Pico.cram, 0x40); vidConvCpyRGB32hi(localPal+0x80, Pico.cram, 0x40); memcpy32(localPal+0xc0, localPal+0x40, 0x40); - localPal[0xc0] = 0x0000c000; - localPal[0xd0] = 0x00c00000; - localPal[0xe0] = 0x00000000; // reserved pixels for OSD - localPal[0xf0] = 0x00ffffff; - gp2x_video_setpalette(localPal, 0x100); - } else if (rendstatus & PDRAW_SONIC_MODE) { // mid-frame palette changes + pallen = 0x100; + } + else if (rendstatus & PDRAW_ACC_SPRITES) { + vidConvCpyRGB32(localPal, Pico.cram, 0x40); + memcpy32(localPal+0x40, localPal, 0x40); + memcpy32(localPal+0x80, localPal, 0x40); + memcpy32(localPal+0xc0, localPal, 0x40); + pallen = 0x100; + } + else if (rendstatus & PDRAW_SONIC_MODE) { // mid-frame palette changes vidConvCpyRGB32(localPal, Pico.cram, 0x40); vidConvCpyRGB32(localPal+0x40, HighPal, 0x40); vidConvCpyRGB32(localPal+0x80, HighPal+0x40, 0x40); - gp2x_video_setpalette(localPal, 0xc0); - } else { + pallen = 0xc0; + } + else { vidConvCpyRGB32(localPal, Pico.cram, 0x40); - gp2x_video_setpalette(localPal, 0x40); } + if (pallen > 0xc0) { + localPal[0xc0] = 0x0000c000; + localPal[0xd0] = 0x00c00000; + localPal[0xe0] = 0x00000000; // reserved pixels for OSD + localPal[0xf0] = 0x00ffffff; + } + gp2x_video_setpalette(localPal, pallen); } } @@ -688,13 +701,13 @@ static void SkipFrame(int do_audio) } -void emu_forcedFrame(void) +void emu_forcedFrame(int opts) { int po_old = PicoOpt; int eo_old = currentConfig.EmuOpt; - PicoOpt &= ~0x0010; - PicoOpt |= 0x4080; // soft_scale | acc_sprites + PicoOpt &= ~0x10; + PicoOpt |= opts|POPT_ACC_SPRITES; // acc_sprites currentConfig.EmuOpt |= 0x80; //vidResetMode(); @@ -1044,7 +1057,7 @@ void emu_Loop(void) // if in 8bit mode, generate 16bit image for menu background if ((PicoOpt&0x10) || !(currentConfig.EmuOpt&0x80)) - emu_forcedFrame(); + emu_forcedFrame(POPT_EN_SOFTSCALE); }