www.pudn.com > ncdzsrc.rar > memintrf.h
/***************************************************************************
memintrf.c
メモリインターフェース及びM68000用メモリアクセス関数
***************************************************************************/
#ifndef MEMINTRF_H
#define MEMINTRF_H
/*------------------------------------------------------
メモリインターフェース
-----------------------------------------------------*/
#define MAX_MEMORY_REGIONS 16
typedef UINT32 offs_t;
enum
{
REGION_INVALID = 0xff,
REGION_CPU1 = 0,
REGION_CPU2,
REGION_GFX1,
REGION_GFX2,
REGION_GFX3,
REGION_GFX4,
#if ENABLE_SYSTEM_CHECK
REGION_GFX5,
REGION_GFX6,
#endif
REGION_SOUND1,
REGION_USER1,
REGION_USER2,
REGION_USER3,
REGION_MAX
};
typedef struct RegionInfo
{
UINT8 *base;
size_t length;
UINT32 type;
UINT32 flags;
} MEMREGION;
/*------------------------------------------------------
メモリインターフェース用関数
-----------------------------------------------------*/
int memory_region_init(void);
void memory_region_shutdown(void);
int memory_init(void);
void memory_shutdown(void);
UINT8 *memory_region(int region_type);
size_t memory_region_length(int region_type);
/*------------------------------------------------------
M68000メモリアクセス
-----------------------------------------------------*/
extern UINT8 *m68k_rombase;
extern UINT8 *m68k_rambase;
extern UINT8 *opcode_base;
extern UINT8 *opcode_rambase;
extern UINT8 *opcode_entry;
#define READ8_HANDLER(name) UINT8 name(offs_t offset)
#define WRITE8_HANDLER(name) void name(offs_t offset, UINT8 data)
#define READ16_HANDLER(name) UINT16 name(offs_t offset, UINT16 mem_mask)
#define WRITE16_HANDLER(name) void name(offs_t offset, UINT16 data, UINT16 mem_mask)
#define READ32_HANDLER(name) UINT32 name(offs_t offset)
#define WRITE32_HANDLER(name) void name(offs_t offset, UINT32 data)
/* ----- 16/32-bit memory accessing ----- */
#define COMBINE_DATA(varptr) (*(varptr) = (*(varptr) & mem_mask) | (data & ~mem_mask))
#define COMBINE_SWABDATA(varptr) (*(varptr) = (*(varptr) & (mem_mask << 8)) | (data & ~(mem_mask >> 8)))
/* ----- 16-bit memory accessing ----- */
#define ACCESSING_LSB16 ((mem_mask & 0x00ff) == 0)
#define ACCESSING_MSB16 ((mem_mask & 0xff00) == 0)
#define ACCESSING_LSB ACCESSING_LSB16
#define ACCESSING_MSB ACCESSING_MSB16
#define MEM_END -1
#define MEM_BAD 0
#define MEM_ROM 1
#define MEM_RAM 2
#define MEM_NOP 3
#define MEM_MAP 4
typedef struct readmem_t
{
int type;
offs_t start;
offs_t end;
UINT16 (*func)(offs_t offset, UINT16 mem_mask);
} READMEM;
typedef struct writemem_t
{
int type;
offs_t start;
offs_t end;
void (*func)(offs_t offset, UINT16 data, UINT16 mem_mask);
} WRITEMEM;
/*------------------------------------------------------
M68000メモリアクセス用関数
-----------------------------------------------------*/
void initialize_memmap(void);
UINT8 __cdecl m68000_read_memory_8(offs_t offset);
UINT16 __cdecl m68000_read_memory_16(offs_t offset);
UINT32 __cdecl m68000_read_memory_32(offs_t offset);
void __cdecl m68000_write_memory_8(offs_t offset, UINT8 data);
void __cdecl m68000_write_memory_16(offs_t offset, UINT16 data);
void __cdecl m68000_write_memory_32(offs_t offset, UINT32 data);
void __cdecl m68000_setopbase(offs_t offset);
extern int m68000_read_memory_8_debug(int offset);
extern int m68000_read_memory_16_debug(int offset);
extern int m68000_read_memory_32_debug(int offset);
#endif /* MEMINTRF_H */