Introducing 1964 0.9.9!

1964 is a Nintendo64 emulator for the PC. Follow the Table of Contents in the Navigation Pane to learn more.

1964 is not affiliated with any named company. All logos and trademarks are copyright of their respective owners. 1964 is copyright 1999-2004. All 1964 materials in text and binary form are licensed under the GNU General Public License. You may not copy any of the information contained in this help document unless you are given permission from us to do so. If this is an online version of the document, you may link to it, but you may neither copy its contents to another web site nor mirror it. This document may only be redistributed in an unmodified form within its original 1964 installation package.


The History of our Project

Hello, schibo here. For a project that spans almost 5 years, there is a lot that can't be covered, so I will try to summarize the highlights from my perspective.

I started this project on March 10, 1999 on the day that I told two friends that I was going to write an emulator. I was curious to understand how emulators work, so I decided that the best way to learn was to research and develop one. After finding some N64 documentation written by anarko, I went to work.

The First Debugger

One month later, I had implemented a basic debugger in a DOS window. It didn't do much, but it decoded and implemented a few MIPS instructions, showed which instructions were decoded as MIPS assembly, and showed emulated registers changing values.

Promotion

I decided to make it open source. On April 9, 1999, I emailed EmuUnlim.com that I had started a project and was looking to assemble a team. EmuUnlim.com posted the news and it was not long before steb began submitting code and helping out. We worked hard together for about a year.

Making Contacts

Soon after my email to EmuUnlim, I contacted anarko to request permission to continue to include his documentation as comments for my source code. He accepted, and we began to communicate regularly. I had a lot of questions and he suggested that I join an EfNet channel on IRC where there are people who know a lot about the N64 architecture. In #n64emu, anarko introduced me to zilmar. I found zilmar to be very knowledgeable and generous. It was a few weeks before I realized that zilmar was working on an N64 emulator of his own which would later be called Project64. We were asked to keep this a secret, and we successfully did so for years until Project64 was finally released. As an N64 emulator developer, I owe a lot to zilmar and anarko.

Version 0.1.0 shows a demo working

In June of 1999, we got the debugger to the point where I believed that video should show for a couple demos. The trouble was that we didn't have any video code implemented to test this. FiRES asked for my code and took some color frame buffer (CFB) video code from TR-WinGL and quickly threw it into 1964 to test it. The demo was "1964.bin" written by steb. It worked! That was a rewarding day. Version 0.1.0 was then released on June 21, 1999.

Interrupts

After I experienced several weeks of great frustration with interrupts, zilmar fixed them for me. As a result, many more demos began to work. Version 0.1.2 was released on July 02, 1999. Soon afterwards, steb implemented controller support and DirectSound for some basic demos.

Dynarec

Writing the compiler has been the most rewarding and challenging part for me, and it became the focus of the majority of my time on 1964, so I hope you like the speed :))) Assuming you're writing a compiler of your own, getting started is pretty easy, but it takes a lot of work to write a compiler that generates fast code.

Plug-ins

In discussions with zilmar, we had been talking for a while about a plug-in system. The theme was that it would be great if there was a plug-in system for different N64 emulators similar to what PSEmu-Pro did for PlayStation emulators. Then zilmar wrote his famous plug-in interface specifications. This turned out to be a very powerful idea. Eventually, all known modern N64 emulators would come to use at least some of the spec. NooTe would soon implement a DirectX plug-in for the 2D demos and an input plug-in.

The Mac Connection

Later I received a surprise email from Gerrit Goossen, whom I had not met before. He ported 1964 to the Macintosh and showed me screenshots of different 2D demos running in the emulator. He fixed several problems that I had, and we then worked together extensively. The emulator for the Macintosh would be called Mac1964. Mac1964 played Mario before the Windows version did.

Porting

I soon ported Gerrit's OpenGL graphics to Windows. In 2000, after weeks of frustration with getting past the first display list and eventually after an EEPROM fix, Mario finally showed his head. That was another big day. Gerrit and I are good online friends and we continue to chat and exchange ideas. Gerrit's N64 emulator project is now known as SixtyForce. NooTe would soon convert my port of Gerrit's OpenGL code to DirectX. This graphics project didn't progress very far (it would have taken months or years), but it was still exciting to experience.

Rice

Some months later, I received another surprise email. This time it was from Rice, whom I'd also never met before. He fixed problems in my core, namely unaligned DMA transfers and TLB fixes, but several other fixes as well. Compatibility jumped, and Zelda Ocarina of Time showed the spinning N logo. Simply put, Rice brought 1964 to another level, and Rice and I have worked closely together on the project ever since. Rice has also worked on a heavily modified version of the DaedalusD3D plug-in called RiceDaedalusD3D. After the release of 1964 0.8.5, we wanted to put out one or two more releases. Months later, we assembled a great beta team and we used an Emutalk.net messageboard forum for discussion and beta binary updates. The beta testing system was fantastic.

Thanks for your support.

-schibo

Joel Middendorf


What's New in 1964 0.9.9.?

With over one year in private development since the release 1964 0.8.5. and with over 3 months in beta testing, 1964 0.9.9 features hundreds of fixes and enhancements.

Major new 1964 features include:

  • A new friendlier user interface makes finding options easy
  • Fixes and support for many new games including Turok3, Donkey Kong 64, and Top Gear Overdrive
  • New ini configuration settings
  • ROM Browser caching for fast loading of 1964
  • Tweak 1964's speed at the touch of a key
  • Frameskip and AutoCF features for slower machines
  • A new Help Manual
  • Multiple Language support
  • An improved CPU core with many bug fixes and is much faster
  • An I mproved 32bit CPU core, linker and faster overall code generation
  • Reworked core/audio synchronization and major improvements in audio quality and speed
  • Completely reworked Kaillera netplay
  • Packaged with N-Rage's input plugin
  • CPU Frame buffer read/write notification for video plug-ins

Minor GUI features:

  • - Download plugin online
  • - ROM specific plugin selection
  • - More Toolbar buttons
  • - Remembers and restores the current selected ROM and its position in the ROM Browser
  • - Remembers and restores the selected ROM and its position at 1964 exit and start
  • - Added "Number of players" as a new column in the ROM Browser. "Number of players" can be set in the INI file, but not through option dialog box.
  • - Check if plug-ins are loaded correctly. If not, then pop up the plugin configuration dialog box to select plug-ins
  • - When 1964.099 runs the first time:
      - Automatically pop up the ROM folder dialog box to select a folder
      - Select only the most important columns to display in the ROM list
      - Verify plug-ins are loaded correctly
  • - Disable plugin selection during netplay
  • - Disable many menus if they are not supposed to be used when a game is not running or a game is running
  • - Automatically enable/disable the RSP config menu according to whether or not the RSP plugin is loaded
  • - Call RSP CloseDLL() at a better place for it to save its configuration
  • - New ROM Browser icons
  • - RSP plug-in selection

Minor core features:

  • - Variable speed emulation
  • - SSE detection and support in CPU core
  • - FPU register caching if SSE is detected
  • - NetPlay
  • - New save state file format
  • - Ability to load old versions of save states
  • - Ability to save save states to an old version
  • - Double check and create necessary folders for game saves
  • - Screen shots taken at a better time
  • - Reworked CP1 Unusable exceptions, many games are working better
  • - Improved CPU timing
  • - TLB error handling for 2-pass compiler

Netplay features:

  • - Based on Kaillera network
  • - Supports audio for netplay
  • - Realtime gameplay with feasible network connection required
  • - Automatic retransmission request and lost packet recovery
  • - Automatic game setting synchronization among players
  • - Automatic game save synchronization among players
  • - Support for N64 native game saves
  • - Support for cheat codes in netplay
  • - Automatic cheat code synchronization among players
  • - Notification if a player drops out, and allows for other players to continue the game
  • - CPU and network usage displayed on status bar
  • - Enable / disable various settings to avoid changes that may cause netplay games to desync
  • - Always disable AutoCF for netplay
  • - CF menus disabled during netplay. CF won't be allowed to be change for any player
  • - Disabled lag menu during netplay
  • - Disabled cheat menu during netplay. Cheat codes are not allowed to be modified during game play

