Welcome, Guest |
You have to register before you can post on our site.
|
Forum Statistics |
» Members: 176
» Latest member: Satan
» Forum threads: 371
» Forum posts: 1,084
Full Statistics
|
Online Users |
There are currently 21 online users. » 0 Member(s) | 20 Guest(s) Bing
|
Latest Threads |
Public Releases from 1.3 ...
Forum: Previous Public Releases
Last Post: Gent
01-15-2023, 01:13 PM
» Replies: 0
» Views: 231
|
Project64 1.6 Files
Forum: Project64 1.6 Public Downloads
Last Post: Gent
01-15-2023, 01:12 PM
» Replies: 0
» Views: 286
|
Project64 Legacy - 1.6.2 ...
Forum: Project64 Legacy - 1.6.2 (Alpha)
Last Post: Gent
01-15-2023, 12:58 PM
» Replies: 0
» Views: 265
|
Sub context screenshot
Forum: Project 64 1.6.x Dev
Last Post: NES_Player4Life
12-06-2022, 02:02 AM
» Replies: 0
» Views: 164
|
Space Invaders (U) [!]
Forum: Cheat Database Related
Last Post: NES_Player4Life
09-23-2022, 05:30 AM
» Replies: 1
» Views: 2,225
|
Window position problem w...
Forum: Application
Last Post: ToKu
08-29-2022, 10:55 AM
» Replies: 3
» Views: 735
|
Legacy New Extension File...
Forum: Project 64 1.6.x Dev
Last Post: Gent
08-28-2022, 10:43 PM
» Replies: 11
» Views: 4,393
|
super weird behaviour of ...
Forum: Project 64 1.6.x Dev
Last Post: Darthkoopa
06-21-2022, 11:50 AM
» Replies: 2
» Views: 1,008
|
Available Language files
Forum: Project64 Language FIles
Last Post: Gent
06-08-2022, 10:59 AM
» Replies: 0
» Views: 373
|
Activation Email Issues
Forum: General Discussion
Last Post: Gent
06-07-2022, 03:08 PM
» Replies: 0
» Views: 1,362
|
|
|
Sub context screenshot |
Posted by: NES_Player4Life - 12-06-2022, 02:02 AM - Forum: Project 64 1.6.x Dev
- No Replies
|
 |
Working on a texture pack this evening using HighResEaser and although the script is great it relies on a screenshot to read the positions of textures.
This is great for full-screen textures however there are also smaller areas that I am currently working on; see attached.
Quesgestion is this, is there a way to add an option where a user can define an area on-screen where a screenshot can be snapped from?
[To see links please register here]
|
|
|
Window position problem with moving the taskbar left side. |
Posted by: ToKu - 08-25-2022, 10:56 AM - Forum: Application
- Replies (3)
|
 |
Hello,
I use the Windows taskbar left side, the Window position is wrong in the game.
It is the value of "Main Left" stored in the Project64.apps file.
Reproduction Procedure
- Run the any games.
- Exit PJ64 while game is running. (Exit or click X on top right)
Thank you.
|
|
|
Activation Email Issues |
Posted by: Gent - 06-07-2022, 03:08 PM - Forum: General Discussion
- No Replies
|
 |
If you have signed up and for some reason are still waiting on an Activation Email, Please you the option [To see links please register here] .
Make sure you check your email clients Spam folder just in case.
If you still do not receive an activation email, please visit us on our [To see links please register here] & let us know about your issues.
|
|
|
Watchpoints |
Posted by: Parasyte - 05-24-2022, 11:22 PM - Forum: Cheat Development
- No Replies
|
 |
I added support for watchpoints (aka read/write breakpoints). The UI is pretty scuffed. I decided to reuse what was already there for instruction breakpoints. Some future improvements would be integrating with the memory viewer ... And turning it into a memory editor.
[To see links please register here]
`xrw` flags are shown in the breakpoints list for convenience. These are shorthand for `eXecute`, `Read`, and `Write`.
Known limitations:- Only supports exact matches on virtual addresses. Will not trigger when the lsb is written and you are waiting for writes to a word-aligned address.
- Only triggers on CPU memory access; DMA will not trigger any watchpoints.
|
|
|
New code type: Write data block |
Posted by: Parasyte - 05-24-2022, 05:47 PM - Forum: Cheat Development
- No Replies
|
 |
