idle loop hack, psp bugfix, plat debug str

git-svn-id: file:///home/notaz/opt/svn/PicoDrive@566 be3aeb3a-fb24-0410-a615-afba39da0efa
This commit is contained in:
notaz 2008-08-06 20:04:23 +00:00
parent a7efb231fe
commit fcf94fcc20
10 changed files with 39 additions and 15 deletions

View file

@ -99,19 +99,19 @@ cfi_loop:
.endm .endm
idle_bra: idle_bra:
mov r5, #4 mov r5, #2
inc_counter inc_counter
b Op6001 b Op6001
idle_bne: idle_bne:
msr cpsr_flg, r10 ;@ ARM flags = 68000 flags msr cpsr_flg, r10
movne r5, #4 movne r5, #2 @ 2 is intentional due to strange timing issues
inc_counter ne inc_counter ne
b Op6601 b Op6601
idle_beq: idle_beq:
msr cpsr_flg, r10 ;@ ARM flags = 68000 flags msr cpsr_flg, r10 ;@ ARM flags = 68000 flags
moveq r5, #4 moveq r5, #2
inc_counter eq inc_counter eq
b Op6701 b Op6701

View file

@ -262,6 +262,10 @@ typedef signed int s32;
goto famec_Exec; goto famec_Exec;
#endif #endif
#define RET0() \
m68kcontext.io_cycle_counter = -6; \
goto famec_End;
#else #else
#define NEXT \ #define NEXT \
@ -274,6 +278,10 @@ typedef signed int s32;
m68kcontext.io_cycle_counter -= (A); \ m68kcontext.io_cycle_counter -= (A); \
return; return;
#define RET0() \
m68kcontext.io_cycle_counter = -6; \
return;
#endif #endif
#define M68K_PPL (m68kcontext.sr >> 8) & 7 #define M68K_PPL (m68kcontext.sr >> 8) & 7

View file

@ -19263,8 +19263,7 @@ OPCODE(0x4E72)
ASP = res; ASP = res;
} }
m68kcontext.execinfo |= FM68K_HALTED; m68kcontext.execinfo |= FM68K_HALTED;
m68kcontext.io_cycle_counter = 0; RET0()
RET(4)
} }
// RTE // RTE
@ -39984,8 +39983,7 @@ OPCODE(0x6001_idle)
PC += ((s8)(Opcode & 0xFE)) >> 1; PC += ((s8)(Opcode & 0xFE)) >> 1;
#endif #endif
UPDATE_IDLE_COUNT UPDATE_IDLE_COUNT
m68kcontext.io_cycle_counter = 10; RET0()
RET(10)
} }
// BCC // BCC
@ -39995,7 +39993,8 @@ OPCODE(0x6601_idle)
{ {
UPDATE_IDLE_COUNT UPDATE_IDLE_COUNT
PC += ((s8)(Opcode & 0xFE)) >> 1; PC += ((s8)(Opcode & 0xFE)) >> 1;
m68kcontext.io_cycle_counter = 8; //if (idle_hit)
RET0()
} }
RET(8) RET(8)
} }
@ -40006,7 +40005,8 @@ OPCODE(0x6701_idle)
{ {
UPDATE_IDLE_COUNT UPDATE_IDLE_COUNT
PC += ((s8)(Opcode & 0xFE)) >> 1; PC += ((s8)(Opcode & 0xFE)) >> 1;
m68kcontext.io_cycle_counter = 8; //if (idle_hit)
RET0()
} }
RET(8) RET(8)
} }

View file

@ -61,3 +61,4 @@ void emu_DoTurbo(int *pad, int acts);
extern const char * const keyNames[]; extern const char * const keyNames[];
void emu_prepareDefaultConfig(void); void emu_prepareDefaultConfig(void);
void emu_platformDebugCat(char *str);

View file

