It is currently Mon Oct 15, 2018 10:45 pm

All times are UTC - 7 hours





Post new topic Reply to topic  [ 20 posts ]  Go to page 1, 2  Next
Author Message
PostPosted: Sat Sep 29, 2018 6:32 am 
Offline
User avatar

Joined: Sat Sep 07, 2013 2:59 pm
Posts: 1705
Now that I decided to switch from MMC-1 to MMC-3, is there any tutorial that explains, in a clear and easily understandable manner, how to change a game to MMC-3?

This one:
https://wiki.nesdev.com/w/index.php/MMC3
is a techical description that might come in handy when you know what you're doing and when you simply want to lookup some details.
But when I start the whole thing, I rather need a step by step explanation with code examples.

Unfortunately, there's no MMC-3 equivalent to these pages:
https://wiki.nesdev.com/w/index.php/Programming_UNROM
https://wiki.nesdev.com/w/index.php/Programming_MMC1


Also, I need to be able to change my code one thing at a time:


First, I want to set up the mapper, so that my current game still works as before.
I.e. I don't need to know about scanline interrupts and CHR bankswitching* yet.
For the first step, I only need to know how to to initialize the mapper, how to switch the bank and how to change between horizontal and vertical mirroring.

(* Is UNROM- and MMC-1-like CHR RAM even possible with MMC-3? You know, the one where you write individual bytes into the CHR, being able to combine them any way you like.)


In the next step, I would then need to know how the interrupts work, so that I can replace my sprite 0 check with a scanline interrupt.