Important bugs fixed:

  • - Activated cheat codes may cause game to not boot or reset
  • - Fixed dynamic compiler buffer overrun-related errors
  • - Fixed problems loading PJ64 save states
  • - Cleaned duplicated INI entries
  • - Support for Japanese characters in INI file


System Requirements

  • i486 Compatible Processor
  • 64MB RAM
  • 3D Video Accelerator Card
  • Audio Card
  • Microsoft Windows98

Recommended Configuration for 1964 Basic Distribution

Processor: Intel Pentium III 600MHz or comparable processor. Some games will require much faster machines, while some others will work great on much slower machines. 1964 uses scalar SSE instructions when available. Any processor with full SSE1 fpu support will benefit from this.

Memory: 128MB RAM. 256MB or better is ideal

Video Card: NVidia GeForce 2 Series or newer

Audio Card: Unknown

Operating System: Microsoft WindowsXP

Controller: N64 controller with Adaptoid cable

Monitor: 87" Plasma Flat Panel or larger. Projector for drive-in theater recommended. Images should be viewable from space.


Note for users of Radeon video cards

Rice's DaedalusD3D 5.2.0 video plugin will not be stable on your system. This will be fixed in a future version of 1964. It's one of those last-minute things that popped up. In the meantime, you may use a different video plugin. Jabo's D3D plugin, for instance, is very good. Please visit http://www.emutalk.net for more information on where to get plugins. Thanks.


Main Window Graphical User Interface

There are four components to the GUI. These are:

  • The Main Menu
  • The Tool Bar
  • The ROM Browser Window
  • The Status Bar


1964 Main Menu

  • File
  • Edit
  • Emulation
  • Plug-ins
  • Net Play
  • Help


File Menu

Open ROM... CTRL+O

This will open the Open ROM dialogue. From here, you can choose which ROM to open. After you choose a ROM, the ROM Browser will automatically change to the last opened ROM path.

Close ROM

This will shut down emulation and return you to the ROM Browser if the ROM Browser is enabled.

Language

Multi-language support is a new feature added to 1964 as of version 0.9.9. Choosing a language will change menu item text, help options and other text to the language of your choice.

Save State

Save states enable you to save the hardware state of the emulator at any given time. The advantage of this is to eventually restore emulation to the exact point where you left off. This feature has a lot of advantages, but in particular, it is good for cheating. :)

You may choose "To File..." to save to a file of your choice. This will save it in the latest 1964 save state format. "To 1964 0.8.5 format" will save it to a format compatible with versions 0.8.5 and earlier. Saving to a Project64 save state will save the state to a format that can be used in Project64 (PJ64). In the submenu, you may also choose to save to different quicksave slots, so that you can store your quicksaves as different file names so that they are not overwritten.

F5 = QuickSave State

CTRL+F5 = Save State to File. Opens the "Saving State" dialogue.

Load State

You may choose "From File..." to load from a file of your choice. This will load a file of 0.9.9 format, 0.8.5 or earlier. The format will be detected automatically. To load from a PJ64 save state, you the "From PJ64 Save State File...". Again, you may choose to load different quicksave files from the different slots.

F7 = QuickLoad State

CTRL+F7 = Load State to File. Opens the "Loading State" dialogue.

Change ROM Folder... CTRL+D

This feature allows you to change the ROM folder that the ROM Browser uses to display its ROM list. CTRL+D is the shortcut key combination to access this quickly. For more information about the ROM Browser, refer to the ROM Browser section.

Refresh ROM List CTRL+L

This will update the ROM list in the ROM Browser window. You will want to refresh this list whenever you add or remove files from the path that the browser is displaying. 1964 will not detect when you change the contents of a folder. In order for 1964 to start more quickly, 1964 uses a ROM list cache file which has the information that it needs to populate the ROM Browser list items. This file is called RomCache.dat in your 1964 root folder, and is specific to your ROM archive.

Recent ROM Folders

Information about this section is available here.

Recent ROMs

Information about this section is available here.

Exit

This will close 1964.


Edit Menu

Cheat Codes... CTRL+C

This will open the Cheat Codes window. For information about cheat codes, refer to the Using Cheat Codes section.

Window Options... CTRL+W

This will open the Window Options window. For information about Window options, refer to the Window Options section.

ROM Properties

This will open the ROM Properties Window. ROM properties are the ini settings for each ROM and are recommended for advanced users only. More information about ROM Properties is available in the ROM Properties section.


Emulation Menu

Pause/Play F3

This option will pause or resume emulation. Pressing F3 is a quick way to do this. You may also use the Pause [image] and Play [image] buttons from the Tool Bar.

Reset F2

This will reset a game in progress, like pressing the Reset button on the N64. F2 is the shortcut to do this quickly, and you may also use the Reset [image] button on the Tool Bar.

Stop F4

This will stop a game in progress. F4 is the shortcut to do this quickly, and you may also use the Stop [image] button on the Tool Bar.

Kill CPU Thread CTRL+F4

If a game has frozen and the Stop button fails to cleanly terminate the game for whatever reason, this option will force the emulation to quit. This is a brute force method to stop emulation and it is not recommended unless you need to use it.

Switch Compiler

This feature allows you to switch from the Dynarec to interpreter on-the-fly while a game is running. It is likely that you won't need this feature, although it has been known to get you out of the occasional freeze on earlier versions of 1964. This will not affect the stored ini settings. Refer to the Core section for more information about these options.

Inject Gameshark Green Button Cheats F8

This should actually be called "Inject GS/AR Button Cheats", and likely will be reworded as such in the next version. GS=GameShark and AR=Action Replay. These are cheats that are activated when pressing one of these buttons. F8 will do this quickly. Of course, you need to have selected these cheats for use before you can use them. Refer to the Using Cheats section for more information.

Counter Factor

This menu is used to manually change the Counter Factor (CF) settings while a game is running. For information about CF, refer to the Counter Factor section. In the submenu is also the Automatic F10 subitem. This will engage or disable the AutoCF feature, which is a feature for slower machines. You may also use the AutoCF [image] button on the toolbar. More information about AutoCF is available in the Tool Bar section.

Speed Limit F9

When the Speed Limit is on, 1964 will limit the speed of emulation to the ini setting for this ROM. When it is off, there will be no speed limit, and emulation will run with no speed limit.

Automatic Frame Skip F11

This will simulate frame skipping to help slower machines. Additionally, you may access this feature by pressing F11, or by using the Frame Skip [image] button on the toolbar. Information about this feature is available in the Tool Bar section.

Screen Shot F12

This will take a picture of the graphics emulation and store the image file on your hard drive. This feature will only work if the video plugin supports it. The code for taking screen shots resides within the plugin, and not in the 1964.exe executable file. So, where the images are stored and what type of image files are created has been left up to the author of the video plugin to decide.

Variable Speed Limits

This is a new feature which was introduced in 1964 0.9.9. This feature allows the user to adjust the speed of emulation. You may also use the + and - keys on your Number Pad to increase and decrease the speed automatically. By pressing * on your Number Pad, you will reset the speed to the normal setting that is in the ini. Below are the available rates:

Vertical Interrupts per Second (VI/s)

10

15

20

25

30

40

50 (PAL)
59.94 (NTSC -- close to 60)

70

80

90

100

120

150

180

210


Plug-ins Menu

Change Plug-ins... CTRL+P

This will open the Plug-ins window where you can switch to different plug-ins. More information is available on the Plug-ins Options page.

Video Settings... CTRL+V

This will open the video plug-in's configuration settings.*

