git-svn-id: https://localhost/svn/Project64/trunk@31 111125ac-702d-7242-af9c-5ba8ae61c1ef

This commit is contained in:
zilmar 2010-05-31 00:21:08 +00:00
parent ce1ff4d421
commit 8624a415b9
69 changed files with 3327 additions and 4986 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

View File

@ -1,7 +0,0 @@
This plugin requires:
- 1-4 genine Adaptoid(s) hardware accessories by Wishtech, http://www.wishtech.com
- real N64 hardware accessories ('Paks')
- the Wishtech drivers installed - standard Microsoft USB drivers are not adequate.
You do not _have_ to use this plugin if you have an Adaptoid, you can use any input plugin.

View File

@ -1,92 +0,0 @@
N-Rage's Input Plugin
Release Version 1.82a
Disclaimer:
Im not responsible for any Damage caused by this Programm!
This Programm is Freeware, its freely distributable, but it must be distributed as whole unmodified Zip-Archive.
U aren't allowed to earn money by distributing it.
The use of this Plugin
This Plugin is for use with a N64-Emulator that supports InputPlugins and Zilmars Spec.
Some Emulators that support it are: Project64, Apollo, 1964, TR64
Main Features
Up to four Players
Up to four GamePads, 1 Keyboard and 1 Mouse can be handled at once
Full support of Buttons, POVs, Sliders, Axes, Mouse, Keyboard
Emulating Mem-Paks and Rumble-Paks(via ForceFeedBack)
Direct Adaptoid Support
up to 256 Configurable Modifiers, with 3 different Types
System-independent Controller-Profiles
This Plugin is compatible to Zilmar's Input-Plugin Specs 1.0 and will work with all Emulators that support this Spec
Requirements:
A computer with Windows & DirectX8.0 or higher installed.
A Emulator wouldnt be a bad thing too.
Thanks go out to
Azimer for his help with MemPaks
Zilmar & Jabo for their awesome Project64.
Smiff, Bodie, Cyber, Hotshitu, Gannonboy for testing.
MadManMark for adding Transferpaks
Known Issues:
Old Profiles wont work, this is by purpose.
#---------------------------------------------------------------------#
History:
Release 1.82a:
Fixed: Correct handling POV Controls again.. DOH
Release 1.82:
Added: Transferpak-Emulation - done by MadManMark, so hes the one to thank for this.
Changed: Various cleanups&optimizations, recompiled with VC++ 7.0
Release 1.81a:
Fixed a bug introduced by the last version.
Release 1.81:
Added: Default Profile & default Shortcuts.
Changed: can now open read-only Files, some old & unecessary checks removed
Interface tweaked a bit.
Release 1.80:
Fixed: another Access Violation, crash within Rumble emulation
Added: MouseLock Shortcut
Changed: Code-Cleanups, "save" and "use" Buttons instead of "Ok"
Beta 1.79:
Fixed: Access Violations
Added: saving/loading Profiles, visual Rumble, DexDrive support
Beta 1.78:
Added: MemPak Manager Functions, 2 switchable Analog Stick settings, Config Modifier, absolute KeyBoard setting
Changed: KeyBoard & Mouse Handling
Beta 1.76:
Only a small Part is based on older Plugins, new gui, new features.
New: Direct Adaptoid support, up to 256 Modifiers, different Rumble settings, Shortcuts
Missing: saving/loading Profiles, Config Modifier, alternate Controlset
Changed: about everything else ;)
Release 1.61:
Fixed: a small MemPak issue( Perfect Dark )
Release 1.60:
Fixed: crashes in Config-Dialog, crashes when a used GamePad isnt available, Toggle-Modifiers now get reset each time a rom is loaded or the configuration changed, now games that reported "no Controller" in RAW Mode will work, multiple Controllers of the same name now get enumerated and detected right.
Changes: Mouse-Axis can now be assigned by moving it. Now all Devices are scaned at once in Config-Window. "Default Axe-Movement" is now replaced by "Default Analog-Stick Range", which means it sets maximum range of the virtual Stick.
Added seperate X/Y Modes for Mouse
Beta 1.53: Fixed yet more Bugs. Changed Profile-Format, old Profiles wont work( The new Format leaves some Space for future Functions, so they should stay compatible now)
Beta 1.52: Fixed a bunch of bugs, some cleanups, gave the Status-Line a life.
Beta 1.51: Fixed Issues when more than one Pak is used. MemPak is workin now( was alot easier than i thought ). RAW-Handling tweaked.
Beta 1.50b: Finally fixed Rumble Issues, with feedback from bodie & hotshi again.
Beta 1.50: Added Rapid-Fire for Macro-Modifiers, seperate option for negating X/Y Axis. Rumble doesnt works with all gamepads, no clue why not. Thanx to bodie, cyber and hotshitu who gave me allota feedback about Rumble.
Beta 1.49b-d: small Bugfixes, tried to get Rumble working on all GamePads.
Beta 1.49a: fixed some Controllers(including Adaptoid) not working ingame & hopefully the Controllers that dint Rumble
Beta 1.49: some Bugfixes with POV and RRRRRumble is working now!
Beta 1.48: Configuration Routines written from scratch, extended Modifiers, much better Mouse Support, tweaked the whole Code. Almost a new Plugin ;)
Beta 1.42: This was the last Release before i rewritten the Configuration Stuff, I dint kept track of the Versions before 1.48, many of em were just internal Releases. And I totally messed it up with the Versions-Numbers anyway.

View File

@ -1,40 +0,0 @@
Project64 1.6 Official Cheats Database (Project64.cht)
From The emu64cheats authors
-----Version=1.6 Official Cheat Changes - 1st April 2005-----
So what has changed on the Cheats front ?
Have a look at the Project64.chm Cheat Help Section or for online http://www.pj64cheats.net
This will walk you through all the do's & Don'ts' of adding, Using,
Including a handy Cheats FAQ!
Added & Improved Cheat Codes Support for following the Regions.:
(J) = Japan
(U) = USA
(E) = Europe
(A) = Australia
(F) = France
(G) = Germany
(I) = Italy
(S) = Spain
If you experience any problems when using these cheats in pj64
just refer to the mentioned cheats.chm this should help you with all you need to know.
If you have a problem that is not covered on the site
then we also have a pj64cheats Message Board on emutalk.net
If you are not a member on emutalk.net we suggest you become one
so you can have your say and be upto date on the pj64cheats progression.
Thank You for your help & support.
For a full Listing of Games supported with Cheats:
have a look at the "Cheats In Cheat Support" Section of the Cheat Help Section
or The Supported link on the Project64 Cheats Website.
All The best
Gent

View File

@ -1,59 +0,0 @@
Project64 Official Cheats Database (Project64.cht) README
From Gent
Maximize this window if you are having trouble viewing it.
Table Of Contents
I. Introduction
II. Installation
III. Contacting The Authors
I. Introduction
Welcome to the Official Project64 Cheat Database. This database contains a listing of
pre-formatted GameShark and Pro-Action Replay cheat codes for use with Project 64. Due to
new developments in the cheat system of Project 64, the files accompanied with this file
will no longer be compatible with versions of PJ64 prior to v1.5 For personal notes from
the authors please read the appropriate files that come with this database.
II. Installation
Installation is an easy task. Simply extract the contents of this archive to the Project 64
software's directory. This archive should contain the following files:
\Project64.cht - The actual cheats database file
\Docs\Cheat Codes\Readme.txt - This readme file
\Docs\Cheat Codes\Changes.txt - Changes made since the previous version
III. Contacting The Authors
You can get in touch with us On the PJ64 Cheats Board in the Project64 section of emutalk.net
If you wish to Post a question that is unanswered on the official pj64cheats site
http://www.pj64cheats.net Or the Manual supplied with the pj64 package.
Please read the following before contacting us.
Reasons to Contact Us:
1. To notify us of a code(s) that are not producing the desired effect. NOTE: Check to see
that you are using a GoodN64 approved rom before contacting us.
2. To send a code not in the database have for a game currently in the database. Please test
all codes before sending them with GoodN4 approved roms.
Reasons NOT to Contact Us:
1. To request a code that produce a desired effect for a game.
2. To send us a code(s) for games not supported by pj64.
3. To ask us how to fix a game or get it to work on pj64.
NOTE: It is not appropriate to post lists of cheat codes to add to the cheat database as a
thread on the pj64cheats message forum. The forum can be used to inform others as
well as the cheat code authors about codes that do not work or to gain help using
the cheat codes. Do not e-mail the emu64 cheats authors about problems that
you find in the cheats database, instead contact us and we will
attempt to correct them.

View File

@ -1,10 +0,0 @@
Game FAQ (PJgameFAQ.chm) v1.6 (1st April 2005)
Many thanks to Clements and the Emutalk Members for thier input and work that Contributed to the updating of the Project64 Game FAQ.
Thanks for reading,
Project64 team
//EOF

View File

@ -1,202 +0,0 @@
/**********************************************************************************
Common Audio plugin spec, version #1.1 maintained by zilmar (zilmar@emulation64.com)
All questions or suggestions should go through the mailing list.
http://www.egroups.com/group/Plugin64-Dev
**********************************************************************************
Notes:
------
Setting the approprate bits in the MI_INTR_REG and calling CheckInterrupts which
are both passed to the DLL in InitiateAudio will generate an Interrupt from with in
the plugin.
**********************************************************************************/
#ifndef _AUDIO_H_INCLUDED__
#define _AUDIO_H_INCLUDED__
#if defined(__cplusplus)
extern "C" {
#endif
/* Note: BOOL, BYTE, WORD, DWORD, TRUE, FALSE are defined in windows.h */
#define PLUGIN_TYPE_AUDIO 3
#define EXPORT __declspec(dllexport)
#define CALL _cdecl
#define SYSTEM_NTSC 0
#define SYSTEM_PAL 1
#define SYSTEM_MPAL 2
/***** Structures *****/
typedef struct {
WORD Version; /* Should be set to 0x0101 */
WORD Type; /* Set to PLUGIN_TYPE_AUDIO */
char Name[100]; /* Name of the DLL */
/* If DLL supports memory these memory options then set them to TRUE or FALSE
if it does not support it */
BOOL NormalMemory; /* a normal BYTE array */
BOOL MemoryBswaped; /* a normal BYTE array where the memory has been pre
bswap on a dword (32 bits) boundry */
} PLUGIN_INFO;
typedef struct {
HWND hwnd;
HINSTANCE hinst;
BOOL MemoryBswaped; // If this is set to TRUE, then the memory has been pre
// bswap on a dword (32 bits) boundry
// eg. the first 8 bytes are stored like this:
// 4 3 2 1 8 7 6 5
BYTE * HEADER; // This is the rom header (first 40h bytes of the rom
// This will be in the same memory format as the rest of the memory.
BYTE * RDRAM;
BYTE * DMEM;
BYTE * IMEM;
DWORD * MI_INTR_REG;
DWORD * AI_DRAM_ADDR_REG;
DWORD * AI_LEN_REG;
DWORD * AI_CONTROL_REG;
DWORD * AI_STATUS_REG;
DWORD * AI_DACRATE_REG;
DWORD * AI_BITRATE_REG;
void (*CheckInterrupts)( void );
} AUDIO_INFO;
/******************************************************************
Function: AiDacrateChanged
Purpose: This function is called to notify the dll that the
AiDacrate registers value has been changed.
input: The System type:
SYSTEM_NTSC 0
SYSTEM_PAL 1
SYSTEM_MPAL 2
output: none
*******************************************************************/
EXPORT void CALL AiDacrateChanged (int SystemType);
/******************************************************************
Function: AiLenChanged
Purpose: This function is called to notify the dll that the
AiLen registers value has been changed.
input: none
output: none
*******************************************************************/
EXPORT void CALL AiLenChanged (void);
/******************************************************************
Function: AiReadLength
Purpose: This function is called to allow the dll to return the
value that AI_LEN_REG should equal
input: none
output: The amount of bytes still left to play.
*******************************************************************/
EXPORT DWORD CALL AiReadLength (void);
/******************************************************************
Function: AiUpdate
Purpose: This function is called to allow the dll to update
things on a regular basis (check how long to sound to
go, copy more stuff to the buffer, anyhting you like).
The function is designed to go in to the message loop
of the main window ... but can be placed anywhere you
like.
input: if Wait is set to true, then this function should wait
till there is a messgae in the its message queue.
output: none
*******************************************************************/
EXPORT void CALL AiUpdate (BOOL Wait);
/******************************************************************
Function: CloseDLL
Purpose: This function is called when the emulator is closing
down allowing the dll to de-initialise.
input: none
output: none
*******************************************************************/
EXPORT void CALL CloseDLL (void);
/******************************************************************
Function: DllAbout
Purpose: This function is optional function that is provided
to give further information about the DLL.
input: a handle to the window that calls this function
output: none
*******************************************************************/
EXPORT void CALL DllAbout ( HWND hParent );
/******************************************************************
Function: DllConfig
Purpose: This function is optional function that is provided
to allow the user to configure the dll
input: a handle to the window that calls this function
output: none
*******************************************************************/
EXPORT void CALL DllConfig ( HWND hParent );
/******************************************************************
Function: DllTest
Purpose: This function is optional function that is provided
to allow the user to test the dll
input: a handle to the window that calls this function
output: none
*******************************************************************/
EXPORT void CALL DllTest ( HWND hParent );
/******************************************************************
Function: GetDllInfo
Purpose: This function allows the emulator to gather information
about the dll by filling in the PluginInfo structure.
input: a pointer to a PLUGIN_INFO stucture that needs to be
filled by the function. (see def above)
output: none
*******************************************************************/
EXPORT void CALL GetDllInfo ( PLUGIN_INFO * PluginInfo );
/******************************************************************
Function: InitiateSound
Purpose: This function is called when the DLL is started to give
information from the emulator that the n64 audio
interface needs
Input: Audio_Info is passed to this function which is defined
above.
Output: TRUE on success
FALSE on failure to initialise
** note on interrupts **:
To generate an interrupt set the appropriate bit in MI_INTR_REG
and then call the function CheckInterrupts to tell the emulator
that there is a waiting interrupt.
*******************************************************************/
EXPORT BOOL CALL InitiateAudio (AUDIO_INFO Audio_Info);
/******************************************************************
Function: ProcessAList
Purpose: This function is called when there is a Alist to be
processed. The Dll will have to work out all the info
about the AList itself.
input: none
output: none
*******************************************************************/
EXPORT void CALL ProcessAList(void);
/******************************************************************
Function: RomClosed
Purpose: This function is called when a rom is closed.
input: none
output: none
*******************************************************************/
EXPORT void CALL RomClosed (void);
#if defined(__cplusplus)
}
#endif
#endif

View File

@ -1,230 +0,0 @@
/**********************************************************************************
Common Controller plugin spec, version #1.1 maintained by
zilmar (zilmar@emulation64.com)
All questions or suggestions should go through the emutalk plugin forum.
http://www.emutalk.net/cgi-bin/ikonboard/ikonboard.cgi?s=3bd272222f66ffff;act=SF;f=20
**********************************************************************************/
#ifndef _CONTR_H_INCLUDED__
#define _CONTR_H_INCLUDED__
#if defined(__cplusplus)
extern "C" {
#endif
/* Note: BOOL, BYTE, WORD, DWORD, TRUE, FALSE are defined in windows.h */
#define PLUGIN_TYPE_CONTROLLER 4
/*** Conteroller plugin's ****/
#define PLUGIN_NONE 1
#define PLUGIN_MEMPAK 2
#define PLUGIN_RUMBLE_PAK 3 // not implemeted for non raw data
#define PLUGIN_TANSFER_PAK 4 // not implemeted for non raw data
#define PLUGIN_RAW 5 // the controller plugin is passed in raw data
/*********************************************************************************
Note about Conteroller plugin's:
the rumble pak needs a function for the force feed back joystick and tranfer pak
probaly needs a function for the plugin to be able to select the GB rom and
eeprom... maybe this should be done by the emu instead of the plugin, but I think
it probaly should be done by the plugin. I will see about adding these functions
in the next spec
**********************************************************************************/
#define EXPORT __declspec(dllexport)
#define CALL _cdecl
/***** Structures *****/
typedef struct {
WORD Version; /* Should be set to 0x0101 */
WORD Type; /* Set to PLUGIN_TYPE_CONTROLLER */
char Name[100]; /* Name of the DLL */
BOOL Reserved1;
BOOL Reserved2;
} PLUGIN_INFO;
typedef struct {
BOOL Present;
BOOL RawData;
int Plugin;
} CONTROL;
typedef union {
DWORD Value;
struct {
unsigned R_DPAD : 1;
unsigned L_DPAD : 1;
unsigned D_DPAD : 1;
unsigned U_DPAD : 1;
unsigned START_BUTTON : 1;
unsigned Z_TRIG : 1;
unsigned B_BUTTON : 1;
unsigned A_BUTTON : 1;
unsigned R_CBUTTON : 1;
unsigned L_CBUTTON : 1;
unsigned D_CBUTTON : 1;
unsigned U_CBUTTON : 1;
unsigned R_TRIG : 1;
unsigned L_TRIG : 1;
unsigned Reserved1 : 1;
unsigned Reserved2 : 1;
signed Y_AXIS : 8;
signed X_AXIS : 8;
};
} BUTTONS;
typedef struct {
HWND hMainWindow;
HINSTANCE hinst;
BOOL MemoryBswaped; // If this is set to TRUE, then the memory has been pre
// bswap on a dword (32 bits) boundry, only effects header.
// eg. the first 8 bytes are stored like this:
// 4 3 2 1 8 7 6 5
BYTE * HEADER; // This is the rom header (first 40h bytes of the rom)
CONTROL *Controls; // A pointer to an array of 4 controllers .. eg:
// CONTROL Controls[4];
} CONTROL_INFO;
/******************************************************************
Function: CloseDLL
Purpose: This function is called when the emulator is closing
down allowing the dll to de-initialise.
input: none
output: none
*******************************************************************/
EXPORT void CALL CloseDLL (void);
/******************************************************************
Function: ControllerCommand
Purpose: To process the raw data that has just been sent to a
specific controller.
input: - Controller Number (0 to 3) and -1 signalling end of
processing the pif ram.
- Pointer of data to be processed.
output: none
note: This function is only needed if the DLL is allowing raw
data, or the plugin is set to raw
the data that is being processed looks like this:
initilize controller: 01 03 00 FF FF FF
read controller: 01 04 01 FF FF FF FF
*******************************************************************/
EXPORT void CALL ControllerCommand ( int Control, BYTE * Command);
/******************************************************************
Function: DllAbout
Purpose: This function is optional function that is provided
to give further information about the DLL.
input: a handle to the window that calls this function
output: none
*******************************************************************/
EXPORT void CALL DllAbout ( HWND hParent );
/******************************************************************
Function: DllConfig
Purpose: This function is optional function that is provided
to allow the user to configure the dll
input: a handle to the window that calls this function
output: none
*******************************************************************/
EXPORT void CALL DllConfig ( HWND hParent );
/******************************************************************
Function: DllTest
Purpose: This function is optional function that is provided
to allow the user to test the dll
input: a handle to the window that calls this function
output: none
*******************************************************************/
EXPORT void CALL DllTest ( HWND hParent );
/******************************************************************
Function: GetDllInfo
Purpose: This function allows the emulator to gather information
about the dll by filling in the PluginInfo structure.
input: a pointer to a PLUGIN_INFO stucture that needs to be
filled by the function. (see def above)
output: none
*******************************************************************/
EXPORT void CALL GetDllInfo ( PLUGIN_INFO * PluginInfo );
/******************************************************************
Function: GetKeys
Purpose: To get the current state of the controllers buttons.
input: - Controller Number (0 to 3)
- A pointer to a BUTTONS structure to be filled with
the controller state.
output: none
*******************************************************************/
EXPORT void CALL GetKeys(int Control, BUTTONS * Keys );
/******************************************************************
Function: InitiateControllers
Purpose: This function initialises how each of the controllers
should be handled.
input: - The handle to the main window.
- A controller structure that needs to be filled for
the emulator to know how to handle each controller.
output: none
*******************************************************************/
EXPORT void CALL InitiateControllers (CONTROL_INFO ControlInfo);
/******************************************************************
Function: ReadController
Purpose: To process the raw data in the pif ram that is about to
be read.
input: - Controller Number (0 to 3) and -1 signalling end of
processing the pif ram.
- Pointer of data to be processed.
output: none
note: This function is only needed if the DLL is allowing raw
data.
*******************************************************************/
EXPORT void CALL ReadController ( int Control, BYTE * Command );
/******************************************************************
Function: RomClosed
Purpose: This function is called when a rom is closed.
input: none
output: none
*******************************************************************/
EXPORT void CALL RomClosed (void);
/******************************************************************
Function: RomOpen
Purpose: This function is called when a rom is open. (from the
emulation thread)
input: none
output: none
*******************************************************************/
EXPORT void CALL RomOpen (void);
/******************************************************************
Function: WM_KeyDown
Purpose: To pass the WM_KeyDown message from the emulator to the
plugin.
input: wParam and lParam of the WM_KEYDOWN message.
output: none
*******************************************************************/
EXPORT void CALL WM_KeyDown( WPARAM wParam, LPARAM lParam );
/******************************************************************
Function: WM_KeyUp
Purpose: To pass the WM_KEYUP message from the emulator to the
plugin.
input: wParam and lParam of the WM_KEYDOWN message.
output: none
*******************************************************************/
EXPORT void CALL WM_KeyUp( WPARAM wParam, LPARAM lParam );
#if defined(__cplusplus)
}
#endif
#endif

View File