And then, as the last step, I'd need to know how the whole CHR bankswitching works, so that I can add the possibility for animated graphics and probably restructure the way that my graphics are stored in ROM.
(Because, as far as I understood it, bytes aren't manually written to RAM one by one with this method, but a certain section of the CHR simply points to a certain section in game ROM.)

_________________
Available now: My game "City Trouble".
Website: https://megacatstudios.com/products/city-trouble
Trailer: https://youtu.be/IYXpP59qSxA
Gameplay: https://youtu.be/Eee0yurkIW4
German Retro Gamer article: http://i67.tinypic.com/345o108.jpg


Top
 Profile  
 
PostPosted: Sat Sep 29, 2018 7:05 am 
Offline
User avatar

Joined: Fri Nov 19, 2004 7:35 pm
Posts: 4093
MMC3 can be used for 16K MMC1-style bankswitching, since it has two 8k pages that can be switched. It cannot do 32K bankswitching at all.
MMC3 does let you use CHR-RAM, but you have to initialize the pages to map 0-7 over the 8K range.

_________________
Here come the fortune cookies! Here come the fortune cookies! They're wearing paper hats!


Top
 Profile  
 
PostPosted: Sat Sep 29, 2018 7:23 am 
Offline
User avatar

Joined: Sun Sep 19, 2004 10:59 pm
Posts: 1437
MMC3 feature summary:
  • Two swappable 8KB PRG banks at $8000-$9FFF and $A000-$BFFF, with $C000-$DFFF and $E000-$FFFF being hardwired to the last 16KB of PRG ROM
  • Two swappable 2KB CHR banks at $0000-$07FF and $0800-$0FFF
  • Four swappable 1KB CHR banks at $1000-$13FF, $1400-$17FF, $1800-$1BFF, and $1C00-$1FFF
  • Dynamically configurable nametable mirroring, allowing either Horizontal or Vertical (unfortunately, no 1-screen support)
  • PRG RAM read/write protection
  • A relative scanline-based IRQ counter (i.e. if you start at scanline 30 and set the counter to 50, it will trigger at scanline 80) which does not count during VBlank
  • You can put the first swappable PRG bank at $C000-$DFFF (and put the first fixed PRG bank at $8000-$9FFF) if you want better support for DPCM samples
  • You can reverse the CHR banking as well, putting the four 1KB banks at $0000-$0FFF and the two 2KB banks at $1000-$1FFF if you want - this is because the MMC3 requires you to put Background tiles at $0000-$0FFF and Sprite tiles at $1000-$1FFF in order for the IRQ counter to work correctly

Operation:
  • To switch the first 2KB CHR bank at $0000-$07FF, write the number 0 to $8000 and then the 1KB bank number to $8001 (i.e. the 2KB bank number, multiplied by 2 - the bottom-most bit will be ignored)
  • To switch the second 2KB CHR bank at $0800-$0FFF, write the number 1 to $8000 and then the 1KB bank number to $8001 (see above)
  • To switch the first 1KB CHR bank at $1000-$13FF, write the number 2 to $8000 and then the 1KB bank number to $8001
  • To switch the second 1KB CHR bank at $1400-$17FF, write the number 3 to $8000 and then the 1KB bank number to $8001
  • To switch the third 1KB CHR bank at $1800-$1BFF, write the number 4 to $8000 and then the 1KB bank number to $8001
  • To switch the fourth 1KB CHR bank at $1C00-$1FFF, write the number 5 to $8000 and then the 1KB bank number to $8001
  • To switch the first PRG bank at $8000-$9FFF, write the number 6 to $8000 and then your 8KB bank number to $8001
  • To switch the second PRG bank at $A000-$BFFF, write the number 7 to $8000 and then your 8KB bank number to $8001
  • To make the first swappable PRG bank be at $C000-$DFFF (and make $8000-$9FFF be hardwired to the second-last 8KB bank), ensure that whatever value you write to $8000 (for all of the above cases has bit 6 set (i.e. write #$40 thru #$47 instead of #$00 thru #$07)
  • To make the two 2KB CHR banks appear at $1000-$1FFF and the four 1KB CHR banks appear at $0000-$0FFF, ensure that whatever value you write to $8000 (for all of the above cases has bit 7 set (i.e. write #$80 thru #$87 instead of #$00 thru #$07, or #$C0 thru #$C7 if you want to flip both PRG and CHR at the same time)
  • To select mirroring, write 0 to $A000 for Vertical mirroring or write 1 for Horizontal mirroring
  • To start the scanline timer, write your desired scanline number to $C000, write any value to $C001 to force the counter to immediately reload (otherwise it'll continue to count down from wherever it was previously), then write any value to $E001 to enable interrupts (otherwise, the timer will still run but won't actually generate an IRQ)
  • Once your IRQ happens, write any value to $E000 to acknowledge the interrupt (otherwise, when you RTI you'll immediately get another interrupt)

_________________
Quietust, QMT Productions
P.S. If you don't get this note, let me know and I'll write you another.


Top
 Profile  
 
PostPosted: Sat Sep 29, 2018 8:08 am 
Offline
User avatar

Joined: Fri May 08, 2015 7:17 pm
Posts: 2297
Location: DIGDUG
Quote:
you have to initialize the pages to map 0-7 over the 8K range.


What does this mean?

_________________
nesdoug.com -- blog/tutorial on programming for the NES


Top
 Profile  
 
PostPosted: Sat Sep 29, 2018 8:12 am 
Offline
User avatar

Joined: Tue Jun 24, 2008 8:38 pm
Posts: 1994
Location: Fukuoka, Japan
@dougeff
I think it means that even chr-ram you have to set the order of the banks in the ram. I remember vaguely testing it once on my ram test cart.

From my experience of returning back to nesdev and learning back how the mmc3 work, I would suggest against converting your project right away to mmc3. The reasoning behind it is simple: until you understand how it work, you won't be able to figure out why your game fail because of not yet working in a mmc3 environment. One thing for sure is that it will be easier to use compared to the MMC1 1 bit at the time setting.

The first thing to do is to just create a sample that test how to initialize it and switch bank. You have to init the chr banks too. Once this part work and you understand the concept of the last fixed bank is set at E000 and the second last bank is set by default at C000 (by default it means that you can decide that the second fixed bank is 8000 instead) then you can check "how" to adapt your data so it can be split in 8 k banks. Now you will have to learn how to segments you code/data in smaller chunks and with cc65 it should be simple to know when you get outside of range. There is a good chance it will affect your game completely on when and how you change banks since the size is different.

If you want to try right away, be my guest but I suggest against it since the concept are different.


Top
 Profile  
 
PostPosted: Sat Sep 29, 2018 9:21 am 
Offline

Joined: Sun Sep 19, 2004 11:12 pm
Posts: 20656
Location: NE Indiana, USA (NTSC)
DRW wrote:
(* Is UNROM- and MMC-1-like CHR RAM even possible with MMC-3? You know, the one where you write individual bytes into the CHR, being able to combine them any way you like.)

These games say yes
  • TGROM (Mega Man 4, Mega Man 6, Ninja Crusaders): MMC3, 8 KiB CHR RAM
  • TNROM (Final Fantasy III (J)): MMC3, 8 KiB CHR RAM, 8 KiB WRAM
  • TQROM (Pin-Bot, High Speed): MMC3, 64 KiB CHR ROM (banks 0-63), 8 KiB CHR RAM (banks 64-71)
  • INLXO-ROM (The Curse of Possum Hollow): MMC3, 32 KiB CHR RAM

CHR bank switching is still active even when CHR RAM is installed on the board. So to set up CHR RAM the "obvious" way, a program needs to write an identity mapping. If you're currently using MMC1 in the SGROM configuration (128-256K PRG ROM, 8K CHR RAM), you should be able to replace your $8000 (mirroring) and $A000 (CHR window) initialization code with this code somewhere above $E000, and then replace your $E000 (PRG switching) writing with this:

Code:
mmc1_writeE000:
  asl a
  pha
  lda #6
  sta $8000
  pla
  sta $8001
  pha
  lda #7
  sta $8000
  ora #$01
  pla
  sta $8001
  rts

The pushes and pulls aren't necessary if you have X or Y free, but I haven't seen your code to know what calling convention you're using around bank switches.


Top
 Profile  
 
PostPosted: Sat Sep 29, 2018 11:50 am 
Offline
User avatar

Joined: Sat Sep 07, 2013 2:59 pm
Posts: 1705
Banshaku wrote:
From my experience of returning back to nesdev and learning back how the mmc3 work, I would suggest against converting your project right away to mmc3. The reasoning behind it is simple: until you understand how it work, you won't be able to figure out why your game fail because of not yet working in a mmc3 environment. One thing for sure is that it will be easier to use compared to the MMC1 1 bit at the time setting.

O.k., I will first create a sample program that does nothing like, for example, set the background color to a specific value.

But now I finally need to learn this in a chronologic order.
A feature list like Quietust's is good for overview and research purposes. But for a beginner, it lacks the context and chronology a bit.

For example, without any further context, I don't know what "the 1KB bank number" is in this statement:
Quote:
To switch the first 2KB CHR bank at $0000-$07FF, write the number 0 to $8000 and then the 1KB bank number to $8001 (i.e. the 2KB bank number, multiplied by 2 - the bottom-most bit will be ignored)

Please don't answer this specific question here and now (unless it's part of the answer to one of my questions below). It was just an example to demonstrate that there are certain holes in my knowledge when I get an encyclopedia-like list instead of a chronologic tutorial text.


So, let's do this one way after another:

This is what I'd like to do:

I want the banks to be set up in an UNROM-like style, i.e. $C000-$FFFF shall always be fixed and $8000-$BFFF shall be variable.
(I don't have any DPCM samples, so there's no problem here.)

So, here are my first questions:


1. Do I need to do something to initialize the mapper?

If I remember correctly, UNROM is ready right from the beginning, you just have to choose your corresponding variable bank as soon as you need it.

MMC-1 requires initialization:
Since it can start in an undefined state, the reset vector etc. as well as the first part of the reset initialization code needs to be written into every bank, so that the game starts correctly, no matter what.
And then you have to write a value to $8000 to define which is the fixed bank and which is the variable one. Only then is the state well-defined.

So, is there anything that I need to do to put MMC-3 into a defined state (apart from setting the variable banks and the mirroring itself, which is something that constantly changes through the game anyway)?
For example, do I have to declare that $C000-$FFFF are indeed the fixed banks or is this something that is always guaranteed at startup?


2. After that, how do I set each PRG bank?

As simple as possible please: What do I have to do to set the first 8 KB of the variable bank? What do I have to do to set the last 8 KB of the variable bank? Which value does the parameter need to have for this?


2.1. Since the banks can be switched in 8 KB chunks, can I map the second half of a 16 KB ROM bank to address $8000 and the first half to $A000? Or can banks only be mapped in a way, so that the first half is always at $8000 and the second half at $A000?
I.e. is this possible:
Attachment:
Mapping.png
Mapping.png [ 10.76 KiB | Viewed 314 times ]



3. Additional question: Since MMC-3 seems to have distinct CHR bank data in the ROM and the graphics aren't just stored in regular PRG ROM and then copied manually, can I assign the total ROM size between PRG and CHR as I want?
For example, I've seen a game that has eight PRG banks and 16 CHR banks which makes 256 KB.
But could I also, for example, have nine PRG banks and just 14 CHR banks instead? Or is the relation between the two types of banks fixed in a certain way, so that the size between PRG and CHR is always 50:50 or, for example, only choosable between 50:50, 25:75 and 75:25 etc.?

_________________
Available now: My game "City Trouble".
Website: https://megacatstudios.com/products/city-trouble
Trailer: https://youtu.be/IYXpP59qSxA
Gameplay: https://youtu.be/Eee0yurkIW4
German Retro Gamer article: http://i67.tinypic.com/345o108.jpg


Top
 Profile  
 
PostPosted: Sat Sep 29, 2018 1:52 pm 
Online
User avatar

Joined: Sat Feb 12, 2005 9:43 pm
Posts: 10892
Location: Rio de Janeiro - Brazil
DRW wrote:
1. Do I need to do something to initialize the mapper?

Yes. Banks, mirroring, etc. are supposed to be random on power up. The only guarantee is that $E000-$FFFF is fixed to the last PRG bank, so be sure to put the initialization code there and select/configure any other banks before accessing them.

You can use register $8000 to configure the banking (which of the lower PRG slots is swichable and which pattern table uses 2KB slots and which uses 1KB slots) and select which slot to change, and then you write the bank number to $8001.

Other than that, you can set the mirroring via $A000, and disable IRQs via $E000.

Quote:
Since it can start in an undefined state, the reset vector etc. as well as the first part of the reset initialization code needs to be written into every bank, so that the game starts correctly, no matter what.

$E000-$FFFF is fixed to the last PRG bank, so you don't need to repeat vectors or the initialization code.

Quote:
And then you have to write a value to $8000 to define which is the fixed bank and which is the variable one.

Bit 6 of $8000 also selects which bank is fixed and which is swappable in the MMC3.

Quote:
2. After that, how do I set each PRG bank?

Sect the target slot via $8000, select the bank via $8001. Just 2 mapper writes.

Quote:
As simple as possible please: What do I have to do to set the first 8 KB of the variable bank? What do I have to do to set the last 8 KB of the variable bank? Which value does the parameter need to have for this?

A bank in MMC3 terms is 8KB, there's no reason for thinking of "lower and upper parts of a 16KB bank", except if you're converting a game that originally used 16KB banks, but in the long term, it'll be better if you embrace the architecture of the new mapper you're working with.

Anyway, just write 6 to $8000, then the bank number to $8001. Then write 7 to $8000, and the bank number to $8001.

Quote:
2.1. Since the banks can be switched in 8 KB chunks, can I map the second half of a 16 KB ROM bank to address $8000 and the first half to $A000?

Banks are always 8KB, and there are 2 slots where to map them. You can put any bank in any slot, there's no such thing as "first half" or "second half". Each of your old 16KB banks became 2 independent 8KB banks, as far as the mapper is concerned.

Quote:
3. Additional question: Since MMC-3 seems to have distinct CHR bank data in the ROM and the graphics aren't just stored in regular PRG ROM and then copied manually

You can use CHR-RAM normally, tepples listed a number of games that do it. Just make sure to map the 8KB of CHR-RAM linearly in the pattern table space before using it. Since banks are random at power up,the CHR-RAM will be scrambled and most likely overlapping.

Quote:
But could I also, for example, have nine PRG banks and just 14 CHR banks instead?

No. PRG and CHR are 2 separate chips inside the cartridge, and each must have a size compatible with sizes used in actual memory chips (i.e. powers of 2).

Quote:
Or is the relation between the two types of banks fixed in a certain way, so that the size between PRG and CHR is always 50:50 or, for example, only choosable between 50:50, 25:75 and 75:25 etc.?

There's no ratio, the sizes are completely independent, because they're separate chips. You can make any combination you want as long as each chip is a power-of-two size.

But you can keep using CHR-RAM if you wish, like I said before, and not switch any CHR banks after initialization.


Top
 Profile  
 
PostPosted: Sat Sep 29, 2018 8:59 pm 
Offline
User avatar

Joined: Sat Sep 07, 2013 2:59 pm
Posts: 1705
O.k., thanks for the information. I'll play around with the code on Monday and try everything out.

I still have a few more questions, though:


tokumaru wrote:
You can use CHR-RAM normally, tepples listed a number of games that do it. Just make sure to map the 8KB of CHR-RAM linearly in the pattern table space before using it. Since banks are random at power up,the CHR-RAM will be scrambled and most likely overlapping.

Now that I have MMC3, I want to use the advantages, like the ability to switch tiles on the fly. Therefore, I'm planning to restructure my graphics loading code and not use UNROM/MMC1-style CHR RAM anymore.

Or is the CHR RAM still able to use bank switching, so that I can, for example, freely write 4 x 8 KB worth of graphics and then switch between them?

tokumaru wrote:
PRG and CHR are 2 separate chips inside the cartridge, and each must have a size compatible with sizes used in actual memory chips (i.e. powers of 2).

So, if I have 512 KB and therefore 64 banks of 8 KB each, I can only have 32 banks for PRG, 32 for CHR and that's it? No other combination is possible?

And please don't tell me: "Well, you can have 32 PRG banks and only 16 or eight CHR banks." Because using less banks is obviously not the solution to the question how I put 512 KB to the best use.

tokumaru wrote:
There's no ratio, the sizes are completely independent, because they're separate chips. You can make any combination you want as long as each chip is a power-of-two size.

But why does each MMC3 ROM have a size that's also a power of 2 then, according to bootgod?

Let's say I have 16 PRG banks (which is a power of 2) and 4 CHR banks (which is also a power of 2). Why are there no games listed with a size of (16 + 4) * 8 KB = 160 KB?

_________________
Available now: My game "City Trouble".
Website: https://megacatstudios.com/products/city-trouble
Trailer: https://youtu.be/IYXpP59qSxA
Gameplay: https://youtu.be/Eee0yurkIW4
German Retro Gamer article: http://i67.tinypic.com/345o108.jpg


Last edited by DRW on Sat Sep 29, 2018 9:17 pm, edited 1 time in total.

Top
 Profile  
 
PostPosted: Sat Sep 29, 2018 9:12 pm 
Online

Joined: Sun Apr 13, 2008 11:12 am
Posts: 7648
Location: Seattle
DRW wrote:
Or is the CHR RAM still able to use bank switching, so that I can, for example, freely write 4 x 8 KB worth of graphics and then switch between them?
Yes. If I remember what Tepples said, his Haunted Halloween '86 uses that configuration (with 32 KiB of CHR RAM). However, emulator support for NES2.0 headers and their ability to specify an amount of CHR RAM other than 8 KiB is spotty.

Quote:
So, if I have 512 KB and therefore 64 banks of 8 KB each, I can only have 32 banks for PRG, 32 for CHR and that's it? No other combination is possible?
They're wholly independent. 512KiB could be 512 + 0, or 256+256, but there's no other way to separate 512 into two powers of two.

Quote:
Let's say I have 16 PRG banks (which is a power of 2) and 4 CHR banks (which is also a power of 2). Why are there no ROMS with a size of (16 + 4) * 8 KB = 160 KB?
You mean this one ?


Top
 Profile  
 
PostPosted: Sat Sep 29, 2018 9:23 pm 
Offline
User avatar

Joined: Sat Sep 07, 2013 2:59 pm
Posts: 1705
lidnariq wrote:
DRW wrote:
Or is the CHR RAM still able to use bank switching, so that I can, for example, freely write 4 x 8 KB worth of graphics and then switch between them?
Yes. If I remember what Tepples said, his Haunted Halloween '86 uses that configuration (with 32 KiB of CHR RAM). However, emulator support for NES2.0 headers and their ability to specify an amount of CHR RAM other than 8 KiB is spotty.

I'm planning to only use hardware setups that were used in popular licensed games. No obscure hackjobs and no stuff that was only used in the homebrew community. So, to use bankable CHR RAM, I'd need to be named a licensed game that used it.

lidnariq wrote:
Quote:
Let's say I have 16 PRG banks (which is a power of 2) and 4 CHR banks (which is also a power of 2). Why are there no ROMS with a size of (16 + 4) * 8 KB = 160 KB?
You mean this one ?

O.k., I only had a look into the list view and for some reason, what is called "ROM size" there is actually PRG ROM size.

_________________
Available now: My game "City Trouble".
Website: https://megacatstudios.com/products/city-trouble
Trailer: https://youtu.be/IYXpP59qSxA
Gameplay: https://youtu.be/Eee0yurkIW4
German Retro Gamer article: http://i67.tinypic.com/345o108.jpg


Top
 Profile  
 
PostPosted: Sat Sep 29, 2018 9:28 pm 
Online

Joined: Sun Apr 13, 2008 11:12 am
Posts: 7648
Location: Seattle
DRW wrote:
I'm planning to only use hardware setups that were used in popular licensed games. No obscure hackjobs and no stuff that was only used in the homebrew community. So, to use bankable CHR RAM, I'd need to be named a licensed game that used it.
All MMC3 carts with CHR RAM support banking their CHR RAM. We haven't documented any games that used it, because we haven't looked for it. But as long as you only want 8 KiB of CHR RAM, bankswitching that is 100% supported by contemporary hardware.


Top
 Profile  
 
PostPosted: Sat Sep 29, 2018 10:19 pm 
Online
User avatar

Joined: Sat Feb 12, 2005 9:43 pm
Posts: 10892
Location: Rio de Janeiro - Brazil
DRW wrote:
I'm planning to only use hardware setups that were used in popular licensed games. No obscure hackjobs and no stuff that was only used in the homebrew community. So, to use bankable CHR RAM, I'd need to be named a licensed game that used it.

Yeah, I don't think any games from back in the day used more than 8KB of CHR-RAM with the MMC3, even though that's totally supported by the MMC3 without any hacks. Few MMC3 used CHR-RAM anyway, so if you want to stick to common configurations, just go with CHR-ROM.

lidnariq wrote:
O.k., I only had a look into the list view and for some reason, what is called "ROM size" there is actually PRG ROM size.

PRG and CHR are separate chips, completely independent from each other, and either chip can be any size that's a power of 2. PRG and CHR sizes are listed separately in Bootgod's database. The MMC3 supports a maximum of 512KB of PRG, meaning that 8, 16, 32, 64, 128, 256 and 512KB are all valid sizes, while the maximum CHR size is 256, so you can have 8, 16, 32, 64, 128 or 256KB. Any combination is possible, the size of one chip has no impact at all on the size of the other.


Top
 Profile  
 
PostPosted: Sun Sep 30, 2018 4:18 am 
Offline
User avatar

Joined: Sat Sep 07, 2013 2:59 pm
Posts: 1705
tokumaru wrote:
PRG and CHR are separate chips, completely independent from each other, and either chip can be any size that's a power of 2. PRG and CHR sizes are listed separately in Bootgod's database.

Yeah, after investigating the per-game view, I saw that. But I think it's a little misleading on bootgod's site:
If you go to "Advanced Search" and include "ROM Size" to the columns in the list view, this will actually just be PRG ROM size and not combined ROM size. Furthermore, there doesn't seem to be a choosable column for CHR ROM size in the list view at all. You can only find it if you click the game itself.

_________________
Available now: My game "City Trouble".
Website: https://megacatstudios.com/products/city-trouble
Trailer: https://youtu.be/IYXpP59qSxA
Gameplay: https://youtu.be/Eee0yurkIW4
German Retro Gamer article: http://i67.tinypic.com/345o108.jpg


Top
 Profile  
 
PostPosted: Sun Sep 30, 2018 7:04 am 
Offline

Joined: Sun Sep 19, 2004 11:12 pm
Posts: 20656
Location: NE Indiana, USA (NTSC)
DRW wrote:
So, if I have 512 KB and therefore 64 banks of 8 KB each, I can only have 32 banks for PRG, 32 for CHR and that's it? No other combination is possible?

If you have 512 KiB as a PRG ROM and a CHR ROM, the only combination of these is 256 KiB PRG ROM (32 banks, 8 KiB each) and 256 KiB CHR ROM (256 banks, 1 KiB each). One mitigation is to read data back from CHR ROM if you can fit things into vblank or forced blank. Another is to use CHR RAM.

DRW wrote:
Let's say I have 16 PRG banks (which is a power of 2) and 4 CHR banks (which is also a power of 2). Why are there no games listed with a size of (16 + 4) * 8 KB = 160 KB?

128 KiB PRG ROM + 32 KiB CHR ROM is attested but uncommon. By the time games reached 128 KiB PRG ROM, developers wanted more unique tiles than that.

DRW wrote:
I'm planning to only use hardware setups that were used in popular licensed games. No obscure hackjobs and no stuff that was only used in the homebrew community. So, to use bankable CHR RAM, I'd need to be named a licensed game that used it.

Videomation and Oeka Kids use bankable CHR RAM larger than 8 KiB to hold a full screen frame buffer. But otherwise, they use simple discrete mappers.

Pin-Bot and High Speed have 64 KiB CHR ROM and 8 KiB CHR RAM. I could have made The Curse of Possum Hollow this way, putting sprite sheets in CHR ROM and decompressing backgrounds to CHR RAM, and there wouldn't have been nearly as much delay when switching between Donny and Tami. But it would have cost more per cartridge than using 32 KiB CHR RAM.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 20 posts ]  Go to page 1, 2  Next

All times are UTC - 7 hours


Who is online

Users browsing this forum: No registered users and 4 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group