Not sure how I missed the dedicated wiki... I was looking over kevtris' doc on the format after my post. While I'd probably need to make a few modifications to my current setup now is ideal timing to lay this out since I'm making other changes to my v1 board right now as well.
rainwarrior wrote:
1. 8 x 4k switchable banks from $8000-FFFF. The banks are addressed by 8 registers accessed at $5FF8-5FFF. It looks like we need to address 1MB worth of ROM (our combined NSF data is ~760k), so they'll need be 8-bit bank select registers. These registers could be moved if necessary, but it'd be easiest if they were at the standard address.
Not much issue allowing for this. Only adaptation needed is splitting PRG A12 for 4KB banks. However moving the banks would be helpful.
Code: Select all
NSF Address Register
==== ========== ========
$070 $8000-8FFF $5FF8
$071 $9000-9FFF $5FF9
$072 $A000-AFFF $5FFA
$073 $B000-BFFF $5FFB
$074 $C000-CFFF $5FFC
$075 $D000-DFFF $5FFD
$076 $E000-EFFF $5FFE
$077 $F000-FFFF $5FFF
I understand these register locations were chosen to not conflict with WRAM and existing sound chip's registers. But this sucks up too much i/o to stay low cost since it'd require PRG A0-3 as inputs. PRG A0 might be okay, but A1, A2, and A3 are too costly. since we already require A12-A14 for decoding I'd suggest something like registers $8000, $9000, $A000 etc. Basically just line up the reg with the bank it controls. Could use $5000, $6000, $7000 as well possibly for other functions, or leave as options to de-conflict for other sound extension registers if desired in the future.
2. CHR-RAM would probably be the easiest way to do the visual stuff for this, so we wouldn't need any additional hardware logic to swap tiles. You could take your pick w.r.t. mirroring (vertical, horizontal, whatever), it doesn't need to be dynamic.
Agreed. Nice and easy, no changes needed. 8KB CHR-RAM and fix H/V/one-screen mirroring all requires no I/O from the mapper, so that sounds like the best route for this.
Edit: none of the NSFs require the RAM at $6000-7FFF so that part of the spec can be dropped.
Also, is it possible to initialize the top bank register to $FF on reset? I'm not sure if it's feasible to stick a reset stub into every bank of the NSFs.
It's no problem to initialize any/all of the banks to the last bank at power on. Reset is a little more tricky/costly since you'd need another i/o to sense reset and possibly some discrete components. If it helps, since there isn't WRAM, fixing the last 4-8KB of ROM to $6000-7FFF would be pretty easy. So you'd only need a JMP $6000-7FFF stub in each bank that was ever placed at $F000-FFFF. You wouldn't need the stub in every bank, just the banks that might be there if the user hit reset.
If you're gonna play the Game Boy, you gotta learn to play it right. -Kenny Rogers