Commit Graph

18180 Commits

Author SHA1 Message Date
Pierre Bourdon 090723167f ZeldaHLE: Implement constant patterns with variable step (sample source 0A). 2015-08-14 16:01:35 +02:00
Pierre Bourdon fbe727b0bb ZeldaHLE: Support GBA crypto through command 0C. Reuses the pre-existing GBA crypto code from the separate UCode. 2015-08-14 16:01:35 +02:00
Pierre Bourdon 0b1af50316 ZeldaHLE: Initial support for command 0C in both styles implemented by the light protocol. Logs, but doesn't crash anymore. 2015-08-14 16:01:35 +02:00
Pierre Bourdon 32fcd8ec7c ZeldaHLE: Special case Cmd03 NOP handling to make it clear it shouldn't ever happen on light protocol UCodes. 2015-08-14 16:01:34 +02:00
Pierre Bourdon bbfa238657 ZeldaHLE: Document that the crashy commands are not actually crashy on light protocol, just never used. 2015-08-14 16:01:34 +02:00
Pierre Bourdon 25430e7923 ZeldaHLE: Add a flag to disable Cmd0D on older UCodes.
Shouldn't really matter -- these NOP commands aren't really used, but since it
reads an argument it's probably better to explicitly NOP it for safety.
2015-08-14 16:01:34 +02:00
Pierre Bourdon 8526a4131c ZeldaHLE: Properly implement light command 03.
On at least one version (AC/Pikmin 1 NTSC) it doesn't even send a sync mail and
just reloops to the dispatcher.
2015-08-14 16:01:34 +02:00
Pierre Bourdon 7f7e036a02 ZeldaHLE: Add a missing game to the list of games to look at. 2015-08-14 16:01:34 +02:00
Pierre Bourdon cdb1022696 Zelda HLE: Add support for the ZTP Wii UCode. 2015-08-14 16:01:34 +02:00
Pierre Bourdon 5f61ab3e21 Zelda HLE: Update the CRC to games mapping (documentation only). 2015-08-14 16:01:33 +02:00
Pierre Bourdon addb5cb887 Zelda HLE: Support the per-frame sync protocol used by SMS.
Didn't test if SMS sounds right (travelling with no headphones \o/) but the
waveform looks ok and the mails are flowing as expected.
2015-08-14 16:01:33 +02:00
Pierre Bourdon 89037781e0 Zelda HLE: Make the implementation less strict for recoverable errors.
It kind of sucks that we don't emulate some behaviors properly, but there is
very little ROI for some of these features and I'm not going to spend time
implementing them any time soon. Making the PanicAlerts optional allows for
more testing of the core features on more games while "just" breaking less
important features like reverb.
2015-08-14 16:01:33 +02:00
Pierre Bourdon 837b8041c0 Zelda HLE: Only alert for mixing into back buffers for recent UCode versions.
On older versions there is no such concept of a "back buffer" since positional
audio is not supported. These buffers are just used for temp mixing, and while
it would be really nice if we could support more of that inter-buffer mixing
(TODO :) ) it does not warrant a PanicAlert at this time.
2015-08-14 16:01:33 +02:00
Pierre Bourdon 840a4157b0 Zelda HLE: Properly implement LQ AFC decoding.
Typos and stupid mistakes + untested code = dirty Git history.
2015-08-14 16:01:33 +02:00
Pierre Bourdon 82689677d9 Zelda HLE: Implement LQ AFC decoding (samples source 0005). 2015-08-14 16:01:33 +02:00
Pierre Bourdon b3a327f02b Zelda HLE: Implement sample source 3.
"Square" wave at a 0.25 duty cycle (25% up 75% down).
2015-08-14 16:01:32 +02:00
Pierre Bourdon 3c2b22bc09 Zelda HLE: Add basic support for Luigi's Mansion.
Fails ingame because it mixes to some buffers that are considered the back
buffers for Dolby games. That check might need to be less restrictive for games
that don't use Dolby mixing.
2015-08-14 16:01:32 +02:00
Pierre Bourdon a0c318454d Zelda HLE: Log the UCode version being used (CRC/flags).
Also tidy up the versions list a bit.
2015-08-14 16:01:32 +02:00
Pierre Bourdon 2e72c11025 Zelda HLE: Add support for the Pikmin 1 NTSC version of the UCode. 2015-08-14 16:01:32 +02:00
Pierre Bourdon a8810e8778 Zelda HLE: Add support for the Zelda: FSA UCode. 2015-08-14 16:01:32 +02:00
Pierre Bourdon 01ab40fc6e Zelda HLE: NTSC IPL provides the volume stepping explicitly.
Support that through a new behavior flag. Now the only remaining known bug in
the NTSC IPL is the reverb not fading out.
2015-08-14 16:01:32 +02:00
Pierre Bourdon 43882f3e6e Zelda HLE: Handle the smaller VPBs used by the NTSC IPL.
Damn you, Nintendo.
2015-08-14 16:01:31 +02:00
Pierre Bourdon 1807c113b5 Zelda HLE: Support both NTSC and PAL IPL.
Add a flag for UCodes that only have four non-Dolby mixing destinations
(instead of the standard six destinations).

