mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 07:17:45 -04:00
32x: packed pixel mode (works over 68k)
git-svn-id: file:///home/notaz/opt/svn/PicoDrive@773 be3aeb3a-fb24-0410-a615-afba39da0efa
This commit is contained in:
parent
be2c420828
commit
974fdb5bfd
15 changed files with 330 additions and 91 deletions
|
@ -1,4 +1,5 @@
|
|||
#include "../pico_int.h"
|
||||
#include "../sound/ym2612.h"
|
||||
|
||||
struct Pico32x Pico32x;
|
||||
|
||||
|
@ -9,23 +10,68 @@ void Pico32xStartup(void)
|
|||
PicoAHW |= PAHW_32X;
|
||||
PicoMemSetup32x();
|
||||
|
||||
// probably should only done on power
|
||||
// memset(&Pico32x, 0, sizeof(Pico32x));
|
||||
|
||||
if (!Pico.m.pal)
|
||||
Pico32x.vdp_regs[0] |= 0x8000;
|
||||
Pico32x.vdp_regs[0] |= P32XV_nPAL;
|
||||
|
||||
// prefill checksum
|
||||
Pico32x.regs[0x28/2] = *(unsigned short *)(Pico.rom + 0x18e);
|
||||
emu_32x_startup();
|
||||
}
|
||||
|
||||
void Pico32xInit(void)
|
||||
{
|
||||
// XXX: mv
|
||||
Pico32x.regs[0] = 0x0082;
|
||||
}
|
||||
|
||||
void PicoPower32x(void)
|
||||
{
|
||||
memset(&Pico32x, 0, sizeof(Pico32x));
|
||||
Pico32x.regs[0] = 0x0082; // SH2 reset?
|
||||
Pico32x.vdp_regs[0x0a/2] = P32XV_VBLK|P32XV_HBLK|P32XV_PEN;
|
||||
}
|
||||
|
||||
void PicoReset32x(void)
|
||||
{
|
||||
}
|
||||
|
||||
static void p32x_start_blank(void)
|
||||
{
|
||||
// enter vblank
|
||||
Pico32x.vdp_regs[0x0a/2] |= P32XV_VBLK|P32XV_PEN;
|
||||
|
||||
// swap waits until vblank
|
||||
if ((Pico32x.vdp_regs[0x0a/2] ^ Pico32x.pending_fb) & P32XV_FS) {
|
||||
Pico32x.vdp_regs[0x0a/2] &= ~P32XV_FS;
|
||||
Pico32x.vdp_regs[0x0a/2] |= Pico32x.pending_fb;
|
||||
Pico32xSwapDRAM(Pico32x.pending_fb ^ 1);
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME..
|
||||
static __inline void SekRunM68k(int cyc)
|
||||
{
|
||||
int cyc_do;
|
||||
SekCycleAim+=cyc;
|
||||
if ((cyc_do=SekCycleAim-SekCycleCnt) <= 0) return;
|
||||
#if defined(EMU_CORE_DEBUG)
|
||||
// this means we do run-compare
|
||||
SekCycleCnt+=CM_compareRun(cyc_do, 0);
|
||||
#elif defined(EMU_C68K)
|
||||
PicoCpuCM68k.cycles=cyc_do;
|
||||
CycloneRun(&PicoCpuCM68k);
|
||||
SekCycleCnt+=cyc_do-PicoCpuCM68k.cycles;
|
||||
#elif defined(EMU_M68K)
|
||||
SekCycleCnt+=m68k_execute(cyc_do);
|
||||
#elif defined(EMU_F68K)
|
||||
SekCycleCnt+=fm68k_emulate(cyc_do+1, 0, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
#define PICO_32X
|
||||
#include "../pico_cmn.c"
|
||||
|
||||
void PicoFrame32x(void)
|
||||
{
|
||||
if ((Pico32x.vdp_regs[0] & 3 ) != 0) // no forced blanking
|
||||
Pico32x.vdp_regs[0x0a/2] &= ~(P32XV_VBLK|P32XV_PEN); // get out of vblank
|
||||
|
||||
PicoFrameStart();
|
||||
PicoFrameHints();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue