Broken RP2C02G - not outputting data during writes!

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

Moderator: Moderators

Post Reply
User avatar
krzysiobal
Posts: 1036
Joined: Sun Jun 12, 2011 12:06 pm
Location: Poland
Contact:

Broken RP2C02G - not outputting data during writes!

Post by krzysiobal »

One man gave me NTSC NES to fix. The problem was that all games were running correctly, but instead of background - there was just random checkboard of tiles (sprites are displayed correctly). At first glance I thought that VRAM is broken, but no.. it is the PPU itself!

Image

I replaced it with UA6528 and all works fine, but I kept that broken PPU for myself. Because I have not many NTSC PPUs in my collection -> I thought it would be good exercise to take closer look at the problem and maybe fix it.

So for all CHR-ROM games, it displays just random set of sprites:
Image

But if it's CHR-RAM game, there is complete mess:
Image

So now I was sure that PPU has problems with writing to its external memory. I thought that maybe !WR signal is broken, but no - it is asserted correctly. Then I wrote simple testing program that forces PPU to write 0 to consecutive addresses (attachment):

Code: Select all

	set_ppu_addr_to $0000
loop:
	lda #0
	sta PPUDATA
	jmp loop
and I viewed signals on logic analyzer what is going on (and compared them against another working PPU).

Good PPU (second photo is magnified view at the moment data is driven)
Image Image

Bad PPU:
Image

Now I was sure - PPU is not driving its data bus with data to be written, so instead of data.. low 8 bits of address are written!

Because the data that PPU writes to its memory always comes from CPU (and it is always from $2007), I thought of making small addon board that would latch all writes to $2007 and when !WE is asserted - output it, instead of `invalid` PPU data - good idea?
What about games that make use of raster effects?

Image
Attachments
hello_instant_load.asm
(1.43 KiB) Downloaded 159 times
User avatar
krzysiobal
Posts: 1036
Joined: Sun Jun 12, 2011 12:06 pm
Location: Poland
Contact:

Re: Broken RP2C02G - not outputting data during writes!

Post by krzysiobal »

Haha, it works! I've projected the PCB as I described:
Image

But then I changed my mind and replaced buffer with just 8x1k resistors, because I wanted everything to fit under broken PPU:
Image Image

Image Image Image Image Image Image Image

I even left place for soldering deglitching cap and /WE delay, but just ommited them -> everything works perfect! Welcome to second life, mr PPU =)
lidnariq
Posts: 11430
Joined: Sun Apr 13, 2008 11:12 am

Re: Broken RP2C02G - not outputting data during writes!

Post by lidnariq »

Nicely done!
thenendo
Posts: 28
Joined: Mon Oct 06, 2014 5:09 pm
Location: New Joisey (NTSC)

Re: Broken RP2C02G - not outputting data during writes!

Post by thenendo »

I’m in awe!

Have you tried any games with raster effects?

I wonder what kind of internal fault would cause this behavior by the PPU...
User avatar
krzysiobal
Posts: 1036
Joined: Sun Jun 12, 2011 12:06 pm
Location: Poland
Contact:

Re: Broken RP2C02G - not outputting data during writes!

Post by krzysiobal »

I tested it against:

RasterChromaLuma.NES
RasterTest1.NES
RasterTest2.NES
RasterTest3.NES
RasterTest3a.NES
RasterTest3b.NES
RasterTest3c.NES
RasterTest3d.NES
RasterTest3e.NES

and results are the same like on UA6528 (NTSC-clone PPU).

Sometimes when I load any of those demos, background is blinking black-white (as visible in attached video) but after restarting console, it is displayed correctly so maybe those demos are sensible for CPU/PPU cycle allignment.

Comparision video - First half - fixed RP2C02, second half: UA6528
https://www.youtube.com/watch?v=XSraj76AYvQ
Post Reply