2012-03-23 10:43:39 +00:00
|
|
|
struct APU : Thread, MMIO {
|
Update to v098r06 release.
byuu says:
Changelog:
- emulation cores now refresh video from host thread instead of
cothreads (fix AMD crash)
- SFC: fixed another bug with leap year months in SharpRTC emulation
- SFC: cleaned up camelCase on function names for
armdsp,epsonrtc,hitachidsp,mcc,nss,sharprtc classes
- GB: added MBC1M emulation (requires manually setting mapper=MBC1M in
manifest.bml for now, sorry)
- audio: implemented Emulator::Audio mixer and effects processor
- audio: implemented Emulator::Stream interface
- it is now possible to have more than two audio streams: eg SNES
+ SGB + MSU1 + Voicer-Kun (eventually)
- audio: added reverb delay + reverb level settings; exposed balance
configuration in UI
- video: reworked palette generation to re-enable saturation, gamma,
luminance adjustments
- higan/emulator.cpp is gone since there was nothing left in it
I know you guys are going to say the color adjust/balance/reverb stuff
is pointless. And indeed it mostly is. But I like the idea of allowing
some fun special effects and configurability that isn't system-wide.
Note: there seems to be some kind of added audio lag in the SGB
emulation now, and I don't really understand why. The code should be
effectively identical to what I had before. The only main thing is that
I'm sampling things to 48000hz instead of 32040hz before mixing. There's
no point where I'm intentionally introducing added latency though. I'm
kind of stumped, so if anyone wouldn't mind taking a look at it, it'd be
much appreciated :/
I don't have an MSU1 test ROM, but the latency issue may affect MSU1 as
well, and that would be very bad.
2016-04-22 13:35:51 +00:00
|
|
|
shared_pointer<Emulator::Stream> stream;
|
|
|
|
|
2016-02-09 11:51:12 +00:00
|
|
|
static auto Enter() -> void;
|
2015-11-21 07:36:48 +00:00
|
|
|
auto main() -> void;
|
|
|
|
auto power() -> void;
|
|
|
|
|
2016-06-28 10:43:47 +00:00
|
|
|
auto readIO(uint16 addr) -> uint8;
|
|
|
|
auto writeIO(uint16 addr, uint8 data) -> void;
|
2015-11-21 07:36:48 +00:00
|
|
|
|
|
|
|
auto serialize(serializer&) -> void;
|
|
|
|
|
Update to v099r13 release.
byuu says:
Changelog:
- GB core code cleanup completed
- GBA core code cleanup completed
- some more cleanup on missed processor/arm functions/variables
- fixed FC loading icarus bug
- "Load ROM File" icarus functionality restored
- minor code unification efforts all around (not perfect yet)
- MMIO->IO
- mmio.cpp->io.cpp
- read,write->readIO,writeIO
It's been a very long work in progress ... starting all the way back with
v094r09, but the major part of the higan code cleanup is now completed! Of
course, it's very important to note that this is only for the basic style:
- under_score functions and variables are now camelCase
- return-type function-name() are now auto function-name() -> return-type
- Natural<T>/Integer<T> replace (u)intT_n types where possible
- signed/unsigned are now int/uint
- most of the x==true,x==false tests changed to x,!x
A lot of spot improvements to consistency, simplicity and quality have
gone in along the way, of course. But we'll probably never fully finishing
beautifying every last line of code in the entire codebase. Still,
this is a really great start. Going forward, WIP diffs should start
being smaller and of higher quality once again.
I know the joke is, "until my coding style changes again", but ... this
was way too stressful, way too time consuming, and way too risky. I'm
too old and tired now for extreme upheavel like this again. The only
major change I'm slowly mulling over would be renaming the using
Natural<T>/Integer<T> = (u)intT; shorthand to something that isn't as
easily confused with the (u)int_t types ... but we'll see. I'll definitely
continue to change small things all the time, but for the larger picture,
I need to just accept the style I have and live with it.
2016-06-29 11:10:28 +00:00
|
|
|
//square1.cpp
|
|
|
|
struct Square1 {
|
|
|
|
auto dacEnable() const -> bool;
|
|
|
|
|
|
|
|
auto run() -> void;
|
|
|
|
auto sweep(bool update) -> void;
|
|
|
|
auto clockLength() -> void;
|
|
|
|
auto clockSweep() -> void;
|
|
|
|
auto clockEnvelope() -> void;
|
|
|
|
auto read(uint16 addr) -> uint8;
|
|
|
|
auto write(uint16 addr, uint8 data) -> void;
|
|
|
|
auto power(bool initializeLength = true) -> void;
|
|
|
|
|
|
|
|
auto serialize(serializer&) -> void;
|
|
|
|
|
|
|
|
bool enable;
|
|
|
|
|
|
|
|
uint3 sweepFrequency;
|
|
|
|
bool sweepDirection;
|
|
|
|
uint3 sweepShift;
|
|
|
|
bool sweepNegate;
|
|
|
|
uint2 duty;
|
|
|
|
uint length;
|
|
|
|
uint4 envelopeVolume;
|
|
|
|
bool envelopeDirection;
|
|
|
|
uint3 envelopeFrequency;
|
|
|
|
uint11 frequency;
|
|
|
|
bool counter;
|
|
|
|
|
|
|
|
int16 output;
|
|
|
|
bool dutyOutput;
|
|
|
|
uint3 phase;
|
|
|
|
uint period;
|
|
|
|
uint3 envelopePeriod;
|
|
|
|
uint3 sweepPeriod;
|
|
|
|
int frequencyShadow;
|
|
|
|
bool sweepEnable;
|
|
|
|
uint4 volume;
|
|
|
|
} square1;
|
|
|
|
|
|
|
|
//square2.cpp
|
|
|
|
struct Square2 {
|
|
|
|
auto dacEnable() const -> bool;
|
|
|
|
|
|
|
|
auto run() -> void;
|
|
|
|
auto clockLength() -> void;
|
|
|
|
auto clockEnvelope() -> void;
|
|
|
|
auto read(uint16 addr) -> uint8;
|
|
|
|
auto write(uint16 addr, uint8 data) -> void;
|
|
|
|
auto power(bool initializeLength = true) -> void;
|
|
|
|
|
|
|
|
auto serialize(serializer&) -> void;
|
|
|
|
|
|
|
|
bool enable;
|
|
|
|
|
|
|
|
uint2 duty;
|
|
|
|
uint length;
|
|
|
|
uint4 envelopeVolume;
|
|
|
|
bool envelopeDirection;
|
|
|
|
uint3 envelopeFrequency;
|
|
|
|
uint11 frequency;
|
|
|
|
bool counter;
|
|
|
|
|
|
|
|
int16 output;
|
|
|
|
bool dutyOutput;
|
|
|
|
uint3 phase;
|
|
|
|
uint period;
|
|
|
|
uint3 envelopePeriod;
|
|
|
|
uint4 volume;
|
|
|
|
} square2;
|
|
|
|
|
|
|
|
struct Wave {
|
|
|
|
auto getPattern(uint5 offset) const -> uint4;
|
|
|
|
|
|
|
|
auto run() -> void;
|
|
|
|
auto clockLength() -> void;
|
|
|
|
auto read(uint16 addr) -> uint8;
|
|
|
|
auto write(uint16 addr, uint8 data) -> void;
|
|
|
|
auto power(bool initializeLength = true) -> void;
|
|
|
|
|
|
|
|
auto serialize(serializer&) -> void;
|
|
|
|
|
|
|
|
bool enable;
|
|
|
|
|
|
|
|
bool dacEnable;
|
|
|
|
uint2 volume;
|
|
|
|
uint11 frequency;
|
|
|
|
bool counter;
|
|
|
|
uint8 pattern[16];
|
|
|
|
|
|
|
|
int16 output;
|
|
|
|
uint length;
|
|
|
|
uint period;
|
|
|
|
uint5 patternOffset;
|
|
|
|
uint4 patternSample;
|
|
|
|
uint patternHold;
|
|
|
|
} wave;
|
|
|
|
|
|
|
|
struct Noise {
|
|
|
|
auto dacEnable() const -> bool;
|
|
|
|
auto getPeriod() const -> uint;
|
|
|
|
|
|
|
|
auto run() -> void;
|
|
|
|
auto clockLength() -> void;
|
|
|
|
auto clockEnvelope() -> void;
|
|
|
|
auto read(uint16 addr) -> uint8;
|
|
|
|
auto write(uint16 addr, uint8 data) -> void;
|
|
|
|
auto power(bool initializeLength = true) -> void;
|
|
|
|
|
|
|
|
auto serialize(serializer&) -> void;
|
|
|
|
|
|
|
|
bool enable;
|
|
|
|
|
|
|
|
uint4 envelopeVolume;
|
|
|
|
bool envelopeDirection;
|
|
|
|
uint3 envelopeFrequency;
|
|
|
|
uint4 frequency;
|
|
|
|
bool narrow;
|
|
|
|
uint3 divisor;
|
|
|
|
bool counter;
|
|
|
|
|
|
|
|
int16 output;
|
|
|
|
uint length;
|
|
|
|
uint3 envelopePeriod;
|
|
|
|
uint4 volume;
|
|
|
|
uint period;
|
|
|
|
uint15 lfsr;
|
|
|
|
} noise;
|
|
|
|
|
|
|
|
struct Sequencer {
|
|
|
|
auto run() -> void;
|
|
|
|
auto read(uint16 addr) -> uint8;
|
|
|
|
auto write(uint16 addr, uint8 data) -> void;
|
|
|
|
auto power() -> void;
|
|
|
|
|
|
|
|
auto serialize(serializer&) -> void;
|
|
|
|
|
|
|
|
bool leftEnable;
|
|
|
|
uint3 leftVolume;
|
|
|
|
bool rightEnable;
|
|
|
|
uint3 rightVolume;
|
|
|
|
|
|
|
|
struct Channel {
|
|
|
|
bool leftEnable;
|
|
|
|
bool rightEnable;
|
|
|
|
} square1, square2, wave, noise;
|
|
|
|
|
|
|
|
bool enable;
|
|
|
|
|
|
|
|
int16 center;
|
|
|
|
int16 left;
|
|
|
|
int16 right;
|
|
|
|
} sequencer;
|
Update to v097 release.
byuu says:
This release features improvements to all emulation cores, but most
substantially for the Game Boy core. All of blargg's test ROMs that pass
in gambatte now either pass in higan, or are off by 1-2 clocks (the
actual behaviors are fully emulated.) I consider the Game Boy core to
now be fairly accurate, but there's still more improvements to be had.
Also, what's sure to be a major feature for some: higan now has full
support for loading and playing ordinary ROM files, whether they have
copier headers, weird extensions, or are inside compressed archives. You
can load these games from the command-line, from the main Library menu
(via Load ROM Image), or via drag-and-drop on the main higan window. Of
course, fans of game folders and the library need not worry: that's
still there as well.
Also new, you can drop the (uncompressed) Game Boy Advance BIOS onto the
higan main window to install it into the correct location with the
correct file name.
Lastly, this release technically restores Mac OS X support. However,
it's still not very stable, so I have decided against releasing binaries
at this time. I'd rather not rush this and leave a bad first impression
for OS X users.
Changelog (since v096):
- higan: project source code hierarchy restructured; icarus directly
integrated
- higan: added software emulation of color-bleed, LCD-refresh,
scanlines, interlacing
- icarus: you can now load and import ROM files/archives from the main
higan menu
- NES: fixed manifest parsing for board mirroring and VRC pinouts
- SNES: fixed manifest for Star Ocean
- SNES: fixed manifest for Rockman X2,X3
- GB: enabling LCD restarts frame
- GB: emulated extra OAM STAT IRQ quirk required for GBVideoPlayer
(Shonumi)
- GB: VBK, BGPI, OBPI are readable
- GB: OAM DMA happens inside PPU core instead of CPU core
- GB: fixed APU length and sweep operations
- GB: emulated wave RAM quirks when accessing while channel is enabled
- GB: improved timings of several CPU opcodes (gekkio)
- GB: improved timings of OAM DMA refresh (gekkio)
- GB: CPU uses open collector logic; return 0xFF for unmapped memory
(gekkio)
- GBA: fixed sequencer enable flags; fixes audio in Zelda - Minish Cap
(Jonas Quinn)
- GBA: fixed disassembler masking error (Lioncash)
- hiro: Cocoa support added; higan can now be compiled on Mac OS X 10.7+
- nall: improved program path detection on Windows
- higan/Windows: moved configuration data from %appdata% to
%localappdata%
- higan/Linux,BSD: moved configuration data from ~/.config/higan to
~/.local/higan
2016-01-17 08:59:25 +00:00
|
|
|
|
|
|
|
uint3 phase; //high 3-bits of clock counter
|
|
|
|
uint12 cycle; //low 12-bits of clock counter
|
2011-01-22 08:15:49 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
extern APU apu;
|