Files
player/Project/Src/NES/nes_main.h

86 lines
2.1 KiB
C
Raw Normal View History

2025-06-27 00:32:57 +08:00
#ifndef __NES_MAIN_H
#define __NES_MAIN_H
//////////////////////////////////////////////////////////////////////////////////
//本程序移植自网友ye781205的NES模拟器工程
//ALIENTEK STM32F407开发板
//NES主函数 代码
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//创建日期:2014/7/1
//版本V1.0
//////////////////////////////////////////////////////////////////////////////////
#define NES_SKIP_FRAME 2 //定义模拟器跳帧数,默认跳2帧
#define INLINE static inline
#define int8 char
#define int16 short
#define int32 int
#define uint8 unsigned char
#define uint16 unsigned short
#define uint32 unsigned int
#define boolean uint8
//nes信息头结构体
typedef struct
{
unsigned char id[3]; // 'NES'
unsigned char ctrl_z; // control-z
unsigned char num_16k_rom_banks;
unsigned char num_8k_vrom_banks;
unsigned char flags_1;
unsigned char flags_2;
unsigned char reserved[8];
}NES_header;
extern u8 nes_frame_cnt; //nes帧计数器
extern int MapperNo; //map编号
extern int NES_scanline; //扫描线
extern NES_header *RomHeader; //rom文件头
extern int VROM_1K_SIZE;
extern int VROM_8K_SIZE;
extern u8 cpunmi; //cpu中断标志 在 6502.s里面
extern u8 cpuirq;
extern u8 PADdata; //手柄1键值
extern u8 PADdata1; //手柄1键值
extern u8 lianan_biao; //连按标志
#define CPU_NMI cpunmi=1;
#define CPU_IRQ cpuirq=1;
#define NES_RAM_SPEED 0 //1:内存占用小 0:速度快
//使用文件名来打开游戏
u8 nes_load(u8* pname,void *lcd_addr,int x,int y);
//运行已经加载在内存中的游戏
u8 nes_start(u8* file,int fileSize,void *lcd_addr,int x,int y);
void cpu6502_init(void); //在 cart.s
void run6502(u32); //在 6502.s
u8 nes_load_rom(void);
void nes_sram_free(void);
u8 nes_sram_malloc(u32 romsize);
void nes_set_window(void);
void nes_get_gamepadval(void);
void nes_emulate_frame(void);
void debug_6502(u16 reg0,u8 reg1);
void nes_i2s_dma_tx_callback(void);
int nes_sound_open(int samples_per_sync,int sample_rate);
void nes_sound_close(void);
void nes_apu_fill_buffer(int samples,u16* wavebuf);
#endif