improve 64bit portability

for win64 mostly
This commit is contained in:
notaz 2018-01-06 21:29:59 +02:00
parent a0b95da112
commit 48c9e01be8
14 changed files with 42 additions and 26 deletions

View file

@ -11,6 +11,12 @@
#ifndef CZ80_H #ifndef CZ80_H
#define CZ80_H #define CZ80_H
// uintptr_t
#include <stdlib.h>
#ifndef _MSC_VER
#include <stdint.h>
#endif
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
@ -44,7 +50,7 @@ extern "C" {
#endif #endif
#ifndef FPTR #ifndef FPTR
#define FPTR unsigned long #define FPTR uintptr_t
#endif #endif
/*************************************/ /*************************************/

View file

@ -73,7 +73,7 @@
#define WRITE_MEM8(A, D) { \ #define WRITE_MEM8(A, D) { \
unsigned short a = A; \ unsigned short a = A; \
unsigned char d = D; \ unsigned char d = D; \
unsigned long v = z80_write_map[a >> Z80_MEM_SHIFT]; \ uptr v = z80_write_map[a >> Z80_MEM_SHIFT]; \
if (map_flag_set(v)) \ if (map_flag_set(v)) \
((z80_write_f *)(v << 1))(a, d); \ ((z80_write_f *)(v << 1))(a, d); \
else \ else \

View file

@ -9,6 +9,12 @@
#ifndef __FAME_H__ #ifndef __FAME_H__
#define __FAME_H__ #define __FAME_H__
// uintptr_t
#include <stdlib.h>
#ifndef _MSC_VER
#include <stdint.h>
#endif
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
@ -127,7 +133,7 @@ typedef struct
signed int cycles_needed; signed int cycles_needed;
unsigned short *PC; unsigned short *PC;
unsigned long BasePC; uintptr_t BasePC;
unsigned int flag_C; unsigned int flag_C;
unsigned int flag_V; unsigned int flag_V;
unsigned int flag_NotZ; unsigned int flag_NotZ;
@ -140,7 +146,7 @@ typedef struct
unsigned char not_polling; unsigned char not_polling;
unsigned char pad[3]; unsigned char pad[3];
unsigned long Fetch[M68K_FETCHBANK1]; uintptr_t Fetch[M68K_FETCHBANK1];
} M68K_CONTEXT; } M68K_CONTEXT;
typedef enum typedef enum

View file

@ -94,7 +94,7 @@
#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 #define uptr uintptr_t
/* /*
typedef unsigned char u8; typedef unsigned char u8;

View file

@ -142,6 +142,7 @@
/* Exception Vectors handled by emulation */ /* Exception Vectors handled by emulation */
#define EXCEPTION_BUS_ERROR 2 /* This one is not emulated! */ #define EXCEPTION_BUS_ERROR 2 /* This one is not emulated! */
#define EXCEPTION_ADDRESS_ERROR 3 /* This one is partially emulated (doesn't stack a proper frame yet) */ #define EXCEPTION_ADDRESS_ERROR 3 /* This one is partially emulated (doesn't stack a proper frame yet) */
#undef EXCEPTION_ILLEGAL_INSTRUCTION
#define EXCEPTION_ILLEGAL_INSTRUCTION 4 #define EXCEPTION_ILLEGAL_INSTRUCTION 4
#define EXCEPTION_ZERO_DIVIDE 5 #define EXCEPTION_ZERO_DIVIDE 5
#define EXCEPTION_CHK 6 #define EXCEPTION_CHK 6

View file

@ -58,7 +58,7 @@ static void convert_pal555(int invert_prio)
unsigned short t; \ unsigned short t; \
int i; \ int i; \
for (i = 320; i > 0; i--, pd++, p32x++, pmd++) { \ for (i = 320; i > 0; i--, pd++, p32x++, pmd++) { \
t = pal[*(unsigned char *)((long)p32x ^ 1)]; \ t = pal[*(unsigned char *)((uintptr_t)p32x ^ 1)]; \
if ((t & 0x20) || (*pmd & 0x3f) == mdbg) \ if ((t & 0x20) || (*pmd & 0x3f) == mdbg) \
*pd = t; \ *pd = t; \
else \ else \

View file

@ -1786,9 +1786,9 @@ void PicoMemSetup32x(void)
cpu68k_map_set(m68k_write16_map, 0x880000, 0x880000 + rs - 1, PicoWrite16_cart, 1); cpu68k_map_set(m68k_write16_map, 0x880000, 0x880000 + rs - 1, PicoWrite16_cart, 1);
#ifdef EMU_F68K #ifdef EMU_F68K
// setup FAME fetchmap // setup FAME fetchmap
PicoCpuFM68k.Fetch[0] = (unsigned long)Pico32xMem->m68k_rom; PicoCpuFM68k.Fetch[0] = (uptr)Pico32xMem->m68k_rom;
for (rs = 0x88; rs < 0x90; rs++) for (rs = 0x88; rs < 0x90; rs++)
PicoCpuFM68k.Fetch[rs] = (unsigned long)Pico.rom - 0x880000; PicoCpuFM68k.Fetch[rs] = (uptr)Pico.rom - 0x880000;
#endif #endif
// 32X ROM (banked) // 32X ROM (banked)

View file

@ -1168,29 +1168,29 @@ PICO_INTERNAL void PicoMemSetupCD(void)
#ifdef __clang__ #ifdef __clang__
volatile // prevent strange relocs from clang volatile // prevent strange relocs from clang
#endif #endif
unsigned long ptr_ram = (unsigned long)PicoMem.ram; unsigned long ptr_ram = (uptr)PicoMem.ram;
int i; int i;
// 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 long)Pico.rom - (i<<(24-FAMEC_FETCHBITS)); PicoCpuFM68k.Fetch[i] = (uptr)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 long)Pico.rom; PicoCpuFM68k.Fetch[i] = (uptr)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] = ptr_ram - (i<<(24-FAMEC_FETCHBITS)); PicoCpuFM68k.Fetch[i] = ptr_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 long)Pico_mcd->prg_ram - (i<<(24-FAMEC_FETCHBITS)); PicoCpuFS68k.Fetch[i] = (uptr)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 long)Pico_mcd->prg_ram; PicoCpuFS68k.Fetch[i] = (uptr)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 long)Pico_mcd->word_ram2M - 0x80000; PicoCpuFS68k.Fetch[i] = (uptr)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

View file

@ -832,10 +832,10 @@ 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 * 0xe0 / 0x100; i++) for (i = 0; i < M68K_FETCHBANK1 * 0xe0 / 0x100; i++)
PicoCpuFM68k.Fetch[i] = (unsigned long)Pico.rom - (i<<(24-FAMEC_FETCHBITS)); PicoCpuFM68k.Fetch[i] = (uptr)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 long)Pico.rom; PicoCpuFM68k.Fetch[i] = (uptr)Pico.rom;
// RAM already set // RAM already set
} }
#endif #endif

