mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 15:27:46 -04:00
portable documentation
git-svn-id: file:///home/notaz/opt/svn/PicoDrive@269 be3aeb3a-fb24-0410-a615-afba39da0efa
This commit is contained in:
parent
da42200b24
commit
7eed09b34f
6 changed files with 428 additions and 239 deletions
|
@ -1,26 +1,39 @@
|
||||||
|
#ifdef GP2X
|
||||||
For help / comments / questions visit GP32X boards at:
|
For help / comments / questions visit GP32X boards at:
|
||||||
http://www.gp32x.com/board/
|
http://www.gp32x.com/board/
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
About
|
About
|
||||||
-----
|
-----
|
||||||
|
|
||||||
This is yet another Megadrive / Genesis / Sega CD / Mega CD emulator, which
|
This is yet another Megadrive / Genesis / Sega CD / Mega CD emulator, which
|
||||||
was written having ARM-based handheld devices in mind (such as PDAs,
|
was written having ARM-based handheld devices in mind (such as PDAs,
|
||||||
smartphones and handheld consoles like GP2X of course). The critical parts
|
smartphones and handheld consoles like GP2X and Gizmondo of course).
|
||||||
(renderer, 68K and Z80 cpu interpreters) and some other random code is
|
The critical parts (renderer, 68K and Z80 cpu interpreters) and some other
|
||||||
written in ARM asm, other code is C. The base code originates from Dave's
|
random code is written in ARM asm, other code is C. The base code originates
|
||||||
(fdave, finalburn) PicoDrive 0.30 for Pocket PC. The Sega/Mega CD code is
|
from Dave's (fdave, finalburn) PicoDrive 0.30 for Pocket PC. The Sega/Mega CD
|
||||||
roughly based on Stephane Dallongeville's Gens.
|
code is roughly based on Stephane Dallongeville's Gens.
|
||||||
|
|
||||||
|
|
||||||
How to make it run
|
How to make it run
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
|
#ifdef GP2X
|
||||||
Copy PicoDrive.gpe, pico940.bin and mmuhack.o to any place in your filesystem
|
Copy PicoDrive.gpe, pico940.bin and mmuhack.o to any place in your filesystem
|
||||||
(all 3 files must be in the same directory) and run PicoDrive.gpe.
|
(all 3 files must be in the same directory) and run PicoDrive.gpe.
|
||||||
Then load a ROM and enjoy! ROMs can be in .smd or .bin format and can be zipped.
|
Then load a ROM and enjoy! ROMs can be in .smd or .bin format and can be zipped.
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#ifdef GIZ
|
||||||
|
First make sure you have homebrew-enabled Service Pack installed. Then copy
|
||||||
|
PicoDrive.exe and KGSDK.dll to any place in your filesystem (both files must
|
||||||
|
be in the same directory) and run PicoDrive.exe using the launcher of your choice
|
||||||
|
(some of them might require renaming PicoDrive.exe to Autorun.exe, placing it in
|
||||||
|
the root of SD, etc). Then load a ROM and enjoy! ROMs can be placed anywhere, can
|
||||||
|
be in .smd or .bin format and can be zipped (one ROM per zip).
|
||||||
|
|
||||||
|
#endif
|
||||||
If you have any problems (game does not boot, sound is glitchy, broken graphics),
|
If you have any problems (game does not boot, sound is glitchy, broken graphics),
|
||||||
make sure you enable "Accurate timing", "Emulate Z80" and use "16bit accurate
|
make sure you enable "Accurate timing", "Emulate Z80" and use "16bit accurate
|
||||||
renderer". This way you will get the best compatibility this emulator can
|
renderer". This way you will get the best compatibility this emulator can
|
||||||
|
@ -31,7 +44,8 @@ How to run Sega/Mega CD games
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
To play any game, you need BIOS files. These files must be copied to the same
|
To play any game, you need BIOS files. These files must be copied to the same
|
||||||
directory as PicoDrive.gpe. Files can be named as follows:
|
directory as PicoDrive. Files can be named as follows:
|
||||||
|
|
||||||
US: us_scd1_9210.bin us_scd2_9306.bin SegaCDBIOS9303.bin
|
US: us_scd1_9210.bin us_scd2_9306.bin SegaCDBIOS9303.bin
|
||||||
EU: eu_mcd1_9210.bin eu_mcd2_9303.bin eu_mcd2_9306.bin
|
EU: eu_mcd1_9210.bin eu_mcd2_9303.bin eu_mcd2_9306.bin
|
||||||
JP: jp_mcd1_9112.bin jp_mcd1_9111.bin
|
JP: jp_mcd1_9112.bin jp_mcd1_9111.bin
|
||||||
|
@ -39,8 +53,8 @@ these files can also be zipped.
|
||||||
|
|
||||||
The game must be dumped to ISO format, but BIN can be used too. If you want
|
The game must be dumped to ISO format, but BIN can be used too. If you want
|
||||||
CD music, you must use ISO+mp3 files. Audio from BIN files won't be read at
|
CD music, you must use ISO+mp3 files. Audio from BIN files won't be read at
|
||||||
all due to SD access issues. Also BIN files are usually larger, so it's better
|
all. Also BIN files are usually larger, so it's better to use ISO. ISO+mp3
|
||||||
to use ISO. ISO+mp3 files can be named similarly as for other emus.
|
files can be named similarly as for other emus.
|
||||||
Here are some examples:
|
Here are some examples:
|
||||||
|
|
||||||
SonicCD.iso data track
|
SonicCD.iso data track
|
||||||
|
@ -63,37 +77,280 @@ SonicCD_02.mp3 audio track 1 (CD track 2)
|
||||||
SonicCD_03.mp3
|
SonicCD_03.mp3
|
||||||
...
|
...
|
||||||
|
|
||||||
Notes:
|
|
||||||
If the game hangs after Sega logo, you may need to enable "better sync"
|
|
||||||
and/or "Scale/Rot. fx" options, found in "Sega/Mega CD options" submenu, and
|
|
||||||
then reset the game.
|
|
||||||
If FMV game performance is poor, try adjusting "ReadAhead buffer" to something
|
|
||||||
like 2048K.
|
|
||||||
|
|
||||||
|
|
||||||
Configuration
|
|
||||||
-------------
|
|
||||||
|
|
||||||
See config.txt file.
|
|
||||||
|
|
||||||
|
|
||||||
Other important stuff
|
Other important stuff
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
|
* If your Genesis/MD game hangs or has glitches, this is most likely because
|
||||||
|
"Accurate timing" option is not enabled, or 8bit fast renderer is used
|
||||||
|
(try the 16 bit one), or Z80 is disabled in "advanced options".
|
||||||
|
* Sega/Mega CD: If the game hangs after Sega logo, you may need to enable
|
||||||
|
"better sync" and/or "Scale/Rot. fx" options, found in "Sega/Mega CD options"
|
||||||
|
submenu, and then reset the game. Some other games may also require
|
||||||
|
"CDDA audio" and "PCM audio" to work.
|
||||||
|
#ifdef GP2X
|
||||||
|
* Sega/Mega CD: if FMV game performance is poor, try adjusting
|
||||||
|
"ReadAhead buffer" to something like 2048K.
|
||||||
* When you use both GP2X CPUs, keep in mind that you can't overclock as high as
|
* When you use both GP2X CPUs, keep in mind that you can't overclock as high as
|
||||||
when using ARM920 only. For example my GP2X when run singlecore can reach
|
when using ARM920 only. For example my GP2X when run singlecore can reach
|
||||||
280MHz, but with both cores it's about 250MHz. When overclocked too much,
|
280MHz, but with both cores it's about 250MHz. When overclocked too much,
|
||||||
it may start hanging and producing random noise, or causing ARM940 crashes
|
it may start hanging and producing random noise, or causing ARM940 crashes
|
||||||
("940 crashed" message displayed).
|
("940 crashed" message displayed).
|
||||||
|
#endif
|
||||||
* PicoDrive is not a mp3 player, so all mp3s MUST be encoded at 44.1kHz stereo.
|
* PicoDrive is not a mp3 player, so all mp3s MUST be encoded at 44.1kHz stereo.
|
||||||
Badly encoded mp3s can cause various kind of problems, like noises, incorrect
|
Badly encoded mp3s can cause various kind of problems, like noises, incorrect
|
||||||
playback speeds, not repeating music or even prevent game from starting.
|
playback speeds, not repeating music or even prevent game from starting.
|
||||||
* Use lower bitrate for better performance (96 or 128kbps CBRs recommended).
|
* Use lower bitrate for better performance (96 or 128kbps CBRs recommended).
|
||||||
|
#ifdef GP2X
|
||||||
* Due to internal implementation mp3s must not be larger that 12MB
|
* Due to internal implementation mp3s must not be larger that 12MB
|
||||||
(12582912 bytes). Larger mp3s will not be fully loaded.
|
(12582912 bytes). Larger mp3s will not be fully loaded.
|
||||||
* RAM timings option is good for dualcore operation (it is disabled by
|
* RAM timings option is good for dualcore operation (it is disabled by
|
||||||
default because it doesn't work on every GP2X, so enable it in advanced
|
default because it doesn't work on every GP2X, so enable it in advanced
|
||||||
options).
|
options).
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
Configuration
|
||||||
|
-------------
|
||||||
|
|
||||||
|
@@0. "Renderer"
|
||||||
|
#ifdef GP2X
|
||||||
|
8bit fast:
|
||||||
|
This enables alternative heavily optimized tile-based renderer, which renders
|
||||||
|
pixels not line-by-line (this is what accurate renderers do), but in 8x8 tiles,
|
||||||
|
which is much faster. But because of the way it works it can't render any
|
||||||
|
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
|
||||||
|
run well with some games like Street Racer.
|
||||||
|
#endif
|
||||||
|
#ifdef GIZ
|
||||||
|
This option allows to switch between 16bit and 8bit renderers. The 8bit one is
|
||||||
|
a bit faster for some games, but not much, because colors still need to be
|
||||||
|
converted to 16bit, as this is what Gizmondo requires. It also introduces
|
||||||
|
graphics problems for some games, so it's best to use 16bit one.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef GIZ
|
||||||
|
@@0. "Interlaced rendering"
|
||||||
|
This option was designed to work around slow framebuffer access (the Gizmondo's
|
||||||
|
main bottleneck) by drawing every other line (odd numbered lines during odd
|
||||||
|
numbered frames and even numbered lines during even frames). This improves
|
||||||
|
performance greatly, but introduces artifacts for fast scrolling games.
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#ifdef GP2X
|
||||||
|
@@0. "Scaling"
|
||||||
|
"hw" means GP2X hardware scaler, which causes no performance loss, but scaled
|
||||||
|
image looks a bit blocky. "sw" means software scaling, which uses pixel
|
||||||
|
averaging and may look a bit nicer, but blurry. Horizontal scaling is only for
|
||||||
|
games which use so called "32 column mode" (256x224 or 256x240), and scales
|
||||||
|
image width to 320 pixels. Vertical scales height to 240 for games which use
|
||||||
|
height 224 (most of them).
|
||||||
|
#endif
|
||||||
|
#ifdef GIZ
|
||||||
|
@@0. "Scale low res mode"
|
||||||
|
The Genesis/Megadrive had several graphics modes, some of which were only 256
|
||||||
|
pixels wide. This option scales their width to 320 by using simple
|
||||||
|
pixel averaging scaling. Works only when 16bit renderer is enabled.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@@0. "Accurate timing"
|
||||||
|
This adds some more emulation precision, but slows the emulation down. Without
|
||||||
|
this option some games do not boot (Red Zone for example), others have sound
|
||||||
|
problems. This options has no effect for Sega/Mega CD emulation.
|
||||||
|
|
||||||
|
@@0. "Accurate sprites"
|
||||||
|
This option improves emulation of sprite priorities, it also enables emulation
|
||||||
|
of sprite collision bit. If you see one sprite being drawn incorrectly above
|
||||||
|
the other (often seen in Sonic 3D Blast), you can enable this to fix the problem.
|
||||||
|
This only works with the accurate renderers (see first option).
|
||||||
|
|
||||||
|
@@0. "Show FPS"
|
||||||
|
Self-explanatory. Format is XX/YY, where XX is the number of rendered frames and
|
||||||
|
YY is the number of emulated frames per second.
|
||||||
|
|
||||||
|
@@0. "Frameskip"
|
||||||
|
How many frames to skip rendering before displaying another.
|
||||||
|
"Auto" is recommended.
|
||||||
|
|
||||||
|
@@0. "Enable sound"
|
||||||
|
Does what it says. You must enable at least YM2612 or SN76496 (in advanced options,
|
||||||
|
see below) for this to make sense (already done by default).
|
||||||
|
|
||||||
|
@@0. "Sound Quality"
|
||||||
|
Sound rate and stereo mode. Mono is not available in Sega/Mega CD mode.
|
||||||
|
#ifdef GP2X
|
||||||
|
If you want 44100Hz sound, it is recommended to enable the second core (next option).
|
||||||
|
|
||||||
|
@@0. "Use ARM940 core for sound"
|
||||||
|
This option causes PicoDrive to use ARM940T core (GP2X's second CPU) for sound
|
||||||
|
(i.e. to generate YM2612 samples) to improve performance noticeably.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@@0. "6 button pad"
|
||||||
|
If you enable this, games will think that 6 button gamepad is connected. If you
|
||||||
|
go and reconfigure your keys, you will be able to bind X,Y,Z and mode actions.
|
||||||
|
|
||||||
|
@@0. "Region"
|
||||||
|
This option lets you force the game to think it is running on machine from the
|
||||||
|
specified region, or just to set autodetection order. Also affects Sega/Mega CD.
|
||||||
|
|
||||||
|
@@0. "Use SRAM/BRAM savestates"
|
||||||
|
This will automatically read/write SRAM (or BRAM for Sega/Mega CD) savestates for
|
||||||
|
games which are using them. SRAM is saved whenever you pause your game or exit the
|
||||||
|
emulator.
|
||||||
|
|
||||||
|
@@0. "Confirm savestate"
|
||||||
|
Allows to enable confirmation on savestate saving (to prevent savestate overwrites),
|
||||||
|
on loading (to prevent destroying current game progress), and on both or none, when
|
||||||
|
using shortcut buttons (not menu) for saving/loading.
|
||||||
|
|
||||||
|
@@0. "Save slot"
|
||||||
|
This is a slot number to use for savestates. This can also be configured to be
|
||||||
|
changed with a button (see "key configuration").
|
||||||
|
|
||||||
|
#ifdef GP2X
|
||||||
|
@@0. "GP2X CPU clocks"
|
||||||
|
Here you can change clocks of both GP2X's CPUs. Larger values increase performance.
|
||||||
|
There is no separate option for the second CPU because both CPUs use the same clock
|
||||||
|
source. Setting this option to 200 will cause PicoDrive NOT to change GP2X's clocks
|
||||||
|
at all (this is if you use external program to set clock).
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@@0. "[Sega/Mega CD options]"
|
||||||
|
Enters Sega/Mega CD options menu (see below).
|
||||||
|
|
||||||
|
@@0. "[advanced options]"
|
||||||
|
Enters advanced options menu (see below).
|
||||||
|
|
||||||
|
@@0. "Save cfg as default"
|
||||||
|
If you save your config here it will be loaded on next ROM load, but only if there
|
||||||
|
is no game specific config saved (which will be loaded in that case).
|
||||||
|
You can press left/right to switch to a different config profile.
|
||||||
|
|
||||||
|
@@0. "Save cfg for current game only"
|
||||||
|
Whenever you load current ROM again these settings will be loaded
|
||||||
|
#ifdef GP2X
|
||||||
|
(squidgehack and RAM settings will not take effect until emulator is restarted).
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
Advanced configuration
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
Enter [advanced options] in config menu to see these options.
|
||||||
|
|
||||||
|
#ifdef GP2X
|
||||||
|
@@1. "Gamma correction"
|
||||||
|
Alters image gamma through GP2X hardware. Larger values make image to look brighter,
|
||||||
|
lower - darker (default is 1.0).
|
||||||
|
|
||||||
|
@@1. "A_SN's gamma curve"
|
||||||
|
If this is enabled, different gamma adjustment method will be used (suggested by A_SN
|
||||||
|
from gp32x boards). Basically it makes difference for dark and bright colors.
|
||||||
|
|
||||||
|
@@1. "Perfect vsync"
|
||||||
|
This one adjusts the LCD refresh rate to better match game's refresh rate and starts
|
||||||
|
synchronizing rendering with it. Should make scrolling smoother and eliminate tearing.
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@@1. "Emulate Z80"
|
||||||
|
Enables emulation of Z80 chip, which was mostly used to drive the other sound chips.
|
||||||
|
Some games do complex sync with it, so you must enable it even if you don't use
|
||||||
|
sound to be able to play them.
|
||||||
|
|
||||||
|
@@1. "Emulate YM2612 (FM)"
|
||||||
|
This enables emulation of six-channel FM sound synthesizer chip, which was used to
|
||||||
|
produce sound effects and music.
|
||||||
|
|
||||||
|
@@1. "Emulate SN76496 (PSG)"
|
||||||
|
This enables emulation of additional sound chip for additional effects.
|
||||||
|
|
||||||
|
Note: if you change sound settings AFTER loading a ROM, you may need to reset
|
||||||
|
game to get sound. This is because most games initialize sound chips on
|
||||||
|
startup, and this data is lost when sound chips are being enabled/disabled.
|
||||||
|
|
||||||
|
#ifdef GIZ
|
||||||
|
@@1. "Wait for V-sync"
|
||||||
|
Waits for vertical sync before drawing. This option doesn't eliminate tearing
|
||||||
|
problems, because full framebuffer update takes much more time then the blanking
|
||||||
|
period lasts on Gizmondo..
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@@1. "gzip savestates"
|
||||||
|
This will always apply gzip compression on your savestates, allowing you to
|
||||||
|
save some space and load/save time.
|
||||||
|
|
||||||
|
@@1. "Don't save last used ROM"
|
||||||
|
This will disable writing last used ROM to config on exit (what might cause SD
|
||||||
|
card corruption according to DaveC).
|
||||||
|
|
||||||
|
#ifdef GP2X
|
||||||
|
@@1. "craigix's RAM timings"
|
||||||
|
This overclocks the GP2X RAM chips, but may cause instability. Recommended if you
|
||||||
|
use the second core for sound. Needs emulator restart to take effect.
|
||||||
|
See this thread:
|
||||||
|
http://www.gp32x.com/board/index.php?showtopic=32319
|
||||||
|
|
||||||
|
@@1. "squidgehack"
|
||||||
|
Well known way to improve the GP2X performance. You must restart the emulator
|
||||||
|
for the change of this option to take effect.
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
Sega/Mega CD options
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
@@2,@@2,@@2. "USA/EUR/JAP BIOS"
|
||||||
|
These options just show if your BIOS files were correctly detected by the
|
||||||
|
emulator (it shows the filename it is using). If so, you can press Start to
|
||||||
|
test your BIOS.
|
||||||
|
|
||||||
|
@@2. "CD LEDs"
|
||||||
|
The Sega/Mega CD unit had two blinking LEDs (red and green) on it. This option
|
||||||
|
will display them on top-left corner of the screen.
|
||||||
|
|
||||||
|
@@2. "CDDA audio (using mp3s)"
|
||||||
|
This option enables CD audio playback.
|
||||||
|
|
||||||
|
@@2. "PCM audio"
|
||||||
|
This enables 8 channel PCM sound source. It is required for some games to run,
|
||||||
|
because they monitor state of this audio chip.
|
||||||
|
|
||||||
|
@@2. "ReadAhead buffer"
|
||||||
|
#ifdef GP2X
|
||||||
|
This option is for dealing with slow SD card access in GP2X, which makes FMV
|
||||||
|
games unplayable. It will allow emulator not to access SD card for longer periods
|
||||||
|
of time, but it will take more time to fill the buffer.
|
||||||
|
#endif
|
||||||
|
#ifdef GIZ
|
||||||
|
This option can prefetch more data from the CD then read by the game - not really
|
||||||
|
useful for Gizmondo (this is a workaround for SD access problems on GP2X port).
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@@2. "Save RAM cart"
|
||||||
|
Here you can enable 64K RAM cart. Format it in BIOS if you do.
|
||||||
|
|
||||||
|
@@2. "Scale/Rot. fx"
|
||||||
|
The Sega/Mega CD had scaling/rotation chip, which allows effects similar to
|
||||||
|
"Mode 7" effects in SNES. Unfortunately emulating it is slow, and very few games
|
||||||
|
used it, so it's better to disable this option, unless game really needs it.
|
||||||
|
|
||||||
|
@@2. "Better sync"
|
||||||
|
This option is similar to "Perfect synchro" in Gens. Some games require it to run,
|
||||||
|
for example most (all?) Wolfteam games, and some other ones. Don't use it for
|
||||||
|
games which don't need it, it will just slow them down.
|
||||||
|
|
||||||
|
|
||||||
|
Key configuration
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
Select "Configure controls" from the main menu. Then select "Player 1" and you will
|
||||||
|
see two columns. The left column lists names of Genesis/MD controller buttons, and
|
||||||
|
the right GP2X ones, which are assigned to them. If you bind 2 different GP2X buttons
|
||||||
|
to the same action, you will get a combo (which means that you will have to press
|
||||||
|
both buttons for that action to happen.
|
||||||
|
|
||||||
|
|
||||||
Cheat support
|
Cheat support
|
||||||
|
@ -167,13 +424,15 @@ Credits
|
||||||
|
|
||||||
This emulator uses code from these people/projects:
|
This emulator uses code from these people/projects:
|
||||||
|
|
||||||
|
notaz
|
||||||
|
GP2X, UIQ, Gizmondo ports, Cyclone 68000 hacks,
|
||||||
|
lots of additional coding (see changelog).
|
||||||
|
Homepage: http://notaz.gp2x.de/
|
||||||
|
|
||||||
Dave
|
Dave
|
||||||
Cyclone 68000 core, Pico emulation library
|
Cyclone 68000 core, Pico emulation library
|
||||||
Homepage: http://www.finalburn.com/
|
Homepage: http://www.finalburn.com/
|
||||||
|
|
||||||
notaz
|
|
||||||
GP2X port, Cyclone 68000 hacks, lots of additional coding (see changelog).
|
|
||||||
|
|
||||||
Reesy & FluBBa
|
Reesy & FluBBa
|
||||||
DrZ80, the Z80 emulator written in ARM assembly.
|
DrZ80, the Z80 emulator written in ARM assembly.
|
||||||
Homepage: http://reesy.gp32x.de/
|
Homepage: http://reesy.gp32x.de/
|
||||||
|
@ -201,9 +460,8 @@ Additional thanks
|
||||||
* Bart Trzynadlowski for his SSFII and 68000 docs.
|
* Bart Trzynadlowski for his SSFII and 68000 docs.
|
||||||
* Haze for his research (http://haze.mameworld.info).
|
* Haze for his research (http://haze.mameworld.info).
|
||||||
* Mark and Jean-loup for zlib library.
|
* Mark and Jean-loup for zlib library.
|
||||||
* Anyone else I forgot. You know who you are.
|
* ketchupgun for the skin.
|
||||||
|
#ifdef GP2X
|
||||||
GP2X:
|
|
||||||
* rlyeh and all the other people behind the minimal library.
|
* rlyeh and all the other people behind the minimal library.
|
||||||
* Squidge for his famous squidgehack(tm).
|
* Squidge for his famous squidgehack(tm).
|
||||||
* Dzz for his ARM940 sample code.
|
* Dzz for his ARM940 sample code.
|
||||||
|
@ -212,10 +470,13 @@ GP2X:
|
||||||
* A_SN for his gamma code.
|
* A_SN for his gamma code.
|
||||||
* craigix for supplying the GP2X hardware and making this port possible.
|
* craigix for supplying the GP2X hardware and making this port possible.
|
||||||
* Alex for the icon.
|
* Alex for the icon.
|
||||||
* ketchupgun for the skin.
|
|
||||||
* All the people from gp32x boards for their support.
|
* All the people from gp32x boards for their support.
|
||||||
|
#endif
|
||||||
Symbian:
|
#ifdef GIZ
|
||||||
|
* Kingcdr's for the SDK and Reesy for the DLL and sound code.
|
||||||
|
* jens.l for supplying the Gizmondo hardware and making this port possible.
|
||||||
|
#endif
|
||||||
|
#ifdef UIQ
|
||||||
* Peter van Sebille for his various open-source Symbian projects to learn from.
|
* Peter van Sebille for his various open-source Symbian projects to learn from.
|
||||||
* Steve Fischer for his open-source Motorola projects.
|
* Steve Fischer for his open-source Motorola projects.
|
||||||
* The development team behind "Symbian GCC Improvement Project"
|
* The development team behind "Symbian GCC Improvement Project"
|
||||||
|
@ -223,11 +484,14 @@ Symbian:
|
||||||
compile tools.
|
compile tools.
|
||||||
* AnotherGuest for all his Symbian stuff and support.
|
* AnotherGuest for all his Symbian stuff and support.
|
||||||
* Inder for the icons.
|
* Inder for the icons.
|
||||||
|
#endif
|
||||||
|
* Anyone else I forgot. You know who you are.
|
||||||
|
|
||||||
|
|
||||||
Changelog
|
Changelog
|
||||||
---------
|
---------
|
||||||
1.34
|
1.34
|
||||||
|
+ Gizmondo port added.
|
||||||
+ Some new optimizations in memory handlers, and for shadow/hilight mode.
|
+ Some new optimizations in memory handlers, and for shadow/hilight mode.
|
||||||
+ Added some hacks to make more games work without enabling "accurate timing".
|
+ Added some hacks to make more games work without enabling "accurate timing".
|
||||||
* Adjusted timing for "accurate timing" mode and added preliminary VDP FIFO
|
* Adjusted timing for "accurate timing" mode and added preliminary VDP FIFO
|
|
@ -101,7 +101,7 @@ DEFINC += -D_USE_DRZ80
|
||||||
OBJS += ../../cpu/DrZ80/drz80.o
|
OBJS += ../../cpu/DrZ80/drz80.o
|
||||||
|
|
||||||
|
|
||||||
all: PicoDrive.exe
|
all: PicoDrive.exe readme.txt
|
||||||
|
|
||||||
PicoDrive.exe : $(OBJS) ../common/helix/helix_mp3.a
|
PicoDrive.exe : $(OBJS) ../common/helix/helix_mp3.a
|
||||||
@echo ">>>" $@
|
@echo ">>>" $@
|
||||||
|
@ -156,6 +156,12 @@ endif
|
||||||
../common/helix/helix_mp3.a:
|
../common/helix/helix_mp3.a:
|
||||||
make -C ../common/helix
|
make -C ../common/helix
|
||||||
|
|
||||||
|
readme.txt: ../../tools/textfilter ../base_readme.txt
|
||||||
|
../../tools/textfilter ../base_readme.txt $@ GIZ
|
||||||
|
|
||||||
|
../../tools/textfilter: ../../tools/textfilter.c
|
||||||
|
make -C ../../tools/ textfilter
|
||||||
|
|
||||||
|
|
||||||
# cleanup
|
# cleanup
|
||||||
clean: tidy
|
clean: tidy
|
||||||
|
@ -184,7 +190,7 @@ $(error need VER)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
rel: PicoDrive.exe kgsdk/ARMV4IRel/KGSDK.dll # ../readme.txt config.txt
|
rel: PicoDrive.exe kgsdk/ARMV4IRel/KGSDK.dll readme.txt
|
||||||
zip -9 -j ../../PicoDrive_$(VER).zip $^
|
zip -9 -j ../../PicoDrive_$(VER).zip $^
|
||||||
ln -s ../gp2x/skin skin
|
ln -s ../gp2x/skin skin
|
||||||
zip -9 -r ../../PicoDrive_$(VER).zip skin -i \*.png -i \*.txt
|
zip -9 -r ../../PicoDrive_$(VER).zip skin -i \*.png -i \*.txt
|
||||||
|
|
|
@ -208,6 +208,12 @@ testrefr.gpe : test.o gp2x.o
|
||||||
../common/helix/helix_mp3.a:
|
../common/helix/helix_mp3.a:
|
||||||
make -C ../common/helix
|
make -C ../common/helix
|
||||||
|
|
||||||
|
readme.txt: ../../tools/textfilter ../base_readme.txt
|
||||||
|
../../tools/textfilter ../base_readme.txt $@ GP2X
|
||||||
|
|
||||||
|
../../tools/textfilter: ../../tools/textfilter.c
|
||||||
|
make -C ../../tools/ textfilter
|
||||||
|
|
||||||
|
|
||||||
# cleanup
|
# cleanup
|
||||||
clean: tidy
|
clean: tidy
|
||||||
|
@ -228,7 +234,7 @@ $(error need VER)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
rel: PicoDrive.gpe code940/pico940.bin ../readme.txt config.txt PicoDrive.man.txt PicoDrive.png
|
rel: PicoDrive.gpe code940/pico940.bin readme.txt PicoDrive.man.txt PicoDrive.png
|
||||||
zip -9 -j ../../PicoDrive_$(VER).zip $^ mmuhack.o
|
zip -9 -j ../../PicoDrive_$(VER).zip $^ mmuhack.o
|
||||||
zip -9 -r ../../PicoDrive_$(VER).zip skin -i \*.png -i \*.txt
|
zip -9 -r ../../PicoDrive_$(VER).zip skin -i \*.png -i \*.txt
|
||||||
|
|
||||||
|
|
|
@ -1,201 +0,0 @@
|
||||||
As PicoDrive is multiplatform emulator, this is GP2X specific part of readme
|
|
||||||
about configuration.
|
|
||||||
|
|
||||||
If you have questions, you can use GP32X to ask for help.
|
|
||||||
http://www.gp32x.com/board/index.php?showforum=48
|
|
||||||
|
|
||||||
|
|
||||||
Configuration
|
|
||||||
-------------
|
|
||||||
|
|
||||||
1. "Renderer"
|
|
||||||
8bit fast:
|
|
||||||
This enables alternative heavily optimized tile-based renderer, which renders
|
|
||||||
pixels not line-by-line (this is what accurate renderers do), but in 8x8 tiles,
|
|
||||||
which is much faster. But because of the way it works it can't render any
|
|
||||||
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
|
|
||||||
run well with some games like Street Racer.
|
|
||||||
|
|
||||||
2. "Scaling"
|
|
||||||
"hw" means GP2X hardware scaler, which causes no performance loss, but scaled
|
|
||||||
image looks a bit blocky. "sw" means software scaling, which uses pixel
|
|
||||||
averaging and may look a bit nicer, but blurry. Horizontal scaling is only for
|
|
||||||
games which use so called "32 column mode" (256x224 or 256x240), and scales
|
|
||||||
image width to 320 pixels. Vertical scales height to 240 for games which use
|
|
||||||
height 224 (most of them).
|
|
||||||
|
|
||||||
3. "Accurate timing"
|
|
||||||
This adds some more emulation precision, but slows the emulation down. Without
|
|
||||||
this option some games do not boot (Red Zone for example), others have sound
|
|
||||||
problems. This options has no effect for Sega/Mega CD emulation.
|
|
||||||
|
|
||||||
4. "Accurate sprites"
|
|
||||||
This option improves emulation of sprite priorities, it also enables emulation
|
|
||||||
of sprite collision bit. If you see one sprite being drawn incorrectly above
|
|
||||||
the other (often seen in Sonic 3D Blast), you can enable this to fix the problem.
|
|
||||||
This only works with the accurate renderers (see first option).
|
|
||||||
|
|
||||||
5. "Show FPS"
|
|
||||||
Self-explanatory. Format is XX/YY, where XX is the number of rendered frames and
|
|
||||||
YY is the number of emulated frames per second.
|
|
||||||
|
|
||||||
6. "Frameskip"
|
|
||||||
How many frames to skip rendering before displaying another.
|
|
||||||
"Auto" is recommended.
|
|
||||||
|
|
||||||
7. "Enable sound"
|
|
||||||
Does what it says. You must enable at least YM2612 or SN76496 (in advanced options,
|
|
||||||
see below) for this to make sense.
|
|
||||||
|
|
||||||
8. "Sound Quality"
|
|
||||||
Sound rate and stereo mode. If you want 44100Hz sound, it is recommended to enable
|
|
||||||
the second core (next option).
|
|
||||||
|
|
||||||
9. "Use ARM940 core for sound"
|
|
||||||
This option causes PicoDrive to use ARM940T core (GP2X's second CPU) for sound
|
|
||||||
(i.e. to generate YM2612 samples) to improve performance noticeably.
|
|
||||||
|
|
||||||
10. "6 button pad"
|
|
||||||
If you enable this, games will think that 6 button gamepad is connected. If you
|
|
||||||
go and reconfigure your keys, you will be able to bind X,Y,Z and mode actions.
|
|
||||||
|
|
||||||
11. "Region"
|
|
||||||
This option lets you force the game to think it is running on machine from the
|
|
||||||
specified region, or just to set autodetection order. Also affects Sega/Mega CD.
|
|
||||||
|
|
||||||
12. "Use SRAM/BRAM savestates"
|
|
||||||
This will automatically read/write SRAM (or BRAM for Sega/Mega CD) savestates for
|
|
||||||
games which are using them. SRAM is saved whenever you pause your game or exit the
|
|
||||||
emulator.
|
|
||||||
|
|
||||||
13. "Confirm savestate"
|
|
||||||
Allows to enable confirmation on savestate saving (to prevent savestate overwrites),
|
|
||||||
on loading (to prevent destroying current game progress), and on both or none.
|
|
||||||
|
|
||||||
14. "Save slot"
|
|
||||||
This is a slot number to use for savestates. This can also be configured to be
|
|
||||||
changed with a button (see "key configuration").
|
|
||||||
|
|
||||||
15. "GP2X CPU clocks"
|
|
||||||
Here you can change clocks of both GP2X's CPUs. Larger values increase performance.
|
|
||||||
There is no separate option for the second CPU because both CPUs use the same clock
|
|
||||||
source. Setting this option to 200 will cause PicoDrive NOT to change GP2X's clocks
|
|
||||||
at all (this is if you use external program to set clock).
|
|
||||||
|
|
||||||
16. "[Sega/Mega CD options]"
|
|
||||||
Enters Sega/Mega CD options menu (see below).
|
|
||||||
|
|
||||||
17. "[advanced options]"
|
|
||||||
Enters advanced options menu (see below).
|
|
||||||
|
|
||||||
18. "Save cfg as default"
|
|
||||||
If you save your config here it will be loaded on next ROM load, but only if there
|
|
||||||
is no game specific config saved (which will be loaded in that case).
|
|
||||||
You can press left/right to switch to a different config profile.
|
|
||||||
|
|
||||||
19. "Save cfg for current game only"
|
|
||||||
Whenever you load current ROM again these settings will be loaded (squidgehack and
|
|
||||||
RAM settings will not take effect until emulator is restarted).
|
|
||||||
|
|
||||||
|
|
||||||
Advanced configuration
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
Enter [advanced options] in config menu to see these options.
|
|
||||||
|
|
||||||
1. "Gamma correction"
|
|
||||||
Alters image gamma through GP2X hardware. Larger values make image to look brighter,
|
|
||||||
lower - darker (default is 1.0).
|
|
||||||
|
|
||||||
2. "A_SN's gamma curve"
|
|
||||||
If this is enabled, different gamma adjustment method will be used (suggested by A_SN
|
|
||||||
from gp32x boards). Basically it makes difference for dark and bright colors.
|
|
||||||
|
|
||||||
3. "Perfect vsync"
|
|
||||||
This one adjusts the LCD refresh rate to better match game's refresh rate and starts
|
|
||||||
synchronizing rendering with it. Should make scrolling smoother and eliminate tearing.
|
|
||||||
|
|
||||||
4. "Emulate Z80"
|
|
||||||
Enables emulation of Z80 chip, which was mostly used to drive the other sound chips.
|
|
||||||
Some games do complex sync with it, so you must enable it even if you don't use
|
|
||||||
sound to be able to play them.
|
|
||||||
|
|
||||||
5. "Emulate YM2612 (FM)"
|
|
||||||
This enables emulation of six-channel FM sound synthesizer chip, which was used to
|
|
||||||
produce sound effects and music.
|
|
||||||
|
|
||||||
6. "Emulate SN76496 (PSG)"
|
|
||||||
This enables emulation of additional sound chip for additional effects.
|
|
||||||
|
|
||||||
Note: if you change sound settings AFTER loading a ROM, you may need to reset
|
|
||||||
game to get sound. This is because most games initialize sound chips on
|
|
||||||
startup, and this data is lost when sound chips are being enabled/disabled.
|
|
||||||
|
|
||||||
7. "gzip savestates"
|
|
||||||
This will always apply gzip compression on your savestates, allowing you to
|
|
||||||
save some space and load/save time.
|
|
||||||
|
|
||||||
8. "Don't save last used ROM"
|
|
||||||
This will disable writing last used ROM to config on exit (what might cause SD
|
|
||||||
card corruption according to DaveC).
|
|
||||||
|
|
||||||
9. "craigix's RAM timings"
|
|
||||||
This overclocks the GP2X RAM chips, but may cause instability. Recommended if you
|
|
||||||
use the second core for sound. Needs emulator restart to take effect.
|
|
||||||
See this thread:
|
|
||||||
http://www.gp32x.com/board/index.php?showtopic=32319
|
|
||||||
|
|
||||||
10. "squidgehack"
|
|
||||||
Well known way to improve the GP2X performance. You must restart the emulator
|
|
||||||
for the change of this option to take effect.
|
|
||||||
|
|
||||||
|
|
||||||
Sega/Mega CD options
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
1,2,3. "USA/EUR/JAP BIOS"
|
|
||||||
These options just show if your BIOS files were correctly detected by the
|
|
||||||
emulator (it shows the filename it is using). If so, you can press Start to
|
|
||||||
test your BIOS.
|
|
||||||
|
|
||||||
4. "CD LEDs"
|
|
||||||
The Sega/Mega CD unit had two blinking LEDs (red and green) on it. This option
|
|
||||||
will display them on top-left corner of the screen.
|
|
||||||
|
|
||||||
5. "CDDA audio (using mp3s)"
|
|
||||||
This option enables CD audio playback.
|
|
||||||
|
|
||||||
6. "PCM audio"
|
|
||||||
This enables 8 channel PCM sound source. It is required for some games to run,
|
|
||||||
because they monitor state of this audio chip.
|
|
||||||
|
|
||||||
7. "ReadAhead buffer"
|
|
||||||
This option is for dealing with slow SD card access in GP2X, which makes FMV
|
|
||||||
games unplayable. It will allow emulator not to access SD card for longer periods
|
|
||||||
of time, but it will take more time to fill the buffer.
|
|
||||||
|
|
||||||
8. "Save RAM cart"
|
|
||||||
Here you can enable 64K RAM cart. Format it in BIOS if you do.
|
|
||||||
|
|
||||||
9. "Scale/Rot. fx"
|
|
||||||
The Sega/Mega CD had scaling/rotation chip, which allows effects similar to
|
|
||||||
"Mode 7" effects in SNES. Unfortunately emulating it is slow, and very few games
|
|
||||||
used it, so it's better to disable this option, unless game really needs it.
|
|
||||||
|
|
||||||
10. "Better sync"
|
|
||||||
This option is similar to "Perfect synchro" in Gens. Some games require it to run,
|
|
||||||
for example most (all?) Wolfteam games, and some other ones. Don't use it for
|
|
||||||
games which don't need it, it will just slow them down.
|
|
||||||
|
|
||||||
|
|
||||||
Key configuration
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
Select "Configure controls" from the main menu. Then select "Player 1" and you will
|
|
||||||
see two columns. The left column lists names of Genesis/MD controller buttons, and
|
|
||||||
the right GP2X ones, which are assigned to them. If you bind 2 different GP2X buttons
|
|
||||||
to the same action, you will get a combo (which means that you will have to press
|
|
||||||
both buttons for that action to happen.
|
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
CFLAGS = -Wall -ggdb
|
CFLAGS = -Wall -ggdb
|
||||||
|
|
||||||
TARGET = amalgamate
|
TARGETS = amalgamate textfilter
|
||||||
OBJS = amalgamate.o
|
OBJS = $(addsuffix .o,$(TARGETS))
|
||||||
|
|
||||||
all: $(TARGET)
|
all: $(TARGETS)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(RM) $(TARGET) $(OBJS)
|
$(RM) $(TARGETS) $(OBJS)
|
||||||
|
|
||||||
|
|
114
tools/textfilter.c
Normal file
114
tools/textfilter.c
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
|
static int check_defines(const char **defs, int defcount, char *tdef)
|
||||||
|
{
|
||||||
|
int i, len;
|
||||||
|
|
||||||
|
len = strlen(tdef);
|
||||||
|
for (i = 0; i < len; i++)
|
||||||
|
if (tdef[i] == ' ' || tdef[i] == '\r' || tdef[i] == '\n') break;
|
||||||
|
tdef[i] = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < defcount; i++)
|
||||||
|
{
|
||||||
|
if (strcmp(defs[i], tdef) == 0)
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void do_counters(char *str)
|
||||||
|
{
|
||||||
|
static int counters[4] = { 1, 1, 1, 1 };
|
||||||
|
char buff[1024];
|
||||||
|
int counter;
|
||||||
|
char *s = str;
|
||||||
|
|
||||||
|
while ((s = strstr(s, "@@")))
|
||||||
|
{
|
||||||
|
if (s[2] < '0' || s[2] > '3') { s++; continue; }
|
||||||
|
|
||||||
|
counter = s[2] - '0';
|
||||||
|
snprintf(buff, sizeof(buff), "%i%s", counters[counter]++, s + 3);
|
||||||
|
strcpy(s, buff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
char buff[1024];
|
||||||
|
FILE *fi, *fo;
|
||||||
|
int skip_mode = 0, ifdef_level = 0, line = 0;
|
||||||
|
|
||||||
|
if (argc < 3)
|
||||||
|
{
|
||||||
|
printf("usage:\n%s <file_in> <file_out> [defines...]\n", argv[0]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
fi = fopen(argv[1], "r");
|
||||||
|
if (fi == NULL)
|
||||||
|
{
|
||||||
|
printf("failed to open: %s\n", argv[1]);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
fo = fopen(argv[2], "w");
|
||||||
|
if (fo == NULL)
|
||||||
|
{
|
||||||
|
printf("failed to open: %s\n", argv[2]);
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (++line; !feof(fi); line++)
|
||||||
|
{
|
||||||
|
char *fgs;
|
||||||
|
|
||||||
|
fgs = fgets(buff, sizeof(buff), fi);
|
||||||
|
if (fgs == NULL) break;
|
||||||
|
|
||||||
|
if (buff[0] == '#')
|
||||||
|
{
|
||||||
|
/* control char */
|
||||||
|
if (strncmp(buff, "#ifdef ", 7) == 0)
|
||||||
|
{
|
||||||
|
if (!check_defines((void *) &argv[3], argc-3, buff + 7)) skip_mode = 1;
|
||||||
|
ifdef_level++;
|
||||||
|
}
|
||||||
|
else if (strncmp(buff, "#ifndef ", 8) == 0)
|
||||||
|
{
|
||||||
|
if ( check_defines((void *) &argv[3], argc-3, buff + 7)) skip_mode = 1;
|
||||||
|
ifdef_level++;
|
||||||
|
}
|
||||||
|
else if (strncmp(buff, "#endif", 6) == 0)
|
||||||
|
{
|
||||||
|
ifdef_level--;
|
||||||
|
if (ifdef_level == 0) skip_mode = 0;
|
||||||
|
if (ifdef_level < 0)
|
||||||
|
{
|
||||||
|
printf("%i: warning: #endif without #ifdef, ignoring\n", line);
|
||||||
|
ifdef_level = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* skip line */
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!skip_mode)
|
||||||
|
{
|
||||||
|
do_counters(buff);
|
||||||
|
fputs(buff, fo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(fi);
|
||||||
|
fclose(fo);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue