⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpu.h

📁 psp上的GBA模拟器
💻 H
字号:
/* gameplaySP * * Copyright (C) 2006 Exophase <exophase@gmail.com> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */#ifndef CPU_H#define CPU_H// System mode and user mode are represented as the same heretypedef enum{  MODE_USER,  MODE_IRQ,  MODE_FIQ,  MODE_SUPERVISOR,  MODE_ABORT,  MODE_UNDEFINED,  MODE_INVALID} cpu_mode_type;typedef enum{  CPU_ALERT_NONE,  CPU_ALERT_HALT,  CPU_ALERT_SMC,  CPU_ALERT_IRQ} cpu_alert_type;typedef enum{  CPU_ACTIVE,  CPU_HALT,  CPU_STOP} cpu_halt_type;typedef enum{  IRQ_NONE = 0x0000,  IRQ_VBLANK = 0x0001,  IRQ_HBLANK = 0x0002,  IRQ_VCOUNT = 0x0004,  IRQ_TIMER0 = 0x0008,  IRQ_TIMER1 = 0x0010,  IRQ_TIMER2 = 0x0020,  IRQ_TIMER3 = 0x0040,  IRQ_SERIAL = 0x0080,  IRQ_DMA0 = 0x0100,  IRQ_DMA1 = 0x0200,  IRQ_DMA2 = 0x0400,  IRQ_DMA3 = 0x0800,  IRQ_KEYPAD = 0x1000,  IRQ_GAMEPAK = 0x2000,} irq_type;typedef enum{  REG_SP            = 13,  REG_LR            = 14,  REG_PC            = 15,  REG_N_FLAG        = 16,  REG_Z_FLAG        = 17,  REG_C_FLAG        = 18,  REG_V_FLAG        = 19,  REG_CPSR          = 20,  REG_SAVE          = 21,  REG_SAVE2         = 22,  REG_SAVE3         = 23,  CPU_MODE          = 29,  CPU_HALT_STATE    = 30,  CHANGED_PC_STATUS = 31} ext_reg_numbers;typedef enum{  STEP,  PC_BREAKPOINT,  VCOUNT_BREAKPOINT,  Z_BREAKPOINT,  COUNTDOWN_BREAKPOINT,  COUNTDOWN_BREAKPOINT_B,  STEP_RUN,  RUN} debug_state;typedef enum{  TRANSLATION_REGION_RAM,  TRANSLATION_REGION_ROM,  TRANSLATION_REGION_BIOS} translation_region_type;extern debug_state current_debug_state;extern u32 instruction_count;extern u32 last_instruction;u32 function_cc step_debug(u32 pc, u32 cycles);u32 execute_arm(u32 cycles);void raise_interrupt(irq_type irq_raised);u32 function_cc execute_load_u8(u32 address);u32 function_cc execute_load_u16(u32 address);u32 function_cc execute_load_u32(u32 address);u32 function_cc execute_load_s8(u32 address);u32 function_cc execute_load_s16(u32 address);void function_cc execute_store_u8(u32 address, u32 source);void function_cc execute_store_u16(u32 address, u32 source);void function_cc execute_store_u32(u32 address, u32 source);void function_cc execute_store_u8_no_smc(u32 address, u32 source);void function_cc execute_store_u16_no_smc(u32 address, u32 source);void function_cc execute_store_u32_no_smc(u32 address, u32 source);u32 function_cc execute_arm_translate(u32 cycles);void init_translater();void cpu_write_mem_savestate(file_tag_type savestate_file);void cpu_read_savestate(file_tag_type savestate_file);u8 function_cc *block_lookup_address_arm(u32 pc);u8 function_cc *block_lookup_address_thumb(u32 pc);s32 translate_block_arm(u32 pc, translation_region_type translation_region, u32 smc_enable);s32 translate_block_thumb(u32 pc, translation_region_type translation_region, u32 smc_enable);#define ROM_TRANSLATION_CACHE_SIZE (1024 * 512 * 4)#define RAM_TRANSLATION_CACHE_SIZE (1024 * 384)#define BIOS_TRANSLATION_CACHE_SIZE (1024 * 128)#define TRANSLATION_CACHE_LIMIT_THRESHOLD (1024)extern u8 rom_translation_cache[ROM_TRANSLATION_CACHE_SIZE];extern u8 ram_translation_cache[RAM_TRANSLATION_CACHE_SIZE];extern u8 bios_translation_cache[BIOS_TRANSLATION_CACHE_SIZE];extern u8 *rom_translation_ptr;extern u8 *ram_translation_ptr;extern u8 *bios_translation_ptr;#define MAX_TRANSLATION_GATES 8extern u32 idle_loop_target_pc;extern u32 force_pc_update_target;extern u32 iwram_stack_optimize;extern u32 allow_smc_ram_u8;extern u32 allow_smc_ram_u16;extern u32 allow_smc_ram_u32;extern u32 direct_map_vram;extern u32 translation_gate_targets;extern u32 translation_gate_target_pc[MAX_TRANSLATION_GATES];#define ROM_BRANCH_HASH_SIZE (1024 * 64)u32 *rom_branch_hash[ROM_BRANCH_HASH_SIZE];void flush_translation_cache_rom();void flush_translation_cache_ram();void flush_translation_cache_bios();void dump_translation_cache();extern u32 reg_mode[7][7];extern u32 spsr[6];extern cpu_mode_type cpu_mode;extern cpu_halt_type cpu_halt;extern u32 cpu_modes[32];extern const u32 psr_masks[16];extern u32 breakpoint_value;extern u32 memory_region_access_read_u8[16];extern u32 memory_region_access_read_s8[16];extern u32 memory_region_access_read_u16[16];extern u32 memory_region_access_read_s16[16];extern u32 memory_region_access_read_u32[16];extern u32 memory_region_access_write_u8[16];extern u32 memory_region_access_write_u16[16];extern u32 memory_region_access_write_u32[16];extern u32 memory_reads_u8;extern u32 memory_reads_s8;extern u32 memory_reads_u16;extern u32 memory_reads_s16;extern u32 memory_reads_u32;extern u32 memory_writes_u8;extern u32 memory_writes_u16;extern u32 memory_writes_u32;#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -