Expanding PRG space in MMC3

Discuss technical or other issues relating to programming the Nintendo Entertainment System, Famicom, or compatible systems. See the NESdev wiki for more information.

Moderator: Moderators

Post Reply
theinfamousmrmeow
Posts: 11
Joined: Sun Mar 25, 2018 9:02 pm

Expanding PRG space in MMC3

Post by theinfamousmrmeow »

Hello forums,

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__;
}
tepples
Posts: 22708
Joined: Sun Sep 19, 2004 11:12 pm
Location: NE Indiana, USA (NTSC)
Contact:

Re: Expanding PRG space in MMC3

Post by tepples »

An MMC3 PRG ROM bank is 8192 bytes, or 8 KiB.
An iNES PRG ROM "bank" is 16384 bytes, or 16 KiB, or two MMC3 banks.
This means that if you have 524288 bytes of PRG ROM, or 512 KiB, or 32 iNES "banks", your linker script needs to allocate 64 memory areas, not just 32.
theinfamousmrmeow
Posts: 11
Joined: Sun Mar 25, 2018 9:02 pm

Re: Expanding PRG space in MMC3

Post by theinfamousmrmeow »

Oh! Okay, so have my PRG's defined up to 30 working smoothly. Thanks very much!


So though, if I change

Code: Select all

 NES_PRG_BANKS: type = weak, value = 16;          # number of 16K PRG banks, change to 2 for NROM256
To anything >16

Code: Select all

 NES_PRG_BANKS: type = weak, value = 32;          # number of 16K PRG banks, change to 2 for NROM256
I just compile to grey still, should I not be modifying that symbol?
tepples
Posts: 22708
Joined: Sun Sep 19, 2004 11:12 pm
Location: NE Indiana, USA (NTSC)
Contact:

Re: Expanding PRG space in MMC3

Post by tepples »

When you set NES_PRG_BANKS to 32, what does your MEMORY block look like? If you increase NES_PRG_BANKS to 32 without making the corresponding change to MEMORY, your ROM image will not be valid, and the emulator is likely to produce a gray screen for this invalid ROM image.
theinfamousmrmeow
Posts: 11
Joined: Sun Mar 25, 2018 9:02 pm

Re: Expanding PRG space in MMC3

Post by theinfamousmrmeow »

Here's that memory section,

[spoiler]

Code: Select all

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;  #Weird compile if used
    PRG32:     start = $8000, size = $2000, file = %O, fill = yes; 
    PRG33:     start = $8000, size = $2000, file = %O, fill = yes; 
    PRG34:     start = $8000, size = $2000, file = %O, fill = yes; 
    PRG35:     start = $8000, size = $2000, file = %O, fill = yes; 
    PRG36:     start = $8000, size = $2000, file = %O, fill = yes; 
    PRG37:     start = $8000, size = $2000, file = %O, fill = yes; 
    PRG38:     start = $8000, size = $2000, file = %O, fill = yes; 
    PRG39:     start = $8000, size = $2000, file = %O, fill = yes; 
    PRG40:     start = $8000, size = $2000, file = %O, fill = yes; 
    PRG41:     start = $8000, size = $2000, file = %O, fill = yes;  
    PRG42:     start = $8000, size = $2000, file = %O, fill = yes; 
    PRG43:     start = $8000, size = $2000, file = %O, fill = yes; 
    PRG44:     start = $8000, size = $2000, file = %O, fill = yes; 
    PRG45:     start = $8000, size = $2000, file = %O, fill = yes; 
    PRG46:     start = $8000, size = $2000, file = %O, fill = yes; 
    PRG47:     start = $8000, size = $2000, file = %O, fill = yes; 
    PRG48:     start = $8000, size = $2000, file = %O, fill = yes; 
    PRG49:     start = $8000, size = $2000, file = %O, fill = yes; 
    PRG50:     start = $8000, size = $2000, file = %O, fill = yes; 
    PRG51:     start = $8000, size = $2000, file = %O, fill = yes;  
    PRG52:     start = $8000, size = $2000, file = %O, fill = yes; 
    PRG53:     start = $8000, size = $2000, file = %O, fill = yes; 
    PRG54:     start = $8000, size = $2000, file = %O, fill = yes; 
    PRG55:     start = $8000, size = $2000, file = %O, fill = yes; 
    PRG56:     start = $8000, size = $2000, file = %O, fill = yes; 
    PRG57:     start = $8000, size = $2000, file = %O, fill = yes; 
    PRG58:     start = $8000, size = $2000, file = %O, fill = yes; 
    PRG59:     start = $8000, size = $2000, file = %O, fill = yes; 
    PRG60:     start = $8000, size = $2000, file = %O, fill = yes;     
    PRG61:     start = $8000, size = $2000, file = %O, fill = yes;     
    PRG62:     start = $8000, size = $2000, file = %O, fill = yes;     
    PRG63:     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;
}
[/spoiler]

Here's a NES-SC report, looks like I have broken something after PRG16?

https://photos.google.com/share/AF1QipM ... JPX1lYeFV3
User avatar
thefox
Posts: 3134
Joined: Mon Jan 03, 2005 10:36 am
Location: 🇫🇮
Contact:

Re: Expanding PRG space in MMC3

Post by thefox »

theinfamousmrmeow wrote:

Code: Select all

    PRG:       start = $c000, size = $3ee0, file = %O ,fill = yes, define = yes;  # main.c
Why is this so large?
Download STREEMERZ for NES from fauxgame.com! — Some other stuff I've done: fo.aspekt.fi
tepples
Posts: 22708
Joined: Sun Sep 19, 2004 11:12 pm
Location: NE Indiana, USA (NTSC)
Contact:

Re: Expanding PRG space in MMC3

Post by tepples »

It appears to cover the last 2 PRG ROM banks (except the last 288 bytes), for use when the P bit of $8000 is clear (0). This leaves room for ENDPRG which is presumably init code.
User avatar
thefox
Posts: 3134
Joined: Mon Jan 03, 2005 10:36 am
Location: 🇫🇮
Contact:

Re: Expanding PRG space in MMC3

Post by thefox »

tepples wrote:It appears to cover the last 2 PRG ROM banks (except the last 288 bytes), for use when the P bit of $8000 is clear (0). This leaves room for ENDPRG which is presumably init code.
(63*0x2000 + 0x3ee0 + 0xe0 + 0x3a + 0x6) bytes = 520 kilobytes. Probably the size should be $1ee0.
Download STREEMERZ for NES from fauxgame.com! — Some other stuff I've done: fo.aspekt.fi
Post Reply