Search found 349 matches

by ulfalizer
Tue Oct 01, 2013 8:40 pm
Forum: NESemdev
Topic: PPU accuracy and Battletoads
Replies: 10
Views: 3034

Re: PPU accuracy and Battletoads

Second level in Battletoads is a bitch. If it's any help, a hang means your CPU is too fast relative your PPU and enables rendering too early (before the vertical bump on that scanline, meaning the vertical bump occurs). Battletoads is only really sensitive in one direction, and having the CPU be re...
by ulfalizer
Thu Sep 26, 2013 7:34 pm
Forum: NESemdev
Topic: Nesalizer WIP on github
Replies: 11
Views: 5587

Re: Nesalizer WIP on github

It uses blargg's blip_buf by the way, and syncs audio to video by adjusting the pitch slightly to maintain a preset audio buffer fill level. The parameters for the latter are hardcoded at the moment, and the approach probably isn't optimal. Should try James' approach.
by ulfalizer
Thu Sep 26, 2013 6:44 pm
Forum: NESemdev
Topic: Nesalizer WIP on github
Replies: 11
Views: 5587

Nesalizer WIP on github

In case anyone's interested, I've put a WIP of the emulator I'm working on on GitHub: https://github.com/ulfalizer/nesalizer.

Currently Linux-only and lacks a GUI and save states, so not really worth using yet, but I might get some testing out of it at least if I'm lucky. :)
by ulfalizer
Wed Sep 11, 2013 6:02 am
Forum: NESemdev
Topic: DMA operation in APU
Replies: 60
Views: 44716

Re: DMA operation in APU

In case it's helpful to future people pulling their hair out over this one: To pass, it's important that the first $4014 write lands on an even cycle (and so only adds a single dummy cycle). Since the test synchronizes to the DMC, getting this right depends on the DMC clocks happening on even cycles...
by ulfalizer
Tue Sep 10, 2013 11:18 pm
Forum: NESemdev
Topic: Techniques for skipping unofficial instructions
Replies: 11
Views: 3176

Re: Techniques for skipping unofficial instructions

Yeah, agreed-upon names would've been nice. I have a mix of them from different sources in my implementation. :| TIck-by-tick execution is determined by the addressing mode for the unofficial instructions as well, so nothing complicated there. Some instructions have bus conflicts though: http://foru...
by ulfalizer
Tue Sep 10, 2013 12:16 am
Forum: NES Hardware and Flash Equipment
Topic: What is M2?
Replies: 30
Views: 6980

Re: RAMBO-1 IRQ timing

If you're counting in half-cycles, φ1 would be even half-cycles and φ2 odd half-cycles. That seems like a weird way to think about it though. φ1 is just the first part of the CPU cycle and φ2 the second.
by ulfalizer
Tue Sep 10, 2013 12:14 am
Forum: NES Hardware and Flash Equipment
Topic: What is M2?
Replies: 30
Views: 6980

Re: RAMBO-1 IRQ timing

http://wiki.nesdev.com/w/index.php/CPU_pin_out_and_signal_description was updated recently and covers it too. If you're referring to my recent 2 updates: those were in response to the bottom half of this blog post (FYI: Japanese, and Google Translate is not sufficient here). Basically the post cons...
by ulfalizer
Mon Sep 09, 2013 7:34 am
Forum: NESemdev
Topic: Techniques for skipping unofficial instructions
Replies: 11
Views: 3176

Re: Techniques for skipping unofficial instructions

Why are the instruction lengths for JSR and JMP Absolute set to 4 in that table by the way?
by ulfalizer
Mon Sep 09, 2013 7:19 am
Forum: NESemdev
Topic: Techniques for skipping unofficial instructions
Replies: 11
Views: 3176

Re: Unofficial opcodes are hard, let's go shopping

If an emulator encounters an unofficial instruction it's likely that it's either executing bad code or that the instruction is crucial for the code to work though, so not sure how helpful it would be to just skip over it. I was under the impression that the use case was procrastination . Unofficial...
by ulfalizer
Mon Sep 09, 2013 5:09 am
Forum: NESemdev
Topic: Techniques for skipping unofficial instructions
Replies: 11
Views: 3176

Re: Techniques for skipping unofficial instructions

I've seen GCC generate that lookup-table-in-integer approach for some switches. It's pretty neat. If an emulator encounters an unofficial instruction it's likely that it's either executing bad code or that the instruction is crucial for the code to work though, so not sure how helpful it would be to...
by ulfalizer
Sun Sep 08, 2013 5:27 am
Forum: NES Hardware and Flash Equipment
Topic: What is M2?
Replies: 30
Views: 6980

Re: RAMBO-1 IRQ timing

Each cycle has a φ1 and a φ2, of equal length. The φ1 half-cycle occurs while the input clock is low, the φ2 half-cycle while it is high. They do not span a full cycle, if that's where you got even/odd from. http://wiki.nesdev.com/w/index.php/CPU_pin_out_and_signal_description was updated recently a...
by ulfalizer
Sat Sep 07, 2013 12:36 am
Forum: NESemdev
Topic: DMA operation in APU
Replies: 60
Views: 44716

Re: DMA operation in APU

Started digging into the circuitry a bit, and it looks like the 2A03 handles rdy for OAM DMA and PCM reads in a pretty clever way. Rather than just pulling rdy low for a fixed safe "minimum" time, it first pulls it low and then waits for a CPU read. Once it sees a read, it knows rdy must have kicked...
by ulfalizer
Wed Sep 04, 2013 4:59 pm
Forum: NESemdev
Topic: DMA operation in APU
Replies: 60
Views: 44716

Re: DMA operation in APU

A test for that would be nice if you ever update the apu_test tests. I pass all of them without implementing it.
by ulfalizer
Wed Sep 04, 2013 4:24 pm
Forum: NESemdev
Topic: DMA operation in APU
Replies: 60
Views: 44716

Re: DMA operation in APU

Ahh, that explains it. Hadn't realized silence on the DPCM channel worked like that. :mrgreen: So the bits remaining count is updated each DMC clock regardless of whether a sample is playing or not, and the DPCM can only transition from silent to playing at the boundary after a "silent sample byte"?...
by ulfalizer
Wed Sep 04, 2013 3:48 pm
Forum: NESemdev
Topic: DMA operation in APU
Replies: 60
Views: 44716

Re: DMA operation in APU

But wouldn't the coarse loop in end_dmc_timer always iterate between (428*7)/16 = 187.25 and (428*8)/16 = 214 times, regardless of timing? end_dmc_timer starts a new sample, and that should set the number of remaining bits to 8, meaning it'll have to go through 8 DMC clocks before loading the final ...