@ -405,13 +405,16 @@ void debug_menu_loop(void)
{ {
int inp, mode = 0; int inp, mode = 0;
int spr_offs = 0, dumped = 0; int spr_offs = 0, dumped = 0;
char *tmp;
while (1) while (1)
{ {
switch (mode) switch (mode)
{ {
case 0: menu_draw_begin(); case 0: menu_draw_begin();
draw_text_debug(PDebugMain(), 0, 0); tmp = PDebugMain();
emu_platformDebugCat(tmp);
draw_text_debug(tmp, 0, 0);
if (dumped) { if (dumped) {
smalltext_out16(SCREEN_WIDTH-6*10, SCREEN_HEIGHT-8, "dumped", 0xffff); smalltext_out16(SCREEN_WIDTH-6*10, SCREEN_HEIGHT-8, "dumped", 0xffff);
dumped = 0; dumped = 0;

View file

@ -719,6 +719,11 @@ void emu_forcedFrame(int opts)
currentConfig.EmuOpt = eo_old; currentConfig.EmuOpt = eo_old;
} }
void emu_platformDebugCat(char *str)
{
// nothing
}
static void simpleWait(int thissec, int lim_time) static void simpleWait(int thissec, int lim_time)
{ {
struct timeval tval; struct timeval tval;

View file

@ -1,2 +1,2 @@
#define VERSION "1.51a" #define VERSION "1.51b"

View file

@ -274,7 +274,7 @@ static void do_pal_update(int allow_sh, int allow_as)
} }
else if (allow_as && (rendstatus & PDRAW_ACC_SPRITES)) else if (allow_as && (rendstatus & PDRAW_ACC_SPRITES))
{ {
memcpy32((int *)(void *)(localPal+0x80), (void *)localPal, 0x40/2); memcpy32((int *)dpal+0x80/2, (void *)localPal, 0x40*2/4);
} }
} }
@ -296,6 +296,7 @@ static void EmuScanPrepare(void)
if (dynamic_palette > 0) if (dynamic_palette > 0)
dynamic_palette--; dynamic_palette--;
if (Pico.m.dirtyPal) if (Pico.m.dirtyPal)
do_pal_update(1, 1); do_pal_update(1, 1);
if ((rendstatus & PDRAW_ACC_SPRITES) && !(Pico.video.reg[0xC]&8)) if ((rendstatus & PDRAW_ACC_SPRITES) && !(Pico.video.reg[0xC]&8))
@ -322,7 +323,7 @@ static int EmuScanSlowEnd(unsigned int num)
do_slowmode_lines(num); do_slowmode_lines(num);
dynamic_palette = 3; // last for 2 more frames dynamic_palette = 3; // last for 2 more frames
} }
do_pal_update(1, 0); do_pal_update(1, 1);
} }
if (dynamic_palette) { if (dynamic_palette) {
@ -534,6 +535,11 @@ static void vidResetMode(void)
sceGuSync(0,0); sceGuSync(0,0);
} }
void emu_platformDebugCat(char *str)
{
strcat(str, blit_16bit_mode ? "soft clut\n" : "hard clut\n");
}
/* sound stuff */ /* sound stuff */
#define SOUND_BLOCK_SIZE_NTSC (1470*2) // 1024 // 1152 #define SOUND_BLOCK_SIZE_NTSC (1470*2) // 1024 // 1152

View file

@ -1161,6 +1161,7 @@ menu_entry opt2_entries[] =
{ "gzip savestates", MB_ONOFF, MA_OPT2_GZIP_STATES, &currentConfig.EmuOpt, 0x00008, 0, 0, 1, 1 }, { "gzip savestates", MB_ONOFF, MA_OPT2_GZIP_STATES, &currentConfig.EmuOpt, 0x00008, 0, 0, 1, 1 },
{ "Don't save last used ROM", MB_ONOFF, MA_OPT2_NO_LAST_ROM, &currentConfig.EmuOpt, 0x00020, 0, 0, 1, 1 }, { "Don't save last used ROM", MB_ONOFF, MA_OPT2_NO_LAST_ROM, &currentConfig.EmuOpt, 0x00020, 0, 0, 1, 1 },
{ "Status line in main menu", MB_ONOFF, MA_OPT2_STATUS_LINE, &currentConfig.EmuOpt, 0x20000, 0, 0, 1, 1 }, { "Status line in main menu", MB_ONOFF, MA_OPT2_STATUS_LINE, &currentConfig.EmuOpt, 0x20000, 0, 0, 1, 1 },
{ "Disable idle loop patching",MB_ONOFF, MA_OPT2_NO_IDLE_LOOPS, &PicoOpt, 0x80000, 0, 0, 1, 1 },
{ "Disable frame limiter", MB_ONOFF, MA_OPT2_NO_FRAME_LIMIT, &currentConfig.EmuOpt, 0x40000, 0, 0, 1, 1 }, { "Disable frame limiter", MB_ONOFF, MA_OPT2_NO_FRAME_LIMIT, &currentConfig.EmuOpt, 0x40000, 0, 0, 1, 1 },
{ "done", MB_NONE, MA_OPT2_DONE, NULL, 0, 0, 0, 1, 0 }, { "done", MB_NONE, MA_OPT2_DONE, NULL, 0, 0, 0, 1, 0 },
}; };

View file

@ -1,2 +1,2 @@
#define VERSION "1.51a" #define VERSION "1.51b"