@ -1,269 +0,0 @@
/**********************************************************************************
Common gfx plugin spec, version #1.3 maintained by zilmar (zilmar@emulation64.com)
All questions or suggestions should go through the mailing list.
http://www.egroups.com/group/Plugin64-Dev
***********************************************************************************
Notes:
------
Setting the approprate bits in the MI_INTR_REG and calling CheckInterrupts which
are both passed to the DLL in InitiateGFX will generate an Interrupt from with in
the plugin.
The Setting of the RSP flags and generating an SP interrupt should not be done in
the plugin
**********************************************************************************/
#ifndef _GFX_H_INCLUDED__
#define _GFX_H_INCLUDED__
#if defined(__cplusplus)
extern "C" {
#endif
/* Plugin types */
#define PLUGIN_TYPE_GFX 2
#define EXPORT __declspec(dllexport)
#define CALL _cdecl
/***** Structures *****/
typedef struct {
WORD Version; /* Set to 0x0103 */
WORD Type; /* Set to PLUGIN_TYPE_GFX */
char Name[100]; /* Name of the DLL */
/* If DLL supports memory these memory options then set them to TRUE or FALSE
if it does not support it */
BOOL NormalMemory; /* a normal BYTE array */
BOOL MemoryBswaped; /* a normal BYTE array where the memory has been pre
bswap on a dword (32 bits) boundry */
} PLUGIN_INFO;
typedef struct {
HWND hWnd; /* Render window */
HWND hStatusBar; /* if render window does not have a status bar then this is NULL */
BOOL MemoryBswaped; // If this is set to TRUE, then the memory has been pre
// bswap on a dword (32 bits) boundry
// eg. the first 8 bytes are stored like this:
// 4 3 2 1 8 7 6 5
BYTE * HEADER; // This is the rom header (first 40h bytes of the rom
// This will be in the same memory format as the rest of the memory.
BYTE * RDRAM;
BYTE * DMEM;
BYTE * IMEM;
DWORD * MI_INTR_REG;
DWORD * DPC_START_REG;
DWORD * DPC_END_REG;
DWORD * DPC_CURRENT_REG;
DWORD * DPC_STATUS_REG;
DWORD * DPC_CLOCK_REG;
DWORD * DPC_BUFBUSY_REG;
DWORD * DPC_PIPEBUSY_REG;
DWORD * DPC_TMEM_REG;
DWORD * VI_STATUS_REG;
DWORD * VI_ORIGIN_REG;
DWORD * VI_WIDTH_REG;
DWORD * VI_INTR_REG;
DWORD * VI_V_CURRENT_LINE_REG;
DWORD * VI_TIMING_REG;
DWORD * VI_V_SYNC_REG;
DWORD * VI_H_SYNC_REG;
DWORD * VI_LEAP_REG;
DWORD * VI_H_START_REG;
DWORD * VI_V_START_REG;
DWORD * VI_V_BURST_REG;
DWORD * VI_X_SCALE_REG;
DWORD * VI_Y_SCALE_REG;
void (*CheckInterrupts)( void );
} GFX_INFO;
/******************************************************************
Function: CaptureScreen
Purpose: This function dumps the current frame to a file
input: pointer to the directory to save the file to
output: none
*******************************************************************/
EXPORT void CALL CaptureScreen ( char * Directory );
/******************************************************************
Function: ChangeWindow
Purpose: to change the window between fullscreen and window
mode. If the window was in fullscreen this should
change the screen to window mode and vice vesa.
input: none
output: none
*******************************************************************/
EXPORT void CALL ChangeWindow (void);
/******************************************************************
Function: CloseDLL
Purpose: This function is called when the emulator is closing
down allowing the dll to de-initialise.
input: none
output: none
*******************************************************************/
EXPORT void CALL CloseDLL (void);
/******************************************************************
Function: DllAbout
Purpose: This function is optional function that is provided
to give further information about the DLL.
input: a handle to the window that calls this function
output: none
*******************************************************************/
EXPORT void CALL DllAbout ( HWND hParent );
/******************************************************************
Function: DllConfig
Purpose: This function is optional function that is provided
to allow the user to configure the dll
input: a handle to the window that calls this function
output: none
*******************************************************************/
EXPORT void CALL DllConfig ( HWND hParent );
/******************************************************************
Function: DllTest
Purpose: This function is optional function that is provided
to allow the user to test the dll
input: a handle to the window that calls this function
output: none
*******************************************************************/
EXPORT void CALL DllTest ( HWND hParent );
/******************************************************************
Function: DrawScreen
Purpose: This function is called when the emulator receives a
WM_PAINT message. This allows the gfx to fit in when
it is being used in the desktop.
input: none
output: none
*******************************************************************/
EXPORT void CALL DrawScreen (void);
/******************************************************************
Function: GetDllInfo
Purpose: This function allows the emulator to gather information
about the dll by filling in the PluginInfo structure.
input: a pointer to a PLUGIN_INFO stucture that needs to be
filled by the function. (see def above)
output: none
*******************************************************************/
EXPORT void CALL GetDllInfo ( PLUGIN_INFO * PluginInfo );
/******************************************************************
Function: InitiateGFX
Purpose: This function is called when the DLL is started to give
information from the emulator that the n64 graphics
uses. This is not called from the emulation thread.
Input: Gfx_Info is passed to this function which is defined
above.
Output: TRUE on success
FALSE on failure to initialise
** note on interrupts **:
To generate an interrupt set the appropriate bit in MI_INTR_REG
and then call the function CheckInterrupts to tell the emulator
that there is a waiting interrupt.
*******************************************************************/
EXPORT BOOL CALL InitiateGFX (GFX_INFO Gfx_Info);
/******************************************************************
Function: MoveScreen
Purpose: This function is called in response to the emulator
receiving a WM_MOVE passing the xpos and ypos passed
from that message.
input: xpos - the x-coordinate of the upper-left corner of the
client area of the window.
ypos - y-coordinate of the upper-left corner of the
client area of the window.
output: none
*******************************************************************/
EXPORT void CALL MoveScreen (int xpos, int ypos);
/******************************************************************
Function: ProcessDList
Purpose: This function is called when there is a Dlist to be
processed. (High level GFX list)
input: none
output: none
*******************************************************************/
EXPORT void CALL ProcessDList(void);
/******************************************************************
Function: ProcessRDPList
Purpose: This function is called when there is a Dlist to be
processed. (Low level GFX list)
input: none
output: none
*******************************************************************/
EXPORT void CALL ProcessRDPList(void);
/******************************************************************
Function: RomClosed
Purpose: This function is called when a rom is closed.
input: none
output: none
*******************************************************************/
EXPORT void CALL RomClosed (void);
/******************************************************************
Function: RomOpen
Purpose: This function is called when a rom is open. (from the
emulation thread)
input: none
output: none
*******************************************************************/
EXPORT void CALL RomOpen (void);
/******************************************************************
Function: ShowCFB
Purpose: Useally once Dlists are started being displayed, cfb is
ignored. This function tells the dll to start displaying
them again.
input: none
output: none
*******************************************************************/
EXPORT void CALL ShowCFB (void);
/******************************************************************
Function: UpdateScreen
Purpose: This function is called in response to a vsync of the
screen were the VI bit in MI_INTR_REG has already been
set
input: none
output: none
*******************************************************************/
EXPORT void CALL UpdateScreen (void);
/******************************************************************
Function: ViStatusChanged
Purpose: This function is called to notify the dll that the
ViStatus registers value has been changed.
input: none
output: none
*******************************************************************/
EXPORT void CALL ViStatusChanged (void);
/******************************************************************
Function: ViWidthChanged
Purpose: This function is called to notify the dll that the
ViWidth registers value has been changed.
input: none
output: none
*******************************************************************/
EXPORT void CALL ViWidthChanged (void);
#if defined(__cplusplus)
}
#endif
#endif

View File

@ -1,35 +0,0 @@
===================================================
GFX Common Plugin Spec 1.3
===================================================
+ Added Screen Capture
+ Added Process RDP List
+ Added Show CFB
===================================================
GFX Common Plugin Spec 1.2
===================================================
+ Added HEADER to the GFX_INFO structure
+ Moved the __declspec(dllexport) to a define
+ Added CALL to set function calling method
+ Added _GFX_H_INCLUDED__ to make sure include file is only used once
- Changed the ChangeWindow function
===================================================
GFX Common Plugin Spec 1.1
===================================================
- removed PLugin types dealing with other plugins.
- removed ProcessRDPList from plugin spec.
+ Add some general comments about the plugin spec
===================================================
Audio Common Plugin Spec 1.1
===================================================
+ Changed the function name for processing an Alist
+ Moved the __declspec(dllexport) to a define
+ Added CALL to set function calling method
+ Added _AUDIO_H_INCLUDED__ to make sure include file is only used once
+ Added HEADER to the AUDIO_INFO structure
- Removed SystemType from the AUDIO_INFO structure
+ Added SystemType to AiDacrateChanged
===================================================
Controller Common Plugin Spec 1.1
===================================================
+ Added HEADER to the CONTROL_INFO structure

View File

@ -1,199 +0,0 @@
#if defined(__cplusplus)
extern "C" {
#endif
/* Note: BOOL, BYTE, WORD, DWORD, TRUE, FALSE are defined in windows.h */
#define PLUGIN_TYPE_RSP 1
#define PLUGIN_TYPE_GFX 2
#define PLUGIN_TYPE_AUDIO 3
#define PLUGIN_TYPE_CONTROLLER 4
typedef struct {
WORD Version; /* Should be set to 0x0101 */
WORD Type; /* Set to PLUGIN_TYPE_RSP */
char Name[100]; /* Name of the DLL */
/* If DLL supports memory these memory options then set them to TRUE or FALSE
if it does not support it */
BOOL NormalMemory; /* a normal BYTE array */
BOOL MemoryBswaped; /* a normal BYTE array where the memory has been pre
bswap on a dword (32 bits) boundry */
} PLUGIN_INFO;
typedef struct {
HINSTANCE hInst;
BOOL MemoryBswaped; /* If this is set to TRUE, then the memory has been pre
bswap on a dword (32 bits) boundry */
BYTE * RDRAM;
BYTE * DMEM;
BYTE * IMEM;
DWORD * MI_INTR_REG;
DWORD * SP_MEM_ADDR_REG;
DWORD * SP_DRAM_ADDR_REG;
DWORD * SP_RD_LEN_REG;
DWORD * SP_WR_LEN_REG;
DWORD * SP_STATUS_REG;
DWORD * SP_DMA_FULL_REG;
DWORD * SP_DMA_BUSY_REG;
DWORD * SP_PC_REG;
DWORD * SP_SEMAPHORE_REG;
DWORD * DPC_START_REG;
DWORD * DPC_END_REG;
DWORD * DPC_CURRENT_REG;
DWORD * DPC_STATUS_REG;
DWORD * DPC_CLOCK_REG;
DWORD * DPC_BUFBUSY_REG;
DWORD * DPC_PIPEBUSY_REG;
DWORD * DPC_TMEM_REG;
void (*CheckInterrupts)( void );
void (*ProcessDlistList)( void );
void (*ProcessAlistList)( void );
void (*ProcessRdpList)( void );
void (*ShowCFB)( void );
} RSP_INFO;
typedef struct {
/* Menu */
/* Items should have an ID between 5001 and 5100 */
HMENU hRSPMenu;
void (*ProcessMenuItem) ( int ID );
/* Break Points */
BOOL UseBPoints;
char BPPanelName[20];
void (*Add_BPoint) ( void );
void (*CreateBPPanel) ( HWND hDlg, RECT rcBox );
void (*HideBPPanel) ( void );
void (*PaintBPPanel) ( PAINTSTRUCT ps );
void (*ShowBPPanel) ( void );
void (*RefreshBpoints) ( HWND hList );
void (*RemoveBpoint) ( HWND hList, int index );
void (*RemoveAllBpoint) ( void );
/* RSP command Window */
void (*Enter_RSP_Commands_Window) ( void );
} RSPDEBUG_INFO;
typedef struct {
void (*UpdateBreakPoints)( void );
void (*UpdateMemory)( void );
void (*UpdateR4300iRegisters)( void );
void (*Enter_BPoint_Window)( void );
void (*Enter_R4300i_Commands_Window)( void );
void (*Enter_R4300i_Register_Window)( void );
void (*Enter_RSP_Commands_Window) ( void );
void (*Enter_Memory_Window)( void );
} DEBUG_INFO;
/******************************************************************
Function: CloseDLL
Purpose: This function is called when the emulator is closing
down allowing the dll to de-initialise.
input: none
output: none
*******************************************************************/
__declspec(dllexport) void CloseDLL (void);
/******************************************************************
Function: DllAbout
Purpose: This function is optional function that is provided
to give further information about the DLL.
input: a handle to the window that calls this function
output: none
*******************************************************************/
__declspec(dllexport) void DllAbout ( HWND hParent );
/******************************************************************
Function: DllConfig
Purpose: This function is optional function that is provided
to allow the user to configure the dll
input: a handle to the window that calls this function
output: none
*******************************************************************/
__declspec(dllexport) void DllConfig ( HWND hParent );
/******************************************************************
Function: DllTest
Purpose: This function is optional function that is provided
to allow the user to test the dll
input: a handle to the window that calls this function
output: none
*******************************************************************/
__declspec(dllexport) void DllTest ( HWND hParent );
/******************************************************************
Function: DoRspCycles
Purpose: This function is to allow the RSP to run in parrel with
the r4300 switching control back to the r4300 once the
function ends.
input: The number of cylces that is meant to be executed
output: The number of cycles that was executed. This value can
be greater than the number of cycles that the RSP
should have performed.
(this value is ignored if the RSP is stoped)
*******************************************************************/
__declspec(dllexport) DWORD DoRspCycles ( DWORD Cycles );
/******************************************************************
Function: GetDllInfo
Purpose: This function allows the emulator to gather information
about the dll by filling in the PluginInfo structure.
input: a pointer to a PLUGIN_INFO stucture that needs to be
filled by the function. (see def above)
output: none
*******************************************************************/
__declspec(dllexport) void GetDllInfo ( PLUGIN_INFO * PluginInfo );
/******************************************************************
Function: GetRspDebugInfo
Purpose: This function allows the emulator to gather information
about the debug capabilities of the dll by filling in
the DebugInfo structure.
input: a pointer to a RSPDEBUG_INFO stucture that needs to be
filled by the function. (see def above)
output: none
*******************************************************************/
__declspec(dllexport) void GetRspDebugInfo ( RSPDEBUG_INFO * RSPDebugInfo );
/******************************************************************
Function: InitiateRSP
Purpose: This function is called when the DLL is started to give
information from the emulator that the n64 RSP
interface needs
input: Rsp_Info is passed to this function which is defined
above.
CycleCount is the number of cycles between switching
control between the RSP and r4300i core.
output: none
*******************************************************************/
__declspec(dllexport) void InitiateRSP ( RSP_INFO Rsp_Info, DWORD * CycleCount);
/******************************************************************
Function: InitiateRSPDebugger
Purpose: This function is called when the DLL is started to give
information from the emulator that the n64 RSP
interface needs to intergrate the debugger with the
rest of the emulator.
input: DebugInfo is passed to this function which is defined
above.
output: none
*******************************************************************/
__declspec(dllexport) void InitiateRSPDebugger ( DEBUG_INFO DebugInfo);
/******************************************************************
Function: RomClosed
Purpose: This function is called when a rom is closed.
input: none
output: none
*******************************************************************/
__declspec(dllexport) void RomClosed (void);
#if defined(__cplusplus)
}
#endif

View File

