Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improvements to DSP manual #10048

Merged
merged 49 commits into from Aug 22, 2021
Merged

Improvements to DSP manual #10048

merged 49 commits into from Aug 22, 2021

Conversation

Pokechu22
Copy link
Contributor

@Pokechu22 Pokechu22 commented Aug 21, 2021

A bunch of improvements to the DSP manual, bringing it in line with Dolphin's own code (and changes from #10032, #10038, and #10045) and making it easier to use.

For convenience, here is the newly compiled manual: GameCube_DSP_Users_Manual.pdf

@Pokechu22
Copy link
Contributor Author

This PR has almost all of the documentation I want in it. The only things that it's missing are some hardware testing of the initialization process (I documented it in this PR, but only based on what libogc does and not how hardware reacts; I don't currently plan on investigating it further though) and an opcode map since it would help with visualizing what instructions are valid. I did already make an opcode map, but it turns out that typesetting a table like that is a nightmare so I didn't do it. Here's the spreadsheet I used to make the map.

This was implemented in Dolphin in 7c4e654.  That change also noted that JZR/JNZ were swapped; this was already fixed in facd1dc.
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.
This is for consistency with Dolphin, the opcode table, and 'LSNM.
The old names did not match the ones used by the instructions themselves, and were generally fairly inconsistent.
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.
This more clearly indicates what it is supposed to do.
The old encoding was a copy of 'LN.
The previous encoding was for MULXMVZ.
This matches the prose and Dolphin's implementation.
This is because RETcc is a single-word instruction.
The GFDL requires the history section to be updated.
This also removes the emu folder from the Makefile, and the Config.h file.  I'm not entirely sure what build.sh was for, but my best guess is that it was some kind of tool to run emulated DSP code at the same time as the actual DSP code and compare the results.  I don't know if it ever worked, but it certainly doesn't work now.
* DSP*Arithmetic: Fix grammar for ANDCF and ANDF
* DSP*Arithmetic: Fix registers used by MOVAX and MOV
* DSP*Branch: Fix documentation for JMPR
* DSP*Branch: Fix HALT encoding ("I think I saw a two")
* DSP*ExtOps: Fix 'LN encoding (The listed encoding was for 'L)
* DSP*ExtOps: Improve documentation for 'LD and 'LDAX
* DSPJitExtOps: Correct typo
* DSP*LoadStore: Remove obsolete comment about pc in SRS (This was fixed in 1419e7e)
* DSP*LoadStore: Fix comments for LRR/SRR
* DSP*Misc: Improve documentation for SBCLR and SBSET
* DSP*Multiplier: Fix MULXAC encoding (The previous encoding was for MULXMVZ)
* DSP*Multiplier: Fix tabs in MULCAC and MULCMVZ (There are some other tabs in comments in the JIT, but these are the only ones that are in instruction comments instead of indicating the corresponding interpreter code.  Those other comments can be corrected in a different PR, as they're not documentation related.)
* DSPJitMultiplier: Fix MULXMVZ typo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
3 participants