mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 15:27:46 -04:00
psp readme, some adjustments
git-svn-id: file:///home/notaz/opt/svn/PicoDrive@296 be3aeb3a-fb24-0410-a615-afba39da0efa
This commit is contained in:
parent
b542be4686
commit
81fda4e8d8
7 changed files with 265 additions and 87 deletions
99
Pico/Draw.c
99
Pico/Draw.c
|
@ -535,6 +535,8 @@ static void DrawWindow(int tstart, int tend, int prio, int sh) // int *hcache
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw tiles across screen:
|
// Draw tiles across screen:
|
||||||
|
if (!sh)
|
||||||
|
{
|
||||||
for (; tilex < tend; tilex++)
|
for (; tilex < tend; tilex++)
|
||||||
{
|
{
|
||||||
int addr=0,zero=0;
|
int addr=0,zero=0;
|
||||||
|
@ -549,8 +551,33 @@ static void DrawWindow(int tstart, int tend, int prio, int sh) // int *hcache
|
||||||
|
|
||||||
pal=((code>>9)&0x30);
|
pal=((code>>9)&0x30);
|
||||||
|
|
||||||
if(sh) {
|
// Get tile address/2:
|
||||||
int tmp, *zb = (int *)(HighCol+8+(tilex<<3));
|
addr=(code&0x7ff)<<4;
|
||||||
|
if (code&0x1000) addr+=14-ty; else addr+=ty; // Y-flip
|
||||||
|
|
||||||
|
if (code&0x0800) zero=TileFlip(8+(tilex<<3),addr,pal);
|
||||||
|
else zero=TileNorm(8+(tilex<<3),addr,pal);
|
||||||
|
|
||||||
|
if (zero) blank=code; // We know this tile is blank now
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (; tilex < tend; tilex++)
|
||||||
|
{
|
||||||
|
int addr=0,zero=0;
|
||||||
|
int pal, tmp, *zb;
|
||||||
|
|
||||||
|
code=Pico.vram[nametab+tilex];
|
||||||
|
if(code==blank) continue;
|
||||||
|
if((code>>15) != prio) {
|
||||||
|
rendstatus|=2;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
pal=((code>>9)&0x30);
|
||||||
|
|
||||||
|
zb = (int *)(HighCol+8+(tilex<<3));
|
||||||
if(prio) {
|
if(prio) {
|
||||||
tmp = *zb;
|
tmp = *zb;
|
||||||
if(!(tmp&0x00000080)) tmp&=~0x000000c0; if(!(tmp&0x00008000)) tmp&=~0x0000c000;
|
if(!(tmp&0x00000080)) tmp&=~0x000000c0; if(!(tmp&0x00008000)) tmp&=~0x0000c000;
|
||||||
|
@ -562,7 +589,6 @@ static void DrawWindow(int tstart, int tend, int prio, int sh) // int *hcache
|
||||||
} else {
|
} else {
|
||||||
pal |= 0x40;
|
pal |= 0x40;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Get tile address/2:
|
// Get tile address/2:
|
||||||
addr=(code&0x7ff)<<4;
|
addr=(code&0x7ff)<<4;
|
||||||
|
@ -573,22 +599,13 @@ static void DrawWindow(int tstart, int tend, int prio, int sh) // int *hcache
|
||||||
|
|
||||||
if (zero) blank=code; // We know this tile is blank now
|
if (zero) blank=code; // We know this tile is blank now
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// terminate the cache list
|
|
||||||
//*hcache = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------
|
// --------------------------------------------
|
||||||
|
|
||||||
static void DrawTilesFromCache(int *hc, int sh, int rlim)
|
static void DrawTilesFromCacheShPrep(void)
|
||||||
{
|
{
|
||||||
int code, addr, dx;
|
|
||||||
int pal;
|
|
||||||
|
|
||||||
// *ts->hc++ = code | (dx<<16) | (ty<<25); // cache it
|
|
||||||
|
|
||||||
if (sh && (rendstatus&0xc0))
|
|
||||||
{
|
|
||||||
if (!(rendstatus&0x80))
|
if (!(rendstatus&0x80))
|
||||||
{
|
{
|
||||||
// as some layer has covered whole line with hi priority tiles,
|
// as some layer has covered whole line with hi priority tiles,
|
||||||
|
@ -607,10 +624,42 @@ static void DrawTilesFromCache(int *hc, int sh, int rlim)
|
||||||
zb++;
|
zb++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void DrawTilesFromCache(int *hc, int sh, int rlim)
|
||||||
|
{
|
||||||
|
int code, addr, dx;
|
||||||
|
int pal;
|
||||||
|
|
||||||
|
// *ts->hc++ = code | (dx<<16) | (ty<<25); // cache it
|
||||||
|
|
||||||
|
if (sh && (rendstatus&0xc0))
|
||||||
|
{
|
||||||
|
DrawTilesFromCacheShPrep();
|
||||||
sh = 0;
|
sh = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sh)
|
if (!sh)
|
||||||
|
{
|
||||||
|
short blank=-1; // The tile we know is blank
|
||||||
|
while ((code=*hc++)) {
|
||||||
|
int zero;
|
||||||
|
if((short)code == blank) continue;
|
||||||
|
// Get tile address/2:
|
||||||
|
addr=(code&0x7ff)<<4;
|
||||||
|
addr+=(unsigned int)code>>25; // y offset into tile
|
||||||
|
dx=(code>>16)&0x1ff;
|
||||||
|
|
||||||
|
pal=((code>>9)&0x30);
|
||||||
|
if (rlim-dx < 0) goto last_cut_tile;
|
||||||
|
|
||||||
|
if (code&0x0800) zero=TileFlip(dx,addr,pal);
|
||||||
|
else zero=TileNorm(dx,addr,pal);
|
||||||
|
|
||||||
|
if (zero) blank=(short)code;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
while ((code=*hc++)) {
|
while ((code=*hc++)) {
|
||||||
unsigned char *zb;
|
unsigned char *zb;
|
||||||
|
@ -631,26 +680,6 @@ static void DrawTilesFromCache(int *hc, int sh, int rlim)
|
||||||
else TileNorm(dx,addr,pal);
|
else TileNorm(dx,addr,pal);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
short blank=-1; // The tile we know is blank
|
|
||||||
while ((code=*hc++)) {
|
|
||||||
int zero;
|
|
||||||
if((short)code == blank) continue;
|
|
||||||
// Get tile address/2:
|
|
||||||
addr=(code&0x7ff)<<4;
|
|
||||||
addr+=(unsigned int)code>>25; // y offset into tile
|
|
||||||
dx=(code>>16)&0x1ff;
|
|
||||||
|
|
||||||
pal=((code>>9)&0x30);
|
|
||||||
if (rlim-dx < 0) goto last_cut_tile;
|
|
||||||
|
|
||||||
if (code&0x0800) zero=TileFlip(dx,addr,pal);
|
|
||||||
else zero=TileNorm(dx,addr,pal);
|
|
||||||
|
|
||||||
if (zero) blank=(short)code;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
last_cut_tile:
|
last_cut_tile:
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
# vim:filetype=mips
|
# vim:filetype=mips
|
||||||
|
|
||||||
# only CLUT for now..
|
|
||||||
|
|
||||||
.set noreorder # don't reorder any instructions
|
.set noreorder # don't reorder any instructions
|
||||||
.set noat # don't use $at
|
.set noat # don't use $at
|
||||||
|
|
||||||
|
.text
|
||||||
|
.align 4
|
||||||
|
|
||||||
# void amips_clut(unsigned short *dst, unsigned char *src, unsigned short *pal, int count)
|
# void amips_clut(unsigned short *dst, unsigned char *src, unsigned short *pal, int count)
|
||||||
|
|
||||||
|
@ -1671,6 +1672,9 @@ tile00000001:
|
||||||
jr $ra
|
jr $ra
|
||||||
sb $t0, 0($a0)
|
sb $t0, 0($a0)
|
||||||
|
|
||||||
|
.data
|
||||||
|
.align 4
|
||||||
|
|
||||||
TileTable:
|
TileTable:
|
||||||
.long 000000000000, tile00000001, tile00000010, tile00000011, tile00000100, tile00000101, tile00000110, tile00000111
|
.long 000000000000, tile00000001, tile00000010, tile00000011, tile00000100, tile00000101, tile00000110, tile00000111
|
||||||
.long tile00001000, tile00001001, tile00001010, tile00001011, tile00001100, tile00001101, tile00001110, tile00001111
|
.long tile00001000, tile00001001, tile00001010, tile00001011, tile00001100, tile00001101, tile00001110, tile00001111
|
||||||
|
|
|
@ -339,7 +339,7 @@ PICO_INTERNAL_ASM u32 PicoRead8(u32 a)
|
||||||
else d=OtherRead16(a&~1, 8);
|
else d=OtherRead16(a&~1, 8);
|
||||||
if ((a&1)==0) d>>=8;
|
if ((a&1)==0) d>>=8;
|
||||||
|
|
||||||
|
end:
|
||||||
#ifdef __debug_io
|
#ifdef __debug_io
|
||||||
dprintf("r8 : %06x, %02x @%06x", a&0xffffff, (u8)d, SekPc);
|
dprintf("r8 : %06x, %02x @%06x", a&0xffffff, (u8)d, SekPc);
|
||||||
#endif
|
#endif
|
||||||
|
@ -684,11 +684,14 @@ PICO_INTERNAL unsigned char z80_read(unsigned short a)
|
||||||
|
|
||||||
if (a>=0x8000)
|
if (a>=0x8000)
|
||||||
{
|
{
|
||||||
|
extern u32 PicoReadM68k8(u32 a);
|
||||||
u32 addr68k;
|
u32 addr68k;
|
||||||
addr68k=Pico.m.z80_bank68k<<15;
|
addr68k=Pico.m.z80_bank68k<<15;
|
||||||
addr68k+=a&0x7fff;
|
addr68k+=a&0x7fff;
|
||||||
|
|
||||||
ret = (u8) PicoRead8(addr68k);
|
if (PicoMCD & 1)
|
||||||
|
ret = PicoReadM68k8(addr68k);
|
||||||
|
else ret = PicoRead8(addr68k);
|
||||||
elprintf(EL_Z80BNK, "z80->68k r8 [%06x] %02x", addr68k, ret);
|
elprintf(EL_Z80BNK, "z80->68k r8 [%06x] %02x", addr68k, ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -728,11 +731,14 @@ PICO_INTERNAL_ASM void z80_write(unsigned int a, unsigned char data)
|
||||||
|
|
||||||
if (a>=0x8000)
|
if (a>=0x8000)
|
||||||
{
|
{
|
||||||
|
extern void PicoWriteM68k8(u32 a,u8 d);
|
||||||
u32 addr68k;
|
u32 addr68k;
|
||||||
addr68k=Pico.m.z80_bank68k<<15;
|
addr68k=Pico.m.z80_bank68k<<15;
|
||||||
addr68k+=a&0x7fff;
|
addr68k+=a&0x7fff;
|
||||||
elprintf(EL_Z80BNK, "z80->68k w8 [%06x] %02x", addr68k, data);
|
elprintf(EL_Z80BNK, "z80->68k w8 [%06x] %02x", addr68k, data);
|
||||||
PicoWrite8(addr68k, data);
|
if (PicoMCD & 1)
|
||||||
|
PicoWriteM68k8(addr68k, data);
|
||||||
|
else PicoWrite8(addr68k, data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -450,7 +450,7 @@ static void OtherWrite8End(u32 a, u32 d, int realsize)
|
||||||
#ifdef _ASM_CD_MEMORY_C
|
#ifdef _ASM_CD_MEMORY_C
|
||||||
u32 PicoReadM68k8(u32 a);
|
u32 PicoReadM68k8(u32 a);
|
||||||
#else
|
#else
|
||||||
static u32 PicoReadM68k8(u32 a)
|
u32 PicoReadM68k8(u32 a)
|
||||||
{
|
{
|
||||||
u32 d=0;
|
u32 d=0;
|
||||||
|
|
||||||
|
@ -723,7 +723,7 @@ static u32 PicoReadM68k32(u32 a)
|
||||||
#ifdef _ASM_CD_MEMORY_C
|
#ifdef _ASM_CD_MEMORY_C
|
||||||
void PicoWriteM68k8(u32 a,u8 d);
|
void PicoWriteM68k8(u32 a,u8 d);
|
||||||
#else
|
#else
|
||||||
static void PicoWriteM68k8(u32 a,u8 d)
|
void PicoWriteM68k8(u32 a,u8 d)
|
||||||
{
|
{
|
||||||
#ifdef __debug_io
|
#ifdef __debug_io
|
||||||
dprintf("w8 : %06x, %02x @%06x", a&0xffffff, d, SekPc);
|
dprintf("w8 : %06x, %02x @%06x", a&0xffffff, d, SekPc);
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
/* Autor: Oscar Orallo Pelaez */
|
/* Autor: Oscar Orallo Pelaez */
|
||||||
/* Fecha de comienzo: 03-10-2006 */
|
/* Fecha de comienzo: 03-10-2006 */
|
||||||
/* Ultima actualizacion: 08-10-2006 */
|
/* Ultima actualizacion: 08-10-2006 */
|
||||||
/* Based on the excellent FAMEC emulator by Stèphane Dallongueville */
|
/* Based on the excellent C68K emulator by Stèphane Dallongueville */
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
|
@ -7,6 +7,15 @@ http://www.gp32x.com/board/
|
||||||
About
|
About
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
#ifdef PSP
|
||||||
|
This is yet another Megadrive / Genesis emulator for PSP, but with
|
||||||
|
Sega CD / Mega CD support. Although it has been originally written having
|
||||||
|
ARM CPU based devices in mind, it has now been ported to PSP too, by
|
||||||
|
replacing ARM specific parts with portable C code.
|
||||||
|
The base code originates from Dave's (fdave, finalburn) PicoDrive 0.30 for
|
||||||
|
Pocket PC. The Sega/Mega CD code is roughly based on Stephane Dallongeville's
|
||||||
|
Gens.
|
||||||
|
#else
|
||||||
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 and Gizmondo of course).
|
smartphones and handheld consoles like GP2X and Gizmondo of course).
|
||||||
|
@ -14,6 +23,7 @@ The critical parts (renderer, 68K and Z80 cpu interpreters) and some other
|
||||||
random code is written in ARM asm, other code is C. The base code originates
|
random code is written in ARM asm, other code is C. The base code originates
|
||||||
from Dave's (fdave, finalburn) PicoDrive 0.30 for Pocket PC. The Sega/Mega CD
|
from Dave's (fdave, finalburn) PicoDrive 0.30 for Pocket PC. The Sega/Mega CD
|
||||||
code is roughly based on Stephane Dallongeville's Gens.
|
code is roughly based on Stephane Dallongeville's Gens.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
How to make it run
|
How to make it run
|
||||||
|
@ -34,10 +44,28 @@ the root of SD, etc). Then load a ROM and enjoy! ROMs can be placed anywhere, ca
|
||||||
be in .smd or .bin format and can be zipped (one ROM per zip).
|
be in .smd or .bin format and can be zipped (one ROM per zip).
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
If you have any problems (game does not boot, sound is glitchy, broken graphics),
|
#ifdef PSP
|
||||||
make sure you enable "Accurate timing", "Emulate Z80" and use "16bit accurate
|
If you are running a custom firmware, just copy the whole PicoDrive directory to
|
||||||
renderer". This way you will get the best compatibility this emulator can
|
/PSP/GAME or /PSP/GAMEXXX directory in your memory stick (it shouldn't matter
|
||||||
provide.
|
which one GAME* directory to use).
|
||||||
|
|
||||||
|
If you are on 1.5, you will have to use KXploit tool to create the needed files
|
||||||
|
and directories, and then copy them to /PSP/GAME. I assume 1.5 users know how to
|
||||||
|
do this, if not, just google for KXploit.
|
||||||
|
|
||||||
|
#endif
|
||||||
|
Note that this emulator may require some tweaking of configuration settings to run
|
||||||
|
some games well. For Genesis/MegaDrive, if you have any problems (game does not
|
||||||
|
boot, sound is glitchy, broken graphics), try to:
|
||||||
|
* enable "Accurate timing" (options menu)
|
||||||
|
#ifdef PSP
|
||||||
|
* enable "accurate renderer"
|
||||||
|
#else
|
||||||
|
* enable "16bit accurate renderer"
|
||||||
|
#endif
|
||||||
|
* make sure Z80 is not disabled (in "advanced options" submenu in options).
|
||||||
|
Some games may need to be reset after adjusting settings.
|
||||||
|
|
||||||
For possible Sega/Mega CD problems, see "Other important stuff" section below.
|
For possible Sega/Mega CD problems, see "Other important stuff" section below.
|
||||||
|
|
||||||
|
|
||||||
|
@ -68,6 +96,11 @@ Sonic the Hedgehog CD (US) - Track 02.mp3
|
||||||
Sonic the Hedgehog CD (US) - Track 03.mp3
|
Sonic the Hedgehog CD (US) - Track 03.mp3
|
||||||
...
|
...
|
||||||
|
|
||||||
|
It is very important to have the MP3s encoded at 44kHz sample rate and they
|
||||||
|
must be stereo, or else they will play too fast/slow or won't play at all.
|
||||||
|
Be sure NOT to use anything but classic mp3 format (don't use things like
|
||||||
|
mp3pro).
|
||||||
|
|
||||||
ISO files can also be zipped (but not mp3 files, as they are already
|
ISO files can also be zipped (but not mp3 files, as they are already
|
||||||
compressed). Note that this can cause very long loading times, which may
|
compressed). Note that this can cause very long loading times, which may
|
||||||
take up to several minutes. File naming is similar as with uncompressed ISOs.
|
take up to several minutes. File naming is similar as with uncompressed ISOs.
|
||||||
|
@ -83,12 +116,24 @@ Other important stuff
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
* If your Genesis/MD game hangs or has glitches, this is most likely because
|
* 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
|
"Accurate timing" option is not enabled, or fast renderer is used
|
||||||
(try the 16 bit one), or Z80 is disabled in "advanced options".
|
(try the accurate one), or Z80 is disabled in "advanced options".
|
||||||
* Sega/Mega CD: If the game hangs after Sega logo, you may need to enable
|
* 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"
|
"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
|
submenu, and then reset the game. Some other games may also require
|
||||||
"CDDA audio" and "PCM audio" to work.
|
"CDDA audio" and "PCM audio" to be enabled to work (enabled by default).
|
||||||
|
Incorrectly named/missing mp3s may also be the cause.
|
||||||
|
* Sega/Mega CD: If the background music is missing, you might have named your
|
||||||
|
MP3s incorrectly. Read "How to run Sega/Mega CD games" section again.
|
||||||
|
* Sega/Mega CD: If the game music plays too fast or too slow, you have encoded
|
||||||
|
your MP3s incorrectly. You will have to re-encode and/or resample them.
|
||||||
|
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
|
||||||
|
playback speeds, not repeating music or even prevent game from starting.
|
||||||
|
* Sega/Mega CD: If your games hangs at the BIOS screen (with planets shown),
|
||||||
|
you may be using a bad BIOS dump. Try another from a different source.
|
||||||
|
* Some Sega/Mega CD games don't use Z80 for anything, but they leave it active,
|
||||||
|
so disabling Z80 manually (in advanced options) improves performance.
|
||||||
#ifdef GP2X
|
#ifdef GP2X
|
||||||
* Sega/Mega CD: if FMV game performance is poor, try adjusting
|
* Sega/Mega CD: if FMV game performance is poor, try adjusting
|
||||||
"ReadAhead buffer" to something like 2048K.
|
"ReadAhead buffer" to something like 2048K.
|
||||||
|
@ -98,9 +143,6 @@ Other important stuff
|
||||||
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
|
#endif
|
||||||
* 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
|
|
||||||
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
|
#ifdef GP2X
|
||||||
* Due to internal implementation mp3s must not be larger that 12MB
|
* Due to internal implementation mp3s must not be larger that 12MB
|
||||||
|
@ -131,11 +173,18 @@ 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
|
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.
|
graphics problems for some games, so it's best to use 16bit one.
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef PSP
|
||||||
|
This option allows to switch between fast and accurate renderers. The fast one
|
||||||
|
is much faster, because it draws the whole frame at a time, instead of doing it
|
||||||
|
line by line, like the accurate one does. But because of the way it works it
|
||||||
|
can't render any mid-frame image changes (raster effects), so it is useful only
|
||||||
|
for some games.
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef GIZ
|
#ifdef GIZ
|
||||||
@@0. "Scanline mode"
|
@@0. "Scanline mode"
|
||||||
This option was designed to work around slow framebuffer access (the Gizmondo's
|
This option was designed to work around slow framebuffer access (the Gizmondo's
|
||||||
main bottleneck) by drawing every other line (even nummbered lines only).
|
main bottleneck) by drawing every other line (even numbered lines only).
|
||||||
This improves performance greatly, but looses detail.
|
This improves performance greatly, but looses detail.
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -179,7 +228,12 @@ Does what it says. You must enable at least YM2612 or SN76496 (in advanced optio
|
||||||
see below) for this to make sense (already done by default).
|
see below) for this to make sense (already done by default).
|
||||||
|
|
||||||
@@0. "Sound Quality"
|
@@0. "Sound Quality"
|
||||||
Sound rate and stereo mode. Mono is not available in Sega/Mega CD mode.
|
#ifdef PSP
|
||||||
|
Sound sample rate, affects sound quality and emulation performance.
|
||||||
|
22050Hz setting is the recommended one.
|
||||||
|
#else
|
||||||
|
Sound sample rate and stereo mode. Mono is not available in Sega/Mega CD mode.
|
||||||
|
#endif
|
||||||
#ifdef GP2X
|
#ifdef GP2X
|
||||||
If you want 44100Hz sound, it is recommended to enable the second core (next option).
|
If you want 44100Hz sound, it is recommended to enable the second core (next option).
|
||||||
|
|
||||||
|
@ -198,7 +252,7 @@ specified region, or just to set autodetection order. Also affects Sega/Mega CD.
|
||||||
|
|
||||||
@@0. "Use SRAM/BRAM savestates"
|
@@0. "Use SRAM/BRAM savestates"
|
||||||
This will automatically read/write SRAM (or BRAM for Sega/Mega CD) savestates for
|
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
|
games which are using them. SRAM is saved whenever you enter the menu or exit the
|
||||||
emulator.
|
emulator.
|
||||||
|
|
||||||
@@0. "Confirm savestate"
|
@@0. "Confirm savestate"
|
||||||
|
@ -217,6 +271,14 @@ There is no separate option for the second CPU because both CPUs use the same cl
|
||||||
source. Setting this option to 200 will cause PicoDrive NOT to change GP2X's clocks
|
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).
|
at all (this is if you use external program to set clock).
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#ifdef PSP
|
||||||
|
@@0. "CPU/bus clock"
|
||||||
|
This allows to change CPU and bus clocks for PSP. 333MHz is recommended.
|
||||||
|
|
||||||
|
@@0. "[Display options]"
|
||||||
|
Enters Display options menu (see below).
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@0. "[Sega/Mega CD options]"
|
@@0. "[Sega/Mega CD options]"
|
||||||
Enters Sega/Mega CD options menu (see below).
|
Enters Sega/Mega CD options menu (see below).
|
||||||
|
@ -347,6 +409,43 @@ 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.
|
games which don't need it, it will just slow them down.
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef PSP
|
||||||
|
Display options
|
||||||
|
---------------
|
||||||
|
|
||||||
|
@@3. "Scale factor"
|
||||||
|
This allows to resize the displayed image by using the PSP's hardware. The number is
|
||||||
|
used to multiply width and height of the game image to get the size of image to be
|
||||||
|
displayed. If you just want to make it fullscreen, just use "Set to fullscreen"
|
||||||
|
setting below.
|
||||||
|
|
||||||
|
@@3. "Hor. scale (for low res. games)"
|
||||||
|
This one works similarly as the previous setting, but can be used to apply additional
|
||||||
|
scaling horizontally, and is used for games which use lower (256 pixel wide) Gen/MD
|
||||||
|
resolution.
|
||||||
|
|
||||||
|
@@3. "Hor. scale (for hi res. games)"
|
||||||
|
Same as above, only for higher (320 pixel wide) resolution using games.
|
||||||
|
|
||||||
|
@@3. "Bilinear filtering"
|
||||||
|
If this is enabled, PSP hardware will apply bilinear filtering on the resulting image,
|
||||||
|
making it smoother, but blurry.
|
||||||
|
|
||||||
|
@@3. "Wait for vsync"
|
||||||
|
Wait for the screen to finish updating before switching to next frame, to avoid tearing.
|
||||||
|
There are 3 options:
|
||||||
|
* never: don't wait for vsync.
|
||||||
|
* sometimes: wait only if emulator is running fast enough.
|
||||||
|
* always: always wait (causes emulation slowdown).
|
||||||
|
|
||||||
|
@@3. "Set to unscaled centered"
|
||||||
|
Adjust the resizing options to set game image to it's original size.
|
||||||
|
|
||||||
|
@@3. "Set to fullscreen"
|
||||||
|
Adjust the resizing options to make the game image fullscreen.
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
Key configuration
|
Key configuration
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
@ -358,6 +457,9 @@ the right GP2X ones, which are assigned to them. If you bind 2 different GP2X bu
|
||||||
#ifdef GIZ
|
#ifdef GIZ
|
||||||
the right Giz ones, which are assigned to them. If you bind 2 different Giz buttons
|
the right Giz ones, which are assigned to them. If you bind 2 different Giz buttons
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef PSP
|
||||||
|
the right PSP ones, which are assigned to them. If you bind 2 different PSP buttons
|
||||||
|
#endif
|
||||||
to the same action, you will get a combo (which means that you will have to press
|
to the same action, you will get a combo (which means that you will have to press
|
||||||
both buttons for that action to happen.
|
both buttons for that action to happen.
|
||||||
|
|
||||||
|
@ -404,14 +506,23 @@ What is emulated?
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
Genesis/MegaDrive:
|
Genesis/MegaDrive:
|
||||||
|
#ifdef PSP
|
||||||
|
main 68k @ 7.6MHz: yes, FAME/C core
|
||||||
|
z80 @ 3.6MHz: yes, CZ80 core
|
||||||
|
#else
|
||||||
main 68k @ 7.6MHz: yes, Cyclone core
|
main 68k @ 7.6MHz: yes, Cyclone core
|
||||||
z80 @ 3.6MHz: yes, DrZ80 core
|
z80 @ 3.6MHz: yes, DrZ80 core
|
||||||
|
#endif
|
||||||
VDP: yes, except some quirks not used by games
|
VDP: yes, except some quirks not used by games
|
||||||
YM2612 FM: yes, optimized MAME core
|
YM2612 FM: yes, optimized MAME core
|
||||||
SN76489 PSG: yes, MAME core
|
SN76489 PSG: yes, MAME core
|
||||||
|
|
||||||
Sega/Mega CD:
|
Sega/Mega CD:
|
||||||
|
#ifdef PSP
|
||||||
|
another 68k @ 12.5MHz: yes, FAME/C too
|
||||||
|
#else
|
||||||
another 68k @ 12.5MHz: yes, Cyclone too
|
another 68k @ 12.5MHz: yes, Cyclone too
|
||||||
|
#endif
|
||||||
gfx scaling/rotation chip (custom ASIC): yes
|
gfx scaling/rotation chip (custom ASIC): yes
|
||||||
PCM sound source: yes
|
PCM sound source: yes
|
||||||
CD-ROM controller: yes (mostly)
|
CD-ROM controller: yes (mostly)
|
||||||
|
@ -434,7 +545,7 @@ Credits
|
||||||
This emulator uses code from these people/projects:
|
This emulator uses code from these people/projects:
|
||||||
|
|
||||||
notaz
|
notaz
|
||||||
GP2X, UIQ, Gizmondo ports, Cyclone 68000 hacks,
|
GP2X, UIQ, PSP, Gizmondo ports, CPU core hacks,
|
||||||
lots of additional coding (see changelog).
|
lots of additional coding (see changelog).
|
||||||
Homepage: http://notaz.gp2x.de/
|
Homepage: http://notaz.gp2x.de/
|
||||||
|
|
||||||
|
@ -442,22 +553,39 @@ Dave
|
||||||
Cyclone 68000 core, Pico emulation library
|
Cyclone 68000 core, Pico emulation library
|
||||||
Homepage: http://www.finalburn.com/
|
Homepage: http://www.finalburn.com/
|
||||||
|
|
||||||
|
#ifdef PSP
|
||||||
|
Chui
|
||||||
|
FAME/C 68k interpreter core
|
||||||
|
(based on C68K by Stephane Dallongeville)
|
||||||
|
|
||||||
|
Stephane Dallongeville (written), NJ (optimized)
|
||||||
|
CZ80 Z80 interpreter core
|
||||||
|
|
||||||
|
#else
|
||||||
Reesy & FluBBa
|
Reesy & FluBBa
|
||||||
DrZ80, the Z80 emulator written in ARM assembly.
|
DrZ80, the Z80 interpreter written in ARM assembly.
|
||||||
Homepage: http://reesy.gp32x.de/
|
Homepage: http://reesy.gp32x.de/
|
||||||
|
|
||||||
Tatsuyuki Satoh, Jarek Burczynski, MultiArcadeMachineEmulator development
|
#endif
|
||||||
|
Tatsuyuki Satoh, Jarek Burczynski, MAME development
|
||||||
software implementation of Yamaha FM sound generator
|
software implementation of Yamaha FM sound generator
|
||||||
|
|
||||||
MultiArcadeMachineEmulator (MAME) development
|
MAME development
|
||||||
Texas Instruments SN76489 / SN76496 programmable tone /noise generator
|
Texas Instruments SN76489 / SN76496 programmable tone/noise generator
|
||||||
Homepage: http://www.mame.net/
|
Homepage: http://www.mame.net/
|
||||||
|
|
||||||
Stephane Dallongeville
|
Stephane Dallongeville
|
||||||
Gens, MD/Mega CD/32X emulator. Most Sega CD code is based on this emu.
|
Gens, MD/Mega CD/32X emulator. Most Sega CD code is based on this emu.
|
||||||
|
#ifdef PSP
|
||||||
|
|
||||||
|
people @ ps2dev.org forums / PSPSDK crew
|
||||||
|
libaudiocodec code (by cooleyes)
|
||||||
|
other sample code
|
||||||
|
#else
|
||||||
|
|
||||||
Helix community
|
Helix community
|
||||||
Helix mp3 decoder
|
Helix mp3 decoder
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
Additional thanks
|
Additional thanks
|
||||||
|
@ -499,6 +627,13 @@ Additional thanks
|
||||||
|
|
||||||
Changelog
|
Changelog
|
||||||
---------
|
---------
|
||||||
|
1.35
|
||||||
|
+ PSP port added. Lots of new code for it. Integrated modified FAME/C, CZ80 cores.
|
||||||
|
+ Some minor generic optimizations.
|
||||||
|
* Patched some code which was crashing under PSP, but was working in GP2X/Giz
|
||||||
|
(although it should have crashed there too).
|
||||||
|
* Readme updated.
|
||||||
|
|
||||||
1.34
|
1.34
|
||||||
+ Gizmondo port added.
|
+ 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.
|
||||||
|
|
|
@ -85,6 +85,10 @@ int main(int argc, char *argv[])
|
||||||
if ( check_defines((void *) &argv[3], argc-3, buff + 7)) skip_mode = 1;
|
if ( check_defines((void *) &argv[3], argc-3, buff + 7)) skip_mode = 1;
|
||||||
ifdef_level++;
|
ifdef_level++;
|
||||||
}
|
}
|
||||||
|
else if (strncmp(buff, "#else", 5) == 0)
|
||||||
|
{
|
||||||
|
skip_mode ^= 1;
|
||||||
|
}
|
||||||
else if (strncmp(buff, "#endif", 6) == 0)
|
else if (strncmp(buff, "#endif", 6) == 0)
|
||||||
{
|
{
|
||||||
ifdef_level--;
|
ifdef_level--;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue