mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 07:17:45 -04:00
docs updated, gfx_cd works(?)
git-svn-id: file:///home/notaz/opt/svn/PicoDrive@74 be3aeb3a-fb24-0410-a615-afba39da0efa
This commit is contained in:
parent
a403080104
commit
01bc6b1993
7 changed files with 94 additions and 107 deletions
|
@ -29,36 +29,6 @@ static const int Table_Rot_Time[] =
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#if 1*0
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
unsigned int Reg_58; // Stamp_Size
|
|
||||||
unsigned int Reg_5A;
|
|
||||||
unsigned int Reg_5C;
|
|
||||||
unsigned int Reg_5E;
|
|
||||||
unsigned int Reg_60;
|
|
||||||
unsigned int Reg_62;
|
|
||||||
unsigned int Reg_64; // V_Dot
|
|
||||||
unsigned int Reg_66;
|
|
||||||
|
|
||||||
unsigned int Stamp_Map_Adr;
|
|
||||||
unsigned int Buffer_Adr;
|
|
||||||
unsigned int Vector_Adr;
|
|
||||||
unsigned int Function; // Jmp_Adr;
|
|
||||||
unsigned int Float_Part;
|
|
||||||
unsigned int Draw_Speed;
|
|
||||||
|
|
||||||
unsigned int XS;
|
|
||||||
unsigned int YS;
|
|
||||||
/*unsigned*/ int DXS;
|
|
||||||
/*unsigned*/ int DYS;
|
|
||||||
unsigned int XD;
|
|
||||||
unsigned int YD;
|
|
||||||
unsigned int XD_Mul;
|
|
||||||
unsigned int H_Dot;
|
|
||||||
} Rot_Comp;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void gfx_cd_start(void)
|
static void gfx_cd_start(void)
|
||||||
{
|
{
|
||||||
int upd_len;
|
int upd_len;
|
||||||
|
@ -126,8 +96,6 @@ static void gfx_do(void)
|
||||||
rot_comp.DYS = rot_comp.DXS >> 16;
|
rot_comp.DYS = rot_comp.DXS >> 16;
|
||||||
rot_comp.DXS = (rot_comp.DXS << 16) >> 16; // sign extend
|
rot_comp.DXS = (rot_comp.DXS << 16) >> 16; // sign extend
|
||||||
rot_comp.Vector_Adr += 8;
|
rot_comp.Vector_Adr += 8;
|
||||||
//if ((rot_comp.H_Dot & 0x1ff) == 0)
|
|
||||||
// goto nothing_to_draw;
|
|
||||||
|
|
||||||
// MAKE_IMAGE_LINE
|
// MAKE_IMAGE_LINE
|
||||||
while (rot_comp.H_Dot)
|
while (rot_comp.H_Dot)
|
||||||
|
@ -136,12 +104,12 @@ static void gfx_do(void)
|
||||||
{
|
{
|
||||||
if (func & 4) // 16x16 screen
|
if (func & 4) // 16x16 screen
|
||||||
{
|
{
|
||||||
eax = (ecx >> (11+5)) & 0x7f;
|
eax = (ecx >> (11+5)) & 0x007f;
|
||||||
ebx = (edx >> (11-2)) & 0x3f80;
|
ebx = (edx >> (11-2)) & 0x3f80;
|
||||||
}
|
}
|
||||||
else // 1x1 screen
|
else // 1x1 screen
|
||||||
{
|
{
|
||||||
eax = (ecx >> (11+5)) & 0x0f;
|
eax = (ecx >> (11+5)) & 0x07;
|
||||||
ebx = (edx >> (11+2)) & 0x38;
|
ebx = (edx >> (11+2)) & 0x38;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -149,7 +117,7 @@ static void gfx_do(void)
|
||||||
{
|
{
|
||||||
if (func & 4) // 16x16 screen
|
if (func & 4) // 16x16 screen
|
||||||
{
|
{
|
||||||
eax = (ecx >> (11+4)) & 0xff;
|
eax = (ecx >> (11+4)) & 0x00ff;
|
||||||
ebx = (edx >> (11-4)) & 0xff00;
|
ebx = (edx >> (11-4)) & 0xff00;
|
||||||
}
|
}
|
||||||
else // 1x1 screen
|
else // 1x1 screen
|
||||||
|
@ -160,7 +128,7 @@ static void gfx_do(void)
|
||||||
}
|
}
|
||||||
ebx += eax;
|
ebx += eax;
|
||||||
|
|
||||||
esi = rot_comp.Stamp_Map_Adr;
|
// esi = rot_comp.Stamp_Map_Adr;
|
||||||
ptrs = (unsigned short *) (Pico_mcd->word_ram2M + rot_comp.Stamp_Map_Adr + ebx*2);
|
ptrs = (unsigned short *) (Pico_mcd->word_ram2M + rot_comp.Stamp_Map_Adr + ebx*2);
|
||||||
edi = ptrs[0] | (ptrs[1] << 16);
|
edi = ptrs[0] | (ptrs[1] << 16);
|
||||||
|
|
||||||
|
@ -191,131 +159,102 @@ static void gfx_do(void)
|
||||||
ebx += esi;
|
ebx += esi;
|
||||||
edi = (eax & 0x3800) ^ 0x1000; // bswap
|
edi = (eax & 0x3800) ^ 0x1000; // bswap
|
||||||
eax = ((eax >> 8) & 0x40) + ebx;
|
eax = ((eax >> 8) & 0x40) + ebx;
|
||||||
pixel = *(Pico_mcd->word_ram2M + (edi >> 12) + eax);
|
|
||||||
if (!(edi & 0x800)) pixel >>= 4;
|
|
||||||
break;
|
break;
|
||||||
case 0x01: // No_Flip_0, 32x32 dots
|
case 0x01: // No_Flip_0, 32x32 dots
|
||||||
ebx = (ebx >> 9) & 0x7c;
|
ebx = (ebx >> 9) & 0x7c;
|
||||||
ebx += esi;
|
ebx += esi;
|
||||||
edi = (eax & 0x3800) ^ 0x1000; // bswap
|
edi = (eax & 0x3800) ^ 0x1000; // bswap
|
||||||
eax = ((eax >> 7) & 0x180) + ebx;
|
eax = ((eax >> 7) & 0x180) + ebx;
|
||||||
pixel = *(Pico_mcd->word_ram2M + (edi >> 12) + eax);
|
|
||||||
if (!(edi & 0x800)) pixel >>= 4;
|
|
||||||
break;
|
break;
|
||||||
case 0x02: // No_Flip_90, 16x16 dots
|
case 0x02: // No_Flip_90, 16x16 dots
|
||||||
eax = (eax >> 9) & 0x3c;
|
eax = (eax >> 9) & 0x3c;
|
||||||
eax += esi;
|
eax += esi;
|
||||||
edi = (ebx & 0x3800) ^ 0x2800; // bswap
|
edi = (ebx & 0x3800) ^ 0x2800; // bswap
|
||||||
eax += ((ebx >> 8) & 0x40) ^ 0x40;
|
eax += ((ebx >> 8) & 0x40) ^ 0x40;
|
||||||
pixel = *(Pico_mcd->word_ram2M + (edi >> 12) + eax);
|
|
||||||
if (!(edi & 0x800)) pixel >>= 4;
|
|
||||||
break;
|
break;
|
||||||
case 0x03: // No_Flip_90, 32x32 dots
|
case 0x03: // No_Flip_90, 32x32 dots
|
||||||
eax = (eax >> 9) & 0x7c;
|
eax = (eax >> 9) & 0x7c;
|
||||||
eax += esi;
|
eax += esi;
|
||||||
edi = (ebx & 0x3800) ^ 0x2800; // bswap
|
edi = (ebx & 0x3800) ^ 0x2800; // bswap
|
||||||
eax += (ebx >> 7) & 0x180;
|
eax += ((ebx >> 7) & 0x180) ^ 0x180;
|
||||||
pixel = *(Pico_mcd->word_ram2M + (edi >> 12) + eax);
|
|
||||||
if (!(edi & 0x800)) pixel >>= 4;
|
|
||||||
break;
|
break;
|
||||||
case 0x04: // No_Flip_180, 16x16 dots
|
case 0x04: // No_Flip_180, 16x16 dots
|
||||||
ebx = ((ebx >> 9) & 0x3c) ^ 0x3c;
|
ebx = ((ebx >> 9) & 0x3c) ^ 0x3c;
|
||||||
ebx += esi;
|
ebx += esi;
|
||||||
edi = (eax & 0x3800) ^ 0x2800; // bswap and flip
|
edi = (eax & 0x3800) ^ 0x2800; // bswap and flip
|
||||||
eax = (((eax >> 8) & 0x40) ^ 0x40) + ebx;
|
eax = (((eax >> 8) & 0x40) ^ 0x40) + ebx;
|
||||||
pixel = *(Pico_mcd->word_ram2M + (edi >> 12) + eax);
|
|
||||||
if (!(edi & 0x800)) pixel >>= 4;
|
|
||||||
break;
|
break;
|
||||||
case 0x05: // No_Flip_180, 32x32 dots
|
case 0x05: // No_Flip_180, 32x32 dots
|
||||||
ebx = ((ebx >> 9) & 0x7c) ^ 0x7c;
|
ebx = ((ebx >> 9) & 0x7c) ^ 0x7c;
|
||||||
ebx += esi;
|
ebx += esi;
|
||||||
edi = (eax & 0x3800) ^ 0x2800; // bswap and flip
|
edi = (eax & 0x3800) ^ 0x2800; // bswap and flip
|
||||||
eax = (((eax >> 7) & 0x180) ^ 0x180) + ebx;
|
eax = (((eax >> 7) & 0x180) ^ 0x180) + ebx;
|
||||||
pixel = *(Pico_mcd->word_ram2M + (edi >> 12) + eax);
|
|
||||||
if (!(edi & 0x800)) pixel >>= 4;
|
|
||||||
break;
|
break;
|
||||||
case 0x06: // No_Flip_270, 16x16 dots
|
case 0x06: // No_Flip_270, 16x16 dots
|
||||||
eax = ((eax >> 9) & 0x3c) ^ 0x3c;
|
eax = ((eax >> 9) & 0x3c) ^ 0x3c;
|
||||||
eax += esi;
|
eax += esi;
|
||||||
edi = (ebx & 0x3800) ^ 0x1000; // bswap
|
edi = (ebx & 0x3800) ^ 0x1000; // bswap
|
||||||
eax += (ebx >> 8) & 0x40;
|
eax += (ebx >> 8) & 0x40;
|
||||||
pixel = *(Pico_mcd->word_ram2M + (edi >> 12) + eax);
|
|
||||||
if (!(edi & 0x800)) pixel >>= 4;
|
|
||||||
break;
|
break;
|
||||||
case 0x07: // No_Flip_270, 32x32 dots
|
case 0x07: // No_Flip_270, 32x32 dots
|
||||||
eax = ((eax >> 9) & 0x7c) ^ 0x7c;
|
eax = ((eax >> 9) & 0x7c) ^ 0x7c;
|
||||||
eax += esi;
|
eax += esi;
|
||||||
edi = (ebx & 0x3800) ^ 0x1000; // bswap
|
edi = (ebx & 0x3800) ^ 0x1000; // bswap
|
||||||
eax += (ebx >> 7) & 0x180;
|
eax += (ebx >> 7) & 0x180;
|
||||||
pixel = *(Pico_mcd->word_ram2M + (edi >> 12) + eax);
|
|
||||||
if (!(edi & 0x800)) pixel >>= 4;
|
|
||||||
break;
|
break;
|
||||||
case 0x08: // Flip_0, 16x16 dots
|
case 0x08: // Flip_0, 16x16 dots
|
||||||
ebx = ((ebx >> 9) & 0x3c) ^ 0x3c;
|
ebx = (ebx >> 9) & 0x3c;
|
||||||
ebx += esi;
|
ebx += esi;
|
||||||
edi = (eax & 0x3800) ^ 0x2800; // bswap, flip
|
edi = (eax & 0x3800) ^ 0x2800; // bswap, flip
|
||||||
eax = (((eax >> 8) & 0x40) ^ 0x40) + ebx;
|
eax = (((eax >> 8) & 0x40) ^ 0x40) + ebx;
|
||||||
pixel = *(Pico_mcd->word_ram2M + (edi >> 12) + eax);
|
|
||||||
if (!(edi & 0x800)) pixel >>= 4;
|
|
||||||
break;
|
break;
|
||||||
case 0x09: // Flip_0, 32x32 dots
|
case 0x09: // Flip_0, 32x32 dots
|
||||||
ebx = ((ebx >> 9) & 0x7c) ^ 0x7c;
|
ebx = (ebx >> 9) & 0x7c;
|
||||||
ebx += esi;
|
ebx += esi;
|
||||||
edi = (eax & 0x3800) ^ 0x2800; // bswap, flip
|
edi = (eax & 0x3800) ^ 0x2800; // bswap, flip
|
||||||
eax = (((eax >> 7) & 0x180) ^ 0x180) + ebx;
|
eax = (((eax >> 7) & 0x180) ^ 0x180) + ebx;
|
||||||
pixel = *(Pico_mcd->word_ram2M + (edi >> 12) + eax);
|
|
||||||
if (!(edi & 0x800)) pixel >>= 4;
|
|
||||||
break;
|
break;
|
||||||
case 0x0a: // Flip_90, 16x16 dots
|
case 0x0a: // Flip_90, 16x16 dots
|
||||||
eax = ((eax >> 9) & 0x3c) ^ 0x3c;
|
eax = ((eax >> 9) & 0x3c) ^ 0x3c;
|
||||||
eax += esi;
|
eax += esi;
|
||||||
edi = (ebx & 0x3800) ^ 0x2800; // bswap, flip
|
edi = (ebx & 0x3800) ^ 0x2800; // bswap, flip
|
||||||
eax += ((ebx >> 8) & 0x40) ^ 0x40;
|
eax += ((ebx >> 8) & 0x40) ^ 0x40;
|
||||||
pixel = *(Pico_mcd->word_ram2M + (edi >> 12) + eax);
|
|
||||||
if (!(edi & 0x800)) pixel >>= 4;
|
|
||||||
break;
|
break;
|
||||||
case 0x0b: // Flip_90, 32x32 dots
|
case 0x0b: // Flip_90, 32x32 dots
|
||||||
eax = ((eax >> 9) & 0x7c) ^ 0x7c;
|
eax = ((eax >> 9) & 0x7c) ^ 0x7c;
|
||||||
eax += esi;
|
eax += esi;
|
||||||
edi = (ebx & 0x3800) ^ 0x2800; // bswap, flip
|
edi = (ebx & 0x3800) ^ 0x2800; // bswap, flip
|
||||||
eax += ((ebx >> 7) & 0x180) ^ 0x180;
|
eax += ((ebx >> 7) & 0x180) ^ 0x180;
|
||||||
pixel = *(Pico_mcd->word_ram2M + (edi >> 12) + eax);
|
|
||||||
if (!(edi & 0x800)) pixel >>= 4;
|
|
||||||
break;
|
break;
|
||||||
case 0x0c: // Flip_180, 16x16 dots
|
case 0x0c: // Flip_180, 16x16 dots
|
||||||
ebx = ((ebx >> 9) & 0x3c) ^ 0x3c;
|
ebx = ((ebx >> 9) & 0x3c) ^ 0x3c;
|
||||||
ebx += esi;
|
ebx += esi;
|
||||||
edi = (eax & 0x3800) ^ 0x1000; // bswap
|
edi = (eax & 0x3800) ^ 0x1000; // bswap
|
||||||
eax = ((eax >> 8) & 0x40) + ebx;
|
eax = ((eax >> 8) & 0x40) + ebx;
|
||||||
pixel = *(Pico_mcd->word_ram2M + (edi >> 12) + eax);
|
|
||||||
if (!(edi & 0x800)) pixel >>= 4;
|
|
||||||
break;
|
break;
|
||||||
case 0x0d: // Flip_180, 32x32 dots
|
case 0x0d: // Flip_180, 32x32 dots
|
||||||
ebx = ((ebx >> 9) & 0x7c) ^ 0x7c;
|
ebx = ((ebx >> 9) & 0x7c) ^ 0x7c;
|
||||||
ebx += esi;
|
ebx += esi;
|
||||||
edi = (eax & 0x3800) ^ 0x1000; // bswap
|
edi = (eax & 0x3800) ^ 0x1000; // bswap
|
||||||
eax = ((eax >> 7) & 0x180) + ebx;
|
eax = ((eax >> 7) & 0x180) + ebx;
|
||||||
pixel = *(Pico_mcd->word_ram2M + (edi >> 12) + eax);
|
|
||||||
if (!(edi & 0x800)) pixel >>= 4;
|
|
||||||
break;
|
break;
|
||||||
case 0x0e: // Flip_270, 16x16 dots
|
case 0x0e: // Flip_270, 16x16 dots
|
||||||
eax = (eax >> 9) & 0x3c;
|
eax = (eax >> 9) & 0x3c;
|
||||||
eax += esi;
|
eax += esi;
|
||||||
edi = (ebx & 0x3800) ^ 0x1000; // bswap, flip
|
edi = (ebx & 0x3800) ^ 0x1000; // bswap, flip
|
||||||
eax += (ebx >> 8) & 0x40;
|
eax += (ebx >> 8) & 0x40;
|
||||||
pixel = *(Pico_mcd->word_ram2M + (edi >> 12) + eax);
|
|
||||||
if (!(edi & 0x800)) pixel >>= 4;
|
|
||||||
break;
|
break;
|
||||||
case 0x0f: // Flip_270, 32x32 dots
|
case 0x0f: // Flip_270, 32x32 dots
|
||||||
eax = (eax >> 9) & 0x7c;
|
eax = (eax >> 9) & 0x7c;
|
||||||
eax += esi;
|
eax += esi;
|
||||||
edi = (ebx & 0x3800) ^ 0x1000; // bswap, flip
|
edi = (ebx & 0x3800) ^ 0x1000; // bswap, flip
|
||||||
eax += (ebx >> 7) & 0x180;
|
eax += (ebx >> 7) & 0x180;
|
||||||
pixel = *(Pico_mcd->word_ram2M + (edi >> 12) + eax);
|
|
||||||
if (!(edi & 0x800)) pixel >>= 4;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pixel = *(Pico_mcd->word_ram2M + (edi >> 12) + eax);
|
||||||
|
if (!(edi & 0x800)) pixel >>= 4;
|
||||||
|
|
||||||
Pixel_Out:
|
Pixel_Out:
|
||||||
// pixel = 0;
|
// pixel = 0;
|
||||||
//Finish:
|
//Finish:
|
||||||
|
|
|
@ -22,8 +22,8 @@ typedef struct
|
||||||
|
|
||||||
unsigned int XS;
|
unsigned int XS;
|
||||||
unsigned int YS;
|
unsigned int YS;
|
||||||
unsigned int DXS;
|
/*unsigned*/ int DXS;
|
||||||
unsigned int DYS;
|
/*unsigned*/ int DYS;
|
||||||
unsigned int XD;
|
unsigned int XD;
|
||||||
unsigned int YD;
|
unsigned int YD;
|
||||||
unsigned int XD_Mul;
|
unsigned int XD_Mul;
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
As PicoDrive is multiplatform emulator, this is GP2X specific part of readme
|
As PicoDrive is multiplatform emulator, this is GP2X specific part of readme
|
||||||
about configuration.
|
about configuration.
|
||||||
|
|
||||||
|
If you have questions, you can use GP32X to ask for help.
|
||||||
|
http://www.gp32x.com/board/index.php?showforum=48
|
||||||
|
|
||||||
|
|
||||||
Configuration
|
Configuration
|
||||||
-------------
|
-------------
|
||||||
|
@ -16,9 +19,9 @@ Other two are accurate line-based renderers. The 8bit is faster but does not
|
||||||
run well with some games like Street Racer.
|
run well with some games like Street Racer.
|
||||||
|
|
||||||
2. "Accurate timing"
|
2. "Accurate timing"
|
||||||
This adds some more emulation precision, but slows the emulation down. Whithout
|
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
|
this option some games do not boot (Red Zone for example), others have sound
|
||||||
problems.
|
problems. This options has no effect for Sega/Mega CD emulation.
|
||||||
|
|
||||||
3. "Accurate sprites"
|
3. "Accurate sprites"
|
||||||
This option improves emulation of sprite priorities, it also enables emulation
|
This option improves emulation of sprite priorities, it also enables emulation
|
||||||
|
@ -52,29 +55,34 @@ go and reconfigure your keys, you will be able to bind X,Y,Z and mode actions.
|
||||||
|
|
||||||
10. "Genesis Region"
|
10. "Genesis Region"
|
||||||
This option lets you force the game to think it is running on machine from the
|
This option lets you force the game to think it is running on machine from the
|
||||||
specified region.
|
specified region, or just to set autodetection order. Also affects Sega/Mega CD.
|
||||||
|
|
||||||
11. "Use SRAM savestates"
|
11. "Use SRAM/BRAM savestates"
|
||||||
This will automatically read/write SRAM savestates for games which are using them.
|
This will automatically read/write SRAM (or BRAM for Sega/Mega CD) savestates for
|
||||||
SRAM is saved whenever you pause your game or exit the emulator.
|
games which are using them. SRAM is saved whenever you pause your game or exit the
|
||||||
|
emulator.
|
||||||
|
|
||||||
12. "GP2X CPU clocks"
|
12. "GP2X CPU clocks"
|
||||||
Here you can change clocks of both GP2X's CPUs. Larger values increase performance.
|
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
|
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
|
source. Setting this option to 200 will cause PicoDrive NOT to change GP2X's clocks
|
||||||
at all.
|
at all (this is if you use external program to set clock).
|
||||||
|
|
||||||
13. "[advanced options]"
|
13. "[Sega/Mega CD options]"
|
||||||
|
Enters Sega/Mega CD options menu (see below).
|
||||||
|
|
||||||
|
14. "[advanced options]"
|
||||||
Enters advanced options menu (see below).
|
Enters advanced options menu (see below).
|
||||||
|
|
||||||
14. "Save cfg as default"
|
15. "Save cfg as default"
|
||||||
If you save your config here it will be loaded on next ROM load, but only if there
|
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).
|
is no game specific config saved (which will be loaded in that case).
|
||||||
|
|
||||||
15. "Save cfg for current game only"
|
16. "Save cfg for current game only"
|
||||||
Whenever you load current ROM again these settings will be loaded (squidgehack and
|
Whenever you load current ROM again these settings will be loaded (squidgehack and
|
||||||
RAM settings will not take effect until emulator is restarted).
|
RAM settings will not take effect until emulator is restarted).
|
||||||
|
|
||||||
|
|
||||||
Advanced configuration
|
Advanced configuration
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
|
@ -108,25 +116,56 @@ startup, and this data is lost when sound chips are being enabled/disabled.
|
||||||
This will always apply gzip compression on your savestates, allowing you to
|
This will always apply gzip compression on your savestates, allowing you to
|
||||||
save some space and load/save time.
|
save some space and load/save time.
|
||||||
|
|
||||||
7. "USB joy controls player X"
|
7. "Don't save config on exit"
|
||||||
If you are able to use USB joysticks with your GP2X, this options selects which
|
|
||||||
player the joystick controls.
|
|
||||||
|
|
||||||
8. "Don't save config on exit"
|
|
||||||
This will disable config autowrite on exit (which might cause SD card corruption
|
This will disable config autowrite on exit (which might cause SD card corruption
|
||||||
according to DaveC).
|
according to DaveC).
|
||||||
|
|
||||||
9. "craigix's RAM timings"
|
8. "craigix's RAM timings"
|
||||||
This overclocks the GP2X RAM chips, but may cause instability. Recommended if you
|
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.
|
use the second core for sound. Needs emulator restart to take effect.
|
||||||
See this thread:
|
See this thread:
|
||||||
http://www.gp32x.com/board/index.php?showtopic=32319
|
http://www.gp32x.com/board/index.php?showtopic=32319
|
||||||
|
|
||||||
10. "squidgehack"
|
9. "squidgehack"
|
||||||
Well known way to improve the GP2X performance. You must restart the emulator
|
Well known way to improve the GP2X performance. You must restart the emulator
|
||||||
for the change of this option to take effect.
|
for the change of this option to take effect.
|
||||||
|
|
||||||
|
|
||||||
|
Sega/Mega CD options
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
1,2,3. "USA/EUR/JAP BIOS"
|
||||||
|
These options just shows if your BIOS files were correctly detected be 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 left-top 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 the 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. "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.
|
||||||
|
|
||||||
|
9. "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
|
Key configuration
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
|
|
@ -969,13 +969,15 @@ static void updateSound(int len)
|
||||||
{
|
{
|
||||||
if (PicoOpt&8) len<<=1;
|
if (PicoOpt&8) len<<=1;
|
||||||
|
|
||||||
gp2x_sound_write(PsndOut, len<<1);
|
/* avoid writing audio when lagging behind to prevent audio lag */
|
||||||
|
if (PicoSkipFrame != 2)
|
||||||
|
gp2x_sound_write(PsndOut, len<<1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void SkipFrame(void)
|
static void SkipFrame(int do_audio)
|
||||||
{
|
{
|
||||||
PicoSkipFrame=1;
|
PicoSkipFrame=do_audio ? 1 : 2;
|
||||||
PicoFrame();
|
PicoFrame();
|
||||||
PicoSkipFrame=0;
|
PicoSkipFrame=0;
|
||||||
}
|
}
|
||||||
|
@ -1157,7 +1159,7 @@ void emu_Loop(void)
|
||||||
// when second changes, but we don't want buffer to starve.
|
// when second changes, but we don't want buffer to starve.
|
||||||
if(PsndOut && frames_done < target_fps && frames_done > target_fps-5) {
|
if(PsndOut && frames_done < target_fps && frames_done > target_fps-5) {
|
||||||
updateKeys();
|
updateKeys();
|
||||||
SkipFrame(); frames_done++;
|
SkipFrame(1); frames_done++;
|
||||||
}
|
}
|
||||||
|
|
||||||
frames_done -= target_fps; if (frames_done < 0) frames_done = 0;
|
frames_done -= target_fps; if (frames_done < 0) frames_done = 0;
|
||||||
|
@ -1170,7 +1172,7 @@ void emu_Loop(void)
|
||||||
if(currentConfig.Frameskip >= 0) { // frameskip enabled
|
if(currentConfig.Frameskip >= 0) { // frameskip enabled
|
||||||
for(i = 0; i < currentConfig.Frameskip; i++) {
|
for(i = 0; i < currentConfig.Frameskip; i++) {
|
||||||
updateKeys();
|
updateKeys();
|
||||||
SkipFrame(); frames_done++;
|
SkipFrame(1); frames_done++;
|
||||||
if (PsndOut) { // do framelimitting if sound is enabled
|
if (PsndOut) { // do framelimitting if sound is enabled
|
||||||
gettimeofday(&tval, 0);
|
gettimeofday(&tval, 0);
|
||||||
if(thissec != tval.tv_sec) tval.tv_usec+=1000000;
|
if(thissec != tval.tv_sec) tval.tv_usec+=1000000;
|
||||||
|
@ -1189,7 +1191,7 @@ void emu_Loop(void)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
updateKeys();
|
updateKeys();
|
||||||
SkipFrame(/*tval.tv_usec < lim_time+target_frametime*/); frames_done++;
|
SkipFrame(tval.tv_usec < lim_time+target_frametime); frames_done++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -63,10 +63,11 @@ clean: tidy
|
||||||
tidy:
|
tidy:
|
||||||
@$(RM) $(OBJS)
|
@$(RM) $(OBJS)
|
||||||
@make -C ../../cpu/mz80/ clean
|
@make -C ../../cpu/mz80/ clean
|
||||||
|
@make -C ../gp2x/helix/ X86=1 clean
|
||||||
|
|
||||||
PicoDrive : $(OBJS)
|
PicoDrive : $(OBJS) ../gp2x/helix/helix_mp3_x86.a
|
||||||
@echo $@
|
@echo $@
|
||||||
@$(GCC) $(COPT) $(OBJS) ../gp2x/helix/helix_mp3_x86.a $(LDFLAGS) -lm -Wl,-Map=PicoDrive.map -o $@
|
@$(GCC) $(COPT) $^ $(LDFLAGS) -lm -Wl,-Map=PicoDrive.map -o $@
|
||||||
|
|
||||||
|
|
||||||
../../cpu/mz80/mz80.o : ../../cpu/mz80/mz80.asm
|
../../cpu/mz80/mz80.o : ../../cpu/mz80/mz80.asm
|
||||||
|
@ -76,6 +77,9 @@ PicoDrive : $(OBJS)
|
||||||
../../cpu/mz80/mz80.asm :
|
../../cpu/mz80/mz80.asm :
|
||||||
@make -C ../../cpu/mz80/
|
@make -C ../../cpu/mz80/
|
||||||
|
|
||||||
|
../gp2x/helix/helix_mp3_x86.a:
|
||||||
|
@make -C ../gp2x/helix/ X86=1 clean all
|
||||||
|
|
||||||
.c.o:
|
.c.o:
|
||||||
@echo $<
|
@echo $<
|
||||||
@$(GCC) $(COPT) $(DEFINC) -c $< -o $@
|
@$(GCC) $(COPT) $(DEFINC) -c $< -o $@
|
||||||
|
|
|
@ -12,8 +12,8 @@
|
||||||
// pico.c
|
// pico.c
|
||||||
#define CAN_HANDLE_240_LINES 1
|
#define CAN_HANDLE_240_LINES 1
|
||||||
|
|
||||||
//#define dprintf(f,...) printf("%05i:%03i: " f "\n",Pico.m.frame_count,Pico.m.scanline,##__VA_ARGS__)
|
#define dprintf(f,...) printf("%05i:%03i: " f "\n",Pico.m.frame_count,Pico.m.scanline,##__VA_ARGS__)
|
||||||
#define dprintf(x...)
|
//#define dprintf(x...)
|
||||||
|
|
||||||
#endif //PORT_CONFIG_H
|
#endif //PORT_CONFIG_H
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,17 @@
|
||||||
|
For help / comments / questions visit GP32X boards at:
|
||||||
|
http://www.gp32x.com/board/
|
||||||
|
|
||||||
|
|
||||||
About
|
About
|
||||||
-----
|
-----
|
||||||
|
|
||||||
This version of PicoDrive is another enhanced version of Dave's
|
This is yet another Megadrive / Genesis / Sega CD / Mega CD emulator, which
|
||||||
Megadrive / Genesis emulator for Pocket PC, which now can also emulate
|
was written having ARM-based handheld devices in mind (such as PDAs,
|
||||||
Sega/Mega CD. The original Dave's code was heavily modified (including
|
smartphones and handheld consoles like GP2X of course). The critical parts
|
||||||
Cyclone core), parts of it were rewritten in asm, many features added,
|
(renderer, 68K and Z80 cpu interpreters) and some other random code is
|
||||||
accuracy increased. Sega/Mega CD emulation is mostly based on Gens code.
|
written in ARM asm, other code is C. The base code originates from Dave's
|
||||||
This version is aimed at ARM-based handheld devices, so ports exist for
|
(fdave, finalburn) PicoDrive 0.30 for Pocket PC. The Sega/Mega CD code is
|
||||||
GP2X handheld console, Symbian smartphones and other devices.
|
roughly based on Stephane Dallongeville's Gens.
|
||||||
|
|
||||||
|
|
||||||
How to make it run
|
How to make it run
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue