PowerMappers (a new set of PowerPak mappers)

Discuss hardware-related topics, such as development cartridges, CopyNES, PowerPak, EPROMs, or whatever.

Moderator: Moderators

Great Hierophant
Posts: 780
Joined: Tue Nov 23, 2004 9:35 pm

Re: PowerMappers (a new set of PowerPak mappers)

Post by Great Hierophant »

Awesome job, here are the games affected by these mappers that I have found to be buggy :

Low-G-Man : Music for Level 1 Boss is not correct, but it does not crash
Startropics 1 & 2 : Half of Mike's small sprite flickers constantly, as does his inventory in the action sequences.
Guerilla War : Single scanline flicker which begins about a third of the way into the first stage.
Rad Racer 2 : Occasional flickering of yellow/orange lines in the road
Mickey's Adventure in Numberland : Certain tiles in Mickey's sprite flicker constantly similar to Startropics
Mickey's Safari in Letterland : Status menu expands or constricts by 1-2 scanlines regularly
Little Ninja Brothers : Shaking in status menus, text boxes and the like. Also affects current EverDrive OS.
User avatar
thefox
Posts: 3134
Joined: Mon Jan 03, 2005 10:36 am
Location: 🇫🇮
Contact:

Re: PowerMappers (a new set of PowerPak mappers)

Post by thefox »

