PPU wait for ready in Donkey Kong

Discuss emulation of the Nintendo Entertainment System and Famicom.

Moderator: Moderators

dink
Posts: 39
Joined: Sun Jan 12, 2020 8:42 pm

Re: PPU wait for ready in Donkey Kong

Post by dink » Wed Mar 04, 2020 7:36 am

I have found a contradictory game with regards to ppu warmup emulation (this might be relevant to you as well after you get mappers in): Magic John on Famicom.
The game immediately starts putting stuff in PPU registers @ boot w/o waiting for the ppu to warm up(wait for vbl etc).
If they are ignored -- as documented on the wiki by ppu ignoring certain registers @ power on until a certain line... things go weirdly wrong..
Ideas, guys? :)

lidnariq
Posts: 9379
Joined: Sun Apr 13, 2008 11:12 am
Location: Seattle

Re: PPU wait for ready in Donkey Kong

Post by lidnariq » Wed Mar 04, 2020 11:37 am

The front-loading NES-001 ties CPU and PPU reset together, and releases them at the same time. The behaviors prohibiting writes are 100% accurate for this situation.

However, the Famicom doesn't. There, PPU /reset is just tied to 5V, and a 0.47µF capacitor attached to CPU /reset means that CPU will be released from reset later ... I don't know how much, but it looks like it's very roughly 1/60th of a second. So for a Famicom-only release, a game probably could get away with not waiting for the PPU.

User avatar
rainwarrior
Posts: 7812
Joined: Sun Jan 22, 2012 12:03 pm
Location: Canada
Contact:

Re: PPU wait for ready in Donkey Kong

Post by rainwarrior » Wed Mar 04, 2020 1:11 pm

Someone should test Magic John on an NES to verify that it's actually broken, then? (Does it really have different startup code than Totally Rad?)

Edit: answering my second question, yes there's an added wait in Totally Rad, and it's kinda cute cause it waits 6 frames. That might speak to some developer frustration. ;)
totally_rad_left_vs_magic_john_right_reset.png

User avatar
Dwedit
Posts: 4306
Joined: Fri Nov 19, 2004 7:35 pm
Contact:

Re: PPU wait for ready in Donkey Kong

Post by Dwedit » Wed Mar 04, 2020 2:33 pm

When run on FCEUX, Magic John waits 83578 CPU cycles before doing anything real with the PPU (address and memory writes). Before that, it is writing zeroes to PPUADDR, and writing values to PPUMASK and PPUCTRL.

It attempts to enable NMI at cycle 9217. If I change what is written to PPUCTRL so that NMI remains disabled, the game does not proceed.

Will Real Famicoms boot the game, or does it always require a reset?
Here come the fortune cookies! Here come the fortune cookies! They're wearing paper hats!

User avatar
Dwedit
Posts: 4306
Joined: Fri Nov 19, 2004 7:35 pm
Contact:

Re: PPU wait for ready in Donkey Kong

Post by Dwedit » Thu Mar 05, 2020 2:40 pm

lidnariq wrote:
Wed Mar 04, 2020 11:37 am
The front-loading NES-001 ties CPU and PPU reset together, and releases them at the same time. The behaviors prohibiting writes are 100% accurate for this situation.

However, the Famicom doesn't. There, PPU /reset is just tied to 5V, and a 0.47µF capacitor attached to CPU /reset means that CPU will be released from reset later ... I don't know how much, but it looks like it's very roughly 1/60th of a second. So for a Famicom-only release, a game probably could get away with not waiting for the PPU.
So the capacitor thing (delaying the CPU Reset from the PPU reset) provides another way to distinguish a Famicom from a NES. Does the toploader behave that way too?
Here come the fortune cookies! Here come the fortune cookies! They're wearing paper hats!

lidnariq
Posts: 9379
Joined: Sun Apr 13, 2008 11:12 am
Location: Seattle

Re: PPU wait for ready in Donkey Kong

Post by lidnariq » Thu Mar 05, 2020 2:49 pm

Probably? I think I remember people saying that the PPU always draws a picture on the top-loader, so that'd be equivalent.

We don't know exactly how long it'll take for the capacitor to charge. Evidently it's at least (29667-9217)÷1.789MHz = 3.6ms 11.4ms, but it could be longer.

Because the CPU's /RESET input has a weak n-MOSFET pull-up on the die instead of a resistor, the time isn't just a simple RC either.

And I know I've seen different famiclones using different capacitors there also.
Last edited by lidnariq on Thu Mar 05, 2020 10:59 pm, edited 1 time in total.

