idle loop hack, psp bugfix, plat debug str
authornotaz <notasas@gmail.com>
Wed, 6 Aug 2008 20:04:23 +0000 (20:04 +0000)
committernotaz <notasas@gmail.com>
Wed, 6 Aug 2008 20:04:23 +0000 (20:04 +0000)
git-svn-id: file:///home/notaz/opt/svn/PicoDrive@566 be3aeb3a-fb24-0410-a615-afba39da0efa

cpu/Cyclone/tools/idle.s
cpu/fame/famec.c
cpu/fame/famec_opcodes.h
platform/common/emu.h
platform/common/menu.c
platform/gp2x/emu.c
platform/gp2x/version.h
platform/psp/emu.c
platform/psp/menu.c
platform/psp/version.h

index c865f80..a8b7cca 100644 (file)
@@ -99,19 +99,19 @@ cfi_loop:
 .endm
 
 idle_bra:
-    mov     r5, #4
+    mov     r5, #2
     inc_counter
     b       Op6001
 
 idle_bne:
-    msr     cpsr_flg, r10 ;@ ARM flags = 68000 flags
-    movne   r5, #4
+    msr     cpsr_flg, r10
+    movne   r5, #2                @ 2 is intentional due to strange timing issues
     inc_counter ne
     b       Op6601
 
 idle_beq:
     msr     cpsr_flg, r10 ;@ ARM flags = 68000 flags
-    moveq   r5, #4
+    moveq   r5, #2
     inc_counter eq
     b       Op6701
 
index 8469131..613f58f 100644 (file)
@@ -262,6 +262,10 @@ typedef signed int s32;
     goto famec_Exec;\r
 #endif\r
 \r
+#define RET0() \\r
+    m68kcontext.io_cycle_counter = -6; \\r
+    goto famec_End;\r
+\r
 #else\r
 \r
 #define NEXT \\r
@@ -274,6 +278,10 @@ typedef signed int s32;
     m68kcontext.io_cycle_counter -= (A);  \\r
     return;\r
 \r
+#define RET0() \\r
+    m68kcontext.io_cycle_counter = -6; \\r
+    return;\r
+\r
 #endif\r
 \r
 #define M68K_PPL (m68kcontext.sr >> 8) & 7\r
index 96e4675..551d757 100644 (file)
@@ -19263,8 +19263,7 @@ OPCODE(0x4E72)
                ASP = res;
        }
        m68kcontext.execinfo |= FM68K_HALTED;
-       m68kcontext.io_cycle_counter = 0;
-RET(4)
+RET0()
 }
 
 // RTE
@@ -39984,8 +39983,7 @@ OPCODE(0x6001_idle)
        PC += ((s8)(Opcode & 0xFE)) >> 1;
 #endif
        UPDATE_IDLE_COUNT
-       m68kcontext.io_cycle_counter = 10;
-RET(10)
+RET0()
 }
 
 // BCC
@@ -39995,7 +39993,8 @@ OPCODE(0x6601_idle)
        {
                UPDATE_IDLE_COUNT
                PC += ((s8)(Opcode & 0xFE)) >> 1;
-               m68kcontext.io_cycle_counter = 8;
+               //if (idle_hit)
+               RET0()
        }
 RET(8)
 }
@@ -40006,7 +40005,8 @@ OPCODE(0x6701_idle)
        {
                UPDATE_IDLE_COUNT
                PC += ((s8)(Opcode & 0xFE)) >> 1;
-               m68kcontext.io_cycle_counter = 8;
+               //if (idle_hit)
+               RET0()
        }
 RET(8)
 }
index 9ba0219..7c5e89b 100644 (file)
@@ -61,3 +61,4 @@ void  emu_DoTurbo(int *pad, int acts);
 
 extern const char * const keyNames[];
 void  emu_prepareDefaultConfig(void);
+void  emu_platformDebugCat(char *str);
index 00afc34..0f3fb61 100644 (file)
@@ -405,13 +405,16 @@ void debug_menu_loop(void)
 {\r
        int inp, mode = 0;\r
        int spr_offs = 0, dumped = 0;\r
+       char *tmp;\r
 \r
        while (1)\r
        {\r
                switch (mode)\r
                {\r
                        case 0: menu_draw_begin();\r
-                               draw_text_debug(PDebugMain(), 0, 0);\r
+                               tmp = PDebugMain();\r
+                               emu_platformDebugCat(tmp);\r
+                               draw_text_debug(tmp, 0, 0);\r
                                if (dumped) {\r
                                        smalltext_out16(SCREEN_WIDTH-6*10, SCREEN_HEIGHT-8, "dumped", 0xffff);\r
                                        dumped = 0;\r
index 9afa61b..12d70e3 100644 (file)
@@ -719,6 +719,11 @@ void emu_forcedFrame(int opts)
        currentConfig.EmuOpt = eo_old;\r
 }\r
 \r
+void emu_platformDebugCat(char *str)\r
+{\r
+       // nothing\r
+}\r
+\r
 static void simpleWait(int thissec, int lim_time)\r
 {\r
        struct timeval tval;\r
index fd18b42..f4019d9 100644 (file)
@@ -1,2 +1,2 @@
-#define VERSION "1.51a"\r
+#define VERSION "1.51b"\r
 \r
index 11b5e3f..b050419 100644 (file)
@@ -274,7 +274,7 @@ static void do_pal_update(int allow_sh, int allow_as)
        }
        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)
                dynamic_palette--;
+
        if (Pico.m.dirtyPal)
                do_pal_update(1, 1);
        if ((rendstatus & PDRAW_ACC_SPRITES) && !(Pico.video.reg[0xC]&8))
@@ -322,7 +323,7 @@ static int EmuScanSlowEnd(unsigned int num)
                        do_slowmode_lines(num);
                        dynamic_palette = 3; // last for 2 more frames
                }
-               do_pal_update(1, 0);
+               do_pal_update(1, 1);
        }
 
        if (dynamic_palette) {
@@ -534,6 +535,11 @@ static void vidResetMode(void)
        sceGuSync(0,0);
 }
 
+void emu_platformDebugCat(char *str)
+{
+       strcat(str, blit_16bit_mode ? "soft clut\n" : "hard clut\n");
+}
+
 
 /* sound stuff */
 #define SOUND_BLOCK_SIZE_NTSC (1470*2) // 1024 // 1152
index 5768a9c..d348a57 100644 (file)
@@ -1161,6 +1161,7 @@ menu_entry opt2_entries[] =
        { "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 },
        { "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 },
        { "done",                      MB_NONE,  MA_OPT2_DONE,           NULL, 0, 0, 0, 1, 0 },
 };
index fd18b42..f4019d9 100644 (file)
@@ -1,2 +1,2 @@
-#define VERSION "1.51a"\r
+#define VERSION "1.51b"\r
 \r