https://wiki.nesdev.com/w/index.php/J.Y._Company_ASIC#Mirroring_Select_.28.24D001.29The notes for mirroring say that $D001 is the register to perform the changes for mirroring. But I am unable to do so with doing this? I'm able to use the other functions of this mapper, like setting the prg-rom size, being able to swap banks, I just cant get the mirroring to work. Am I missing a bit somewhere that needs to be set for $D001 to work?
Thanks!
Has this stumped the community?
Perhaps it has. This means we may need to step back, as one does in the case of an XY problem, and try to solve the larger problem.
Are you making an original game for the JY Company mapper?
Just messing around with it, but I can't figure out how it does the mirroring. Even when i set breakpoints to the mirroring register, it does snap when I load super Mario world. Never encountered this.
Edit: I ditched the .unf format and went to .nes and I set the mapper as 209, and now the mirroring is working for me at will.
It means that registers do not extend, as one might naively think, over the entire range from $8000-$8FFF, but instead just $8000-$87FF.
How can we rephrase that to make it clearer?
infidelity wrote:
Edit: I ditched the .unf format and went to .nes and I set the mapper as 209, and now the mirroring is working for me at will.
What MAPR was the original file?
lidnariq wrote:
It means that registers do not extend, as one might naively think, over the entire range from $8000-$8FFF, but instead just $8000-$87FF.
How can we rephrase that to make it clearer?
Exactly how you just did! Putting that in parenthesis after the existing description I think is reasonable. I'll take care of doing that, since the particular line is repeated in several places throughout the page.
Edit: done. Let me know if that's more helpful. I wasn't sure how to fix up
Miscellaneous Registers because the mask for $5000/5400/5C00 seems in conflict with the others.
Ok, so im starting to wonder if FCEUX is missing features to some of these mapper variations from JY-120A?
I'm learning how to use extra 512kb of PRG-ROM. When i'm on mapper 209, these are the abilities im able to perform...
Header is NES 2.0
1: set PRG-ROM swapping to 16kb for $8000-$BFFF & $C000-$FFFF
2: ability to adjust mirroring via writes to $D001
3: ability to load anywhere within the additional 512kb PRG-ROM with writes to $D003
The only thing i'm unable to do, which is what i need, is the ability to write to $6000-$7FFF WRAM. Nothing gets stored to it. However, you are able to use it as PRG-ROM by inserting 2000 bytes of a bank into $6000-$7FFF. But i want to use it as RAM.
Now, i read that mapper 35 is a "duplicate...." of mapper 209, with the ability to use 8kb of WRAM. So Im like "awesome!"
I change the header using Nestopia to mapper 35, i reload the test rom and i write LDA #$88 STA $6000, and when I view $6000, the value 88 is stored there.
So again i'm like "awesome!" now comes the part of what i was NOT able to do, that I was originally able to do with mapper 209
1: unable to set PRG-ROM swap type, it's always set to 8kb chunks even if I set $D000 to either 8kb/16kb/32kb, it's always 8kb.
2: unable to swap out $E000-$FFFF (it's always set to hard wired) & again, originally I want it as 16kb $C000-$FFFF but cant.
3: unable to use $D003 to access the additional 512k PRG-ROM. It looks like because of the PRG-ROM only using 8kb chunks, it's unavailable?
I havent even begun to mess with the CHR, because I want to make sure everything else is working properly as i advance in learning the mapper usage. But if the nesdev wiki says 35 is a duplicate of 209, then i feel the FCEUX build i have (2.2.3) has mapper 35 functioning incorrectly.
Could someone point me in the right direction to speak to a dev that works on FCEUX? Or am I incorrect in all of this? Cause when I went back to mapper 209, everything was working fine with it's registers.
FCEUX's implementation of mapper 35 is very incomplete. Look at the
old version of the page before NewRisingSun verified what the hardware was.
(edit) For that matter,
all of FCEUX's implementations of the J.Y. Company mappers are incomplete, because no-one before him tried to look for hardware to verify patterns across different mapper numbers.
Ooook, just looked at that older doc. That explains everything regarding 35.
Guess I'll stick with 209, just wish wram was a function.
Edit: just saw your edit, would I have luck getting in touch with one of the fceux devs on having 35 worked on?
Is there anyone that knows c+, that could edit the "90.cpp" mapper file for FCEUX, to allow wram usage? I'm using 209 and have figured out how to utilize all the registers I wish to use, only problem is with the projects I have in mind, I cant write anything to $6000-$7FFF. Is there anyone that would be able to do this? I'm not looking to make repo carts or anything like that, thanks!
Or am I incorrect that any nes game, regardless of mapper, can access nes's $6000-$7FFF?
I'm using NES 2.0 header.
For NES 2.0, you have to specify RAM size at $6000-$7FFF in byte 10. If you put $00 there, you get open bus. Some mappers don't allow RAM at $6000-$7FFF at all because they have registers there.
Ok I'll take a look at my header tonight.
One more question. I checked the wiki on the NES 2.0 header, and noticed a term called PRG-NVRAM. I've seen this as well in the ines editor within Nestopia, but idk what the NV stands for?
Non-volatile. Because the field both marks EEPROMs and battery-backed RAM.
Oh ok, thanks for that piece of info.
Hmm, cant get it to work still. This is what FCEUX says.
Code:
Mapper #: 209
Mapper name:
Mirroring: Horizontal
Battery-backed: Yes
Trained: No
NES2.0 Extensions
Sub Mapper #: 0
Total WRAM size: 8192
Total VRAM size: 0
WRAM backed by battery: 8192
VRAM backed by battery: 0
this is what $D000 says for 209
Code:
D~7654 3210
---------
6GRC CLPP
|||| ||++- Select PRG-ROM banking mode
|||| || 0: 32 KiB banking
|||| || 1: 16 KiB banking
|||| || 2: 8 KiB banking
|||| || 3: 8 KiB banking, but with bank numbers bits 0-6 reversed
|||| |+--- Select bank $8000-(32 KiB)/$C000-(16 KiB)/$E000-(8KiB)-$FFFF
|||| | 0: Hard-wired to last bank
|||| | 1: Switchable via $8003
|||+-+---- Select CHR banking mode
||| 0: 8 KiB banking
||| 1: 4 KiB banking
||| 2: 2 KiB banking
||| 3: 1 KiB banking
||+------- Select ROM nametable status
|| 0: ROM nametables disabled
|| 1: ROM nametables enabled (for all or some nametables, depending on bit 6)
|+-------- Select ROM nametable selection method if R=1, ignored otherwise
| 0: ROM nametables selected separately by $B00x bit 7 XOR $D002 bit 7
| 1: ROM nametables enabled globally for all nametables
+--------- Select CPU $6000-$7FFF mapping
0: Map WRAM, if present, otherwise open bus
1: Map 8 KiB PRG-ROM bank selected via $8003
(appropriately shifted and right-filled with binary 1 in 16/32 KiB PRG modes)
ive made sure to not have the bit set in $D000 for the wram, it needs to be not set according to the wiki. With all that, no matter what I type anywhere within $6000-$7FFF instantly turns to 00's.
Is there anyway someone can modify mapper 209 for wram usage please?
I really need the wram to work with mapper 209, I've made sure that my header has the correct bit set in the 10th byte for prg-ram usage, I made sure that $D000 for mapper is setup correctly for prg-ram, and I looked over the wiki on mapper 209, to make sure it doesn't use $6000-$7FFF. Again any and all help will be greatly appreciated.
I can assure you, asking repeatedly will not help you. Everyone who checks these forums regularly already has decided whether to help, and anyone who doesn't regularly won't even have seen the original post.
At this point, I suspect the fastest way to get the results you want is for you to get familiar with C and with FCEUX's code base.