////////////////////////////////////////////////////////////////////////////////// // 本程序移植自网友ye781205的NES模拟器工程 // ALIENTEK STM32F407开发板 // NES主函数 代码 // 正点原子@ALIENTEK // 技术论坛:www.openedv.com // 创建日期:2014/7/1 // 版本:V1.0 ////////////////////////////////////////////////////////////////////////////////// #ifndef __NES_MAIN_H #define __NES_MAIN_H #include "stdint.h" #define NES_SKIP_FRAME 2 // 定义模拟器跳帧数,默认跳2帧 #define INLINE static inline #define boolean uint8_t // 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 uint8_t 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 uint8_t cpunmi; // cpu中断标志 在 6502.s里面 extern uint8_t cpuirq; extern uint8_t PADdata; // 手柄1键值 extern uint8_t PADdata1; // 手柄1键值 extern uint8_t lianan_biao; // 连按标志 #define CPU_NMI cpunmi = 1; #define CPU_IRQ cpuirq = 1; #define NES_RAM_SPEED 0 // 1:内存占用小 0:速度快 // 使用文件名来打开游戏 uint8_t nes_load(uint8_t *pname, void *lcd_addr, int x, int y); // 运行已经加载在内存中的游戏 uint8_t nes_start(uint8_t *file, int fileSize, void *lcd_addr, int x, int y); void cpu6502_init(void); // 在 cart.s void run6502(uint32_t); // 在 6502.s uint8_t nes_load_rom(void); void nes_sram_free(void); uint8_t nes_sram_malloc(uint32_t romsize); void nes_set_window(void); void nes_get_gamepadval(void); void nes_emulate_frame(void); void debug_6502(uint16_t reg0, uint8_t 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, uint16_t *wavebuf); #endif