Great Hierophant wrote:Low-G-Man : Music for Level 1 Boss is not correct, but it does not crash
Probably coincidental, since the game has a bug, relying on values read from WRAM (which the real cart doesn't have). So it'd depend on whatever values happened to be in the WRAM when you started the game. Should be possible to work around it simply by loading an 8KB save file full of $FF. I guess the mapper loader could check if the game has battery backing, and if not, initialize WRAM to $FF always...

How was the music not correct?
Startropics 1 & 2 : Half of Mike's small sprite flickers constantly, as does his inventory in the action sequences.
Yeah, known. ST requires very precise IRQ timing on real hardware due to a PPU hardware bug (http://wiki.nesdev.com/w/index.php/Erra ... nd_Sprites, "Turning rendering off in PPUMASK..."). At least that's my theory.
Guerilla War : Single scanline flicker which begins about a third of the way into the first stage.
Unlikely to be a mapper problem since the game uses MMC1. Have you checked on a real cart? It sounds/seems like it might be caused by yet another hardware bug: http://wiki.nesdev.com/w/index.php/Errata#Video ("When writing to PPUCTRL ($2000) at the exact start of horizontal blanking..."). I checked in emulator and this game does seem to be doing quite a lot of PPUCTRL writes midscreen.

EDIT: Same symptoms in https://youtu.be/fTs-6dgGxqs?t=79 (AFAIK NESGuide's gameplay videos use original carts).
Mickey's Adventure in Numberland : Certain tiles in Mickey's sprite flicker constantly similar to Startropics
Mickey's Safari in Letterland : Status menu expands or constricts by 1-2 scanlines regularly
These two require very precise IRQ timing. The current implementation fires the IRQ a little bit later than it should.
Little Ninja Brothers : Shaking in status menus, text boxes and the like. Also affects current EverDrive OS.
Not entirely sure what's causing this, but wouldn't be surprised if it has tight timing in the IRQ handler as well...
Download STREEMERZ for NES from fauxgame.com! — Some other stuff I've done: fo.aspekt.fi
Great Hierophant
Posts: 780
Joined: Tue Nov 23, 2004 9:35 pm

Re: PowerMappers (a new set of PowerPak mappers)

Post by Great Hierophant »

Low-G-Man's music sounds more warbly compared to a real cart. Loading a Save RAM file with all FFs fixes the music.

I don't have a real cartridge of Guerilla War, but the lines appear with the PowerMappers, the Save Mappers and the EverDrive, so I am now of the belief that they should be there. The video was uploaded on July 8, 2007, which almost certainly predates the PowerPak. Odd that neither Nestopia UE nor Nintendulator show them.

I would note that Mickey's Letterland requires the Acclaim MMC3 IRQ timing, but Numberland uses a standard Nintendo MMC3.
User avatar
thefox
Posts: 3134
Joined: Mon Jan 03, 2005 10:36 am
Location: 🇫🇮
Contact:

Re: PowerMappers (a new set of PowerPak mappers)

Post by thefox »

Great Hierophant wrote:Odd that neither Nestopia UE nor Nintendulator show them.
This bug was pinned down fairly recently (viewtopic.php?f=2&t=10104), and we still don't know the exact details of it, so no emulator (to my knowledge) emulates it.
Download STREEMERZ for NES from fauxgame.com! — Some other stuff I've done: fo.aspekt.fi
darthvedder
Posts: 10
Joined: Sat Feb 20, 2016 7:41 pm

Re: PowerMappers (a new set of PowerPak mappers)

Post by darthvedder »

Thank you for these. I was experiencing graphical glitches in Zelda II with the mappers that came with the PowerPak. I tried your PowerMappers and it cleared it right up.
User avatar
cubeboy
Posts: 33
Joined: Fri Nov 08, 2013 7:56 pm

Re: PowerMappers (a new set of PowerPak mappers)

Post by cubeboy »

I tried to run Tecmo Super Bowl 2017 on my PowerPak with the PowerMappers, but it's failing for me. I get to the point where the progress bar gets to 100%, it goes to a black screen like normal, but it stays stuck on a black screen. Previous iterations of Tecmo Super Bowl 201X seem to work, but this one is failing. I'm assuming it's more of an issue with the rom file, versus the mappers. Not sure if anyone can "easily" determine the failure point or not.
http://tecmobowl.org/files/file/505-tec ... bowl-2017/
User avatar
thefox
Posts: 3134
Joined: Mon Jan 03, 2005 10:36 am
Location: 🇫🇮
Contact:

Re: PowerMappers (a new set of PowerPak mappers)

Post by thefox »

cubeboy wrote:I tried to run Tecmo Super Bowl 2017 on my PowerPak with the PowerMappers, but it's failing for me. I get to the point where the progress bar gets to 100%, it goes to a black screen like normal, but it stays stuck on a black screen. Previous iterations of Tecmo Super Bowl 201X seem to work, but this one is failing. I'm assuming it's more of an issue with the rom file, versus the mappers. Not sure if anyone can "easily" determine the failure point or not.
http://tecmobowl.org/files/file/505-tec ... bowl-2017/
That game uses MMC5, it should not even show the PowerMappers loading progress bar (PowerMappers doesn't include MMC5 support).
Download STREEMERZ for NES from fauxgame.com! — Some other stuff I've done: fo.aspekt.fi
hackfresh
Posts: 101
Joined: Sun May 03, 2015 8:19 pm

Re: PowerMappers (a new set of PowerPak mappers)

Post by hackfresh »

Loopy's MMC5 mappers work for the 2017 versoin.
Great Hierophant
Posts: 780
Joined: Tue Nov 23, 2004 9:35 pm

Re: PowerMappers (a new set of PowerPak mappers)

Post by Great Hierophant »

One more for you, Jurassic Park's Ocean logo on the title screen, it should not show lines outside the natural edge of the logo's box.
User avatar
cubeboy
Posts: 33
Joined: Fri Nov 08, 2013 7:56 pm

Re: PowerMappers (a new set of PowerPak mappers)

Post by cubeboy »

hackfresh wrote:Loopy's MMC5 mappers work for the 2017 versoin.
Thanks for the info.

Is there a way to have Loopy's MMC5 mapper be installed in parallel with the PowerMappers, or would I need to swap out the mappers anytime I want to run an MMC5 game?
Great Hierophant
Posts: 780
Joined: Tue Nov 23, 2004 9:35 pm

Re: PowerMappers (a new set of PowerPak mappers)

Post by Great Hierophant »

You copy the mappers like this, overwriting in this order :

Latest official beta -> Loopys mappers -> PowerMappers

See here for more detail : http://nerdlypleasures.blogspot.com/201 ... apper.html
User avatar
thefox
Posts: 3134
Joined: Mon Jan 03, 2005 10:36 am
Location: 🇫🇮
Contact:

Re: PowerMappers (a new set of PowerPak mappers)

Post by thefox »

Individual mappers are self-contained, so they can be mixed and matched at will. Each MAPXX.MAP file implements a particular mapper (XX = iNES mapper number in hexadecimal). MMC5 would be in a file named MAP05.MAP (this file is not included in PowerMappers).
Download STREEMERZ for NES from fauxgame.com! — Some other stuff I've done: fo.aspekt.fi
User avatar
rainwarrior
Posts: 8732
Joined: Sun Jan 22, 2012 12:03 pm
Location: Canada
Contact:

Re: PowerMappers (a new set of PowerPak mappers)

Post by rainwarrior »

thefox wrote:
Great Hierophant wrote:Low-G-Man : Music for Level 1 Boss is not correct, but it does not crash
Probably coincidental, since the game has a bug, relying on values read from WRAM (which the real cart doesn't have). So it'd depend on whatever values happened to be in the WRAM when you started the game. Should be possible to work around it simply by loading an 8KB save file full of $FF. I guess the mapper loader could check if the game has battery backing, and if not, initialize WRAM to $FF always...
A while ago I made an IPS patch for Low-G-Man that does that in code. Here:
https://forums.nesdev.com/viewtopic.php?f=2&t=13105


Two questions:

1. I was wondering if there could be a way to disable the SELECT + START menu, so that I could use those buttons "naturally" in games and especially in test programs. I would have suggested just disabling the menu automatically if no state file was selected, but the exit to menu feature is probably worth having by itself usually. An option to disable it would be appreciated, though. Not sure where, maybe in the file/game-genie select page?

2. Do you still plan to make source code available at some point?

I want to make an implementation of the (relatively simple) mapper 31, and it would be nice to have solid ground to start on. I made an implementation for the Everdrive while making the Famicompo Pico ROM, because at 512k it was small enough to run on the Everdrive. (The first mapper 31 ROM was 1MB.) Because it requires 4k banking, on the PowerPak it would be limited to 256k, though, so I never bothered. Since I recently made a tool for building mapper 31 music ROMs, I finally have smaller ROMs worth trying on the PowerPak.

Anyhow, it's a relatively simple mapper, but it would need a custom loader to duplicate banks for simulated 4k mapping, like the NSF player. Since your powermappers seem to have such a custom loader, source code would be really helpful to understand how you did that.
User avatar
thefox
Posts: 3134
Joined: Mon Jan 03, 2005 10:36 am
Location: 🇫🇮
Contact:

Re: PowerMappers (a new set of PowerPak mappers)

Post by thefox »

rainwarrior wrote:A while ago I made an IPS patch for Low-G-Man that does that in code. Here:
https://forums.nesdev.com/viewtopic.php?f=2&t=13105
I guess I should implement that "fill WRAM with $FF if not battery-backed". It'd also provide a mostly consistent "power-on" state for games, since I'm already initializing most of the rest of the memory.
1. I was wondering if there could be a way to disable the SELECT + START menu, so that I could use those buttons "naturally" in games and especially in test programs. I would have suggested just disabling the menu automatically if no state file was selected, but the exit to menu feature is probably worth having by itself usually. An option to disable it would be appreciated, though. Not sure where, maybe in the file/game-genie select page?
Yeah, the main reason it has not been done yet is that I haven't been able to think of where to put the option. It could be in the in-game menu as well, you just would not be able to go back to the menu after disabling it (and it would have to only be active for the current session).
2. Do you still plan to make source code available at some point?
Probably not in the near future (too much work to clean it up for release). But could happen eventually. I have some other projects I should throw on GitHub as well...
I want to make an implementation of the (relatively simple) mapper 31, and it would be nice to have solid ground to start on. I made an implementation for the Everdrive while making the Famicompo Pico ROM, because at 512k it was small enough to run on the Everdrive. (The first mapper 31 ROM was 1MB.) Because it requires 4k banking, on the PowerPak it would be limited to 256k, though, so I never bothered. Since I recently made a tool for building mapper 31 music ROMs, I finally have smaller ROMs worth trying on the PowerPak.

Anyhow, it's a relatively simple mapper, but it would need a custom loader to duplicate banks for simulated 4k mapping, like the NSF player. Since your powermappers seem to have such a custom loader, source code would be really helpful to understand how you did that.
I would suggest starting with loopy's Verilog mappers as a base. The PowerPak firmware/menu source code is available somewhere (can't remember where), I think the default mapper loader is there as well. If it's not, you can disassemble it, it's quite short; it's the first 1 KB of a .MAP file in normal mappers (not in PowerMappers because I ran out of space and had to chain multiple loaders...). You can grab the procedure/variable addresses used in firmware from the source code (I believe NESASM generates a file which has the labels at least). You should then be able to copy the routine that loads the PRG data from the firmware into your custom loader and modify accordingly.
Download STREEMERZ for NES from fauxgame.com! — Some other stuff I've done: fo.aspekt.fi
User avatar
Myask
Posts: 965
Joined: Sat Jul 12, 2014 3:04 pm

Re: PowerMappers (a new set of PowerPak mappers)

Post by Myask »

thefox wrote:
rainwarrior wrote: Anyhow, it's a relatively simple mapper, but it would need a custom loader to duplicate banks for simulated 4k mapping, like the NSF player. Since your powermappers seem to have such a custom loader, source code would be really helpful to understand how you did that.
I would suggest starting with loopy's Verilog mappers as a base. The PowerPak firmware/menu source code is available somewhere (can't remember where), I think the default mapper loader is there as well. If it's not, you can disassemble it, it's quite short; it's the first 1 KB of a .MAP file in normal mappers (not in PowerMappers because I ran out of space and had to chain multiple loaders...). You can grab the procedure/variable addresses used in firmware from the source code (I believe NESASM generates a file which has the labels at least). You should then be able to copy the routine that loads the PRG data from the firmware into your custom loader and modify accordingly.
We have links to the source from our wiki page. However, the loader mini-module (loaded into $400-$7ff) assembly seems to be missing; the docs basically treat it as a magic 1024 bytes that you have to prepend to a mapper's verilog output. (The small modules, one-letter-named, get similarly loaded into $400-7ff.) I've already disassembled two versions of the mapper loader by hand, though. Lemme get it into a theoretically-assemblable format…
Older:

Code: Select all

;bunnyboy's loader (identical between MAP00 and MAP03 as test points)
.org $400 ;module entry point
	JMP	$0407
;unwritten byte, FF
.org $404 ;module's deal-with-controller routine
	JMP	return ;046c
;and now we're at the "entry" 0407
	JSR	RenderingOff	;f703
	JSR	ClearNameTable	;e813
	JSR	LoadLogo	;e89e, this displays powerpak logo, omitted in Loopy's MAP03 loader
	JSR	ClearLine	;e844
	LDA	#$0C	;LOADGAME string ID.
	STA	$00A5	;temp	0c@A5 ..and yes, all of these were 8d=STA	$aaaa.
	JSR	StrCopy	;e927
	LDA	#$1B	;line to print on
	STA	$003A	;printY	1b@3A
	JSR	PrintLine	;e85e
	LDA	#$F8
	STA	$0030	;cursorY	f8@30
	STA	$002F	;cursorX	f8@2f
	LDA	#$00
	STA	$0031	;scrollY	0@31
	STA	$0032	;scrollYCounter	0@32
	STA	$0033	;scrollYUp	0@33
	STA	$0034	;scrollYDown	0@34
	STA	$0035	;cursorYCounter	0@35
	STA	$0036	;cursorYUp	0@36
	STA	$0037	;cursorYDown	0@37
	JSR	RenderingOn	;f6e1
;the other difference to Loopy's MAP03 loader is an inserted JSR to LoadWRAM here
;this is odd, as loader.asm's LoadWRAM consists of a lone RTS instruction
	LDA	#$00
	STA	$002E	;destBank	00@2e
	STA	$4200	;PRGSIZEWR(PRGMASK)	00@4200, not sure why this is written now.
	JSR	LoadPrgRam	;f408
	JSR	RenderingOff	;f703
	JSR	LoadCHRRAM	;f51f
	JSR	LoadFPGA	;f602
	JSR	LoadMirroring	;f6da
	JSR	LoadPrgChrSize	;f6b7 ...as this uses the iNES header to write to 
		;PRGSIZEWR
	JSR	LoadgameGenie	;f665
	LDA	#$00
	STA	$4207	;BOOTENWR
	JMP (RESET)	;fffc
return: RTS ;this is at 046C. Why they don't just RTS at $0404 I don't know.
edit: variable addresses, since I also already did that work

Code: Select all

Name	[command]	width	start address
sourceLo	.rs	1	0
sourceHi	.rs	1	1
destLo	.rs	1	2
destHi	.rs	1	3
sourceStrLo	.rs	1	4
sourceStrHi	.rs	1	5
sourceEntryLo	.rs	1	6
sourceEntryHi	.rs	1	7
destEntryLo	.rs	1	8
destEntryHi	.rs	1	9
printAddrLo	.rs	1	A
printAddrHi	.rs	1	B
tempEntry	.rs	34	C
destBank	.rs	1	2E
cursorX	.rs	1	2F
cursorY	.rs	1	30
scrollY	.rs	1	31
scrollYCounter	.rs	1	32
scrollYUp	.rs	1	33
scrollYDown	.rs	1	34
cursorYCounter	.rs	1	35
cursorYUp	.rs	1	36
cursorYDown	.rs	1	37
speedCounter	.rs	1	38
speedScroll	.rs	1	39
printY	.rs	1	3A
spriteNum	.rs	1	3B
partitionLBABegin	.rs	4	3C
fatBeginLBA	.rs	4	40
clusterBeginLBA	.rs	4	44
sectorsPerCluster	.rs	1	48
rootDirCluster	.rs	4	49
baseDirCluster	.rs	4	4D
sectorsPerFat	.rs	4	51
reservedSectors	.rs	2	55
sectorCounter	.rs	2	57
sourceCluster	.rs	4	59
sourceSector	.rs	4	5D
fat32Enabled	.rs	1	61
fat16RootSectors	.rs	2	62
prevFrameCounter	.rs	1	64
frameCounter	.rs	1	65
joystick	.rs	1	66
findEntry	.rs	11	67
exMatch1	.rs	4	72
exMatch2	.rs	4	76
exMatch3	.rs	4	7A
selectedEntry	.rs	2	7E
filesInDir	.rs	2	80
lfnFound	.rs	1	82
printString	.rs	34	83
temp	.rs	4	A5
source256	.rs	1	A9
sourceBytes	.rs	1	AA
gameName	.rs	32	AB
saveName	.rs	32	CB
mapperData	.rs	16	EB ;this is the iNES header
gameCluster	.rs	4	FB
wramCluster	.rs	4	FF
mapperCluster	.rs	4	103
prgSize	.rs	1	107
chrSize	.rs	1	108
mapperNumber	.rs	1	109
mirroring	.rs	1	10A
mapperModule	.rs	2	10B
powerOn	.rs	1	10D
useBattery	.rs	1	10E
wramBanks	.rs	1	10F
gameGenie	.rs	40	110
gameGenieOffset	.rs	1	138
gameGenieCodes	.rs	40	139
arcadeDip	.rs	1	161
moduleReady	.rs	1	162
bankCounter	.rs	1	163
romVers	.rs	3	164
oldButtons	.rs	1	167
heldButtons	.rs	1	168
scrollHoldTimer	.rs	1	169
searchEntry	.rs	34	16A
edit further:
I see a bug in the PowerPak firmware in LoadPrgChrSize. It assumes power-of-2 sizes for bank counts, as it subtracts one and uses that as its address line masks.
Last edited by Myask on Wed Dec 07, 2016 4:33 pm, edited 1 time in total.
Post Reply