1.32 release
authornotaz <notasas@gmail.com>
Wed, 4 Apr 2007 18:35:48 +0000 (18:35 +0000)
committernotaz <notasas@gmail.com>
Wed, 4 Apr 2007 18:35:48 +0000 (18:35 +0000)
git-svn-id: file:///home/notaz/opt/svn/PicoDrive/platform@87 be3aeb3a-fb24-0410-a615-afba39da0efa

gp2x/940ctl.c
gp2x/Makefile
gp2x/asmutils.s
gp2x/config.txt
gp2x/emu.c
gp2x/emu.h
gp2x/menu.c
gp2x/mp3.c
gp2x/port_config.s

index f2e98a9..808e91d 100644 (file)
@@ -1,3 +1,6 @@
+// Code for communication with ARM940 and control of it.\r
+// (c) Copyright 2007, Grazvydas "notaz" Ignotas\r
+\r
 #include <stdio.h>\r
 #include <stdlib.h>\r
 #include <string.h>\r
@@ -285,7 +288,7 @@ static void wait_busy_940(int job)
                gp2x_memregs[0x3b46>>1], gp2x_memregl[0x4500>>2], gp2x_memregl[0x4510>>2]);\r
        printf("last lr: %08x, lastjob: %i\n", shared_ctl->last_lr, shared_ctl->lastjob);\r
 \r
-       strcpy(menuErrorMsg, "940 crashed.");\r
+       strcpy(menuErrorMsg, "940 crashed, too much overclock?");\r
        engineState = PGS_Menu;\r
        crashed_940 = 1;\r
 }\r
index 07f9992..c98d6a9 100644 (file)
@@ -62,6 +62,7 @@ endif
 ifeq "$(asm_misc)" "1"\r
 DEFINC += -D_ASM_MISC_C\r
 OBJS += ../../Pico/misc_asm.o\r
+OBJS += ../../Pico/cd/misc_asm.o\r
 endif\r
 ifeq "$(asm_cdpico)" "1"\r
 DEFINC += -D_ASM_CD_PICO_C\r
@@ -156,6 +157,9 @@ testrefr.gpe : test.o gp2x.o asmutils.o
 ../../Pico/cd/memory_asm.o : ../../Pico/cd/Memory.s\r
        @echo $<\r
        @$(AS) $(ASOPT) $< -o $@\r
+../../Pico/cd/misc_asm.o : ../../Pico/cd/misc.s\r
+       @echo $<\r
+       @$(AS) $(ASOPT) $< -o $@\r
 \r
 # build Cyclone\r
 ../../cpu/Cyclone/proj/Cyclone.s :\r
index 3762085..e4402ff 100644 (file)
@@ -1,3 +1,4 @@
+@ vim:filetype=armasm\r
 @ some color conversion and blitting routines\r
 \r
 @ (c) Copyright 2006, notaz\r
index 72239da..e5accbb 100644 (file)
@@ -18,67 +18,79 @@ mid-frame image changes (raster effects), so it is useful only with some games.
 Other two are accurate line-based renderers. The 8bit is faster but does not\r
 run well with some games like Street Racer.\r
 \r
-2. "Accurate timing"\r
+2. "Scaling"\r
+"hw" means GP2X hardware scaler, which causes no performance loss, but scaled\r
+image looks a bit blocky. "sw" means software scaling, which uses pixel\r
+averaging and may look a bit nicer, but blurry. Horizontal scaling is only for\r
+games which use so called "32 column mode" (256x224 or 256x240), and scales\r
+image width to 320 pixels. Vertical scales height to 240 for games which use\r
+height 224 (most of them).\r
+\r
+3. "Accurate timing"\r
 This adds some more emulation precision, but slows the emulation down. Without\r
 this option some games do not boot (Red Zone for example), others have sound\r
 problems. This options has no effect for Sega/Mega CD emulation.\r
 \r
-3. "Accurate sprites"\r
+4. "Accurate sprites"\r
 This option improves emulation of sprite priorities, it also enables emulation\r
 of sprite collision bit. If you see one sprite being drawn incorrectly above\r
 the other (often seen in Sonic 3D Blast), you can enable this to fix the problem.\r
-This only works with the default renderer (see first option).\r
+This only works with the accurate renderers (see first option).\r
 \r