@ -1,283 +0,0 @@
ROM Database (Project64.rdb) for v1.6 (November 2005)
Changes since v1.6 release (1st April 2005)
also much credit to: Gent, Radeon, Trotter, Witten, SGi, Nekokabu
and everyone who gives feedback on the ET forum, thank you all!
Most recent changes at top (so no particular order!)
RDB v1.6.015
Turok - Rage Wars (U) 1 Corrected GoodName (silly error)
F-ZERO X 3 Changed SMCM back to ChangeM&C and TLB on, unstable? but was wiping save on Protect.
Toy Story 2 4 Changed CF2>1, runs at much better speed
Jikkyou Powerful Pro... (J) 1 Updated GoodName (added "V1.0" as newer ROM exists)
Wonder Project J2 1 Added note about a couple of problems
Donald Duck - Quack... 1 Changed status Compatible>Issues(p), added note
Ms. Pac-Man - Maze Madness 1 Changed status to Uncertain, reports of various issues.
Added 1 new ROM:
Jikkyou Powerful Pro Yakyuu 2000 (J) (V1.1)
--------
RDB v1.6.014
Title #ROMs Type Details
Doom 64 (U) 1 Updated GoodName (added "V1.0" as newer ROM exists)
Zelda no Densetsu - Mujura... 1 Updated GoodName (added "V1.0" as newer ROM exists)
Zelda no Densetsu - Toki.. 1 Updated GoodName (added "V1.0" as newer ROM exists)
Waialae Country Club (U) 1 Corrected GoodName (to match other regions)
Diddy Kong Racing (E) 2 Corrected GoodName (E is M3 not M2)
Top Gear Hyper-Bike 3 Added fix for all regions, should be playable, some video issues
Top Gear Overdrive 3 Added fix for all regions, game now works on Interpreter (slow), mixed issues
Hoshi no Kirby 1 Updated GoodName (added "V1.0" as newer ROM exists)
Starshot - Space Circus.. 2 Added note about AV in intro, must skip to avoid!
Space Station SV 3 Changed status Compatible>Issues (p), added note about missing sprite/depth prob.
SCARS 2 Added note about depth problem for effects
Tom and Jerry... 2 Set to FlashRAM, should no longer freeze! removed gFAQ entry (RadeonUser)
Duke Nukem ZERO HOUR (E) 1 Corrected position of potential freeze fix entry (oops!)
Star Wars EP1 racer 3 Changed to 8MB, just because i'm fed up with people reporting it. v1.5.2 plug users put back to 4.
StarCraft 64 (E) 1 Added info about ReDump
Iggy's Reckin Balls 3 Changed SMCM to ChangeM&C for possible hang fix.
Mischief Makers 3 Changed Status Compatible > Issues (plugin), added details to GameFAQ.
Fire Electric Pen 1 Changed status to Uncertain, may hang randomly?
Wave Race 64 (J) 1 Updated GoodName (added "V1.0" as newer ROM exists)
Bokujo Monogatari 2 (J) 1 Updated GoodName (added "V1.0" as newer ROM exists)
Ogre Battle 64 (J) 1 Added note about old [!] ROM being bad, has been redumped.
Add 16 new ROMs (warning: may not be final Good Names, or may not even be good dumps!)
Bokujou Monogatari 2 (J) (V1.1)
Bokujou Monogatari 2 (J) (V1.2)
Doom 64 (U) (v1.1)
Duke Nukem 64 (F)
Frogger 2 (Unreleased Alpha)
Hoshi no Kirby 64 (J) (V1.1)
Hoshi no Kirby 64 (J) (V1.2)
Jikkyou World Soccer - World Cup France '98 (J) (V1.1)
Legend of Zelda, The - Ocarina of Time (U) (Debug Version)
O.D.T (E)
O.D.T (U)
Turok - Rage Wars (FI)
Zelda no Densetsu - Mujura no Kamen (J) (V1.1)
Zelda no Densetsu - Toki no Ocarina (J) (V1.1)
Zelda no Densetsu - Toki no Ocarina (J) (V1.2)
Wave Race 64 (J) (V1.1)
--------
RDB 1.6x Beta 13:
Various Good Name corrections and Notes improvements
Jikkyou World Soccer 3 1 Changed SMCM ChangeMem>Protect in line with U/E ISS64 - may prevent freeze.
Iggy's Reckin' Balls 3 Removed note about AV, was fixed in v1.6
Army Men - Air Combat (U) 1 Added note about missile drawn incorrectly in level2+ (thanks Speedfreak69)
Bassmasters 2000 (U) 1 Added SMCM Cache, didn't boot on None if ABL off. added note about missing textures.
Chopper Attack/Wild Choppers 3 Added note to see GameFAQ to explain pixel pipe issue (Radeonuser)
Lode Runner 3-D 3 Added note about missing menu highlight
Quake 1&2 4 Improved GameFAQ entry, complicated issues for these games
Duke Nukem - ZER0 H0UR 3 Added fix, (F)/(U) now no longer freeze at first level (thanks Nekokabu!)
Nagano Winter Olympics/Hyper... 3 Added fix, all regions now no longer need overdump ROM (thanks Nekokabu!)
Added 5 new Zelda ROMs, provisionally Good Named (these names are probably NOT final!)
Legend of Zelda, The - Ocarina of Time - Master Quest (U) (GC Version)
Legend of Zelda, The - Ocarina of Time - Collector's Edition (U) (GC Version)
Zelda no Densetsu - Toki no Ocarina - Zelda Collection Version (J) (GC Version)
Zelda no Densetsu - Toki no Ocarina GC (J) (GC Version)
Zelda no Densetsu - Toki no Ocarina GC Ura (J) (GC Version)
Renamed two hacked/fixed Zelda ROMs to proposed new Good Names (may also not be correct!)
Legend of Zelda, The - Ocarina of Time - Master Quest (E) [f1] (NTSC) > Legend of Zelda, The - Ocarina of Time - Master Quest (E) [h1C]
Legend of Zelda, The - Ocarina of Time - Master Quest (E) [f2] > Legend of Zelda, The - Ocarina of Time - Master Quest (E) [f1] (NTSC)
Added one other (non-Zelda) new ROM:
Hoshi no Kirby 64 (J) (v1.3), left old ROM name alone, waiting for confirmation of version number.
--------
Beta12:
Added new ROMS (unverified, and some settings may be incorrect, this is why this is a beta file!)
A Bug's Life (I)
Chou-Kuukan Night Pro Yakyuu King 2 (J)
Jikkyou World Cup France '98 J V1.2
Pokemon Stadium 2 (I)
Pokemon Stadium (I)
Pro Mahjong Tsuwamono 64
Shadowgate 64 (I)
Turok 2 - Seeds of Evil (FGD)
A warning that in the current public version of GoodN64,
the following [!] ROMs may be bad, because a redump exists:
Bass Tsuri No. 1 - Shigesato Itoi's Bass Fishing (J)
Diddy Kong Racing (J) (changed status to "Bad ROM?" because CRC changed)
Pawapuro Puroyakyu 6 (J) (aka Jikkyou Powerful Pro Yakyuu 6)
Yousuke Ide's Mahjong School (J) (aka Ide Yosuke no Mahjong Juku)
Nushi Tsuri 64 Shiokaze ni notte (old dump definately bad, now starts!)
Blast Corps/Dozer 4 Added note about menu texture errors
Gex & Gex 3 5 Added note about Water rendering error
Bass Tsuri No.1 1 Added note to use v1.5.2 video plugin, Access Violaton in v1.6
Micro Machines 2 Added note about menu errros (OK in v1.5.2 but in game worse?)
Superman 2 Added note about fog missing from sky
Twisted Edge/King Hill... 3 Added note about minor menu snowflake problem
Duke Nukem 64 2 Added note about video depth problem
Neon Genesis Evangelion 1 Added D3D Clear Mode only per frame, no negative effects?
Snow Speeder 1 J ver of Big Mountain, clarified note about menu text errors (thanks Gent)
Spider-man 1 Added GameFAQ entry about background/shadow depth/system issues.
Paperboy 2 Added note about missing map details (thanks Speedfreak69)
City Tour GP 1 Changed SMCM CheckM&C>CMA in line with (U)&(E). May fix occasional freezes. Improved GameFAQ entry.
Bomberman64/2nd Attack/Baku... 5 Changed status Compatible>Issues (plugin). Many video plugin issues.
--------
Betas 1 up to 11:
Hey You Pikachu/Pikachu Gen... 2 Changed status Compatible>Issues (plugin). no plugin supprts voice pak AFAIK.
World Cup 98 2 Changed status Compatible>Issues (plugin). Added note about menu and pitch errors (thanks Speedfreak69)
64 Oozumou (J) 1 Added note: [video] slow in menus (may not be noticeable on fast system).
Jeremy McGrath Supercross 2000 2 Changed status Compatible>Issues (plugin), added note about missing menu selection indicator.
Doraemon - Mittsu no Seireiseki (J) [!] Changed note, missing text is main gameplay issue (character is visible but missing colour)
Kakutou Denshou: F-Cup Maniax 1/2 J ver of Figher's Destiny 2 - added same menu error note (use v1.5.2 plugin to avoid) (thanks Speedfreak69)
Fighting Cup (J) 1/5 J ver Figher's Destiny - added same menu error note (use v1.5.2 plugin to avoid)
Virtual Chess 1/2 Corrected (U) Good Name
Zelda OoT/MQ 10 Changed SMCM back ChangeMem>CMA, more stable. Added note to GameFAQ to explain Lost Woods issue.
Fushigi no Dungeon... 1 Added GameFAQ entry about menu needing framebuffer. still not sure of Status.
CyberTiger 2 Added core note & gFAQ entry about hang when quit from menu, status Compatible > Issues (core)
NHL Breakaway 98&99 4 Added note to use v1.5.2 video plugin - res detection bad in v1.6
Derby Stallion 1 Changed Status Compatible>Issues (core). Save problem prevents play (trusting olivieryuyu on this, i can't read Jap!)
Command and Conquer 3 Added note about texture errors in mission briefings
Mario Golf 3 Added GameFAQ entry about MiniGolf depth problem (thanks Techman)
Ready 2 Rumble Boxing (E) 1/2 Added GameFAQ entry about clipping problem (thanks Speedfreak69)
Tarzan 4 Added GameFAQ entry about butterfly video regression (thanks Speedfreak69)
Winback/Operation Winback 3 Added video note and gamefaq entry about grey square
Nascar 99 & 2000 3 Changed video note to say splitscreen multiplayer unusable.
Brunswick Circuit Pro Bowling 1 Added video plugin force res height 240, seems playable now, some minor depth problem still
Monopoly 1 Added video setting force height 240, added note to GameFAQ about Force Alpha needed
South Park - Chef's Luv... 1/2 Changed (E) status to Region Issue (p) for obvious gfx problem, suggesting use (U) ROM
Scooby Doo 2 Added video plugin force res width 480
1080 Snowboarding 2 Changed core settings LCB off and ABL off - smoother
F-ZERO X 3 Changed SMCM to Protect for all regions - needed. ABL off for smoothness.
ISS98 2 Changed core setting TLB On, may help with "failed to load word" error. feedback please, especially for the (U) version.
Pilotwings (E) 1 Changed video setting D3D clear mode back to default (Always was for border, but broke pics). Changed status Compat>Region Issue(p), added gFAQ entry to explain. (thanks Speedfreak69)
Mega Man 64/Rockman Dash 2 Added note to see GameFAQ about pixel pipe issue. (thanks Techman)
Earthworm Jim 3D 2 Changed note to see GameFAQ, added GameFAQ entry.
Castlevania/Akumajou Dracula.. 3/4 Changed core settings ChangeMem>Protect (stability), ABL off (smoother). (E) ok on ChangeMem+ABL
Big Mountain 2000 1 Added note about menu text errors (thanks Gent)
NFL QB Club 99 2 Changed core setting reg caching back on - faster, but is it stable? feedback please
Glover 2 Added note to use D3D6 v1.5.2 plugin, end of level AV is back in D3D8 v1.6
Killer Instinct 1/4 Changed (v1.2 U ROM) D3D Clear mode Default>Always to match others, is needed.
NBA Showtime - NBA on NBC (U) 1 Changed CF2>1 for better (faster actually) speed
Pocket Monsters Stadium (J) 1 Changed save type flashram>sram, not sure if that's correct or what other issues game has, seems to hang in menus (Nekokabu)
Mario Tennis 3 Changed note to just See GameFAQ, and tried to improve GameFAQ entry.
F-ZERO X 2/3 Changed (E&U) SMCM ChangeMem>CMA to fix unhandled opcode near end. Needs thorough testing of whole game! (may need Protect Mem)
Turok1/Tokisora Senshi... 6 Added note to see GameFAQ about texture/pixel pipeline issue (thanks Clements)
Dobutsu no Mori 1 Added note about pause screen problem (thanks Clements)
Dr Mario 64 1 Changed status Compatible>Issues(p). added note to see GameFAQ.
Banjo-Tooie 4 Changed to normal size compiler buffer, turned SP hack off - more stable. turned ABL off - smoother
Rat Attack 2 Changed cpu to interpreter, status Issues(c)>Interpreter only. All issues (multiplayer crash, missing graphics) from recomp fixed, but slow (Radeon/Gent)
Pro Mahjong Kiwame 64 (J) 1 Changed CF2>1, solves flickering menu issue (thanks Nekokabu)
Parlor! Pro 64 Pachinko... 1 Changed save type to 16keeprom (not verified) (thanks Nekokabu)
Mahjong Master (J) 1 Added plugin note about text errors in menus, game still seems playable?
Mahjong Hourouki Classic (J) 1 Changed SMCM Cache>Protect, changed status Only intro>Compatible, added note to see GameFAQ (thanks Nekokabu)
Jikkyou World Soccer 3 1 Changed status Uncertain>Issues (p) (thanks Nekokabu)
Donald Duck/Duck Dodgers.... 2 Changed CF2>3 to avoid stuck in loop when talking issue (thanks ScottJC?)
Goldeneye (J) 1 Changed (J) D3D Clear mode Default>Always to match other regions, this is for sky apparently (since its not emulated properly).
Fushigi no Dungeon 1 Changed status to Uncertain, possible graphics and saving issues, needs investigation (thanks Nekokabu)
Castlevania2/Akumajou Dracula.. 3 Changed RDRAM size to 8MB, may help with some graphics issues (or may cause problems e.g. res detection, feedback please!)
Fire Electric Pen 1 Changed status Issues (p)>Needs video plugin, errors too severe. force height 240 (thanks Nekokabu)
Rakuga Kids (J) 1/2 Removed note about being slow, seems better in D3D8, also to match (E)
Shadowgate64 4 Removed note about being slow, doesn't seem slow in D3D8 (thanks PsyMan)
Nushi Tsuri 64 (J) 1 Changed status Issues (p) > Needs video plugin, no way this is playable i think.
Mission Impossible (F) 1/ Changed core note into a GameFAQ entry to explain properly..
Hiryu no Ken Twin 1/3 Changed status Issues (p)>Region Issue (p), this is (J) Flying Dragon, triangle issue remains.
Flying Dragon 2/3 Changed status Issues (p)>Compatible, changed ABL>OFF, CF2>1. changed note to various - small issues but v. playable afaik.
Virtual Pro Wrestling 1/4 Changed status Issues (p)>(c), this is the (J) WCW vs. nWo - World Tour. changed SMCM Protect>CMA, ABL ON>def, to match others.
Super B-Daman - Battle Phoenix 1 change note to say speed seems ok in game, leaving status Issues (plugin) for now
Kirby64 1/2 Added forced res height 240, fixes line glitch at top
Rayman2 2 Changed status back to Compatible, lum colour and res issues not serious enough imho
1080 Snowboarding 2 Changed SMCM back to Protect Mem, not confident that it's stable on CMA :/
GT64 - Champ.../City-Tour... 3 Changed notes to be consistent
All-Star Base... 200/2001 3 Changed notes to see GameFAQ
Tetrisphere 2 Fixed typo in note
Turok 1 1/5 Changed core setting ABL ON>default to match others
Yoshi's Story 3 Added video note to see GameFAQ
Nightmare Creatures 1 Changed note to see GameFAQ for pausing issue
Bomberman Hero 3 Change SMCM CheckMem&C>CMA for possible crash later in game - not sure if it actually fixed issue.
Beetle Adv. Racing (E)/HSV... 2/4 Change SMCM CheckMem&C>CMA, prevents crash in intro (Radeonuser), still issues
Mario Golf 1 Removed reference to GameFAQ, pretty much fixed in D3D8. unless anyone thinks there needs to be a page?
Robot Ponkottsu 64 1 Changed to 16keeprom, game seems to work! removed note, not sure about vid plugin or SMCM? (thanks Nekokabu) (may need TLB? - Rad)
Pilotwings 3 Added note [video] (see GameFAQ) for block objects issue
Conker's Bad Fur Day 1/2 Changed (E) core setting ABL OFF to match (U)
Gauntlet Legends 1/4 Changed (U) core setting CF4>2, ABL OFF to match others
Re-volt 2 Changed note to say hangs randomly - CF3 doesn't prevent, can't see any fix for now
Resident Evil 2/Bio... 3 Changed RDRAM 8>4, forced res width 320, for now should help with res. set all RSP audio signal on, CF 1, ABL OFF, may improve stability, not sure
Jikkyou World Soccer 3 (J) 1 Changed status Uncertain > Issues (plugin) changed SMCM Cache>Check Memory & Cache, removed note about freeze (thanks Nekokabu)
Dobutsu no Mori 1 Changed status Uncertain > Compatible, unsure about video plugin (thanks Nekokabu)
Sim City 2000 1 Removed plugin note (oops! not sure why we were telling people to turn off the mempak?)
Human Grand Prix 1 Changed status Only intro > Compatible, removed note (thanks Nekokabu)
Custom Robo V2 1 Changed save type to 16k eeprom (thanks Nekokabu)
A Bug's Life 1/5 Changed core setting TLB ON for (U) to match others, not sure if game actually needs it
64 Oozumou 1 Changed status Issues (plugin) > Compatible, removed note - d3d8 improves speed (thanks Nekokabu)
Super Mario 64 1/4 Changed (E) note to match others (thanks Gent ;)
Beetle Adventure Racing/.. 1/3 Changed (E) core setting CF1>2 - unsure of status, needs testing
Donkey Kong 64 2/4 Changed (E)&(J) settings CF4>2 to match (U) - why was it on 4??
WCW vs NWO World Tour 3 Change status Issues (plugin) > Issues (core) - not video plug issue (thanks TrotterW)
Hiryuu no Ken Twin (J) 1 Changed core setting CF2>1, reduced flicker
Wonder Project J2 1 Changed core setting SMCM Protect > CMA (thanks Nekokabu) - not tested
Wetrix 1/3 Removed (J) note to match other regions - works fine afaik
BioHazard 2 1/3 Changed status Region Issue > Issues (plugin), Reg Caching & TLB OFF. issue not RSP, changed note to match others (thanks Nekokabu)
AI Shogi 3 1 Changed status Needs video plugin > Unsupported - textures errors not video plugin (thanks Nekokabu)
Super Smash Bros/Ninte... 4 Changed notes to be consistent. disabled ABL - smoother
War Gods 2 Added note (see GameFAQ) for possible non fatal Unknown x86 register error msg
All Star Baseball 2000 (E) 1 Removed note [video] primary_framebuffer:board (Gent)
Hey You, Pikachu 2 Changed note (clarification), changed (J) status to compatible - is this correct?
Fixed various typos and inconsistencies in notes (thanks Clements)
Mischief Makers 2 Changed note to fix typo - is there a (J) ROM? (thanks Clements)
Resident Evil 2/Bio... 2/3 Changed status Compatible > Issues (p)
Int. Track & Field/Ganbare... 3 Changed status Compatible > Broken (c & p) - new category! (thanks 64ultramanic)
ISS98 1 Changed (U) SMCM to Protect Memory, status Issues > Uncertain. maybe stable, but not for everyone?
Tetris64 1 Changed status Issues (plugin) > Compatible - no longer slow with D3D8 plugin
New Tetris 2 Changed status Issues (plugin) > Compatible - D3D8 plugin fixes major issues, small ones remain.
Roadsters Trophy (U) 1/2 Changed status to Region issue (c) - slowness is from (U) needing CF1 to start
Quest64/Holy Mag.../Eltale... 2/5 Added note [video] error(s):speech bubble text to (U/J) like others
NBA Hangtime 1 Changed (U) entry to match (E) - Issues (plugin)
Paper Mario/Mario Story 1 Changed (J) entry to match (U/E) - Compatible
Zelda OoT/MQ (all) 10 Changed core setting SMCM to Change Mem., for Lost Woods. Needs thorough testing of whole game (thanks Allnatural)
Banjo Tooie 1/3 Changed Status back to Compatible. removed note about opcode, unconfirmed. some doubts remaining.
1080 Snowboarding 1/2 Changed (E) core setting SMCM Protect > CMA - (U) accidently left on CMA in 1.6 - smoother, but needs testing!
Mystical Ninja star.../Ganbare 3 Changed core setting RDRAM 4>8MB - was not starting on 4. (J) forced res height 240
Wetrix 3 Changed core setting: CF 1>3 - better speed. possible AV remaining? (Radeonuser)
Zelda (both games, all roms) 15 Changed core setting: Advanced Block Linking OFF - slower but smoother
Zelda MQ [f1] (NTSC) 1 Added core note: "hacked ROM" - technicaly a bad ROM but leaving in for people who want 60VI/s
Wipeout64 2 Removed note "see GameFAQ" - no known issues remaining in (U)
007 World is Not Enough 2 Changed Status: Issues (plugin) > Compatible - speech issue not so serous imho
Battlezone 1 Changed RDRAM 8>4MB - workaround for video plugin high res. detection issue
Yoshi's Story 3 Added forced resolution 320x240 - seems ok. other video plugin issues remain.
GT64 Champ/City Tour GP 3 Changed core settings: TLB on, Delay SI on - needs testing!
Kirby64/Hoshi no kirby 3 Changed Status: Issues (plugin) > Issues (core) - 'missing eggs' not plugin issue
Jet Force Gemini - Kiosk 1 Changed Status: Broken (core) > Compatible. works afaik?
Mission Impossible (F) 1 Added note: "old [!] ROM bad!", reminder to rescan with new GoodN64 (might remove this later)
Star Wars - Shadows... 5 Changed CF1>2, Default>Only per frame, for speed & flicker. (E) flicker worse (thanks ScottJC)
Nagano Winter Olympics/Hyper... 3 Changed note to clarify: Use [o1] > Use overdump
Sim City 2000 1 Changed note to clarify: [input] needs Rumble-Pak -> [input] disable Memory-Pak
Chameleon Twist 2 Changed note to clarify: [input] needs Rumble-Pak -> [input] disable Memory-Pak
Removed (actually commented out):
Jet Force Gemini (U) [f1] Reason: bad rom.
*I think the average PC is now fast enough to turn this off in the RDB.
(i've known for a long time that ABL Off was smoother in the Zeldas, but loses perhaps 20% speed).
If your machine is not fast enough to maintain 60Vi/s, probably a good idea to turn it back on.
Some chance this affects stability, as not as many people have been playing them with ABL Off.
-------------
(1.6 release)
------
//EOF

View File

@ -1,205 +0,0 @@
Official Project64.rdx v1.0 by lnsop, Perfect Dark and Gent for PJ64 v1.6 GoodN64 v202b+
[Note from Gent: this file has had quite an overall and now includes GoodN64 v202b+ and Force Feedback (Rumble) compatibility. If anyone feels like updating it please contact me via the forum]
*****************
* Introduction: *
*****************
I propose you my config file for project64, the wonderful Nintendo64 emulator.
This file is to place on the principal directory of project64;
it permits to show some extra infos on the games when you use the emulator:
-the game developper
-the game date release (warning for the frenchs:the dates are inversed in english. example: 1998/05/26)
-the genre of the game (example:Sport-Snowboarding)
-the number of players
***************
* History: *
***************
01/04/05 V1.9:
- Added compatibility for GoodN64 v202b+ & Force Feedback (Rumble)
27/02/04 V1.9:
- Added compatibility with GoodN64 v0999a
12/11/02 V1.7:
- Achèvement : City-Tour GP-All Japan Grand Touring Car Championship (J)[!]
Fire Electric Pen (J) [!]
Fushigi no Dungeon - Furai no Shiren 2 (J) [!]
Ganbare Nippon Olympics 2000 (J) [!]
Jinsei Game 64 (J) [!]
Kuiki Uhabi Suigo (J) [!]
Mario no Photopie (J) [!]
Michael Owens WLS 2000 (E) [!]
NBA Pro 98 (E) [!] (thanks lario)
NBA Pro 99 (E) [!]
Nushi Zuri 64 (J) [!]
Parlor! Pro 64 Pachinko Jikki Simulation Game (J) [!]
Premier Manager 64 (E) [!]
Racing Simulation 2 (G) [!]
Telefoot Soccer 2000 (F) [!]
Yakouchuu II - Satsujun Kouru (J) [!]
Zool - Majou Tsukai Densetsu (J) [!]
- a few info added and corrected
- 813 roms complete (all info completed !!)
*********************************************************************************************************************
*********************************************************************************************************************
01/11/02 V1.6:
- Finish : Alice no Wakuwaku Trump World (J) [!]
Bakushou Jinsei 64 - Mezase! Resort Ou (J) [!]
Harukanaru Augusta Masters 98 (J) [!]
J. League Dynamite Soccer (J) [!]
J. League Eleven Beat 1997 (J) [!]
Jikkyou Pawapuro Puroyakyu 2000 (J) [!]
Jikkyou World Cup France '98 (J) [!]
Kiratto Kaiketsu! 64 Tanteidan (J) [!]
Mahjong Hourouki Classic (J) [!]
Morita Shogi 64 (J) [!]
Pachinko 365 Nichi (J) [!]
Puzzle Bobble 64 (J) [!]
Super Speed Race 64 (J) [!]
Tamagotchi World 64 (J) [!]
Yousuke Ide's Mahjong School (J) [!]
- a few info adds
- Roms to correct (E) (F) (G) : 5 roms
- Roms to correct (J) : 11 roms
*********************************************************************************************************************
*********************************************************************************************************************
26/10/02 V1.5:
- Finish : RTL World League Soccer 2000 (G) [!]
Bass Tsuri No. 1 - Shigesato Itoi's Bass Fishing (J) [!]
Akumajou Dracula Mokushiroku - Real Action Adventure (J) [!]
Jangou Simulation Mahjong Do 64 (J) [!]
Eltale Monsters (J) [!]
F-Cup Maniax (J) [!]
Heiwa Pachinko World (J) [!]
Jikkyou World Soccer 3 (J) [!]
Mahjong 64 (KOEI) (J) [!]
Mahjong Master (J) [!]
Pawapuro Puroyakyu 4 (J) [!]
Pawapuro Puroyakyu 5 (J) [!]
Pawapuro Puroyakyu 6 (J) [!]
Pro Mahjong Kiwame 64 (J) [!]
Pro Yak Yu King Baseball (J) [!]
St. Andrews Old Course (J) [!]
Violence Killer - Turok New Generation (J) [!]
- a few info adds
- Roms to correct (E)(F)(G) : 5 roms
- Roms to correct (J) : 26 roms
*********************************************************************************************************************
*********************************************************************************************************************
19/10/02 V1.4:
- Finish : -Centre Court Tennis (E) [!]
-Bust-A-Move 3 DX (E) [!]
- a few info adds
- Roms to correct (E)(F)(G) : 6 roms
- Roms to correct (J) : 42 roms
*********************************************************************************************************************
*********************************************************************************************************************
11/10/02 V1.3:
- Finish : -Triple Play 2000[!]
-HSV Adventure Racing (A)[!]
-Hydro Thunder (E) [!]
-Hydro Thunder (U) [!]
-New Tetris, The (U) [!]
-New Tetris, The (E) [!]
-Susume! Taisen Puzzle Dama Toukon! Marumata Chou (J) [!]
-South Park Rally (E) [!]
-South Park Rally (U) [!]
-Off Road Challenge (E) [!]
-Off Road Challenge (U) [!]
-Jikkyou G1 Stable (J) [!]
-Pokemon Stadium GS (J) [!]
-Akumajou Dracula Mokushiroku Gaiden-Legend of Cornell (J) [!]
-Les Razmoket - La Chasse Aux Tresors (F) [!]
-Looney Tunes - Duck Dodgers (E) [!]
-NFL Blitz - Special Edition (U) [!]
-Rugrats - Treasure Hunt (E) [!]
-AI Shogi 3 (J) [!]
-NHL Pro 99 (E) [!]
- Addings in a lot of roms.
- Roms to correct (E)(F)(G) : 8 roms
- Roms to correct (J) : 42 roms
- I have received news from Lnsop which agree to the spread of this file with some little changes
*********************************************************************************************************************
*********************************************************************************************************************
06/09/02 V1.2:
Insop has evolved his file in 1.11 (in english).
but i continue:
- I've collected extra infos
- I've improved the genre infos. ex: racing-rally.
- I must found infos on that games in (e),(u),(f),(g),(a)(22 roms):
Bust a move 3DX, Centre court Tennis, Hydro Thunder, South Park, Les Razmoket, Michael Owens, NBA Pro 98-99,
New Tetris, NFL Blitz, NHL Pro 99, Puzzle Bobble, Racing Simulation 2 (G),RTL soccer, Rugrats treasure hunt,
Super speed race, Telefoot soccer, Off-Road challenge
- and 47 japanese roms to finish.
*********************************************************************************************************************
*********************************************************************************************************************
25/09/02 V1.0:
I began with the fabulous file: Project64 RDX v1.1 - by lnsop
I've changed all the genres (that was some japanese or something like that!)
I've collected extra infos (on Nintendo.com et Nintendo.co.jp)
I've added the rom: Les Razmoket (F) which was added on the rdb file.
I've e-mailed linsop but i have no answer so i continue.
I leave the reference on my file because he has done 80% of the job !!!
***************
* Conclusion: *
***************
For finish, if you see some improvements to add:
- a genre which could be better (nobody's perfect)
- you know the genre of this games:
Zool - Majou Tsukai Densetsu (J) [!],
Super Speed Race 64 (J) [!],
Kuiki Uhabi Suigo (J) [!],
Fire Electric Pen (J) [!]
- an other unknown info (whith ??)
- a rom to add (only (!) roms)
e-mail me (perfectdarkfr@free.fr)

View File

@ -1,80 +0,0 @@
================================================
Project64, by Zilmar and Jabo
Copyright (c) 1998 - 2001
The Premiere Nintendo64 emulator for Windows
================================================
-------------------
Standard Disclaimer
-------------------
The N64 is a registered trademark of Nintendo, same goes for other companies mentioned above, or their products.
The authors are not affiliated with any of the companies mentioned, this software may be distributed for free, never sold in any way, as long as the original archive and software included is not modified in any way or distributed with ROM images.
You use this software at your own risk, the authors are not responsible for any loss or damage resulting from the use of this software. If you do not agree with these terms do not use this software, simple.
--------
Overview
--------
Project64 is an emulator that has been in developlment for a couple of years. We are proud to allow other people to use the product that we have made for their enjoyment. Project64 features emulation of the Reality Signal Processor, which was reverse engineered by zilmar. This information has produced an accurate interpreter that has turned in to a recompiler by jabo, setting it apart from some of the emulators in development today. Another feature in Project64 is an accurate and fast Display Processor graphics core for OpenGL and Direct3D, developed by jabo over the last few years.
--------
Features
--------
Internally Project64 features two advanced recompilers, for the R4300i and the RSP respectively, both based off of zilmar's original interpreters. Both the R4300i and RSP interpreters are available as alternatives to the recompilers via settings.
- The R4300i recompiler is written by zilmar. It features dynamic block creation and advanced optimizations due to it's register caching core. It also has self-mod protection schemes implemented to maximize compatibility and speed.
- The RSP recompiler is written by jabo. This compiler creates dynamic blocks of code, and optimizes the signal processor code through various code analysis techniques. It makes use of MMX and SSE to provide real-time emulation of this powerful co-processor.
Project64 uses high-level emulation for graphics, and low level emulation for audio. Jabo wrote Direct3D and OpenGL plugins for graphics, they have high quality blending and texturing, with several microcodes implemented from Mario64 to Zelda64 between the plugins. High level microcode emulation is optimized using SSE, and 3DNow!, and some parts of texturing have MMX optimizations.
--------------
Known Problems
--------------
Project64 is not perfect, there is some compatibility issues in terms of CPU, Graphics, and Audio that prevents games from functioning properly. See our support web site for a compatibility listing of games that are known to run with Project64, as well as problems that are known already.
Please do not expect games to be perfect, we put a lot of effort into this emulator, but every detail may not meet the guidelines for perfect emulation. If you want to experience games as they were meant to be played purchase a nintendo 64.
-------------------
Contact the Authors
-------------------
All our plugins use the Project64 plugin specifications, see our website for details.
=> Read this file entirely, use the message boards on the website for all feedback on PJ64, we do not have time to help people individually.
- If you don't at least meet the min requirements, don't ask us for help
- Do not ask if your system will work, or if we will support your hardware
- Do not ask us about games, we will not send them to you or tell you where to get them
- Do not ask us when a specific game will work
- Do not ask us when the next version will be out, for betas, or what features it will have
- Do not ask us about plugins we didn't write, contact the proper author
- Do not report problems with using our plugins in other emulators
- Do not email us files without permission
- Do not ask us about things not on pj64.net, like the message board, we have no control
no exceptions, if you want to ask these questions try a messageboard at our website.
http://www.pj64.net
You can reach us at the following email addresses, if it's feedback on pj64 please think about what you are asking, lots of emails get ignored because you either aren't supposed to email us these questions (read above), or it's answered in this file or through the extensive amount of information available on our support website.
jabo@emulation64.com, zilmar@emulation64.com
You can always find updated contact info on our website.
------------------
Credits and Greets
------------------
We would like to thank the following people for their support and help, in no specific order.
hWnd, Cricket, F|RES, rcp, _Demo_, Phrodide, icepir8, TNSe, gerrit, schibo, Azimer, Lemmy, LaC, Anarko, duddie, Bpoint, StrmnNrmn, slacka, smiff
As well as the people we have forgotten.
[EOF]

View File

@ -1,128 +0,0 @@
v1.6
R4300i core and executable
- support for rumble enabled controller plugins
- marked some memory allocations with execute flag
- game fixes for DK64, Hydro Thunder, etc
- enable perm cheats
- fixed gui issues
- reduced memory usage
Direct3D6
- Pilotwings no longer crashes
- Fixed drivers that have incorrect depth buffer caps
Direct3D8
- Added new plugin
RSP
- minor compiler tweaks for speed
Direct Input
- support for more axes
- warn user when configuring button already set
- rumble support using force feedback
====================================================
v1.5.1
Direct3D6
just a few tweaks made soon after v1.5 was released,
that hopefully helped with the "pausing" problem:
optimised texture cache
better matrix stack handling
optimized texture gen with SSE
less memory uses, faster searches
====================================================
v1.5
R4300i core and executable
- stack pointer optimisations (added SP Hack option)
- PIF2 emulation for Banjo-Tooie and Jet Force Gemini
- added new (default) self.-mod code method: Check Memory Advance
- added Delay SI Interrupt option for games broken in v1.4
- compiler resets when max code blocks reached rather than erroring
- more non-fatal error messages hidden in release builds
- improved game compatibility - refer to RDB
- fixed input plugins not showing in menu issue
- fixed possible crash during plugin selection
- fixed couple of causes of crash during rom load
- fixed several possible problems with state saving and loading
- allows saving and window switch while paused
- alt-tab should work better in Win2k/XP
- new rom loading method should fix Radeon+64MB rom issue
- cpu % counters should be more accurate
- added Hide Advanced Settings option
- added right click menus for rom browser and cheats
- added Always on Top option
- language file rewritten for more complete translations
- added first run selection for language
- opens settings dialog automatically when plugin missing
- better prevention of rom loading when plugins are not initialised
- end emulation in fullscreen doesn't mess up
- rom browser sort now saves by multiple columns
- rom browser window shrink bug fixed
- rom browser sorting by Genre works
- rom browser configuration saving moved to registry
- defaulted first column to Good Name
- removed User Notes box (still reads file)
- added ROM Notes tab
- fixed help file open in Win2k/XP
- fixed many bugs in menu item availibility, less crashes
- added and altered some shortcut keys
- added edit and delete cheats functions
- improved dialog, can enter many codes at once etc.
- nodes show partially selected cheats with grey ticks
- added serial repeater, activator and stacked activator support
- raised limits to 100 codes per cheat and 500 cheats per game
- added GS button support
- remembers window position, window can be resized
- removed 'mark all' button (caused problems)
- function keys work while cheat window open
- added option for remember selected cheats
RSP
- Implemented more opcodes in compiler
- Validated task lists before sending
Direct Input
- Analog stick range slider
- Set default button
Direct3D
- Better support for cards that lack blending & large textures
- Support for sprite microcodes
- Improved microcode detection
- Rewrote frame buffer emulation, new options to speed it up too
- Redesigned configuration dialog
- Anisotropic filtering slider
- Texture cache more reliable, and faster
- GeForce 3, 4 and Radeon support improved
- Lots of fixes for games, too many to list
Direct Sound
- Implemented volume control
- Cleaned up dialog

View File

@ -38,8 +38,8 @@ RSC=rc.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 0 # PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release" # PROP Output_Dir "../../Build/7zip/Release"
# PROP Intermediate_Dir "Release" # PROP Intermediate_Dir "../../Build/7zip/Release"
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c

View File

@ -3,12 +3,12 @@
<pre> <pre>
<h1>Build Log</h1> <h1>Build Log</h1>
<h3> <h3>
--------------------Configuration: 7zip - Win32 External Release-------------------- --------------------Configuration: 7zip - Win32 Release--------------------
</h3> </h3>
<h3>Command Lines</h3> <h3>Command Lines</h3>
Creating temporary file "C:\DOCUME~1\NICHOL~1\LOCALS~1\Temp\RSP707.tmp" with contents Creating temporary file "C:\DOCUME~1\NICHOL~1\LOCALS~1\Temp\RSPC52.tmp" with contents
[ [
/nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /Fp"../../Build/7zip/External/7zip.pch" /YX /Fo"../../Build/7zip/External/" /Fd"../../Build/7zip/External/" /FD /c /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /Fp"../../Build/7zip/Release/7zip.pch" /YX /Fo"../../Build/7zip/Release/" /Fd"../../Build/7zip/Release/" /FD /c
"D:\My Programs\Emulation\Projedt64\SOURCE\7zip\7zAlloc.c" "D:\My Programs\Emulation\Projedt64\SOURCE\7zip\7zAlloc.c"
"D:\My Programs\Emulation\Projedt64\SOURCE\7zip\7zBuffer.c" "D:\My Programs\Emulation\Projedt64\SOURCE\7zip\7zBuffer.c"
"D:\My Programs\Emulation\Projedt64\SOURCE\7zip\7zCrc.c" "D:\My Programs\Emulation\Projedt64\SOURCE\7zip\7zCrc.c"
@ -20,22 +20,22 @@ Creating temporary file "C:\DOCUME~1\NICHOL~1\LOCALS~1\Temp\RSP707.tmp" with con
"D:\My Programs\Emulation\Projedt64\SOURCE\7zip\7zMethodID.c" "D:\My Programs\Emulation\Projedt64\SOURCE\7zip\7zMethodID.c"
"D:\My Programs\Emulation\Projedt64\SOURCE\7zip\Compress\LzmaDecode.c" "D:\My Programs\Emulation\Projedt64\SOURCE\7zip\Compress\LzmaDecode.c"
] ]
Creating command line "cl.exe @C:\DOCUME~1\NICHOL~1\LOCALS~1\Temp\RSP707.tmp" Creating command line "cl.exe @C:\DOCUME~1\NICHOL~1\LOCALS~1\Temp\RSPC52.tmp"
Creating temporary file "C:\DOCUME~1\NICHOL~1\LOCALS~1\Temp\RSP708.tmp" with contents Creating temporary file "C:\DOCUME~1\NICHOL~1\LOCALS~1\Temp\RSPC53.tmp" with contents
[ [
/nologo /out:"../../Bin/External\7zip.lib" /nologo /out:"../../Build/7zip/Release\7zip.lib"
"\My Programs\Emulation\Projedt64\Build\7zip\External\7zAlloc.obj" "\My Programs\Emulation\Projedt64\Build\7zip\Release\7zAlloc.obj"
"\My Programs\Emulation\Projedt64\Build\7zip\External\7zBuffer.obj" "\My Programs\Emulation\Projedt64\Build\7zip\Release\7zBuffer.obj"
"\My Programs\Emulation\Projedt64\Build\7zip\External\7zCrc.obj" "\My Programs\Emulation\Projedt64\Build\7zip\Release\7zCrc.obj"
"\My Programs\Emulation\Projedt64\Build\7zip\External\7zDecode.obj" "\My Programs\Emulation\Projedt64\Build\7zip\Release\7zDecode.obj"
"\My Programs\Emulation\Projedt64\Build\7zip\External\7zExtract.obj" "\My Programs\Emulation\Projedt64\Build\7zip\Release\7zExtract.obj"
"\My Programs\Emulation\Projedt64\Build\7zip\External\7zHeader.obj" "\My Programs\Emulation\Projedt64\Build\7zip\Release\7zHeader.obj"
"\My Programs\Emulation\Projedt64\Build\7zip\External\7zIn.obj" "\My Programs\Emulation\Projedt64\Build\7zip\Release\7zIn.obj"
"\My Programs\Emulation\Projedt64\Build\7zip\External\7zItem.obj" "\My Programs\Emulation\Projedt64\Build\7zip\Release\7zItem.obj"
"\My Programs\Emulation\Projedt64\Build\7zip\External\7zMethodID.obj" "\My Programs\Emulation\Projedt64\Build\7zip\Release\7zMethodID.obj"
"\My Programs\Emulation\Projedt64\Build\7zip\External\LzmaDecode.obj" "\My Programs\Emulation\Projedt64\Build\7zip\Release\LzmaDecode.obj"
] ]
Creating command line "link.exe -lib @C:\DOCUME~1\NICHOL~1\LOCALS~1\Temp\RSP708.tmp" Creating command line "link.exe -lib @C:\DOCUME~1\NICHOL~1\LOCALS~1\Temp\RSPC53.tmp"
<h3>Output Window</h3> <h3>Output Window</h3>
Compiling... Compiling...
7zAlloc.c 7zAlloc.c

View File

@ -38,8 +38,8 @@ RSC=rc.exe
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 0 # PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release" # PROP Output_Dir "../../Build/Common/Release"
# PROP Intermediate_Dir "Release" # PROP Intermediate_Dir "../../Build/Common/Release"
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c

View File

@ -3,37 +3,63 @@
<pre> <pre>
<h1>Build Log</h1> <h1>Build Log</h1>
<h3> <h3>
--------------------Configuration: Common - Win32 Debug-------------------- --------------------Configuration: Common - Win32 Release--------------------
</h3> </h3>
<h3>Command Lines</h3> <h3>Command Lines</h3>
Creating temporary file "C:\DOCUME~1\NICHOL~1\LOCALS~1\Temp\RSP60.tmp" with contents Creating temporary file "C:\DOCUME~1\NICHOL~1\LOCALS~1\Temp\RSPC50.tmp" with contents
[ [
/nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /Fp"../../Build/Common/Debug/Common.pch" /Yc"stdafx.h" /Fo"../../Build/Common/Debug/" /Fd"../../Build/Common/Debug/" /FD /GZ /c /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /Fp"../../Build/Common/Release/Common.pch" /YX /Fo"../../Build/Common/Release/" /Fd"../../Build/Common/Release/" /FD /c
"D:\My Programs\Emulation\Project64\SOURCE\Common\stdafx.cpp" "D:\My Programs\Emulation\Projedt64\SOURCE\Common\File Class.cpp"
"D:\My Programs\Emulation\Projedt64\SOURCE\Common\Ini File Class.cpp"
"D:\My Programs\Emulation\Projedt64\SOURCE\Common\Log Class.cpp"
"D:\My Programs\Emulation\Projedt64\SOURCE\Common\md5.cpp"
"D:\My Programs\Emulation\Projedt64\SOURCE\Common\MemTest.cpp"
"D:\My Programs\Emulation\Projedt64\SOURCE\Common\osversion.cpp"
"D:\My Programs\Emulation\Projedt64\SOURCE\Common\path.cpp"
"D:\My Programs\Emulation\Projedt64\SOURCE\Common\registry.cpp"
"D:\My Programs\Emulation\Projedt64\SOURCE\Common\std string.cpp"
"D:\My Programs\Emulation\Projedt64\SOURCE\Common\stdafx.cpp"
"D:\My Programs\Emulation\Projedt64\SOURCE\Common\Trace.cpp"
"D:\My Programs\Emulation\Projedt64\SOURCE\Common\Version.cpp"
] ]
Creating command line "cl.exe @C:\DOCUME~1\NICHOL~1\LOCALS~1\Temp\RSP60.tmp" Creating command line "cl.exe @C:\DOCUME~1\NICHOL~1\LOCALS~1\Temp\RSPC50.tmp"
Creating temporary file "C:\DOCUME~1\NICHOL~1\LOCALS~1\Temp\RSPC51.tmp" with contents
[
/nologo /out:"../../Build/Common/Release\Common.lib"
"\My Programs\Emulation\Projedt64\Build\Common\Release\File Class.obj"
"\My Programs\Emulation\Projedt64\Build\Common\Release\Ini File Class.obj"
"\My Programs\Emulation\Projedt64\Build\Common\Release\Log Class.obj"
"\My Programs\Emulation\Projedt64\Build\Common\Release\md5.obj"
"\My Programs\Emulation\Projedt64\Build\Common\Release\MemTest.obj"
"\My Programs\Emulation\Projedt64\Build\Common\Release\osversion.obj"
"\My Programs\Emulation\Projedt64\Build\Common\Release\path.obj"
"\My Programs\Emulation\Projedt64\Build\Common\Release\registry.obj"
"\My Programs\Emulation\Projedt64\Build\Common\Release\std string.obj"
"\My Programs\Emulation\Projedt64\Build\Common\Release\stdafx.obj"
"\My Programs\Emulation\Projedt64\Build\Common\Release\Trace.obj"
"\My Programs\Emulation\Projedt64\Build\Common\Release\Version.obj"
]
Creating command line "link.exe -lib @C:\DOCUME~1\NICHOL~1\LOCALS~1\Temp\RSPC51.tmp"
<h3>Output Window</h3> <h3>Output Window</h3>
Compiling... Compiling...
File Class.cpp
Ini File Class.cpp
Log Class.cpp
md5.cpp
MemTest.cpp
osversion.cpp
path.cpp
registry.cpp
std string.cpp
stdafx.cpp stdafx.cpp
warning C4786: 'std::binary_function<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,bool>' : identifier was truncated to '255' characters in the debug information Trace.cpp
warning C4786: 'std::_Tree<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Kfn,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >' : identifier was truncated to '255' characters in the debug information Version.cpp
warning C4786: 'std::_Tree<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Kfn,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::const_iterator' : identifier was truncated to '255' characters in the debug information Creating library...
warning C4786: 'std::_Tree<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Kfn,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::iterator' : identifier was truncated to '255' characters in the debug information
warning C4786: 'std::_Tree<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Kfn,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Node' : identifier was truncated to '255' characters in the debug information
warning C4786: 'std::_Tree<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Kfn,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Redbl' : identifier was truncated to '255' characters in the debug information
warning C4786: 'std::_Tree<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,long>,std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,long,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<long> >::_Kfn,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<long> >' : identifier was truncated to '255' characters in the debug information
warning C4786: 'std::_Tree<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,long>,std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,long,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<long> >::_Kfn,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<long> >::const_iterator' : identifier was truncated to '255' characters in the debug information
warning C4786: 'std::_Tree<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,long>,std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,long,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<long> >::_Kfn,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<long> >::iterator' : identifier was truncated to '255' characters in the debug information
warning C4786: 'std::_Tree<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,long>,std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,long,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<long> >::_Kfn,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<long> >::_Node' : identifier was truncated to '255' characters in the debug information
warning C4786: 'std::_Tree<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,long>,std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,long,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<long> >::_Kfn,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<long> >::_Redbl' : identifier was truncated to '255' characters in the debug information
warning C4786: 'std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >' : identifier was truncated to '255' characters in the debug information
warning C4786: 'std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::value_compare' : identifier was truncated to '255' characters in the debug information
warning C4786: 'std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Kfn' : identifier was truncated to '255' characters in the debug information
<h3>Results</h3> <h3>Results</h3>
stdafx.obj - 0 error(s), 14 warning(s) Common.lib - 0 error(s), 0 warning(s)
</pre> </pre>
</body> </body>
</html> </html>

View File

@ -42,6 +42,7 @@ class CNotification;
#include "N64 System/Recompiler/Recompiler Memory.h" #include "N64 System/Recompiler/Recompiler Memory.h"
#include "N64 System/Recompiler/Reg Info.h" #include "N64 System/Recompiler/Reg Info.h"
#include "N64 System/Recompiler/Recompiler Ops.h" #include "N64 System/Recompiler/Recompiler Ops.h"
#include "N64 System/Mips/Memory Virtual Mem.h" //needs to inherit Recompiler ops
#include "N64 System/Recompiler/Exit Info.h" #include "N64 System/Recompiler/Exit Info.h"
#include "N64 System/Recompiler/Jump Info.h" #include "N64 System/Recompiler/Jump Info.h"
#include "N64 System/Recompiler/Code Section.h" #include "N64 System/Recompiler/Code Section.h"

View File

@ -490,12 +490,6 @@ void RefreshScreen( void )
CC_Core::RefreshScreen(); CC_Core::RefreshScreen();
} }
void ExecuteCycles(DWORD Cycles)
{
_Notify->BreakPoint(__FILE__,__LINE__);
//ExecuteInterpreterOps(Cycles);
}
void SyncSystem (void) void SyncSystem (void)
{ {
_N64System->SyncCPU(_SyncSystem); _N64System->SyncCPU(_SyncSystem);
@ -666,7 +660,7 @@ void TLB_Probe()
} }
void SyncToPC (void) { void SyncToPC (void) {
FixRandomReg(); //FixRandomReg();
SyncSystem (); SyncSystem ();
} }

View File

@ -67,7 +67,6 @@ BOOL Close_C_CPU ( void );
void StopEmulation ( void ); void StopEmulation ( void );
void __stdcall UpdateSyncCPU ( DWORD const Cycles ); void __stdcall UpdateSyncCPU ( DWORD const Cycles );
void StartInterpreterCPU ( void ); void StartInterpreterCPU ( void );
void ExecuteCycles ( DWORD Cycles );
void SyncSystem ( void ); void SyncSystem ( void );
BOOL Machine_LoadState ( void ); BOOL Machine_LoadState ( void );
BOOL Machine_SaveState ( void ); BOOL Machine_SaveState ( void );
@ -128,7 +127,11 @@ extern CONTROL * g_Controllers;
extern enum SystemType g_SystemType; extern enum SystemType g_SystemType;
//Memory //Memory
extern DWORD * g_TLB_ReadMap, * g_TLB_WriteMap, g_RdramSize, g_SystemRdramSize; #ifdef toremove
extern DWORD * g_TLB_ReadMap, * g_TLB_WriteMap, g_SystemRdramSize;
#endif
extern DWORD g_RdramSize;
//Misc //Misc
enum { NoOfFrames = 7 }; enum { NoOfFrames = 7 };

View File

@ -31,11 +31,11 @@
void OnFirstDMA (void) { void OnFirstDMA (void) {
switch (CicChip) { switch (CicChip) {
case 1: *(DWORD *)&((_MMU->Rdram())[0x318]) = RdramSize; break; case 1: *(DWORD *)&((_MMU->Rdram())[0x318]) = g_RdramSize; break;
case 2: *(DWORD *)&((_MMU->Rdram())[0x318]) = RdramSize; break; case 2: *(DWORD *)&((_MMU->Rdram())[0x318]) = g_RdramSize; break;
case 3: *(DWORD *)&((_MMU->Rdram())[0x318]) = RdramSize; break; case 3: *(DWORD *)&((_MMU->Rdram())[0x318]) = g_RdramSize; break;
case 5: *(DWORD *)&((_MMU->Rdram())[0x3F0]) = RdramSize; break; case 5: *(DWORD *)&((_MMU->Rdram())[0x3F0]) = g_RdramSize; break;
case 6: *(DWORD *)&((_MMU->Rdram())[0x318]) = RdramSize; break; case 6: *(DWORD *)&((_MMU->Rdram())[0x318]) = g_RdramSize; break;
default: DisplayError("Unhandled CicChip(%d) in first DMA",CicChip); default: DisplayError("Unhandled CicChip(%d) in first DMA",CicChip);
} }
} }

View File

@ -1,3 +1,5 @@
#ifdef toremove
/* /*
* Project 64 - A Nintendo 64 emulator. * Project 64 - A Nintendo 64 emulator.
* *
@ -36,3 +38,5 @@ void ExecuteInterpreterOps ( DWORD Cycles );
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif

View File

@ -203,205 +203,208 @@ LRESULT CALLBACK LogGeneralProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
} }
void Log_LW (DWORD PC, DWORD VAddr) { void Log_LW (DWORD PC, DWORD VAddr) {
DWORD Value;
if (!LogOptions.GenerateLog) { return; } if (!LogOptions.GenerateLog) { return; }
if ( VAddr < 0xA0000000 || VAddr >= 0xC0000000 ) { if ( VAddr < 0xA0000000 || VAddr >= 0xC0000000 )
if (TLB_ReadMap[VAddr >> 12] == 0) { return; } {
__try { DWORD PAddr;
Value = *(DWORD *)(TLB_ReadMap[VAddr >> 12] + VAddr); if (!_TransVaddr->TranslateVaddr(VAddr,PAddr))
} __except( EXCEPTION_EXECUTE_HANDLER ) { {
if (!LogOptions.LogUnknown) { return; } if (LogOptions.LogUnknown)
LogMessage("%08X: read from unknown ??? (%08X)",PC,VAddr); {
} LogMessage("%08X: read from unknown ??? (%08X)",PC,VAddr);
} else {
if ( VAddr >= 0xA0000000 && VAddr < (0xA0000000 + RdramSize)) { return; }
if ( VAddr >= 0xA3F00000 && VAddr <= 0xA3F00024) {
if (!LogOptions.LogRDRamRegisters) { return; }
_MMU->LW_VAddr(VAddr,Value);
switch (VAddr) {
case 0xA3F00000: LogMessage("%08X: read from RDRAM_CONFIG_REG/RDRAM_DEVICE_TYPE_REG (%08X)",PC, Value); return;
case 0xA3F00004: LogMessage("%08X: read from RDRAM_DEVICE_ID_REG (%08X)",PC, Value); return;
case 0xA3F00008: LogMessage("%08X: read from RDRAM_DELAY_REG (%08X)",PC, Value); return;
case 0xA3F0000C: LogMessage("%08X: read from RDRAM_MODE_REG (%08X)",PC, Value); return;
case 0xA3F00010: LogMessage("%08X: read from RDRAM_REF_INTERVAL_REG (%08X)",PC, Value); return;
case 0xA3F00014: LogMessage("%08X: read from RDRAM_REF_ROW_REG (%08X)",PC, Value); return;
case 0xA3F00018: LogMessage("%08X: read from RDRAM_RAS_INTERVAL_REG (%08X)",PC, Value); return;
case 0xA3F0001C: LogMessage("%08X: read from RDRAM_MIN_INTERVAL_REG (%08X)",PC, Value); return;
case 0xA3F00020: LogMessage("%08X: read from RDRAM_ADDR_SELECT_REG (%08X)",PC, Value); return;
case 0xA3F00024: LogMessage("%08X: read from RDRAM_DEVICE_MANUF_REG (%08X)",PC, Value); return;
} }
return;
} }
VAddr = PAddr + 0xA0000000;
}
DWORD Value;
if ( VAddr >= 0xA0000000 && VAddr < (0xA0000000 + RdramSize)) { return; }
if ( VAddr >= 0xA3F00000 && VAddr <= 0xA3F00024) {
if (!LogOptions.LogRDRamRegisters) { return; }
_MMU->LW_VAddr(VAddr,Value);
if ( VAddr >= 0xA4000000 && VAddr <= 0xA4001FFC ) { return; } switch (VAddr) {
if ( VAddr >= 0xA4040000 && VAddr <= 0xA404001C ) { case 0xA3F00000: LogMessage("%08X: read from RDRAM_CONFIG_REG/RDRAM_DEVICE_TYPE_REG (%08X)",PC, Value); return;
if (!LogOptions.LogSPRegisters) { return; } case 0xA3F00004: LogMessage("%08X: read from RDRAM_DEVICE_ID_REG (%08X)",PC, Value); return;
_MMU->LW_VAddr(VAddr,Value); case 0xA3F00008: LogMessage("%08X: read from RDRAM_DELAY_REG (%08X)",PC, Value); return;
case 0xA3F0000C: LogMessage("%08X: read from RDRAM_MODE_REG (%08X)",PC, Value); return;
switch (VAddr) { case 0xA3F00010: LogMessage("%08X: read from RDRAM_REF_INTERVAL_REG (%08X)",PC, Value); return;
case 0xA4040000: LogMessage("%08X: read from SP_MEM_ADDR_REG (%08X)",PC, Value); break; case 0xA3F00014: LogMessage("%08X: read from RDRAM_REF_ROW_REG (%08X)",PC, Value); return;
case 0xA4040004: LogMessage("%08X: read from SP_DRAM_ADDR_REG (%08X)",PC, Value); break; case 0xA3F00018: LogMessage("%08X: read from RDRAM_RAS_INTERVAL_REG (%08X)",PC, Value); return;
case 0xA4040008: LogMessage("%08X: read from SP_RD_LEN_REG (%08X)",PC, Value); break; case 0xA3F0001C: LogMessage("%08X: read from RDRAM_MIN_INTERVAL_REG (%08X)",PC, Value); return;
case 0xA404000C: LogMessage("%08X: read from SP_WR_LEN_REG (%08X)",PC, Value); break; case 0xA3F00020: LogMessage("%08X: read from RDRAM_ADDR_SELECT_REG (%08X)",PC, Value); return;
case 0xA4040010: LogMessage("%08X: read from SP_STATUS_REG (%08X)",PC, Value); break; case 0xA3F00024: LogMessage("%08X: read from RDRAM_DEVICE_MANUF_REG (%08X)",PC, Value); return;
case 0xA4040014: LogMessage("%08X: read from SP_DMA_FULL_REG (%08X)",PC, Value); break;
case 0xA4040018: LogMessage("%08X: read from SP_DMA_BUSY_REG (%08X)",PC, Value); break;
case 0xA404001C: LogMessage("%08X: read from SP_SEMAPHORE_REG (%08X)",PC, Value); break;
}
return;
}
if ( VAddr == 0xA4080000) {
if (!LogOptions.LogSPRegisters) { return; }
_MMU->LW_VAddr(VAddr,Value);
LogMessage("%08X: read from SP_PC (%08X)",PC, Value);
return;
} }
if (VAddr >= 0xA4100000 && VAddr <= 0xA410001C) {
if (!LogOptions.LogDPCRegisters) { return; }
_MMU->LW_VAddr(VAddr,Value);
switch (VAddr) {
case 0xA4100000: LogMessage("%08X: read from DPC_START_REG (%08X)",PC, Value); return;
case 0xA4100004: LogMessage("%08X: read from DPC_END_REG (%08X)",PC, Value); return;
case 0xA4100008: LogMessage("%08X: read from DPC_CURRENT_REG (%08X)",PC, Value); return;
case 0xA410000C: LogMessage("%08X: read from DPC_STATUS_REG (%08X)",PC, Value); return;
case 0xA4100010: LogMessage("%08X: read from DPC_CLOCK_REG (%08X)",PC, Value); return;
case 0xA4100014: LogMessage("%08X: read from DPC_BUFBUSY_REG (%08X)",PC, Value); return;
case 0xA4100018: LogMessage("%08X: read from DPC_PIPEBUSY_REG (%08X)",PC, Value); return;
case 0xA410001C: LogMessage("%08X: read from DPC_TMEM_REG (%08X)",PC, Value); return;
}
}
if (VAddr >= 0xA4300000 && VAddr <= 0xA430000C) {
if (!LogOptions.LogMIPSInterface) { return; }
_MMU->LW_VAddr(VAddr,Value);
switch (VAddr) {
case 0xA4300000: LogMessage("%08X: read from MI_INIT_MODE_REG/MI_MODE_REG (%08X)",PC, Value); return;
case 0xA4300004: LogMessage("%08X: read from MI_VERSION_REG/MI_NOOP_REG (%08X)",PC, Value); return;
case 0xA4300008: LogMessage("%08X: read from MI_INTR_REG (%08X)",PC, Value); return;
case 0xA430000C: LogMessage("%08X: read from MI_INTR_MASK_REG (%08X)",PC, Value); return;
}
}
if (VAddr >= 0xA4400000 && VAddr <= 0xA4400034) {
if (!LogOptions.LogVideoInterface) { return; }
_MMU->LW_VAddr(VAddr,Value);
switch (VAddr) {
case 0xA4400000: LogMessage("%08X: read from VI_STATUS_REG/VI_CONTROL_REG (%08X)",PC, Value); return;
case 0xA4400004: LogMessage("%08X: read from VI_ORIGIN_REG/VI_DRAM_ADDR_REG (%08X)",PC, Value); return;
case 0xA4400008: LogMessage("%08X: read from VI_WIDTH_REG/VI_H_WIDTH_REG (%08X)",PC, Value); return;
case 0xA440000C: LogMessage("%08X: read from VI_INTR_REG/VI_V_INTR_REG (%08X)",PC, Value); return;
case 0xA4400010: LogMessage("%08X: read from VI_CURRENT_REG/VI_V_CURRENT_LINE_REG (%08X)",PC, Value); return;
case 0xA4400014: LogMessage("%08X: read from VI_BURST_REG/VI_TIMING_REG (%08X)",PC, Value); return;
case 0xA4400018: LogMessage("%08X: read from VI_V_SYNC_REG (%08X)",PC, Value); return;
case 0xA440001C: LogMessage("%08X: read from VI_H_SYNC_REG (%08X)",PC, Value); return;
case 0xA4400020: LogMessage("%08X: read from VI_LEAP_REG/VI_H_SYNC_LEAP_REG (%08X)",PC, Value); return;
case 0xA4400024: LogMessage("%08X: read from VI_H_START_REG/VI_H_VIDEO_REG (%08X)",PC, Value); return;
case 0xA4400028: LogMessage("%08X: read from VI_V_START_REG/VI_V_VIDEO_REG (%08X)",PC, Value); return;
case 0xA440002C: LogMessage("%08X: read from VI_V_BURST_REG (%08X)",PC, Value); return;
case 0xA4400030: LogMessage("%08X: read from VI_X_SCALE_REG (%08X)",PC, Value); return;
case 0xA4400034: LogMessage("%08X: read from VI_Y_SCALE_REG (%08X)",PC, Value); return;
}
}
if (VAddr >= 0xA4500000 && VAddr <= 0xA4500014) {
if (!LogOptions.LogAudioInterface) { return; }
_MMU->LW_VAddr(VAddr,Value);
switch (VAddr) {
case 0xA4500000: LogMessage("%08X: read from AI_DRAM_ADDR_REG (%08X)",PC, Value); return;
case 0xA4500004: LogMessage("%08X: read from AI_LEN_REG (%08X)",PC, Value); return;
case 0xA4500008: LogMessage("%08X: read from AI_CONTROL_REG (%08X)",PC, Value); return;
case 0xA450000C: LogMessage("%08X: read from AI_STATUS_REG (%08X)",PC, Value); return;
case 0xA4500010: LogMessage("%08X: read from AI_DACRATE_REG (%08X)",PC, Value); return;
case 0xA4500014: LogMessage("%08X: read from AI_BITRATE_REG (%08X)",PC, Value); return;
}
}
if (VAddr >= 0xA4600000 && VAddr <= 0xA4600030) {
if (!LogOptions.LogPerInterface) { return; }
_MMU->LW_VAddr(VAddr,Value);
switch (VAddr) {
case 0xA4600000: LogMessage("%08X: read from PI_DRAM_ADDR_REG (%08X)",PC, Value); return;
case 0xA4600004: LogMessage("%08X: read from PI_CART_ADDR_REG (%08X)",PC, Value); return;
case 0xA4600008: LogMessage("%08X: read from PI_RD_LEN_REG (%08X)",PC, Value); return;
case 0xA460000C: LogMessage("%08X: read from PI_WR_LEN_REG (%08X)",PC, Value); return;
case 0xA4600010: LogMessage("%08X: read from PI_STATUS_REG (%08X)",PC, Value); return;
case 0xA4600014: LogMessage("%08X: read from PI_BSD_DOM1_LAT_REG/PI_DOMAIN1_REG (%08X)",PC, Value); return;
case 0xA4600018: LogMessage("%08X: read from PI_BSD_DOM1_PWD_REG (%08X)",PC, Value); return;
case 0xA460001C: LogMessage("%08X: read from PI_BSD_DOM1_PGS_REG (%08X)",PC, Value); return;
case 0xA4600020: LogMessage("%08X: read from PI_BSD_DOM1_RLS_REG (%08X)",PC, Value); return;
case 0xA4600024: LogMessage("%08X: read from PI_BSD_DOM2_LAT_REG/PI_DOMAIN2_REG (%08X)",PC, Value); return;
case 0xA4600028: LogMessage("%08X: read from PI_BSD_DOM2_PWD_REG (%08X)",PC, Value); return;
case 0xA460002C: LogMessage("%08X: read from PI_BSD_DOM2_PGS_REG (%08X)",PC, Value); return;
case 0xA4600030: LogMessage("%08X: read from PI_BSD_DOM2_RLS_REG (%08X)",PC, Value); return;
}
}
if (VAddr >= 0xA4700000 && VAddr <= 0xA470001C) {
if (!LogOptions.LogRDRAMInterface) { return; }
_MMU->LW_VAddr(VAddr,Value);
switch (VAddr) {
case 0xA4700000: LogMessage("%08X: read from RI_MODE_REG (%08X)",PC, Value); return;
case 0xA4700004: LogMessage("%08X: read from RI_CONFIG_REG (%08X)",PC, Value); return;
case 0xA4700008: LogMessage("%08X: read from RI_CURRENT_LOAD_REG (%08X)",PC, Value); return;
case 0xA470000C: LogMessage("%08X: read from RI_SELECT_REG (%08X)",PC, Value); return;
case 0xA4700010: LogMessage("%08X: read from RI_REFRESH_REG/RI_COUNT_REG (%08X)",PC, Value); return;
case 0xA4700014: LogMessage("%08X: read from RI_LATENCY_REG (%08X)",PC, Value); return;
case 0xA4700018: LogMessage("%08X: read from RI_RERROR_REG (%08X)",PC, Value); return;
case 0xA470001C: LogMessage("%08X: read from RI_WERROR_REG (%08X)",PC, Value); return;
}
}
if ( VAddr == 0xA4800000) {
if (!LogOptions.LogSerialInterface) { return; }
_MMU->LW_VAddr(VAddr,Value);
LogMessage("%08X: read from SI_DRAM_ADDR_REG (%08X)",PC, Value);
return;
}
if ( VAddr == 0xA4800004) {
if (!LogOptions.LogSerialInterface) { return; }
_MMU->LW_VAddr(VAddr,Value);
LogMessage("%08X: read from SI_PIF_ADDR_RD64B_REG (%08X)",PC, Value);
return;
}
if ( VAddr == 0xA4800010) {
if (!LogOptions.LogSerialInterface) { return; }
_MMU->LW_VAddr(VAddr,Value);
LogMessage("%08X: read from SI_PIF_ADDR_WR64B_REG (%08X)",PC, Value);
return;
}
if ( VAddr == 0xA4800018) {
if (!LogOptions.LogSerialInterface) { return; }
_MMU->LW_VAddr(VAddr,Value);
LogMessage("%08X: read from SI_STATUS_REG (%08X)",PC, Value);
return;
}
if ( VAddr >= 0xBFC00000 && VAddr <= 0xBFC007C0 ) { return; }
if ( VAddr >= 0xBFC007C0 && VAddr <= 0xBFC007FC ) {
if (!LogOptions.LogPRDirectMemLoads) { return; }
_MMU->LW_VAddr(VAddr,Value);
LogMessage("%08X: read word from Pif Ram at 0x%X (%08X)",PC,VAddr - 0xBFC007C0, Value);
return;
}
if ( VAddr >= 0xB0000040 && ((VAddr - 0xB0000000) < RomFileSize)) { return; }
if ( VAddr >= 0xB0000000 && VAddr < 0xB0000040) {
if (!LogOptions.LogRomHeader) { return; }
_MMU->LW_VAddr(VAddr,Value);
switch (VAddr) {
case 0xB0000004: LogMessage("%08X: read from Rom Clock Rate (%08X)",PC, Value); break;
case 0xB0000008: LogMessage("%08X: read from Rom Boot address offset (%08X)",PC, Value); break;
case 0xB000000C: LogMessage("%08X: read from Rom Release offset (%08X)",PC, Value); break;
case 0xB0000010: LogMessage("%08X: read from Rom CRC1 (%08X)",PC, Value); break;
case 0xB0000014: LogMessage("%08X: read from Rom CRC2 (%08X)",PC, Value); break;
default: LogMessage("%08X: read from Rom header 0x%X (%08X)",PC, VAddr & 0xFF,Value); break;
}
return;
}
if (!LogOptions.LogUnknown) { return; }
LogMessage("%08X: read from unknown ??? (%08X)",PC,VAddr);
} }
if ( VAddr >= 0xA4000000 && VAddr <= 0xA4001FFC ) { return; }
if ( VAddr >= 0xA4040000 && VAddr <= 0xA404001C ) {
if (!LogOptions.LogSPRegisters) { return; }
_MMU->LW_VAddr(VAddr,Value);
switch (VAddr) {
case 0xA4040000: LogMessage("%08X: read from SP_MEM_ADDR_REG (%08X)",PC, Value); break;
case 0xA4040004: LogMessage("%08X: read from SP_DRAM_ADDR_REG (%08X)",PC, Value); break;
case 0xA4040008: LogMessage("%08X: read from SP_RD_LEN_REG (%08X)",PC, Value); break;
case 0xA404000C: LogMessage("%08X: read from SP_WR_LEN_REG (%08X)",PC, Value); break;
case 0xA4040010: LogMessage("%08X: read from SP_STATUS_REG (%08X)",PC, Value); break;
case 0xA4040014: LogMessage("%08X: read from SP_DMA_FULL_REG (%08X)",PC, Value); break;
case 0xA4040018: LogMessage("%08X: read from SP_DMA_BUSY_REG (%08X)",PC, Value); break;
case 0xA404001C: LogMessage("%08X: read from SP_SEMAPHORE_REG (%08X)",PC, Value); break;
}
return;
}
if ( VAddr == 0xA4080000) {
if (!LogOptions.LogSPRegisters) { return; }
_MMU->LW_VAddr(VAddr,Value);
LogMessage("%08X: read from SP_PC (%08X)",PC, Value);
return;
}
if (VAddr >= 0xA4100000 && VAddr <= 0xA410001C) {
if (!LogOptions.LogDPCRegisters) { return; }
_MMU->LW_VAddr(VAddr,Value);
switch (VAddr) {
case 0xA4100000: LogMessage("%08X: read from DPC_START_REG (%08X)",PC, Value); return;
case 0xA4100004: LogMessage("%08X: read from DPC_END_REG (%08X)",PC, Value); return;
case 0xA4100008: LogMessage("%08X: read from DPC_CURRENT_REG (%08X)",PC, Value); return;
case 0xA410000C: LogMessage("%08X: read from DPC_STATUS_REG (%08X)",PC, Value); return;
case 0xA4100010: LogMessage("%08X: read from DPC_CLOCK_REG (%08X)",PC, Value); return;
case 0xA4100014: LogMessage("%08X: read from DPC_BUFBUSY_REG (%08X)",PC, Value); return;
case 0xA4100018: LogMessage("%08X: read from DPC_PIPEBUSY_REG (%08X)",PC, Value); return;
case 0xA410001C: LogMessage("%08X: read from DPC_TMEM_REG (%08X)",PC, Value); return;
}
}
if (VAddr >= 0xA4300000 && VAddr <= 0xA430000C) {
if (!LogOptions.LogMIPSInterface) { return; }
_MMU->LW_VAddr(VAddr,Value);
switch (VAddr) {
case 0xA4300000: LogMessage("%08X: read from MI_INIT_MODE_REG/MI_MODE_REG (%08X)",PC, Value); return;
case 0xA4300004: LogMessage("%08X: read from MI_VERSION_REG/MI_NOOP_REG (%08X)",PC, Value); return;
case 0xA4300008: LogMessage("%08X: read from MI_INTR_REG (%08X)",PC, Value); return;
case 0xA430000C: LogMessage("%08X: read from MI_INTR_MASK_REG (%08X)",PC, Value); return;
}
}
if (VAddr >= 0xA4400000 && VAddr <= 0xA4400034) {
if (!LogOptions.LogVideoInterface) { return; }
_MMU->LW_VAddr(VAddr,Value);
switch (VAddr) {
case 0xA4400000: LogMessage("%08X: read from VI_STATUS_REG/VI_CONTROL_REG (%08X)",PC, Value); return;
case 0xA4400004: LogMessage("%08X: read from VI_ORIGIN_REG/VI_DRAM_ADDR_REG (%08X)",PC, Value); return;
case 0xA4400008: LogMessage("%08X: read from VI_WIDTH_REG/VI_H_WIDTH_REG (%08X)",PC, Value); return;
case 0xA440000C: LogMessage("%08X: read from VI_INTR_REG/VI_V_INTR_REG (%08X)",PC, Value); return;
case 0xA4400010: LogMessage("%08X: read from VI_CURRENT_REG/VI_V_CURRENT_LINE_REG (%08X)",PC, Value); return;
case 0xA4400014: LogMessage("%08X: read from VI_BURST_REG/VI_TIMING_REG (%08X)",PC, Value); return;
case 0xA4400018: LogMessage("%08X: read from VI_V_SYNC_REG (%08X)",PC, Value); return;
case 0xA440001C: LogMessage("%08X: read from VI_H_SYNC_REG (%08X)",PC, Value); return;
case 0xA4400020: LogMessage("%08X: read from VI_LEAP_REG/VI_H_SYNC_LEAP_REG (%08X)",PC, Value); return;
case 0xA4400024: LogMessage("%08X: read from VI_H_START_REG/VI_H_VIDEO_REG (%08X)",PC, Value); return;
case 0xA4400028: LogMessage("%08X: read from VI_V_START_REG/VI_V_VIDEO_REG (%08X)",PC, Value); return;
case 0xA440002C: LogMessage("%08X: read from VI_V_BURST_REG (%08X)",PC, Value); return;
case 0xA4400030: LogMessage("%08X: read from VI_X_SCALE_REG (%08X)",PC, Value); return;
case 0xA4400034: LogMessage("%08X: read from VI_Y_SCALE_REG (%08X)",PC, Value); return;
}
}
if (VAddr >= 0xA4500000 && VAddr <= 0xA4500014) {
if (!LogOptions.LogAudioInterface) { return; }
_MMU->LW_VAddr(VAddr,Value);
switch (VAddr) {
case 0xA4500000: LogMessage("%08X: read from AI_DRAM_ADDR_REG (%08X)",PC, Value); return;
case 0xA4500004: LogMessage("%08X: read from AI_LEN_REG (%08X)",PC, Value); return;
case 0xA4500008: LogMessage("%08X: read from AI_CONTROL_REG (%08X)",PC, Value); return;
case 0xA450000C: LogMessage("%08X: read from AI_STATUS_REG (%08X)",PC, Value); return;
case 0xA4500010: LogMessage("%08X: read from AI_DACRATE_REG (%08X)",PC, Value); return;
case 0xA4500014: LogMessage("%08X: read from AI_BITRATE_REG (%08X)",PC, Value); return;
}
}
if (VAddr >= 0xA4600000 && VAddr <= 0xA4600030) {
if (!LogOptions.LogPerInterface) { return; }
_MMU->LW_VAddr(VAddr,Value);
switch (VAddr) {
case 0xA4600000: LogMessage("%08X: read from PI_DRAM_ADDR_REG (%08X)",PC, Value); return;
case 0xA4600004: LogMessage("%08X: read from PI_CART_ADDR_REG (%08X)",PC, Value); return;
case 0xA4600008: LogMessage("%08X: read from PI_RD_LEN_REG (%08X)",PC, Value); return;
case 0xA460000C: LogMessage("%08X: read from PI_WR_LEN_REG (%08X)",PC, Value); return;
case 0xA4600010: LogMessage("%08X: read from PI_STATUS_REG (%08X)",PC, Value); return;
case 0xA4600014: LogMessage("%08X: read from PI_BSD_DOM1_LAT_REG/PI_DOMAIN1_REG (%08X)",PC, Value); return;
case 0xA4600018: LogMessage("%08X: read from PI_BSD_DOM1_PWD_REG (%08X)",PC, Value); return;
case 0xA460001C: LogMessage("%08X: read from PI_BSD_DOM1_PGS_REG (%08X)",PC, Value); return;
case 0xA4600020: LogMessage("%08X: read from PI_BSD_DOM1_RLS_REG (%08X)",PC, Value); return;
case 0xA4600024: LogMessage("%08X: read from PI_BSD_DOM2_LAT_REG/PI_DOMAIN2_REG (%08X)",PC, Value); return;
case 0xA4600028: LogMessage("%08X: read from PI_BSD_DOM2_PWD_REG (%08X)",PC, Value); return;
case 0xA460002C: LogMessage("%08X: read from PI_BSD_DOM2_PGS_REG (%08X)",PC, Value); return;
case 0xA4600030: LogMessage("%08X: read from PI_BSD_DOM2_RLS_REG (%08X)",PC, Value); return;
}
}
if (VAddr >= 0xA4700000 && VAddr <= 0xA470001C) {
if (!LogOptions.LogRDRAMInterface) { return; }
_MMU->LW_VAddr(VAddr,Value);
switch (VAddr) {
case 0xA4700000: LogMessage("%08X: read from RI_MODE_REG (%08X)",PC, Value); return;
case 0xA4700004: LogMessage("%08X: read from RI_CONFIG_REG (%08X)",PC, Value); return;
case 0xA4700008: LogMessage("%08X: read from RI_CURRENT_LOAD_REG (%08X)",PC, Value); return;
case 0xA470000C: LogMessage("%08X: read from RI_SELECT_REG (%08X)",PC, Value); return;
case 0xA4700010: LogMessage("%08X: read from RI_REFRESH_REG/RI_COUNT_REG (%08X)",PC, Value); return;
case 0xA4700014: LogMessage("%08X: read from RI_LATENCY_REG (%08X)",PC, Value); return;
case 0xA4700018: LogMessage("%08X: read from RI_RERROR_REG (%08X)",PC, Value); return;
case 0xA470001C: LogMessage("%08X: read from RI_WERROR_REG (%08X)",PC, Value); return;
}
}
if ( VAddr == 0xA4800000) {
if (!LogOptions.LogSerialInterface) { return; }
_MMU->LW_VAddr(VAddr,Value);
LogMessage("%08X: read from SI_DRAM_ADDR_REG (%08X)",PC, Value);
return;
}
if ( VAddr == 0xA4800004) {
if (!LogOptions.LogSerialInterface) { return; }
_MMU->LW_VAddr(VAddr,Value);
LogMessage("%08X: read from SI_PIF_ADDR_RD64B_REG (%08X)",PC, Value);
return;
}
if ( VAddr == 0xA4800010) {
if (!LogOptions.LogSerialInterface) { return; }
_MMU->LW_VAddr(VAddr,Value);
LogMessage("%08X: read from SI_PIF_ADDR_WR64B_REG (%08X)",PC, Value);
return;
}
if ( VAddr == 0xA4800018) {
if (!LogOptions.LogSerialInterface) { return; }
_MMU->LW_VAddr(VAddr,Value);
LogMessage("%08X: read from SI_STATUS_REG (%08X)",PC, Value);
return;
}
if ( VAddr >= 0xBFC00000 && VAddr <= 0xBFC007C0 ) { return; }
if ( VAddr >= 0xBFC007C0 && VAddr <= 0xBFC007FC ) {
if (!LogOptions.LogPRDirectMemLoads) { return; }
_MMU->LW_VAddr(VAddr,Value);
LogMessage("%08X: read word from Pif Ram at 0x%X (%08X)",PC,VAddr - 0xBFC007C0, Value);
return;
}
if ( VAddr >= 0xB0000040 && ((VAddr - 0xB0000000) < RomFileSize)) { return; }
if ( VAddr >= 0xB0000000 && VAddr < 0xB0000040) {
if (!LogOptions.LogRomHeader) { return; }
_MMU->LW_VAddr(VAddr,Value);
switch (VAddr) {
case 0xB0000004: LogMessage("%08X: read from Rom Clock Rate (%08X)",PC, Value); break;
case 0xB0000008: LogMessage("%08X: read from Rom Boot address offset (%08X)",PC, Value); break;
case 0xB000000C: LogMessage("%08X: read from Rom Release offset (%08X)",PC, Value); break;
case 0xB0000010: LogMessage("%08X: read from Rom CRC1 (%08X)",PC, Value); break;
case 0xB0000014: LogMessage("%08X: read from Rom CRC2 (%08X)",PC, Value); break;
default: LogMessage("%08X: read from Rom header 0x%X (%08X)",PC, VAddr & 0xFF,Value); break;
}
return;
}
if (!LogOptions.LogUnknown) { return; }
LogMessage("%08X: read from unknown ??? (%08X)",PC,VAddr);
} }
void __cdecl LogMessage (char * Message, ...) { void __cdecl LogMessage (char * Message, ...) {
@ -424,18 +427,20 @@ void __cdecl LogMessage (char * Message, ...) {
void Log_SW (DWORD PC, DWORD VAddr, DWORD Value) { void Log_SW (DWORD PC, DWORD VAddr, DWORD Value) {
if (!LogOptions.GenerateLog) { return; } if (!LogOptions.GenerateLog) { return; }
if ( VAddr < 0xA0000000 || VAddr >= 0xC0000000 ) { if ( VAddr < 0xA0000000 || VAddr >= 0xC0000000 )
DWORD LoadValue; {
DWORD PAddr;
if (TLB_ReadMap[VAddr >> 12] == 0) { return; } if (!_TransVaddr->TranslateVaddr(VAddr,PAddr))
__try { {
LoadValue = *(DWORD *)(TLB_ReadMap[VAddr >> 12] + VAddr); if (LogOptions.LogUnknown)
} __except( EXCEPTION_EXECUTE_HANDLER ) { {
if (!LogOptions.LogUnknown) { return; } LogMessage("%08X: Writing 0x%08X to %08X",PC, Value, VAddr );
LogMessage("%08X: Writing 0x%08X to %08X",PC, Value, VAddr ); }
return;
} }
return; VAddr = PAddr + 0xA0000000;
} }
if ( VAddr >= 0xA0000000 && VAddr < (0xA0000000 + RdramSize)) { return; } if ( VAddr >= 0xA0000000 && VAddr < (0xA0000000 + RdramSize)) { return; }
if ( VAddr >= 0xA3F00000 && VAddr <= 0xA3F00024) { if ( VAddr >= 0xA3F00000 && VAddr <= 0xA3F00024) {
if (!LogOptions.LogRDRamRegisters) { return; } if (!LogOptions.LogRDRamRegisters) { return; }

View File

@ -23,6 +23,7 @@
* should be forwarded to them so if they want them. * should be forwarded to them so if they want them.
* *
*/ */
#ifdef tofix
#include <Windows.h> #include <Windows.h>
#include <commctrl.h> #include <commctrl.h>
#include <stdio.h> #include <stdio.h>
@ -44,7 +45,6 @@ void FixRandomReg (void) {
} }
} }
#ifdef tofix
BOOL DisplaySectionInformation (BLOCK_SECTION * Section, DWORD ID, DWORD Test); BOOL DisplaySectionInformation (BLOCK_SECTION * Section, DWORD ID, DWORD Test);

