Debugging tips:
Open FCEUX.
Debug, debugger.
Click step into once.
NES, Power.
Click step into once.
That's the first instruction your game is running.
BRK.
Your game doesn't run a single instruction you wrote.
That means the vectors aren't in the right place.
Maybe this was confusing:
Quote:
CHR banks need to be after PRG.
And this
Quote:
The only other tip I can think of is put what are meant to be your 2KB CHR banks first in your ROM. (If you do 1KB banks and have an odd number of them, you will have to pad of things will be misaligned for your 2KB banks. As described above odd numbers basically become the even number below them.)
ALL CHR banks need to be after ALL prg banks. This isn't MMC3 specific, it's the iNES ROM file format. When I said 2KB CHR banks first, I meant they should be the first CHR banks. Not first before PRG banks.
Title screen .asm is essentially the first thing included in your ROM. And inside it is this:
Code:
;----------------------------------------------------------------
; CHR MEMORY:
;----------------------------------------------------------------
...
;----------------------------------------------------------------
; PRG MEMORY:
;----------------------------------------------------------------
That's CHR before PRG banks. I took out the CHR part of that file and put it after the interrupt vectors. (Since the vectors have to be your last PRG ROM bank)
In L5R.asm:
Code:
;----------------------------------------------------------------
; Program Bank Unused
;----------------------------------------------------------------
.rept (PRGCOUNT - PRGBANKCOUNTER - 1)
.base $8000
.pad $C000
.endr
;----------------------------------------------------------------
; Tile Bank Unused
;----------------------------------------------------------------
.rept(CHRSIZE - CHRBANKCOUNTER)
.base $1000
.pad $1400
.endr
;----------------------------------------------------------------
; Program Bank Fixed 1 - $C000 to $0DFF
;----------------------------------------------------------------
So this is putting PRG banks in, then CHR banks in, then a PRG bank in. Again, ALL CHR banks have to be after ALL PRG banks. So I moved the Tile Bank Unused section to the end of your file as well.
The end of your file now looks like this:
Code:
;----------------------------------------------------------------
; interrupt vectors
;----------------------------------------------------------------
.org $FFFA
.dw LBL.NMI
.dw LBL.RESET
.dw 0
;----------------------------------------------------------------
; CHR MEMORY:
;----------------------------------------------------------------
; Background CHR data bank for the Title screen
.base $0000
CHRBANKTITLE = CHRBANKCOUNTER
BANKSIZE = 4
CHRBANKCOUNTER = CHRBANKCOUNTER + BANKSIZE
DAT.TITLE.Background.Tiles:
incbin "TITLE/TITLE.chr"
.pad $1000
; Background CHR data bank for the Title screen sprites
.base $1000
CHRBANKTITLESPRITES = CHRBANKCOUNTER
BANKSIZE = 1
CHRBANKCOUNTER = CHRBANKCOUNTER + BANKSIZE
DAT.TITLE.Sprites.Tiles:
incbin "TITLE/TITLE_SPRITES.chr"
.pad $1400
;----------------------------------------------------------------
; Tile Bank Unused
;----------------------------------------------------------------
.rept(CHRSIZE - CHRBANKCOUNTER)
.base $1000
.pad $1400
.endr
TitleScreen.asm now looks like this:
Code:
;----------------------------------------------------------------
; PRG MEMORY:
;----------------------------------------------------------------
.base $8000
; Nametable
DAT.TITLE.Background.Nametable:
incbin "TITLE/TITLE.nam"
;...
i.e. there is no CHR section, because it was moved after your vectors.
These two changes make the title screen display in the emulators I could try. I can't vouch for anything else, I don't have time (right now) to do a more serious code audit.