mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 07:17:45 -04:00
famec: fix 64bit portability issues
This commit is contained in:
parent
720bfc5d9f
commit
be26eb239b
7 changed files with 206 additions and 204 deletions
5
Makefile
5
Makefile
|
@ -37,12 +37,7 @@ asm_misc = 1
|
||||||
asm_cdpico = 1
|
asm_cdpico = 1
|
||||||
asm_cdmemory = 1
|
asm_cdmemory = 1
|
||||||
else # if not arm
|
else # if not arm
|
||||||
ifneq "$(ARCH)" "x86_64"
|
|
||||||
# no 64bit support
|
|
||||||
use_fame ?= 1
|
use_fame ?= 1
|
||||||
else
|
|
||||||
use_musashi ?= 1
|
|
||||||
endif
|
|
||||||
use_cz80 ?= 1
|
use_cz80 ?= 1
|
||||||
use_sh2mame ?= 1
|
use_sh2mame ?= 1
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -122,7 +122,7 @@ typedef struct
|
||||||
unsigned short execinfo;
|
unsigned short execinfo;
|
||||||
// PD extension
|
// PD extension
|
||||||
int io_cycle_counter; // cycles left
|
int io_cycle_counter; // cycles left
|
||||||
unsigned int Fetch[M68K_FETCHBANK1];
|
unsigned long Fetch[M68K_FETCHBANK1];
|
||||||
} M68K_CONTEXT;
|
} M68K_CONTEXT;
|
||||||
|
|
||||||
extern M68K_CONTEXT *g_m68kcontext;
|
extern M68K_CONTEXT *g_m68kcontext;
|
||||||
|
|
|
@ -11,6 +11,10 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#pragma GCC diagnostic ignored "-Wunused-variable"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "fame.h"
|
#include "fame.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -70,12 +74,17 @@
|
||||||
#undef s32
|
#undef s32
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef uptr
|
||||||
|
#undef uptr
|
||||||
|
#endif
|
||||||
|
|
||||||
#define u8 unsigned char
|
#define u8 unsigned char
|
||||||
#define s8 signed char
|
#define s8 signed char
|
||||||
#define u16 unsigned short
|
#define u16 unsigned short
|
||||||
#define s16 signed short
|
#define s16 signed short
|
||||||
#define u32 unsigned int
|
#define u32 unsigned int
|
||||||
#define s32 signed int
|
#define s32 signed int
|
||||||
|
#define uptr unsigned long
|
||||||
|
|
||||||
/*
|
/*
|
||||||
typedef unsigned char u8;
|
typedef unsigned char u8;
|
||||||
|
@ -287,7 +296,7 @@ typedef signed int s32;
|
||||||
#define M68K_PPL (m68kcontext.sr >> 8) & 7
|
#define M68K_PPL (m68kcontext.sr >> 8) & 7
|
||||||
|
|
||||||
#define GET_PC \
|
#define GET_PC \
|
||||||
((u32)PC - BasePC)
|
(u32)((uptr)PC - BasePC)
|
||||||
|
|
||||||
|
|
||||||
#ifdef FAMEC_CHECK_BRANCHES
|
#ifdef FAMEC_CHECK_BRANCHES
|
||||||
|
@ -522,7 +531,7 @@ M68K_CONTEXT *g_m68kcontext;
|
||||||
static u32 Opcode;
|
static u32 Opcode;
|
||||||
static s32 cycles_needed;
|
static s32 cycles_needed;
|
||||||
static u16 *PC;
|
static u16 *PC;
|
||||||
static u32 BasePC;
|
static uptr BasePC;
|
||||||
static u32 flag_C;
|
static u32 flag_C;
|
||||||
static u32 flag_V;
|
static u32 flag_V;
|
||||||
static u32 flag_NotZ;
|
static u32 flag_NotZ;
|
||||||
|
@ -697,7 +706,7 @@ int fm68k_reset(void)
|
||||||
u32 fm68k_get_pc(M68K_CONTEXT *context)
|
u32 fm68k_get_pc(M68K_CONTEXT *context)
|
||||||
{
|
{
|
||||||
#ifdef FAMEC_NO_GOTOS
|
#ifdef FAMEC_NO_GOTOS
|
||||||
return (context->execinfo & M68K_RUNNING)?(u32)PC-BasePC:context->pc;
|
return (context->execinfo & M68K_RUNNING)?(uptr)PC-BasePC:context->pc;
|
||||||
#else
|
#else
|
||||||
return context->pc; // approximate PC in this mode
|
return context->pc; // approximate PC in this mode
|
||||||
#endif
|
#endif
|
||||||
|
@ -776,8 +785,6 @@ static FAMEC_EXTRA_INLINE u32 execute_exception_group_0(s32 vect, s32 addr, u16
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void setup_jumptable(void);
|
|
||||||
|
|
||||||
#ifdef FAMEC_NO_GOTOS
|
#ifdef FAMEC_NO_GOTOS
|
||||||
|
|
||||||
#define OPCODE(N_OP) static void OP_##N_OP(void)
|
#define OPCODE(N_OP) static void OP_##N_OP(void)
|
||||||
|
@ -795,7 +802,7 @@ int fm68k_emulate(s32 cycles, int dualcore, int idle_mode)
|
||||||
u32 Opcode;
|
u32 Opcode;
|
||||||
s32 cycles_needed;
|
s32 cycles_needed;
|
||||||
u16 *PC;
|
u16 *PC;
|
||||||
u32 BasePC;
|
uptr BasePC;
|
||||||
u32 flag_C;
|
u32 flag_C;
|
||||||
u32 flag_V;
|
u32 flag_V;
|
||||||
u32 flag_NotZ;
|
u32 flag_NotZ;
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -917,7 +917,7 @@ static void bank_switch(int b)
|
||||||
#ifdef EMU_F68K
|
#ifdef EMU_F68K
|
||||||
// setup FAME fetchmap
|
// setup FAME fetchmap
|
||||||
for (rs = 0x90; rs < 0xa0; rs++)
|
for (rs = 0x90; rs < 0xa0; rs++)
|
||||||
PicoCpuFM68k.Fetch[rs] = (u32)Pico.rom + bank - 0x900000;
|
PicoCpuFM68k.Fetch[rs] = (unsigned long)Pico.rom + bank - 0x900000;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1461,9 +1461,9 @@ void PicoMemSetup32x(void)
|
||||||
cpu68k_map_set(m68k_read16_map, 0x880000, 0x880000 + rs - 1, Pico.rom, 0);
|
cpu68k_map_set(m68k_read16_map, 0x880000, 0x880000 + rs - 1, Pico.rom, 0);
|
||||||
#ifdef EMU_F68K
|
#ifdef EMU_F68K
|
||||||
// setup FAME fetchmap
|
// setup FAME fetchmap
|
||||||
PicoCpuFM68k.Fetch[0] = (u32)Pico32xMem->m68k_rom;
|
PicoCpuFM68k.Fetch[0] = (unsigned long)Pico32xMem->m68k_rom;
|
||||||
for (rs = 0x88; rs < 0x90; rs++)
|
for (rs = 0x88; rs < 0x90; rs++)
|
||||||
PicoCpuFM68k.Fetch[rs] = (u32)Pico.rom - 0x880000;
|
PicoCpuFM68k.Fetch[rs] = (unsigned long)Pico.rom - 0x880000;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// 32X ROM (banked)
|
// 32X ROM (banked)
|
||||||
|
|
|
@ -966,14 +966,14 @@ static void remap_word_ram(int r3)
|
||||||
if (!(r3 & 4))
|
if (!(r3 & 4))
|
||||||
{
|
{
|
||||||
for (i = M68K_FETCHBANK1*2/16; (i<<(24-FAMEC_FETCHBITS)) < 0x240000; i++)
|
for (i = M68K_FETCHBANK1*2/16; (i<<(24-FAMEC_FETCHBITS)) < 0x240000; i++)
|
||||||
PicoCpuFM68k.Fetch[i] = (unsigned int)Pico_mcd->word_ram2M - 0x200000;
|
PicoCpuFM68k.Fetch[i] = (unsigned long)Pico_mcd->word_ram2M - 0x200000;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (i = M68K_FETCHBANK1*2/16; (i<<(24-FAMEC_FETCHBITS)) < 0x220000; i++)
|
for (i = M68K_FETCHBANK1*2/16; (i<<(24-FAMEC_FETCHBITS)) < 0x220000; i++)
|
||||||
PicoCpuFM68k.Fetch[i] = (unsigned int)Pico_mcd->word_ram1M[r3 & 1] - 0x200000;
|
PicoCpuFM68k.Fetch[i] = (unsigned long)Pico_mcd->word_ram1M[r3 & 1] - 0x200000;
|
||||||
for (i = M68K_FETCHBANK1*0x0c/0x100; (i<<(24-FAMEC_FETCHBITS)) < 0x0e0000; i++)
|
for (i = M68K_FETCHBANK1*0x0c/0x100; (i<<(24-FAMEC_FETCHBITS)) < 0x0e0000; i++)
|
||||||
PicoCpuFS68k.Fetch[i] = (unsigned int)Pico_mcd->word_ram1M[(r3&1)^1] - 0x0c0000;
|
PicoCpuFS68k.Fetch[i] = (unsigned long)Pico_mcd->word_ram1M[(r3&1)^1] - 0x0c0000;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -1073,23 +1073,23 @@ PICO_INTERNAL void PicoMemSetupCD(void)
|
||||||
// M68k
|
// M68k
|
||||||
// by default, point everything to fitst 64k of ROM (BIOS)
|
// by default, point everything to fitst 64k of ROM (BIOS)
|
||||||
for (i = 0; i < M68K_FETCHBANK1; i++)
|
for (i = 0; i < M68K_FETCHBANK1; i++)
|
||||||
PicoCpuFM68k.Fetch[i] = (unsigned int)Pico.rom - (i<<(24-FAMEC_FETCHBITS));
|
PicoCpuFM68k.Fetch[i] = (unsigned long)Pico.rom - (i<<(24-FAMEC_FETCHBITS));
|
||||||
// now real ROM (BIOS)
|
// now real ROM (BIOS)
|
||||||
for (i = 0; i < M68K_FETCHBANK1 && (i<<(24-FAMEC_FETCHBITS)) < Pico.romsize; i++)
|
for (i = 0; i < M68K_FETCHBANK1 && (i<<(24-FAMEC_FETCHBITS)) < Pico.romsize; i++)
|
||||||
PicoCpuFM68k.Fetch[i] = (unsigned int)Pico.rom;
|
PicoCpuFM68k.Fetch[i] = (unsigned long)Pico.rom;
|
||||||
// .. and RAM
|
// .. and RAM
|
||||||
for (i = M68K_FETCHBANK1*14/16; i < M68K_FETCHBANK1; i++)
|
for (i = M68K_FETCHBANK1*14/16; i < M68K_FETCHBANK1; i++)
|
||||||
PicoCpuFM68k.Fetch[i] = (unsigned int)Pico.ram - (i<<(24-FAMEC_FETCHBITS));
|
PicoCpuFM68k.Fetch[i] = (unsigned long)Pico.ram - (i<<(24-FAMEC_FETCHBITS));
|
||||||
// S68k
|
// S68k
|
||||||
// PRG RAM is default
|
// PRG RAM is default
|
||||||
for (i = 0; i < M68K_FETCHBANK1; i++)
|
for (i = 0; i < M68K_FETCHBANK1; i++)
|
||||||
PicoCpuFS68k.Fetch[i] = (unsigned int)Pico_mcd->prg_ram - (i<<(24-FAMEC_FETCHBITS));
|
PicoCpuFS68k.Fetch[i] = (unsigned long)Pico_mcd->prg_ram - (i<<(24-FAMEC_FETCHBITS));
|
||||||
// real PRG RAM
|
// real PRG RAM
|
||||||
for (i = 0; i < M68K_FETCHBANK1 && (i<<(24-FAMEC_FETCHBITS)) < 0x80000; i++)
|
for (i = 0; i < M68K_FETCHBANK1 && (i<<(24-FAMEC_FETCHBITS)) < 0x80000; i++)
|
||||||
PicoCpuFS68k.Fetch[i] = (unsigned int)Pico_mcd->prg_ram;
|
PicoCpuFS68k.Fetch[i] = (unsigned long)Pico_mcd->prg_ram;
|
||||||
// WORD RAM 2M area
|
// WORD RAM 2M area
|
||||||
for (i = M68K_FETCHBANK1*0x08/0x100; i < M68K_FETCHBANK1 && (i<<(24-FAMEC_FETCHBITS)) < 0xc0000; i++)
|
for (i = M68K_FETCHBANK1*0x08/0x100; i < M68K_FETCHBANK1 && (i<<(24-FAMEC_FETCHBITS)) < 0xc0000; i++)
|
||||||
PicoCpuFS68k.Fetch[i] = (unsigned int)Pico_mcd->word_ram2M - 0x80000;
|
PicoCpuFS68k.Fetch[i] = (unsigned long)Pico_mcd->word_ram2M - 0x80000;
|
||||||
// remap_word_ram() will setup word ram for both
|
// remap_word_ram() will setup word ram for both
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -726,13 +726,13 @@ PICO_INTERNAL void PicoMemSetup(void)
|
||||||
int i;
|
int i;
|
||||||
// by default, point everything to first 64k of ROM
|
// by default, point everything to first 64k of ROM
|
||||||
for (i = 0; i < M68K_FETCHBANK1; i++)
|
for (i = 0; i < M68K_FETCHBANK1; i++)
|
||||||
PicoCpuFM68k.Fetch[i] = (unsigned int)Pico.rom - (i<<(24-FAMEC_FETCHBITS));
|
PicoCpuFM68k.Fetch[i] = (unsigned long)Pico.rom - (i<<(24-FAMEC_FETCHBITS));
|
||||||
// now real ROM
|
// now real ROM
|
||||||
for (i = 0; i < M68K_FETCHBANK1 && (i<<(24-FAMEC_FETCHBITS)) < Pico.romsize; i++)
|
for (i = 0; i < M68K_FETCHBANK1 && (i<<(24-FAMEC_FETCHBITS)) < Pico.romsize; i++)
|
||||||
PicoCpuFM68k.Fetch[i] = (unsigned int)Pico.rom;
|
PicoCpuFM68k.Fetch[i] = (unsigned long)Pico.rom;
|
||||||
// .. and RAM
|
// .. and RAM
|
||||||
for (i = M68K_FETCHBANK1*14/16; i < M68K_FETCHBANK1; i++)
|
for (i = M68K_FETCHBANK1*14/16; i < M68K_FETCHBANK1; i++)
|
||||||
PicoCpuFM68k.Fetch[i] = (unsigned int)Pico.ram - (i<<(24-FAMEC_FETCHBITS));
|
PicoCpuFM68k.Fetch[i] = (unsigned long)Pico.ram - (i<<(24-FAMEC_FETCHBITS));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef EMU_M68K
|
#ifdef EMU_M68K
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue