Register - Login
Views: 87834193
Main - Memberlist - Active users - Calendar - Wiki - IRC Chat - Online users
Ranks - Rules/FAQ - JCS - Stats - Latest Posts - Color Chart - Smilies
12-15-17 12:53:41 AM

Jul - SM64 Hacking - Project64MM(Memory Mod) - RDRAM Extension New poll - New thread - New reply
Next newer thread | Next older thread
Cajetan
Member
Level: 20


Posts: 72/86
EXP: 38434
For next: 4005

Since: 08-06-11
From: Binary

Since last post: 2.0 years
Last activity: 1.0 years

Posted on 02-24-15 03:34:27 PM (last edited by Cajetan at 02-28-15 09:54:41 AM) Link | Quote
Yes, it's back. This time better, and working better. I tested it out a few times and concluded that we can max reach 32MB RDRAM and not go any further. I had to re-write some stuff (only the RDRAM part) to keep it working. Theoretically it could work on a real N64 hardware if someone managed to get more RDRAM to the N64 console.

As much as many people will hate me for this, I don't really care. If you don't like this idea, then despise it, hate it, as much as you can. But stop spamming this topic with useless arguments which lead only to nothing. I'm gonna release it and that's it.

Project64MM (Memory Mod) v2.0 - OMGZ MOAR RAMz!?
I decided to release my PJ64 modification. I had to re-write lots of stuff to get it working and here it is. Basically it allows more RDRAM (up to 32MB).

Where could this be useful?
* Bigger Levels (like a 300k poly level)
* Better, more detailed models.
* Bigger codes and more freedom (you don't have to worry that some freespace is being used by Skelux, the skeleton)
* Spawning more objects.

Download-Link:
http://www.filedropper.com/project64mmmemorymodv20

Addresses:
4MB RDRAM (Majority used by the game already), Start: 0x80000000, End: 0x803FFFFF
8MB RDRAM (Majority used by Skelux's Importer, but some freespace available in there), Start: 0x80400000, End: 0x807FFFFF
12MB RDRAM (Unused), Start: 0x80800000, End: 0x80BFFFFF
16MB RDRAM (Unused), Start: 0x80C00000, End: 0x80FFFFFF
20MB RDRAM (Unused), Start: 0x81000000, End: 0x813FFFFF
24MB RDRAM (Unused), Start: 0x81400000, End: 0x817FFFFF
28MB RDRAM (Unused), Start: 0x81800000, End: 0x81BFFFFF
32MB RDRAM (Unused), Start: 0x81C00000, End: 0x81FFFFFF

To get some code working, you basically use a DmaCopy to copy the code from ROM to RAM.

Have fun,
Joe
Common spammer
🗿
Level: 104


Posts: 3182/3289
EXP: 11609219
For next: 252907

Since: 08-02-07
From: Pororoca

Since last post: 32 days
Last activity: 10 hours

Posted on 02-28-15 07:43:06 AM Link | Quote
Originally posted by Cajetan
I tested it out a few times and concluded that we can max reach 32MB RDRAM and not go any further.
What limits you to 32MB?
Originally posted by Cajetan
Theoretically it could work on a real N64 hardware if someone managed to get more RDRAM to the N64 console.
Nintendo's boot code only initializes up to 16MB of RAM. The remainder is left uninitialized, which makes it completely unusable. Do you have reworked initialization code to get around this limitation?
Cajetan
Member
Level: 20


Posts: 73/86
EXP: 38434
For next: 4005

Since: 08-06-11
From: Binary

Since last post: 2.0 years
Last activity: 1.0 years

Posted on 02-28-15 09:42:38 AM (last edited by Cajetan at 02-28-15 10:03:11 AM) Link | Quote
Originally posted by Joe
Originally posted by Cajetan
I tested it out a few times and concluded that we can max reach 32MB RDRAM and not go any further.
What limits you to 32MB?


I believe it had something to do with the memory map. If I go any further, I would write into AI, SI, VI, etc. or other important stuff. Not a good idea to write in there.

Originally posted by Joe
Nintendo's boot code only initializes up to 16MB of RAM. The remainder is left uninitialized, which makes it completely unusable. Do you have reworked initialization code to get around this limitation?


All I did was expanding the RDRAM up to 32MB RDRAM, respectively you can select 4MB, 8MB, 12MB, 16MB, 20MB, 24MB, 28MB and 32MB RDRAM.

Currently the extended RDRAM works for the interpreter, but got it work already for the recompiler + physical lookup table. Works wonderful. Releasing that later when I did it for each MIPS instruction. (blame zilmar)


EDIT:
Also, I tested this code here (with my CajeASM):


This wrote 0x68 byte to 0x80C01404 (16MB range). I changed the emulated instruction in the recompiler to read/write (LB/SB) a larger range. I could try it with an even higher range.
Joe
Common spammer
🗿
Level: 104


Posts: 3183/3289
EXP: 11609219
For next: 252907

Since: 08-02-07
From: Pororoca

Since last post: 32 days
Last activity: 10 hours

Posted on 02-28-15 11:38:54 AM Link | Quote
Originally posted by Cajetan
I believe it had something to do with the memory map. If I go any further, I would write into AI, SI, VI, etc. or other important stuff. Not a good idea to write in there.
The memory map is empty up to 0x83EFFFFF (63MB), though I don't know how much of this can actually have RAM mapped to it on a real console...
Originally posted by Cajetan
All I did was expanding the RDRAM up to 32MB RDRAM, respectively you can select 4MB, 8MB, 12MB, 16MB, 20MB, 24MB, 28MB and 32MB RDRAM.
When a N64 first turns on, it has 0 bytes of RAM. The boot code has to detect and enable the individual RDRAM chips, and it can do this for up to 16MB. Even if more than that is physically connected, only 16MB can be accessed. You'll need to reinitialize the RDRAM chips in order to enable more RAM than that.

Emulators don't bother with any of that; they just treat the RDRAM as if it's already been initialized.
Cajetan
Member
Level: 20


Posts: 74/86
EXP: 38434
For next: 4005

Since: 08-06-11
From: Binary

Since last post: 2.0 years
Last activity: 1.0 years

Posted on 02-28-15 12:01:30 PM (last edited by Cajetan at 02-28-15 12:02:10 PM) Link | Quote
Originally posted by Joe
Originally posted by Cajetan
I believe it had something to do with the memory map. If I go any further, I would write into AI, SI, VI, etc. or other important stuff. Not a good idea to write in there.
The memory map is empty up to 0x83EFFFFF (63MB), though I don't know how much of this can actually have RAM mapped to it on a real console...


wrote another test code, writing into 32MB RDRAM area:


I edited emulator source code to read/write from 32MB RDRAM extended area. Works, with all loading/storing instructions. Also works with DmaCopy. So, it can be used when using the modified emulator.

Originally posted by Joe

When a N64 first turns on, it has 0 bytes of RAM. The boot code has to detect and enable the individual RDRAM chips, and it can do this for up to 16MB. Even if more than that is physically connected, only 16MB can be accessed. You'll need to reinitialize the RDRAM chips in order to enable more RAM than that.

Emulators don't bother with any of that; they just treat the RDRAM as if it's already been initialized.


Ah, I understand. Well, I never looked into how the N64 really does this kind of stuff and I have no idea how I would accomplish this on a real N64 console. Maybe someone else with more experience on this could test it out. You know, I'm kinda more the "software" guy. Heh.
Next newer thread | Next older thread
Jul - SM64 Hacking - Project64MM(Memory Mod) - RDRAM Extension New poll - New thread - New reply




Rusted Logic

Acmlmboard - commit 2f1bc75 [2017-08-27]
©2000-2017 Acmlm, Xkeeper, Inuyasha, et al.

27 database queries, 3 query cache hits.
Query execution time: 0.161902 seconds
Script execution time: 0.007445 seconds
Total render time: 0.169347 seconds