These instructions were already implememented by Dolphin, but never added to the manual. Extension instructions will be handled in a later commit, as wlil instructions that were not previously implememented by Dolphin.
The actual documentation for registers is not changed in this commit; nor are any new registers added. This is purely to make later diffs more readable.
The GFDL requires the history section to be updated. Although there was no actual release, this makes it attribution clearer and separates it from my changes.
The existing manual is nice to read and get up to speed on things,
however it has one major problem. It's actually a pain to extend or
modify, despite being released under the GNU documentation license: It's
in PDF format.
I've taken the time to reproduce what the document more-or-less looks
like in order to allow extending the document using open-source tools
while also using a more general solution like LaTeX, which can generate
the document into multiple formats if desirable.
This should make extending the document much easier (and not lock the
information into one concrete format).
This could cause the first branch of the bootucode procedure, which
takes its parameters from the AX registers, to run during the ROM init
sequence. Since the ROM doesn't set any of the AX registers, the values
aren't meaningful, and can cause bad DMA transfers and crashes.
- coef: Explicitly set 23 different values that are used by GBA UCode,
and tweaked overall parameters to more closely match those 23 values.
- irom: Moved a few functions to their proper places, updated BootUCode
to configure DMA transfers using AX registers as well as IX registers
(the GBA UCode uses this to do two sequential transfers in one call),
and added partial functions used by GBA UCode.
All functions were reverse-engineered solely based off of observed
effects on the virtual machine: register states before-and-after, dmem
interactions, and DMA transfers. The specific coefficients were observed
being read from dmem, and must be exactly those values to function
properly. I have no knowledge of how the official ROM implements these
functions, or how it is implemented overall.
Tested with The Legend of Zelda: Four Swords Adventures, Final Fantasy
Crystal Chronicles, and Billy Hatcher and the Giant Egg (to download
ChuChu Rocket!).
At the end of July 2011, LM published a free DSP ROM that works with games
using the Zelda UCode. His ROM only has the code to handle UCode loading and a
few utility functions, the rest is missing. This includes the four large sound
mixing functions used by the AX UCode and the DROM containing coefficients used
for polyphase resampling in AX.
This is an improved, updated version of this ROM, which changes the following:
- We now have a free DROM that works for polyphase resampling by "emulating"
linear interpolation. The coefficients contained in the DROM are normally a
list of { c1, c2, c3, c4 } which are used to interpolate a sample value from
four previous samples:
out_sample = prev1 * c1 + prev2 * c2 + prev3 * c3 + prev4 * c4
The coefficients are chosen depending on the fractional part of the current
position (basically, our position between the previous and the next sample).
We can use this fact to generate (c1, c2, c3, c4) for each possible
fractional part so that:
out_sample = prev3 * curr_pos + prev4 * (1 - curr_pos)
Which is the formula for linear interpolation between prev3 and prev4. Linear
interpolation is not as good as polyphase resampling but it still works very
well and I couldn't really hear any difference between the two. If someone
wants to generate real polyphase filter coefficients, they are welcome to
submit a patch.
- The IROM now contains the 4 mixing functions used by the AX UCode: mix_add,
mix_add_two, mix_add_ramp, mix_add_ramp_two. They are large, inlined
functions (probably for performance reasons) in the official DSP IROM, our
version prefers to use a loop. This *should* be more performant with our DSP
JIT implementation, but I did not benchmark that.
Because the new DSP ROM is working just as well as the official ROM in 95% of
cases, it is now shipped by default with Dolphin and will be used with DSPLLE
if you don't have an official DSP ROM in User/GC. It will still display a panic
alert at every boot to notice you that you are using a non official DSP ROM
made by us, which is not perfect.
Games using the CARD, IPL or GBA UCodes are still broken. I don't know what
games this actually impacts, but this is a very small proportion compared to
what works.
enable newline normalization
get revision number via `hg svn info` for svnrev.h
ignore incremental/generated binary files (windows/VS at least)
leave a comment if some files need native eol set in svnprops
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5637 8ced0084-cf51-0410-be5f-012b33b47a6e
Using Unix tools to operate on a tree containing filename with spaces in them
is really annoying, so rename the handful of instances where there were spaces.
Host.cpp has never been used.
Games tend to lookup the following directories that we don't yet have anything
to put in, so prepopulate them in Data/User/Wii:
title/00010001
title/00010002
title/00010003
title/00010004
title/00010005
title/00010006
title/00010007
meta
shared2/title
Set eol-style native on a number of text files which didn't already have it.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5572 8ced0084-cf51-0410-be5f-012b33b47a6e