Audio Setings... CTRL+A

This will open the audio plug-in's configuration settings.*

Input Settings... CTRL+I

This will open the input plug-in's configuration settings.*

RSP Settings... CTRL+R

This will open the RSP plug-in's configuration settings. 1964 is not distributed with it's own RSP plugin. For most games, an RSP plugin is not required to play them in 1964. Experienced users will know what this is for.

Full Screen Alt+Enter

This option is to switch the screen from windowed to full screen, and vice-versa. You may also use the [image] button when you are in a window to switch to full screen.

* Refer to the help documentation that comes with the plugin for details about how to use it. Plug-ins distributed with 1964 should have documentation in the Plugin folder.


Net Play Menu

Connect to Kaillera Server ...

This will open the Kaillera Server dialogue. For more information, refer to www.kaillera.com.

Lag

The time delay between a key that is read from the controller and the time when the key is actually used in the game play is called Lag. In netplay, we always use key values read from the controller some time ago (say 0.2s ago). With such a delay time, players' key values from the other end of the netplay can be transferred and synced without delaying the game play speed.

0.2s is probably the best choice for lag, which is equivalent to Lag = 5. A player won't notice much of a controller delay for a 0.2s lag time. The best lag should be slightly larger than the turn-around-time, or double the ping time, which is the transfer time from player to player. For DSL, we have found that a ping time of 70ms to a good Kaillera server is typically achievable.

Assuming that the other players have the same ping time, then the double ping time is 2 x 70 ms = 140 ms. In this case, our lag is set to 0.2s, or 200 ms, which is greater than 140 ms. On the other hand, if the ping time is higher than the lag that is set, the game play will be delayed and wait for the keys from other players. Playing on a dialup should give feasible game play, as long as the players have reasonable ping times to the Kaillera server.

Options are Lag=1 to Lag=7, where 1 is the least lag and 7 is the most. 5 is the default setting. If different players are using different lag settings, the highest value will be used for all players.


Help Menu

Help Manual F1

Clicking this option will get you to the document that you are now reading.

Online Help

Clicking this option will open your browser to helpful online resources with 1964 help.

1964 Home Page

This will link you to our home page at http://1964emu.emulation64.com. This is where we post news about new releases and links to the releases themselves.

About Warranty...

This is the most fascinating feature of 1964. Click this and watch two message boxes display warranty information. You could read the warranty information for hours and never get bored with it.

About 1964...

This will display information about the 1964 Team and greetings. It also will show basic system information that is interesting to see what 1964 detects and can take advantage of.


1964 Main Tool Bar

In this section we provide an explanation of each of the buttons that appear on 1964's main tool bar.

Open ROM

Clicking this button will open the "Open ROM" dialogue to open a ROM.

Play Button

This button is used to resume a ROM after it has been paused.

Pause Button

Click this button to suspend emulation.

Stop

Click this button to stop emulation and close a ROM.

Reset

Click this button to reset a ROM, just like pressing the Reset button on the N64.

Change Plug-ins Button

To change plug-ins, click this button. Refer to the Plug-ins Options section for more information.

ROM Properties Button

This button is used to get ini properties of a ROM. It is meant for advanced users only. For more information, navigate to the ROM Properties section.

Help Button

This button will open this help manual.

1964 Home Page Button

This button when clicked will open your default web browser to the 1964 home page.

Speed Limit Button

This button has two states: checked and unchecked. When it is checked, it will look like it is pushed in. In this state, the speed of emulation will be limited to the setting in the ini. When this button is not pushed, there will be no limit on the speed of emulation.

AutoCF Button

Automatic Counter Factor (CF) Adjustment tool. This tool is designed for slower machines only. It will automatically choose a higher CF in an attempt to maintain the maximum VI/s speed limit. This button has 2 states like the Speed Limit button.

Automatic Frame Skip Button

This button will simulate frame skipping by not allowing some DLists to be processed by the video plugin. This feature is also intended for slower machines only. This button also has 2 states like a few of the other buttons mentioned above.

Full Screen Button

Click this button to enter full screen. Use Alt+Enter or Escape to return to a window.

For shortcut keys to these buttons and other information about these features, refer to the Emulation Menu help page.


ROM Browser

This is where your ROMs will be displayed. If you double-click on a ROM, it will open the ROM and play it. If you right-click on the ROM Browser, you will be shown a pop-up window of useful options. To the left of each ROM name in the list is an icon of a colored sphere. Read the Comments column section here for information about what these icons mean. To configure the ROM Browser, read the information here.


Status Bar

Fig. 1. The Status Bar

The Status Bar is used to display emulation statistics.

  1. In here you will find either the status of the emulation state (Paused, Playing, Ready, etc), profiler information, counter statistics, or plugin statistics sent by a plug-in. To configure Status Bar Monitoring, read this section.
  2. This section will tell you the current VI/s that the ROM is running at. More information about VI is available here.
  3. This section shows the current CF setting.
  4. This section tells you if the Expansion Pak is enabled or disabled. If it is disabled, you will see 4MB. This is how much RDRAM will be used by the N64 virtual machine. If this shows 8MB, that means that the Expansion Pak is inserted, and 8MB or RDRAM is used for the ROM.
  5. Core status. Below is a table that explains what each letter means:
Letter | Definition | State
I | Interpreter | Running the Interpreter
D | Dyna-Compiler | Running the Dynamic-Compiler
E | Exception | Running the run-time exception handler routine


Options

Fig. 1 Top of 1964 Options Window

Each of the property pages in the 1964 Options Window have tabs on the top of them as shown in the image above. By clicking a different tab, you will access a different page of options. Click one of the items below for details about each page.

  • Window
  • Cheat Codes
  • Plug-ins
  • Folders
  • ROM Browser
  • ROM Information
  • ROM Properties
  • About 1964


Window Options

These options allow you to choose how you want the main 1964 window to display information. You may specify the default settings for:

  • File Menu Options
  • Window Behavior
  • Status Bar Monitoring


File Menu Items

These settings determine which items to display and how many you wish to display in the File Menu:

File Menu Entry Additions

Fig. 1 File Menu Entry additions

  • Display Recent ROM Folders
    When selected, this option will enable a submenu called Recent ROM Folders under the File menu of 1964's main menu. Using the radio buttons, you can choose whether this menu will display the 4, 8 or 16 most recently used ROM folder paths.
  • Display Recent ROMs
    When selected, this option will enable a submenu called Recent ROMs under the File menu of 1964's main menu. Using the radio buttons, you can choose whether this menu will display the 8 or 16 most recently used ROMs.


Window Behavior

These settings modify how the 1964 window behaves. At the moment there is only one setting for Window Behavior.

Window Behavior Modification

Fig. 1 Window Behavior group box

  • Start ROM in Full Screen
    When this option is selected, 1964 will start a loaded ROM in full screen. To keep the emulator windowed, uncheck this option.


Status Bar Monitoring

These settings will display emulation statistics in the Status Bar.

Status bar display modification box

Fig. 1 Status Bar Monitoring group box

Counters

Task Name Displayed | Counts the Number of Received: | Significance
ALists | Audio Lists | Audio Lists are processed by either the audio plug-in, or by the RSP plug-in, depending on your settings.
DLists | Display Lists | Display Lists are processed by the video plug-in
PI | Peripheral Interface DMA transfers | There are several different DMA transfers. This particular DMA is for DMA transfers from ROM to RDRAM.
Cont | Controller Tasks | Controllers are polled repeatedly
PC | Program Counter | This is the address of the current MIPS instruction being emulated. In the dynarec, this will be the address of the beginning of the current block only.

Profiler

Component Name Displayed | Displays % CPU Time in which this component is:
Core | Running
Video | Processing graphics
Audio | Processing audio
Compiler | Compiling code
Idle | Doing nothing
Netplay | Sending Kaillera instructions
Kaillera | Processing the Kaillera DLL's Netplay routines

