Author
Topic: NeoN64Menu v2.6 beta (Read 24078 times)

Time for another update... this is a beta since there have been some pretty big changes, and there's still some work to do. The main feature for this release? GameShark cheat codes!

While browsing the SD card, if there is a file of cheat codes with the same name (minus the extension, which is .gsc) in the /menu/n64/cheats directory of the SD card, the rom options (right next to the box art - if you don't see box art, press Z to switch to the options mode) now includes a new option: Cheats. If you don't see "Cheats: Off" you don't have a matching cheat file. Make sure the names match except for the extension. Press C-Up or C-Down to move to the Cheat option, then press C-Right or C-Left to change the setting. The settings are Off, Select, and All. When you run with the Off setting, the game loads and runs like normal.

When set to Select, the game loads, then you go to a cheat selection screen. All the cheats in the file are shown; you navigate the cheats using the D-Pad, then use the C-Pad to change the cheat setting. For most cheats, the settings are Off and On. For some, the settings are Off and an integer. The help messages at the bottom tell you what buttons do what in case you forget. B always disables the current cheat.

When set to All, the game loads, then you got to the same cheat selection screen, but all the cheats are preset to On instead of Off.

Once you have selected the cheats you want, press A to run the game.

The second feature for this update is support for the UltraSMS emulator. Copy the emulator to /menu/n64/UltraSMS/ and when navigating Game Gear roms, you can press A to load the emulator, load the rom, and run the game in the emulator (just like NES roms). Another minor update is both NES and Game Gear roms now identify as such in the browser while navigating. Note - UltraSMS only handles GameGear roms, not Master System (despite the name). The UltraSMS.zip archive should be unzipped into the /menu/n64 directory of the SD card. The full path for the emulator is "/menu/n64/UltraSMS/UltraSMS.z64".

Find the game you want. Say, Wave Race. Notice that there are codes for two versions. That's why cheat files match the name of the rom instead of the game ID code. Game IDs are the same for all versions of a game, while the rom name will tell you which version you are playing. Say the name is "Wave Race 64 (U) (V1.1) [!].z64" - this tells us we need the cheats for v1.1.

801C293B 0003 Have No Laps To Race & Always Have 1st Place801C2C5B 0003

801C2A67 0005D01CE659 0010 Right Shoulder Turbo Boost801C2A67 0020

Okay, cut and paste that into a text file and save as "Wave Race 64 (U) (V1.1) [!].gsc" - notice how it exactly matches the rom but for the extension. Now we need to make a couple changes for the rules:

1 - Put a '#' or ';' at the start of the line for a comment. There can be whitespace before them.2 - Codes are of the format "CCXXYYYY ZZZZ {description}" where the description is optional.3 - Cheats MUST start with a code with a description. Multiple codes without description may follow.4 - A '#' or ';' character starting the description field makes it a comment instead of a description.5 - Blank lines are fine - they are skipped.6 - Any amount of whitespace is allowed anywhere, but the entire line must be less than 512 characters.

801C293B 0003 Have No Laps To Race & Always Have 1st Place801C2C5B 0003

801C2A67 0005 Right Shoulder Turbo BoostD01CE659 0010801C2A67 0020

Notice how we put a '#' on the first line to make it a comment. Notice how we moved the description for "Right Shoulder Turbo Boost" to the first code in the block. Remember cheats MUST START with a description.

Currently supported codes are:80 - this sets a single byte from the second field. The address is the XXYYYY part of the code, and points to ram. The byte is set in the ZZZZ part of the code, and is usually shown as 00ZZ since it must be a byte, not a word.

81 - this sets a word from the second field. It is just like 80, but for a word instead of a byte.

A0 - this is like 80, but sets uncached ram, while 80 sets cached ram.

A1 - this is like 81, but sets uncached ram, while 81 sets cached ram.

D0 - this fetches a byte from ram, compares it to the byte in the 00ZZ field, then does the next GS code if the bytes are equal (or you can think of it as skipping the next GS code if they are not equal).

D1 - this fetches a word from ram, compares it to the word in the ZZZZ field, then does the next GS code if the words are equal (or you can think of it as skipping the next GS code if they are not equal).

D2 - same as D0, but with the condition reversed. It does the next GS code if they are not equal.

D3 - same as D1, but with the condition reversed. It does the next GS code if they are not equal.

F0 - set a byte in the boot segment once at boot time.

F1 - set a word in the boot segment once at boot time.

CC/DD/EE - these all deactivate the expansion ram (if you have it). The GameShark uses three different methods, but at the moment, I just use one for all three.

There is a limitation on 81/A1/D1/D3 - the words should be on an even address. I'm not sure if odd addresses are allowed since that's not mentioned in anything I could find, but a LOT of Mario 64 cheats use odd addresses. I'll fix that in an update.

There are a number of other codes I've seen that aren't explained (again, mostly in the Mario 64 cheat list), like 20/50/58/83/A3/A4/A8/B4/E0. 50 is explained in one place, but the Mario use of it doesn't match the explanation - ditto for 20. Mario 64 doesn't run with from the cheat engine in any case... I'm looking into it.

801C2A67 00xx Speed Modifier Player 1Notice the 00xx in the ZZZZ field. This is how variable values for different things are done in cheats. If any characters in the ZZZZ field are not valid hexadecimal digits (0 to 9 or A to F), I make that digit variable. So "00xx" or "00??" are both variable bytes (two hex digits). "xxxx" or "?? ??" (with no space - the space is there to make this not a smilie) would be variable hex words. When on the selection screen, each C-Pad button changes a different digit in the variable. Navigate to such a cheat and look at the help lines at the bottom of the screen to see which button changes which character. Note that variable cheat codes MUST BE THE ONLY CHEAT CODE FOR THE CHEAT! I don't have the select screen set up for handling variable codes in multiple code cheats. Multiple cheat code lists are all on or all off, period.

I would like to reiterate that the cheats MUST be for the EXACT version of the game you are using... v1.0 for v1.0, European for European, PAL for PAL, etc. Even a shift of one byte will make a cheat from another version not work, and probably hang the game. So yes, PAL folks are probably going to be left out more than US folks... you'll have to hunt more to find the proper cheats... or do like some folks do now and use an NTSC console with a 60Hz compatible TV. Not a great choice, but not one I have any control over.

Second, this is the very first version of the cheat engine - it does not deal with games that are known to target the GameShark to prevent people from cheating in their games. I'll try to work on that for the next release. It SHOULD work on games that didn't specifically take actions against the GameShark.

Third, there are still some codes I haven't the vaguest idea what they do... I gave a list before, many of them from Mario 64.

Fourth, I did notice in Mario 64 that some of the word codes I do support MIGHT use an odd address, and I don't handle that yet. So if you see a code like 811effc1, that WILL fail on the current cheat engine since it will try to store a word to an odd address (which fails on the MIPS CPU). So if you see a cheat that tries to use words on odd addresses, don't activate those cheats.

Thanks again. We'll get this cheat engine going well with some work. It's not too bad for a first try, but it's certainly not done by any means.

Fourth, I did notice in Mario 64 that some of the word codes I do support MIGHT use an odd address, and I don't handle that yet. So if you see a code like 811effc1, that WILL fail on the current cheat engine since it will try to store a word to an odd address (which fails on the MIPS CPU). So if you see a cheat that tries to use words on odd addresses, don't activate those cheats.

CMIIW, that's a hexadecimal and I believe is very common on computer programming.

CMIIW, that's a hexadecimal and I believe is very common on computer programming.

GameShark codes are like this:CCXXYYYY ZZZZ

E.G., 811effc1 2777

The CC is the command, in this case, 81 which is store a word to the ram offset designated by XXYYYY, which is 1effc1 (which is indeed hexadecimal). ZZZZ is the value to store, in the case of the example, 2777, which is also in hexadecimal.

The issue is that the MIPS processor in the N64 cannot store words to odd addresses (or longs to non-long aligned addresses). So the above code won't work unless you break it into two byte stores instead of one word store. You could do this yourself by hand while waiting for me to fix the issue... the above example can be split into two byte stores like this

This are good cheat files. I hope they will help peoples. When I will have time, I will try to generate every "NeoN64Menu compliant" .gsc possible from this files with a little script combining informations. This shouldn't be too hard.

I've tested cheat on "Top Gear Rally (E) [!]":

8032690F 00FF Extra Cars & Tracks8032690C 00FF8032690D 00FF

And it has worked...

I have a question for you ChillyWilly:

Is there any plan to support controller pack "emulator" with your menu and save controller pack saved directly on the SD card? This could be great!

I also would like to tell to everybody I've finally find why Neo2 Pro wasn't recognized by Neo2Manager:

Don't push your Neo2Pro into the N64 Myst too high!

If you actually push your Neo2Pro too high in the N64 Myst (until a little "click"), you will have problem with Neo2Manager kernel kit, etc... When you will plug the N64 Myst, the red light will become green 3 times and stop and Neo2Manager will not recognized it.

So the solution is to plug the Neo2Pro in you N64Myst but not too deeply, plug it to your computer using a good usb cable and launch the Neo2Manager in Administrator (Win7 x64). And now everything work!

This are good cheat files. I hope they will help peoples. When I will have time, I will try to generate every "NeoN64Menu compliant" .gsc possible from this files with a little script combining informations. This shouldn't be too hard.

I've tested cheat on "Top Gear Rally (E) [!]":

8032690F 00FF Extra Cars & Tracks8032690C 00FF8032690D 00FF

And it has worked...

I'll look those over... maybe if a specific .gsc file isn't found, I can try looking for one of those and then check if the game is in it. I also need to make an update on the code generator for the cheats.

Quote

I have a question for you ChillyWilly:

Is there any plan to support controller pack "emulator" with your menu and save controller pack saved directly on the SD card? This could be great!

The problem is that this is handled via DMA through the peripheral port. It would be a pain to try to intercept. So at the moment, you have to make due with saving/loading the mempak to/from SD in the save ram manager.

I'll look those over... maybe if a specific .gsc file isn't found, I can try looking for one of those and then check if the game is in it. I also need to make an update on the code generator for the cheats.

Thoses are very long files to parse, not sure this would be efficient.

If you have access to the CRC in your menu, it could be interesting to use it instead rom name:

For example:

80F41131-384645F6-C:4A

Which is supposed to be crc for "AeroGauge (J) (V1.1)" could became:

80F41131-384645F6-C_4A.gsc

And provide cheats for this game.

So it could work like this:

- First, check for the rom name ("AeroGauge (J) (V1.1).gsc").- No rom name? Use the CRC ("80F41131-384645F6-C_4A.gsc").

What do you think of this?

With a such system we could provide a database directly with your menu.

The problem is that this is handled via DMA through the peripheral port. It would be a pain to try to intercept. So at the moment, you have to make due with saving/loading the mempak to/from SD in the save ram manager.

I understand. Interception during game is a problem. Maybe a way to copy saves on SD directly from the menu. Don't know if the problem is the same...

EDIT (Not test yet): There is two archives:crc_gsc.zip contain gsc files with CRC as name (just changed ":" character to "_"). Some have very long names and some need descriptions to be understandable.

Cheat Name: VS. Mode\Player 1\Character ModifierDescription: Only put this on after you have alreay Chose your Character on the Main Menu,& Do not use more then 1 Character Modifier at a time.Using this Code This could also result freezing at the end of the Level.Values: Mario, Fox, etc...Impossible to understand without description. Maybe the cheat engine could support and display description?

Hope this will help you ChillyWilly.

name_gsc.zip are same gsc files but with rom name. It should be helpfull for peoples who just want to have every possible cheat files.