View File

@ -1,3 +1,4 @@
#ifdef toremove
/* /*
* Project 64 - A Nintendo 64 emulator. * Project 64 - A Nintendo 64 emulator.
* *
@ -242,4 +243,5 @@ extern N64_BLOCKS N64_Blocks;
#define SetJump32(Loc,JumpLoc) *(DWORD *)(Loc)= (DWORD)(((DWORD)(JumpLoc)) - (((DWORD)(Loc)) + 4)); #define SetJump32(Loc,JumpLoc) *(DWORD *)(Loc)= (DWORD)(((DWORD)(JumpLoc)) - (((DWORD)(Loc)) + 4));
#define SetJump8(Loc,JumpLoc) *(BYTE *)(Loc)= (BYTE )(((BYTE )(JumpLoc)) - (((BYTE )(Loc)) + 1)); #define SetJump8(Loc,JumpLoc) *(BYTE *)(Loc)= (BYTE )(((BYTE )(JumpLoc)) - (((BYTE )(Loc)) + 1));
#endif
#endif #endif

View File

@ -564,7 +564,7 @@ void SyncToPC (void) {
FixRandomReg(); FixRandomReg();
SyncSystem (); SyncSystem ();
return; return;
#ifdef toremove
{ {
int RecNextInstruction, RecJumpToLocation; int RecNextInstruction, RecJumpToLocation;
@ -601,6 +601,7 @@ void SyncToPC (void) {
MemAddrUsedCount[0] = 0; MemAddrUsedCount[0] = 0;
MemAddrUsedCount[1] = 0; MemAddrUsedCount[1] = 0;
} }
#endif
} }
int Sync_MemoryFilter( DWORD dwExptCode, LPEXCEPTION_POINTERS lpEP) { int Sync_MemoryFilter( DWORD dwExptCode, LPEXCEPTION_POINTERS lpEP) {

View File

@ -1,5 +1,8 @@
#include "stdafx.h" #include "stdafx.h"
R4300iOp::Func * CInterpreterCPU::m_R4300i_Opcode = NULL;
DWORD CInterpreterCPU::m_CountPerOp = 2;
void ExecuteInterpreterOps (DWORD Cycles) void ExecuteInterpreterOps (DWORD Cycles)
{ {
_Notify->BreakPoint(__FILE__,__LINE__); _Notify->BreakPoint(__FILE__,__LINE__);
@ -287,8 +290,7 @@ InterruptsDisabled:
} }
CInterpreterCPU::CInterpreterCPU () : CInterpreterCPU::CInterpreterCPU ()
m_R4300i_Opcode(NULL)
{ {
} }
@ -297,22 +299,27 @@ CInterpreterCPU::~CInterpreterCPU()
{ {
} }
void CInterpreterCPU::StartInterpreterCPU (void ) void CInterpreterCPU::BuildCPU (void )
{ {
R4300iOp::m_TestTimer = FALSE; R4300iOp::m_TestTimer = FALSE;
R4300iOp::m_NextInstruction = NORMAL; R4300iOp::m_NextInstruction = NORMAL;
R4300iOp::m_JumpToLocation = 0; R4300iOp::m_JumpToLocation = 0;
DWORD CountPerOp = _Settings->LoadDword(Game_CounterFactor); m_CountPerOp = _Settings->LoadDword(Game_CounterFactor);
m_R4300i_Opcode = R4300iOp::BuildInterpreter();
//m_R4300i_Opcode = R4300iOp32::BuildInterpreter();
}
void CInterpreterCPU::ExecuteCPU (void )
{
bool & Done = _N64System->m_EndEmulation; bool & Done = _N64System->m_EndEmulation;
DWORD & PROGRAM_COUNTER = *_PROGRAM_COUNTER; DWORD & PROGRAM_COUNTER = *_PROGRAM_COUNTER;
OPCODE & Opcode = R4300iOp::m_Opcode; OPCODE & Opcode = R4300iOp::m_Opcode;
DWORD & JumpToLocation = R4300iOp::m_JumpToLocation; DWORD & JumpToLocation = R4300iOp::m_JumpToLocation;
BOOL & TestTimer = R4300iOp::m_TestTimer; BOOL & TestTimer = R4300iOp::m_TestTimer;
R4300iOp::Func * R4300i_Opcode = R4300iOp::BuildInterpreter(); BuildCPU();
//R4300iOp::Func * R4300i_Opcode = R4300iOp32::BuildInterpreter();
__try __try
{ {
@ -326,8 +333,8 @@ void CInterpreterCPU::StartInterpreterCPU (void )
//WriteTraceF((TraceType)(TraceError | TraceNoHeader),"%X: %s t9: %08X v1: %08X",*_PROGRAM_COUNTER,R4300iOpcodeName(Opcode.Hex,*_PROGRAM_COUNTER),_GPR[0x19].UW[0],_GPR[0x03].UW[0]); //WriteTraceF((TraceType)(TraceError | TraceNoHeader),"%X: %s t9: %08X v1: %08X",*_PROGRAM_COUNTER,R4300iOpcodeName(Opcode.Hex,*_PROGRAM_COUNTER),_GPR[0x19].UW[0],_GPR[0x03].UW[0]);
//WriteTraceF((TraceType)(TraceError | TraceNoHeader),"%X: %d %d",*_PROGRAM_COUNTER,*_NextTimer,_SystemTimer->CurrentType()); //WriteTraceF((TraceType)(TraceError | TraceNoHeader),"%X: %d %d",*_PROGRAM_COUNTER,*_NextTimer,_SystemTimer->CurrentType());
}*/ }*/
*_NextTimer -= CountPerOp; *_NextTimer -= m_CountPerOp;
R4300i_Opcode[ Opcode.op ](); m_R4300i_Opcode[ Opcode.op ]();
switch (R4300iOp::m_NextInstruction) switch (R4300iOp::m_NextInstruction)
{ {
@ -365,3 +372,68 @@ void CInterpreterCPU::StartInterpreterCPU (void )
} }
} }
void CInterpreterCPU::ExecuteOps ( int Cycles )
{
bool & Done = _N64System->m_EndEmulation;
DWORD & PROGRAM_COUNTER = *_PROGRAM_COUNTER;
OPCODE & Opcode = R4300iOp::m_Opcode;
DWORD & JumpToLocation = R4300iOp::m_JumpToLocation;
BOOL & TestTimer = R4300iOp::m_TestTimer;
__try
{
while(!Done)
{
if (Cycles <= 0)
{
return;
}
if (_MMU->LW_VAddr(PROGRAM_COUNTER, Opcode.Hex))
{
/*if (PROGRAM_COUNTER > 0x80323000 && PROGRAM_COUNTER< 0x80380000)
{
WriteTraceF((TraceType)(TraceError | TraceNoHeader),"%X: %s",*_PROGRAM_COUNTER,R4300iOpcodeName(Opcode.Hex,*_PROGRAM_COUNTER));
//WriteTraceF((TraceType)(TraceError | TraceNoHeader),"%X: %s t9: %08X v1: %08X",*_PROGRAM_COUNTER,R4300iOpcodeName(Opcode.Hex,*_PROGRAM_COUNTER),_GPR[0x19].UW[0],_GPR[0x03].UW[0]);
//WriteTraceF((TraceType)(TraceError | TraceNoHeader),"%X: %d %d",*_PROGRAM_COUNTER,*_NextTimer,_SystemTimer->CurrentType());
}*/
Cycles -= m_CountPerOp;
*_NextTimer -= m_CountPerOp;
m_R4300i_Opcode[ Opcode.op ]();
switch (R4300iOp::m_NextInstruction)
{
case NORMAL:
PROGRAM_COUNTER += 4;
break;
case DELAY_SLOT:
R4300iOp::m_NextInstruction = JUMP;
PROGRAM_COUNTER += 4;
break;
case JUMP:
{
BOOL CheckTimer = (JumpToLocation < PROGRAM_COUNTER || TestTimer);
PROGRAM_COUNTER = JumpToLocation;
R4300iOp::m_NextInstruction = NORMAL;
if (CheckTimer)
{
TestTimer = FALSE;
if (*_NextTimer < 0)
{
_SystemTimer->TimerDone();
}
if (g_CPU_Action->DoSomething) { DoSomething(); }
}
}
}
} else {
DoTLBMiss(R4300iOp::m_NextInstruction == JUMP,PROGRAM_COUNTER);
R4300iOp::m_NextInstruction = NORMAL;
}
}
} __except( _MMU->MemoryFilter( GetExceptionCode(), GetExceptionInformation()) ) {
DisplayError(GS(MSG_UNKNOWN_MEM_ACTION));
ExitThread(0);
}
}