NTSC IPL is still hopelessly broken.
2015-08-14 16:01:31 +02:00
Pierre Bourdon 4ace79024d Zelda HLE: Add a missing mixing buffer used by GC IPL.
Not completely sure what it's used for yet, but TWW has references to it so
I'll get to it at some point.
2015-08-14 16:01:31 +02:00
Pierre Bourdon 8c85a8c8d9 Zelda HLE: Fix reverb in the GC IPL.
Adds a missing destination buffer, and support post-filtering.
2015-08-14 16:01:31 +02:00
Pierre Bourdon 13ea54628d Zelda HLE: Add support for the light protocol.
Used by a few titles (Luigi's Mansion, Animal Crossing) as well as the GameCube
IPL/BIOS.

Note that the IPL does not work yet because it mixes to unknown buffers.
2015-08-14 16:01:31 +02:00
Pierre Bourdon c033395e28 Zelda HLE: Introduce behavior flags to handle UCode version differences.
MAKE_DOLBY_LOUDER solves some of the volume issues that were happening in Zelda
Twilight Princess and SMG1.
2015-08-14 16:01:31 +02:00
Pierre Bourdon 8b9b9f033a Zelda HLE: Fix and genericize PCM ARAM loading functions.
Now also handles PCM16, and works for longer sounds. SMG1 main menu outputs
some sensible audio now, though volume seems slightly off.
2015-08-14 16:01:30 +02:00
Pierre Bourdon 0dc5a925b0 Zelda HLE: Add initial support for Wii DAC and SMG1.
SMG1 boots but quickly PanicAlerts due to an unimplemented sample source.
2015-08-14 16:01:30 +02:00
Pierre Bourdon ea1ac5f596 Zelda HLE: Add save state support.
Also fix an inconsistency in the spelling of "coeffs".
2015-08-14 16:01:30 +02:00
Pierre Bourdon bfff0a72df Zelda HLE: Implement sample sources 4, 7, 11 and 12.
Just 4 different versions of the same sample source, using a different constant
pattern uploaded to the DSP during command 01.
2015-08-14 16:01:30 +02:00
Pierre Bourdon 6c61ee6278 Zelda HLE: Initial support for Zelda Twilight Princess (GC)
Very close to the TWW version of the UCode, haven't determined any differences
yet (but I'm sure that will come soon). Works well enough to reach ingame
without any errors other than a few volume issues.
2015-08-14 16:01:30 +02:00
Pierre Bourdon b672788548 Zelda HLE: Skip command words that are not commands.
Zelda Twilight Princess (GC) seems to push null words into the command buffer.
The command handler in the UCode ignores initial command mails that do not have
the MSB set.
2015-08-14 16:01:30 +02:00
Pierre Bourdon 9944731516 Zelda HLE: Add reverb emulation. 2015-08-14 16:01:29 +02:00
Pierre Bourdon c58aece9ad Zelda HLE: Implement the PCM8 sample source.
Reorder some things in the source code to match the sample source definition
order. Add and remove some TODOs.
2015-08-14 16:01:29 +02:00
Pierre Bourdon 58fd39d57a Zelda HLE: Value-initialize the std::arrays.
I was under the wrong impression that std::array's default constructor
performed value initialization. Turns out it does not, so an array of POD will
not be initialized.
2015-08-14 16:01:29 +02:00
Pierre Bourdon 34341af17d Zelda HLE: Implement saw wave generation (sample source 0001).
Fixes issue 7961.
2015-08-14 16:01:29 +02:00
Pierre Bourdon 91fade5e89 Zelda HLE: Properly implement the square wave generation.
Zelda TWW magic meter works properly now.
2015-08-14 16:01:29 +02:00
Pierre Bourdon 63712e58fd Zelda HLE: Convert some ERROR_LOG to PanicAlert.
While these are not really unrecoverable errors, while Zelda HLE is in a
testing / development phase it is useful to notice these "unexpected" cases (or
expected without known ways to reproduce) by making them as hard as possible to
ignore.
2015-08-14 16:01:29 +02:00
Pierre Bourdon 2bb3daf027 Zelda HLE: Implement square wave sample source.
Also fix Windows build.
2015-08-14 16:01:29 +02:00
Pierre Bourdon 580fe12c5b Zelda HLE: Implement HQ AFC samples decoding. 2015-08-14 16:01:28 +02:00
Pierre Bourdon 33c29d8aab ZeldaHLE: fix windows build again 2015-08-14 16:01:28 +02:00
Pierre Bourdon b62f1ed453 ZeldaHLE: fix windows build 2015-08-14 16:01:28 +02:00
Pierre Bourdon e35b83fabf ZeldaHLE: Implement more infrastructure and one sample source.
Now renders some of the cutscene audio in Zelda TWW. Most of the work around
sample sources is in a good enough state, even though it is still missing
features like Dolby mixing, IIR, etc.
2015-08-14 16:01:28 +02:00
Pierre Bourdon d9188f1245 Zelda HLE: Rewrite the control flow.
Now accurate control flow for DAC. Voice rendering is not implemented yet, but
framing seems correct. Not expected to work for anything than DAC UCode games.
2015-08-14 16:01:28 +02:00
Pierre Bourdon d5e177d3f9 INIT UCode: reduce DSP initialization time
Push the mail at UCode boot time, not after the first update. This avoids a lot
of crazy busy-looping on the CPU side while waiting for the DSP to be
initialized.
2015-08-14 16:01:28 +02:00
Pierre Bourdon a770cc0778 DSPHLE MailHandler: Synchronize reads and interrupts
This change is meant to solve the following problem: how to translate the
following snippet to DSPHLE:
    SendInterruptAndWaitRead(MAIL_A);
    SendAndWaitRead(MAIL_B);

    SendInterruptAndWaitRead(MAIL_C);

This should cause the following actions on the CPU side:
    ---> Woken up by interrupt
    Reads MAIL_A
    Reads MAIL_B
    <--- Exits interrupt handler

    ---> Woken up by interrupt
    Reads MAIL_C
    <---

But with the current DSPHLE mail support, the following would happen because
the "AndWaitRead" part is not supported:
    ---> Woken up by interrupt
    Reads MAIL_A
    Reads MAIL_B
    <--- Exits interrupt handler

    [Never gets the second interrupt since it was triggered at the same time as
    the first one! Misses MAIL_C.]

This changes fixes the issue by storing two values in the mail queue on the DSP
side: the value of the mail itself, and whether a read of that mail should
trigger a DSP interrupt. If nothing is in the queue yet and an interrupt is
requested, just trigger the interrupt. In the present example, the queue will
look like this:
    Mail value       Interrupt requested
     MAIL_A                  No           <-- Interrupt was triggered when
                                              pushing the mail to the queue.
     MAIL_B                  Yes
     MAIL_C                  No

When the CPU will read MAIL_B, this will cause MailHandler to trigger the
interrupt, which will be handled by the CPU when coming back from the exception
handler. MAIL_C is then successfully read.
2015-08-14 16:01:27 +02:00
Pierre Bourdon 8f3302419b ZeldaHLE: Rip out more code, only keep normal version support and one CRC 2015-08-14 15:21:08 +02:00
Pierre Bourdon 22ec258194 ZeldaHLE: Rip out the whole voice processing code. Still boots games, but no sound at all. 2015-08-14 15:20:29 +02:00
Pierre Bourdon a92727e862 DSPHLE: Add a config parameter to dump UCode to disk 2015-08-14 15:19:57 +02:00