Disabled

This means that Status Bar Monitoring is not active. Status Bar Monitoring is updated less than once per second, so there is likely a negligible increase in speed if it is disabled.


1964 Cheats :: About

Cheats

:: Welcome to 1964 Cheats Offline Section ! ::

For All Cheat Related Questions and a handy Cheats FAQ

Plus a Nice easy to follow Guide for Using and Adding cheats.

This and much more can all be found within this section

with no need for an Internet connection at all.

For Further help 1964 Cheats has a Message Board on Emutalk.net

you can find it here 1964 Cheats Message Board

Emu64 Cheats


1964 Cheats :: Using Cheats

Here you will see how to Activate & Deactivate Cheat Codes.

Load the game that you want to use cheats for I have used 1080 Snowboarding (JU) as an Example.

When the game has loaded, go into Edit & then Cheats, This will open the following screen.

All available cheat codes for this Game will show up in Black Text in the Cheats menu.

Any Codes in grey text are not to be used.

Once you have seen the cheats you want to use, Click on it once to highlight.

To activate the code press the Select button as shown above.

(also always remember to check for note's on cheat usage information)

As shown above, the cheat has now been activated & is displayed in red text.

(you can activate many more cheats by repeating the above Procedure)

Once you have your cheats selected click on the Use Cheat Codes and close button.

Clicking on the Use Cheat Codes will activate the cheats effects in your game.

(You are now ready to play with your chosen cheats)

The same procedure applies for deactivating cheat codes.

So just follow the above procedure, this time replacing Select with the Unselect button.

If you have more then one or two cheats on, then you can just press the Unselect All button.

Which will bring you back to the menu with nothing activate.

For information on Adding, Editing & Deleting cheats

click on the Adding Cheats Link.

::Using Cheats ::


1964 Cheats :: Adding Cheats

Here you will see how to add & edit new cheats into the 1964 Cheats Database.

For the following example I have used 1080 snowboarding (JU).

As the above shot shows, put in the name of cheat, the cheat code & note if needed.

If the cheat requires more than one code this is not a problem as you can add up to 100 codes to one cheat.

(also remember to put your codes in a 12 string line with no spaces)

Don't forget to choose the right country setting as shown above.

Example:

1080 Snowboarding (JU) = Country: USA & Japan

1080 Snowboarding (E) = Country: Europe - PAL

Once you have checked everything is correct, press Add/Modify Button to add to the Database

As you can see above, the new cheat is added & at the bottom ready to use.

The menu will display all cheat codes for all game regions in the Database.

On loading of any game it will recognise the region and show the correct cheats in black text.

All other region cheat codes will be shown in greyed text

(This will displayed with a warning of country mismatch, & are not to be used)

So now you know how to add new cheat codes to the 1964 Cheat Database.

To Edit the Cheats are just as simple as shown above, just click on the cheat you want to edit & it will be highlighted.

Now you can edit the name, codes, notes & even the country settings.

So do not worry if you get it wrong when adding, as the edit will make it right in the end.

Once you have changed what is needed, again just click on the Add/Modify button & you are done.

To Delete Cheats is also as easy as Editing like the Edit, just click on the cheat you want to Delete & it will be highlighted.

Now you can Delete the entire cheat form the cheat file.

For information on Enabling & Disabling cheats

click on the Using Cheats Link.

::Adding & Editing Cheats ::


1964 Cheats :: 1964 Cheats FAQ

1964 Cheats FAQ.
Written by The Gentleman

This should help you with any questions that you might have about
adding & editing Codes in the Cheat Database.
Maximize this window if you are having trouble viewing it.

The Do's & Don'ts of Adding and Editing Cheat Codes

 Q: Why don't the cheats work in 1964 ?

I selected the cheats that I wanted to use but it does nothing on all games I have tried.
What can I do to make them work ?

A: Make sure you have the Use Cheat Codes check box checked. (see the picture below)

Clicking on Use Cheat Codes will activate cheat effects for your game.

If you would like to leave your cheats selected but wish the cheats to be inactive,

just uncheck this box.

Q: Why can't I see any cheats in the Menu? It is blank.

A: This could be due to any of several reasons:

· The game you are playing has no cheat support at the moment, so either follow the links to a site to add yourself some cheats, or wait until they are supported for that game.

· Make sure that the 1964.cht file is in the root folder (main 1964 folder with the 1964.exe file).

· You are using a different ROM version and only Good [!] v1.0 versions are supported in the 1964.cht file. So, although you see the cheats in the menu, they will not work because your ROM is a v1.1 or v1.2, etc. Every version of a ROM requires its own set of cheat codes. So, unless you are using either version v1.0 [!] of the ROM or the only version of the ROM (because there are no other versions), the cheats will not work.

· Check your ROM with Goodn64. You may either have a ROM that is a bad or an altered ROM with a different internal name that isn't recognized. You can do 2 things here to fix this problem:

o        Check Paulob's "GoodN64 Bad2Good Patches". You will also need IPSWin 2.0 to Patch the Rom. These are available from the superb Emutalk.net Downloads > Misc > Tools and see if it has your ROMs name in there, if it does then patch it to be recognized as the Good Rom version. Leaving you to play on with no problem at all.

o        You would need to add a cheat into the blank menu for the game and then close 1964.

Q: How do I add a cheat?

A: Search for your Game's name:
In your case Super Mario 64 Internal Name = [SUPER MARIO 64]
so search for [SUPER MARIO 64]

Once you have found it copy what you need to a new blank page now copy the Region ROM codes only to it.

All Countries: ,0=0,
USA - NTSC : ,1=0,
Japan - NTSC : ,2=0,
USA & Japan NTSC: ,3=0, [In other words JU Region] IE: 1080 Snowboarding ;)
Europe - PAL: ,4=0,
Australia - PAL: ,5=0,
France - PAL: ,6=0,
Germany - PAL: ,7=0,

[SUPER MARIO 64]
NumberOfGroups=(Amount of Cheats)
Cheats Name,1="Cheats Note",0,Code,
Cheats Name,(Region),Code,

Now once you delete all the other regions on that new page & are only left with your region

you then count the number of cheats you have & put it in the NumberOfGroups=(amount of Cheats)
you then copy that and then go back to the 1964.cht file and scroll to the very bottom

where you will see the one you added earlier.
Paste the one you just copied under that one and then copy internal Name onto the one under it.

So it ends up looking like:

[SUPERMARIO64]
NumberOfGroups=(Amount of Cheats)
Cheats Name,1="Cheats Note",0,Code,
Cheats Name,(Region),Code,

Now delete the one above leaving this one the only new one added.

Save As and then say ok/Yes to overwriting the file and then close.

Happy Cheating! :w00t:

05: You are probably trying to use this cheat file with a older version of 1964.

The cheat file higher then v0.8.3 was designed only to work with the 0.8.3 & higher.

Click on the Adding Cheats link for a full explanation.
But please remember that you do not need to add Enable or Keycodes codes.

These are only to be used on the real Console Cheat devices, 1964 does not need them.

Q: How do I use cheat codes in 1964 ?

 A: For a full Visual Explanation on using the Cheats menu:

click on the Using Cheats link

Q: Where do i find cheat codes to add myself into the Cheat file ?

 A: You can find a list of links by going online to:

Emu64cheats link & then Cheat Sites.

Q: Can i add, edit & delete cheat codes in 1964 without having to open the cheat file in a text editor ?

 A: Yes you can add, edit & delete through the GUI.
Click the Adding Cheats link for more information on Editing & Deleting

(it will be on the bottom of the page)

 Q: Can i add or edit codes in the 1964.cht file in a text editor ?

 A: Yes, but 1st:
i'd have to say you dont need to, as you can do all this through the GUI
but if you feel you want to then...

Open the Cheat File In Word pad, & search the Name of the Game & Region.

