mirror of
https://github.com/mupen64plus/mupen64plus-oldsvn.git
synced 2025-04-02 10:52:35 -04:00
-Changed name of cheat config file to cheats.cfg. File is now read in on startup and written out on exit. -Changed cheat config file format to the following: {Some Game's CRC} name=Some Game [Cheat Name 1] enabled=1 XXXXXXXX YYYY <-- cheat code (address, new value) XXXXXXXX YYYY XXXXXXXX YYYY [Cheat Name 2] enabled=0 XXXXXXXX YYYY XXXXXXXX YYYY XXXXXXXX YYYY {Another Game's CRC} name=Another Game ... Here's the cheats.cfg I used for testing: {635a2bff 8b022326} name=SUPER MARIO 64 [Super Mega Jumps] enabled=1 8133b176 0008 [Jesus Mode Mario] enabled=1 81381764 0800 81381766 0024 81000090 3c04 81000092 8034 81000094 8484 81000096 b1e6 81000098 4484 8100009a 3000 810000a0 4680 810000a2 3120 810000a4 4604 810000a6 903c 810000ac 4500 810000ae 0002 810000b4 4600 810000b6 2486 810000b8 080e 810000ba 05db 810000bc e712
433 lines
9.8 KiB
C
433 lines
9.8 KiB
C
/**
|
|
* Mupen64 - memory.h
|
|
* Copyright (C) 2002 Hacktarux
|
|
*
|
|
* Mupen64 homepage: http://mupen64.emulation64.com
|
|
* email address: hacktarux@yahoo.fr
|
|
*
|
|
* If you want to contribute to the project please contact
|
|
* me first (maybe someone is already making what you are
|
|
* planning to do).
|
|
*
|
|
*
|
|
* This program is free software; you can redistribute it and/
|
|
* or modify it under the terms of the GNU General Public Li-
|
|
* cence as published by the Free Software Foundation; either
|
|
* version 2 of the Licence, or any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be use-
|
|
* ful, but WITHOUT ANY WARRANTY; without even the implied war-
|
|
* ranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
* See the GNU General Public Licence for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public
|
|
* Licence along with this program; if not, write to the Free
|
|
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
|
|
* USA.
|
|
*
|
|
**/
|
|
|
|
#ifndef MEMORY_H
|
|
#define MEMORY_H
|
|
|
|
#include "tlb.h"
|
|
|
|
#ifdef __WIN32__
|
|
#define byte __byte_
|
|
#endif
|
|
|
|
int init_memory(int DoByteSwap);
|
|
void free_memory();
|
|
#define read_word_in_memory() readmem[address>>16]()
|
|
#define read_byte_in_memory() readmemb[address>>16]()
|
|
#define read_hword_in_memory() readmemh[address>>16]()
|
|
#define read_dword_in_memory() readmemd[address>>16]()
|
|
#define write_word_in_memory() writemem[address>>16]()
|
|
#define write_byte_in_memory() writememb[address >>16]()
|
|
#define write_hword_in_memory() writememh[address >>16]()
|
|
#define write_dword_in_memory() writememd[address >>16]()
|
|
extern unsigned int SP_DMEM[0x1000/4*2];
|
|
extern unsigned char *SP_DMEMb;
|
|
extern unsigned int *SP_IMEM;
|
|
extern unsigned int PIF_RAM[0x40/4];
|
|
extern unsigned char *PIF_RAMb;
|
|
extern unsigned int rdram[0x800000/4];
|
|
extern unsigned int address, word;
|
|
extern unsigned char byte;
|
|
extern unsigned short hword;
|
|
extern unsigned long long dword, *rdword;
|
|
|
|
extern void (*readmem[0xFFFF])();
|
|
extern void (*readmemb[0xFFFF])();
|
|
extern void (*readmemh[0xFFFF])();
|
|
extern void (*readmemd[0xFFFF])();
|
|
extern void (*writemem[0xFFFF])();
|
|
extern void (*writememb[0xFFFF])();
|
|
extern void (*writememh[0xFFFF])();
|
|
extern void (*writememd[0xFFFF])();
|
|
|
|
typedef struct _RDRAM_register
|
|
{
|
|
unsigned int rdram_config;
|
|
unsigned int rdram_device_id;
|
|
unsigned int rdram_delay;
|
|
unsigned int rdram_mode;
|
|
unsigned int rdram_ref_interval;
|
|
unsigned int rdram_ref_row;
|
|
unsigned int rdram_ras_interval;
|
|
unsigned int rdram_min_interval;
|
|
unsigned int rdram_addr_select;
|
|
unsigned int rdram_device_manuf;
|
|
} RDRAM_register;
|
|
|
|
typedef struct _SP_register
|
|
{
|
|
unsigned int sp_mem_addr_reg;
|
|
unsigned int sp_dram_addr_reg;
|
|
unsigned int sp_rd_len_reg;
|
|
unsigned int sp_wr_len_reg;
|
|
unsigned int w_sp_status_reg;
|
|
unsigned int sp_status_reg;
|
|
char halt;
|
|
char broke;
|
|
char dma_busy;
|
|
char dma_full;
|
|
char io_full;
|
|
char single_step;
|
|
char intr_break;
|
|
char signal0;
|
|
char signal1;
|
|
char signal2;
|
|
char signal3;
|
|
char signal4;
|
|
char signal5;
|
|
char signal6;
|
|
char signal7;
|
|
unsigned int sp_dma_full_reg;
|
|
unsigned int sp_dma_busy_reg;
|
|
unsigned int sp_semaphore_reg;
|
|
} SP_register;
|
|
|
|
typedef struct _RSP_register
|
|
{
|
|
unsigned int rsp_pc;
|
|
unsigned int rsp_ibist;
|
|
} RSP_register;
|
|
|
|
typedef struct _DPC_register
|
|
{
|
|
unsigned int dpc_start;
|
|
unsigned int dpc_end;
|
|
unsigned int dpc_current;
|
|
unsigned int w_dpc_status;
|
|
unsigned int dpc_status;
|
|
char xbus_dmem_dma;
|
|
char freeze;
|
|
char flush;
|
|
char start_glck;
|
|
char tmem_busy;
|
|
char pipe_busy;
|
|
char cmd_busy;
|
|
char cbuf_busy;
|
|
char dma_busy;
|
|
char end_valid;
|
|
char start_valid;
|
|
unsigned int dpc_clock;
|
|
unsigned int dpc_bufbusy;
|
|
unsigned int dpc_pipebusy;
|
|
unsigned int dpc_tmem;
|
|
} DPC_register;
|
|
|
|
typedef struct _DPS_register
|
|
{
|
|
unsigned int dps_tbist;
|
|
unsigned int dps_test_mode;
|
|
unsigned int dps_buftest_addr;
|
|
unsigned int dps_buftest_data;
|
|
} DPS_register;
|
|
|
|
typedef struct _mips_register
|
|
{
|
|
unsigned int w_mi_init_mode_reg;
|
|
unsigned int mi_init_mode_reg;
|
|
char init_length;
|
|
char init_mode;
|
|
char ebus_test_mode;
|
|
char RDRAM_reg_mode;
|
|
unsigned int mi_version_reg;
|
|
unsigned int mi_intr_reg;
|
|
unsigned int mi_intr_mask_reg;
|
|
unsigned int w_mi_intr_mask_reg;
|
|
char SP_intr_mask;
|
|
char SI_intr_mask;
|
|
char AI_intr_mask;
|
|
char VI_intr_mask;
|
|
char PI_intr_mask;
|
|
char DP_intr_mask;
|
|
} mips_register;
|
|
|
|
typedef struct _VI_register
|
|
{
|
|
unsigned int vi_status;
|
|
unsigned int vi_origin;
|
|
unsigned int vi_width;
|
|
unsigned int vi_v_intr;
|
|
unsigned int vi_current;
|
|
unsigned int vi_burst;
|
|
unsigned int vi_v_sync;
|
|
unsigned int vi_h_sync;
|
|
unsigned int vi_leap;
|
|
unsigned int vi_h_start;
|
|
unsigned int vi_v_start;
|
|
unsigned int vi_v_burst;
|
|
unsigned int vi_x_scale;
|
|
unsigned int vi_y_scale;
|
|
unsigned int vi_delay;
|
|
} VI_register;
|
|
|
|
typedef struct _AI_register
|
|
{
|
|
unsigned int ai_dram_addr;
|
|
unsigned int ai_len;
|
|
unsigned int ai_control;
|
|
unsigned int ai_status;
|
|
unsigned int ai_dacrate;
|
|
unsigned int ai_bitrate;
|
|
unsigned int next_delay;
|
|
unsigned int next_len;
|
|
unsigned int current_delay;
|
|
unsigned int current_len;
|
|
} AI_register;
|
|
|
|
typedef struct _PI_register
|
|
{
|
|
unsigned int pi_dram_addr_reg;
|
|
unsigned int pi_cart_addr_reg;
|
|
unsigned int pi_rd_len_reg;
|
|
unsigned int pi_wr_len_reg;
|
|
unsigned int read_pi_status_reg;
|
|
unsigned int pi_bsd_dom1_lat_reg;
|
|
unsigned int pi_bsd_dom1_pwd_reg;
|
|
unsigned int pi_bsd_dom1_pgs_reg;
|
|
unsigned int pi_bsd_dom1_rls_reg;
|
|
unsigned int pi_bsd_dom2_lat_reg;
|
|
unsigned int pi_bsd_dom2_pwd_reg;
|
|
unsigned int pi_bsd_dom2_pgs_reg;
|
|
unsigned int pi_bsd_dom2_rls_reg;
|
|
} PI_register;
|
|
|
|
typedef struct _RI_register
|
|
{
|
|
unsigned int ri_mode;
|
|
unsigned int ri_config;
|
|
unsigned int ri_current_load;
|
|
unsigned int ri_select;
|
|
unsigned int ri_refresh;
|
|
unsigned int ri_latency;
|
|
unsigned int ri_error;
|
|
unsigned int ri_werror;
|
|
} RI_register;
|
|
|
|
typedef struct _SI_register
|
|
{
|
|
unsigned int si_dram_addr;
|
|
unsigned int si_pif_addr_rd64b;
|
|
unsigned int si_pif_addr_wr64b;
|
|
unsigned int si_stat;
|
|
} SI_register;
|
|
|
|
extern RDRAM_register rdram_register;
|
|
extern PI_register pi_register;
|
|
extern mips_register MI_register;
|
|
extern SP_register sp_register;
|
|
extern SI_register si_register;
|
|
extern VI_register vi_register;
|
|
extern RSP_register rsp_register;
|
|
extern RI_register ri_register;
|
|
extern AI_register ai_register;
|
|
extern DPC_register dpc_register;
|
|
extern DPS_register dps_register;
|
|
|
|
extern unsigned char *rdramb;
|
|
|
|
#ifndef _BIG_ENDIAN
|
|
#define sl(mot) \
|
|
( \
|
|
((mot & 0x000000FF) << 24) | \
|
|
((mot & 0x0000FF00) << 8) | \
|
|
((mot & 0x00FF0000) >> 8) | \
|
|
((mot & 0xFF000000) >> 24) \
|
|
)
|
|
|
|
#define S8 3
|
|
#define S16 2
|
|
#define Sh16 1
|
|
|
|
#else
|
|
|
|
#define sl(mot) mot
|
|
#define S8 0
|
|
#define S16 0
|
|
#define Sh16 0
|
|
|
|
#endif
|
|
|
|
void read_nothing();
|
|
void read_nothingh();
|
|
void read_nothingb();
|
|
void read_nothingd();
|
|
void read_nomem();
|
|
void read_nomemb();
|
|
void read_nomemh();
|
|
void read_nomemd();
|
|
void read_rdram();
|
|
void read_rdramb();
|
|
void read_rdramh();
|
|
void read_rdramd();
|
|
void read_rdramFB();
|
|
void read_rdramFBb();
|
|
void read_rdramFBh();
|
|
void read_rdramFBd();
|
|
void read_rdramreg();
|
|
void read_rdramregb();
|
|
void read_rdramregh();
|
|
void read_rdramregd();
|
|
void read_rsp_mem();
|
|
void read_rsp_memb();
|
|
void read_rsp_memh();
|
|
void read_rsp_memd();
|
|
void read_rsp_reg();
|
|
void read_rsp_regb();
|
|
void read_rsp_regh();
|
|
void read_rsp_regd();
|
|
void read_rsp();
|
|
void read_rspb();
|
|
void read_rsph();
|
|
void read_rspd();
|
|
void read_dp();
|
|
void read_dpb();
|
|
void read_dph();
|
|
void read_dpd();
|
|
void read_dps();
|
|
void read_dpsb();
|
|
void read_dpsh();
|
|
void read_dpsd();
|
|
void read_mi();
|
|
void read_mib();
|
|
void read_mih();
|
|
void read_mid();
|
|
void read_vi();
|
|
void read_vib();
|
|
void read_vih();
|
|
void read_vid();
|
|
void read_ai();
|
|
void read_aib();
|
|
void read_aih();
|
|
void read_aid();
|
|
void read_pi();
|
|
void read_pib();
|
|
void read_pih();
|
|
void read_pid();
|
|
void read_ri();
|
|
void read_rib();
|
|
void read_rih();
|
|
void read_rid();
|
|
void read_si();
|
|
void read_sib();
|
|
void read_sih();
|
|
void read_sid();
|
|
void read_flashram_status();
|
|
void read_flashram_statusb();
|
|
void read_flashram_statush();
|
|
void read_flashram_statusd();
|
|
void read_rom();
|
|
void read_romb();
|
|
void read_romh();
|
|
void read_romd();
|
|
void read_pif();
|
|
void read_pifb();
|
|
void read_pifh();
|
|
void read_pifd();
|
|
|
|
void write_nothing();
|
|
void write_nothingb();
|
|
void write_nothingh();
|
|
void write_nothingd();
|
|
void write_nomem();
|
|
void write_nomemb();
|
|
void write_nomemd();
|
|
void write_nomemh();
|
|
void write_rdram();
|
|
void write_rdramb();
|
|
void write_rdramh();
|
|
void write_rdramd();
|
|
void write_rdramFB();
|
|
void write_rdramFBb();
|
|
void write_rdramFBh();
|
|
void write_rdramFBd();
|
|
void write_rdramreg();
|
|
void write_rdramregb();
|
|
void write_rdramregh();
|
|
void write_rdramregd();
|
|
void write_rsp_mem();
|
|
void write_rsp_memb();
|
|
void write_rsp_memh();
|
|
void write_rsp_memd();
|
|
void write_rsp_reg();
|
|
void write_rsp_regb();
|
|
void write_rsp_regh();
|
|
void write_rsp_regd();
|
|
void write_rsp();
|
|
void write_rspb();
|
|
void write_rsph();
|
|
void write_rspd();
|
|
void write_dp();
|
|
void write_dpb();
|
|
void write_dph();
|
|
void write_dpd();
|
|
void write_dps();
|
|
void write_dpsb();
|
|
void write_dpsh();
|
|
void write_dpsd();
|
|
void write_mi();
|
|
void write_mib();
|
|
void write_mih();
|
|
void write_mid();
|
|
void write_vi();
|
|
void write_vib();
|
|
void write_vih();
|
|
void write_vid();
|
|
void write_ai();
|
|
void write_aib();
|
|
void write_aih();
|
|
void write_aid();
|
|
void write_pi();
|
|
void write_pib();
|
|
void write_pih();
|
|
void write_pid();
|
|
void write_ri();
|
|
void write_rib();
|
|
void write_rih();
|
|
void write_rid();
|
|
void write_si();
|
|
void write_sib();
|
|
void write_sih();
|
|
void write_sid();
|
|
void write_flashram_dummy();
|
|
void write_flashram_dummyb();
|
|
void write_flashram_dummyh();
|
|
void write_flashram_dummyd();
|
|
void write_flashram_command();
|
|
void write_flashram_commandb();
|
|
void write_flashram_commandh();
|
|
void write_flashram_commandd();
|
|
void write_rom();
|
|
void write_pif();
|
|
void write_pifb();
|
|
void write_pifh();
|
|
void write_pifd();
|
|
|
|
void update_SP();
|
|
void update_DPC();
|
|
|
|
#endif
|