View file

@ -1,9 +1,11 @@
// memory map related stuff // memory map related stuff
#include "pico_port.h"
typedef unsigned char u8; typedef unsigned char u8;
typedef unsigned short u16; typedef unsigned short u16;
typedef unsigned int u32; typedef unsigned int u32;
typedef unsigned long uptr; // unsigned pointer-sized int typedef uintptr_t uptr; // unsigned pointer-sized int
#define M68K_MEM_SHIFT 16 #define M68K_MEM_SHIFT 16
// minimum size we can map // minimum size we can map

View file

@ -11,7 +11,6 @@
#define PICO_INTERNAL_INCLUDED #define PICO_INTERNAL_INCLUDED
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include "pico_port.h" #include "pico_port.h"
#include "pico.h" #include "pico.h"

View file

@ -1,6 +1,12 @@
#ifndef PICO_PORT_INCLUDED #ifndef PICO_PORT_INCLUDED
#define PICO_PORT_INCLUDED #define PICO_PORT_INCLUDED
// provide size_t, uintptr_t
#include <stdlib.h>
#if !(defined(_MSC_VER) && _MSC_VER < 1800)
#include <stdint.h>
#endif
#if defined(__GNUC__) && defined(__i386__) #if defined(__GNUC__) && defined(__i386__)
#define REGPARM(x) __attribute__((regparm(x))) #define REGPARM(x) __attribute__((regparm(x)))
#else #else

View file

@ -265,7 +265,7 @@ PICO_INTERNAL void PsndClear(void)
memset32((int *) PicoIn.sndOut, 0, len); // assume PicoIn.sndOut to be aligned memset32((int *) PicoIn.sndOut, 0, len); // assume PicoIn.sndOut to be aligned
else { else {
short *out = PicoIn.sndOut; short *out = PicoIn.sndOut;
if ((long)out & 2) { *out++ = 0; len--; } if ((uintptr_t)out & 2) { *out++ = 0; len--; }
memset32((int *) out, 0, len/2); memset32((int *) out, 0, len/2);
if (len & 1) out[len-1] = 0; if (len & 1) out[len-1] = 0;
} }

View file

@ -79,11 +79,7 @@ static void *vout_buf;
static int vout_width, vout_height, vout_offset; static int vout_width, vout_height, vout_offset;
static float user_vout_width = 0.0; static float user_vout_width = 0.0;
#ifdef _MSC_VER static short ALIGNED(4) sndBuffer[2*44100/50];
static short sndBuffer[2*44100/50];
#else
static short __attribute__((aligned(4))) sndBuffer[2*44100/50];
#endif
static void snd_write(int len); static void snd_write(int len);
@ -375,7 +371,7 @@ void *plat_mmap(unsigned long addr, size_t size, int need_exec, int is_fixed)
int flags = MAP_PRIVATE | MAP_ANONYMOUS; int flags = MAP_PRIVATE | MAP_ANONYMOUS;
void *req, *ret; void *req, *ret;
req = (void *)addr; req = (void *)(uintptr_t)addr;
ret = mmap(req, size, PROT_READ | PROT_WRITE, flags, -1, 0); ret = mmap(req, size, PROT_READ | PROT_WRITE, flags, -1, 0);
if (ret == MAP_FAILED) { if (ret == MAP_FAILED) {
if (log_cb) if (log_cb)
@ -383,7 +379,7 @@ void *plat_mmap(unsigned long addr, size_t size, int need_exec, int is_fixed)
return NULL; return NULL;
} }
if (addr != 0 && ret != (void *)addr) { if (addr != 0 && ret != (void *)(uintptr_t)addr) {
if (log_cb) if (log_cb)
log_cb(RETRO_LOG_WARN, "warning: wanted to map @%08lx, got %p\n", log_cb(RETRO_LOG_WARN, "warning: wanted to map @%08lx, got %p\n",
addr, ret); addr, ret);