Example: SUPER MARIO 64
Once you have, Make sure that you look at how the Cheats are written in the file.

[SUPER MARIO 64]
NumberOfGroups=6

Infinite Energy & Breath,1=0,8133B21E-08FF,
Infinite Lives,1=0,8033B21D-0064,
Infinite Energy & Breath,4=0,813094DE-08FF,
Infinite Lives,4=0,803094DD-0064,

Infinite Energy & Breath,2=0,81339EAE-08FF,
Infinite Lives,2=0,80339EAD-0064,

Also If you would like to write a note to the code like:
Example:

Ostrich Mario,1="Mario runs with his head buried in the ground",0,8033B3BC-0090,

The note will now be displayed in the cheats menu

when you click on the chosen cheat code
it will be displayed on the right hand side along with the code/s & the country code.

Notice how the codes are written & how the code's are Separated by a -
like XXXXXXXX-XXXX, & not all in one code XXXXXXXXXXXX,
(If adding them through the cheat menu though. either way is fine)
also in case you are wondering, the ,1=0, shows us the Country code (Region) ,1=
& if you want the code on ready to use the 0, is off & 1, is on.

The NumberOfGroups= is the amount of cheats in that Game.

Regions most of the time are in the same group unless they have a different Header

like SUPERMARIO64, Super Mario 64 or SuperMario64 .

So for each region make sure if writing them through the .cht file using Text Editor
that you know what the correct code for that region is:

[All Countries: is the Default Setting],

but do not use, only use the Code for Country, & you can not go wrong ;)

All Countries: 0

USA - NTSC : 1
Japan - NTSC : 2
USA & Japan NTSC: 3 [In other words JU Region] IE: 1080 Snowboarding ;)
Europe - PAL: 4
Australia - PAL: 5
France - PAL: 6
Germany - PAL: 7

Q: How many codes can I put in a game? Is there a limit? What would happen if I went over it ?

A: You can put 500 cheats in per game, IE: NumberOfGroups=500.

(This also includes all regions of that game combined)

So if there was only U cheats for the game !!

you could use that entire amount of 500 for that one game.
If you Had both U & E Region Codes, or even all regions like U,E,A,F, & G

Codes for the one NumberOfGroups then try to Balance it out

& do not go over the limit that is set.

If you were to put more codes in 1964 through a text editor & not change the NumberOfGroups=
only the last cheats that was in there would show up in the cheat menu.
But when entered through the Cheats Menu it will Automatically change the NumberOfGroups=

You can put in 100 codes per cheat.

IE: All Guns,1=0,xxxxxxxx-xxxx,xxxxxxxx-xxxx, (up to 100) Codes per line.

There is also no real limit to the notes as long as they are in reason.
If you was to try to write an Essay in the fields then it will end up truncated

& send the codes themselves messed up.

so like the above example:

Ostrich Mario,1="Mario runs with his head buried in the ground",0,8033B3BC-0090,
you should have no problem adding or even editing your notes,

just make them informative & to the point.

 Q: Can i use Stacked Activators for hacked moves, in No Mercy ?

A: No at this moment in time 1964 does not support these.

 Q: I have seen this Cheat code on a site but it starts with a 50, 88, 89, D0, D1, D2 number. What about the ones ending with ?? Can I use this in the 1964 cheat File?

A: Yes you can, in fact there are already many many codes just like it in the cheat file.
Previous Versions of 1964 never had these capabilities implemented correctly

& have just been introduced into version 0.8.3 & higher

How the 50 Codes work will be explained a little further down.
The 88, & 89 Codes are GS Button Codes !

& they are available to use Via the F8 On your Keyboard
to use on 1964 for a Quick injection code like Press F8 for 99 coins.
The D0,D1,D2 Codes are Activator Codes !

& are used to activate the use of a Codes at a push of a button like

Press L to Levitate, Press R for Full Health Etc.

As for the Values ending in ?? These are modifier codes & can not be used in 1964.
Modifier means to change the Value (00??) to change either laps to a race, number of Coins,
a Play as multiple choices of Characters, or even What level to start on.
But you can always just put in the values you want & name the Cheat

Play as Neo Conker,1="Do not use this with another Play as Option",0,
that way you can still use the codes & just warn through a note etc.

 Q: Are there any codes that I can not use because they are not supported ?

 A: Yes, there are Codes that are not supported & all those codes are listed below.

Here is a list of codes that are & not supported.

Supported Codes: N 6 4 C O D E T Y P E S

Format Description

80-XXXXXX 00YY 8-Bit Constant Write

81-XXXXXX YYYY 16-Bit Constant Write

50-00AABB CCCC Serial Repeater

88-XXXXXX 00YY 8-Bit GS Button Write

89-XXXXXX YYYY 16-Bit GS Button Write

D0-XXXXXX YYYY 8-Bit If Equal To

D1-XXXXXX YYYY 16-Bit If Equal To

D2-XXXXXX YYYY 8-Bit If Not Equal To

D3-XXXXXX YYYY 16-Bit If Not Equal To

A0-XXXXXX 00YY 8-Bit Constant Write (Uncached)

A1-XXXXXX YYYY 16-Bit Constant Write (Uncached)

Un supported Codes: N 6 4 C O D E T Y P E S

Format Description

CC-000000 0000 Disable Expansion Pak
DD-000000 0000 Disable Expansion Pak
EE-000000 0000 Disable Expansion Pak

DE-XXXXXX 0000 Download & Execute

F0-XXXXXX 00YY 8-Bit Bootup Write Once

F1-XXXXXX YYYY 16-Bit Bootup Write Once

FF-XXXXXX 0000 Store Activated Cheat Codes

 Q: You said something about Serial repeaters (patch Codes) how do they work ?

 A: The 50 numbers = Serial Repeaters (Patch Codes) What they do is patch (compress)

100's of codes down to a small Patched Version.

example: California Speed Have All Cars,1=0,50001504-0000,800AAE5B-0001,
50001504 0000,800AAE5B 0001 = 21 Codes:

Changing by 4 Hex Higher in the last Digit in the Memory

Each time & the start off point is the 2nd code after the 50 Patch.

Take a look & count up the 4 Hex jump.
To help you understand how the numbers in Hex go up

The Hex Count goes from 0-9, A-F & then 10-19, 1A-1F & so on.
So where the Decimal count goes from 0-255 Its Hex Equivalent = 00-FF

so if you can imagine a decimal count of 0-31 the hex Count would be 0-1F

Dec: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
Hex: 1,2,3,4,5,6,7,8,9, A, B, C, D, E, F,10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F

& so on & upwards, & that should give you the idea how the Hex Count works.

So then how do we make this Patch 50001504-0000,800AAE5B-0001,

Well the 50 patch codes works like this.
You tell the patch how many codes there are & how much they change from each other.
Now this is a Serial repeater, Meaning that the main memory Address has the same Value.

The memory Address being the 3rd to 5th number & the Value the last 4 9th to 12th.
The 1st to 2nd code is a standard 8 Bit = 80 this also indicates that the value
will only be the last 2 digits & will only go as high as FF the equivalent of a Dec 255.

Lets look at the code we are going to see change from 800AAE5B-0001 - 800AAEAB-0001,

800AAE5B-0001,
800AAE5F-0001,
800AAE63-0001,
800AAE67-0001,
800AAE6B-0001,
800AAE6F-0001,
800AAE73-0001,
800AAE77-0001,
800AAE7B-0001,
800AAE7F-0001,
800AAE83-0001,
800AAE87-0001,
800AAE8B-0001,
800AAE8F-0001,
800AAE93-0001,
800AAE97-0001,
800AAE9B-0001,
800AAE9F-0001,
800AAEA3-0001,
800AAEA7-0001,
800AAEAB-0001,

You can see by looking at the last Digit of the address that it is going up by 4 Hex on each Code.
Now all we have to find out is how many codes there are.