View File

@ -1,13 +1,15 @@
class CInterpreterCPU : class CInterpreterCPU :
private R4300iOp private R4300iOp
{ {
public:
CInterpreterCPU(); CInterpreterCPU();
~CInterpreterCPU(); ~CInterpreterCPU();
void StartInterpreterCPU (void ); public:
static void BuildCPU ( void );
R4300iOp::Func * m_R4300i_Opcode; static void ExecuteCPU ( void );
static void ExecuteOps ( int Cycles );
private: private:
}; static R4300iOp::Func * m_R4300i_Opcode;
static DWORD m_CountPerOp;
};

View File

@ -1,6 +1,6 @@
//#include <windows.h>
#ifdef toremove #ifdef toremove
#include <windows.h>
enum MemorySize { _8Bit, _16Bit, _32Bit, _64Bit }; enum MemorySize { _8Bit, _16Bit, _32Bit, _64Bit };
class CC_Core; class CC_Core;
@ -13,9 +13,6 @@ public:
virtual bool WriteToProtectedMemory (DWORD Address, int length) = 0; virtual bool WriteToProtectedMemory (DWORD Address, int length) = 0;
}; };
class CCodeSection;
class CRegInfo;
class CMipsMemory class CMipsMemory
{ {
public: public:
@ -44,205 +41,29 @@ public:
virtual void UnProtectMemory ( DWORD StartVaddr, DWORD EndVaddr ) = 0; virtual void UnProtectMemory ( DWORD StartVaddr, DWORD EndVaddr ) = 0;
//Compilation Functions //Compilation Functions
virtual void ResetMemoryStack ( CRegInfo & RegInfo ) = 0; virtual void ResetMemoryStack ( void ) = 0;
virtual void Compile_LB ( CX86Ops::x86Reg Reg, DWORD Addr, BOOL SignExtend ) = 0;
virtual void Compile_LH ( CX86Ops::x86Reg Reg, DWORD Addr, BOOL SignExtend ) = 0; virtual void Compile_LB ( void ) = 0;
virtual void Compile_LW ( CCodeSection * Section, CX86Ops::x86Reg Reg, DWORD Addr ) = 0; virtual void Compile_LBU ( void ) = 0;
virtual void Compile_SB_Const ( BYTE Value, DWORD Addr ) = 0; virtual void Compile_LH ( void ) = 0;
virtual void Compile_SB_Register ( CX86Ops::x86Reg Reg, DWORD Addr ) = 0; virtual void Compile_LHU ( void ) = 0;
virtual void Compile_SH_Const ( WORD Value, DWORD Addr ) = 0; virtual void Compile_LW ( void ) = 0;
virtual void Compile_SH_Register ( CX86Ops::x86Reg Reg, DWORD Addr ) = 0; virtual void Compile_LWC1 ( void ) = 0;
virtual void Compile_SW_Const ( DWORD Value, DWORD Addr ) = 0; virtual void Compile_LWU ( void ) = 0;
virtual void Compile_SW_Register ( CRegInfo & RegInfo, CX86Ops::x86Reg Reg, DWORD Addr ) = 0; virtual void Compile_LWL ( void ) = 0;
virtual void Compile_LWR ( void ) = 0;
virtual void Compile_LD ( void ) = 0;
virtual void Compile_LDC1 ( void ) = 0;
virtual void Compile_LDL ( void ) = 0;
virtual void Compile_LDR ( void ) = 0;
virtual void Compile_SB ( void ) = 0;
virtual void Compile_SH ( void ) = 0;
virtual void Compile_SW ( void ) = 0;
virtual void Compile_SWL ( void ) = 0;
virtual void Compile_SWR ( void ) = 0;
virtual void Compile_SD ( void ) = 0;
virtual void Compile_SDL ( void ) = 0;
virtual void Compile_SDR ( void ) = 0;
virtual void Compile_SWC1 ( void ) = 0;
virtual void Compile_SDC1 ( void ) = 0;
}; };
class CRSP_Plugin;
class CMipsMemoryVM :
public CMipsMemory,
public CTransVaddr,
private CX86Ops
#ifdef toremove
,
public CTLB,
public CMemoryLabel/*,
private CPIFRam*/
#endif
{
//Make sure plugins can directly access this information
friend CGfxPlugin;
friend CAudioPlugin;
friend CRSP_Plugin;
friend CControl_Plugin;
friend CN64System; //Need to manipulate all memory in loading/saveing save state
// friend CC_Core;
#ifdef toremove
CNotification * const _Notify; //Original Notify member used to notify the user when something occurs
CN64System * const _System;
CN64Rom * const _Rom2; //Current loaded ROM
CRegisters * const _Reg;
#endif
CMipsMemory_CallBack * const m_CBClass;
#ifdef toremove
//Save Chips accessed by memory
/*CSram * m_Sram;
CFlashRam * m_FlashRam;
bool m_SavesReadOnly;
*/
#endif
//Memory Locations
BYTE * m_RDRAM, * m_DMEM, * m_IMEM, m_PIF_Ram[0x40];
DWORD m_AllocatedRdramSize;
//Rom Information
bool m_RomMapped;
BYTE * m_Rom;
DWORD m_RomSize;
bool m_RomWrittenTo;
DWORD m_RomWroteValue;
// Recompiler
void ** JumpTable/*, ** DelaySlotTable*/;
BYTE * m_RecompCode;
DWORD m_RecompSize;
enum { MaxCompileBufferSize = 0x03C00000 };
enum { InitialCompileBufferSize = 0x00500000 };
enum { IncreaseCompileBufferSize = 0x00100000 };
//Current Half line
void UpdateHalfLine ( void );
DWORD m_HalfLine;
DWORD m_MemoryStack;
DWORD m_TempValue;
//Searching memory
BYTE * m_MemoryState;
DWORD m_MemoryStateSize;
//Initilizing and reseting information about the memory system
void AllocateSystemMemory ( void );
void InitalizeSystem ( bool PostPif );
void FixRDramSize ( void );
void FreeMemory ( void );
public:
CMipsMemoryVM ( CMipsMemory_CallBack * CallBack );
~CMipsMemoryVM ( void );
BOOL Initialize ( void );
BYTE * Rdram ( void );
DWORD RdramSize ( void );
BYTE * Dmem ( void );
BYTE * Imem ( void );
BYTE * PifRam ( void );
BOOL LB_VAddr ( DWORD VAddr, BYTE & Value );
BOOL LH_VAddr ( DWORD VAddr, WORD & Value );
BOOL LW_VAddr ( DWORD VAddr, DWORD & Value );
BOOL LD_VAddr ( DWORD VAddr, QWORD & Value );
BOOL SB_VAddr ( DWORD VAddr, BYTE Value );
BOOL SH_VAddr ( DWORD VAddr, WORD Value );
BOOL SW_VAddr ( DWORD VAddr, DWORD Value );
BOOL SD_VAddr ( DWORD VAddr, QWORD Value );
int MemoryFilter ( DWORD dwExptCode, void * lpExceptionPointer );
//Protect the Memory from being written to
void ProtectMemory ( DWORD StartVaddr, DWORD EndVaddr );
void UnProtectMemory ( DWORD StartVaddr, DWORD EndVaddr );
//Compilation Functions
void ResetMemoryStack ( CRegInfo & RegInfo );
void Compile_LB ( CX86Ops::x86Reg Reg, DWORD Addr, BOOL SignExtend );
void Compile_LH ( CX86Ops::x86Reg Reg, DWORD Addr, BOOL SignExtend );
void Compile_LW ( CCodeSection * Section, CX86Ops::x86Reg Reg, DWORD Addr );
void Compile_SB_Const ( BYTE Value, DWORD Addr );
void Compile_SB_Register ( CX86Ops::x86Reg Reg, DWORD Addr );
void Compile_SH_Const ( WORD Value, DWORD Addr );
void Compile_SH_Register ( CX86Ops::x86Reg Reg, DWORD Addr );
void Compile_SW_Const ( DWORD Value, DWORD Addr );
void Compile_SW_Register ( CRegInfo & RegInfo, CX86Ops::x86Reg Reg, DWORD Addr );
//Functions for TLB notification
void TLB_Mapped ( DWORD VAddr, DWORD Len, DWORD PAddr, bool bReadOnly );
void TLB_Unmaped ( DWORD Vaddr, DWORD Len );
// CTransVaddr interface
bool TranslateVaddr ( DWORD VAddr, DWORD &PAddr) const;
bool ValidVaddr ( DWORD VAddr ) const;
// Recompiler Memory
bool AllocateRecompilerMemory ( bool AllocateJumpTable );
inline void ** GetJumpTable ( void ) const { return JumpTable; }
inline BYTE * GetRecompCode ( void ) const { return m_RecompCode; }
inline DWORD GetRecompBufferSize ( void ) const { return m_RecompSize; }
void CheckRecompMem ( BYTE * RecompPos );
#ifdef toremove
bool LoadPhysical32 ( DWORD PAddr, DWORD & Variable, MemorySize Size, bool SignExtend );
bool Load32 ( DWORD VAddr, DWORD & Variable, MemorySize Size, bool SignExtend );
bool Load64 ( DWORD VAddr, QWORD & Variable, MemorySize Size, bool SignExtend );
bool Store64 ( DWORD VAddr, QWORD Value, MemorySize Size );
bool StorePhysical64 ( DWORD PAddr, QWORD Value, MemorySize Size );
inline DWORD RomFileSize ( void ) { return m_RomFileSize; }
//Win32 exception handler
void MemoryFilterFailed ( char * FailureType, DWORD MipsAddress, DWORD x86Address, DWORD Value);
int SystemMemoryFilter ( DWORD dwExptCode, void * lpExceptionPointer );
DWORD GetExceptionCodeFn ( void );
void * GetExceptionInformationFn ( void );
//Searching for value
enum SearchMemChangeState
{
SearchChangeState_Reset,
SearchChangeState_Changed,
SearchChangeState_Unchanged,
SearchChangeState_Greater,
SearchChangeState_Lessthan,
};
bool SearchSetBaseForChanges ( void );
bool SearchForChanges ( SearchMemChangeState SearchType, MemorySize Size,
DWORD &StartAddress, DWORD &Len,
DWORD &OldValue, DWORD &NewValue );
bool SearchForValue (DWORD Value, MemorySize Size, DWORD &StartAddress, DWORD &Len);
#endif
// Labels
LPCTSTR LabelName ( DWORD Address ) const;
private:
int LB_NonMemory ( DWORD PAddr, DWORD * Value, BOOL SignExtend );
int LH_NonMemory ( DWORD PAddr, DWORD * Value, int SignExtend );
int LW_NonMemory ( DWORD PAddr, DWORD * Value );
int SB_NonMemory ( DWORD PAddr, BYTE Value );
int SH_NonMemory ( DWORD PAddr, WORD Value );
int SW_NonMemory ( DWORD PAddr, DWORD Value );
mutable char m_strLabelName[100];
//BIG look up table to quickly translate the tlb to real mem address
DWORD * m_TLB_ReadMap;
DWORD * m_TLB_WriteMap;
};
extern void ** JumpTable;

