I'm writing a project using the MMC3 mapper. It is my understanding that I could potentially have 32 PRG banks in this mapper, and I desperately need them!
It was my understanding that I would just change the "NES_PRG_BANKS" value to "32". I would then need to assign entries to PRG banks in the "MEMORY" section, the match them up in the "SEGMENTS" section. However, if change the banks value to "32" and I uncomment those lines below, it compiles and gives me a grey screen. I assume it can't find start code because I haven't addressed something correctly.
So as it stands now, it compiles and works okay, I'm just running out of space.
Can you guys tell what I'm misunderstanding?
Code: Select all
SYMBOLS {
__STACKSIZE__: type = weak, value = $0500; # 5 pages stack
NES_MAPPER: type = weak, value = 4; # mapper number
NES_PRG_BANKS: type = weak, value = 16; # number of 16K PRG banks, change to 2 for NROM256
NES_CHR_BANKS: type = weak, value = 16; # number of 8K CHR banks
NES_MIRRORING: type = weak, value = 1; # 0 horizontal, 1 vertical, 8 four screen
}
MEMORY {
ZP: start = $0000, size = $0100, type = rw, define = yes;
HEADER: start = $0000, size = $0010, file = %O ,fill = yes;
PRG1: start = $8000, size = $2000, file = %O ,fill = yes; #
PRG2: start = $8000, size = $2000, file = %O ,fill = yes; # level
PRG3: start = $8000, size = $2000, file = %O ,fill = yes; # level
PRG4: start = $8000, size = $2000, file = %O, fill = yes; # level
PRG5: start = $8000, size = $2000, file = %O, fill = yes; # level
PRG6: start = $8000, size = $2000, file = %O, fill = yes; # level
PRG7: start = $8000, size = $2000, file = %O, fill = yes; # level
PRG8: start = $8000, size = $2000, file = %O, fill = yes; # level
PRG9: start = $8000, size = $2000, file = %O, fill = yes; # level
PRG10: start = $A000, size = $2000, file = %O, fill = yes; # consts
PRG11: start = $A000, size = $2000, file = %O, fill = yes; # story text
PRG12: start = $A000, size = $2000, file = %O, fill = yes; # item - nmi metaspr lvl1-3
PRG13: start = $A000, size = $2000, file = %O, fill = yes; # nmi metaspr lvl 4-6
PRG14: start = $A000, size = $2000, file = %O, fill = yes; # player metaspr,
PRG15: start = $8000, size = $2000, file = %O, fill = yes; # music
PRG16: start = $8000, size = $2000, file = %O, fill = yes; # music
PRG17: start = $8000, size = $2000, file = %O, fill = yes;
PRG18: start = $8000, size = $2000, file = %O, fill = yes;
PRG19: start = $8000, size = $2000, file = %O, fill = yes;
PRG20: start = $8000, size = $2000, file = %O, fill = yes;
PRG21: start = $8000, size = $2000, file = %O, fill = yes;
PRG22: start = $8000, size = $2000, file = %O, fill = yes;
PRG23: start = $8000, size = $2000, file = %O, fill = yes;
PRG24: start = $8000, size = $2000, file = %O, fill = yes;
PRG25: start = $8000, size = $2000, file = %O, fill = yes;
PRG26: start = $8000, size = $2000, file = %O, fill = yes;
PRG27: start = $8000, size = $2000, file = %O, fill = yes;
PRG28: start = $8000, size = $2000, file = %O, fill = yes;
PRG29: start = $8000, size = $2000, file = %O, fill = yes;
PRG30: start = $8000, size = $2000, file = %O, fill = yes;
# PRG31: start = $8000, size = $2000, file = %O, fill = yes;
# PRG: start = $c000, size = $3ef5, file = %O ,fill = yes, define = yes; # main.c
# ENDPRG: start = $fef5, size = $cb, file = %O, fill = yes;
PRG: start = $c000, size = $3ee0, file = %O ,fill = yes, define = yes; # main.c
ENDPRG: start = $fee0, size = $e0, file = %O, fill = yes;
DMC: start = $ffc0, size = $003a, file = %O, fill = yes;
VECTORS: start = $fffa, size = $0006, file = %O, fill = yes;
CHR0: start = $0000, size = $1000, file = %O, fill = yes; # level 1, offset: 0 kb, size: 4 kb
CHR1: start = $0000, size = $1000, file = %O, fill = yes; # level 1d, offset: 4 kb, size: 4 kb
CHR2: start = $0000, size = $1000, file = %O, fill = yes; # level 2a, offset: 8 kb, size: 4 kb
CHR3: start = $0000, size = $1000, file = %O, fill = yes; # level 3, offset: 12 kb, size: 4 kb
CHR4: start = $0000, size = $1000, file = %O, fill = yes; # level 4, offset: 16 kb, size: 4 kb
CHR5: start = $0000, size = $1000, file = %O, fill = yes; # level 5, offset: 20 kb, size: 4 kb
CHR6: start = $0000, size = $1000, file = %O, fill = yes; # level 6, offset: 24 kb, size: 4 kb
CHR7: start = $0000, size = $0800, file = %O, fill = yes; # player sprite male, offset: 28 kb, size: 2 kb
CHR8: start = $0000, size = $0800, file = %O, fill = yes; # player sprite female, offset: 30 kb, size: 2 kb
CHR9: start = $0000, size = $1000, file = %O, fill = yes; # title, offset: 32 kb, size: 4 kb
CHR10: start = $0000, size = $800, file = %O, fill = yes; # enemies_1, offset: 36 kb, size: 2 kb
CHR11: start = $0000, size = $400, file = %O, fill = yes; # story font, offset: 38 kb, size 1 kb
CHR12: start = $0000, size = $0c00, file = %O, fill = yes; # story evilcart, offset: 39kb, size 3 kb
CHR13: start = $0000, size = $0c00, file = %O, fill = yes; # story booth, offset: 42kb, size 3kb
CHR14: start = $0000, size = $0c00, file = %O, fill = yes; # story tv, offset: 45kb, size 3kb
CHR15: start = $0000, size = $0c00, file = %O, fill = yes; # story evilend, offset: 48kb, size 3kb
CHR16: start = $0000, size = $0c00, file = %O, fill = yes; # story crazy , offset 54 kb, size 3kb
CHR17: start = $0000, size = $0c00, file = %O, fill = yes; # story kotr , offset 57 kb, size 3kb
CHR18: start = $0000, size = $0c00, file = %O, fill = yes; # story , offset 60 kb, size 3kb
CHR19: start = $0000, size = $0c00, file = %O, fill = yes; # story , offset 63 kb, size 3kb
CHR20: start = $0000, size = $0c00, file = %O, fill = yes; # story , offset 66 kb, size 3kb
CHR21: start = $0000, size = $0c00, file = %O, fill = yes; # story , offset 69 kb, size 3kb
CHR22: start = $0000, size = $0c00, file = %O, fill = yes; # story , offset 72 kb, size 3kb
CHR23: start = $0000, size = $0c00, file = %O, fill = yes; # story , offset 75 kb, size 3kb
CHR24: start = $0000, size = $0c00, file = %O, fill = yes; # story , offset 78 kb, size 3kb
CHR25: start = $0000, size = $0c00, file = %O, fill = yes; # story , offset 81 kb, size 3kb
CHR26: start = $0000, size = $0c00, file = %O, fill = yes; # story , offset 84 kb, size 3kb
CHR27: start = $0000, size = $0c00, file = %O, fill = yes; # story , offset 87 kb, size 3kb
CHR28: start = $0000, size = $0400, file = %O, fill = yes; # padding
CHR29: start = $0000, size = $1000, file = %O, fill = yes; # level2b, offset 90 kb, size 4kb
CHR30: start = $0000, size = $0400, file = %O, fill = yes; # items, offset 91kb, size 1kb
CHR31: start = $0000, size = $0400, file = %O, fill = yes; # l1enemies, offset 92kb, size 1kb
CHR32: start = $0000, size = $0400, file = %O, fill = yes; # l2enemies, offset 93kb, size 1kb
CHR33: start = $0000, size = $0400, file = %O, fill = yes; # l3enemies, offset 94kb, size 1kb
CHR34: start = $0000, size = $0400, file = %O, fill = yes; # l4enemies, offset 95kb, size 1kb
CHR35: start = $0000, size = $0400, file = %O, fill = yes; # l5enemies, offset 96kb, size 1kb
CHR36: start = $0000, size = $0400, file = %O, fill = yes; # l6enemies, offset 97kb, size 1kb
CHR37: start = $0000, size = $0400, file = %O, fill = yes; # l1boss, offset 98kb, size 1kb
CHR38: start = $0000, size = $0400, file = %O, fill = yes; # l2boss, offset 99kb, size 1kb
CHR39: start = $0000, size = $0400, file = %O, fill = yes; # l3boss, offset 100kb, size 1kb
CHR40: start = $0000, size = $0400, file = %O, fill = yes; # l4boss, offset 101kb, size 1kb
CHR41: start = $0000, size = $0400, file = %O, fill = yes; # l5boss, offset 102kb, size 1kb
CHR42: start = $0000, size = $0400, file = %O, fill = yes; # l6boss, offset 103kb, size 1kb
CHR43: start = $0000, size = $0400, file = %O, fill = yes; # Flames/subweapons, offset 104kb, size 1kb
CHR44: start = $0000, size = $1000, file = %O, fill = yes; # Gameover Screen, offset: 105 kb, size: 4 kb
CHR45: start = $0000, size = $1000, file = %O, fill = yes; # Status Screen, offset: 109 kb, size: 4 kb
# CHRFONT: start = $0000, size = $1000, fil^e = %O, fill = yes;
# CHRBG1: start = $0000, size = $800, file = %O, fill = yes;
# CHRBG2: start = $0000, size = $2000, file = %O, fill = yes;
# CHRPAD: start = $0000, size = $800, file = %O, fill = yes;
RAM: start = $0300, size = $0500, define = yes;
# Use this definition instead if you going to use extra 8K RAM
# RAM: start = $6000, size = $2000, define = yes;
}
SEGMENTS {
HEADER: load = HEADER, type = ro;
STARTUP: load = ENDPRG, type = ro, define = yes;
LOWCODE: load = PRG, type = ro, optional = yes;
INIT: load = PRG, type = ro, define = yes, optional = yes;
CODE: load = PRG, type = ro, define = yes;
RODATA: load = PRG, type = ro, define = yes;
DATA: load = PRG, run = RAM, type = rw, define = yes;
PRG1: load = PRG1, type = ro;
PRG2: load = PRG2, type = ro;
PRG3: load = PRG3, type = ro;
PRG4: load = PRG4, type = ro;
PRG5: load = PRG5, type = ro;
PRG6: load = PRG6, type = ro;
PRG7: load = PRG7, type = ro;
PRG8: load = PRG8, type = ro;
PRG9: load = PRG9, type = ro;
PRG10: load = PRG10, type = ro;
PRG11: load = PRG11, type = ro;
PRG12: load = PRG12, type = ro;
PRG13: load = PRG13, type = ro;
PRG14: load = PRG14, type = ro;
PRG15: load = PRG15, type = ro;
PRG16: load = PRG16, type = ro;
PRG17: load = PRG17, type = ro;
PRG18: load = PRG18, type = ro;
# PRG19: load = PRG19, type = ro;
# PRG20: load = PRG20, type = ro;
# PRG21: load = PRG21, type = ro;
# PRG22: load = PRG22, type = ro;
# PRG23: load = PRG23, type = ro;
# PRG24: load = PRG24, type = ro;
# PRG25: load = PRG25, type = ro;
# PRG26: load = PRG26, type = ro;
# PRG27: load = PRG27, type = ro;
# PRG28: load = PRG28, type = ro;
# PRG29: load = PRG29, type = ro;
# PRG30: load = PRG30, type = ro;
# PRG31: load = PRG31, type = ro; # seems like extra
VECTORS: load = VECTORS, type = rw;
# SAMPLES: load = DMC, type = rw;
CHR0: load = CHR0, type = rw;
CHR1: load = CHR1, type = rw;
CHR2: load = CHR2, type = rw;
CHR3: load = CHR3, type = rw;
CHR4: load = CHR4, type = rw;
CHR5: load = CHR5, type = rw;
CHR6: load = CHR6, type = rw;
CHR7: load = CHR7, type = rw;
CHR8: load = CHR8, type = rw;
CHR9: load = CHR9, type = rw;
CHR10: load = CHR10, type = rw;
CHR11: load = CHR11, type = rw;
CHR12: load = CHR12, type = rw;
CHR13: load = CHR13, type = rw;
CHR14: load = CHR14, type = rw;
CHR15: load = CHR15, type = rw;
CHR16: load = CHR16, type = rw;
CHR17: load = CHR17, type = rw;
CHR18: load = CHR18, type = rw;
CHR19: load = CHR19, type = rw;
CHR20: load = CHR20, type = rw;
CHR21: load = CHR21, type = rw;
CHR22: load = CHR22, type = rw;
CHR23: load = CHR23, type = rw;
CHR24: load = CHR24, type = rw;
CHR25: load = CHR25, type = rw;
CHR26: load = CHR26, type = rw;
CHR27: load = CHR27, type = rw;
CHR28: load = CHR28, type = rw;
CHR29: load = CHR29, type = rw;
CHR30: load = CHR30, type = rw;
CHR31: load = CHR31, type = rw;
CHR32: load = CHR32, type = rw;
CHR33: load = CHR33, type = rw;
CHR34: load = CHR34, type = rw;
CHR35: load = CHR35, type = rw;
CHR36: load = CHR36, type = rw;
CHR37: load = CHR37, type = rw;
CHR38: load = CHR38, type = rw;
CHR39: load = CHR39, type = rw;
CHR40: load = CHR40, type = rw;
CHR41: load = CHR41, type = rw;
CHR42: load = CHR42, type = rw;
CHR43: load = CHR43, type = rw;
CHR44: load = CHR44, type = rw;
CHR45: load = CHR45, type = rw;
# CHRFONT: load = CHRFONT, type = rw;
# CHRBG1: load = CHRBG1, type = rw;
# CHRBG2: load = CHRBG2, type = rw;
# CHRPAD: load = CHRPAD, type = rw;
BSS: load = RAM, type = bss, define = yes;
HEAP: load = RAM, type = bss, optional = yes;
ZEROPAGE: load = ZP, type = zp;
ONCE: load = PRG, type = ro, optional = yes;
}
FEATURES {
CONDES: segment = INIT,
type = constructor,
label = __CONSTRUCTOR_TABLE__,
count = __CONSTRUCTOR_COUNT__;
CONDES: segment = RODATA,
type = destructor,
label = __DESTRUCTOR_TABLE__,
count = __DESTRUCTOR_COUNT__;
CONDES: type = interruptor,
segment = RODATA,
label = __INTERRUPTOR_TABLE__,
count = __INTERRUPTOR_COUNT__;
}