So lets start with a plain 50000000-0000, to begin with until we know how many codes

& what the increase is.

Starting from the 1st code we can count it up to 21 codes at a 4 Hex Jump each time.

We now know that there are 21 codes so we ad that in like this.
How many is 21 in Hex ?
The guide above tells us it = 15 so we will add that in 50001500-0000,
Good, now how many does it go up by 4, so we add that in 50001504-0000,

So now we add that serial Repeater to the 1st code 50001504-0000,800AAE5B-0001,
& there you go, 21 codes brought down to the number of 2.

You can also add A long line of Patches that could amount to a huge amount

but would look like 10 Codes but you could also have as much as 500 codes in one patch.

A Question of regions.

As i always say, & really can not stress enough.
Do not & i mean do not try to add NTSC (U) (Gameshark) Cheat Codes to PAL (E) Games.
You will find a link for both PAL (E) & NTSC (U) Region Games

on The Emu64cheats Website.

If there is something you are still unsure of that isn't covered in the FAQ
Then give us a visit on irc #1964cheats on EFnet
or post a question on the 1964 Cheats Message Board On Emutalk.net


1964 Cheats :: About

::About !::

The 1964 1964 0.9.9 Cheat Help File

is a non Web Dependant Document

for cheats information on 1964 for all users.

For online help & update news and files.

Please Visit the 1964 Cheats Website

(If you have access to a Internet Connection)

All The Best


Plug-in Options

This window lets you select both Rom Specific and System Default plugins to use in 1964.

Fig. 1 Change Plug-ins window

These settings change, depending on whether you have selected:

  • Display Default plugin settings
  • Display ROM plugin settings


System Default Plug-in Settings

This allows you to set the default plug-ins for all ROMs. These settings do not override the ROM Specific settings, unless the plugin specified there is missing.

These settings allow you to specify the default settings for:

  • System Default Video Plugin: This is the Video plugin you wish to use with the majority of your roms. In a default install, this is set to Rice's 5.2.0 Video Plugin.
    Default Video selection box

    Fig. 1 Default Video Selection ListBox

  • System Default Audio Plugin: This is the Audio plugin you wish to use with the Majority of your roms. In a default installation, this is set to Schibo's Audio v1.2.
    Default Audio selection box <

    Fig. 2 Default Audio Selection ListBox

  • System Default Input Plugin: This is the input plugin you wish to use with the majority of your ROMs. In a default install, it is set to N-Rage's DirectInput V1.82a.
    Default Input selection box

    Fig. 3 Default Input Selection ListBox

  • System Default RSP Plugin: This is the RSP plugin you wish to use with the majority of your roms. In a default install, this is set to None. 1964 emulates many of these functions via HLE, making the RSP plugin unneccessary. If you chose to enable an RSP plugin, it will override 1964's internal HLE, and some games will not work as well.
    Default RSP selection box

    Fig. 4 Default RSP Selection ListBox


Per ROM Plug-in Options

This lets you select the plug-ins for each ROM individually.

These settings are for specific ROMs that work better with alternate plug-ins than the system defaults. Examples include Conker's Bad Fur Day, which works better with Jabo's D3D6 v1.5.1.

  • Video Plugin for Current ROM : [Rom Name Here]. This item allows you to select a video plug-in that works better with the specific ROM in question. Some ROMs do not work properly unless used with Rice's 5.2.0 plugin, and if you pick Jabo's 1.5.1 as your default, you will need to specify the alternate plug-ins here.
    Rom Video Plugin selection box

    Fig. 1 ROM Video Plug-in selection box

  • Audio Plug-in for Current ROM : [Rom Name Here]. This allows you to select a specific audio plugin for the ROM in question. Some games do not work unless Azimer's .55.1 alpha plugin is used. You can set this option here, so you don't have to change the system default every time you play this game.
    Rom Audio Plugin Selection Box

    Fig. 2 ROM Audio Plug-in Selection Box

  • Input Plugin for Current ROM : [Rom Name Here]. Some games work better with other input plug-ins, or keyboard specific plug-ins. As an example, Wonder project will not work with N-Rage's, but does with Jabo's.
    Rom Input Plugin Selection Box

    Fig. 3 ROM Input Plugin Selection Box

  • RSP Plug-in for Current ROM : [Rom Name Here]. Some games do require a RSP plug-in to play. Both Jabo's RSP.dll and Hacktarux's RSP work very well.
    Rom RSP Plugin Selection Box

    Fig. 4 ROM RSP Plug-in Selection Box


Folder Options

These options allow you to specify locations of files and folders for use in 1964.

Fig. 1 Folder Options editor window.

These settings allow you to decide where you want 1964 to:

  • Read ROMs

  • Write save files

  • Gather the list of available plug-ins

For most installations of 1964, the default settings for save files and plug-ins will work. You will be asked to set the folder for ROMs on startup, and can always change it by hitting CTRL-D.


Game Saves

1964 has several types of save files. EEPROM Saves, Save states, and all other save information is stored in the folder specified here. By default, the box "Use Default: $1964.exe\Save" is checked. To use a different folder on your system or network, uncheck the box and click the >>> button to change the folder.

Game Saves image

Fig. 1 Game Saves Folder Box


Plugins

1964 can use any plug-in compatible with zilmar's plug-in interface specifications. This gives you the flexibility to use plug-ins from other emulators or from any plugin author who decides to use the specifications. This setting allows you to specify where the plugin folder is on your computer or network. By default the box "Use Default: $1964.exe\Plugin" is checked, meaning that 1964 will use a subfolder named Plugin in the root 1964 folder for its plug-ins. Uncheck this box and click the >>> button to use a folder at a different location.

Plugin Folder selection box

Fig. 1 Plugin Folder selection box


ROMs

The ROMs entry allows you to choose which folder you want to load ROMs from. If you wish 1964 to always use the folder specified here, uncheck the box next to Use the last opened folder. If this box is checked, 1964 will use the folder you last picked using Ctrl-D. You can also change this folder by using the >>> button.

Rom Folder Selection Box

Fig. 1 Rom Folder Selection Box


ROM Browser Options

These options allow you to choose which information about each ROM you wish to display.

Fig. 1 Rom Browser Options dialogue

These settings allow you to specify the default settings for:

  • Enable ROM Browser: If you uncheck this, you can start 1964 without loading the ROM Browser.
  • Game Name to Display
  • Columns to display


Columns to Display

These settings allow you to specify which of the following extra internal ROM information columns you want to display:

Column Entry Option List

Fig. 1. Columns to Display Group Box

  • Country: Checked by default, this tells you what region and typically what language the ROM will be in.
  • Size: Checked by default, this tells you how many Mbits the ROM is. Most games are between 8 and 64 Mbits. Most demos are smaller, and corrupted ROMs can be an uneven number.
  • Compatibility Status: This displays notes from the ini, sometimes with important directions on how to get a ROM to work correctly.
  • Save Type: Tells you whether the ROM uses EEPROM, SRAM, or other save types. These can be useful for exporting saves or sending to emulation sites.
  • CIC Chip: Carts have various chips to prevent the copying of ROMs. This provides which model the cart would contain.
  • CRC1: Use these to match your ROM to your partner's for netplay.
  • CRC2: Use these to match your ROM to your partner's for netplay.
  • Players: Shows how many players the game can have in multiplayer or netplay mode.


Game Name to Display

These options allow you to select what name information you wish to display in the ROM Browser. These settings allow you to specify which of the following you want to display:

Browser Option list
  • Alternate Name: This is the name that is stored in the ROM_Properties.ini file. Typically, this is a more friendly name of the ROM with version info.

    •
  • Internal ROM name: This is the name that is hard-coded in the header of the ROM file. This is typically in all caps.

    •
  • Rom File Name: This is the name of the ROM file.


Rom Information

This screen contains no options.

Fig. 1 Rom Information window