View File

@ -0,0 +1 @@
#include "stdafx.h"

View File

@ -0,0 +1,218 @@
class CCodeSection;
class CRegInfo;
class CRSP_Plugin;
class CMipsMemoryVM :
public CMipsMemory,
public CTransVaddr,
private CRecompilerOps
#ifdef toremove
,
public CTLB,
public CMemoryLabel/*,
private CPIFRam*/
#endif
{
//Make sure plugins can directly access this information
friend CGfxPlugin;
friend CAudioPlugin;
friend CRSP_Plugin;
friend CControl_Plugin;
friend CN64System; //Need to manipulate all memory in loading/saveing save state
// friend CC_Core;
#ifdef toremove
CNotification * const _Notify; //Original Notify member used to notify the user when something occurs
CN64System * const _System;
CN64Rom * const _Rom2; //Current loaded ROM
CRegisters * const _Reg;
#endif
CMipsMemory_CallBack * const m_CBClass;
#ifdef toremove
//Save Chips accessed by memory
/*CSram * m_Sram;
CFlashRam * m_FlashRam;
bool m_SavesReadOnly;
*/
#endif
//Memory Locations
BYTE * m_RDRAM, * m_DMEM, * m_IMEM, m_PIF_Ram[0x40];
DWORD m_AllocatedRdramSize;
//Rom Information
bool m_RomMapped;
BYTE * m_Rom;
DWORD m_RomSize;
bool m_RomWrittenTo;
DWORD m_RomWroteValue;
// Recompiler
void ** JumpTable/*, ** DelaySlotTable*/;
BYTE * m_RecompCode;
DWORD m_RecompSize;
enum { MaxCompileBufferSize = 0x03C00000 };
enum { InitialCompileBufferSize = 0x00500000 };
enum { IncreaseCompileBufferSize = 0x00100000 };
//Current Half line
void UpdateHalfLine ( void );
DWORD m_HalfLine;
DWORD m_MemoryStack;
DWORD m_TempValue;
//Searching memory
BYTE * m_MemoryState;
DWORD m_MemoryStateSize;
//Initilizing and reseting information about the memory system
void AllocateSystemMemory ( void );
void InitalizeSystem ( bool PostPif );
void FixRDramSize ( void );
void FreeMemory ( void );
public:
CMipsMemoryVM ( CMipsMemory_CallBack * CallBack );
~CMipsMemoryVM ( void );
BOOL Initialize ( void );
BYTE * Rdram ( void );
DWORD RdramSize ( void );
BYTE * Dmem ( void );
BYTE * Imem ( void );
BYTE * PifRam ( void );
BOOL LB_VAddr ( DWORD VAddr, BYTE & Value );
BOOL LH_VAddr ( DWORD VAddr, WORD & Value );
BOOL LW_VAddr ( DWORD VAddr, DWORD & Value );
BOOL LD_VAddr ( DWORD VAddr, QWORD & Value );
BOOL SB_VAddr ( DWORD VAddr, BYTE Value );
BOOL SH_VAddr ( DWORD VAddr, WORD Value );
BOOL SW_VAddr ( DWORD VAddr, DWORD Value );
BOOL SD_VAddr ( DWORD VAddr, QWORD Value );
int MemoryFilter ( DWORD dwExptCode, void * lpExceptionPointer );
//Protect the Memory from being written to
void ProtectMemory ( DWORD StartVaddr, DWORD EndVaddr );
void UnProtectMemory ( DWORD StartVaddr, DWORD EndVaddr );
//Compilation Functions
void ResetMemoryStack ( void );
void Compile_LB ( void );
void Compile_LBU ( void );
void Compile_LH ( void );
void Compile_LHU ( void );
void Compile_LW ( void );
void Compile_LWC1 ( void );
void Compile_LWU ( void );
void Compile_LWL ( void );
void Compile_LWR ( void );
void Compile_LD ( void );
void Compile_LDC1 ( void );
void Compile_LDL ( void );
void Compile_LDR ( void );
void Compile_SB ( void );
void Compile_SH ( void );
void Compile_SW ( void );
void Compile_SWL ( void );
void Compile_SWR ( void );
void Compile_SD ( void );
void Compile_SDL ( void );
void Compile_SDR ( void );
void Compile_SWC1 ( void );
void Compile_SDC1 ( void );
void ResetMemoryStack ( CRegInfo & RegInfo );
void Compile_LB ( CX86Ops::x86Reg Reg, DWORD Addr, BOOL SignExtend );
void Compile_LH ( CX86Ops::x86Reg Reg, DWORD Addr, BOOL SignExtend );
void Compile_LW ( CCodeSection * Section, CX86Ops::x86Reg Reg, DWORD Addr );
void Compile_SB_Const ( BYTE Value, DWORD Addr );
void Compile_SB_Register ( CX86Ops::x86Reg Reg, DWORD Addr );
void Compile_SH_Const ( WORD Value, DWORD Addr );
void Compile_SH_Register ( CX86Ops::x86Reg Reg, DWORD Addr );
void Compile_SW_Const ( DWORD Value, DWORD Addr );
void Compile_SW_Register ( CX86Ops::x86Reg Reg, DWORD Addr );
//Functions for TLB notification
void TLB_Mapped ( DWORD VAddr, DWORD Len, DWORD PAddr, bool bReadOnly );
void TLB_Unmaped ( DWORD Vaddr, DWORD Len );
// CTransVaddr interface
bool TranslateVaddr ( DWORD VAddr, DWORD &PAddr) const;
bool ValidVaddr ( DWORD VAddr ) const;
// Recompiler Memory
bool AllocateRecompilerMemory ( bool AllocateJumpTable );
inline void ** GetJumpTable ( void ) const { return JumpTable; }
inline BYTE * GetRecompCode ( void ) const { return m_RecompCode; }
inline DWORD GetRecompBufferSize ( void ) const { return m_RecompSize; }
void CheckRecompMem ( BYTE * RecompPos );
#ifdef toremove
bool LoadPhysical32 ( DWORD PAddr, DWORD & Variable, MemorySize Size, bool SignExtend );
bool Load32 ( DWORD VAddr, DWORD & Variable, MemorySize Size, bool SignExtend );
bool Load64 ( DWORD VAddr, QWORD & Variable, MemorySize Size, bool SignExtend );
bool Store64 ( DWORD VAddr, QWORD Value, MemorySize Size );
bool StorePhysical64 ( DWORD PAddr, QWORD Value, MemorySize Size );
inline DWORD RomFileSize ( void ) { return m_RomFileSize; }
//Win32 exception handler
void MemoryFilterFailed ( char * FailureType, DWORD MipsAddress, DWORD x86Address, DWORD Value);
int SystemMemoryFilter ( DWORD dwExptCode, void * lpExceptionPointer );
DWORD GetExceptionCodeFn ( void );
void * GetExceptionInformationFn ( void );
//Searching for value
enum SearchMemChangeState
{
SearchChangeState_Reset,
SearchChangeState_Changed,
SearchChangeState_Unchanged,
SearchChangeState_Greater,
SearchChangeState_Lessthan,
};
bool SearchSetBaseForChanges ( void );
bool SearchForChanges ( SearchMemChangeState SearchType, MemorySize Size,
DWORD &StartAddress, DWORD &Len,
DWORD &OldValue, DWORD &NewValue );
bool SearchForValue (DWORD Value, MemorySize Size, DWORD &StartAddress, DWORD &Len);
#endif
// Labels
LPCTSTR LabelName ( DWORD Address ) const;
private:
int LB_NonMemory ( DWORD PAddr, DWORD * Value, BOOL SignExtend );
int LH_NonMemory ( DWORD PAddr, DWORD * Value, int SignExtend );
int LW_NonMemory ( DWORD PAddr, DWORD * Value );
int SB_NonMemory ( DWORD PAddr, BYTE Value );
int SH_NonMemory ( DWORD PAddr, WORD Value );
int SW_NonMemory ( DWORD PAddr, DWORD Value );
mutable char m_strLabelName[100];
//BIG look up table to quickly translate the tlb to real mem address
DWORD * m_TLB_ReadMap;
DWORD * m_TLB_WriteMap;
};
extern void ** JumpTable;

File diff suppressed because it is too large Load Diff

View File

