EmuCR Feeds
Email Us

EmuCR: higanhigan v106r159 is released. higan (formerly bsnes) is a Nintendo multi-system emulator that began development on 2004-10-14. It currently supports the following systems:
- Famicom
- Super Famicom
- Game Boy
- Game Boy Color
- Game Boy Advance

higan also supports the following subsystems:
- Super Game Boy
- BS-X Satellaview
- Sufami Turbo

higan Changelog:
* Update to v106r159 release.

byuu says:

improved Mega Drive 128K mode (still far from complete, it's not well
documented), renamed Scheduler::synchronize() to Scheduler::resume(), and now
Scheduler::synchronize() is a version of synchronize(Thread&) that synchronizes
to all threads instead of just the specified one. It's much slower, but
unfortunately needed when two threads both sync to the same third thread plus
each other (long story, see Twitter.)

[byuu is referring to a thread starting at
https://twitter.com/byuu_san/status/1138436552634249217 reproduced below for
posterity:

Well heck, higan's about to take a speed hit it can't afford. Here's my
current scheduler design. It has a critical flaw, can you spot it?

CPU::step(uint clocks) {
Thread::step(clocks);
synchronize(apu);
synchronize(ym2612);
}

APU::step(uint clocks) {
Thread::step(clocks);
synchronize(cpu);
synchronize(ym2612);
}

YM2612::step(uint clocks) {
Thread::step(clocks);
synchronize(cpu);
synchronize(apu);
}

Thread::synchronize(Thread& thread) {
if(clock >= thread.clock) resume(thread);
}

Say the APU consumes some time, but it's not yet ahead of the CPU, but it
*is* ahead of the YM2612, so it switches to the YM2612 thread. The YM2612
isn't cycle accurate yet and consumes 144 clocks per sample. It's now way
ahead of the CPU, and so it resumes the CPU thread.

The problem is that the CPU may still be ahead of the APU, and so we just
broke synchronization between the CPU and APU. The solution will be painful:
we have to evaluate all available threads, find the one furthest behind in
time, and switch to that.

I'm probably going to need something like a binary min-heap array to allow
O(1) to find min(objects...), but for the immediate present, it'll have to
be a for-loop.

- Ed.]


Download: higan v106r159 x64
Source: Here



Random Related Topic Refresh Related Topic

Random Related Topic Loading...

0 Comments

Post a Comment

Can't post a comment? Try This!