This details the information contained in the ROM. Provided are the following:

  • Filename: This is the name of either the zip archive that the ROM is contained in or the ROM filename itself.
  • File-Location: This is the location on your drive where the ROM is stored.
  • Rom Internal Name: This is the name that the ROM has stored internally.
  • CRC1: First CRC value generated for an N64 Cart. This information is used in verifying the ROM's integrity and ensuring the correct cart is used in netplay.
  • CRC2: Second CRC value generated for an n64 Cart. This information is used in verifying the ROM's integrity and ensuring the correct cart is used in netplay.
  • Country: This is expressed in both a text value (USA, Europe, Japan, Etc) and a Hex value (0x45,0x50,0x4a, etc).


ROM Properties

This Section is for advanced users. Do not alter these settings if you do not understand what they are for.

ROM Properties are the configuration settings for a ROM. Each ROM can be configured to use its own unique settings. These settings are stored in the ROM_Properties.ini flat file database. To configure these settings, 1964 contains a built-in ini editor which shown below.

Fig. 1 ROM Properties ini editor window

The purpose of these settings are three-fold:

  • To get the ROM to work properly in 1964

  • To achieve the maximum speed for the ROM

  • To provide user information in the ROM Browser list

For most games, Duncan, our ini editor, has preconfigured the optimal settings for you. However, it is of course possible that you will encounter a ROM that exists but does not have an entry in the ini database. When this occurs, 1964 will use the default settings which are configured for maximum compatibility until you change the ROM settings, if you decide to change them.

The first three sections of this window are explained at the following links:

  • Hardware

  • Compiler Switches

  • With Plug-ins

Alternative Title

This is the friendly name that you can give to a ROM to be displayed in the ROM Browser. However, which name is displayed depends on your settings. Refer to the ROM Browser Options help section for more information.

Comments section

This is where you specify the playability of a ROM, and this information will appear in the Compatibility Status column of the ROM Browser window. Typically, you will see comments in here that say, "Playable!", "Almost Playable!", or "Not Playable!".

Below is a table explaining how the different ROM Browser spheres are selected for each ROM.

Word found in Comments section | Sphere icon displayed next to ROM in ROM Browser | What this means
Playable | Green Sphere | Game is playable. It may not be "perfect", but works well.
Almost | Yellow Sphere | Game can almost be played
Not | Red Sphere | Game cannot be played
All other text | Gray sphere | Unknown game. Not in the ini


Compiler Switches

Below are links to the different available compiler switches:

  • Core
  • Register Caching
  • DMA in Segments
  • CP1 Unusable Exceptions
  • Self-Modifying Code
  • Link Code Blocks
  • Assume 32bit
  • Two-Pass Compiler


2-Pass Compiler

In 1964's compiler, there are some optimizations that can only be achieved by knowing what code is ahead in a block of code. The purpose of the first pass is to collect this information so that the second pass can write code for these optimizations. The default setting is Yes. If this setting is set to No, there will not be a pass to collect this information. This feature was called Advanced Analysis in 1964 0.8.5.


Assume 32bit

The Nintendo64 features a 64bit MIPS r4300i microprocessor. However, many games do not exploit the 64bit capabilities of this processor. As a result, 1964 can achieve dramatic speed improvements by assuming that only 32bit logic is used. Other times, some games may use 64bit logic, but 1964 will still try to assume 32bit when it can, when this option is enabled. For compatibility reasons, the default setting for this option is OFF. Our ini should have most games and some demos covered already, but if this setting is off in a game that has not been listed in our ini as a known game, give 32bit a try.


Core

In this dropdown list box there are two options available:

  • Dyna-Compiler*
    • This is a compiler engine that compiles blocks of code on-the-fly as they are encountered, thus the term "dynamic". Once a block of code has been compiled, there is no need to compile it again, unless the compiled code buffer is full. 1964 allocates a 16 MegaByte compile buffer. This is fast and is the default setting.
  • Interpreter
    • With this option, there is no compiling of code, but this is much slower than the dynarec because the interpreter must decode each instruction every time it is encountered before it can be executed.

The name "Core" is a misnomer since this only represents part of the entire core, although most of the core emulation time is spent in this area.

* A.K.A: Dynamic Recompiler (DynaRec), Just-in-Time JIT Compiler.


CP1 Unusable Exceptions

Periodically, the operating system embedded in a game will intentionally deny access to the floating point coprocessor CP1. The OS achieves this by setting a bit in Coprocessor 0's STATUS register. Then, when a floating point instruction attempts execution, flow control is switched to the exception handler routine to service the exception. After that, flow should return to the floating point instruction that initially caused the exception, or the instruction that immediately precedes it, depending on where it is in the code. You may notice a minor speedup with this off, but in some games this may result in odd effects--usually weird video problems. We strongly recommend that you leave this on for maximum compatibility. This option was called FPU Hack in 1964 0.8.5.


DMA in Segments

When this is set to Yes, the DMA is delayed during emulation and transferred in sections instead of simply copying the entire data at once. Most games will work with it on in 1964. There are a few exceptions, such as Conker's Bad Fur Day. You may notice a little speedup with this option off. The Default is Yes for maximum compatibility. If you experience a game that has sound that has disturbing cracks and pops, it is possible that turning this option off will help. As a specific example, Carmageddon's audio will benefit from this option off.


Link Code Blocks

The purpose of jumps and branches in MIPS code is to jump to a different area of code. The easiest way to emulate one of these jumps in native machine code is to do it indirectly by first returning to the main compiler loop and then by calling the machine code target location from within this loop. This way, the compiler can determine if the target code exists first. If it does not yet exist, meaning that the target has not yet been compiled, it will first compile the code and then call it. This is exactly what happens when Link Code Blocks is set to No.

Of course, it is slow to return to the compiler every time a jump or a branch is encountered. The solution is what I refer to as Just-In-Time linking. The first time a jump is encountered, it is set to jump to a compiler loop. Then when the target code is compiled, if it doesn't already exist, the jump instruction is rewritten to directly jump to the start address of the target machine code. In other words, the first time a jump is encountered, it jumps to the compiler. The next time the same jump is encountered, it jumps directly to its target. This is what happens when Link Code Blocks is set to Yes. Yes is the default value. One condition is that only those jump targets within a 4KB aligned boundary can be linked. Other targets will return to the compiler.


Register Caching

Register caching is a process in which native registers (x86) are allocated to represent emulated virtual machine registers (N64 MIPS). When Register Caching is set to No, this feature is off, and the process is simple: for the current ROM instruction, load the emulated virtual machine registers into native machine registers, perform an operation, and then write the result back to the proper emulated register located in memory.

This method is effective, but slow because at each instruction we need to load data from memory and write data back to memory. With register caching, a data structure is used to remember which native registers correspond to what emulated registers. This way, we can use registers to perform multiple instructions in sequence without the need to load and store them at every instruction. The end result is more speed.

The register caching routines are quite sophisticated because:

  • There are only a 8 registers in x86-compatible processors*, but there are 32 MIPS General Purpose Registers. Two of the x86 registers are used for addressing and are unavailable in our implementation.
  • x86 registers are only 32bits* wide, while the General Purpose Registers in the N64 are 64bits wide.
  • Separate Register Caching routines are used for floating point registers, but these routines are faced with the same constraints as the General Purpose Registers. In the core, 1964's compiler neither uses SSE2 for 64bit instructions, nor does it exploit the parallel processing capabilities of SSE in the core. However, 1964 does use SSE scalar instructions to achieve register caching because they are easier to use than the stack of the x87, and because they are faster.

*Future x86-compatible processors like will have more than 8 registers, and these registers will be extended to 64bits wide.


Self-Modifying Code