-4. "Show FPS"\r
+5. "Show FPS"\r
 Self-explanatory. Format is XX/YY, where XX is the number of rendered frames and\r
 YY is the number of emulated frames per second.\r
 \r
-5. "Frameskip"\r
+6. "Frameskip"\r
 How many frames to skip rendering before displaying another.\r
 "Auto" is recommended.\r
 \r
-6. "Enable sound"\r
+7. "Enable sound"\r
 Does what it says. You must enable at least YM2612 or SN76496 (in advanced options,\r
 see below) for this to make sense.\r
 \r
-7. "Sound Quality"\r
+8. "Sound Quality"\r
 Sound rate and stereo mode. If you want 44100Hz sound, it is recommended to enable\r
 the second core (next option).\r
 \r
-8. "Use ARM940 core for sound"\r
+9. "Use ARM940 core for sound"\r
 This option causes PicoDrive to use ARM940T core (GP2X's second CPU) for sound \r
 (i.e. to generate YM2612 samples) to improve performance noticeably.\r
 \r
-9. "6 button pad"\r
+10. "6 button pad"\r
 If you enable this, games will think that 6 button gamepad is connected. If you\r
 go and reconfigure your keys, you will be able to bind X,Y,Z and mode actions.\r
 \r
-10. "Genesis Region"\r
+11. "Region"\r
 This option lets you force the game to think it is running on machine from the\r
 specified region, or just to set autodetection order. Also affects Sega/Mega CD.\r
 \r
-11. "Use SRAM/BRAM savestates"\r
+12. "Use SRAM/BRAM savestates"\r
 This will automatically read/write SRAM (or BRAM for Sega/Mega CD) savestates for\r
 games which are using them. SRAM is saved whenever you pause your game or exit the\r
 emulator.\r
 \r
-12. "GP2X CPU clocks"\r
+13. "Confirm savestate"\r
+Allows to enable confirmation on savestate saving (to prevent savestate overwrites),\r
+on loading (to prevent destroying current game progress), and on both or none.\r
+\r
+14. "GP2X CPU clocks"\r
 Here you can change clocks of both GP2X's CPUs. Larger values increase performance.\r
 There is no separate option for the second CPU because both CPUs use the same clock\r
 source. Setting this option to 200 will cause PicoDrive NOT to change GP2X's clocks\r
 at all (this is if you use external program to set clock).\r
 \r
-13. "[Sega/Mega CD options]"\r
+15. "[Sega/Mega CD options]"\r
 Enters Sega/Mega CD options menu (see below).\r
 \r
-14. "[advanced options]"\r
+16. "[advanced options]"\r
 Enters advanced options menu (see below).\r
 \r
-15. "Save cfg as default"\r
+17. "Save cfg as default"\r
 If you save your config here it will be loaded on next ROM load, but only if there\r
 is no game specific config saved (which will be loaded in that case).\r
 \r
-16. "Save cfg for current game only"\r
+18. "Save cfg for current game only"\r
 Whenever you load current ROM again these settings will be loaded (squidgehack and\r
 RAM settings will not take effect until emulator is restarted).\r
 \r
@@ -88,45 +100,41 @@ Advanced configuration
 \r
 Enter [advanced options] in config menu to see these options.\r
 \r
-1. "Scale 32 column mode"\r
-This enables hardware scaling for lower-res genesis mode (where width is\r
-32 8-pixel tiles, instead of 40 in other mode).\r
-\r
-2. "Gamma correction"\r
+1. "Gamma correction"\r
 Alters image gamma through GP2X hardware. Larger values make image to look brighter,\r
 lower - darker (default is 1.0).\r
 \r
-3. "Emulate Z80"\r
+2. "Emulate Z80"\r
 Enables emulation of Z80 chip, which was mostly used to drive the other sound chips.\r
 Some games do complex sync with it, so you must enable it even if you don't use\r
 sound to be able to play them.\r
 \r
-4. "Emulate YM2612 (FM)"\r
+3. "Emulate YM2612 (FM)"\r
 This enables emulation of six-channel FM sound synthesizer chip, which was used to\r
 produce sound effects and music.\r
 \r
-5. "Emulate SN76496 (PSG)"\r
+4. "Emulate SN76496 (PSG)"\r
 This enables emulation of additional sound chip for additional effects.\r
 \r
 Note: if you change sound settings AFTER loading a ROM, you may need to reset\r
 game to get sound. This is because most games initialize sound chips on\r
 startup, and this data is lost when sound chips are being enabled/disabled.\r
 \r
-6. "gzip savestates"\r
+5. "gzip savestates"\r
 This will always apply gzip compression on your savestates, allowing you to\r
 save some space and load/save time.\r
 \r
-7. "Don't save config on exit"\r
-This will disable config autowrite on exit (which might cause SD card corruption\r
-according to DaveC).\r
+6. "Don't save last used ROM"\r
+This will disable writing last used ROM to config on exit (what might cause SD\r
+card corruption according to DaveC).\r
 \r
-8. "craigix's RAM timings"\r
+7. "craigix's RAM timings"\r
 This overclocks the GP2X RAM chips, but may cause instability. Recommended if you\r
 use the second core for sound. Needs emulator restart to take effect.\r
 See this thread:\r
 http://www.gp32x.com/board/index.php?showtopic=32319\r
 \r
-9. "squidgehack"\r
+8. "squidgehack"\r
 Well known way to improve the GP2X performance. You must restart the emulator\r
 for the change of this option to take effect.\r
 \r
@@ -135,32 +143,35 @@ Sega/Mega CD options
 --------------------\r
 \r
 1,2,3. "USA/EUR/JAP BIOS"\r
-These options just shows if your BIOS files were correctly detected be the\r
-emulator (it shows the filename it is using). If so, you can press Start to test\r
-your BIOS.\r
+These options just show if your BIOS files were correctly detected by the\r
+emulator (it shows the filename it is using). If so, you can press Start to\r
+test your BIOS.\r
 \r
 4. "CD LEDs"\r
 The Sega/Mega CD unit had two blinking LEDs (red and green) on it. This option\r
-will display them on left-top corner of the screen.\r
+will display them on top-left corner of the screen.\r
 \r
 5. "CDDA audio (using mp3s)"\r
 This option enables CD audio playback.\r
 \r
 6. "PCM audio"\r
 This enables 8 channel PCM sound source. It is required for some games to run,\r
-because they monitor state of the audio chip.\r
+because they monitor state of this audio chip.\r
 \r
 7. "ReadAhead buffer"\r
 This option is for dealing with slow SD card access in GP2X, which makes FMV\r
 games unplayable. It will allow emulator not to access SD card for longer periods\r
 of time, but it will take more time to fill the buffer.\r
 \r
-8. "Scale/Rot. fx"\r
+8. "Save RAM cart"\r
+Here you can enable 64K RAM cart. Format it in BIOS if you do.\r
+\r
+9. "Scale/Rot. fx"\r
 The Sega/Mega CD had scaling/rotation chip, which allows effects similar to\r
 "Mode 7" effects in SNES. Unfortunately emulating it is slow, and very few games\r
-used it, so it's better to disable this option.\r
+used it, so it's better to disable this option, unless game really needs it.\r
 \r
-9. "Better sync"\r
+10. "Better sync"\r
 This option is similar to "Perfect synchro" in Gens. Some games require it to run,\r
 for example most (all?) Wolfteam games, and some other ones. Don't use it for\r
 games which don't need it, it will just slow them down.\r
index f3b4c02..074d620 100644 (file)
@@ -1,4 +1,4 @@
-// (c) Copyright 2006 notaz, All rights reserved.\r
+// (c) Copyright 2006-2007 notaz, All rights reserved.\r
 // Free for non-commercial use.\r
 \r
 // For commercial use, separate licencing terms must be obtained.\r
@@ -310,7 +310,7 @@ int emu_ReloadRom(void)
 \r
        // detect wrong files (Pico crashes on very small files), also see if ROM EP is good\r
        if(rom_size <= 0x200 || strncmp((char *)rom_data, "Pico", 4) == 0 ||\r
-         ((*(unsigned short *)(rom_data+4)<<16)|(*(unsigned short *)(rom_data+6))) >= (int)rom_size) {\r
+         ((*(unsigned char *)(rom_data+4)<<16)|(*(unsigned short *)(rom_data+6))) >= (int)rom_size) {\r
                if (rom_data) free(rom_data);\r
                rom_data = 0;\r
                sprintf(menuErrorMsg, "Not a ROM selected.");\r
@@ -482,8 +482,8 @@ int emu_ReadConfig(int game)
                // set default config\r
                memset(&currentConfig, 0, sizeof(currentConfig));\r
                currentConfig.lastRomFile[0] = 0;\r
-               currentConfig.EmuOpt  = 0x1f | 0x400; // | cd_leds\r
-               currentConfig.PicoOpt = 0x0f | 0xe00; // | use_940 | cd_pcm | cd_cdda\r
+               currentConfig.EmuOpt  = 0x1f | 0x600; // | confirm_save, cd_leds\r
+               currentConfig.PicoOpt = 0x0f | 0xe00; // | use_940, cd_pcm, cd_cdda\r
                currentConfig.PsndRate = 22050; // 44100;\r
                currentConfig.PicoRegion = 0; // auto\r
                currentConfig.PicoAutoRgnOrder = 0x184; // US, EU, JP\r
@@ -1328,7 +1328,7 @@ if (Pico.m.frame_count == 31563) {
 \r
        // save SRAM\r
        if((currentConfig.EmuOpt & 1) && SRam.changed) {\r
-               osd_text(4, 232, "Writing SRAM/BRAM..");\r
+               emu_state_cb("Writing SRAM/BRAM..");\r
                emu_SaveLoadGame(0, 1);\r
                SRam.changed = 0;\r
        }\r
@@ -1459,29 +1459,40 @@ int emu_SaveLoadGame(int load, int sram)
                FILE *sramFile;\r
                int sram_size;\r
                unsigned char *sram_data;\r
+               int truncate = 1;\r
                if (PicoMCD&1) {\r
-                       sram_size = 0x2000;\r
-                       sram_data = Pico_mcd->bram;\r
+                       if (PicoOpt&0x8000) { // MCD RAM cart?\r
+                               sram_size = 0x12000;\r
+                               sram_data = SRam.data;\r
+                               if (sram_data)\r
+                                       memcpy32((int *)sram_data, (int *)Pico_mcd->bram, 0x2000/4);\r
+                       } else {\r
+                               sram_size = 0x2000;\r
+                               sram_data = Pico_mcd->bram;\r
+                               truncate  = 0; // the .brm may contain RAM cart data after normal brm\r
+                       }\r
                } else {\r
                        sram_size = SRam.end-SRam.start+1;\r
                        if(SRam.reg_back & 4) sram_size=0x2000;\r
                        sram_data = SRam.data;\r
                }\r
-               if(!sram_data) return 0; // SRam forcefully disabled for this game\r
+               if (!sram_data) return 0; // SRam forcefully disabled for this game\r
 \r
-               if(load) {\r
+               if (load) {\r
                        sramFile = fopen(saveFname, "rb");\r
                        if(!sramFile) return -1;\r
                        fread(sram_data, 1, sram_size, sramFile);\r
                        fclose(sramFile);\r
+                       if ((PicoMCD&1) && (PicoOpt&0x8000))\r
+                               memcpy32((int *)Pico_mcd->bram, (int *)sram_data, 0x2000/4);\r
                } else {\r
                        // sram save needs some special processing\r
                        // see if we have anything to save\r
-                       for(; sram_size > 0; sram_size--)\r
-                               if(sram_data[sram_size-1]) break;\r
+                       for (; sram_size > 0; sram_size--)\r
+                               if (sram_data[sram_size-1]) break;\r
 \r
-                       if(sram_size) {\r
-                               sramFile = fopen(saveFname, "wb");\r
+                       if (sram_size) {\r
+                               sramFile = fopen(saveFname, truncate ? "wb" : "r+b");\r
                                ret = fwrite(sram_data, 1, sram_size, sramFile);\r
                                ret = (ret != sram_size) ? -1 : 0;\r
                                fclose(sramFile);\r
index 986a77d..75a0322 100644 (file)
@@ -1,4 +1,4 @@
-// (c) Copyright 2006 notaz, All rights reserved.\r
+// (c) Copyright 2006-2007 notaz, All rights reserved.\r
 // Free for non-commercial use.\r
 \r
 // For commercial use, separate licencing terms must be obtained.\r
index ce3f72f..2275279 100644 (file)
@@ -772,8 +772,9 @@ static void draw_cd_menu_options(int menu_sel, char *b_us, char *b_eu, char *b_j
        gp2x_text_out8(tl_x, (y+=10), "CDDA audio (using mp3s)    %s", (currentConfig.PicoOpt&0x0800)?"ON":"OFF"); // 4\r
        gp2x_text_out8(tl_x, (y+=10), "PCM audio                  %s", (currentConfig.PicoOpt&0x0400)?"ON":"OFF"); // 5\r
        gp2x_text_out8(tl_x, (y+=10), "ReadAhead buffer      %s", ra_buff); // 6\r
-       gp2x_text_out8(tl_x, (y+=10), "Scale/Rot. fx (slow)       %s", (currentConfig.PicoOpt&0x1000)?"ON":"OFF"); // 7\r
-       gp2x_text_out8(tl_x, (y+=10), "Better sync (slow)         %s", (currentConfig.PicoOpt&0x2000)?"ON":"OFF"); // 8\r
+       gp2x_text_out8(tl_x, (y+=10), "SaveRAM cart               %s", (currentConfig.PicoOpt&0x8000)?"ON":"OFF"); // 7\r
+       gp2x_text_out8(tl_x, (y+=10), "Scale/Rot. fx (slow)       %s", (currentConfig.PicoOpt&0x1000)?"ON":"OFF"); // 8\r
+       gp2x_text_out8(tl_x, (y+=10), "Better sync (slow)         %s", (currentConfig.PicoOpt&0x2000)?"ON":"OFF"); // 9\r
        gp2x_text_out8(tl_x, (y+=10), "Done");\r
 \r
        // draw cursor\r
@@ -789,7 +790,7 @@ static void draw_cd_menu_options(int menu_sel, char *b_us, char *b_eu, char *b_j
 \r
 static void cd_menu_loop_options(void)\r
 {\r
-       int menu_sel = 0, menu_sel_max = 9;\r
+       int menu_sel = 0, menu_sel_max = 10;\r
        unsigned long inp = 0;\r
        char bios_us[32], bios_eu[32], bios_jp[32], *bios, *p;\r
 \r
@@ -829,9 +830,10 @@ static void cd_menu_loop_options(void)
                                                if (PicoCDBuffers > 8*1024) PicoCDBuffers = 8*1024; // 16M\r
                                        }\r
                                        break;\r
-                               case  7: currentConfig.PicoOpt^=0x1000; break;\r
-                               case  8: currentConfig.PicoOpt^=0x2000; break;\r
-                               case  9: return;\r
+                               case  7: currentConfig.PicoOpt^=0x8000; break;\r
+                               case  8: currentConfig.PicoOpt^=0x1000; break;\r
+                               case  9: currentConfig.PicoOpt^=0x2000; break;\r
+                               case 10: return;\r
                        }\r
                }\r
                if(inp & (GP2X_X|GP2X_A)) return;\r
@@ -996,7 +998,7 @@ static void draw_menu_options(int menu_sel)
        gp2x_text_out8(tl_x, (y+=10), "Sound Quality:     %5iHz %s",   currentConfig.PsndRate, monostereo);\r
        gp2x_text_out8(tl_x, (y+=10), "Use ARM940 core for sound  %s", (currentConfig.PicoOpt&0x200)?"ON":"OFF"); // 8\r
        gp2x_text_out8(tl_x, (y+=10), "6 button pad               %s", (currentConfig.PicoOpt&0x020)?"ON":"OFF"); // 9\r
-       gp2x_text_out8(tl_x, (y+=10), "Genesis Region:      %s",       region_name(currentConfig.PicoRegion));\r
+       gp2x_text_out8(tl_x, (y+=10), "Region:              %s",       region_name(currentConfig.PicoRegion));\r
        gp2x_text_out8(tl_x, (y+=10), "Use SRAM/BRAM savestates   %s", (currentConfig.EmuOpt &0x001)?"ON":"OFF"); // 11\r
        gp2x_text_out8(tl_x, (y+=10), "Confirm savestate          %s", strssconfirm); // 12\r
        gp2x_text_out8(tl_x, (y+=10), "Save slot                  %i", state_slot); // 13\r
index e37b774..4fba953 100644 (file)
@@ -1,3 +1,6 @@
+// Some mp3 related code for Sega/Mega CD
+// (c) Copyright 2007, Grazvydas "notaz" Ignotas
+
 #include <stdio.h>
 #include <string.h>
 
index 094ea3c..9fac2a3 100644 (file)
@@ -1,3 +1,5 @@
+@ vim:filetype=armasm\r
+\r
 @ .equiv START_ROW,    1\r
 @ .equiv END_ROW,              27\r
 @ one row means 8 pixels. If above example was used, (27-1)*8=208 lines would be rendered.\r