123 lines
3.3 KiB
C
123 lines
3.3 KiB
C
|
#ifndef __NES_MAPPER_H
|
|||
|
#define __NES_MAPPER_H
|
|||
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
//本程序移植自网友ye781205的NES模拟器工程
|
|||
|
//ALIENTEK STM32F407开发板
|
|||
|
//NES MAP 驱动代码
|
|||
|
//正点原子@ALIENTEK
|
|||
|
//技术论坛:www.openedv.com
|
|||
|
//创建日期:2014/7/1
|
|||
|
//版本:V1.0
|
|||
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
#ifndef uint16
|
|||
|
#define uint16 u16
|
|||
|
#define uint8 u8
|
|||
|
#define uint32 u32
|
|||
|
#endif
|
|||
|
|
|||
|
#define num_8k_ROM_banks VROM_8K_SIZE
|
|||
|
#define num_1k_VROM_banks VROM_1K_SIZE
|
|||
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
void (*Reset)();
|
|||
|
void (*Write)( uint16 addr,uint8 data);
|
|||
|
void (*Read)( uint8 data,uint16 addr);
|
|||
|
uint8 (*ReadLow)( uint16 addr);
|
|||
|
void (*WriteLow)(uint16 addr,uint8 data);
|
|||
|
void (*HSync)( int scanline);
|
|||
|
void (*VSync)(void);
|
|||
|
} MAPPER;
|
|||
|
///////////////////////////////////////////////////////////////
|
|||
|
typedef enum
|
|||
|
{
|
|||
|
MMC1_SMALL,
|
|||
|
MMC1_512K,
|
|||
|
MMC1_1024K
|
|||
|
}MMC1_Size_t;
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
uint32 write_count;
|
|||
|
uint8 bits;
|
|||
|
uint8 regs[4];
|
|||
|
uint32 last_write_addr;
|
|||
|
|
|||
|
MMC1_Size_t MMC1_Size;
|
|||
|
uint32 MMC1_256K_base;
|
|||
|
uint32 MMC1_swap;
|
|||
|
|
|||
|
// these are the 4 ROM banks currently selected
|
|||
|
uint32 MMC1_bank1;
|
|||
|
uint32 MMC1_bank2;
|
|||
|
uint32 MMC1_bank3;
|
|||
|
uint32 MMC1_bank4;
|
|||
|
|
|||
|
uint32 MMC1_HI1;
|
|||
|
uint32 MMC1_HI2;
|
|||
|
}Mapper1Res;
|
|||
|
|
|||
|
//通用map变量结构体
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
uint8 patch;
|
|||
|
uint8 regs[11];
|
|||
|
|
|||
|
uint32 prg0,prg1;
|
|||
|
uint32 chr01,chr23,chr4,chr5,chr6,chr7;
|
|||
|
|
|||
|
uint8 irq_enabled; // IRQs enabled
|
|||
|
uint32 irq_counter; // IRQ scanline counter, decreasing
|
|||
|
uint32 irq_latch; // IRQ scanline counter latch
|
|||
|
}MapperCommRes;
|
|||
|
|
|||
|
extern uint32 ROM_mask;
|
|||
|
extern uint32 VROM_mask;
|
|||
|
extern const int MapTab[];
|
|||
|
extern MAPPER *NES_Mapper;
|
|||
|
extern uint32 VROM_mask;
|
|||
|
|
|||
|
extern Mapper1Res *MAP1;
|
|||
|
extern MapperCommRes *MAPx;
|
|||
|
|
|||
|
|
|||
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
void Mapper_Init(void);
|
|||
|
void asm_Mapper_Write(uint8 byData,uint16 wAddr);
|
|||
|
void asm_Mapper_ReadLow( uint16 wAddr);
|
|||
|
void asm_Mapper_WriteLow( uint8 byData ,uint16 wAddr);
|
|||
|
|
|||
|
void map67_(signed char page); //6502.s
|
|||
|
void map89_(signed char page);
|
|||
|
void mapAB_(signed char page);
|
|||
|
void mapCD_(signed char page);
|
|||
|
void mapEF_(signed char page);//有符号字符
|
|||
|
|
|||
|
void set_CPU_bank3(signed char page );
|
|||
|
void set_CPU_bank4(signed char page );
|
|||
|
void set_CPU_bank5(signed char page );
|
|||
|
void set_CPU_bank6(signed char page );
|
|||
|
void set_CPU_bank7(signed char page );
|
|||
|
void set_CPU_banks(int bank0_num,int bank1_num,int bank2_num, int bank3_num);
|
|||
|
|
|||
|
void set_PPU_banks( uint32 bank0_num, uint32 bank1_num,
|
|||
|
uint32 bank2_num, uint32 bank3_num,
|
|||
|
uint32 bank4_num, uint32 bank5_num,
|
|||
|
uint32 bank6_num, uint32 bank7_num);
|
|||
|
void set_PPU_bank0(uint32 bank_num);
|
|||
|
void set_PPU_bank1(uint32 bank_num);
|
|||
|
void set_PPU_bank2(uint32 bank_num);
|
|||
|
void set_PPU_bank3(uint32 bank_num);
|
|||
|
void set_PPU_bank4(uint32 bank_num);
|
|||
|
void set_PPU_bank5(uint32 bank_num);
|
|||
|
void set_PPU_bank6(uint32 bank_num);
|
|||
|
void set_PPU_bank7(uint32 bank_num);
|
|||
|
void set_PPU_bank8(uint32 bank_num);
|
|||
|
void set_PPU_bank9(uint32 bank_num);
|
|||
|
void set_PPU_bank10(uint32 bank_num);
|
|||
|
void set_PPU_bank11(uint32 bank_num);
|
|||
|
void set_VRAM_bank(uint8 bank, uint32 bank_num);
|
|||
|
|
|||
|
|
|||
|
#endif
|