From time to time, a ROM will want to transfer new code to a location in memory which overwrites old code that was there previously. For the sake of simplicity, we refer to these situations as self-modifying code. Self-modifying code has the consequence of rendering invalid the code that we compiled for that location, since the virtual machine instructions at those addresses have been altered. One fast solution to this problem is memory protection. With memory protection, we can detect when these writes occur, and then invalidate blocks of compiled code. There are rare situations in which the protected memory detection method is not sufficient. For this reason, other slower options are available. Protect Memory is the default setting. Using No Check should be fastest, but is only feasible for some demos and is not recommended.

The other slower options are:

Self-Modifying Code Detection Method | In a block of Code, check for a change in:
Check DMA Only | The entire code within DMA transfers
Check DWORD | The first 32bits
Check QWORD | The first 64bits
Check QWORD and DMA | The first 64bits and the entire code within DMA transfers
Check Block | The entire block
Check Block and DMA | The entire block and the entire code within DMA transfers

For these methods, the more checking that is done, the more complete the testing is. Of course, the consequence is speed. Fortunately, most games can use Protect Memory which is fast. A few Turok: Dinosaur Hunter is a known exception. Check QWORD should suffice for it.


Hardware

Below are links to the different virtual machine hardware settings:

  • Expansion Pak
  • EEPROM Size
  • Save Type
  • Counter Factor
  • Use TLB
  • Max VI Limit


Counter Factor (CF)

1964 does not emulate the timing of the N64 to cycle-accuracy. For this reason, the CF is a hack which has been added to 1964 so that the user can customize the timing rate. The Counter Factor is so named because there is a register called COUNT which is constantly incremented as the Nintendo64 runs. This register is used by the operating system of a game to control cyclic events and thread switching. In a multithreaded operating system, the OS needs to know how much processing time to give to different threads, and the COUNT register is used to compute elapsed time. So, changing the behavior of the COUNT register via CFs will give you different results. For example, you will notice that as you increase the CF, video may be choppier because producing graphics (display lists) is given a lower thread priority than other running processes. The "factor" is a multiple which increases the Program Clock by a factor of n (1-8), specified by the user. The default is CF3, which is reasonable for most ROMs. If you have a very fast machine (above Pentium III 600 MHz), CF1 will be a more enjoyable experience with smoother frame rates for many ROMs.

While a few games such as WaveRace and Super Mario 64 work best at CF=2, most of the time you will want to use an odd CF value. In most cases, the ini file is configured for a reasonable experience.

While a game is running, you can alter the CF by pressing CTRL+#, where # is a value from 1 to 8. In the Status Bar you will see the CF indicator change. By design, this change will not be saved to the ini. If you wish to save a CF setting to the ini, you need to edit the CF for the game from the ROM Properties dialog.


EEPROM Size

EEPROM is an acronym for e lectrically erasable p rogrammable read-only m emory. Some N64 cartridges have an EEPROM memory chip to store game saves.

There are 2 sizes of EEPROM data used: 4 Kilobits and 16 Kilobits. Most cartridges with an EEPROM use 4Kilobits, while others such as Perfect Dark use 16 Kilobits.

The default is 4 Kilobits.


Expansion Pak

The Expansion Pak is a 4 MegaByte RDRAM pak that can be installed into the N64. With an Expansion Pak installed, the N64 has a total of 8 MegaBytes of available RAM. Some games such as Donkey Kong 64 require the Expansion Pak to be set to Yes, which means it is installed. Some other games might get better performance or have more game options with Expansion Pak. The default setting is No.


Save Type

Save Type is the type of memory that a ROM uses for saving your games. If an incorrect type is chosen, the ROM may not save game data and only save states will work correctly. This option is by default set to All Used Types, this allows the ROM to save all feasible types, but it will use more disk space. However, this is typically best for maximum compatibility if the save type isn't known in the INI. The other save types are:

  • SRAM, EEPROM, FLASHRAM.
    These are various types of Non Volatile (stays resident without power) RAM that are used to store game save data. What type the cart uses is based on what the manufacturer placed in the cart during production. Setting this to any of the wrong settings may prevent you from using internal game saves.
  • MEMPAK: This uses the a MEMPAK file, or this is overrided by the MEMPAK attached to the controller, depending on the settings of certain input plug-ins.
  • First Used: This sets the ROM to use only the first detected save type. It will not use any others.


Max VI Limit

VI is short for Vertical Interrupt. When this option is set to Auto Synch, This option auto-detects how many Vertical Interrupts per Second (VI/s) should be processed for the given ROM. This is the most compatible option.

If the setting turns out to be wrong, you can try other settings in the ROM Properties. Refer to this table for more information


Use TLB

TLB is short for Translation Look-aside Buffer. The purpose of the TLB is to translate virtual addresses into physical addresses whenever there is an attempt either to load from memory or to store to memory. When this option is set to No, this option is off, and the ROM is assumed to not need the TLB. If it works with TLB off, some more speed may result. For maximum compatibility, the default setting for this option is Yes. In theory, all games should work with this set to On.


With Plug-ins

Below are links to the settings for use with certain plug-ins that support them:

  • Frame Buffer R/W
  • RSP/RDP Timing


Frame Buffer R/W

Enabling this option allows 1964 to notify the video plug-ins about a CPU frame buffer direct read/write. This only works if the video plugin supports the feature. In particular, this feature is for Dr. Mario, but perhaps a few other games will benefit from it as well. It is slower to use it, and may cause stability issues in 0.9.9 with ATI Radeon video cards.


RSP/RDP Timing

If the video plugin supports this option, enabling RSP/RDP timing will allow the video plugin to provide to 1964 a better estimation of elapsed N64 cycles required to finish a display list. Then, 1964 will delay the respective interrupts accordingly. Rice's hope was that this options could give better timing for time-sensitive games, but we haven't seen this feature help any games. You can leave it off, and we may eventually remove it.


1964 Team

Development Team

Rice and schibo

Special Thanks to:

steb

Gerrit

NooTe

F|RES

Eudaemon

Themedes

The Emu64 Cheats Staff

for your development efforts over the years.

INI File Developer

Duncan

Beta Testers

Karth95
Trotterwatch
URAMetroid
Siskoo
dukenukem
Sayargh
Skull1

Flash
GE Master
Gonetz
bryantonline
Greevy
LazerTag

LeBaladin
Malcolm
mojo
Jemmille
NeTo
oooinpit
Raziel64
RJARRRPCGP

by e-mail:

daniel
pck180
Tomas
QuakeDude007
Studentcsu
sh264540
LAsly
taylore

Greets:

anarko, Angelo, Azimer, ContraSF, Cricket, _Demo_, duddie, ector, Emul8or, epsilon, F|RES, FlyingNR6, hartec, Houe, hWnd, icepir8, Jabo, LaC, Lemmy Lionel, Niki Waibel, Phrodide, rcp, Scav, slacka, Smiff, SpectRe, Spikez, subice, StrmnNrmn, TNSe, ZeZu, zilmar

Last but not least, thank you to Martin and the entire Emulation64.com staff for hosting 1964. Thanks also to bwb and PeterD of EmuHQ.com for hosting us for the first years when we started out. Please consider giving a donation to these web sites.


Donations

We hope that you enjoy our product. We have considered that 1964 version 1.0 (the next version) will be the final version. With that said, please understand that your donation does not guarantee that we will make a new version of 1964. While making a donation to freeware is not required, it is very helpful. Making a donation in general is a nice gesture to give back to the freeware community and is one of the best ways to show your appreciation for the efforts of freeware developers. Additionally, donations help to support developers so that they can purchase new hardware and software to update their existing freeware products and to even create new freeware products. If you decide not to donate to 1964, please consider donating money to other freeware products that you enjoy to support the freeware community.

Please click the button below to make a donation.

Thank you!

Sincerely,

schibo and Rice

1964 Development Team

Donations to 1964 are distributed equally between schibo and Rice. We will not give out your information without your consent. We might only ask for it if we wanted to publicly thank you on our website.