Fiskbit
Posts: 117
Joined: Sat Nov 18, 2017 9:15 pm

Re: PPU wait for ready in Donkey Kong

Post by Fiskbit » Thu Mar 05, 2020 10:52 pm

Unless I'm misunderstanding, that works out to about 11.4 ms, not 3.6 ms.

User avatar
rainwarrior
Posts: 7812
Joined: Sun Jan 22, 2012 12:03 pm
Location: Canada
Contact:

Re: PPU wait for ready in Donkey Kong

Post by rainwarrior » Fri Mar 06, 2020 10:24 pm

Just to clarify, the Famicom PPU doesn't do any kind of reset at all when the reset button is pushed, correct?

This stuff about /reset being delayed for the CPU relative to the PPU is talking about power-on behaviour, not pushing the reset button, right?

lidnariq
Posts: 9379
Joined: Sun Apr 13, 2008 11:12 am
Location: Seattle

Re: PPU wait for ready in Donkey Kong

Post by lidnariq » Fri Mar 06, 2020 10:36 pm

rainwarrior wrote:
Fri Mar 06, 2020 10:24 pm
Just to clarify, the Famicom PPU doesn't do any kind of reset at all when the reset button is pushed, correct?
Correct. PPU /RESET there is always tied to +5V.
This stuff about /reset being delayed for the CPU relative to the PPU is talking about power-on behaviour, not pushing the reset button, right?
Yes. Cold boots only. Might be funny behavior with only having it off for a few seconds, too.

User avatar
BMF54123
Posts: 409
Joined: Mon Aug 28, 2006 2:52 am
Contact:

Re: PPU wait for ready in Donkey Kong

Post by BMF54123 » Wed Mar 18, 2020 1:28 am

So, at Fiskbit's request, I tested both my Magic John and Lord of King carts (same developers) on my modified front-loader. Both of them initially boot fine, BUT if you either press Reset or cycle the power too quickly, they freeze at a black screen. Holding Reset does not work; the console must be completely powered off to get them to boot again. The amount of time required between power cycles also varies slightly between the two:

Magic John: 5-6 seconds
Lord of King: 4-5 seconds

I also tested the games on my AV Famicom and they booted normally every time, regardless of how many times I pressed Reset or power-cycled the console. I also have a top-loading NES, but don't currently have a way to hook it up (I need to dig out an RF box).

[UPDATE]
I really need to organize my closet :(

I tested Magic John on the top-loading NES, and it exhibits the same behavior as the modded front-loader w/r/t power-cycling (need to wait 5-6 seconds between attempts); however, pressing Reset does allow the game to boot, presumably because the PPU has warmed up by this point. So the question is, why does the top-loading NES behave differently from the AV Famicom? The only real difference is that my AV Famicom has rev. H CPU/PPU, whereas the two NESes both have rev. G. But if the game works properly on older Famicoms, wouldn't that rule out CPU/PPU revisional differences? I'm confused.

User avatar
Dwedit
Posts: 4306
Joined: Fri Nov 19, 2004 7:35 pm
Contact:

Re: PPU wait for ready in Donkey Kong

Post by Dwedit » Wed Mar 18, 2020 11:20 am

First, big thanks for trying this out!

Second, I'll assume that booting with RESET held down will always fail?
Here come the fortune cookies! Here come the fortune cookies! They're wearing paper hats!

User avatar
BMF54123
Posts: 409
Joined: Mon Aug 28, 2006 2:52 am
Contact:

Re: PPU wait for ready in Donkey Kong

Post by BMF54123 » Wed Mar 18, 2020 2:57 pm

Dwedit wrote:
Wed Mar 18, 2020 11:20 am
First, big thanks for trying this out!

Second, I'll assume that booting with RESET held down will always fail?
I tried it a few times, and yeah, it failed each time.

So, another update: I borrowed a roommate's top-loader, which has rev. H CPU/PPU. Magic John booted every time, though occasionally the screen would be half-filled with a garbage tile for several frames. However, today my rev. G top-loader is also booting the game normally every time, with the same occasional garbage tiles. There was maybe one time it booted to a purple screen, but pressing Reset fixed it. I then tried my modded front-loader, and its behavior was the opposite: I had to wait 20-30 seconds between power cycles before the game would boot, as opposed to 5-6 seconds last night. The only difference today is that the ambient temperature in my room is a couple degrees warmer than it was last night. This probably explains the behavior of the front-loader, since the PPU will take a little longer to cool down in a warmer room, but why is it having the opposite effect on the top-loader?

Post Reply