git-svn-id: https://localhost/svn/Project64/trunk@31 111125ac-702d-7242-af9c-5ba8ae61c1ef
This commit is contained in:
parent
ce1ff4d421
commit
8624a415b9
Binary file not shown.
Before Width: | Height: | Size: 70 KiB |
Binary file not shown.
Before Width: | Height: | Size: 45 KiB |
|
@ -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.
|
|
@ -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.
|
||||
|
|
@ -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
|
|
@ -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.
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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)
|
|
@ -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]
|
|
@ -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
|
||||
|
|
@ -38,8 +38,8 @@ RSC=rc.exe
|
|||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Release"
|
||||
# PROP Intermediate_Dir "Release"
|
||||
# PROP Output_Dir "../../Build/7zip/Release"
|
||||
# PROP Intermediate_Dir "../../Build/7zip/Release"
|
||||
# PROP Target_Dir ""
|
||||
# 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
|
||||
|
|
|
@ -3,12 +3,12 @@
|
|||
<pre>
|
||||
<h1>Build Log</h1>
|
||||
<h3>
|
||||
--------------------Configuration: 7zip - Win32 External Release--------------------
|
||||
--------------------Configuration: 7zip - Win32 Release--------------------
|
||||
</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\7zBuffer.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\Compress\LzmaDecode.c"
|
||||
]
|
||||
Creating command line "cl.exe @C:\DOCUME~1\NICHOL~1\LOCALS~1\Temp\RSP707.tmp"
|
||||
Creating temporary file "C:\DOCUME~1\NICHOL~1\LOCALS~1\Temp\RSP708.tmp" with contents
|
||||
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\RSPC53.tmp" with contents
|
||||
[
|
||||
/nologo /out:"../../Bin/External\7zip.lib"
|
||||
"\My Programs\Emulation\Projedt64\Build\7zip\External\7zAlloc.obj"
|
||||
"\My Programs\Emulation\Projedt64\Build\7zip\External\7zBuffer.obj"
|
||||
"\My Programs\Emulation\Projedt64\Build\7zip\External\7zCrc.obj"
|
||||
"\My Programs\Emulation\Projedt64\Build\7zip\External\7zDecode.obj"
|
||||
"\My Programs\Emulation\Projedt64\Build\7zip\External\7zExtract.obj"
|
||||
"\My Programs\Emulation\Projedt64\Build\7zip\External\7zHeader.obj"
|
||||
"\My Programs\Emulation\Projedt64\Build\7zip\External\7zIn.obj"
|
||||
"\My Programs\Emulation\Projedt64\Build\7zip\External\7zItem.obj"
|
||||
"\My Programs\Emulation\Projedt64\Build\7zip\External\7zMethodID.obj"
|
||||
"\My Programs\Emulation\Projedt64\Build\7zip\External\LzmaDecode.obj"
|
||||
/nologo /out:"../../Build/7zip/Release\7zip.lib"
|
||||
"\My Programs\Emulation\Projedt64\Build\7zip\Release\7zAlloc.obj"
|
||||
"\My Programs\Emulation\Projedt64\Build\7zip\Release\7zBuffer.obj"
|
||||
"\My Programs\Emulation\Projedt64\Build\7zip\Release\7zCrc.obj"
|
||||
"\My Programs\Emulation\Projedt64\Build\7zip\Release\7zDecode.obj"
|
||||
"\My Programs\Emulation\Projedt64\Build\7zip\Release\7zExtract.obj"
|
||||
"\My Programs\Emulation\Projedt64\Build\7zip\Release\7zHeader.obj"
|
||||
"\My Programs\Emulation\Projedt64\Build\7zip\Release\7zIn.obj"
|
||||
"\My Programs\Emulation\Projedt64\Build\7zip\Release\7zItem.obj"
|
||||
"\My Programs\Emulation\Projedt64\Build\7zip\Release\7zMethodID.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>
|
||||
Compiling...
|
||||
7zAlloc.c
|
||||
|
|
|
@ -38,8 +38,8 @@ RSC=rc.exe
|
|||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Release"
|
||||
# PROP Intermediate_Dir "Release"
|
||||
# PROP Output_Dir "../../Build/Common/Release"
|
||||
# PROP Intermediate_Dir "../../Build/Common/Release"
|
||||
# PROP Target_Dir ""
|
||||
# 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
|
||||
|
|
|
@ -3,37 +3,63 @@
|
|||
<pre>
|
||||
<h1>Build Log</h1>
|
||||
<h3>
|
||||
--------------------Configuration: Common - Win32 Debug--------------------
|
||||
--------------------Configuration: Common - Win32 Release--------------------
|
||||
</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
|
||||
"D:\My Programs\Emulation\Project64\SOURCE\Common\stdafx.cpp"
|
||||
/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\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>
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
Trace.cpp
|
||||
Version.cpp
|
||||
Creating library...
|
||||
|
||||
|
||||
|
||||
<h3>Results</h3>
|
||||
stdafx.obj - 0 error(s), 14 warning(s)
|
||||
Common.lib - 0 error(s), 0 warning(s)
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -42,6 +42,7 @@ class CNotification;
|
|||
#include "N64 System/Recompiler/Recompiler Memory.h"
|
||||
#include "N64 System/Recompiler/Reg Info.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/Jump Info.h"
|
||||
#include "N64 System/Recompiler/Code Section.h"
|
||||
|
|
|
@ -490,12 +490,6 @@ void RefreshScreen( void )
|
|||
CC_Core::RefreshScreen();
|
||||
}
|
||||
|
||||
void ExecuteCycles(DWORD Cycles)
|
||||
{
|
||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
//ExecuteInterpreterOps(Cycles);
|
||||
}
|
||||
|
||||
void SyncSystem (void)
|
||||
{
|
||||
_N64System->SyncCPU(_SyncSystem);
|
||||
|
@ -666,7 +660,7 @@ void TLB_Probe()
|
|||
}
|
||||
|
||||
void SyncToPC (void) {
|
||||
FixRandomReg();
|
||||
//FixRandomReg();
|
||||
SyncSystem ();
|
||||
}
|
||||
|
||||
|
|
|
@ -67,7 +67,6 @@ BOOL Close_C_CPU ( void );
|
|||
void StopEmulation ( void );
|
||||
void __stdcall UpdateSyncCPU ( DWORD const Cycles );
|
||||
void StartInterpreterCPU ( void );
|
||||
void ExecuteCycles ( DWORD Cycles );
|
||||
void SyncSystem ( void );
|
||||
BOOL Machine_LoadState ( void );
|
||||
BOOL Machine_SaveState ( void );
|
||||
|
@ -128,7 +127,11 @@ extern CONTROL * g_Controllers;
|
|||
extern enum SystemType g_SystemType;
|
||||
|
||||
//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
|
||||
enum { NoOfFrames = 7 };
|
||||
|
|
|
@ -31,11 +31,11 @@
|
|||
|
||||
void OnFirstDMA (void) {
|
||||
switch (CicChip) {
|
||||
case 1: *(DWORD *)&((_MMU->Rdram())[0x318]) = RdramSize; break;
|
||||
case 2: *(DWORD *)&((_MMU->Rdram())[0x318]) = RdramSize; break;
|
||||
case 3: *(DWORD *)&((_MMU->Rdram())[0x318]) = RdramSize; break;
|
||||
case 5: *(DWORD *)&((_MMU->Rdram())[0x3F0]) = RdramSize; break;
|
||||
case 6: *(DWORD *)&((_MMU->Rdram())[0x318]) = RdramSize; break;
|
||||
case 1: *(DWORD *)&((_MMU->Rdram())[0x318]) = g_RdramSize; break;
|
||||
case 2: *(DWORD *)&((_MMU->Rdram())[0x318]) = g_RdramSize; break;
|
||||
case 3: *(DWORD *)&((_MMU->Rdram())[0x318]) = g_RdramSize; break;
|
||||
case 5: *(DWORD *)&((_MMU->Rdram())[0x3F0]) = g_RdramSize; break;
|
||||
case 6: *(DWORD *)&((_MMU->Rdram())[0x318]) = g_RdramSize; break;
|
||||
default: DisplayError("Unhandled CicChip(%d) in first DMA",CicChip);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
#ifdef toremove
|
||||
|
||||
/*
|
||||
* Project 64 - A Nintendo 64 emulator.
|
||||
*
|
||||
|
@ -36,3 +38,5 @@ void ExecuteInterpreterOps ( DWORD Cycles );
|
|||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -203,19 +203,23 @@ LRESULT CALLBACK LogGeneralProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||
}
|
||||
|
||||
void Log_LW (DWORD PC, DWORD VAddr) {
|
||||
DWORD Value;
|
||||
|
||||
if (!LogOptions.GenerateLog) { return; }
|
||||
|
||||
if ( VAddr < 0xA0000000 || VAddr >= 0xC0000000 ) {
|
||||
if (TLB_ReadMap[VAddr >> 12] == 0) { return; }
|
||||
__try {
|
||||
Value = *(DWORD *)(TLB_ReadMap[VAddr >> 12] + VAddr);
|
||||
} __except( EXCEPTION_EXECUTE_HANDLER ) {
|
||||
if (!LogOptions.LogUnknown) { return; }
|
||||
if ( VAddr < 0xA0000000 || VAddr >= 0xC0000000 )
|
||||
{
|
||||
DWORD PAddr;
|
||||
if (!_TransVaddr->TranslateVaddr(VAddr,PAddr))
|
||||
{
|
||||
if (LogOptions.LogUnknown)
|
||||
{
|
||||
LogMessage("%08X: read from unknown ??? (%08X)",PC,VAddr);
|
||||
}
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
VAddr = PAddr + 0xA0000000;
|
||||
}
|
||||
|
||||
DWORD Value;
|
||||
if ( VAddr >= 0xA0000000 && VAddr < (0xA0000000 + RdramSize)) { return; }
|
||||
if ( VAddr >= 0xA3F00000 && VAddr <= 0xA3F00024) {
|
||||
if (!LogOptions.LogRDRamRegisters) { return; }
|
||||
|
@ -401,7 +405,6 @@ void Log_LW (DWORD PC, DWORD VAddr) {
|
|||
}
|
||||
if (!LogOptions.LogUnknown) { return; }
|
||||
LogMessage("%08X: read from unknown ??? (%08X)",PC,VAddr);
|
||||
}
|
||||
}
|
||||
|
||||
void __cdecl LogMessage (char * Message, ...) {
|
||||
|
@ -424,18 +427,20 @@ void __cdecl LogMessage (char * Message, ...) {
|
|||
void Log_SW (DWORD PC, DWORD VAddr, DWORD Value) {
|
||||
if (!LogOptions.GenerateLog) { return; }
|
||||
|
||||
if ( VAddr < 0xA0000000 || VAddr >= 0xC0000000 ) {
|
||||
DWORD LoadValue;
|
||||
|
||||
if (TLB_ReadMap[VAddr >> 12] == 0) { return; }
|
||||
__try {
|
||||
LoadValue = *(DWORD *)(TLB_ReadMap[VAddr >> 12] + VAddr);
|
||||
} __except( EXCEPTION_EXECUTE_HANDLER ) {
|
||||
if (!LogOptions.LogUnknown) { return; }
|
||||
if ( VAddr < 0xA0000000 || VAddr >= 0xC0000000 )
|
||||
{
|
||||
DWORD PAddr;
|
||||
if (!_TransVaddr->TranslateVaddr(VAddr,PAddr))
|
||||
{
|
||||
if (LogOptions.LogUnknown)
|
||||
{
|
||||
LogMessage("%08X: Writing 0x%08X to %08X",PC, Value, VAddr );
|
||||
}
|
||||
return;
|
||||
}
|
||||
VAddr = PAddr + 0xA0000000;
|
||||
}
|
||||
|
||||
if ( VAddr >= 0xA0000000 && VAddr < (0xA0000000 + RdramSize)) { return; }
|
||||
if ( VAddr >= 0xA3F00000 && VAddr <= 0xA3F00024) {
|
||||
if (!LogOptions.LogRDRamRegisters) { return; }
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
* should be forwarded to them so if they want them.
|
||||
*
|
||||
*/
|
||||
#ifdef tofix
|
||||
#include <Windows.h>
|
||||
#include <commctrl.h>
|
||||
#include <stdio.h>
|
||||
|
@ -44,7 +45,6 @@ void FixRandomReg (void) {
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef tofix
|
||||
|
||||
|
||||
BOOL DisplaySectionInformation (BLOCK_SECTION * Section, DWORD ID, DWORD Test);
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifdef toremove
|
||||
/*
|
||||
* Project 64 - A Nintendo 64 emulator.
|
||||
*
|
||||
|
@ -243,3 +244,4 @@ extern N64_BLOCKS N64_Blocks;
|
|||
#define SetJump8(Loc,JumpLoc) *(BYTE *)(Loc)= (BYTE )(((BYTE )(JumpLoc)) - (((BYTE )(Loc)) + 1));
|
||||
|
||||
#endif
|
||||
#endif
|
|
@ -564,7 +564,7 @@ void SyncToPC (void) {
|
|||
FixRandomReg();
|
||||
SyncSystem ();
|
||||
return;
|
||||
|
||||
#ifdef toremove
|
||||
|
||||
{
|
||||
int RecNextInstruction, RecJumpToLocation;
|
||||
|
@ -601,6 +601,7 @@ void SyncToPC (void) {
|
|||
MemAddrUsedCount[0] = 0;
|
||||
MemAddrUsedCount[1] = 0;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
int Sync_MemoryFilter( DWORD dwExptCode, LPEXCEPTION_POINTERS lpEP) {
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
#include "stdafx.h"
|
||||
|
||||
R4300iOp::Func * CInterpreterCPU::m_R4300i_Opcode = NULL;
|
||||
DWORD CInterpreterCPU::m_CountPerOp = 2;
|
||||
|
||||
void ExecuteInterpreterOps (DWORD Cycles)
|
||||
{
|
||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
|
@ -287,8 +290,7 @@ InterruptsDisabled:
|
|||
|
||||
}
|
||||
|
||||
CInterpreterCPU::CInterpreterCPU () :
|
||||
m_R4300i_Opcode(NULL)
|
||||
CInterpreterCPU::CInterpreterCPU ()
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -297,22 +299,27 @@ CInterpreterCPU::~CInterpreterCPU()
|
|||
{
|
||||
}
|
||||
|
||||
void CInterpreterCPU::StartInterpreterCPU (void )
|
||||
void CInterpreterCPU::BuildCPU (void )
|
||||
{
|
||||
R4300iOp::m_TestTimer = FALSE;
|
||||
R4300iOp::m_NextInstruction = NORMAL;
|
||||
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;
|
||||
DWORD & PROGRAM_COUNTER = *_PROGRAM_COUNTER;
|
||||
OPCODE & Opcode = R4300iOp::m_Opcode;
|
||||
DWORD & JumpToLocation = R4300iOp::m_JumpToLocation;
|
||||
BOOL & TestTimer = R4300iOp::m_TestTimer;
|
||||
|
||||
R4300iOp::Func * R4300i_Opcode = R4300iOp::BuildInterpreter();
|
||||
//R4300iOp::Func * R4300i_Opcode = R4300iOp32::BuildInterpreter();
|
||||
BuildCPU();
|
||||
|
||||
__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: %d %d",*_PROGRAM_COUNTER,*_NextTimer,_SystemTimer->CurrentType());
|
||||
}*/
|
||||
*_NextTimer -= CountPerOp;
|
||||
R4300i_Opcode[ Opcode.op ]();
|
||||
*_NextTimer -= m_CountPerOp;
|
||||
m_R4300i_Opcode[ Opcode.op ]();
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,13 +1,15 @@
|
|||
class CInterpreterCPU :
|
||||
private R4300iOp
|
||||
{
|
||||
public:
|
||||
CInterpreterCPU();
|
||||
~CInterpreterCPU();
|
||||
|
||||
void StartInterpreterCPU (void );
|
||||
|
||||
R4300iOp::Func * m_R4300i_Opcode;
|
||||
public:
|
||||
static void BuildCPU ( void );
|
||||
static void ExecuteCPU ( void );
|
||||
static void ExecuteOps ( int Cycles );
|
||||
|
||||
private:
|
||||
static R4300iOp::Func * m_R4300i_Opcode;
|
||||
static DWORD m_CountPerOp;
|
||||
};
|
|
@ -1,6 +1,6 @@
|
|||
//#include <windows.h>
|
||||
|
||||
#ifdef toremove
|
||||
#include <windows.h>
|
||||
|
||||
enum MemorySize { _8Bit, _16Bit, _32Bit, _64Bit };
|
||||
|
||||
class CC_Core;
|
||||
|
@ -13,9 +13,6 @@ public:
|
|||
virtual bool WriteToProtectedMemory (DWORD Address, int length) = 0;
|
||||
};
|
||||
|
||||
class CCodeSection;
|
||||
class CRegInfo;
|
||||
|
||||
class CMipsMemory
|
||||
{
|
||||
public:
|
||||
|
@ -44,205 +41,29 @@ public:
|
|||
virtual void UnProtectMemory ( DWORD StartVaddr, DWORD EndVaddr ) = 0;
|
||||
|
||||
//Compilation Functions
|
||||
virtual void ResetMemoryStack ( CRegInfo & RegInfo ) = 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_LW ( CCodeSection * Section, CX86Ops::x86Reg Reg, DWORD Addr ) = 0;
|
||||
virtual void Compile_SB_Const ( BYTE Value, DWORD Addr ) = 0;
|
||||
virtual void Compile_SB_Register ( CX86Ops::x86Reg Reg, DWORD Addr ) = 0;
|
||||
virtual void Compile_SH_Const ( WORD Value, DWORD Addr ) = 0;
|
||||
virtual void Compile_SH_Register ( CX86Ops::x86Reg Reg, DWORD Addr ) = 0;
|
||||
virtual void Compile_SW_Const ( DWORD Value, DWORD Addr ) = 0;
|
||||
virtual void Compile_SW_Register ( CRegInfo & RegInfo, CX86Ops::x86Reg Reg, DWORD Addr ) = 0;
|
||||
virtual void ResetMemoryStack ( void ) = 0;
|
||||
|
||||
virtual void Compile_LB ( void ) = 0;
|
||||
virtual void Compile_LBU ( void ) = 0;
|
||||
virtual void Compile_LH ( void ) = 0;
|
||||
virtual void Compile_LHU ( void ) = 0;
|
||||
virtual void Compile_LW ( void ) = 0;
|
||||
virtual void Compile_LWC1 ( void ) = 0;
|
||||
virtual void Compile_LWU ( void ) = 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;
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
#include "stdafx.h"
|
|
@ -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
|
@ -35,17 +35,6 @@ public:
|
|||
|
||||
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:
|
||||
TIMER_DETAILS m_TimerDetatils[MaxTimer];
|
||||
int m_Timer; //How many cycles to the next event
|
||||
|
|
|
@ -683,6 +683,7 @@ bool CN64System::SetActiveSystem( bool bActive )
|
|||
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_bInitilized = true;
|
||||
bInitPlugin = true;
|
||||
}
|
||||
|
||||
|
@ -902,17 +903,13 @@ void CN64System::ExecuteCPU ( void )
|
|||
void CN64System::ExecuteInterpret (CC_Core & C_Core) {
|
||||
C_Core.SetN64System(this);
|
||||
InitializeCPUCore();
|
||||
|
||||
CInterpreterCPU Interpreter;
|
||||
Interpreter.StartInterpreterCPU();
|
||||
|
||||
//StartInterpreterCPU();
|
||||
CInterpreterCPU::ExecuteCPU();
|
||||
}
|
||||
|
||||
void CN64System::ExecuteRecompiler (CC_Core & C_Core)
|
||||
{
|
||||
//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);
|
||||
InitializeCPUCore();
|
||||
m_Recomp->Run();
|
||||
|
@ -920,15 +917,28 @@ void CN64System::ExecuteRecompiler (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");
|
||||
_Plugins->CopyPlugins(_Settings->LoadString(SyncPluginDir));
|
||||
//copy the plugins
|
||||
_Plugins->CopyPlugins(_Settings->LoadString(Directory_PluginSync));
|
||||
CMainGui SyncWindow(false);
|
||||
CPlugins SyncPlugins ( _Settings->LoadString(Directory_PluginSync) );
|
||||
SyncPlugins.SetRenderWindows(&SyncWindow,&SyncWindow);
|
||||
|
||||
m_SyncCPU = new CN64System(&SyncPlugins, false);
|
||||
m_Recomp = new CRecompiler(m_Profile,m_EndEmulation);
|
||||
|
||||
_SyncSystem = m_SyncCPU;
|
||||
|
||||
SetActiveSystem();
|
||||
m_SyncCPU->SetActiveSystem();
|
||||
SetActiveSystem();
|
||||
|
||||
C_Core.SetN64System(this);
|
||||
InitializeCPUCore();
|
||||
CInterpreterCPU::BuildCPU();
|
||||
m_Recomp->Run();
|
||||
|
||||
/*
|
||||
|
||||
CPlugins SyncPlugins ( _Settings->LoadString(SyncPluginDir) );
|
||||
CN64System SyncSystem ( _Notify,&SyncPlugins); //Create the backend n64 system
|
||||
m_SyncCPU = &SyncSystem;
|
||||
SyncSystem.SetupSystem(_Rom,false,true);
|
||||
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
|
||||
if (CyclesToExecute < 0) { return; }
|
||||
CC_Core::SetCurrentSystem(SecondCPU);
|
||||
SecondCPU->ExecuteCycles(CyclesToExecute);
|
||||
CC_Core::SetCurrentSystem(this);
|
||||
}
|
||||
|
||||
void CN64System::ExecuteCycles (DWORD Cycles) {
|
||||
::ExecuteCycles(Cycles);
|
||||
SecondCPU->SetActiveSystem(true);
|
||||
CC_Core::SetCurrentSystem(SecondCPU);
|
||||
|
||||
CInterpreterCPU::ExecuteOps(Cycles);
|
||||
|
||||
SetActiveSystem(true);
|
||||
CC_Core::SetCurrentSystem(this);
|
||||
}
|
||||
|
||||
void CN64System::SyncCPU (CN64System * const SecondCPU) {
|
||||
|
@ -1019,13 +1030,10 @@ void CN64System::SyncCPU (CN64System * const SecondCPU) {
|
|||
|
||||
for (int z = 0; z < 0x100; z++)
|
||||
{
|
||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
#ifdef tofix
|
||||
if (_MMU->RDRAM[0x00325044 + z] != SecondCPU->_MMU->RDRAM[0x00325044 + z])
|
||||
if (m_MMU_VM.Rdram()[0x00325044 + z] != SecondCPU->m_MMU_VM.Rdram()[0x00325044 + z])
|
||||
{
|
||||
ErrorFound = true;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (bSPHack())
|
||||
|
@ -1039,11 +1047,8 @@ void CN64System::SyncCPU (CN64System * const SecondCPU) {
|
|||
#endif
|
||||
}
|
||||
|
||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
#ifdef tofix
|
||||
if (m_Reg.GetCurrentTimer() != SecondCPU->m_Reg.GetCurrentTimer()) { ErrorFound = true; }
|
||||
if (m_Reg.GetCurrentTimerType() != SecondCPU->m_Reg.GetCurrentTimerType()) { ErrorFound = true; }
|
||||
#endif
|
||||
if (m_SystemTimer.CurrentType() != SecondCPU->m_SystemTimer.CurrentType()) { ErrorFound = true; }
|
||||
if (m_NextTimer != SecondCPU->m_NextTimer) { ErrorFound = true; }
|
||||
|
||||
if (ErrorFound) { DumpSyncErrors(SecondCPU); }
|
||||
|
||||
|
|
|
@ -71,7 +71,6 @@ private:
|
|||
static void stLoadFileImage ( FileImageInfo * Info );
|
||||
static void StartEmulationThread ( FileImageInfo * Info );
|
||||
|
||||
void ExecuteCycles ( DWORD Cycles );
|
||||
void ExecuteCPU ( void );
|
||||
void RefreshScreen ( void );
|
||||
bool InternalEvent ( void );
|
||||
|
@ -83,7 +82,7 @@ private:
|
|||
bool LoadState ( void );
|
||||
void DumpSyncErrors ( CN64System * SecondCPU );
|
||||
void StartEmulation2 ( bool NewThread );
|
||||
bool SetActiveSystem ( bool bActive );
|
||||
bool SetActiveSystem ( bool bActive = true );
|
||||
void InitRegisters ( bool bPostPif, CMipsMemory & MMU );
|
||||
|
||||
//CPU Methods
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
class CCodeBlock
|
||||
class CCodeBlock :
|
||||
private CRecompilerOps
|
||||
{
|
||||
public:
|
||||
CCodeBlock(DWORD VAddrEnter, BYTE * RecompPos);
|
||||
|
@ -11,6 +12,7 @@ public:
|
|||
inline BYTE * CompiledLocation ( void ) const { return m_CompiledLocation; }
|
||||
inline int NoOfSections ( void ) const { return m_NoOfSections; }
|
||||
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 SetVAddrLast ( DWORD VAddr ) { m_VAddrLast = VAddr; }
|
||||
|
|
|
@ -2,21 +2,22 @@
|
|||
|
||||
void InPermLoop ( void );
|
||||
|
||||
void DoSomething ( void );
|
||||
int DelaySlotEffectsCompare ( DWORD PC, DWORD Reg1, DWORD Reg2 );
|
||||
|
||||
int DelaySlotEffectsJump (DWORD JumpPC) {
|
||||
OPCODE Command;
|
||||
OPCODE Command;
|
||||
|
||||
if (!_MMU->LW_VAddr(JumpPC, Command.Hex)) { return TRUE; }
|
||||
if (!_MMU->LW_VAddr(JumpPC, Command.Hex)) { return TRUE; }
|
||||
|
||||
switch (Command.op) {
|
||||
case R4300i_SPECIAL:
|
||||
switch (Command.op) {
|
||||
case R4300i_SPECIAL:
|
||||
switch (Command.funct) {
|
||||
case R4300i_SPECIAL_JR: return DelaySlotEffectsCompare(JumpPC,Command.rs,0);
|
||||
case R4300i_SPECIAL_JALR: return DelaySlotEffectsCompare(JumpPC,Command.rs,31);
|
||||
}
|
||||
break;
|
||||
case R4300i_REGIMM:
|
||||
case R4300i_REGIMM:
|
||||
switch (Command.rt) {
|
||||
case R4300i_REGIMM_BLTZ:
|
||||
case R4300i_REGIMM_BGEZ:
|
||||
|
@ -27,15 +28,15 @@ case R4300i_REGIMM:
|
|||
return DelaySlotEffectsCompare(JumpPC,Command.rs,0);
|
||||
}
|
||||
break;
|
||||
case R4300i_JAL:
|
||||
case R4300i_SPECIAL_JALR: return DelaySlotEffectsCompare(JumpPC,31,0); break;
|
||||
case R4300i_J: return FALSE;
|
||||
case R4300i_BEQ:
|
||||
case R4300i_BNE:
|
||||
case R4300i_BLEZ:
|
||||
case R4300i_BGTZ:
|
||||
case R4300i_JAL:
|
||||
case R4300i_SPECIAL_JALR: return DelaySlotEffectsCompare(JumpPC,31,0); break;
|
||||
case R4300i_J: return FALSE;
|
||||
case R4300i_BEQ:
|
||||
case R4300i_BNE:
|
||||
case R4300i_BLEZ:
|
||||
case R4300i_BGTZ:
|
||||
return DelaySlotEffectsCompare(JumpPC,Command.rs,Command.rt);
|
||||
case R4300i_CP1:
|
||||
case R4300i_CP1:
|
||||
switch (Command.fmt) {
|
||||
case R4300i_COP1_BC:
|
||||
switch (Command.ft) {
|
||||
|
@ -65,36 +66,36 @@ case R4300i_CP1:
|
|||
break;
|
||||
}
|
||||
break;
|
||||
case R4300i_BEQL:
|
||||
case R4300i_BNEL:
|
||||
case R4300i_BLEZL:
|
||||
case R4300i_BGTZL:
|
||||
case R4300i_BEQL:
|
||||
case R4300i_BNEL:
|
||||
case R4300i_BLEZL:
|
||||
case R4300i_BGTZL:
|
||||
return DelaySlotEffectsCompare(JumpPC,Command.rs,Command.rt);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
CCodeSection::CCodeSection( CCodeBlock * CodeBlock, DWORD EnterPC, DWORD ID) :
|
||||
m_BlockInfo(CodeBlock),
|
||||
m_EnterPC(EnterPC),
|
||||
m_SectionID(ID),
|
||||
m_ContinueSection(NULL),
|
||||
m_JumpSection(NULL),
|
||||
m_LinkAllowed(true),
|
||||
m_CompiledLocation(NULL),
|
||||
m_Test(0)
|
||||
m_BlockInfo(CodeBlock),
|
||||
m_EnterPC(EnterPC),
|
||||
m_SectionID(ID),
|
||||
m_ContinueSection(NULL),
|
||||
m_JumpSection(NULL),
|
||||
m_LinkAllowed(true),
|
||||
m_CompiledLocation(NULL),
|
||||
m_Test(0)
|
||||
{
|
||||
/*
|
||||
Test2 = 0;
|
||||
InLoop = false;
|
||||
DelaySlotSection = false;
|
||||
/*
|
||||
Test2 = 0;
|
||||
InLoop = false;
|
||||
DelaySlotSection = false;
|
||||
|
||||
*/
|
||||
if (&CodeBlock->EnterSection() == this)
|
||||
{
|
||||
*/
|
||||
if (&CodeBlock->EnterSection() == this)
|
||||
{
|
||||
m_LinkAllowed = false;
|
||||
m_RegEnter.Initilize();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CCodeSection::~CCodeSection( void )
|
||||
|
@ -103,8 +104,8 @@ CCodeSection::~CCodeSection( void )
|
|||
|
||||
void CCodeSection::CompileExit ( DWORD JumpPC, DWORD TargetPC, CRegInfo ExitRegSet, CExitInfo::EXIT_REASON reason, int CompileNow, void (*x86Jmp)(char * Label, DWORD Value))
|
||||
{
|
||||
if (!CompileNow)
|
||||
{
|
||||
if (!CompileNow)
|
||||
{
|
||||
char String[100];
|
||||
sprintf(String,"Exit_%d",m_BlockInfo->m_ExitInfo.size());
|
||||
if (x86Jmp == NULL)
|
||||
|
@ -123,23 +124,23 @@ if (!CompileNow)
|
|||
ExitInfo.JumpLoc = m_RecompPos - 4;
|
||||
m_BlockInfo->m_ExitInfo.push_back(ExitInfo);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//CPU_Message("CompileExit: %d",reason);
|
||||
CCodeSection TempSection(m_BlockInfo,-1,0);
|
||||
TempSection.m_RegWorkingSet = ExitRegSet;
|
||||
//CPU_Message("CompileExit: %d",reason);
|
||||
CCodeSection TempSection(m_BlockInfo,-1,0);
|
||||
TempSection.m_RegWorkingSet = ExitRegSet;
|
||||
|
||||
if (TargetPC != (DWORD)-1)
|
||||
{
|
||||
if (TargetPC != (DWORD)-1)
|
||||
{
|
||||
MoveConstToVariable(TargetPC,&_Reg->m_PROGRAM_COUNTER,"PROGRAM_COUNTER");
|
||||
UpdateCounters(ExitRegSet,false,TargetPC <= JumpPC && reason == CExitInfo::Normal);
|
||||
} else {
|
||||
} else {
|
||||
UpdateCounters(ExitRegSet,false,reason == CExitInfo::Normal);
|
||||
}
|
||||
TempSection.m_RegWorkingSet.WriteBackRegisters();
|
||||
}
|
||||
TempSection.m_RegWorkingSet.WriteBackRegisters();
|
||||
|
||||
switch (reason) {
|
||||
case CExitInfo::Normal: case CExitInfo::Normal_NoSysCheck:
|
||||
switch (reason) {
|
||||
case CExitInfo::Normal: case CExitInfo::Normal_NoSysCheck:
|
||||
TempSection.m_RegWorkingSet.SetBlockCycleCount(0);
|
||||
if (TargetPC != (DWORD)-1)
|
||||
{
|
||||
|
@ -150,47 +151,47 @@ case CExitInfo::Normal: case CExitInfo::Normal_NoSysCheck:
|
|||
} else {
|
||||
if (reason == CExitInfo::Normal) { CompileSystemCheck((DWORD)-1,TempSection.m_RegWorkingSet); }
|
||||
}
|
||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
#ifdef tofix
|
||||
if (m_SyncSystem) { Call_Direct(SyncToPC, "SyncToPC"); }
|
||||
#endif
|
||||
#ifdef LinkBlocks
|
||||
if (_SyncSystem)
|
||||
{
|
||||
Call_Direct(SyncToPC, "SyncToPC");
|
||||
}
|
||||
#ifdef LinkBlocks
|
||||
if (bSMM_ValidFunc == false)
|
||||
{
|
||||
if (LookUpMode() == FuncFind_ChangeMemory)
|
||||
{
|
||||
BreakPoint(__FILE__,__LINE__);
|
||||
// BYTE * Jump, * Jump2;
|
||||
// if (TargetPC >= 0x80000000 && TargetPC < 0xC0000000) {
|
||||
// DWORD pAddr = TargetPC & 0x1FFFFFFF;
|
||||
//
|
||||
// MoveVariableToX86reg((BYTE *)RDRAM + pAddr,"RDRAM + pAddr",x86_EAX);
|
||||
// Jump2 = NULL;
|
||||
// } else {
|
||||
// MoveConstToX86reg((TargetPC >> 12),x86_ECX);
|
||||
// MoveConstToX86reg(TargetPC,x86_EBX);
|
||||
// MoveVariableDispToX86Reg(TLB_ReadMap,"TLB_ReadMap",x86_ECX,x86_ECX,4);
|
||||
// TestX86RegToX86Reg(x86_ECX,x86_ECX);
|
||||
// JeLabel8("NoTlbEntry",0);
|
||||
// Jump2 = m_RecompPos - 1;
|
||||
// MoveX86regPointerToX86reg(x86_ECX, x86_EBX,x86_EAX);
|
||||
// }
|
||||
// MoveX86RegToX86Reg(x86_EAX,x86_ECX);
|
||||
// AndConstToX86Reg(x86_ECX,0xFFFF0000);
|
||||
// CompConstToX86reg(x86_ECX,0x7C7C0000);
|
||||
// JneLabel8("NoCode",0);
|
||||
// Jump = m_RecompPos - 1;
|
||||
// AndConstToX86Reg(x86_EAX,0xFFFF);
|
||||
// ShiftLeftSignImmed(x86_EAX,4);
|
||||
// AddConstToX86Reg(x86_EAX,0xC);
|
||||
// MoveVariableDispToX86Reg(OrigMem,"OrigMem",x86_ECX,x86_EAX,1);
|
||||
// JmpDirectReg(x86_ECX);
|
||||
// CPU_Message(" NoCode:");
|
||||
// *((BYTE *)(Jump))=(BYTE)(m_RecompPos - Jump - 1);
|
||||
// if (Jump2 != NULL) {
|
||||
// CPU_Message(" NoTlbEntry:");
|
||||
// *((BYTE *)(Jump2))=(BYTE)(m_RecompPos - Jump2 - 1);
|
||||
// }
|
||||
// BYTE * Jump, * Jump2;
|
||||
// if (TargetPC >= 0x80000000 && TargetPC < 0xC0000000) {
|
||||
// DWORD pAddr = TargetPC & 0x1FFFFFFF;
|
||||
//
|
||||
// MoveVariableToX86reg((BYTE *)RDRAM + pAddr,"RDRAM + pAddr",x86_EAX);
|
||||
// Jump2 = NULL;
|
||||
// } else {
|
||||
// MoveConstToX86reg((TargetPC >> 12),x86_ECX);
|
||||
// MoveConstToX86reg(TargetPC,x86_EBX);
|
||||
// MoveVariableDispToX86Reg(TLB_ReadMap,"TLB_ReadMap",x86_ECX,x86_ECX,4);
|
||||
// TestX86RegToX86Reg(x86_ECX,x86_ECX);
|
||||
// JeLabel8("NoTlbEntry",0);
|
||||
// Jump2 = m_RecompPos - 1;
|
||||
// MoveX86regPointerToX86reg(x86_ECX, x86_EBX,x86_EAX);
|
||||
// }
|
||||
// MoveX86RegToX86Reg(x86_EAX,x86_ECX);
|
||||
// AndConstToX86Reg(x86_ECX,0xFFFF0000);
|
||||
// CompConstToX86reg(x86_ECX,0x7C7C0000);
|
||||
// JneLabel8("NoCode",0);
|
||||
// Jump = m_RecompPos - 1;
|
||||
// AndConstToX86Reg(x86_EAX,0xFFFF);
|
||||
// ShiftLeftSignImmed(x86_EAX,4);
|
||||
// AddConstToX86Reg(x86_EAX,0xC);
|
||||
// MoveVariableDispToX86Reg(OrigMem,"OrigMem",x86_ECX,x86_EAX,1);
|
||||
// JmpDirectReg(x86_ECX);
|
||||
// CPU_Message(" NoCode:");
|
||||
// *((BYTE *)(Jump))=(BYTE)(m_RecompPos - Jump - 1);
|
||||
// if (Jump2 != NULL) {
|
||||
// CPU_Message(" NoTlbEntry:");
|
||||
// *((BYTE *)(Jump2))=(BYTE)(m_RecompPos - Jump2 - 1);
|
||||
// }
|
||||
}
|
||||
else if (LookUpMode() == FuncFind_VirtualLookup)
|
||||
{
|
||||
|
@ -237,106 +238,102 @@ _Notify->BreakPoint(__FILE__,__LINE__);
|
|||
}
|
||||
}
|
||||
}
|
||||
Ret();
|
||||
#else
|
||||
Ret();
|
||||
#endif
|
||||
ExitCodeBlock();
|
||||
#else
|
||||
ExitCodeBlock();
|
||||
#endif
|
||||
break;
|
||||
case CExitInfo::DoCPU_Action:
|
||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
#ifdef tofix
|
||||
case CExitInfo::DoCPU_Action:
|
||||
Call_Direct(DoSomething,"DoSomething");
|
||||
if (m_SyncSystem) { Call_Direct(SyncToPC, "SyncToPC"); }
|
||||
#endif
|
||||
Ret();
|
||||
if (_SyncSystem) { Call_Direct(SyncToPC, "SyncToPC"); }
|
||||
ExitCodeBlock();
|
||||
break;
|
||||
case CExitInfo::DoSysCall:
|
||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
#ifdef tofix
|
||||
case CExitInfo::DoSysCall:
|
||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
#ifdef tofix
|
||||
MoveConstToX86reg(NextInstruction == JUMP || NextInstruction == DELAY_SLOT,x86_ECX);
|
||||
Call_Direct(DoSysCallException,"DoSysCallException");
|
||||
if (m_SyncSystem) { Call_Direct(SyncToPC, "SyncToPC"); }
|
||||
Ret();
|
||||
#endif
|
||||
if (_SyncSystem) { Call_Direct(SyncToPC, "SyncToPC"); }
|
||||
ExitCodeBlock();
|
||||
#endif
|
||||
break;
|
||||
case CExitInfo::COP1_Unuseable:
|
||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
#ifdef tofix
|
||||
case CExitInfo::COP1_Unuseable:
|
||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
#ifdef tofix
|
||||
MoveConstToX86reg(NextInstruction == JUMP || NextInstruction == DELAY_SLOT,x86_ECX);
|
||||
MoveConstToX86reg(1,x86_EDX);
|
||||
Call_Direct(DoCopUnusableException,"DoCopUnusableException");
|
||||
if (m_SyncSystem) { Call_Direct(SyncToPC, "SyncToPC"); }
|
||||
Ret();
|
||||
#endif
|
||||
if (_SyncSystem) { Call_Direct(SyncToPC, "SyncToPC"); }
|
||||
ExitCodeBlock();
|
||||
#endif
|
||||
break;
|
||||
case CExitInfo::ExitResetRecompCode:
|
||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
#ifdef tofix
|
||||
case CExitInfo::ExitResetRecompCode:
|
||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
#ifdef tofix
|
||||
if (NextInstruction == JUMP || NextInstruction == DELAY_SLOT) {
|
||||
X86BreakPoint(__FILE__,__LINE__);
|
||||
}
|
||||
if (m_SyncSystem) { Call_Direct(SyncToPC, "SyncToPC"); }
|
||||
if (_SyncSystem) { Call_Direct(SyncToPC, "SyncToPC"); }
|
||||
X86BreakPoint(__FILE__,__LINE__);
|
||||
MoveVariableToX86reg(this,"this",x86_ECX);
|
||||
Call_Direct(AddressOf(ResetRecompCode), "ResetRecompCode");
|
||||
#endif
|
||||
Ret();
|
||||
#endif
|
||||
ExitCodeBlock();
|
||||
break;
|
||||
case CExitInfo::TLBReadMiss:
|
||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
#ifdef tofix
|
||||
case CExitInfo::TLBReadMiss:
|
||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
#ifdef tofix
|
||||
MoveConstToX86reg(NextInstruction == JUMP || NextInstruction == DELAY_SLOT,x86_ECX);
|
||||
MoveVariableToX86reg(&TLBLoadAddress,"TLBLoadAddress",x86_EDX);
|
||||
Call_Direct(DoTLBMiss,"DoTLBMiss");
|
||||
if (m_SyncSystem) { Call_Direct(SyncToPC, "SyncToPC"); }
|
||||
if (_SyncSystem) { Call_Direct(SyncToPC, "SyncToPC"); }
|
||||
Ret();
|
||||
#endif
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
default:
|
||||
DisplayError("how did you want to exit on reason (%d) ???",reason);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CCodeSection::CompileSystemCheck (DWORD TargetPC, const CRegInfo & RegSet)
|
||||
{
|
||||
CompConstToVariable(0,&g_CPU_Action->DoSomething,"g_CPU_Action.DoSomething");
|
||||
JeLabel32("Continue_From_Interrupt_Test",0);
|
||||
DWORD * Jump = (DWORD *)(m_RecompPos - 4);
|
||||
if (TargetPC != (DWORD)-1)
|
||||
{
|
||||
CompConstToVariable(0,&g_CPU_Action->DoSomething,"g_CPU_Action.DoSomething");
|
||||
JeLabel32("Continue_From_Interrupt_Test",0);
|
||||
DWORD * Jump = (DWORD *)(m_RecompPos - 4);
|
||||
if (TargetPC != (DWORD)-1)
|
||||
{
|
||||
MoveConstToVariable(TargetPC,&_Reg->m_PROGRAM_COUNTER,"PROGRAM_COUNTER");
|
||||
}
|
||||
}
|
||||
|
||||
CCodeSection Section(NULL,-1,0);
|
||||
Section.m_RegWorkingSet = RegSet;
|
||||
Section.m_RegWorkingSet.WriteBackRegisters();
|
||||
CompileExit(-1, -1,Section.m_RegWorkingSet,CExitInfo::DoCPU_Action,true,NULL);
|
||||
CPU_Message("");
|
||||
CPU_Message(" $Continue_From_Interrupt_Test:");
|
||||
SetJump32(Jump,(DWORD *)m_RecompPos);
|
||||
CCodeSection Section(NULL,-1,0);
|
||||
Section.m_RegWorkingSet = RegSet;
|
||||
Section.m_RegWorkingSet.WriteBackRegisters();
|
||||
CompileExit(-1, -1,Section.m_RegWorkingSet,CExitInfo::DoCPU_Action,true,NULL);
|
||||
CPU_Message("");
|
||||
CPU_Message(" $Continue_From_Interrupt_Test:");
|
||||
SetJump32(Jump,(DWORD *)m_RecompPos);
|
||||
}
|
||||
|
||||
void CCodeSection::GenerateSectionLinkage (void)
|
||||
{
|
||||
CCodeSection * TargetSection[] = { m_ContinueSection, m_JumpSection };
|
||||
CJumpInfo * JumpInfo[] = { &m_Cont, &m_Jump };
|
||||
BYTE * Jump;
|
||||
int count;
|
||||
CCodeSection * TargetSection[] = { m_ContinueSection, m_JumpSection };
|
||||
CJumpInfo * JumpInfo[] = { &m_Cont, &m_Jump };
|
||||
int count;
|
||||
|
||||
for (count = 0; count < 2; count ++)
|
||||
{
|
||||
for (count = 0; count < 2; count ++)
|
||||
{
|
||||
if (JumpInfo[count]->LinkLocation == NULL &&
|
||||
JumpInfo[count]->FallThrough == false)
|
||||
{
|
||||
JumpInfo[count]->TargetPC = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((CRecompilerOps::CompilePC() & 0xFFC) == 0xFFC) {
|
||||
if ((CRecompilerOps::CompilePC() & 0xFFC) == 0xFFC) {
|
||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
#ifdef tofix
|
||||
#ifdef tofix
|
||||
//Handle Fall througth
|
||||
Jump = NULL;
|
||||
BYTE * Jump = NULL;
|
||||
for (count = 0; count < 2; count ++) {
|
||||
if (!JumpInfo[count]->FallThrough) { continue; }
|
||||
JumpInfo[count]->FallThrough = false;
|
||||
|
@ -376,14 +373,14 @@ if ((CRecompilerOps::CompilePC() & 0xFFC) == 0xFFC) {
|
|||
MoveConstToVariable(CRecompilerOps::CompilePC() + 4,_PROGRAM_COUNTER,"PROGRAM_COUNTER");
|
||||
m_RegWorkingSet.WriteBackRegisters();
|
||||
m_RegWorkingSet.UpdateCounters(&BlockCycleCount(),&BlockRandomModifier(),false);
|
||||
// WriteBackRegisters(Section);
|
||||
// if (m_SyncSystem) { Call_Direct(SyncToPC, "SyncToPC"); }
|
||||
// WriteBackRegisters(Section);
|
||||
// if (_SyncSystem) { Call_Direct(SyncToPC, "SyncToPC"); }
|
||||
MoveConstToVariable(DELAY_SLOT,&NextInstruction,"NextInstruction");
|
||||
Ret();
|
||||
#endif
|
||||
ExitCodeBlock();
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
if (!g_UseLinking) {
|
||||
}
|
||||
if (!g_UseLinking) {
|
||||
if (CRecompilerOps::m_CompilePC == m_Jump.TargetPC && (m_Cont.FallThrough == false)) {
|
||||
if (!DelaySlotEffectsJump(CRecompilerOps::CompilePC())) {
|
||||
CPU_Message("PermLoop *** a");
|
||||
|
@ -400,8 +397,8 @@ _Notify->BreakPoint(__FILE__,__LINE__);
|
|||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
if (TargetSection[0] != TargetSection[1] || TargetSection[0] == NULL) {
|
||||
}
|
||||
if (TargetSection[0] != TargetSection[1] || TargetSection[0] == NULL) {
|
||||
for (count = 0; count < 2; count ++) {
|
||||
if (JumpInfo[count]->LinkLocation == NULL && JumpInfo[count]->FallThrough == false) {
|
||||
if (TargetSection[count])
|
||||
|
@ -437,18 +434,18 @@ _Notify->BreakPoint(__FILE__,__LINE__);
|
|||
//FreeSection(TargetSection[count],Section);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
} else {
|
||||
if (m_Cont.LinkLocation == NULL && m_Cont.FallThrough == false) { m_ContinueSection = NULL; }
|
||||
if (m_Jump.LinkLocation == NULL && m_Jump.FallThrough == false) { m_JumpSection = NULL; }
|
||||
if (m_JumpSection == NULL && m_ContinueSection == NULL) {
|
||||
//FreeSection(TargetSection[0],Section);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TargetSection[0] = m_ContinueSection;
|
||||
TargetSection[1] = m_JumpSection;
|
||||
TargetSection[0] = m_ContinueSection;
|
||||
TargetSection[1] = m_JumpSection;
|
||||
|
||||
for (count = 0; count < 2; count ++) {
|
||||
for (count = 0; count < 2; count ++) {
|
||||
if (TargetSection[count] == NULL) { continue; }
|
||||
if (!JumpInfo[count]->FallThrough) { continue; }
|
||||
|
||||
|
@ -466,9 +463,9 @@ for (count = 0; count < 2; count ++) {
|
|||
}
|
||||
if (JumpInfo[count]->TargetPC <= CRecompilerOps::CompilePC()) {
|
||||
if (JumpInfo[count]->PermLoop) {
|
||||
CPU_Message("PermLoop *** 1");
|
||||
CPU_Message("PermLoop *** 1");
|
||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
#ifdef tofix
|
||||
#ifdef tofix
|
||||
MoveConstToVariable(JumpInfo[count]->TargetPC,_PROGRAM_COUNTER,"PROGRAM_COUNTER");
|
||||
JumpInfo[count]->RegSet.BlockCycleCount() -= g_CountPerOp;
|
||||
UpdateCounters(&JumpInfo[count]->RegSet.BlockCycleCount(),&JumpInfo[count]->RegSet.BlockRandomModifier(), false);
|
||||
|
@ -476,37 +473,37 @@ CPU_Message("PermLoop *** 1");
|
|||
JumpInfo[count]->RegSet.BlockCycleCount() += g_CountPerOp;
|
||||
UpdateCounters(&JumpInfo[count]->RegSet.BlockCycleCount(),&JumpInfo[count]->RegSet.BlockRandomModifier(), true);
|
||||
CompileSystemCheck(-1,JumpInfo[count]->RegSet);
|
||||
#endif
|
||||
#endif
|
||||
} else {
|
||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
#ifdef tofix
|
||||
#ifdef tofix
|
||||
UpdateCounters(&JumpInfo[count]->RegSet.BlockCycleCount(), &JumpInfo[count]->RegSet.BlockRandomModifier(), true);
|
||||
CompileSystemCheck(JumpInfo[count]->TargetPC,JumpInfo[count]->RegSet);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
} else {
|
||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
#ifdef tofix
|
||||
#ifdef tofix
|
||||
UpdateCounters(&JumpInfo[count]->RegSet.BlockCycleCount(), &JumpInfo[count]->RegSet.BlockRandomModifier(), false);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
#ifdef tofix
|
||||
#ifdef tofix
|
||||
JumpInfo[count]->RegSet.BlockCycleCount() = 0;
|
||||
m_RegWorkingSet = JumpInfo[count]->RegSet;
|
||||
SyncRegState(Section,&TargetSection[count]->RegStart);
|
||||
#endif
|
||||
#endif
|
||||
JmpLabel32(Label,0);
|
||||
SetJump32((DWORD *)m_RecompPos - 1,(DWORD *)(TargetSection[count]->m_CompiledLocation));
|
||||
}
|
||||
}
|
||||
//BlockCycleCount() = 0;
|
||||
//BlockRandomModifier() = 0;
|
||||
}
|
||||
//BlockCycleCount() = 0;
|
||||
//BlockRandomModifier() = 0;
|
||||
|
||||
for (count = 0; count < 2; count ++) {
|
||||
for (count = 0; count < 2; count ++) {
|
||||
if (TargetSection[count] == NULL) { continue; }
|
||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
#ifdef tofix
|
||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
#ifdef tofix
|
||||
if (TargetSection[count]->ParentSection.empty()) { continue; }
|
||||
for (SECTION_LIST::iterator iter = TargetSection[count]->ParentSection.begin(); iter != TargetSection[count]->ParentSection.end(); iter++)
|
||||
{
|
||||
|
@ -529,34 +526,31 @@ _Notify->BreakPoint(__FILE__,__LINE__);
|
|||
JumpInfo[count]->LinkLocation = m_RecompPos - 4;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
for (count = 0; count < 2; count ++) {
|
||||
for (count = 0; count < 2; count ++) {
|
||||
if (JumpInfo[count]->FallThrough) {
|
||||
if (JumpInfo[count]->TargetPC < CRecompilerOps::CompilePC()) {
|
||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
#ifdef tofix
|
||||
#ifdef tofix
|
||||
UpdateCounters(&JumpInfo[count]->RegSet.BlockCycleCount(),&JumpInfo[count]->RegSet.BlockRandomModifier(),true);
|
||||
#endif
|
||||
#endif
|
||||
CompileSystemCheck(JumpInfo[count]->TargetPC,JumpInfo[count]->RegSet);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CPU_Message("====== End of Section %d ======",m_SectionID);
|
||||
|
||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
#ifdef tofix
|
||||
for (count = 0; count < 2; count ++) {
|
||||
if (JumpInfo[count]->FallThrough) {
|
||||
GenerateX86Code(*(m_BlockInfo),TargetSection[count],m_BlockInfo->m_Test + 1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
//CPU_Message("Section %d",m_SectionID);
|
||||
for (count = 0; count < 2; count ++) {
|
||||
CPU_Message("====== End of Section %d ======",m_SectionID);
|
||||
|
||||
for (count = 0; count < 2; count ++) {
|
||||
if (JumpInfo[count]->FallThrough) {
|
||||
TargetSection[count]->GenerateX86Code(m_BlockInfo->NextTest());
|
||||
}
|
||||
}
|
||||
|
||||
//CPU_Message("Section %d",m_SectionID);
|
||||
for (count = 0; count < 2; count ++) {
|
||||
if (JumpInfo[count]->LinkLocation == NULL) { continue; }
|
||||
if (TargetSection[count] == NULL) {
|
||||
CPU_Message("ExitBlock (from %d):",m_SectionID);
|
||||
|
@ -575,9 +569,9 @@ for (count = 0; count < 2; count ++) {
|
|||
}
|
||||
if (TargetSection[count]->m_CompiledLocation == NULL) {
|
||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
#ifdef tofix
|
||||
#ifdef tofix
|
||||
GenerateX86Code(*TargetSection[count]->m_BlockInfo,TargetSection[count],m_BlockInfo->m_Test + 1);
|
||||
#endif
|
||||
#endif
|
||||
} else {
|
||||
char Label[100];
|
||||
|
||||
|
@ -591,12 +585,12 @@ for (count = 0; count < 2; count ++) {
|
|||
m_RegWorkingSet = JumpInfo[count]->RegSet;
|
||||
if (JumpInfo[count]->TargetPC <= CRecompilerOps::CompilePC()) {
|
||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
#ifdef tofix
|
||||
#ifdef tofix
|
||||
UpdateCounters(&JumpInfo[count]->RegSet.BlockCycleCount(),&JumpInfo[count]->RegSet.BlockRandomModifier(), true);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
if (JumpInfo[count]->PermLoop) {
|
||||
CPU_Message("PermLoop *** 3");
|
||||
CPU_Message("PermLoop *** 3");
|
||||
MoveConstToVariable(JumpInfo[count]->TargetPC,_PROGRAM_COUNTER,"PROGRAM_COUNTER");
|
||||
Call_Direct(InPermLoop,"InPermLoop");
|
||||
CompileSystemCheck(-1,JumpInfo[count]->RegSet);
|
||||
|
@ -605,26 +599,26 @@ CPU_Message("PermLoop *** 3");
|
|||
}
|
||||
} else{
|
||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
#ifdef tofix
|
||||
#ifdef tofix
|
||||
UpdateCounters(&JumpInfo[count]->RegSet.BlockCycleCount(),&JumpInfo[count]->RegSet.BlockRandomModifier(), false);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
m_RegWorkingSet = JumpInfo[count]->RegSet;
|
||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
#ifdef tofix
|
||||
#ifdef tofix
|
||||
SyncRegState(Section,&TargetSection[count]->RegStart);
|
||||
#endif
|
||||
#endif
|
||||
JmpLabel32(Label,0);
|
||||
SetJump32((DWORD *)m_RecompPos - 1,(DWORD *)(TargetSection[count]->m_CompiledLocation));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool CCodeSection::GenerateX86Code ( DWORD Test )
|
||||
{
|
||||
if (this == NULL) { return false; }
|
||||
if (this == NULL) { return false; }
|
||||
|
||||
if (m_CompiledLocation != NULL) {
|
||||
if (m_CompiledLocation != NULL) {
|
||||
if (m_Test == Test)
|
||||
{
|
||||
return false;
|
||||
|
@ -633,10 +627,10 @@ if (m_CompiledLocation != NULL) {
|
|||
if (m_ContinueSection->GenerateX86Code(Test)) { return true; }
|
||||
if (m_JumpSection->GenerateX86Code(Test)) { return true; }
|
||||
return false;
|
||||
}
|
||||
}
|
||||
#ifdef tofix
|
||||
if (ParentSection.size() > 0)
|
||||
{
|
||||
if (ParentSection.size() > 0)
|
||||
{
|
||||
for (SECTION_LIST::iterator iter = ParentSection.begin(); iter != ParentSection.end(); iter++)
|
||||
{
|
||||
CBlockSection * Parent = *iter;
|
||||
|
@ -644,22 +638,22 @@ if (ParentSection.size() > 0)
|
|||
if (IsAllParentLoops(Parent,true,CBlockSection::GetNewTestValue())) { continue; }
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (!InheritParentInfo(Section)) { return false; }
|
||||
}
|
||||
if (!InheritParentInfo(Section)) { return false; }
|
||||
#endif
|
||||
m_RegWorkingSet = m_RegEnter;
|
||||
m_CompiledLocation = m_RecompPos;
|
||||
m_CompilePC = m_EnterPC;
|
||||
m_NextInstruction = NORMAL;
|
||||
m_RegWorkingSet = m_RegEnter;
|
||||
m_Section = this;
|
||||
m_RegWorkingSet = m_RegEnter;
|
||||
m_CompiledLocation = m_RecompPos;
|
||||
m_CompilePC = m_EnterPC;
|
||||
m_NextInstruction = NORMAL;
|
||||
m_RegWorkingSet = m_RegEnter;
|
||||
m_Section = this;
|
||||
|
||||
if (m_CompilePC < m_BlockInfo->VAddrFirst())
|
||||
{
|
||||
if (m_CompilePC < m_BlockInfo->VAddrFirst())
|
||||
{
|
||||
m_BlockInfo->SetVAddrFirst(m_CompilePC);
|
||||
}
|
||||
}
|
||||
|
||||
do {
|
||||
do {
|
||||
__try {
|
||||
if (!_MMU->LW_VAddr(m_CompilePC,m_Opcode.Hex))
|
||||
{
|
||||
|
@ -676,6 +670,15 @@ do {
|
|||
m_BlockInfo->SetVAddrLast(m_CompilePC);
|
||||
}
|
||||
|
||||
if (m_NextInstruction == NORMAL)
|
||||
{
|
||||
m_RegWorkingSet.WriteBackRegisters();
|
||||
UpdateCounters(m_RegWorkingSet,false,true);
|
||||
MoveConstToVariable(m_CompilePC,&_Reg->m_PROGRAM_COUNTER,"PROGRAM_COUNTER");
|
||||
// //MoveConstToVariable((DWORD)RecompPos(),&CurrentBlock,"CurrentBlock");
|
||||
if (_SyncSystem) { Call_Direct(SyncToPC, "SyncToPC"); }
|
||||
}
|
||||
|
||||
m_RegWorkingSet.SetBlockCycleCount(m_RegWorkingSet.GetBlockCycleCount() + g_CountPerOp);
|
||||
m_RegWorkingSet.ResetX86Protection();
|
||||
|
||||
|
@ -884,36 +887,37 @@ do {
|
|||
case R4300i_BGTZL:Compile_BranchLikely(BGTZ_Compare,false); break;
|
||||
case R4300i_BLEZL:Compile_BranchLikely(BLEZ_Compare,false); break;
|
||||
case R4300i_DADDIU: DADDIU(); break;
|
||||
case R4300i_LDL: LDL(); break;
|
||||
case R4300i_LDR: LDR(); break;
|
||||
case R4300i_LB: LB(); break;
|
||||
case R4300i_LH: LH(); break;
|
||||
case R4300i_LWL: LWL(); break;
|
||||
case R4300i_LW: LW(); break;
|
||||
case R4300i_LBU: LBU(); break;
|
||||
case R4300i_LHU: LHU(); break;
|
||||
case R4300i_LWR: LWR(); break;
|
||||
case R4300i_LWU: LWU(); break; //added by Witten
|
||||
case R4300i_SB: SB(); break;
|
||||
case R4300i_SH: SH(); break;
|
||||
case R4300i_SWL: SWL(); break;
|
||||
case R4300i_SW: SW(); break;
|
||||
case R4300i_SWR: SWR(); break;
|
||||
case R4300i_SDL: SDL(); break;
|
||||
case R4300i_SDR: SDR(); break;
|
||||
case R4300i_LDL: _MMU->Compile_LDL(); break;
|
||||
case R4300i_LDR: _MMU->Compile_LDR(); break;
|
||||
case R4300i_LB: _MMU->Compile_LB(); break;
|
||||
case R4300i_LH: _MMU->Compile_LH(); break;
|
||||
case R4300i_LWL: _MMU->Compile_LWL(); break;
|
||||
case R4300i_LW: _MMU->Compile_LW(); break;
|
||||
case R4300i_LBU: _MMU->Compile_LBU(); break;
|
||||
case R4300i_LHU: _MMU->Compile_LHU(); break;
|
||||
case R4300i_LWR: _MMU->Compile_LWR(); break;
|
||||
case R4300i_LWU: _MMU->Compile_LWU(); break; //added by Witten
|
||||
case R4300i_SB: _MMU->Compile_SB(); break;
|
||||
case R4300i_SH: _MMU->Compile_SH(); break;
|
||||
case R4300i_SWL: _MMU->Compile_SWL(); break;
|
||||
case R4300i_SW: _MMU->Compile_SW(); break;
|
||||
case R4300i_SWR: _MMU->Compile_SWR(); break;
|
||||
case R4300i_SDL: _MMU->Compile_SDL(); break;
|
||||
case R4300i_SDR: _MMU->Compile_SDR(); break;
|
||||
case R4300i_CACHE: CACHE(); break;
|
||||
case R4300i_LL: LL(); break;
|
||||
case R4300i_LWC1: LWC1(); break;
|
||||
case R4300i_LDC1: LDC1(); break;
|
||||
case R4300i_LWC1: _MMU->Compile_LWC1(); break;
|
||||
case R4300i_LDC1: _MMU->Compile_LDC1(); break;
|
||||
case R4300i_SC: SC(); break;
|
||||
case R4300i_LD: LD(); break;
|
||||
case R4300i_SWC1: SWC1(); break;
|
||||
case R4300i_SDC1: SDC1(); break;
|
||||
case R4300i_SD: SD(); break;
|
||||
case R4300i_LD: _MMU->Compile_LD(); break;
|
||||
case R4300i_SWC1: _MMU->Compile_SWC1(); break;
|
||||
case R4300i_SDC1: _MMU->Compile_SDC1(); break;
|
||||
case R4300i_SD: _MMU->Compile_SD(); break;
|
||||
default:
|
||||
UnknownOpcode(); break;
|
||||
}
|
||||
#ifdef tofix
|
||||
|
||||
#ifdef tofix
|
||||
if (!bRegCaching()) { WriteBackRegisters(); }
|
||||
|
||||
/*if ((DWORD)RecompPos > 0x60B452E6) {
|
||||
|
@ -943,9 +947,9 @@ do {
|
|||
|
||||
if ((m_CompilePC &0xFFC) == 0xFFC) {
|
||||
if (NextInstruction == DO_DELAY_SLOT) {
|
||||
#ifndef EXTERNAL_RELEASE
|
||||
#ifndef EXTERNAL_RELEASE
|
||||
DisplayError("Wanting to do delay slot over end of block");
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
if (NextInstruction == NORMAL) {
|
||||
CompileExit (Section,m_CompilePC, m_CompilePC + 4,m_RegWorkingSet,CExitInfo::Normal,true,NULL);
|
||||
|
@ -959,7 +963,7 @@ do {
|
|||
GenerateSectionLinkage();
|
||||
NextInstruction = END_BLOCK;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
switch (m_NextInstruction) {
|
||||
case NORMAL:
|
||||
|
@ -975,7 +979,7 @@ do {
|
|||
m_CompilePC -= 4;
|
||||
break;
|
||||
}
|
||||
} while (m_NextInstruction != END_BLOCK);
|
||||
} while (m_NextInstruction != END_BLOCK);
|
||||
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ public:
|
|||
CJumpInfo();
|
||||
|
||||
DWORD TargetPC;
|
||||
char * BranchLabel;
|
||||
stdstr BranchLabel;
|
||||
DWORD * LinkLocation;
|
||||
DWORD * LinkLocation2;
|
||||
BOOL FallThrough;
|
||||
|
|
|
@ -10,11 +10,10 @@
|
|||
#undef LinkBlocks
|
||||
#undef CountPerOp
|
||||
|
||||
CRecompiler::CRecompiler(CProfiling & Profile, bool & EndEmulation, bool SyncSystem) :
|
||||
CRecompiler::CRecompiler(CProfiling & Profile, bool & EndEmulation ) :
|
||||
m_Profile(Profile),
|
||||
PROGRAM_COUNTER(_Reg->m_PROGRAM_COUNTER),
|
||||
m_EndEmulation(EndEmulation),
|
||||
m_SyncSystem(SyncSystem),
|
||||
m_FunctionsDelaySlot()
|
||||
{
|
||||
|
||||
|
@ -89,10 +88,11 @@ void CRecompiler::RecompilerMain_VirtualTable ( void )
|
|||
{
|
||||
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)
|
||||
{
|
||||
CCompiledFunc * info = table[(PROGRAM_COUNTER & 0xFFF) >> 2];
|
||||
CCompiledFunc * info = table[TableEntry];
|
||||
if (info != NULL)
|
||||
{
|
||||
(info->Function())();
|
||||
|
@ -119,6 +119,18 @@ void CRecompiler::RecompilerMain_VirtualTable ( void )
|
|||
{
|
||||
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())();
|
||||
}
|
||||
}
|
||||
|
@ -712,7 +724,7 @@ CCompiledFunc * CRecompiler::CompileDelaySlot(DWORD PC)
|
|||
MoveX86regToVariable(x86Reg,&PROGRAM_COUNTER,"PROGRAM_COUNTER");
|
||||
MoveConstToVariable(NORMAL,&NextInstruction,"NextInstruction");
|
||||
if (CPU_Type == CPU_SyncCores) { Call_Direct(SyncToPC, "SyncToPC"); }
|
||||
Ret();
|
||||
ExitCodeBlock();
|
||||
CompileExitCode(BlockInfo);
|
||||
CPU_Message("====== End of recompiled code ======");
|
||||
|
||||
|
@ -2030,7 +2042,7 @@ CCompiledFunc * CRecompiler::CompilerCode ( void )
|
|||
}
|
||||
|
||||
CCompiledFunc * info = new CCompiledFunc(CodeBlock);
|
||||
|
||||
#ifdef toremove
|
||||
//if block linking then analysis
|
||||
//
|
||||
|
||||
|
@ -2066,6 +2078,7 @@ CCompiledFunc * CRecompiler::CompilerCode ( void )
|
|||
}
|
||||
#endif
|
||||
*/
|
||||
#endif
|
||||
return info;
|
||||
}
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ public:
|
|||
};
|
||||
|
||||
public:
|
||||
CRecompiler (CProfiling & Profile, bool & EndEmulation, bool SyncSystem);
|
||||
CRecompiler (CProfiling & Profile, bool & EndEmulation );
|
||||
~CRecompiler (void);
|
||||
|
||||
void Run ( void );
|
||||
|
@ -28,7 +28,6 @@ public:
|
|||
bool ClearRecompCode_Phys ( DWORD PhysicalAddress, int length, REMOVE_REASON Reason );
|
||||
|
||||
private:
|
||||
bool const m_SyncSystem;
|
||||
CProfiling & m_Profile;
|
||||
bool & m_EndEmulation;
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -35,32 +35,32 @@ protected:
|
|||
static void XORI ( void );
|
||||
static void LUI ( void );
|
||||
static void DADDIU ( void );
|
||||
static void LDL ( void );
|
||||
static void LDR ( void );
|
||||
static void LB ( void );
|
||||
static void LH ( void );
|
||||
static void LWL ( void );
|
||||
static void LW ( void );
|
||||
static void LBU ( void );
|
||||
static void LHU ( void );
|
||||
static void LWR ( void );
|
||||
static void LWU ( void ); //added by Witten
|
||||
static void SB ( void );
|
||||
static void SH ( void );
|
||||
static void SWL ( void );
|
||||
static void SW ( void );
|
||||
static void SWR ( void );
|
||||
static void SDL ( void );
|
||||
static void SDR ( void );
|
||||
// static void LDL ( void );
|
||||
// static void LDR ( void );
|
||||
// static void LB ( void );
|
||||
// static void LH ( void );
|
||||
// static void LWL ( void );
|
||||
// static void LW ( void );
|
||||
// static void LBU ( void );
|
||||
// static void LHU ( void );
|
||||
// static void LWR ( void );
|
||||
// static void LWU ( void ); //added by Witten
|
||||
// static void SB ( void );
|
||||
// static void SH ( void );
|
||||
// static void SWL ( void );
|
||||
// static void SW ( void );
|
||||
// static void SWR ( void );
|
||||
// static void SDL ( void );
|
||||
// static void SDR ( void );
|
||||
static void CACHE ( void );
|
||||
static void LL ( void );
|
||||
static void LWC1 ( void );
|
||||
static void LDC1 ( void );
|
||||
static void LD ( void );
|
||||
// static void LWC1 ( void );
|
||||
// static void LDC1 ( void );
|
||||
// static void LD ( void );
|
||||
static void SC ( void );
|
||||
static void SWC1 ( void );
|
||||
static void SDC1 ( void );
|
||||
static void SD ( void );
|
||||
// static void SWC1 ( void );
|
||||
// static void SDC1 ( void );
|
||||
// static void SD ( void );
|
||||
|
||||
/********************** R4300i OpCodes: Special **********************/
|
||||
static void SPECIAL_SLL ( void );
|
||||
|
@ -180,6 +180,9 @@ protected:
|
|||
/************************** Other functions **************************/
|
||||
static void UnknownOpcode ( void );
|
||||
|
||||
|
||||
static void EnterCodeBlock ( void );
|
||||
static void ExitCodeBlock ( void );
|
||||
static void CompileReadTLBMiss (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 );
|
||||
|
@ -250,6 +253,10 @@ protected:
|
|||
{
|
||||
m_RegWorkingSet.ProtectGPR(Reg);
|
||||
}
|
||||
static inline void UnProtectGPR ( DWORD Reg )
|
||||
{
|
||||
m_RegWorkingSet.UnProtectGPR(Reg);
|
||||
}
|
||||
static inline void ResetX86Protection ( void )
|
||||
{
|
||||
m_RegWorkingSet.ResetX86Protection();
|
||||
|
|
|
@ -336,7 +336,6 @@ CX86Ops::x86Reg CRegInfo::Map_TempReg (CX86Ops::x86Reg Reg, int MipsReg, BOOL Lo
|
|||
_Notify->BreakPoint(__FILE__,__LINE__);
|
||||
return x86_Unknown;
|
||||
}
|
||||
CPU_Message(" regcache: allocate %s as temp storage",x86_Name(Reg));
|
||||
}
|
||||
}
|
||||
else if (Reg == x86_Any8Bit)
|
||||
|
@ -407,7 +406,10 @@ CX86Ops::x86Reg CRegInfo::Map_TempReg (CX86Ops::x86Reg Reg, int MipsReg, BOOL Lo
|
|||
{
|
||||
UnMap_X86reg(Reg);
|
||||
}
|
||||
if (x86Mapped(Reg) != Temp_Mapped)
|
||||
{
|
||||
CPU_Message(" regcache: allocate %s as temp storage",x86_Name(Reg));
|
||||
}
|
||||
|
||||
if (MipsReg >= 0) {
|
||||
if (LoadHiWord) {
|
||||
|
@ -455,14 +457,21 @@ CX86Ops::x86Reg CRegInfo::Map_TempReg (CX86Ops::x86Reg Reg, int MipsReg, BOOL Lo
|
|||
}
|
||||
|
||||
void CRegInfo::ProtectGPR(DWORD Reg) {
|
||||
if (IsUnknown(Reg)) { return; }
|
||||
if (IsConst(Reg)) { return; }
|
||||
if (IsUnknown(Reg) || IsConst(Reg)) { return; }
|
||||
if (Is64Bit(Reg)) {
|
||||
x86Protected(MipsRegMapHi(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)
|
||||
{
|
||||
for (int count = 1; count < 10; count ++)
|
||||
|
@ -601,8 +610,8 @@ void CRegInfo::UnMap_GPR (DWORD Reg, bool WriteBackValue)
|
|||
x86Protected(MipsRegHi(Reg)) = FALSE;
|
||||
}
|
||||
CPU_Message(" regcache: unallocate %s from %s",x86_Name(MipsRegMapLo(Reg)),CRegName::GPR_Lo[Reg]);
|
||||
x86Mapped(MipsRegLo(Reg)) = NotMapped;
|
||||
x86Protected(MipsRegLo(Reg)) = FALSE;
|
||||
x86Mapped(MipsRegMapLo(Reg)) = NotMapped;
|
||||
x86Protected(MipsRegMapLo(Reg)) = FALSE;
|
||||
if (!WriteBackValue) {
|
||||
MipsRegState(Reg) = CRegInfo::STATE_UNKNOWN;
|
||||
return;
|
||||
|
@ -635,8 +644,11 @@ CX86Ops::x86Reg CRegInfo::UnMap_TempReg ( void )
|
|||
else if (x86Mapped(x86_ESP) == Temp_Mapped && !x86Protected(x86_ESP)) { Reg = x86_ESP; }
|
||||
|
||||
if (Reg != x86_Unknown)
|
||||
{
|
||||
if (x86Mapped(Reg) == Temp_Mapped)
|
||||
{
|
||||
CPU_Message(" regcache: unallocate %s from temp storage",x86_Name(Reg));
|
||||
}
|
||||
x86Mapped(Reg) = NotMapped;
|
||||
}
|
||||
return Reg;
|
||||
|
|
|
@ -47,6 +47,7 @@ public:
|
|||
void Map_GPR_64bit ( int MipsReg, int MipsRegToLoad );
|
||||
x86Reg Map_TempReg ( x86Reg Reg, int MipsReg, BOOL LoadHiWord );
|
||||
void ProtectGPR ( DWORD Reg );
|
||||
void UnProtectGPR ( DWORD Reg );
|
||||
void ResetX86Protection ( void );
|
||||
void UnMap_AllFPRs ( void );
|
||||
void UnMap_FPR ( int Reg, int WriteBackValue );
|
||||
|
|
|
@ -30,6 +30,8 @@ bool CCodeBlock::Compile()
|
|||
CPU_Message("Start of Block: %X",VAddrEnter() );
|
||||
CPU_Message("No of Sections: %d",NoOfSections() );
|
||||
CPU_Message("====== recompiled code ======");
|
||||
|
||||
EnterCodeBlock();
|
||||
#ifdef tofix
|
||||
if (bLinkBlocks()) {
|
||||
for (int count = 0; count < BlockInfo.NoOfSections; count ++) {
|
||||
|
@ -47,13 +49,17 @@ bool CCodeBlock::Compile()
|
|||
while (GenerateX86Code(BlockInfo,&BlockInfo.ParentSection,CBlockSection::GetNewTestValue()));
|
||||
} else {
|
||||
#endif
|
||||
m_EnterSection.GenerateX86Code(m_EnterSection.m_Test + 1);
|
||||
if (!m_EnterSection.GenerateX86Code(m_EnterSection.m_Test + 1))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#ifdef tofix
|
||||
}
|
||||
CompileExitCode(BlockInfo);
|
||||
#endif
|
||||
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
CJumpInfo::CJumpInfo()
|
||||
|
|
|
@ -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);
|
||||
PUTDST8(m_RecompPos,0x73);
|
||||
PUTDST8(m_RecompPos,Value);
|
||||
}
|
||||
|
||||
void CX86Ops::JaeLabel32(char * Label,DWORD Value) {
|
||||
void CX86Ops::JaeLabel32(const char * Label,DWORD Value) {
|
||||
CPU_Message(" jae $%s",Label);
|
||||
PUTDST16(m_RecompPos,0x830F);
|
||||
PUTDST32(m_RecompPos,Value);
|
||||
}
|
||||
|
||||
void CX86Ops::JaLabel8(char * Label, BYTE Value) {
|
||||
void CX86Ops::JaLabel8(const char * Label, BYTE Value) {
|
||||
CPU_Message(" ja $%s",Label);
|
||||
PUTDST8(m_RecompPos,0x77);
|
||||
PUTDST8(m_RecompPos,Value);
|
||||
}
|
||||
|
||||
void CX86Ops::JaLabel32(char * Label,DWORD Value) {
|
||||
void CX86Ops::JaLabel32(const char * Label,DWORD Value) {
|
||||
CPU_Message(" ja $%s",Label);
|
||||
PUTDST16(m_RecompPos,0x870F);
|
||||
PUTDST32(m_RecompPos,Value);
|
||||
}
|
||||
|
||||
void CX86Ops::JbLabel8(char * Label, BYTE Value) {
|
||||
void CX86Ops::JbLabel8(const char * Label, BYTE Value) {
|
||||
CPU_Message(" jb $%s",Label);
|
||||
PUTDST8(m_RecompPos,0x72);
|
||||
PUTDST8(m_RecompPos,Value);
|
||||
}
|
||||
|
||||
void CX86Ops::JbLabel32(char * Label,DWORD Value) {
|
||||
void CX86Ops::JbLabel32(const char * Label,DWORD Value) {
|
||||
CPU_Message(" jb $%s",Label);
|
||||
PUTDST16(m_RecompPos,0x820F);
|
||||
PUTDST32(m_RecompPos,Value);
|
||||
}
|
||||
|
||||
void CX86Ops::JecxzLabel8(char * Label, BYTE Value) {
|
||||
void CX86Ops::JecxzLabel8(const char * Label, BYTE Value) {
|
||||
CPU_Message(" jecxz $%s",Label);
|
||||
PUTDST8(m_RecompPos,0xE3);
|
||||
PUTDST8(m_RecompPos,Value);
|
||||
}
|
||||
|
||||
void CX86Ops::JeLabel8(char * Label, BYTE Value) {
|
||||
void CX86Ops::JeLabel8(const char * Label, BYTE Value) {
|
||||
CPU_Message(" je $%s",Label);
|
||||
PUTDST8(m_RecompPos,0x74);
|
||||
PUTDST8(m_RecompPos,Value);
|
||||
}
|
||||
|
||||
void CX86Ops::JeLabel32(char * Label,DWORD Value) {
|
||||
void CX86Ops::JeLabel32(const char * Label,DWORD Value) {
|
||||
CPU_Message(" je $%s",Label);
|
||||
PUTDST16(m_RecompPos,0x840F);
|
||||
PUTDST32(m_RecompPos,Value);
|
||||
}
|
||||
|
||||
void CX86Ops::JgeLabel32(char * Label,DWORD Value) {
|
||||
void CX86Ops::JgeLabel32(const char * Label,DWORD Value) {
|
||||
CPU_Message(" jge $%s",Label);
|
||||
PUTDST16(m_RecompPos,0x8D0F);
|
||||
PUTDST32(m_RecompPos,Value);
|
||||
}
|
||||
|
||||
void CX86Ops::JgLabel8(char * Label, BYTE Value) {
|
||||
void CX86Ops::JgLabel8(const char * Label, BYTE Value) {
|
||||
CPU_Message(" jg $%s",Label);
|
||||
PUTDST8(m_RecompPos,0x7F);
|
||||
PUTDST8(m_RecompPos,Value);
|
||||
}
|
||||
|
||||
void CX86Ops::JgLabel32(char * Label,DWORD Value) {
|
||||
void CX86Ops::JgLabel32(const char * Label,DWORD Value) {
|
||||
CPU_Message(" jg $%s",Label);
|
||||
PUTDST16(m_RecompPos,0x8F0F);
|
||||
PUTDST32(m_RecompPos,Value);
|
||||
}
|
||||
|
||||
void CX86Ops::JleLabel8(char * Label, BYTE Value) {
|
||||
void CX86Ops::JleLabel8(const char * Label, BYTE Value) {
|
||||
CPU_Message(" jle $%s",Label);
|
||||
PUTDST8(m_RecompPos,0x7E);
|
||||
PUTDST8(m_RecompPos,Value);
|
||||
}
|
||||
|
||||
void CX86Ops::JleLabel32(char * Label,DWORD Value) {
|
||||
void CX86Ops::JleLabel32(const char * Label,DWORD Value) {
|
||||
CPU_Message(" jle $%s",Label);
|
||||
PUTDST16(m_RecompPos,0x8E0F);
|
||||
PUTDST32(m_RecompPos,Value);
|
||||
}
|
||||
|
||||
void CX86Ops::JlLabel8(char * Label, BYTE Value) {
|
||||
void CX86Ops::JlLabel8(const char * Label, BYTE Value) {
|
||||
CPU_Message(" jl $%s",Label);
|
||||
PUTDST8(m_RecompPos,0x7C);
|
||||
PUTDST8(m_RecompPos,Value);
|
||||
}
|
||||
|
||||
void CX86Ops::JlLabel32(char * Label,DWORD Value) {
|
||||
void CX86Ops::JlLabel32(const char * Label,DWORD Value) {
|
||||
CPU_Message(" jl $%s",Label);
|
||||
PUTDST16(m_RecompPos,0x8C0F);
|
||||
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);
|
||||
PUTDST16(m_RecompPos, 0x25ff);
|
||||
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);
|
||||
PUTDST8(m_RecompPos,0xEB);
|
||||
PUTDST8(m_RecompPos,Value);
|
||||
}
|
||||
|
||||
void CX86Ops::JmpLabel32(char * Label, DWORD Value) {
|
||||
void CX86Ops::JmpLabel32(const char * Label, DWORD Value) {
|
||||
CPU_Message(" jmp $%s",Label);
|
||||
PUTDST8(m_RecompPos,0xE9);
|
||||
PUTDST32(m_RecompPos,Value);
|
||||
}
|
||||
|
||||
void CX86Ops::JneLabel8(char * Label, BYTE Value) {
|
||||
void CX86Ops::JneLabel8(const char * Label, BYTE Value) {
|
||||
CPU_Message(" jne $%s",Label);
|
||||
PUTDST8(m_RecompPos,0x75);
|
||||
PUTDST8(m_RecompPos,Value);
|
||||
}
|
||||
|
||||
void CX86Ops::JneLabel32(char *Label, DWORD Value) {
|
||||
void CX86Ops::JneLabel32(const char *Label, DWORD Value) {
|
||||
CPU_Message(" jne $%s",Label);
|
||||
PUTDST16(m_RecompPos,0x850F);
|
||||
PUTDST32(m_RecompPos,Value);
|
||||
}
|
||||
|
||||
void CX86Ops::JnsLabel8(char * Label, BYTE Value) {
|
||||
void CX86Ops::JnsLabel8(const char * Label, BYTE Value) {
|
||||
CPU_Message(" jns $%s",Label);
|
||||
PUTDST8(m_RecompPos,0x79);
|
||||
PUTDST8(m_RecompPos,Value);
|
||||
}
|
||||
|
||||
void CX86Ops::JnsLabel32(char *Label, DWORD Value) {
|
||||
void CX86Ops::JnsLabel32(const char *Label, DWORD Value) {
|
||||
CPU_Message(" jns $%s",Label);
|
||||
PUTDST16(m_RecompPos,0x890F);
|
||||
PUTDST32(m_RecompPos,Value);
|
||||
}
|
||||
|
||||
void CX86Ops::JsLabel32(char *Label, DWORD Value) {
|
||||
void CX86Ops::JsLabel32(const char *Label, DWORD Value) {
|
||||
CPU_Message(" js $%s",Label);
|
||||
PUTDST16(m_RecompPos,0x880F);
|
||||
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);
|
||||
PUTDST8(m_RecompPos,0x68);
|
||||
PUTDST32(m_RecompPos,Value);
|
||||
|
|
|
@ -75,32 +75,32 @@ protected:
|
|||
static void idivX86reg ( x86Reg reg );
|
||||
static void imulX86reg ( x86Reg reg );
|
||||
static void IncX86reg ( x86Reg Reg );
|
||||
static void JaeLabel8 ( char * Label, BYTE Value );
|
||||
static void JaeLabel32 ( char * Label, DWORD Value );
|
||||
static void JaLabel8 ( char * Label, BYTE Value );
|
||||
static void JaLabel32 ( char * Label, DWORD Value );
|
||||
static void JbLabel8 ( char * Label, BYTE Value );
|
||||
static void JbLabel32 ( char * Label, DWORD Value );
|
||||
static void JecxzLabel8 ( char * Label, BYTE Value );
|
||||
static void JeLabel8 ( char * Label, BYTE Value );
|
||||
static void JeLabel32 ( char * Label, DWORD Value );
|
||||
static void JgeLabel32 ( char * Label, DWORD Value );
|
||||
static void JgLabel8 ( char * Label, BYTE Value );
|
||||
static void JgLabel32 ( char * Label, DWORD Value );
|
||||
static void JleLabel8 ( char * Label, BYTE Value );
|
||||
static void JleLabel32 ( char * Label, DWORD Value );
|
||||
static void JlLabel8 ( char * Label, BYTE Value );
|
||||
static void JlLabel32 ( char * Label, DWORD Value );
|
||||
static void JaeLabel8 ( const char * Label, BYTE Value );
|
||||
static void JaeLabel32 ( const char * Label, DWORD Value );
|
||||
static void JaLabel8 ( const char * Label, BYTE Value );
|
||||
static void JaLabel32 ( const char * Label, DWORD Value );
|
||||
static void JbLabel8 ( const char * Label, BYTE Value );
|
||||
static void JbLabel32 ( const char * Label, DWORD Value );
|
||||
static void JecxzLabel8 ( const char * Label, BYTE Value );
|
||||
static void JeLabel8 ( const char * Label, BYTE Value );
|
||||
static void JeLabel32 ( const char * Label, DWORD Value );
|
||||
static void JgeLabel32 ( const char * Label, DWORD Value );
|
||||
static void JgLabel8 ( const char * Label, BYTE Value );
|
||||
static void JgLabel32 ( const char * Label, DWORD Value );
|
||||
static void JleLabel8 ( const char * Label, BYTE Value );
|
||||
static void JleLabel32 ( const char * Label, DWORD Value );
|
||||
static void JlLabel8 ( const char * Label, BYTE Value );
|
||||
static void JlLabel32 ( const char * Label, DWORD Value );
|
||||
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 JmpLabel8 ( char * Label, BYTE Value );
|
||||
static void JmpLabel32 ( char * Label, DWORD Value );
|
||||
static void JneLabel8 ( char * Label, BYTE Value );
|
||||
static void JneLabel32 ( char * Label, DWORD Value );
|
||||
static void JnsLabel8 ( char * Label, BYTE Value );
|
||||
static void JnsLabel32 ( char * Label, DWORD Value );
|
||||
static void JsLabel32 ( char * Label, DWORD Value );
|
||||
static void JmpLabel8 ( const char * Label, BYTE Value );
|
||||
static void JmpLabel32 ( const char * Label, DWORD Value );
|
||||
static void JneLabel8 ( const char * Label, BYTE Value );
|
||||
static void JneLabel32 ( const char * Label, DWORD Value );
|
||||
static void JnsLabel8 ( const char * Label, BYTE Value );
|
||||
static void JnsLabel32 ( const char * Label, DWORD Value );
|
||||
static void JsLabel32 ( const char * Label, DWORD Value );
|
||||
static void LeaRegReg ( x86Reg RegDest, x86Reg RegSrc, int multiplier );
|
||||
static void LeaSourceAndOffset ( x86Reg x86DestReg, x86Reg x86SourceReg, int offset );
|
||||
static void MoveConstByteToN64Mem ( BYTE Const, x86Reg AddrReg );
|
||||
|
@ -160,11 +160,11 @@ protected:
|
|||
static void OrVariableToX86Reg ( 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 Popad ( void );
|
||||
static void Pushad ( void );
|
||||
static void Push ( x86Reg reg );
|
||||
static void Pushad ( void );
|
||||
static void PushImm32 ( const char * String, DWORD Value );
|
||||
static void Pop ( x86Reg reg );
|
||||
static void PushImm32 ( char * String, DWORD Value );
|
||||
static void Popad ( void );
|
||||
static void Ret ( void );
|
||||
static void Seta ( x86Reg reg );
|
||||
static void Setae ( x86Reg reg );
|
||||
|
|
|
@ -279,7 +279,8 @@ void CControl_Plugin::UpdateKeys (void) {
|
|||
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) {
|
||||
for (int count = 0; count < sizeof(m_Controllers) / sizeof(m_Controllers[0]); count++) {
|
||||
delete m_Controllers[count];
|
||||
|
|
|
@ -296,11 +296,9 @@ void CPlugins::CreatePluginDir ( const stdstr & DstDir ) const {
|
|||
}
|
||||
|
||||
void CPlugins::CopyPlugins ( const stdstr & DstDir ) const {
|
||||
Notify().BreakPoint(__FILE__,__LINE__);
|
||||
|
||||
//Copy GFX Plugin
|
||||
/*stdstr_f srcGfxPlugin("%s%s",m_PluginDir.c_str(),_Settings->LoadString(CurrentGFX_Plugin).c_str());
|
||||
stdstr_f dstGfxPlugin("%s%s",DstDir.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(Plugin_GFX_Current).c_str());
|
||||
|
||||
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
|
||||
stdstr_f srcAudioPlugin("%s%s",m_PluginDir.c_str(),_Settings->LoadString(CurrentAUDIO_Plugin).c_str());
|
||||
stdstr_f dstAudioPlugin("%s%s",DstDir.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(Plugin_AUDIO_Current).c_str());
|
||||
if (CopyFile(srcAudioPlugin.c_str(),dstAudioPlugin.c_str(),false) == 0) {
|
||||
if (GetLastError() == ERROR_PATH_NOT_FOUND) { CreatePluginDir(dstAudioPlugin); }
|
||||
CopyFile(srcAudioPlugin.c_str(),dstAudioPlugin.c_str(),false);
|
||||
}
|
||||
|
||||
//Copy m_RSP Plugin
|
||||
stdstr_f srcRSPPlugin("%s%s",m_PluginDir.c_str(), _Settings->LoadString(CurrentRSP_Plugin).c_str());
|
||||
stdstr_f dstRSPPlugin("%s%s",DstDir.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(Plugin_RSP_Current).c_str());
|
||||
if (CopyFile(srcRSPPlugin.c_str(),dstRSPPlugin.c_str(),false) == 0) {
|
||||
if (GetLastError() == ERROR_PATH_NOT_FOUND) { CreatePluginDir(dstRSPPlugin); }
|
||||
CopyFile(srcRSPPlugin.c_str(),dstRSPPlugin.c_str(),false);
|
||||
}
|
||||
|
||||
//Copy Controler Plugin
|
||||
stdstr_f srcContPlugin("%s%s",m_PluginDir.c_str(), _Settings->LoadString(CurrentCONT_Plugin).c_str());
|
||||
stdstr_f dstContPlugin("%s%s",DstDir.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(Plugin_CONT_Current).c_str());
|
||||
if (CopyFile(srcContPlugin.c_str(),dstContPlugin.c_str(),false) == 0) {
|
||||
if (GetLastError() == ERROR_PATH_NOT_FOUND) { CreatePluginDir(dstContPlugin); }
|
||||
CopyFile(srcContPlugin.c_str(),dstContPlugin.c_str(),false);
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
|
|
@ -366,6 +366,10 @@ SOURCE="N64 System\Mips\Memory Labels Class.cpp"
|
|||
# End 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"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
@ -970,6 +974,10 @@ SOURCE="N64 System\Mips\Memory Labels Class.h"
|
|||
# End 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"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
|
|
@ -152,6 +152,7 @@ enum SettingID {
|
|||
Directory_PluginInitial,
|
||||
Directory_PluginSelected,
|
||||
Directory_PluginUseSelected,
|
||||
Directory_PluginSync,
|
||||
Directory_SnapShot,
|
||||
Directory_SnapShotInitial,
|
||||
Directory_SnapShotSelected,
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
#include "..\N64 System.h"
|
||||
#include "..\Settings.h"
|
||||
#include <common/CriticalSection.h>
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "SettingType/SettingsType-Application.h"
|
||||
#include "SettingType/SettingsType-ApplicationIndex.h"
|
||||
#include "SettingType/SettingsType-Cheats.h"
|
||||
|
@ -201,6 +200,7 @@ void CSettings::AddHowToHandleSetting ()
|
|||
AddHandler(Directory_PluginInitial, new CSettingTypeRelativePath("Plugin",""));
|
||||
AddHandler(Directory_PluginSelected, new CSettingTypeApplication("Directory","Plugin",Directory_PluginInitial));
|
||||
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_SnapShotInitial, new CSettingTypeRelativePath("Screenshots",""));
|
||||
|
@ -284,6 +284,7 @@ void CSettings::AddHowToHandleSetting ()
|
|||
AddHandler(Cheat_Range, new CSettingTypeCheats("_R"));
|
||||
AddHandler(Cheat_RangeNotes, new CSettingTypeCheats("_RN"));
|
||||
|
||||
#ifdef toremove
|
||||
/* INFO(SettingsIniName,Default_None,Data_String,RelativePath,"Project64.cfg","",0);
|
||||
if (SettingsIniFile == NULL)
|
||||
{
|
||||
|
@ -603,6 +604,7 @@ void CSettings::AddHowToHandleSetting ()
|
|||
|
||||
#undef INFO
|
||||
*/
|
||||
#endif
|
||||
}
|
||||
|
||||
DWORD CSettings::FindGameSetting ( CSettings * _this, char * Name )
|
||||
|
|
Loading…
Reference in New Issue