@ -35,17 +35,6 @@ public:
inline TimerType CurrentType ( void ) const { return m_Current; } inline TimerType CurrentType ( void ) const { return m_Current; }
/* CSystemTimer ( void );
void CheckTimer ( void );
void ChangeTimerRelative ( TimerType Type, DWORD Cycles );
void ChangeTimerFixed ( TimerType Type, DWORD Cycles );
void DeactiateTimer ( TimerType Type );
void ResetTimer ( int NextVITimer );
void UpdateTimer ( int StepIncrease );
double GetTimer ( TimerType Type ) const;
inline int GetCurrentTimer ( void ) const { return m_Timer; }
*/
private: private:
TIMER_DETAILS m_TimerDetatils[MaxTimer]; TIMER_DETAILS m_TimerDetatils[MaxTimer];
int m_Timer; //How many cycles to the next event int m_Timer; //How many cycles to the next event

View File

@ -683,6 +683,7 @@ bool CN64System::SetActiveSystem( bool bActive )
memcpy((m_MMU_VM.Dmem()+0x40), (_Rom->GetRomAddress() + 0x040), 0xFBC); memcpy((m_MMU_VM.Dmem()+0x40), (_Rom->GetRomAddress() + 0x040), 0xFBC);
} }
m_SystemTimer.SetTimer(CSystemTimer::CompareTimer,m_Reg.COMPARE_REGISTER - m_Reg.COUNT_REGISTER,false); m_SystemTimer.SetTimer(CSystemTimer::CompareTimer,m_Reg.COMPARE_REGISTER - m_Reg.COUNT_REGISTER,false);
m_bInitilized = true;
bInitPlugin = true; bInitPlugin = true;
} }
@ -902,17 +903,13 @@ void CN64System::ExecuteCPU ( void )
void CN64System::ExecuteInterpret (CC_Core & C_Core) { void CN64System::ExecuteInterpret (CC_Core & C_Core) {
C_Core.SetN64System(this); C_Core.SetN64System(this);
InitializeCPUCore(); InitializeCPUCore();
CInterpreterCPU::ExecuteCPU();
CInterpreterCPU Interpreter;
Interpreter.StartInterpreterCPU();
//StartInterpreterCPU();
} }
void CN64System::ExecuteRecompiler (CC_Core & C_Core) void CN64System::ExecuteRecompiler (CC_Core & C_Core)
{ {
//execute opcodes while no errors //execute opcodes while no errors
m_Recomp = new CRecompiler(m_Profile,m_EndEmulation,false); m_Recomp = new CRecompiler(m_Profile,m_EndEmulation);
C_Core.SetN64System(this); C_Core.SetN64System(this);
InitializeCPUCore(); InitializeCPUCore();
m_Recomp->Run(); m_Recomp->Run();
@ -920,15 +917,28 @@ void CN64System::ExecuteRecompiler (CC_Core & C_Core)
void CN64System::ExecuteSyncCPU (CC_Core & C_Core) void CN64System::ExecuteSyncCPU (CC_Core & C_Core)
{ {
Notify().BreakPoint(__FILE__,__LINE__);
/* //execute opcodes while no errors
_Notify->DisplayMessage(5,"Copy Plugins"); _Notify->DisplayMessage(5,"Copy Plugins");
_Plugins->CopyPlugins(_Settings->LoadString(SyncPluginDir)); _Plugins->CopyPlugins(_Settings->LoadString(Directory_PluginSync));
//copy the plugins CMainGui SyncWindow(false);
CPlugins SyncPlugins ( _Settings->LoadString(Directory_PluginSync) );
SyncPlugins.SetRenderWindows(&SyncWindow,&SyncWindow);
CPlugins SyncPlugins ( _Settings->LoadString(SyncPluginDir) ); m_SyncCPU = new CN64System(&SyncPlugins, false);
CN64System SyncSystem ( _Notify,&SyncPlugins); //Create the backend n64 system m_Recomp = new CRecompiler(m_Profile,m_EndEmulation);
m_SyncCPU = &SyncSystem;
_SyncSystem = m_SyncCPU;
SetActiveSystem();
m_SyncCPU->SetActiveSystem();
SetActiveSystem();
C_Core.SetN64System(this);
InitializeCPUCore();
CInterpreterCPU::BuildCPU();
m_Recomp->Run();
/*
SyncSystem.SetupSystem(_Rom,false,true); SyncSystem.SetupSystem(_Rom,false,true);
SyncSystem._MMU->FixRDramSize(); SyncSystem._MMU->FixRDramSize();
@ -986,13 +996,14 @@ void CN64System::UpdateSyncCPU (CN64System * const SecondCPU, DWORD const Cycles
//Run the other CPU For the same amount of cycles //Run the other CPU For the same amount of cycles
if (CyclesToExecute < 0) { return; } if (CyclesToExecute < 0) { return; }
CC_Core::SetCurrentSystem(SecondCPU);
SecondCPU->ExecuteCycles(CyclesToExecute); SecondCPU->SetActiveSystem(true);
CC_Core::SetCurrentSystem(this); CC_Core::SetCurrentSystem(SecondCPU);
}
CInterpreterCPU::ExecuteOps(Cycles);
void CN64System::ExecuteCycles (DWORD Cycles) { SetActiveSystem(true);
::ExecuteCycles(Cycles); CC_Core::SetCurrentSystem(this);
} }
void CN64System::SyncCPU (CN64System * const SecondCPU) { void CN64System::SyncCPU (CN64System * const SecondCPU) {
@ -1019,13 +1030,10 @@ void CN64System::SyncCPU (CN64System * const SecondCPU) {
for (int z = 0; z < 0x100; z++) for (int z = 0; z < 0x100; z++)
{ {
_Notify->BreakPoint(__FILE__,__LINE__); if (m_MMU_VM.Rdram()[0x00325044 + z] != SecondCPU->m_MMU_VM.Rdram()[0x00325044 + z])
#ifdef tofix
if (_MMU->RDRAM[0x00325044 + z] != SecondCPU->_MMU->RDRAM[0x00325044 + z])
{ {
ErrorFound = true; ErrorFound = true;
} }
#endif
} }
if (bSPHack()) if (bSPHack())
@ -1039,11 +1047,8 @@ void CN64System::SyncCPU (CN64System * const SecondCPU) {
#endif #endif
} }
_Notify->BreakPoint(__FILE__,__LINE__); if (m_SystemTimer.CurrentType() != SecondCPU->m_SystemTimer.CurrentType()) { ErrorFound = true; }
#ifdef tofix if (m_NextTimer != SecondCPU->m_NextTimer) { ErrorFound = true; }
if (m_Reg.GetCurrentTimer() != SecondCPU->m_Reg.GetCurrentTimer()) { ErrorFound = true; }
if (m_Reg.GetCurrentTimerType() != SecondCPU->m_Reg.GetCurrentTimerType()) { ErrorFound = true; }
#endif
if (ErrorFound) { DumpSyncErrors(SecondCPU); } if (ErrorFound) { DumpSyncErrors(SecondCPU); }

View File

@ -71,7 +71,6 @@ private:
static void stLoadFileImage ( FileImageInfo * Info ); static void stLoadFileImage ( FileImageInfo * Info );
static void StartEmulationThread ( FileImageInfo * Info ); static void StartEmulationThread ( FileImageInfo * Info );
void ExecuteCycles ( DWORD Cycles );
void ExecuteCPU ( void ); void ExecuteCPU ( void );
void RefreshScreen ( void ); void RefreshScreen ( void );
bool InternalEvent ( void ); bool InternalEvent ( void );
@ -83,7 +82,7 @@ private:
bool LoadState ( void ); bool LoadState ( void );
void DumpSyncErrors ( CN64System * SecondCPU ); void DumpSyncErrors ( CN64System * SecondCPU );
void StartEmulation2 ( bool NewThread ); void StartEmulation2 ( bool NewThread );
bool SetActiveSystem ( bool bActive ); bool SetActiveSystem ( bool bActive = true );
void InitRegisters ( bool bPostPif, CMipsMemory & MMU ); void InitRegisters ( bool bPostPif, CMipsMemory & MMU );
//CPU Methods //CPU Methods

View File

@ -1,4 +1,5 @@
class CCodeBlock class CCodeBlock :
private CRecompilerOps
{ {
public: public:
CCodeBlock(DWORD VAddrEnter, BYTE * RecompPos); CCodeBlock(DWORD VAddrEnter, BYTE * RecompPos);
@ -11,6 +12,7 @@ public:
inline BYTE * CompiledLocation ( void ) const { return m_CompiledLocation; } inline BYTE * CompiledLocation ( void ) const { return m_CompiledLocation; }
inline int NoOfSections ( void ) const { return m_NoOfSections; } inline int NoOfSections ( void ) const { return m_NoOfSections; }
inline const CCodeSection & EnterSection ( void ) const { return m_EnterSection; } inline const CCodeSection & EnterSection ( void ) const { return m_EnterSection; }
inline DWORD NextTest ( void ) const { return m_EnterSection.m_Test + 1; }
inline void SetVAddrFirst ( DWORD VAddr ) { m_VAddrFirst = VAddr; } inline void SetVAddrFirst ( DWORD VAddr ) { m_VAddrFirst = VAddr; }
inline void SetVAddrLast ( DWORD VAddr ) { m_VAddrLast = VAddr; } inline void SetVAddrLast ( DWORD VAddr ) { m_VAddrLast = VAddr; }

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@ public:
CJumpInfo(); CJumpInfo();
DWORD TargetPC; DWORD TargetPC;
char * BranchLabel; stdstr BranchLabel;
DWORD * LinkLocation; DWORD * LinkLocation;
DWORD * LinkLocation2; DWORD * LinkLocation2;
BOOL FallThrough; BOOL FallThrough;

View File

@ -10,11 +10,10 @@
#undef LinkBlocks #undef LinkBlocks
#undef CountPerOp #undef CountPerOp
CRecompiler::CRecompiler(CProfiling & Profile, bool & EndEmulation, bool SyncSystem) : CRecompiler::CRecompiler(CProfiling & Profile, bool & EndEmulation ) :
m_Profile(Profile), m_Profile(Profile),
PROGRAM_COUNTER(_Reg->m_PROGRAM_COUNTER), PROGRAM_COUNTER(_Reg->m_PROGRAM_COUNTER),
m_EndEmulation(EndEmulation), m_EndEmulation(EndEmulation),
m_SyncSystem(SyncSystem),
m_FunctionsDelaySlot() m_FunctionsDelaySlot()
{ {
@ -89,10 +88,11 @@ void CRecompiler::RecompilerMain_VirtualTable ( void )
{ {
while(!m_EndEmulation) while(!m_EndEmulation)
{ {
CFunctionMap::PCCompiledFunc_TABLE table = m_FunctionTable[PROGRAM_COUNTER >> 0xC]; CFunctionMap::PCCompiledFunc_TABLE & table = m_FunctionTable[PROGRAM_COUNTER >> 0xC];
DWORD TableEntry = (PROGRAM_COUNTER & 0xFFF) >> 2;
if (table) if (table)
{ {
CCompiledFunc * info = table[(PROGRAM_COUNTER & 0xFFF) >> 2]; CCompiledFunc * info = table[TableEntry];
if (info != NULL) if (info != NULL)
{ {
(info->Function())(); (info->Function())();
@ -119,6 +119,18 @@ void CRecompiler::RecompilerMain_VirtualTable ( void )
{ {
break; break;
} }
if (table == NULL)
{
table = new PCCompiledFunc[(0x1000 >> 2)];
if (table == NULL)
{
Notify().FatalError(MSG_MEM_ALLOC_ERROR);
}
memset(table,0,sizeof(PCCompiledFunc) * (0x1000 >> 2));
}
table[TableEntry] = info;
(info->Function())(); (info->Function())();
} }
} }
@ -712,7 +724,7 @@ CCompiledFunc * CRecompiler::CompileDelaySlot(DWORD PC)
MoveX86regToVariable(x86Reg,&PROGRAM_COUNTER,"PROGRAM_COUNTER"); MoveX86regToVariable(x86Reg,&PROGRAM_COUNTER,"PROGRAM_COUNTER");
MoveConstToVariable(NORMAL,&NextInstruction,"NextInstruction"); MoveConstToVariable(NORMAL,&NextInstruction,"NextInstruction");
if (CPU_Type == CPU_SyncCores) { Call_Direct(SyncToPC, "SyncToPC"); } if (CPU_Type == CPU_SyncCores) { Call_Direct(SyncToPC, "SyncToPC"); }
Ret(); ExitCodeBlock();
CompileExitCode(BlockInfo); CompileExitCode(BlockInfo);
CPU_Message("====== End of recompiled code ======"); CPU_Message("====== End of recompiled code ======");
@ -2030,7 +2042,7 @@ CCompiledFunc * CRecompiler::CompilerCode ( void )
} }
CCompiledFunc * info = new CCompiledFunc(CodeBlock); CCompiledFunc * info = new CCompiledFunc(CodeBlock);
#ifdef toremove
//if block linking then analysis //if block linking then analysis
// //
@ -2066,6 +2078,7 @@ CCompiledFunc * CRecompiler::CompilerCode ( void )
} }
#endif #endif
*/ */
#endif
return info; return info;
} }

View File

@ -15,7 +15,7 @@ public:
}; };
public: public:
CRecompiler (CProfiling & Profile, bool & EndEmulation, bool SyncSystem); CRecompiler (CProfiling & Profile, bool & EndEmulation );
~CRecompiler (void); ~CRecompiler (void);
void Run ( void ); void Run ( void );
@ -28,7 +28,6 @@ public:
bool ClearRecompCode_Phys ( DWORD PhysicalAddress, int length, REMOVE_REASON Reason ); bool ClearRecompCode_Phys ( DWORD PhysicalAddress, int length, REMOVE_REASON Reason );
private: private:
bool const m_SyncSystem;
CProfiling & m_Profile; CProfiling & m_Profile;
bool & m_EndEmulation; bool & m_EndEmulation;

File diff suppressed because it is too large Load Diff

View File

@ -35,32 +35,32 @@ protected:
static void XORI ( void ); static void XORI ( void );
static void LUI ( void ); static void LUI ( void );
static void DADDIU ( void ); static void DADDIU ( void );
static void LDL ( void ); // static void LDL ( void );
static void LDR ( void ); // static void LDR ( void );
static void LB ( void ); // static void LB ( void );
static void LH ( void ); // static void LH ( void );
static void LWL ( void ); // static void LWL ( void );
static void LW ( void ); // static void LW ( void );
static void LBU ( void ); // static void LBU ( void );
static void LHU ( void ); // static void LHU ( void );
static void LWR ( void ); // static void LWR ( void );
static void LWU ( void ); //added by Witten // static void LWU ( void ); //added by Witten
static void SB ( void ); // static void SB ( void );
static void SH ( void ); // static void SH ( void );
static void SWL ( void ); // static void SWL ( void );
static void SW ( void ); // static void SW ( void );
static void SWR ( void ); // static void SWR ( void );
static void SDL ( void ); // static void SDL ( void );
static void SDR ( void ); // static void SDR ( void );
static void CACHE ( void ); static void CACHE ( void );
static void LL ( void ); static void LL ( void );
static void LWC1 ( void ); // static void LWC1 ( void );
static void LDC1 ( void ); // static void LDC1 ( void );
static void LD ( void ); // static void LD ( void );
static void SC ( void ); static void SC ( void );
static void SWC1 ( void ); // static void SWC1 ( void );
static void SDC1 ( void ); // static void SDC1 ( void );
static void SD ( void ); // static void SD ( void );
/********************** R4300i OpCodes: Special **********************/ /********************** R4300i OpCodes: Special **********************/
static void SPECIAL_SLL ( void ); static void SPECIAL_SLL ( void );
@ -180,6 +180,9 @@ protected:
/************************** Other functions **************************/ /************************** Other functions **************************/
static void UnknownOpcode ( void ); static void UnknownOpcode ( void );
static void EnterCodeBlock ( void );
static void ExitCodeBlock ( void );
static void CompileReadTLBMiss (CCodeSection * Section, int AddressReg, int LookUpReg ); static void CompileReadTLBMiss (CCodeSection * Section, int AddressReg, int LookUpReg );
static void CompileWriteTLBMiss (CCodeSection * Section, int AddressReg, int LookUpReg ); static void CompileWriteTLBMiss (CCodeSection * Section, int AddressReg, int LookUpReg );
static void UpdateCounters (CRegInfo & RegSet, bool CheckTimer, bool ClearValues = false ); static void UpdateCounters (CRegInfo & RegSet, bool CheckTimer, bool ClearValues = false );
@ -250,6 +253,10 @@ protected:
{ {
m_RegWorkingSet.ProtectGPR(Reg); m_RegWorkingSet.ProtectGPR(Reg);
} }
static inline void UnProtectGPR ( DWORD Reg )
{
m_RegWorkingSet.UnProtectGPR(Reg);
}
static inline void ResetX86Protection ( void ) static inline void ResetX86Protection ( void )
{ {
m_RegWorkingSet.ResetX86Protection(); m_RegWorkingSet.ResetX86Protection();

View File

@ -336,7 +336,6 @@ CX86Ops::x86Reg CRegInfo::Map_TempReg (CX86Ops::x86Reg Reg, int MipsReg, BOOL Lo
_Notify->BreakPoint(__FILE__,__LINE__); _Notify->BreakPoint(__FILE__,__LINE__);
return x86_Unknown; return x86_Unknown;
} }
CPU_Message(" regcache: allocate %s as temp storage",x86_Name(Reg));
} }
} }
else if (Reg == x86_Any8Bit) else if (Reg == x86_Any8Bit)
@ -407,7 +406,10 @@ CX86Ops::x86Reg CRegInfo::Map_TempReg (CX86Ops::x86Reg Reg, int MipsReg, BOOL Lo
{ {
UnMap_X86reg(Reg); UnMap_X86reg(Reg);
} }
CPU_Message(" regcache: allocate %s as temp storage",x86_Name(Reg)); if (x86Mapped(Reg) != Temp_Mapped)
{
CPU_Message(" regcache: allocate %s as temp storage",x86_Name(Reg));
}
if (MipsReg >= 0) { if (MipsReg >= 0) {
if (LoadHiWord) { if (LoadHiWord) {
@ -455,14 +457,21 @@ CX86Ops::x86Reg CRegInfo::Map_TempReg (CX86Ops::x86Reg Reg, int MipsReg, BOOL Lo
} }
void CRegInfo::ProtectGPR(DWORD Reg) { void CRegInfo::ProtectGPR(DWORD Reg) {
if (IsUnknown(Reg)) { return; } if (IsUnknown(Reg) || IsConst(Reg)) { return; }
if (IsConst(Reg)) { return; }
if (Is64Bit(Reg)) { if (Is64Bit(Reg)) {
x86Protected(MipsRegMapHi(Reg)) = TRUE; x86Protected(MipsRegMapHi(Reg)) = TRUE;
} }
x86Protected(MipsRegMapLo(Reg)) = TRUE; x86Protected(MipsRegMapLo(Reg)) = TRUE;
} }
void CRegInfo::UnProtectGPR(DWORD Reg) {
if (IsUnknown(Reg) || IsConst(Reg)) { return; }
if (Is64Bit(Reg)) {
x86Protected(MipsRegMapHi(Reg)) = false;
}
x86Protected(MipsRegMapLo(Reg)) = false;
}
void CRegInfo::ResetX86Protection (void) void CRegInfo::ResetX86Protection (void)
{ {
for (int count = 1; count < 10; count ++) for (int count = 1; count < 10; count ++)
@ -601,8 +610,8 @@ void CRegInfo::UnMap_GPR (DWORD Reg, bool WriteBackValue)
x86Protected(MipsRegHi(Reg)) = FALSE; x86Protected(MipsRegHi(Reg)) = FALSE;
} }
CPU_Message(" regcache: unallocate %s from %s",x86_Name(MipsRegMapLo(Reg)),CRegName::GPR_Lo[Reg]); CPU_Message(" regcache: unallocate %s from %s",x86_Name(MipsRegMapLo(Reg)),CRegName::GPR_Lo[Reg]);
x86Mapped(MipsRegLo(Reg)) = NotMapped; x86Mapped(MipsRegMapLo(Reg)) = NotMapped;
x86Protected(MipsRegLo(Reg)) = FALSE; x86Protected(MipsRegMapLo(Reg)) = FALSE;
if (!WriteBackValue) { if (!WriteBackValue) {
MipsRegState(Reg) = CRegInfo::STATE_UNKNOWN; MipsRegState(Reg) = CRegInfo::STATE_UNKNOWN;
return; return;
@ -636,7 +645,10 @@ CX86Ops::x86Reg CRegInfo::UnMap_TempReg ( void )
if (Reg != x86_Unknown) if (Reg != x86_Unknown)
{ {
CPU_Message(" regcache: unallocate %s from temp storage",x86_Name(Reg)); if (x86Mapped(Reg) == Temp_Mapped)
{
CPU_Message(" regcache: unallocate %s from temp storage",x86_Name(Reg));
}
x86Mapped(Reg) = NotMapped; x86Mapped(Reg) = NotMapped;
} }
return Reg; return Reg;

View File

@ -47,6 +47,7 @@ public:
void Map_GPR_64bit ( int MipsReg, int MipsRegToLoad ); void Map_GPR_64bit ( int MipsReg, int MipsRegToLoad );
x86Reg Map_TempReg ( x86Reg Reg, int MipsReg, BOOL LoadHiWord ); x86Reg Map_TempReg ( x86Reg Reg, int MipsReg, BOOL LoadHiWord );
void ProtectGPR ( DWORD Reg ); void ProtectGPR ( DWORD Reg );
void UnProtectGPR ( DWORD Reg );
void ResetX86Protection ( void ); void ResetX86Protection ( void );
void UnMap_AllFPRs ( void ); void UnMap_AllFPRs ( void );
void UnMap_FPR ( int Reg, int WriteBackValue ); void UnMap_FPR ( int Reg, int WriteBackValue );

View File

@ -30,6 +30,8 @@ bool CCodeBlock::Compile()
CPU_Message("Start of Block: %X",VAddrEnter() ); CPU_Message("Start of Block: %X",VAddrEnter() );
CPU_Message("No of Sections: %d",NoOfSections() ); CPU_Message("No of Sections: %d",NoOfSections() );
CPU_Message("====== recompiled code ======"); CPU_Message("====== recompiled code ======");
EnterCodeBlock();
#ifdef tofix #ifdef tofix
if (bLinkBlocks()) { if (bLinkBlocks()) {
for (int count = 0; count < BlockInfo.NoOfSections; count ++) { for (int count = 0; count < BlockInfo.NoOfSections; count ++) {
@ -47,13 +49,17 @@ bool CCodeBlock::Compile()
while (GenerateX86Code(BlockInfo,&BlockInfo.ParentSection,CBlockSection::GetNewTestValue())); while (GenerateX86Code(BlockInfo,&BlockInfo.ParentSection,CBlockSection::GetNewTestValue()));
} else { } else {
#endif #endif
m_EnterSection.GenerateX86Code(m_EnterSection.m_Test + 1); if (!m_EnterSection.GenerateX86Code(m_EnterSection.m_Test + 1))
{
return false;
}
#ifdef tofix #ifdef tofix
} }
CompileExitCode(BlockInfo); CompileExitCode(BlockInfo);
#endif #endif
return false;
return true;
} }
CJumpInfo::CJumpInfo() CJumpInfo::CJumpInfo()

View File

@ -313,97 +313,97 @@ void CX86Ops::IncX86reg(x86Reg reg) {
} }
} }
void CX86Ops::JaeLabel8(char * Label, BYTE Value) { void CX86Ops::JaeLabel8(const char * Label, BYTE Value) {
CPU_Message(" jae $%s",Label); CPU_Message(" jae $%s",Label);
PUTDST8(m_RecompPos,0x73); PUTDST8(m_RecompPos,0x73);
PUTDST8(m_RecompPos,Value); PUTDST8(m_RecompPos,Value);
} }
void CX86Ops::JaeLabel32(char * Label,DWORD Value) { void CX86Ops::JaeLabel32(const char * Label,DWORD Value) {
CPU_Message(" jae $%s",Label); CPU_Message(" jae $%s",Label);
PUTDST16(m_RecompPos,0x830F); PUTDST16(m_RecompPos,0x830F);
PUTDST32(m_RecompPos,Value); PUTDST32(m_RecompPos,Value);
} }
void CX86Ops::JaLabel8(char * Label, BYTE Value) { void CX86Ops::JaLabel8(const char * Label, BYTE Value) {
CPU_Message(" ja $%s",Label); CPU_Message(" ja $%s",Label);
PUTDST8(m_RecompPos,0x77); PUTDST8(m_RecompPos,0x77);
PUTDST8(m_RecompPos,Value); PUTDST8(m_RecompPos,Value);
} }
void CX86Ops::JaLabel32(char * Label,DWORD Value) { void CX86Ops::JaLabel32(const char * Label,DWORD Value) {
CPU_Message(" ja $%s",Label); CPU_Message(" ja $%s",Label);
PUTDST16(m_RecompPos,0x870F); PUTDST16(m_RecompPos,0x870F);
PUTDST32(m_RecompPos,Value); PUTDST32(m_RecompPos,Value);
} }
void CX86Ops::JbLabel8(char * Label, BYTE Value) { void CX86Ops::JbLabel8(const char * Label, BYTE Value) {
CPU_Message(" jb $%s",Label); CPU_Message(" jb $%s",Label);
PUTDST8(m_RecompPos,0x72); PUTDST8(m_RecompPos,0x72);
PUTDST8(m_RecompPos,Value); PUTDST8(m_RecompPos,Value);
} }
void CX86Ops::JbLabel32(char * Label,DWORD Value) { void CX86Ops::JbLabel32(const char * Label,DWORD Value) {
CPU_Message(" jb $%s",Label); CPU_Message(" jb $%s",Label);
PUTDST16(m_RecompPos,0x820F); PUTDST16(m_RecompPos,0x820F);
PUTDST32(m_RecompPos,Value); PUTDST32(m_RecompPos,Value);
} }
void CX86Ops::JecxzLabel8(char * Label, BYTE Value) { void CX86Ops::JecxzLabel8(const char * Label, BYTE Value) {
CPU_Message(" jecxz $%s",Label); CPU_Message(" jecxz $%s",Label);
PUTDST8(m_RecompPos,0xE3); PUTDST8(m_RecompPos,0xE3);
PUTDST8(m_RecompPos,Value); PUTDST8(m_RecompPos,Value);
} }
void CX86Ops::JeLabel8(char * Label, BYTE Value) { void CX86Ops::JeLabel8(const char * Label, BYTE Value) {
CPU_Message(" je $%s",Label); CPU_Message(" je $%s",Label);
PUTDST8(m_RecompPos,0x74); PUTDST8(m_RecompPos,0x74);
PUTDST8(m_RecompPos,Value); PUTDST8(m_RecompPos,Value);
} }
void CX86Ops::JeLabel32(char * Label,DWORD Value) { void CX86Ops::JeLabel32(const char * Label,DWORD Value) {
CPU_Message(" je $%s",Label); CPU_Message(" je $%s",Label);
PUTDST16(m_RecompPos,0x840F); PUTDST16(m_RecompPos,0x840F);
PUTDST32(m_RecompPos,Value); PUTDST32(m_RecompPos,Value);
} }
void CX86Ops::JgeLabel32(char * Label,DWORD Value) { void CX86Ops::JgeLabel32(const char * Label,DWORD Value) {
CPU_Message(" jge $%s",Label); CPU_Message(" jge $%s",Label);
PUTDST16(m_RecompPos,0x8D0F); PUTDST16(m_RecompPos,0x8D0F);
PUTDST32(m_RecompPos,Value); PUTDST32(m_RecompPos,Value);
} }
void CX86Ops::JgLabel8(char * Label, BYTE Value) { void CX86Ops::JgLabel8(const char * Label, BYTE Value) {
CPU_Message(" jg $%s",Label); CPU_Message(" jg $%s",Label);
PUTDST8(m_RecompPos,0x7F); PUTDST8(m_RecompPos,0x7F);
PUTDST8(m_RecompPos,Value); PUTDST8(m_RecompPos,Value);
} }
void CX86Ops::JgLabel32(char * Label,DWORD Value) { void CX86Ops::JgLabel32(const char * Label,DWORD Value) {
CPU_Message(" jg $%s",Label); CPU_Message(" jg $%s",Label);
PUTDST16(m_RecompPos,0x8F0F); PUTDST16(m_RecompPos,0x8F0F);
PUTDST32(m_RecompPos,Value); PUTDST32(m_RecompPos,Value);
} }
void CX86Ops::JleLabel8(char * Label, BYTE Value) { void CX86Ops::JleLabel8(const char * Label, BYTE Value) {
CPU_Message(" jle $%s",Label); CPU_Message(" jle $%s",Label);
PUTDST8(m_RecompPos,0x7E); PUTDST8(m_RecompPos,0x7E);
PUTDST8(m_RecompPos,Value); PUTDST8(m_RecompPos,Value);
} }
void CX86Ops::JleLabel32(char * Label,DWORD Value) { void CX86Ops::JleLabel32(const char * Label,DWORD Value) {
CPU_Message(" jle $%s",Label); CPU_Message(" jle $%s",Label);
PUTDST16(m_RecompPos,0x8E0F); PUTDST16(m_RecompPos,0x8E0F);
PUTDST32(m_RecompPos,Value); PUTDST32(m_RecompPos,Value);
} }
void CX86Ops::JlLabel8(char * Label, BYTE Value) { void CX86Ops::JlLabel8(const char * Label, BYTE Value) {
CPU_Message(" jl $%s",Label); CPU_Message(" jl $%s",Label);
PUTDST8(m_RecompPos,0x7C); PUTDST8(m_RecompPos,0x7C);
PUTDST8(m_RecompPos,Value); PUTDST8(m_RecompPos,Value);
} }
void CX86Ops::JlLabel32(char * Label,DWORD Value) { void CX86Ops::JlLabel32(const char * Label,DWORD Value) {
CPU_Message(" jl $%s",Label); CPU_Message(" jl $%s",Label);
PUTDST16(m_RecompPos,0x8C0F); PUTDST16(m_RecompPos,0x8C0F);
PUTDST32(m_RecompPos,Value); PUTDST32(m_RecompPos,Value);
@ -425,7 +425,7 @@ void CX86Ops::JmpDirectReg( x86Reg reg ) {
} }
} }
void CX86Ops::JmpIndirectLabel32(char * Label,DWORD location) { void CX86Ops::JmpIndirectLabel32(const char * Label,DWORD location) {
CPU_Message(" jmp dword ptr [%s]", Label); CPU_Message(" jmp dword ptr [%s]", Label);
PUTDST16(m_RecompPos, 0x25ff); PUTDST16(m_RecompPos, 0x25ff);
PUTDST32(m_RecompPos, location); PUTDST32(m_RecompPos, location);
@ -454,43 +454,43 @@ void CX86Ops::JmpIndirectReg( x86Reg reg ) {
} }
} }
void CX86Ops::JmpLabel8(char * Label, BYTE Value) { void CX86Ops::JmpLabel8(const char * Label, BYTE Value) {
CPU_Message(" jmp $%s",Label); CPU_Message(" jmp $%s",Label);
PUTDST8(m_RecompPos,0xEB); PUTDST8(m_RecompPos,0xEB);
PUTDST8(m_RecompPos,Value); PUTDST8(m_RecompPos,Value);
} }
void CX86Ops::JmpLabel32(char * Label, DWORD Value) { void CX86Ops::JmpLabel32(const char * Label, DWORD Value) {
CPU_Message(" jmp $%s",Label); CPU_Message(" jmp $%s",Label);
PUTDST8(m_RecompPos,0xE9); PUTDST8(m_RecompPos,0xE9);
PUTDST32(m_RecompPos,Value); PUTDST32(m_RecompPos,Value);
} }
void CX86Ops::JneLabel8(char * Label, BYTE Value) { void CX86Ops::JneLabel8(const char * Label, BYTE Value) {
CPU_Message(" jne $%s",Label); CPU_Message(" jne $%s",Label);
PUTDST8(m_RecompPos,0x75); PUTDST8(m_RecompPos,0x75);
PUTDST8(m_RecompPos,Value); PUTDST8(m_RecompPos,Value);
} }
void CX86Ops::JneLabel32(char *Label, DWORD Value) { void CX86Ops::JneLabel32(const char *Label, DWORD Value) {
CPU_Message(" jne $%s",Label); CPU_Message(" jne $%s",Label);
PUTDST16(m_RecompPos,0x850F); PUTDST16(m_RecompPos,0x850F);
PUTDST32(m_RecompPos,Value); PUTDST32(m_RecompPos,Value);
} }
void CX86Ops::JnsLabel8(char * Label, BYTE Value) { void CX86Ops::JnsLabel8(const char * Label, BYTE Value) {
CPU_Message(" jns $%s",Label); CPU_Message(" jns $%s",Label);
PUTDST8(m_RecompPos,0x79); PUTDST8(m_RecompPos,0x79);
PUTDST8(m_RecompPos,Value); PUTDST8(m_RecompPos,Value);
} }
void CX86Ops::JnsLabel32(char *Label, DWORD Value) { void CX86Ops::JnsLabel32(const char *Label, DWORD Value) {
CPU_Message(" jns $%s",Label); CPU_Message(" jns $%s",Label);
PUTDST16(m_RecompPos,0x890F); PUTDST16(m_RecompPos,0x890F);
PUTDST32(m_RecompPos,Value); PUTDST32(m_RecompPos,Value);
} }
void CX86Ops::JsLabel32(char *Label, DWORD Value) { void CX86Ops::JsLabel32(const char *Label, DWORD Value) {
CPU_Message(" js $%s",Label); CPU_Message(" js $%s",Label);
PUTDST16(m_RecompPos,0x880F); PUTDST16(m_RecompPos,0x880F);
PUTDST32(m_RecompPos,Value); PUTDST32(m_RecompPos,Value);
@ -2119,7 +2119,7 @@ void CX86Ops::Pop(x86Reg reg) {
} }
} }
void CX86Ops::PushImm32(char * String, DWORD Value) { void CX86Ops::PushImm32(const char * String, DWORD Value) {
CPU_Message(" push %s",String); CPU_Message(" push %s",String);
PUTDST8(m_RecompPos,0x68); PUTDST8(m_RecompPos,0x68);
PUTDST32(m_RecompPos,Value); PUTDST32(m_RecompPos,Value);

View File

@ -75,32 +75,32 @@ protected:
static void idivX86reg ( x86Reg reg ); static void idivX86reg ( x86Reg reg );
static void imulX86reg ( x86Reg reg ); static void imulX86reg ( x86Reg reg );
static void IncX86reg ( x86Reg Reg ); static void IncX86reg ( x86Reg Reg );
static void JaeLabel8 ( char * Label, BYTE Value ); static void JaeLabel8 ( const char * Label, BYTE Value );
static void JaeLabel32 ( char * Label, DWORD Value ); static void JaeLabel32 ( const char * Label, DWORD Value );
static void JaLabel8 ( char * Label, BYTE Value ); static void JaLabel8 ( const char * Label, BYTE Value );
static void JaLabel32 ( char * Label, DWORD Value ); static void JaLabel32 ( const char * Label, DWORD Value );
static void JbLabel8 ( char * Label, BYTE Value ); static void JbLabel8 ( const char * Label, BYTE Value );
static void JbLabel32 ( char * Label, DWORD Value ); static void JbLabel32 ( const char * Label, DWORD Value );
static void JecxzLabel8 ( char * Label, BYTE Value ); static void JecxzLabel8 ( const char * Label, BYTE Value );
static void JeLabel8 ( char * Label, BYTE Value ); static void JeLabel8 ( const char * Label, BYTE Value );
static void JeLabel32 ( char * Label, DWORD Value ); static void JeLabel32 ( const char * Label, DWORD Value );
static void JgeLabel32 ( char * Label, DWORD Value ); static void JgeLabel32 ( const char * Label, DWORD Value );
static void JgLabel8 ( char * Label, BYTE Value ); static void JgLabel8 ( const char * Label, BYTE Value );
static void JgLabel32 ( char * Label, DWORD Value ); static void JgLabel32 ( const char * Label, DWORD Value );
static void JleLabel8 ( char * Label, BYTE Value ); static void JleLabel8 ( const char * Label, BYTE Value );
static void JleLabel32 ( char * Label, DWORD Value ); static void JleLabel32 ( const char * Label, DWORD Value );
static void JlLabel8 ( char * Label, BYTE Value ); static void JlLabel8 ( const char * Label, BYTE Value );
static void JlLabel32 ( char * Label, DWORD Value ); static void JlLabel32 ( const char * Label, DWORD Value );
static void JmpDirectReg ( x86Reg reg ); static void JmpDirectReg ( x86Reg reg );
static void JmpIndirectLabel32 ( char * Label, DWORD location ); static void JmpIndirectLabel32 ( const char * Label, DWORD location );
static void JmpIndirectReg ( x86Reg reg ); static void JmpIndirectReg ( x86Reg reg );
static void JmpLabel8 ( char * Label, BYTE Value ); static void JmpLabel8 ( const char * Label, BYTE Value );
static void JmpLabel32 ( char * Label, DWORD Value ); static void JmpLabel32 ( const char * Label, DWORD Value );
static void JneLabel8 ( char * Label, BYTE Value ); static void JneLabel8 ( const char * Label, BYTE Value );
static void JneLabel32 ( char * Label, DWORD Value ); static void JneLabel32 ( const char * Label, DWORD Value );
static void JnsLabel8 ( char * Label, BYTE Value ); static void JnsLabel8 ( const char * Label, BYTE Value );
static void JnsLabel32 ( char * Label, DWORD Value ); static void JnsLabel32 ( const char * Label, DWORD Value );
static void JsLabel32 ( char * Label, DWORD Value ); static void JsLabel32 ( const char * Label, DWORD Value );
static void LeaRegReg ( x86Reg RegDest, x86Reg RegSrc, int multiplier ); static void LeaRegReg ( x86Reg RegDest, x86Reg RegSrc, int multiplier );
static void LeaSourceAndOffset ( x86Reg x86DestReg, x86Reg x86SourceReg, int offset ); static void LeaSourceAndOffset ( x86Reg x86DestReg, x86Reg x86SourceReg, int offset );
static void MoveConstByteToN64Mem ( BYTE Const, x86Reg AddrReg ); static void MoveConstByteToN64Mem ( BYTE Const, x86Reg AddrReg );
@ -160,11 +160,11 @@ protected:
static void OrVariableToX86Reg ( void * Variable, const char * VariableName, x86Reg Reg ); static void OrVariableToX86Reg ( void * Variable, const char * VariableName, x86Reg Reg );
static void OrX86RegToVariable ( void * Variable, const char * VariableName, x86Reg Reg ); static void OrX86RegToVariable ( void * Variable, const char * VariableName, x86Reg Reg );
static void OrX86RegToX86Reg ( x86Reg Destination, x86Reg Source ); static void OrX86RegToX86Reg ( x86Reg Destination, x86Reg Source );
static void Popad ( void );
static void Pushad ( void );
static void Push ( x86Reg reg ); static void Push ( x86Reg reg );
static void Pushad ( void );
static void PushImm32 ( const char * String, DWORD Value );
static void Pop ( x86Reg reg ); static void Pop ( x86Reg reg );
static void PushImm32 ( char * String, DWORD Value ); static void Popad ( void );
static void Ret ( void ); static void Ret ( void );
static void Seta ( x86Reg reg ); static void Seta ( x86Reg reg );
static void Setae ( x86Reg reg ); static void Setae ( x86Reg reg );

View File

@ -279,7 +279,8 @@ void CControl_Plugin::UpdateKeys (void) {
if (ReadController) { ReadController(-1,NULL); } if (ReadController) { ReadController(-1,NULL); }
} }
void CControl_Plugin::SetControl(CControl_Plugin const * const Plugin) { void CControl_Plugin::SetControl(CControl_Plugin const * const Plugin)
{
if (m_AllocatedControllers) { if (m_AllocatedControllers) {
for (int count = 0; count < sizeof(m_Controllers) / sizeof(m_Controllers[0]); count++) { for (int count = 0; count < sizeof(m_Controllers) / sizeof(m_Controllers[0]); count++) {
delete m_Controllers[count]; delete m_Controllers[count];

View File

@ -296,11 +296,9 @@ void CPlugins::CreatePluginDir ( const stdstr & DstDir ) const {
} }
void CPlugins::CopyPlugins ( const stdstr & DstDir ) const { void CPlugins::CopyPlugins ( const stdstr & DstDir ) const {
Notify().BreakPoint(__FILE__,__LINE__);
//Copy GFX Plugin //Copy GFX Plugin
/*stdstr_f srcGfxPlugin("%s%s",m_PluginDir.c_str(),_Settings->LoadString(CurrentGFX_Plugin).c_str()); stdstr_f srcGfxPlugin("%s%s",m_PluginDir.c_str(),_Settings->LoadString(Plugin_GFX_Current).c_str());
stdstr_f dstGfxPlugin("%s%s",DstDir.c_str(),_Settings->LoadString(CurrentGFX_Plugin).c_str()); stdstr_f dstGfxPlugin("%s%s",DstDir.c_str(),_Settings->LoadString(Plugin_GFX_Current).c_str());
if (CopyFile(srcGfxPlugin.c_str(),dstGfxPlugin.c_str(),false) == 0) if (CopyFile(srcGfxPlugin.c_str(),dstGfxPlugin.c_str(),false) == 0)
{ {
@ -309,26 +307,26 @@ void CPlugins::CopyPlugins ( const stdstr & DstDir ) const {
} }
//Copy m_Audio Plugin //Copy m_Audio Plugin
stdstr_f srcAudioPlugin("%s%s",m_PluginDir.c_str(),_Settings->LoadString(CurrentAUDIO_Plugin).c_str()); stdstr_f srcAudioPlugin("%s%s",m_PluginDir.c_str(),_Settings->LoadString(Plugin_AUDIO_Current).c_str());
stdstr_f dstAudioPlugin("%s%s",DstDir.c_str(), _Settings->LoadString(CurrentAUDIO_Plugin).c_str()); stdstr_f dstAudioPlugin("%s%s",DstDir.c_str(), _Settings->LoadString(Plugin_AUDIO_Current).c_str());
if (CopyFile(srcAudioPlugin.c_str(),dstAudioPlugin.c_str(),false) == 0) { if (CopyFile(srcAudioPlugin.c_str(),dstAudioPlugin.c_str(),false) == 0) {
if (GetLastError() == ERROR_PATH_NOT_FOUND) { CreatePluginDir(dstAudioPlugin); } if (GetLastError() == ERROR_PATH_NOT_FOUND) { CreatePluginDir(dstAudioPlugin); }
CopyFile(srcAudioPlugin.c_str(),dstAudioPlugin.c_str(),false); CopyFile(srcAudioPlugin.c_str(),dstAudioPlugin.c_str(),false);
} }
//Copy m_RSP Plugin //Copy m_RSP Plugin
stdstr_f srcRSPPlugin("%s%s",m_PluginDir.c_str(), _Settings->LoadString(CurrentRSP_Plugin).c_str()); stdstr_f srcRSPPlugin("%s%s",m_PluginDir.c_str(), _Settings->LoadString(Plugin_RSP_Current).c_str());
stdstr_f dstRSPPlugin("%s%s",DstDir.c_str(),_Settings->LoadString(CurrentRSP_Plugin).c_str()); stdstr_f dstRSPPlugin("%s%s",DstDir.c_str(),_Settings->LoadString(Plugin_RSP_Current).c_str());
if (CopyFile(srcRSPPlugin.c_str(),dstRSPPlugin.c_str(),false) == 0) { if (CopyFile(srcRSPPlugin.c_str(),dstRSPPlugin.c_str(),false) == 0) {
if (GetLastError() == ERROR_PATH_NOT_FOUND) { CreatePluginDir(dstRSPPlugin); } if (GetLastError() == ERROR_PATH_NOT_FOUND) { CreatePluginDir(dstRSPPlugin); }
CopyFile(srcRSPPlugin.c_str(),dstRSPPlugin.c_str(),false); CopyFile(srcRSPPlugin.c_str(),dstRSPPlugin.c_str(),false);
} }
//Copy Controler Plugin //Copy Controler Plugin
stdstr_f srcContPlugin("%s%s",m_PluginDir.c_str(), _Settings->LoadString(CurrentCONT_Plugin).c_str()); stdstr_f srcContPlugin("%s%s",m_PluginDir.c_str(), _Settings->LoadString(Plugin_CONT_Current).c_str());
stdstr_f dstContPlugin("%s%s",DstDir.c_str(),_Settings->LoadString(CurrentCONT_Plugin).c_str()); stdstr_f dstContPlugin("%s%s",DstDir.c_str(),_Settings->LoadString(Plugin_CONT_Current).c_str());
if (CopyFile(srcContPlugin.c_str(),dstContPlugin.c_str(),false) == 0) { if (CopyFile(srcContPlugin.c_str(),dstContPlugin.c_str(),false) == 0) {
if (GetLastError() == ERROR_PATH_NOT_FOUND) { CreatePluginDir(dstContPlugin); } if (GetLastError() == ERROR_PATH_NOT_FOUND) { CreatePluginDir(dstContPlugin); }
CopyFile(srcContPlugin.c_str(),dstContPlugin.c_str(),false); CopyFile(srcContPlugin.c_str(),dstContPlugin.c_str(),false);
}*/ }
} }

View File

@ -366,6 +366,10 @@ SOURCE="N64 System\Mips\Memory Labels Class.cpp"
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=".\N64 System\Mips\Memory Virtual Mem.cpp"
# End Source File
# Begin Source File
SOURCE="N64 System\Mips\Memory.cpp" SOURCE="N64 System\Mips\Memory.cpp"
# End Source File # End Source File
# Begin Source File # Begin Source File
@ -970,6 +974,10 @@ SOURCE="N64 System\Mips\Memory Labels Class.h"
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=".\N64 System\Mips\Memory Virtual Mem.h"
# End Source File
# Begin Source File
SOURCE="N64 System\Mips\OpCode Analysis Class.h" SOURCE="N64 System\Mips\OpCode Analysis Class.h"
# End Source File # End Source File
# Begin Source File # Begin Source File

View File

@ -152,6 +152,7 @@ enum SettingID {
Directory_PluginInitial, Directory_PluginInitial,
Directory_PluginSelected, Directory_PluginSelected,
Directory_PluginUseSelected, Directory_PluginUseSelected,
Directory_PluginSync,
Directory_SnapShot, Directory_SnapShot,
Directory_SnapShotInitial, Directory_SnapShotInitial,
Directory_SnapShotSelected, Directory_SnapShotSelected,

View File

@ -1,6 +1,5 @@
#include "..\N64 System.h" #include "stdafx.h"
#include "..\Settings.h"
#include <common/CriticalSection.h>
#include "SettingType/SettingsType-Application.h" #include "SettingType/SettingsType-Application.h"
#include "SettingType/SettingsType-ApplicationIndex.h" #include "SettingType/SettingsType-ApplicationIndex.h"
#include "SettingType/SettingsType-Cheats.h" #include "SettingType/SettingsType-Cheats.h"
@ -201,6 +200,7 @@ void CSettings::AddHowToHandleSetting ()
AddHandler(Directory_PluginInitial, new CSettingTypeRelativePath("Plugin","")); AddHandler(Directory_PluginInitial, new CSettingTypeRelativePath("Plugin",""));
AddHandler(Directory_PluginSelected, new CSettingTypeApplication("Directory","Plugin",Directory_PluginInitial)); AddHandler(Directory_PluginSelected, new CSettingTypeApplication("Directory","Plugin",Directory_PluginInitial));
AddHandler(Directory_PluginUseSelected, new CSettingTypeApplication("Directory","Plugin - Use Selected",false)); AddHandler(Directory_PluginUseSelected, new CSettingTypeApplication("Directory","Plugin - Use Selected",false));
AddHandler(Directory_PluginSync, new CSettingTypeRelativePath("SyncPlugin",""));
AddHandler(Directory_SnapShot, new CSettingTypeSelectedDirectory(Directory_SnapShotInitial,Directory_SnapShotSelected,Directory_SnapShotUseSelected)); AddHandler(Directory_SnapShot, new CSettingTypeSelectedDirectory(Directory_SnapShotInitial,Directory_SnapShotSelected,Directory_SnapShotUseSelected));
AddHandler(Directory_SnapShotInitial, new CSettingTypeRelativePath("Screenshots","")); AddHandler(Directory_SnapShotInitial, new CSettingTypeRelativePath("Screenshots",""));
@ -284,6 +284,7 @@ void CSettings::AddHowToHandleSetting ()
AddHandler(Cheat_Range, new CSettingTypeCheats("_R")); AddHandler(Cheat_Range, new CSettingTypeCheats("_R"));
AddHandler(Cheat_RangeNotes, new CSettingTypeCheats("_RN")); AddHandler(Cheat_RangeNotes, new CSettingTypeCheats("_RN"));
#ifdef toremove
/* INFO(SettingsIniName,Default_None,Data_String,RelativePath,"Project64.cfg","",0); /* INFO(SettingsIniName,Default_None,Data_String,RelativePath,"Project64.cfg","",0);
if (SettingsIniFile == NULL) if (SettingsIniFile == NULL)
{ {
@ -603,6 +604,7 @@ void CSettings::AddHowToHandleSetting ()
#undef INFO #undef INFO
*/ */
#endif
} }
DWORD CSettings::FindGameSetting ( CSettings * _this, char * Name ) DWORD CSettings::FindGameSetting ( CSettings * _this, char * Name )