Historically, some games have made it difficult to hack assembly codes when they use virtual addresses (the CPU's TLB). Notable games that do this are GoldenEye 007, Star Wars: Battle for Naboo, and Indiana Jones. The shortcoming is from the N64 GS and XP lacking a code type to write to arbitrary virtual addresses.
I sketched out an idea to fix this issue a looooong time ago: [To see links please register here] It was never implemented in the GS firmware or with any code engine hacks. One of the issues with a code like this is that the virtual address must be mapped (or at least mappable) or writing to the address will throw an exception in the exception handler. On real hardware, support for this code type needs to be carefully crafted.
On an emulator, we have more headroom, and we can just write anywhere at any time. I've implemented a code type based on the linked document. The differences are described here:
Code: 40000000 0000
xxxxxxxx yyyy
zzzzzzzz zzzz...
The x's are the address to write to. Importantly, this is a 32-bit address. I.e. it is not limited to writing to virtual addresses in the 0x80000000-0x807fffff range like other code types. The y's provide the number of bytes that will be written (minus 1). The z's are the actual data bytes to write. As many z lines can be used as needed, and the last must be padded (e.g. with zeroes) to a full code line.
Tutorial: GoldenEye 007, Infinite Health
In the linked document, a virtual address is provided for GoldenEye 007: 0x7f089cc0. This address has a write instruction that updates Bond's health when hit. The address is the same on every level. Patching this address allows us to make a code that gives infinite health on every level, instead of using the old per-level codes. The data we want to write to this address is a nop instruction, which is 4 zero bytes.
Fill in the x's with the full virtual address, and fill the y's with the value 4 - 1. Add the 4 zero bytes, and 2 more to pad the final line:
Code: 40000000 0000
7F089CC0 0003
00000000 0000
An advantage is that it is significantly smaller than the original Infinite Health for all levels.
Tutorial: Super Mario 64, Jesus Mode
Here's the old Jesus Mode code, for reference: [To see links please register here]
Code: 81381764 0800
81381766 0024
81000090 3C04
81000092 8034
81000094 8484
81000096 B1E6
81000098 4484
8100009A 3000
810000A0 4680
810000A2 3120
810000A4 4604
810000A6 903C
810000AC 4500
810000AE 0002
810000B4 4600
810000B6 2486
810000B8 080E
810000BA 05DB
810000BC E712
We can make this code significantly smaller by using the block write code type instead of many individual half-word writes.
To start, notice that many of the addresses in this code simply increase by 2. This is a good indicator that a block write will make this shorter. We can also see the assembly in the Enhacklopedia article, but we can ignore that here.
The second thing to notice is that a few addresses are skipped. We can assume that these are zeroes (which they are). This will make it easier to write a contiguous block of data, and will end up making the code even smaller than trying to split it into multiple block writes.
Third, we note that the first two lines do not need to be in a block write. A block write code has a minimum of 3 lines, so 6 bytes is the break-even point. These two lines write 4 bytes, so we will leave them as is.
Starting with the third line, copy-paste each subsequent value into a very long string. I cheated a little and just deleted all of the addresses between each value. Don't forget to fill in zeros where they are needed.
The first part from 0x80000090-0x8000009c is obvious. It should look like this:
Code: 3C04 8034 8484 B1E6 4484 3000
Then add the 4 zero bytes:
Code: 3C04 8034 8484 B1E6 4484 3000 0000 0000
And copy more bytes up to 0x800000b0:
Code: 3C04 8034 8484 B1E6 4484 3000 0000 0000 4680 3120 4604 903C 4500 0002
Then there are 4 more zero bytes:
Code: 3C04 8034 8484 B1E6 4484 3000 0000 0000 4680 3120 4604 903C 4500 0002 0000 0000
Followed by the last part:
Code: 3C04 8034 8484 B1E6 4484 3000 0000 0000 4680 3120 4604 903C 4500 0002 0000 0000 4600 2486 080E 05DB E712
There is also a nop at the end, but we don't need to write it.
Given this string of bytes, we can remove spaces and add line breaks so that each line contains 6 bytes in the format of a GS code line:
Code: 3C048034 8484
B1E64484 3000
00000000 4680
31204604 903C
45000002 0000
00004600 2486
080E05DB E712
This one happens to not require any padding, nice!
To finalize the code, we just need to count the number of bytes that need to be written. You can actually count them out if you like, but I'm going to cheat again and do some math instead. The last address in the code is 0x800000bc; We can add 2 to this address to find the end of the block, then subtract the starting address (0x80000090) to get the total byte count:
Code: 0x800000be - 0x80000090 = 0x2e
Don't forget to subtract 1, since the byte count is zero-based:
Code: 0x800000be - 0x80000090 - 1 = 0x2d
With that, we can put everything together to see the final code:
Code: 81381764 0800
81381766 0024
40000000 0000
80000090 002d
3C048034 8484
B1E64484 3000
00000000 4680
31204604 903C
45000002 0000
00004600 2486
080E05DB E712
That takes the code down from 19 lines to 11 lines. This is a 48% savings in terms of code lines!
|
|
|
|