mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 15:27:46 -04:00
psp code updated for latest base, black level
git-svn-id: file:///home/notaz/opt/svn/PicoDrive@415 be3aeb3a-fb24-0410-a615-afba39da0efa
This commit is contained in:
parent
6c25471008
commit
6fc5714482
14 changed files with 367 additions and 180 deletions
|
@ -27,7 +27,7 @@ endif
|
|||
OBJS += main.o emu.o mp3.o menu.o psp.o asm_utils.o
|
||||
|
||||
# common
|
||||
OBJS += ../common/emu.o ../common/menu.o ../common/fonts.o ../common/readpng.o
|
||||
OBJS += ../common/emu.o ../common/menu.o ../common/fonts.o ../common/config.o ../common/readpng.o
|
||||
|
||||
# Pico
|
||||
ifeq "$(amalgamate)" "1"
|
||||
|
@ -40,6 +40,9 @@ OBJS += ../../Pico/Area.o ../../Pico/Cart.o ../../Pico/Memory.o ../../Pico/Misc.
|
|||
OBJS += ../../Pico/cd/Pico.o ../../Pico/cd/Memory.o ../../Pico/cd/Sek.o ../../Pico/cd/LC89510.o \
|
||||
../../Pico/cd/cd_sys.o ../../Pico/cd/cd_file.o ../../Pico/cd/gfx_cd.o \
|
||||
../../Pico/cd/Area.o ../../Pico/cd/Misc.o ../../Pico/cd/pcm.o ../../Pico/cd/buffering.o
|
||||
# Pico - carthw
|
||||
OBJS += ../../Pico/carthw/carthw.o ../../Pico/carthw/svp/svp.o ../../Pico/carthw/svp/Memory.o \
|
||||
../../Pico/carthw/svp/ssp16.o
|
||||
endif
|
||||
|
||||
# Pico - sound
|
||||
|
@ -170,14 +173,14 @@ endif
|
|||
endif
|
||||
|
||||
# ?
|
||||
rel: EBOOT.PBP readme.txt
|
||||
rel: EBOOT.PBP readme.txt ../game_def.cfg
|
||||
mkdir -p PicoDrive/skin/
|
||||
cp $^ PicoDrive/
|
||||
cp skin/* PicoDrive/skin/
|
||||
zip -9 -r ../../PicoDrive_psp_$(VER).zip PicoDrive
|
||||
rm -rf PicoDrive
|
||||
|
||||
rel_kxploit: readme.txt
|
||||
rel_kxploit: readme.txt ../game_def.cfg
|
||||
mkdir -p PicoDrive/skin/
|
||||
cp $^ PicoDrive/
|
||||
cp skin/* PicoDrive/skin/
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
// pointers must be word aligned
|
||||
void do_pal_convert(unsigned short *dest, unsigned short *src, int gammaa_val);
|
||||
// pointers must be word aligned, gammaa_val = -4..16, black_lvl = {0,1,2}
|
||||
void do_pal_convert(unsigned short *dest, unsigned short *src, int gammaa_val, int black_lvl);
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
.byte 0, 2, 7, 12, 16, 21, 26, 31 # -3
|
||||
.byte 0, 3, 7, 12, 17, 22, 26, 31 # -2
|
||||
.byte 0, 4, 8, 13, 17, 22, 26, 31 # -1
|
||||
gmtab:
|
||||
pal_gmtab:
|
||||
.byte 0, 5, 10, 15, 16, 21, 26, 31 # 0
|
||||
.byte 0, 6, 10, 15, 19, 23, 27, 31
|
||||
.byte 0, 7, 11, 15, 19, 23, 27, 31
|
||||
|
@ -38,11 +38,13 @@ gmtab:
|
|||
|
||||
# bbbb bggg gggr rrrr
|
||||
|
||||
.global do_pal_convert # dest, src, gammaa_val
|
||||
#.global pal_gmtab
|
||||
.global do_pal_convert # dest, src, gammaa_val, black_lvl
|
||||
|
||||
do_pal_convert:
|
||||
bnez $a2, dpc_gma
|
||||
li $t0, 64/2
|
||||
bnez $a3, dpc_gma
|
||||
lui $t2, 0x00e
|
||||
ori $t2, 0x00e
|
||||
lui $t3, 0x006
|
||||
|
@ -80,11 +82,22 @@ dpc_loop:
|
|||
jr $ra
|
||||
nop
|
||||
|
||||
# non-zero gamma
|
||||
dpc_gma:
|
||||
slt $t2, $a2, $0
|
||||
sll $a2, 3
|
||||
lui $t1, %hi(gmtab)
|
||||
addiu $t1, %lo(gmtab)
|
||||
lui $t1, %hi(pal_gmtab)
|
||||
addiu $t1, %lo(pal_gmtab)
|
||||
addu $a2, $t1
|
||||
beqz $a3, dpc_gma_loop
|
||||
sb $0, 0($a2) # black level 0
|
||||
bnez $t2, dpc_gma_loop # gamma < 0, keep black at 0
|
||||
addiu $a3, -2
|
||||
slt $t2, $a3, $0 # t2 = a3_orig == 1 ? 1 : 0
|
||||
lb $t1, 1($a2)
|
||||
addiu $t1, -2
|
||||
srlv $t1, $t1, $t2
|
||||
sb $t1, 0($a2)
|
||||
|
||||
dpc_gma_loop:
|
||||
lw $v0, 0($a1)
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include "mp3.h"
|
||||
#include "asm_utils.h"
|
||||
#include "../common/emu.h"
|
||||
#include "../common/config.h"
|
||||
#include "../common/lprintf.h"
|
||||
#include "../../Pico/PicoInt.h"
|
||||
|
||||
|
@ -117,38 +118,46 @@ void emu_Deinit(void)
|
|||
sound_deinit();
|
||||
}
|
||||
|
||||
void emu_prepareDefaultConfig(void)
|
||||
{
|
||||
memset(&defaultConfig, 0, sizeof(defaultConfig));
|
||||
defaultConfig.EmuOpt = 0x1d | 0x680; // | <- confirm_save, cd_leds, acc rend
|
||||
defaultConfig.s_PicoOpt = 0x0f | POPT_EN_MCD_PCM|POPT_EN_MCD_CDDA|POPT_EN_MCD_GFX;
|
||||
defaultConfig.s_PsndRate = 22050;
|
||||
defaultConfig.s_PicoRegion = 0; // auto
|
||||
defaultConfig.s_PicoAutoRgnOrder = 0x184; // US, EU, JP
|
||||
defaultConfig.s_PicoCDBuffers = 64;
|
||||
defaultConfig.Frameskip = -1; // auto
|
||||
defaultConfig.CPUclock = 333;
|
||||
defaultConfig.KeyBinds[ 4] = 1<<0; // SACB RLDU
|
||||
defaultConfig.KeyBinds[ 6] = 1<<1;
|
||||
defaultConfig.KeyBinds[ 7] = 1<<2;
|
||||
defaultConfig.KeyBinds[ 5] = 1<<3;
|
||||
defaultConfig.KeyBinds[14] = 1<<4;
|
||||
defaultConfig.KeyBinds[13] = 1<<5;
|
||||
defaultConfig.KeyBinds[15] = 1<<6;
|
||||
defaultConfig.KeyBinds[ 3] = 1<<7;
|
||||
defaultConfig.KeyBinds[12] = 1<<26; // switch rnd
|
||||
defaultConfig.KeyBinds[ 8] = 1<<27; // save state
|
||||
defaultConfig.KeyBinds[ 9] = 1<<28; // load state
|
||||
defaultConfig.KeyBinds[28] = 1<<0; // num "buttons"
|
||||
defaultConfig.KeyBinds[30] = 1<<1;
|
||||
defaultConfig.KeyBinds[31] = 1<<2;
|
||||
defaultConfig.KeyBinds[29] = 1<<3;
|
||||
defaultConfig.scaling = 1; // bilinear filtering for psp
|
||||
defaultConfig.scale = 1.20; // fullscreen
|
||||
defaultConfig.hscale40 = 1.25;
|
||||
defaultConfig.hscale32 = 1.56;
|
||||
}
|
||||
|
||||
void emu_setDefaultConfig(void)
|
||||
{
|
||||
memset(¤tConfig, 0, sizeof(currentConfig));
|
||||
currentConfig.lastRomFile[0] = 0;
|
||||
currentConfig.EmuOpt = 0x1d | 0x680; // | confirm_save, cd_leds, acc rend
|
||||
currentConfig.PicoOpt = 0x0f | 0x1c00; // | gfx_cd, cd_pcm, cd_cdda
|
||||
currentConfig.PsndRate = 22050;
|
||||
currentConfig.PicoRegion = 0; // auto
|
||||
currentConfig.PicoAutoRgnOrder = 0x184; // US, EU, JP
|
||||
currentConfig.Frameskip = -1; // auto
|
||||
currentConfig.volume = 50;
|
||||
currentConfig.CPUclock = 333;
|
||||
currentConfig.KeyBinds[ 4] = 1<<0; // SACB RLDU
|
||||
currentConfig.KeyBinds[ 6] = 1<<1;
|
||||
currentConfig.KeyBinds[ 7] = 1<<2;
|
||||
currentConfig.KeyBinds[ 5] = 1<<3;
|
||||
currentConfig.KeyBinds[14] = 1<<4;
|
||||
currentConfig.KeyBinds[13] = 1<<5;
|
||||
currentConfig.KeyBinds[15] = 1<<6;
|
||||
currentConfig.KeyBinds[ 3] = 1<<7;
|
||||
currentConfig.KeyBinds[12] = 1<<26; // switch rnd
|
||||
currentConfig.KeyBinds[ 8] = 1<<27; // save state
|
||||
currentConfig.KeyBinds[ 9] = 1<<28; // load state
|
||||
currentConfig.KeyBinds[28] = 1<<0; // num "buttons"
|
||||
currentConfig.KeyBinds[30] = 1<<1;
|
||||
currentConfig.KeyBinds[31] = 1<<2;
|
||||
currentConfig.KeyBinds[29] = 1<<3;
|
||||
currentConfig.PicoCDBuffers = 64;
|
||||
currentConfig.scaling = 1; // bilinear filtering for psp
|
||||
currentConfig.scale = 1.20; // fullscreen
|
||||
currentConfig.hscale40 = 1.25;
|
||||
currentConfig.hscale32 = 1.56;
|
||||
memcpy(¤tConfig, &defaultConfig, sizeof(currentConfig));
|
||||
PicoOpt = currentConfig.s_PicoOpt;
|
||||
PsndRate = currentConfig.s_PsndRate;
|
||||
PicoRegionOverride = currentConfig.s_PicoRegion;
|
||||
PicoAutoRgnOrder = currentConfig.s_PicoAutoRgnOrder;
|
||||
PicoCDBuffers = currentConfig.s_PicoCDBuffers;
|
||||
}
|
||||
|
||||
|
||||
|
@ -233,7 +242,7 @@ static void do_pal_update(int allow_sh)
|
|||
|
||||
//for (i = 0x3f/2; i >= 0; i--)
|
||||
// dpal[i] = ((spal[i]&0x000f000f)<< 1)|((spal[i]&0x00f000f0)<<3)|((spal[i]&0x0f000f00)<<4);
|
||||
do_pal_convert(localPal, Pico.cram, currentConfig.gamma);
|
||||
do_pal_convert(localPal, Pico.cram, currentConfig.gamma, currentConfig.gamma2);
|
||||
|
||||
if (allow_sh && (Pico.video.reg[0xC]&8)) // shadow/hilight?
|
||||
{
|
||||
|
@ -276,7 +285,17 @@ static void EmuScanPrepare(void)
|
|||
do_pal_update(1);
|
||||
}
|
||||
|
||||
static int EmuScanSlow(unsigned int num)
|
||||
static int EmuScanSlowBegin(unsigned int num)
|
||||
{
|
||||
if (!(Pico.video.reg[1]&8)) num += 8;
|
||||
|
||||
if (!dynamic_palette)
|
||||
HighCol = (unsigned char *)VRAM_CACHED_STUFF + num * 512 + 8;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int EmuScanSlowEnd(unsigned int num)
|
||||
{
|
||||
if (!(Pico.video.reg[1]&8)) num += 8;
|
||||
|
||||
|
@ -292,8 +311,7 @@ static int EmuScanSlow(unsigned int num)
|
|||
int line_len = (Pico.video.reg[12]&1) ? 320 : 256;
|
||||
void *dst = (char *)VRAM_STUFF + 512*240 + 512*2*num;
|
||||
amips_clut(dst, HighCol + 8, localPal, line_len);
|
||||
} else
|
||||
HighCol = (unsigned char *)VRAM_CACHED_STUFF + (num+1)*512 + 8;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -467,7 +485,8 @@ static void vidResetMode(void)
|
|||
|
||||
// slow rend.
|
||||
PicoDrawSetColorFormat(-1);
|
||||
PicoScanEnd = EmuScanSlow;
|
||||
PicoScanBegin = EmuScanSlowBegin;
|
||||
PicoScanEnd = EmuScanSlowEnd;
|
||||
|
||||
localPal[0xe0] = 0;
|
||||
Pico.m.dirtyPal = 1;
|
||||
|
@ -670,7 +689,8 @@ void emu_forcedFrame(void)
|
|||
memset32_uncached((int *)psp_screen + 512*264*2/4, 0, 512*8*2/4);
|
||||
|
||||
PicoDrawSetColorFormat(-1);
|
||||
PicoScanEnd = EmuScanSlow;
|
||||
PicoScanBegin = EmuScanSlowBegin;
|
||||
PicoScanEnd = EmuScanSlowEnd;
|
||||
EmuScanPrepare();
|
||||
PicoFrameDrawOnly();
|
||||
blit1();
|
||||
|
@ -789,21 +809,6 @@ static void updateKeys(void)
|
|||
|
||||
events = (allActions[0] | allActions[1]) >> 16;
|
||||
|
||||
// volume is treated in special way and triggered every frame
|
||||
if ((events & 0x6000) && PsndOut != NULL)
|
||||
{
|
||||
int vol = currentConfig.volume;
|
||||
if (events & 0x2000) {
|
||||
if (vol < 100) vol++;
|
||||
} else {
|
||||
if (vol > 0) vol--;
|
||||
}
|
||||
// FrameworkAudio_SetVolume(vol, vol); // TODO
|
||||
sprintf(noticeMsg, "VOL: %02i ", vol);
|
||||
noticeMsgTime = sceKernelGetSystemTimeLow();
|
||||
currentConfig.volume = vol;
|
||||
}
|
||||
|
||||
events &= ~prevEvents;
|
||||
if (events) RunEvents(events);
|
||||
if (movie_data) emu_updateMovie();
|
||||
|
@ -827,9 +832,10 @@ void emu_Loop(void)
|
|||
{
|
||||
static int mp3_init_done = 0;
|
||||
char fpsbuff[24]; // fps count c string
|
||||
unsigned int tval, tval_prev = 0, tval_thissec = 0; // timing
|
||||
int frames_done = 0, frames_shown = 0, oldmodes = 0;
|
||||
int target_fps, target_frametime, lim_time, tval_diff, i;
|
||||
unsigned int tval, tval_thissec = 0; // timing
|
||||
int target_fps, target_frametime, lim_time, tval_diff, i, oldmodes = 0;
|
||||
int pframes_done, pframes_shown; // "period" frames, used for sync
|
||||
int frames_done, frames_shown, tval_fpsc = 0; // actual frames
|
||||
char *notice = NULL;
|
||||
|
||||
lprintf("entered emu_Loop()\n");
|
||||
|
@ -874,6 +880,10 @@ void emu_Loop(void)
|
|||
}
|
||||
|
||||
sceDisplayWaitVblankStart();
|
||||
pframes_shown = pframes_done =
|
||||
frames_shown = frames_done = 0;
|
||||
|
||||
tval_fpsc = sceKernelGetSystemTimeLow();
|
||||
|
||||
// loop?
|
||||
while (engineState == PGS_Running)
|
||||
|
@ -881,11 +891,11 @@ void emu_Loop(void)
|
|||
int modes;
|
||||
|
||||
tval = sceKernelGetSystemTimeLow();
|
||||
if (reset_timing || tval < tval_prev) {
|
||||
if (reset_timing || tval < tval_fpsc) {
|
||||
//stdbg("timing reset");
|
||||
reset_timing = 0;
|
||||
tval_thissec = tval;
|
||||
frames_shown = frames_done = 0;
|
||||
pframes_shown = pframes_done = 0;
|
||||
}
|
||||
|
||||
// show notice message?
|
||||
|
@ -911,37 +921,41 @@ void emu_Loop(void)
|
|||
}
|
||||
|
||||
// second passed?
|
||||
if (tval - tval_fpsc >= 1000000)
|
||||
{
|
||||
if (currentConfig.EmuOpt & 2)
|
||||
sprintf(fpsbuff, "%02i/%02i ", frames_shown, frames_done);
|
||||
frames_done = frames_shown = 0;
|
||||
tval_fpsc += 1000000;
|
||||
}
|
||||
|
||||
if (tval - tval_thissec >= 1000000)
|
||||
{
|
||||
// missing 1 frame?
|
||||
if (currentConfig.Frameskip < 0 && frames_done < target_fps) {
|
||||
SkipFrame(); frames_done++;
|
||||
if (currentConfig.Frameskip < 0 && pframes_done < target_fps) {
|
||||
SkipFrame(); pframes_done++; frames_done++;
|
||||
}
|
||||
|
||||
if (currentConfig.EmuOpt & 2)
|
||||
sprintf(fpsbuff, "%02i/%02i ", frames_shown, frames_done);
|
||||
|
||||
tval_thissec += 1000000;
|
||||
|
||||
if (currentConfig.Frameskip < 0) {
|
||||
frames_done -= target_fps; if (frames_done < 0) frames_done = 0;
|
||||
frames_shown -= target_fps; if (frames_shown < 0) frames_shown = 0;
|
||||
if (frames_shown > frames_done) frames_shown = frames_done;
|
||||
pframes_done -= target_fps; if (pframes_done < 0) pframes_done = 0;
|
||||
pframes_shown -= target_fps; if (pframes_shown < 0) pframes_shown = 0;
|
||||
if (pframes_shown > pframes_done) pframes_shown = pframes_done;
|
||||
} else {
|
||||
frames_done = frames_shown = 0;
|
||||
pframes_done = pframes_shown = 0;
|
||||
}
|
||||
}
|
||||
#ifdef PFRAMES
|
||||
sprintf(fpsbuff, "%i", Pico.m.frame_count);
|
||||
#endif
|
||||
|
||||
tval_prev = tval;
|
||||
lim_time = (frames_done+1) * target_frametime;
|
||||
lim_time = (pframes_done+1) * target_frametime;
|
||||
if (currentConfig.Frameskip >= 0) // frameskip enabled
|
||||
{
|
||||
for (i = 0; i < currentConfig.Frameskip; i++) {
|
||||
updateKeys();
|
||||
SkipFrame(); frames_done++;
|
||||
SkipFrame(); pframes_done++; frames_done++;
|
||||
if (!(currentConfig.EmuOpt&0x40000)) { // do framelimitting if needed
|
||||
int tval_diff;
|
||||
tval = sceKernelGetSystemTimeLow();
|
||||
|
@ -957,7 +971,7 @@ void emu_Loop(void)
|
|||
int tval_diff;
|
||||
tval = sceKernelGetSystemTimeLow();
|
||||
tval_diff = (int)(tval - tval_thissec) << 8;
|
||||
if (tval_diff > lim_time && (frames_done/16 < frames_shown))
|
||||
if (tval_diff > lim_time && (pframes_done/16 < pframes_shown))
|
||||
{
|
||||
// no time left for this frame - skip
|
||||
if (tval_diff - lim_time >= (300000<<8)) {
|
||||
|
@ -965,7 +979,7 @@ void emu_Loop(void)
|
|||
continue;
|
||||
}
|
||||
updateKeys();
|
||||
SkipFrame(); frames_done++;
|
||||
SkipFrame(); pframes_done++; frames_done++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
@ -985,8 +999,9 @@ void emu_Loop(void)
|
|||
|
||||
blit2(fpsbuff, notice, tval_diff > lim_time);
|
||||
|
||||
if (currentConfig.Frameskip < 0 && tval_diff - lim_time >= (300000<<8)) // slowdown detection
|
||||
if (currentConfig.Frameskip < 0 && tval_diff - lim_time >= (300000<<8)) { // slowdown detection
|
||||
reset_timing = 1;
|
||||
}
|
||||
else if (!(currentConfig.EmuOpt&0x40000) || currentConfig.Frameskip < 0)
|
||||
{
|
||||
// sleep if we are still too fast
|
||||
|
@ -997,7 +1012,8 @@ void emu_Loop(void)
|
|||
}
|
||||
}
|
||||
|
||||
frames_done++; frames_shown++;
|
||||
pframes_done++; pframes_shown++;
|
||||
frames_done++; frames_shown++;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -33,6 +33,7 @@ int pico_main(void)
|
|||
{
|
||||
lprintf("\nPicoDrive v" VERSION " " __DATE__ " " __TIME__ "\n");
|
||||
psp_init();
|
||||
emu_prepareDefaultConfig();
|
||||
emu_ReadConfig(0, 0);
|
||||
emu_Init();
|
||||
menu_init();
|
||||
|
@ -49,7 +50,7 @@ int pico_main(void)
|
|||
#ifndef GPROF
|
||||
menu_loop();
|
||||
#else
|
||||
strcpy(romFileName, currentConfig.lastRomFile);
|
||||
strcpy(romFileName, lastRomFile);
|
||||
engineState = PGS_ReloadRom;
|
||||
#endif
|
||||
break;
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
|
||||
|
||||
#define pspKeyUnkn "???"
|
||||
static const char * const pspKeyNames[] = {
|
||||
const char * const keyNames[] = {
|
||||
"SELECT", pspKeyUnkn, pspKeyUnkn, "START", "UP", "RIGHT", "DOWN", "LEFT",
|
||||
"L", "R", pspKeyUnkn, pspKeyUnkn, "TRIANGLE", "CIRCLE", "X", "SQUARE",
|
||||
"HOME", "HOLD", "WLAN_UP", "REMOTE", "VOLUP", "VOLDOWN", "SCREEN", "NOTE",
|
||||
|
@ -668,10 +668,10 @@ static char *action_binds(int player_idx, int action_mask)
|
|||
if (player_idx >= 0 && ((currentConfig.KeyBinds[i] >> 16) & 3) != player_idx) continue;
|
||||
if (strkeys[0]) {
|
||||
strcat(strkeys, i >= 28 ? ", " : " + "); // nub "buttons" don't create combos
|
||||
strcat(strkeys, pspKeyNames[i]);
|
||||
strcat(strkeys, keyNames[i]);
|
||||
break;
|
||||
}
|
||||
else strcpy(strkeys, pspKeyNames[i]);
|
||||
else strcpy(strkeys, keyNames[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -699,7 +699,7 @@ static int count_bound_keys(int action, int pl_idx)
|
|||
return keys;
|
||||
}
|
||||
|
||||
static void draw_key_config(const bind_action_t *opts, int opt_cnt, int player_idx, int sel)
|
||||
static void draw_key_config(const me_bind_action *opts, int opt_cnt, int player_idx, int sel)
|
||||
{
|
||||
int x, y, tl_y = 16+40, i;
|
||||
|
||||
|
@ -733,7 +733,7 @@ static void draw_key_config(const bind_action_t *opts, int opt_cnt, int player_i
|
|||
menu_draw_end();
|
||||
}
|
||||
|
||||
static void key_config_loop(const bind_action_t *opts, int opt_cnt, int player_idx)
|
||||
static void key_config_loop(const me_bind_action *opts, int opt_cnt, int player_idx)
|
||||
{
|
||||
int sel = 0, menu_sel_max = opt_cnt, prev_select = 0, i;
|
||||
unsigned long inp = 0;
|
||||
|
@ -804,7 +804,7 @@ static void kc_sel_loop(void)
|
|||
{
|
||||
int menu_sel = 3, menu_sel_max = 3;
|
||||
unsigned long inp = 0;
|
||||
int is_6button = currentConfig.PicoOpt & 0x020;
|
||||
int is_6button = PicoOpt & POPT_6BTN_PAD;
|
||||
|
||||
while (1)
|
||||
{
|
||||
|
@ -831,20 +831,21 @@ static void kc_sel_loop(void)
|
|||
|
||||
menu_entry cdopt_entries[] =
|
||||
{
|
||||
{ NULL, MB_NONE, MA_CDOPT_TESTBIOS_USA, NULL, 0, 0, 0, 1 },
|
||||
{ NULL, MB_NONE, MA_CDOPT_TESTBIOS_EUR, NULL, 0, 0, 0, 1 },
|
||||
{ NULL, MB_NONE, MA_CDOPT_TESTBIOS_JAP, NULL, 0, 0, 0, 1 },
|
||||
{ "CD LEDs", MB_ONOFF, MA_CDOPT_LEDS, ¤tConfig.EmuOpt, 0x0400, 0, 0, 1 },
|
||||
{ "CDDA audio (using mp3s)", MB_ONOFF, MA_CDOPT_CDDA, ¤tConfig.PicoOpt, 0x0800, 0, 0, 1 },
|
||||
{ "PCM audio", MB_ONOFF, MA_CDOPT_PCM, ¤tConfig.PicoOpt, 0x0400, 0, 0, 1 },
|
||||
{ NULL, MB_NONE, MA_CDOPT_READAHEAD, NULL, 0, 0, 0, 1 },
|
||||
{ "SaveRAM cart", MB_ONOFF, MA_CDOPT_SAVERAM, ¤tConfig.PicoOpt, 0x8000, 0, 0, 1 },
|
||||
{ "Scale/Rot. fx (slow)", MB_ONOFF, MA_CDOPT_SCALEROT_CHIP,¤tConfig.PicoOpt, 0x1000, 0, 0, 1 },
|
||||
{ "Better sync (slow)", MB_ONOFF, MA_CDOPT_BETTER_SYNC, ¤tConfig.PicoOpt, 0x2000, 0, 0, 1 },
|
||||
{ "done", MB_NONE, MA_CDOPT_DONE, NULL, 0, 0, 0, 1 },
|
||||
{ NULL, MB_NONE, MA_CDOPT_TESTBIOS_USA, NULL, 0, 0, 0, 1, 0 },
|
||||
{ NULL, MB_NONE, MA_CDOPT_TESTBIOS_EUR, NULL, 0, 0, 0, 1, 0 },
|
||||
{ NULL, MB_NONE, MA_CDOPT_TESTBIOS_JAP, NULL, 0, 0, 0, 1, 0 },
|
||||
{ "CD LEDs", MB_ONOFF, MA_CDOPT_LEDS, ¤tConfig.EmuOpt, 0x0400, 0, 0, 1, 1 },
|
||||
{ "CDDA audio (using mp3s)", MB_ONOFF, MA_CDOPT_CDDA, &PicoOpt, 0x0800, 0, 0, 1, 1 },
|
||||
{ "PCM audio", MB_ONOFF, MA_CDOPT_PCM, &PicoOpt, 0x0400, 0, 0, 1, 1 },
|
||||
{ NULL, MB_NONE, MA_CDOPT_READAHEAD, NULL, 0, 0, 0, 1, 1 },
|
||||
{ "SaveRAM cart", MB_ONOFF, MA_CDOPT_SAVERAM, &PicoOpt, 0x8000, 0, 0, 1, 1 },
|
||||
{ "Scale/Rot. fx (slow)", MB_ONOFF, MA_CDOPT_SCALEROT_CHIP,&PicoOpt, 0x1000, 0, 0, 1, 1 },
|
||||
{ "Better sync (slow)", MB_ONOFF, MA_CDOPT_BETTER_SYNC, &PicoOpt, 0x2000, 0, 0, 1, 1 },
|
||||
{ "done", MB_NONE, MA_CDOPT_DONE, NULL, 0, 0, 0, 1, 0 },
|
||||
};
|
||||
|
||||
#define CDOPT_ENTRY_COUNT (sizeof(cdopt_entries) / sizeof(cdopt_entries[0]))
|
||||
const int cdopt_entry_count = CDOPT_ENTRY_COUNT;
|
||||
|
||||
|
||||
struct bios_names_t
|
||||
|
@ -984,19 +985,21 @@ static void cd_menu_loop_options(void)
|
|||
|
||||
menu_entry opt3_entries[] =
|
||||
{
|
||||
{ NULL, MB_NONE, MA_OPT3_SCALE, NULL, 0, 0, 0, 1 },
|
||||
{ NULL, MB_NONE, MA_OPT3_HSCALE32, NULL, 0, 0, 0, 1 },
|
||||
{ NULL, MB_NONE, MA_OPT3_HSCALE40, NULL, 0, 0, 0, 1 },
|
||||
{ NULL, MB_ONOFF, MA_OPT3_FILTERING, ¤tConfig.scaling, 1, 0, 0, 1 },
|
||||
{ NULL, MB_RANGE, MA_OPT3_GAMMAA, ¤tConfig.gamma, 0, -4, 16, 1 },
|
||||
{ NULL, MB_NONE, MA_OPT3_VSYNC, NULL, 0, 0, 0, 1 },
|
||||
{ "Set to unscaled centered", MB_NONE, MA_OPT3_PRES_NOSCALE, NULL, 0, 0, 0, 1 },
|
||||
{ "Set to 4:3 scaled", MB_NONE, MA_OPT3_PRES_SCALE43, NULL, 0, 0, 0, 1 },
|
||||
{ "Set to fullscreen", MB_NONE, MA_OPT3_PRES_FULLSCR, NULL, 0, 0, 0, 1 },
|
||||
{ "done", MB_NONE, MA_OPT3_DONE, NULL, 0, 0, 0, 1 },
|
||||
{ NULL, MB_NONE, MA_OPT3_SCALE, NULL, 0, 0, 0, 1, 1 },
|
||||
{ NULL, MB_NONE, MA_OPT3_HSCALE32, NULL, 0, 0, 0, 1, 1 },
|
||||
{ NULL, MB_NONE, MA_OPT3_HSCALE40, NULL, 0, 0, 0, 1, 1 },
|
||||
{ NULL, MB_ONOFF, MA_OPT3_FILTERING, ¤tConfig.scaling, 1, 0, 0, 1, 1 },
|
||||
{ NULL, MB_RANGE, MA_OPT3_GAMMAA, ¤tConfig.gamma, 0, -4, 16, 1, 1 },
|
||||
{ NULL, MB_RANGE, MA_OPT3_BLACKLVL, ¤tConfig.gamma2, 0, 0, 2, 1, 1 },
|
||||
{ NULL, MB_NONE, MA_OPT3_VSYNC, NULL, 0, 0, 0, 1, 1 },
|
||||
{ "Set to unscaled centered", MB_NONE, MA_OPT3_PRES_NOSCALE, NULL, 0, 0, 0, 1, 0 },
|
||||
{ "Set to 4:3 scaled", MB_NONE, MA_OPT3_PRES_SCALE43, NULL, 0, 0, 0, 1, 0 },
|
||||
{ "Set to fullscreen", MB_NONE, MA_OPT3_PRES_FULLSCR, NULL, 0, 0, 0, 1, 0 },
|
||||
{ "done", MB_NONE, MA_OPT3_DONE, NULL, 0, 0, 0, 1, 0 },
|
||||
};
|
||||
|
||||
#define OPT3_ENTRY_COUNT (sizeof(opt3_entries) / sizeof(opt3_entries[0]))
|
||||
const int opt3_entry_count = OPT3_ENTRY_COUNT;
|
||||
|
||||
|
||||
static void menu_opt3_cust_draw(const menu_entry *entry, int x, int y, void *param)
|
||||
|
@ -1018,6 +1021,9 @@ static void menu_opt3_cust_draw(const menu_entry *entry, int x, int y, void *par
|
|||
case MA_OPT3_GAMMAA:
|
||||
text_out16(x, y, "Gamma adjustment %2i", currentConfig.gamma);
|
||||
break;
|
||||
case MA_OPT3_BLACKLVL:
|
||||
text_out16(x, y, "Black level %2i", currentConfig.gamma2);
|
||||
break;
|
||||
case MA_OPT3_VSYNC: {
|
||||
char *val = " never";
|
||||
if (currentConfig.EmuOpt & 0x2000)
|
||||
|
@ -1102,8 +1108,10 @@ static void dispmenu_loop_options(void)
|
|||
case MA_OPT3_HSCALE40: setting = ¤tConfig.hscale40; is_32col = 0; break;
|
||||
case MA_OPT3_HSCALE32: setting = ¤tConfig.hscale32; is_32col = 1; break;
|
||||
case MA_OPT3_FILTERING:
|
||||
case MA_OPT3_GAMMAA: menu_opt3_preview(is_32col); break;
|
||||
case MA_OPT3_VSYNC: tmp = ((currentConfig.EmuOpt>>13)&1) | ((currentConfig.EmuOpt>>15)&2);
|
||||
case MA_OPT3_GAMMAA:
|
||||
case MA_OPT3_BLACKLVL: menu_opt3_preview(is_32col); break;
|
||||
case MA_OPT3_VSYNC:
|
||||
tmp = ((currentConfig.EmuOpt>>13)&1) | ((currentConfig.EmuOpt>>15)&2);
|
||||
tmp = (inp & BTN_LEFT) ? (tmp>>1) : ((tmp<<1)|1);
|
||||
if (tmp > 3) tmp = 3;
|
||||
currentConfig.EmuOpt &= ~0x12000;
|
||||
|
@ -1156,17 +1164,19 @@ static void dispmenu_loop_options(void)
|
|||
|
||||
menu_entry opt2_entries[] =
|
||||
{
|
||||
{ "Emulate Z80", MB_ONOFF, MA_OPT2_ENABLE_Z80, ¤tConfig.PicoOpt,0x00004, 0, 0, 1 },
|
||||
{ "Emulate YM2612 (FM)", MB_ONOFF, MA_OPT2_ENABLE_YM2612, ¤tConfig.PicoOpt,0x00001, 0, 0, 1 },
|
||||
{ "Emulate SN76496 (PSG)", MB_ONOFF, MA_OPT2_ENABLE_SN76496, ¤tConfig.PicoOpt,0x00002, 0, 0, 1 },
|
||||
{ "gzip savestates", MB_ONOFF, MA_OPT2_GZIP_STATES, ¤tConfig.EmuOpt, 0x00008, 0, 0, 1 },
|
||||
{ "Don't save last used ROM", MB_ONOFF, MA_OPT2_NO_LAST_ROM, ¤tConfig.EmuOpt, 0x00020, 0, 0, 1 },
|
||||
{ "Status line in main menu", MB_ONOFF, MA_OPT2_STATUS_LINE, ¤tConfig.EmuOpt, 0x20000, 0, 0, 1 },
|
||||
{ "Disable frame limitter", MB_ONOFF, MA_OPT2_NO_FRAME_LIMIT, ¤tConfig.EmuOpt, 0x40000, 0, 0, 1 },
|
||||
{ "done", MB_NONE, MA_OPT2_DONE, NULL, 0, 0, 0, 1 },
|
||||
{ "Disable sprite limit", MB_ONOFF, MA_OPT2_NO_SPRITE_LIM, &PicoOpt, 0x40000, 0, 0, 1, 1 },
|
||||
{ "Emulate Z80", MB_ONOFF, MA_OPT2_ENABLE_Z80, &PicoOpt, 0x00004, 0, 0, 1, 1 },
|
||||
{ "Emulate YM2612 (FM)", MB_ONOFF, MA_OPT2_ENABLE_YM2612, &PicoOpt, 0x00001, 0, 0, 1, 1 },
|
||||
{ "Emulate SN76496 (PSG)", MB_ONOFF, MA_OPT2_ENABLE_SN76496, &PicoOpt, 0x00002, 0, 0, 1, 1 },
|
||||
{ "gzip savestates", MB_ONOFF, MA_OPT2_GZIP_STATES, ¤tConfig.EmuOpt, 0x00008, 0, 0, 1, 1 },
|
||||
{ "Don't save last used ROM", MB_ONOFF, MA_OPT2_NO_LAST_ROM, ¤tConfig.EmuOpt, 0x00020, 0, 0, 1, 1 },
|
||||
{ "Status line in main menu", MB_ONOFF, MA_OPT2_STATUS_LINE, ¤tConfig.EmuOpt, 0x20000, 0, 0, 1, 1 },
|
||||
{ "Disable frame limitter", MB_ONOFF, MA_OPT2_NO_FRAME_LIMIT, ¤tConfig.EmuOpt, 0x40000, 0, 0, 1, 1 },
|
||||
{ "done", MB_NONE, MA_OPT2_DONE, NULL, 0, 0, 0, 1, 0 },
|
||||
};
|
||||
|
||||
#define OPT2_ENTRY_COUNT (sizeof(opt2_entries) / sizeof(opt2_entries[0]))
|
||||
const int opt2_entry_count = OPT2_ENTRY_COUNT;
|
||||
|
||||
|
||||
static void draw_amenu_options(int menu_sel)
|
||||
|
@ -1219,28 +1229,29 @@ static void amenu_loop_options(void)
|
|||
|
||||
menu_entry opt_entries[] =
|
||||
{
|
||||
{ NULL, MB_NONE, MA_OPT_RENDERER, NULL, 0, 0, 0, 1 },
|
||||
{ "Accurate timing (slower)", MB_ONOFF, MA_OPT_ACC_TIMING, ¤tConfig.PicoOpt, 0x0040, 0, 0, 1 },
|
||||
{ "Accurate sprites (slower)", MB_ONOFF, MA_OPT_ACC_SPRITES, ¤tConfig.PicoOpt, 0x0080, 0, 0, 1 },
|
||||
{ "Show FPS", MB_ONOFF, MA_OPT_SHOW_FPS, ¤tConfig.EmuOpt, 0x0002, 0, 0, 1 },
|
||||
{ NULL, MB_RANGE, MA_OPT_FRAMESKIP, ¤tConfig.Frameskip, 0, -1, 16, 1 },
|
||||
{ "Enable sound", MB_ONOFF, MA_OPT_ENABLE_SOUND, ¤tConfig.EmuOpt, 0x0004, 0, 0, 1 },
|
||||
{ NULL, MB_NONE, MA_OPT_SOUND_QUALITY, NULL, 0, 0, 0, 1 },
|
||||
{ "6 button pad", MB_ONOFF, MA_OPT_6BUTTON_PAD, ¤tConfig.PicoOpt, 0x0020, 0, 0, 1 },
|
||||
{ NULL, MB_NONE, MA_OPT_REGION, NULL, 0, 0, 0, 1 },
|
||||
{ "Use SRAM/BRAM savestates", MB_ONOFF, MA_OPT_SRAM_STATES, ¤tConfig.EmuOpt, 0x0001, 0, 0, 1 },
|
||||
{ NULL, MB_NONE, MA_OPT_CONFIRM_STATES,NULL, 0, 0, 0, 1 },
|
||||
{ "Save slot", MB_RANGE, MA_OPT_SAVE_SLOT, &state_slot, 0, 0, 9, 1 },
|
||||
{ NULL, MB_NONE, MA_OPT_CPU_CLOCKS, NULL, 0, 0, 0, 1 },
|
||||
{ "[Display options]", MB_NONE, MA_OPT_DISP_OPTS, NULL, 0, 0, 0, 1 },
|
||||
{ "[Sega/Mega CD options]", MB_NONE, MA_OPT_SCD_OPTS, NULL, 0, 0, 0, 1 },
|
||||
{ "[Advanced options]", MB_NONE, MA_OPT_ADV_OPTS, NULL, 0, 0, 0, 1 },
|
||||
{ NULL, MB_NONE, MA_OPT_SAVECFG, NULL, 0, 0, 0, 1 },
|
||||
{ "Save cfg for current game only",MB_NONE,MA_OPT_SAVECFG_GAME,NULL, 0, 0, 0, 1 },
|
||||
{ NULL, MB_NONE, MA_OPT_LOADCFG, NULL, 0, 0, 0, 1 },
|
||||
{ NULL, MB_NONE, MA_OPT_RENDERER, NULL, 0, 0, 0, 1, 1 },
|
||||
{ "Accurate timing (slower)", MB_ONOFF, MA_OPT_ACC_TIMING, &PicoOpt, 0x0040, 0, 0, 1, 1 },
|
||||
{ "Accurate sprites (slower)", MB_ONOFF, MA_OPT_ACC_SPRITES, &PicoOpt, 0x0080, 0, 0, 1, 1 },
|
||||
{ "Show FPS", MB_ONOFF, MA_OPT_SHOW_FPS, ¤tConfig.EmuOpt, 0x0002, 0, 0, 1, 1 },
|
||||
{ NULL, MB_RANGE, MA_OPT_FRAMESKIP, ¤tConfig.Frameskip, 0, -1, 16, 1, 1 },
|
||||
{ "Enable sound", MB_ONOFF, MA_OPT_ENABLE_SOUND, ¤tConfig.EmuOpt, 0x0004, 0, 0, 1, 1 },
|
||||
{ NULL, MB_NONE, MA_OPT_SOUND_QUALITY, NULL, 0, 0, 0, 1, 1 },
|
||||
{ "6 button pad", MB_ONOFF, MA_OPT_6BUTTON_PAD, &PicoOpt, 0x0020, 0, 0, 1, 1 },
|
||||
{ NULL, MB_NONE, MA_OPT_REGION, NULL, 0, 0, 0, 1, 1 },
|
||||
{ "Use SRAM/BRAM savestates", MB_ONOFF, MA_OPT_SRAM_STATES, ¤tConfig.EmuOpt, 0x0001, 0, 0, 1, 1 },
|
||||
{ NULL, MB_NONE, MA_OPT_CONFIRM_STATES,NULL, 0, 0, 0, 1, 1 },
|
||||
{ "Save slot", MB_RANGE, MA_OPT_SAVE_SLOT, &state_slot, 0, 0, 9, 1, 1 },
|
||||
{ NULL, MB_NONE, MA_OPT_CPU_CLOCKS, NULL, 0, 0, 0, 1, 1 },
|
||||
{ "[Display options]", MB_NONE, MA_OPT_DISP_OPTS, NULL, 0, 0, 0, 1, 0 },
|
||||
{ "[Sega/Mega CD options]", MB_NONE, MA_OPT_SCD_OPTS, NULL, 0, 0, 0, 1, 0 },
|
||||
{ "[Advanced options]", MB_NONE, MA_OPT_ADV_OPTS, NULL, 0, 0, 0, 1, 0 },
|
||||
{ NULL, MB_NONE, MA_OPT_SAVECFG, NULL, 0, 0, 0, 1, 0 },
|
||||
{ "Save cfg for current game only",MB_NONE,MA_OPT_SAVECFG_GAME,NULL, 0, 0, 0, 1, 0 },
|
||||
{ NULL, MB_NONE, MA_OPT_LOADCFG, NULL, 0, 0, 0, 1, 0 },
|
||||
};
|
||||
|
||||
#define OPT_ENTRY_COUNT (sizeof(opt_entries) / sizeof(opt_entries[0]))
|
||||
const int opt_entry_count = OPT_ENTRY_COUNT;
|
||||
|
||||
|
||||
static void menu_opt_cust_draw(const menu_entry *entry, int x, int y, void *param)
|
||||
|
@ -1250,9 +1261,9 @@ static void menu_opt_cust_draw(const menu_entry *entry, int x, int y, void *para
|
|||
switch (entry->id)
|
||||
{
|
||||
case MA_OPT_RENDERER:
|
||||
if (currentConfig.PicoOpt&0x10)
|
||||
if (PicoOpt & 0x10)
|
||||
str = "fast";
|
||||
else if (currentConfig.EmuOpt&0x80)
|
||||
else if (currentConfig.EmuOpt & 0x80)
|
||||
str = "accurate";
|
||||
else
|
||||
str = " 8bit accurate"; // n/a
|
||||
|
@ -1265,8 +1276,8 @@ static void menu_opt_cust_draw(const menu_entry *entry, int x, int y, void *para
|
|||
text_out16(x, y, "Frameskip %s", str24);
|
||||
break;
|
||||
case MA_OPT_SOUND_QUALITY:
|
||||
str = (currentConfig.PicoOpt&0x08)?"stereo":"mono";
|
||||
text_out16(x, y, "Sound Quality: %5iHz %s", currentConfig.PsndRate, str);
|
||||
str = (PicoOpt&0x08)?"stereo":"mono";
|
||||
text_out16(x, y, "Sound Quality: %5iHz %s", PsndRate, str);
|
||||
break;
|
||||
case MA_OPT_REGION:
|
||||
text_out16(x, y, "Region: %s", me_region_name(PicoRegionOverride, PicoAutoRgnOrder));
|
||||
|
@ -1350,13 +1361,11 @@ static void region_prevnext(int right)
|
|||
|
||||
static void menu_options_save(void)
|
||||
{
|
||||
PicoOpt = currentConfig.PicoOpt;
|
||||
PsndRate = currentConfig.PsndRate;
|
||||
if (PicoRegionOverride) {
|
||||
// force setting possibly changed..
|
||||
Pico.m.pal = (PicoRegionOverride == 2 || PicoRegionOverride == 8) ? 1 : 0;
|
||||
}
|
||||
if (!(PicoOpt & 0x20)) {
|
||||
if (!(PicoOpt & POPT_6BTN_PAD)) {
|
||||
// unbind XYZ MODE, just in case
|
||||
unbind_action(0xf00);
|
||||
}
|
||||
|
@ -1369,9 +1378,6 @@ static int menu_loop_options(void)
|
|||
unsigned long inp = 0;
|
||||
menu_id selected_id;
|
||||
|
||||
currentConfig.PicoOpt = PicoOpt;
|
||||
currentConfig.PsndRate = PsndRate;
|
||||
|
||||
me_enable(opt_entries, OPT_ENTRY_COUNT, MA_OPT_SAVECFG_GAME, rom_loaded);
|
||||
me_enable(opt_entries, OPT_ENTRY_COUNT, MA_OPT_LOADCFG, config_slot != config_slot_current);
|
||||
menu_sel_max = me_count_enabled(opt_entries, OPT_ENTRY_COUNT) - 1;
|
||||
|
@ -1388,16 +1394,16 @@ static int menu_loop_options(void)
|
|||
if (!me_process(opt_entries, OPT_ENTRY_COUNT, selected_id, (inp&BTN_RIGHT) ? 1 : 0)) {
|
||||
switch (selected_id) {
|
||||
case MA_OPT_RENDERER:
|
||||
if ((currentConfig.PicoOpt&0x10) || !(currentConfig.EmuOpt &0x80)) {
|
||||
currentConfig.PicoOpt&= ~0x10;
|
||||
if ((PicoOpt & 0x10) || !(currentConfig.EmuOpt & 0x80)) {
|
||||
PicoOpt &= ~0x10;
|
||||
currentConfig.EmuOpt |= 0x80;
|
||||
} else {
|
||||
currentConfig.PicoOpt|= 0x10;
|
||||
PicoOpt |= 0x10;
|
||||
currentConfig.EmuOpt &= ~0x80;
|
||||
}
|
||||
break;
|
||||
case MA_OPT_SOUND_QUALITY:
|
||||
currentConfig.PsndRate = sndrate_prevnext(currentConfig.PsndRate, inp & BTN_RIGHT);
|
||||
PsndRate = sndrate_prevnext(PsndRate, inp & BTN_RIGHT);
|
||||
break;
|
||||
case MA_OPT_REGION:
|
||||
region_prevnext(inp & BTN_RIGHT);
|
||||
|
@ -1493,7 +1499,7 @@ static void draw_menu_credits(void)
|
|||
int tl_x = 80+15, tl_y = 16+64, y;
|
||||
menu_draw_begin();
|
||||
|
||||
text_out16(tl_x, 16+20, "PicoDrive v" VERSION " (c) notaz, 2006,2007");
|
||||
text_out16(tl_x, 16+20, "PicoDrive v" VERSION " (c) notaz, 2006-2008");
|
||||
|
||||
y = tl_y;
|
||||
text_out16(tl_x, y, "Credits:");
|
||||
|
@ -1633,10 +1639,10 @@ static void menu_loop_root(void)
|
|||
{
|
||||
char curr_path[PATH_MAX], *selfname;
|
||||
FILE *tstf;
|
||||
if ( (tstf = fopen(currentConfig.lastRomFile, "rb")) )
|
||||
if ( (tstf = fopen(lastRomFile, "rb")) )
|
||||
{
|
||||
fclose(tstf);
|
||||
strcpy(curr_path, currentConfig.lastRomFile);
|
||||
strcpy(curr_path, lastRomFile);
|
||||
}
|
||||
else
|
||||
getcwd(curr_path, PATH_MAX);
|
||||
|
@ -1779,10 +1785,10 @@ int menu_loop_tray(void)
|
|||
|
||||
menu_gfx_prepare();
|
||||
|
||||
if ( (tstf = fopen(currentConfig.lastRomFile, "rb")) )
|
||||
if ( (tstf = fopen(lastRomFile, "rb")) )
|
||||
{
|
||||
fclose(tstf);
|
||||
strcpy(curr_path, currentConfig.lastRomFile);
|
||||
strcpy(curr_path, lastRomFile);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
#define VERSION "1.40"
|
||||
#define VERSION "1.40b"
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue