Mapper 1 expansion vs. UNROM-512 conversion
Posted: Thu Mar 14, 2019 6:40 pm
Welcome to the romhacker's conundrum! :D
I've been working on a game for the past 6 months -- actually, the only game known to use SMROM, which is MMC1 (not MMC1A!) + 256KB (2x128KB) PRG-ROM + 8KB CHR-RAM + no battery. There is not enough room in this ROM to provide enough space for a Japanese/English translation, thus it must be doubled to 512KB. My options are... complicated... and I'd like some opinions. Some details about this game:
- Mapper set up to use vertical mirroring. However, I haven't completed a full analysis of everything, so for all I know there could be some animated parts that use horizontal screen panning, or maybe even switches to horizontal mirroring etc...
- MMC1 isn't subject to bus conflicts, thus moving to a mapper that suffers from bus conflicts could be a serious problem (it's not easy to simply "shift" a game up by 16 bytes, to make bytes ex. $8000-800F etc. available for ROM bank selection use)
- I'm unsure if there are invalid writes to $6000-7FFF on this game -- I just haven't looked yet. It's assigned mapper 1, but MMC1A (and thus I assume MMC1) are subject to complications like this
- (Random fact) Nestopia has an incorrect forced-board-type on this game of SGROM (it's truly SMROM but SGROM functions the same way in this case). It retains mapper 1, however, so this is not a game that's forced onto mapper 155
- There is no playthrough of this game, which makes testing and verification of features/use/things very difficult -- further compounded by my lack of being able to read Japanese
Options as I see them:
1. Convert to SUROM, which is MMC1B2/MMC1B3 + 512KB PRG-ROM + 8KB CHR-RAM
- Pro: same mapper, backwards-compatible mostly (see below)
- Pro: not subject bus conflicts
- Pro: 512KB support is implemented via writes to $A000-BFFF swapping between each 256KB "half". Might be possible to keep the Japanese version in one half, and the English version in the other half, offering a menu system where the user selects what language they want
- Con: 512KB support is implemented via writes to $A000-BFFF swapping between each 256KB "half". In other words: it isn't just a full 512KB you can pick 16KB from via (the MMC1 equivalent of) lda #20 / sta $E000 ; map bank 20 to $8000-BFFF
- Con: 512KB support would lead to a lot of duplicated banks, which means the IPS patch would contain large sums of intellectual property
- Con: native donor boards are extremely limited -- only 4 other Japanese games use SUROM
- ???: includes 8KB PRG-RAM ($6000-7FFF) that is battery-backed; does this complicate matters? See above
- ???: unsure of console (ex. Retron 5, etc.) and flash cart (ex. PowerPak, EverDrive N8, etc.) compatibility
- ???: if NES 2.0 header required, unsure of emulator and console/flash cart compatibility
2. Convert to UNROM-512
- Pro: offers 512KB natively
- Pro: donor boards w/ mapper are easy to get (i.e. just buy them from INL)
- Pro: no NES 2.0 header required (mapper 30)
- Pro: don't have to worry about anything relating to PRG-RAM since there is none
- Con: have more romhacking work to do, re: converting all mapper writes to UNROM (but probably not too much work/too bad)
- Con: mirroring is fixed (solder pad level), not mapper-level, thus could break the game if it changes mirroring at run-time
- Con: conditionally subject to bus conflicts: non-flashable boards are subject to them, while flashable boards are not
- ???: unsure of console (ex. Retron 5, etc.) and flash cart (ex. PowerPak, EverDrive N8, etc.) compatibility
I have a feeling there are other options I'm overlooking, but these are the 2 I pondered for a while. Thanks everyone.
I've been working on a game for the past 6 months -- actually, the only game known to use SMROM, which is MMC1 (not MMC1A!) + 256KB (2x128KB) PRG-ROM + 8KB CHR-RAM + no battery. There is not enough room in this ROM to provide enough space for a Japanese/English translation, thus it must be doubled to 512KB. My options are... complicated... and I'd like some opinions. Some details about this game:
- Mapper set up to use vertical mirroring. However, I haven't completed a full analysis of everything, so for all I know there could be some animated parts that use horizontal screen panning, or maybe even switches to horizontal mirroring etc...
- MMC1 isn't subject to bus conflicts, thus moving to a mapper that suffers from bus conflicts could be a serious problem (it's not easy to simply "shift" a game up by 16 bytes, to make bytes ex. $8000-800F etc. available for ROM bank selection use)
- I'm unsure if there are invalid writes to $6000-7FFF on this game -- I just haven't looked yet. It's assigned mapper 1, but MMC1A (and thus I assume MMC1) are subject to complications like this
- (Random fact) Nestopia has an incorrect forced-board-type on this game of SGROM (it's truly SMROM but SGROM functions the same way in this case). It retains mapper 1, however, so this is not a game that's forced onto mapper 155
- There is no playthrough of this game, which makes testing and verification of features/use/things very difficult -- further compounded by my lack of being able to read Japanese
Options as I see them:
1. Convert to SUROM, which is MMC1B2/MMC1B3 + 512KB PRG-ROM + 8KB CHR-RAM
- Pro: same mapper, backwards-compatible mostly (see below)
- Pro: not subject bus conflicts
- Pro: 512KB support is implemented via writes to $A000-BFFF swapping between each 256KB "half". Might be possible to keep the Japanese version in one half, and the English version in the other half, offering a menu system where the user selects what language they want
- Con: 512KB support is implemented via writes to $A000-BFFF swapping between each 256KB "half". In other words: it isn't just a full 512KB you can pick 16KB from via (the MMC1 equivalent of) lda #20 / sta $E000 ; map bank 20 to $8000-BFFF
- Con: 512KB support would lead to a lot of duplicated banks, which means the IPS patch would contain large sums of intellectual property
- Con: native donor boards are extremely limited -- only 4 other Japanese games use SUROM
- ???: includes 8KB PRG-RAM ($6000-7FFF) that is battery-backed; does this complicate matters? See above
- ???: unsure of console (ex. Retron 5, etc.) and flash cart (ex. PowerPak, EverDrive N8, etc.) compatibility
- ???: if NES 2.0 header required, unsure of emulator and console/flash cart compatibility
2. Convert to UNROM-512
- Pro: offers 512KB natively
- Pro: donor boards w/ mapper are easy to get (i.e. just buy them from INL)
- Pro: no NES 2.0 header required (mapper 30)
- Pro: don't have to worry about anything relating to PRG-RAM since there is none
- Con: have more romhacking work to do, re: converting all mapper writes to UNROM (but probably not too much work/too bad)
- Con: mirroring is fixed (solder pad level), not mapper-level, thus could break the game if it changes mirroring at run-time
- Con: conditionally subject to bus conflicts: non-flashable boards are subject to them, while flashable boards are not
- ???: unsure of console (ex. Retron 5, etc.) and flash cart (ex. PowerPak, EverDrive N8, etc.) compatibility
I have a feeling there are other options I'm overlooking, but these are the 2 I pondered for a while. Thanks everyone.