mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 15:27:46 -04:00
Cyclone interface for new mem system, minor tweaks
git-svn-id: file:///home/notaz/opt/svn/PicoDrive@779 be3aeb3a-fb24-0410-a615-afba39da0efa
This commit is contained in:
parent
fc1874de8a
commit
5e89f0f5ae
8 changed files with 194 additions and 164 deletions
|
@ -89,8 +89,9 @@ PICO_INTERNAL void PicoAreaUnpackCpu(unsigned char *cpu, int is_sub)
|
||||||
CycloneSetSr(context, *(unsigned int *)(cpu+0x44));
|
CycloneSetSr(context, *(unsigned int *)(cpu+0x44));
|
||||||
context->osp=*(unsigned int *)(cpu+0x48);
|
context->osp=*(unsigned int *)(cpu+0x48);
|
||||||
memcpy(context->d,cpu,0x40);
|
memcpy(context->d,cpu,0x40);
|
||||||
context->membase=0;
|
context->membase = 0;
|
||||||
context->pc = context->checkpc(*(unsigned int *)(cpu+0x40)); // Base pc
|
context->pc = *(unsigned int *)(cpu+0x40);
|
||||||
|
CycloneUnpack(context, NULL); // rebase PC
|
||||||
context->irq = cpu[0x4c];
|
context->irq = cpu[0x4c];
|
||||||
context->state_flags = 0;
|
context->state_flags = 0;
|
||||||
if (cpu[0x4d])
|
if (cpu[0x4d])
|
||||||
|
|
|
@ -787,74 +787,6 @@ static void PicoWriteS68k16_pr(u32 a, u32 d)
|
||||||
|
|
||||||
// -----------------------------------------------------------------
|
// -----------------------------------------------------------------
|
||||||
|
|
||||||
#ifdef EMU_C68K
|
|
||||||
static __inline int PicoMemBaseM68k(u32 pc)
|
|
||||||
{
|
|
||||||
if ((pc&0xe00000)==0xe00000)
|
|
||||||
return (int)Pico.ram-(pc&0xff0000); // Program Counter in Ram
|
|
||||||
|
|
||||||
if (pc < 0x20000)
|
|
||||||
return (int)Pico_mcd->bios; // Program Counter in BIOS
|
|
||||||
|
|
||||||
if ((pc&0xfc0000)==0x200000)
|
|
||||||
{
|
|
||||||
if (!(Pico_mcd->s68k_regs[3]&4))
|
|
||||||
return (int)Pico_mcd->word_ram2M - 0x200000; // Program Counter in Word Ram
|
|
||||||
if (pc < 0x220000) {
|
|
||||||
int bank = Pico_mcd->s68k_regs[3]&1;
|
|
||||||
return (int)Pico_mcd->word_ram1M[bank] - 0x200000;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Error - Program Counter is invalid
|
|
||||||
elprintf(EL_ANOMALY, "m68k FIXME: unhandled jump to %06x", pc);
|
|
||||||
|
|
||||||
return (int)Pico_mcd->bios;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static u32 PicoCheckPcM68k(u32 pc)
|
|
||||||
{
|
|
||||||
pc-=PicoCpuCM68k.membase; // Get real pc
|
|
||||||
pc&=0xfffffe;
|
|
||||||
|
|
||||||
PicoCpuCM68k.membase=PicoMemBaseM68k(pc);
|
|
||||||
|
|
||||||
return PicoCpuCM68k.membase+pc;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static __inline int PicoMemBaseS68k(u32 pc)
|
|
||||||
{
|
|
||||||
if (pc < 0x80000) // PRG RAM
|
|
||||||
return (int)Pico_mcd->prg_ram;
|
|
||||||
|
|
||||||
if ((pc&0xfc0000)==0x080000) // WORD RAM 2M area (assume we are in the right mode..)
|
|
||||||
return (int)Pico_mcd->word_ram2M - 0x080000;
|
|
||||||
|
|
||||||
if ((pc&0xfe0000)==0x0c0000) { // word RAM 1M area
|
|
||||||
int bank = (Pico_mcd->s68k_regs[3]&1)^1;
|
|
||||||
return (int)Pico_mcd->word_ram1M[bank] - 0x0c0000;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Error - Program Counter is invalid
|
|
||||||
elprintf(EL_ANOMALY, "s68k FIXME: unhandled jump to %06x", pc);
|
|
||||||
|
|
||||||
return (int)Pico_mcd->prg_ram;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static u32 PicoCheckPcS68k(u32 pc)
|
|
||||||
{
|
|
||||||
pc-=PicoCpuCS68k.membase; // Get real pc
|
|
||||||
pc&=0xfffffe;
|
|
||||||
|
|
||||||
PicoCpuCS68k.membase=PicoMemBaseS68k(pc);
|
|
||||||
|
|
||||||
return PicoCpuCS68k.membase+pc;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// TODO: probably split
|
// TODO: probably split
|
||||||
void PicoMemRemapCD(int r3)
|
void PicoMemRemapCD(int r3)
|
||||||
{
|
{
|
||||||
|
@ -963,15 +895,17 @@ PICO_INTERNAL void PicoMemSetupCD(void)
|
||||||
cpu68k_map_set(s68k_write16_map, 0xff0000, 0xffffff, PicoWriteS68k16_pr, 1);
|
cpu68k_map_set(s68k_write16_map, 0xff0000, 0xffffff, PicoWriteS68k16_pr, 1);
|
||||||
|
|
||||||
#ifdef EMU_C68K
|
#ifdef EMU_C68K
|
||||||
PicoCpuCM68k.checkpc = PicoCheckPcM68k;
|
|
||||||
// s68k
|
// s68k
|
||||||
PicoCpuCS68k.checkpc = PicoCheckPcS68k;
|
PicoCpuCS68k.read8 = (void *)s68k_read8_map;
|
||||||
PicoCpuCS68k.fetch8 = PicoCpuCS68k.read8 = s68k_read8;
|
PicoCpuCS68k.read16 = (void *)s68k_read16_map;
|
||||||
PicoCpuCS68k.fetch16 = PicoCpuCS68k.read16 = s68k_read16;
|
PicoCpuCS68k.read32 = (void *)s68k_read16_map;
|
||||||
PicoCpuCS68k.fetch32 = PicoCpuCS68k.read32 = s68k_read32;
|
PicoCpuCS68k.write8 = (void *)s68k_write8_map;
|
||||||
PicoCpuCS68k.write8 = s68k_write8;
|
PicoCpuCS68k.write16 = (void *)s68k_write16_map;
|
||||||
PicoCpuCS68k.write16 = s68k_write16;
|
PicoCpuCS68k.write32 = (void *)s68k_write16_map;
|
||||||
PicoCpuCS68k.write32 = s68k_write32;
|
PicoCpuCS68k.checkpc = NULL; /* unused */
|
||||||
|
PicoCpuCS68k.fetch8 = NULL;
|
||||||
|
PicoCpuCS68k.fetch16 = NULL;
|
||||||
|
PicoCpuCS68k.fetch32 = NULL;
|
||||||
#endif
|
#endif
|
||||||
#ifdef EMU_F68K
|
#ifdef EMU_F68K
|
||||||
// s68k
|
// s68k
|
||||||
|
|
|
@ -133,14 +133,7 @@ PICO_INTERNAL int SekResetS68k(void)
|
||||||
if (Pico.rom==NULL) return 1;
|
if (Pico.rom==NULL) return 1;
|
||||||
|
|
||||||
#ifdef EMU_C68K
|
#ifdef EMU_C68K
|
||||||
PicoCpuCS68k.state_flags=0;
|
CycloneReset(&PicoCpuCS68k);
|
||||||
PicoCpuCS68k.osp=0;
|
|
||||||
PicoCpuCS68k.srh =0x27; // Supervisor mode
|
|
||||||
PicoCpuCS68k.flags=4; // Z set
|
|
||||||
PicoCpuCS68k.irq=0;
|
|
||||||
PicoCpuCS68k.a[7]=PicoCpuCS68k.read32(0); // Stack Pointer
|
|
||||||
PicoCpuCS68k.membase=0;
|
|
||||||
PicoCpuCS68k.pc=PicoCpuCS68k.checkpc(PicoCpuCS68k.read32(4)); // Program Counter
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef EMU_M68K
|
#ifdef EMU_M68K
|
||||||
{
|
{
|
||||||
|
|
140
pico/m68kif_cyclone.s
Normal file
140
pico/m68kif_cyclone.s
Normal file
|
@ -0,0 +1,140 @@
|
||||||
|
@ vim:filetype=armasm
|
||||||
|
|
||||||
|
.equ M68K_MEM_SHIFT, 16
|
||||||
|
|
||||||
|
.global cyclone_checkpc
|
||||||
|
.global cyclone_fetch8
|
||||||
|
.global cyclone_fetch16
|
||||||
|
.global cyclone_fetch32
|
||||||
|
.global cyclone_read8
|
||||||
|
.global cyclone_read16
|
||||||
|
.global cyclone_read32
|
||||||
|
.global cyclone_write8
|
||||||
|
.global cyclone_write16
|
||||||
|
.global cyclone_write32
|
||||||
|
|
||||||
|
@ Warning: here we abuse the fact that we are only called
|
||||||
|
@ from Cyclone, and assume that r7 contains context pointer.
|
||||||
|
cyclone_checkpc:
|
||||||
|
ldr r1, [r7, #0x60] @ membase
|
||||||
|
sub r0, r0, r1
|
||||||
|
bic r0, r0, #0xff000000
|
||||||
|
bics r0, r0, #1
|
||||||
|
beq crashed
|
||||||
|
|
||||||
|
ldr r1, [r7, #0x6c] @ read16 map
|
||||||
|
mov r2, r0, lsr #M68K_MEM_SHIFT
|
||||||
|
ldr r1, [r1, r2, lsl #2]
|
||||||
|
movs r1, r1, lsl #1
|
||||||
|
bcs crashed
|
||||||
|
|
||||||
|
str r1, [r7, #0x60] @ membase
|
||||||
|
add r0, r0, r1
|
||||||
|
bx lr
|
||||||
|
|
||||||
|
crashed:
|
||||||
|
stmfd sp!,{lr}
|
||||||
|
mov r1, r7
|
||||||
|
bl cyclone_crashed
|
||||||
|
ldr r0, [r7, #0x40] @ reload PC + membase
|
||||||
|
ldmfd sp!,{pc}
|
||||||
|
|
||||||
|
|
||||||
|
cyclone_read8: @ u32 a
|
||||||
|
cyclone_fetch8:
|
||||||
|
bic r0, r0, #0xff000000
|
||||||
|
ldr r1, [r7, #0x68] @ read8 map
|
||||||
|
mov r2, r0, lsr #M68K_MEM_SHIFT
|
||||||
|
ldr r1, [r1, r2, lsl #2]
|
||||||
|
eor r2, r0, #1
|
||||||
|
movs r1, r1, lsl #1
|
||||||
|
ldrccb r0, [r1, r2]
|
||||||
|
bxcc lr
|
||||||
|
bx r1
|
||||||
|
|
||||||
|
|
||||||
|
cyclone_read16: @ u32 a
|
||||||
|
cyclone_fetch16:
|
||||||
|
bic r0, r0, #0xff000000
|
||||||
|
ldr r1, [r7, #0x6c] @ read16 map
|
||||||
|
mov r2, r0, lsr #M68K_MEM_SHIFT
|
||||||
|
ldr r1, [r1, r2, lsl #2]
|
||||||
|
bic r0, r0, #1
|
||||||
|
movs r1, r1, lsl #1
|
||||||
|
ldrcch r0, [r1, r0]
|
||||||
|
bxcc lr
|
||||||
|
bx r1
|
||||||
|
|
||||||
|
|
||||||
|
cyclone_read32: @ u32 a
|
||||||
|
cyclone_fetch32:
|
||||||
|
bic r0, r0, #0xff000000
|
||||||
|
ldr r1, [r7, #0x6c] @ read16 map
|
||||||
|
mov r2, r0, lsr #M68K_MEM_SHIFT
|
||||||
|
ldr r1, [r1, r2, lsl #2]
|
||||||
|
bic r0, r0, #1
|
||||||
|
movs r1, r1, lsl #1
|
||||||
|
ldrcch r0, [r1, r0]!
|
||||||
|
ldrcch r1, [r1, #2]
|
||||||
|
orrcc r0, r1, r0, lsl #16
|
||||||
|
bxcc lr
|
||||||
|
|
||||||
|
stmfd sp!,{r0,r1,lr}
|
||||||
|
mov lr, pc
|
||||||
|
bx r1
|
||||||
|
mov r2, r0, lsl #16
|
||||||
|
ldmia sp, {r0,r1}
|
||||||
|
str r2, [sp]
|
||||||
|
add r0, r0, #2
|
||||||
|
mov lr, pc
|
||||||
|
bx r1
|
||||||
|
ldr r1, [sp]
|
||||||
|
mov r0, r0, lsl #16
|
||||||
|
orr r0, r1, r0, lsr #16
|
||||||
|
ldmfd sp!,{r1,r2,pc}
|
||||||
|
|
||||||
|
|
||||||
|
cyclone_write8: @ u32 a, u8 d
|
||||||
|
bic r0, r0, #0xff000000
|
||||||
|
ldr r2, [r7, #0x74] @ write8 map
|
||||||
|
mov r3, r0, lsr #M68K_MEM_SHIFT
|
||||||
|
ldr r2, [r2, r3, lsl #2]
|
||||||
|
eor r3, r0, #1
|
||||||
|
movs r2, r2, lsl #1
|
||||||
|
strccb r1, [r2, r3]
|
||||||
|
bxcc lr
|
||||||
|
bx r2
|
||||||
|
|
||||||
|
|
||||||
|
cyclone_write16: @ u32 a, u16 d
|
||||||
|
bic r0, r0, #0xff000000
|
||||||
|
ldr r2, [r7, #0x78] @ write16 map
|
||||||
|
mov r3, r0, lsr #M68K_MEM_SHIFT
|
||||||
|
ldr r2, [r2, r3, lsl #2]
|
||||||
|
bic r0, r0, #1
|
||||||
|
movs r2, r2, lsl #1
|
||||||
|
strcch r1, [r2, r0]
|
||||||
|
bxcc lr
|
||||||
|
bx r2
|
||||||
|
|
||||||
|
|
||||||
|
cyclone_write32: @ u32 a, u32 d
|
||||||
|
bic r0, r0, #0xff000000
|
||||||
|
ldr r2, [r7, #0x78] @ write16 map
|
||||||
|
mov r3, r0, lsr #M68K_MEM_SHIFT
|
||||||
|
ldr r2, [r2, r3, lsl #2]
|
||||||
|
bic r0, r0, #1
|
||||||
|
movs r2, r2, lsl #1
|
||||||
|
movcc r3, r1, lsr #16
|
||||||
|
strcch r3, [r2, r0]!
|
||||||
|
strcch r1, [r2, #2]
|
||||||
|
bxcc lr
|
||||||
|
|
||||||
|
stmfd sp!,{r0-r2,lr}
|
||||||
|
mov r1, r1, lsr #16
|
||||||
|
mov lr, pc
|
||||||
|
bx r2
|
||||||
|
ldmfd sp!,{r0-r2,lr}
|
||||||
|
add r0, r0, #2
|
||||||
|
bx r2
|
||||||
|
|
100
pico/memory.c
100
pico/memory.c
|
@ -160,57 +160,15 @@ void log_io(unsigned int addr, int bits, int rw);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(EMU_C68K)
|
#if defined(EMU_C68K)
|
||||||
static __inline int PicoMemBase(u32 pc)
|
void cyclone_crashed(u32 pc, struct Cyclone *context)
|
||||||
{
|
{
|
||||||
int membase=0;
|
elprintf(EL_STATUS|EL_ANOMALY, "%c68k crash detected @ %06x\n",
|
||||||
|
context == &PicoCpuCM68k ? 'm' : 's', pc);
|
||||||
if (pc<Pico.romsize+4)
|
context->membase = (u32)Pico.rom;
|
||||||
{
|
context->pc = (u32)Pico.rom + Pico.romsize;
|
||||||
membase=(int)Pico.rom; // Program Counter in Rom
|
|
||||||
}
|
|
||||||
else if ((pc&0xe00000)==0xe00000)
|
|
||||||
{
|
|
||||||
membase=(int)Pico.ram-(pc&0xff0000); // Program Counter in Ram
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Error - Program Counter is invalid
|
|
||||||
membase=(int)Pico.rom;
|
|
||||||
}
|
|
||||||
|
|
||||||
return membase;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
PICO_INTERNAL u32 PicoCheckPc(u32 pc)
|
|
||||||
{
|
|
||||||
u32 ret=0;
|
|
||||||
#if defined(EMU_C68K)
|
|
||||||
pc-=PicoCpuCM68k.membase; // Get real pc
|
|
||||||
// pc&=0xfffffe;
|
|
||||||
pc&=~1;
|
|
||||||
if ((pc<<8) == 0)
|
|
||||||
{
|
|
||||||
elprintf(EL_STATUS|EL_ANOMALY, "%i:%03i: game crash detected @ %06x\n",
|
|
||||||
Pico.m.frame_count, Pico.m.scanline, SekPc);
|
|
||||||
return (int)Pico.rom + Pico.romsize; // common crash condition, may happen with bad ROMs
|
|
||||||
}
|
|
||||||
|
|
||||||
PicoCpuCM68k.membase=PicoMemBase(pc&0x00ffffff);
|
|
||||||
PicoCpuCM68k.membase-=pc&0xff000000;
|
|
||||||
|
|
||||||
ret = PicoCpuCM68k.membase+pc;
|
|
||||||
#endif
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
PICO_INTERNAL void PicoInitPc(u32 pc)
|
|
||||||
{
|
|
||||||
PicoCheckPc(pc);
|
|
||||||
}
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------
|
// -----------------------------------------------------------------
|
||||||
// memmap helpers
|
// memmap helpers
|
||||||
|
|
||||||
|
@ -259,7 +217,7 @@ static u32 io_ports_read(u32 a)
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void io_ports_write(u32 a, u32 d)
|
static void NOINLINE io_ports_write(u32 a, u32 d)
|
||||||
{
|
{
|
||||||
a = (a>>1) & 0xf;
|
a = (a>>1) & 0xf;
|
||||||
|
|
||||||
|
@ -271,11 +229,11 @@ static void io_ports_write(u32 a, u32 d)
|
||||||
Pico.m.padTHPhase[a - 1]++;
|
Pico.m.padTHPhase[a - 1]++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// cartain IO ports can be used as RAM
|
// certain IO ports can be used as RAM
|
||||||
Pico.ioports[a] = d;
|
Pico.ioports[a] = d;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ctl_write_z80busreq(u32 d)
|
static void NOINLINE ctl_write_z80busreq(u32 d)
|
||||||
{
|
{
|
||||||
d&=1; d^=1;
|
d&=1; d^=1;
|
||||||
elprintf(EL_BUSREQ, "set_zrun: %i->%i [%i] @%06x", Pico.m.z80Run, d, SekCyclesDone(), SekPc);
|
elprintf(EL_BUSREQ, "set_zrun: %i->%i [%i] @%06x", Pico.m.z80Run, d, SekCyclesDone(), SekPc);
|
||||||
|
@ -295,7 +253,7 @@ static void ctl_write_z80busreq(u32 d)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ctl_write_z80reset(u32 d)
|
static void NOINLINE ctl_write_z80reset(u32 d)
|
||||||
{
|
{
|
||||||
d&=1; d^=1;
|
d&=1; d^=1;
|
||||||
elprintf(EL_BUSREQ, "set_zreset: %i->%i [%i] @%06x", Pico.m.z80_reset, d, SekCyclesDone(), SekPc);
|
elprintf(EL_BUSREQ, "set_zreset: %i->%i [%i] @%06x", Pico.m.z80_reset, d, SekCyclesDone(), SekPc);
|
||||||
|
@ -491,13 +449,15 @@ u32 PicoRead8_io(u32 a)
|
||||||
d = Pico.m.rotate++;
|
d = Pico.m.rotate++;
|
||||||
d ^= d << 6;
|
d ^= d << 6;
|
||||||
|
|
||||||
// bit8 seems to be readable in this range
|
if ((a & 0xfc00) == 0x1000) {
|
||||||
if ((a & 0xfc01) == 0x1000)
|
// bit8 seems to be readable in this range
|
||||||
d &= ~0x01;
|
if (!(a & 1))
|
||||||
|
d &= ~0x01;
|
||||||
|
|
||||||
if ((a & 0xff01) == 0x1100) { // z80 busreq (verified)
|
if ((a & 0xff01) == 0x1100) { // z80 busreq (verified)
|
||||||
d |= (Pico.m.z80Run | Pico.m.z80_reset) & 1;
|
d |= (Pico.m.z80Run | Pico.m.z80_reset) & 1;
|
||||||
elprintf(EL_BUSREQ, "get_zrun: %02x [%i] @%06x", d, SekCyclesDone(), SekPc);
|
elprintf(EL_BUSREQ, "get_zrun: %02x [%i] @%06x", d, SekCyclesDone(), SekPc);
|
||||||
|
}
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -526,12 +486,13 @@ u32 PicoRead16_io(u32 a)
|
||||||
d ^= (d << 5) ^ (d << 8);
|
d ^= (d << 5) ^ (d << 8);
|
||||||
|
|
||||||
// bit8 seems to be readable in this range
|
// bit8 seems to be readable in this range
|
||||||
if ((a & 0xfc00) == 0x1000)
|
if ((a & 0xfc00) == 0x1000) {
|
||||||
d &= ~0x0100;
|
d &= ~0x0100;
|
||||||
|
|
||||||
if ((a & 0xff00) == 0x1100) { // z80 busreq
|
if ((a & 0xff00) == 0x1100) { // z80 busreq
|
||||||
d |= ((Pico.m.z80Run | Pico.m.z80_reset) & 1) << 8;
|
d |= ((Pico.m.z80Run | Pico.m.z80_reset) & 1) << 8;
|
||||||
elprintf(EL_BUSREQ, "get_zrun: %04x [%i] @%06x", d, SekCyclesDone(), SekPc);
|
elprintf(EL_BUSREQ, "get_zrun: %04x [%i] @%06x", d, SekCyclesDone(), SekPc);
|
||||||
|
}
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -718,13 +679,16 @@ PICO_INTERNAL void PicoMemSetup(void)
|
||||||
|
|
||||||
// Setup memory callbacks:
|
// Setup memory callbacks:
|
||||||
#ifdef EMU_C68K
|
#ifdef EMU_C68K
|
||||||
PicoCpuCM68k.checkpc = PicoCheckPc;
|
PicoCpuCM68k.read8 = (void *)m68k_read8_map;
|
||||||
PicoCpuCM68k.fetch8 = PicoCpuCM68k.read8 = m68k_read8;
|
PicoCpuCM68k.read16 = (void *)m68k_read16_map;
|
||||||
PicoCpuCM68k.fetch16 = PicoCpuCM68k.read16 = m68k_read16;
|
PicoCpuCM68k.read32 = (void *)m68k_read16_map;
|
||||||
PicoCpuCM68k.fetch32 = PicoCpuCM68k.read32 = m68k_read32;
|
PicoCpuCM68k.write8 = (void *)m68k_write8_map;
|
||||||
PicoCpuCM68k.write8 = m68k_write8;
|
PicoCpuCM68k.write16 = (void *)m68k_write16_map;
|
||||||
PicoCpuCM68k.write16 = m68k_write16;
|
PicoCpuCM68k.write32 = (void *)m68k_write16_map;
|
||||||
PicoCpuCM68k.write32 = m68k_write32;
|
PicoCpuCM68k.checkpc = NULL; /* unused */
|
||||||
|
PicoCpuCM68k.fetch8 = NULL;
|
||||||
|
PicoCpuCM68k.fetch16 = NULL;
|
||||||
|
PicoCpuCM68k.fetch32 = NULL;
|
||||||
#endif
|
#endif
|
||||||
#ifdef EMU_F68K
|
#ifdef EMU_F68K
|
||||||
PicoCpuFM68k.read_byte = m68k_read8;
|
PicoCpuFM68k.read_byte = m68k_read8;
|
||||||
|
|
|
@ -471,8 +471,6 @@ void PicoDoHighPal555M4(void);
|
||||||
void PicoDrawSetColorFormatMode4(int which);
|
void PicoDrawSetColorFormatMode4(int which);
|
||||||
|
|
||||||
// memory.c
|
// memory.c
|
||||||
PICO_INTERNAL void PicoInitPc(unsigned int pc);
|
|
||||||
PICO_INTERNAL unsigned int PicoCheckPc(unsigned int pc);
|
|
||||||
PICO_INTERNAL void PicoMemSetup(void);
|
PICO_INTERNAL void PicoMemSetup(void);
|
||||||
unsigned int PicoRead8_io(unsigned int a);
|
unsigned int PicoRead8_io(unsigned int a);
|
||||||
unsigned int PicoRead16_io(unsigned int a);
|
unsigned int PicoRead16_io(unsigned int a);
|
||||||
|
@ -686,6 +684,12 @@ extern void lprintf(const char *fmt, ...);
|
||||||
#define MEMH_FUNC
|
#define MEMH_FUNC
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#define NOINLINE __attribute__((noinline))
|
||||||
|
#else
|
||||||
|
#define NOINLINE
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} // End of extern "C"
|
} // End of extern "C"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -138,13 +138,7 @@ PICO_INTERNAL int SekReset(void)
|
||||||
if (Pico.rom==NULL) return 1;
|
if (Pico.rom==NULL) return 1;
|
||||||
|
|
||||||
#ifdef EMU_C68K
|
#ifdef EMU_C68K
|
||||||
PicoCpuCM68k.state_flags=0;
|
CycloneReset(&PicoCpuCM68k);
|
||||||
PicoCpuCM68k.osp=0;
|
|
||||||
PicoCpuCM68k.srh =0x27; // Supervisor mode
|
|
||||||
PicoCpuCM68k.irq=0;
|
|
||||||
PicoCpuCM68k.a[7]=PicoCpuCM68k.read32(0); // Stack Pointer
|
|
||||||
PicoCpuCM68k.membase=0;
|
|
||||||
PicoCpuCM68k.pc=PicoCpuCM68k.checkpc(PicoCpuCM68k.read32(4)); // Program Counter
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef EMU_M68K
|
#ifdef EMU_M68K
|
||||||
m68k_set_context(&PicoCpuMM68k); // if we ever reset m68k, we always need it's context to be set
|
m68k_set_context(&PicoCpuMM68k); // if we ever reset m68k, we always need it's context to be set
|
||||||
|
|
|
@ -102,7 +102,7 @@ OBJS += cpu/musashi/m68kops.o cpu/musashi/m68kcpu.o
|
||||||
endif
|
endif
|
||||||
ifeq "$(use_cyclone)" "1"
|
ifeq "$(use_cyclone)" "1"
|
||||||
DEFINC += -DEMU_C68K
|
DEFINC += -DEMU_C68K
|
||||||
OBJS += cpu/Cyclone/proj/Cyclone.o cpu/Cyclone/tools/idle.o
|
OBJS += pico/m68kif_cyclone.o cpu/Cyclone/proj/Cyclone.o cpu/Cyclone/tools/idle.o
|
||||||
endif
|
endif
|
||||||
ifeq "$(mz80)" "1"
|
ifeq "$(mz80)" "1"
|
||||||
DEFINC += -D_USE_MZ80
|
DEFINC += -D_USE_MZ80
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue