Hardware/GX/Blitting Processor: Difference between revisions
Original understanding of the scissor |
m →Scissor registers: subst for testing purposes |
||
| Line 99: | Line 99: | ||
=== Scissor registers === | === Scissor registers === | ||
{{ | {{#if: BPMEM_SCISSORTL |<span id="{{anchorencode: BPMEM_SCISSORTL }}"></span>}} | ||
|12 |12 | | {| style="border-collapse: collapse; padding: 0.2em 0.2em 0.2em 0.2em; text-align: center; border: 1px solid #bbb;" border="1" cellspacing="0" | ||
|R/W|R/W| | |- | ||
|Left (inclusive)|Top (inclusive)| | | style="background-color: #ddd; text-align: center; font-size: 130%;" colspan="25" | ''' BPMEM_SCISSORTL ''' {{#if:0x20|(0x20)}} | ||
|}} | |- style="text-align: center; background-color: #cdc;" | ||
{{ | ! style="background-color: #ddd;" | | ||
|12 |12 | | | style="width: 3%" | 23 | ||
|R/W |R/W| | | style="width: 3%" | 22 | ||
|Right (inclusive)|Bottom (inclusive)| | | style="width: 3%" | 21 | ||
|}} | | style="width: 3%" | 20 | ||
{{ | | style="width: 3%" | 19 | ||
|4|10 |10 | | | style="width: 3%" | 18 | ||
|U|R/W|R/W| | | style="width: 3%" | 17 | ||
||Y offset / 2|X offset / 2| | | style="width: 3%" | 16 | ||
|}} | | style="width: 3%" | 15 | ||
| style="width: 3%" | 14 | |||
| style="width: 3%" | 13 | |||
| style="width: 3%" | 12 | |||
| style="width: 3%" | 11 | |||
| style="width: 3%" | 10 | |||
| style="width: 3%" | 9 | |||
| style="width: 3%" | 8 | |||
| style="width: 3%" | 7 | |||
| style="width: 3%" | 6 | |||
| style="width: 3%" | 5 | |||
| style="width: 3%" | 4 | |||
| style="width: 3%" | 3 | |||
| style="width: 3%" | 2 | |||
| style="width: 3%" | 1 | |||
| style="width: 3%" | 0 | |||
|- style="text-align: center; background-color: #eee;" | |||
| style="background-color: #ddd; width: 20%" | Access{{#ifexpr: 2 > 0 |<nowiki /> | |||
{{!}} colspan="12 " {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 1 |<nowiki /> | |||
{{!}} colspan="12 " {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 2 |<nowiki /> | |||
{{!}} colspan=" | |||
" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 3 |<nowiki /> | |||
{{!}} colspan="R/W" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 4 |<nowiki /> | |||
{{!}} colspan="R/W" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 5 |<nowiki /> | |||
{{!}} colspan=" | |||
" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 6 |<nowiki /> | |||
{{!}} colspan="Left (inclusive)" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 7 |<nowiki /> | |||
{{!}} colspan="Top (inclusive)" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 8 |<nowiki /> | |||
{{!}} colspan=" | |||
" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 9 |<nowiki /> | |||
{{!}} colspan="" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 10 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 11 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 12 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 13 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 14 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 15 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 16 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 17 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 18 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 19 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 20 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 21 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 22 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 23 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}} | |||
|- style="text-align: center; background-color: #ded; font-weight: bold;" | |||
| style="background-color: #ddd; width: 20%; font-weight: normal;" | Field{{#ifexpr: 2 > 0 |<nowiki /> | |||
{{!}} colspan="12 " {{#if:t||style="background-color:#ccc;"}} {{!}} B23}}{{#ifexpr: 2 > 1 |<nowiki /> | |||
{{!}} colspan="12 " {{#if:t||style="background-color:#ccc;"}} {{!}} B22}}{{#ifexpr: 2 > 2 |<nowiki /> | |||
{{!}} colspan=" | |||
" {{#if:t||style="background-color:#ccc;"}} {{!}} B21}}{{#ifexpr: 2 > 3 |<nowiki /> | |||
{{!}} colspan="R/W" {{#if:t||style="background-color:#ccc;"}} {{!}} B20}}{{#ifexpr: 2 > 4 |<nowiki /> | |||
{{!}} colspan="R/W" {{#if:t||style="background-color:#ccc;"}} {{!}} B19}}{{#ifexpr: 2 > 5 |<nowiki /> | |||
{{!}} colspan=" | |||
" {{#if:t||style="background-color:#ccc;"}} {{!}} B18}}{{#ifexpr: 2 > 6 |<nowiki /> | |||
{{!}} colspan="Left (inclusive)" {{#if:t||style="background-color:#ccc;"}} {{!}} B17}}{{#ifexpr: 2 > 7 |<nowiki /> | |||
{{!}} colspan="Top (inclusive)" {{#if:t||style="background-color:#ccc;"}} {{!}} B16}}{{#ifexpr: 2 > 8 |<nowiki /> | |||
{{!}} colspan=" | |||
" {{#if:t||style="background-color:#ccc;"}} {{!}} B15}}{{#ifexpr: 2 > 9 |<nowiki /> | |||
{{!}} colspan="" {{#if:t||style="background-color:#ccc;"}} {{!}} B14}}{{#ifexpr: 2 > 10 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B13}}{{#ifexpr: 2 > 11 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B12}}{{#ifexpr: 2 > 12 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B11}}{{#ifexpr: 2 > 13 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B10}}{{#ifexpr: 2 > 14 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B9}}{{#ifexpr: 2 > 15 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B8}}{{#ifexpr: 2 > 16 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B7}}{{#ifexpr: 2 > 17 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B6}}{{#ifexpr: 2 > 18 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B5}}{{#ifexpr: 2 > 19 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B4}}{{#ifexpr: 2 > 20 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B3}}{{#ifexpr: 2 > 21 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B2}}{{#ifexpr: 2 > 22 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B1}}{{#ifexpr: 2 > 23 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B0}} | |||
|} | |||
{{#if: BPMEM_SCISSORBR |<span id="{{anchorencode: BPMEM_SCISSORBR }}"></span>}} | |||
{| style="border-collapse: collapse; padding: 0.2em 0.2em 0.2em 0.2em; text-align: center; border: 1px solid #bbb;" border="1" cellspacing="0" | |||
|- | |||
| style="background-color: #ddd; text-align: center; font-size: 130%;" colspan="25" | ''' BPMEM_SCISSORBR ''' {{#if:0x21|(0x21)}} | |||
|- style="text-align: center; background-color: #cdc;" | |||
! style="background-color: #ddd;" | | |||
| style="width: 3%" | 23 | |||
| style="width: 3%" | 22 | |||
| style="width: 3%" | 21 | |||
| style="width: 3%" | 20 | |||
| style="width: 3%" | 19 | |||
| style="width: 3%" | 18 | |||
| style="width: 3%" | 17 | |||
| style="width: 3%" | 16 | |||
| style="width: 3%" | 15 | |||
| style="width: 3%" | 14 | |||
| style="width: 3%" | 13 | |||
| style="width: 3%" | 12 | |||
| style="width: 3%" | 11 | |||
| style="width: 3%" | 10 | |||
| style="width: 3%" | 9 | |||
| style="width: 3%" | 8 | |||
| style="width: 3%" | 7 | |||
| style="width: 3%" | 6 | |||
| style="width: 3%" | 5 | |||
| style="width: 3%" | 4 | |||
| style="width: 3%" | 3 | |||
| style="width: 3%" | 2 | |||
| style="width: 3%" | 1 | |||
| style="width: 3%" | 0 | |||
|- style="text-align: center; background-color: #eee;" | |||
| style="background-color: #ddd; width: 20%" | Access{{#ifexpr: 2 > 0 |<nowiki /> | |||
{{!}} colspan="12 " {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 1 |<nowiki /> | |||
{{!}} colspan="12 " {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 2 |<nowiki /> | |||
{{!}} colspan=" | |||
" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 3 |<nowiki /> | |||
{{!}} colspan="R/W " {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 4 |<nowiki /> | |||
{{!}} colspan="R/W" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 5 |<nowiki /> | |||
{{!}} colspan=" | |||
" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 6 |<nowiki /> | |||
{{!}} colspan="Right (inclusive)" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 7 |<nowiki /> | |||
{{!}} colspan="Bottom (inclusive)" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 8 |<nowiki /> | |||
{{!}} colspan=" | |||
" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 9 |<nowiki /> | |||
{{!}} colspan="" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 10 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 11 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 12 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 13 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 14 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 15 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 16 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 17 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 18 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 19 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 20 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 21 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 22 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 2 > 23 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}} | |||
|- style="text-align: center; background-color: #ded; font-weight: bold;" | |||
| style="background-color: #ddd; width: 20%; font-weight: normal;" | Field{{#ifexpr: 2 > 0 |<nowiki /> | |||
{{!}} colspan="12 " {{#if:t||style="background-color:#ccc;"}} {{!}} B23}}{{#ifexpr: 2 > 1 |<nowiki /> | |||
{{!}} colspan="12 " {{#if:t||style="background-color:#ccc;"}} {{!}} B22}}{{#ifexpr: 2 > 2 |<nowiki /> | |||
{{!}} colspan=" | |||
" {{#if:t||style="background-color:#ccc;"}} {{!}} B21}}{{#ifexpr: 2 > 3 |<nowiki /> | |||
{{!}} colspan="R/W " {{#if:t||style="background-color:#ccc;"}} {{!}} B20}}{{#ifexpr: 2 > 4 |<nowiki /> | |||
{{!}} colspan="R/W" {{#if:t||style="background-color:#ccc;"}} {{!}} B19}}{{#ifexpr: 2 > 5 |<nowiki /> | |||
{{!}} colspan=" | |||
" {{#if:t||style="background-color:#ccc;"}} {{!}} B18}}{{#ifexpr: 2 > 6 |<nowiki /> | |||
{{!}} colspan="Right (inclusive)" {{#if:t||style="background-color:#ccc;"}} {{!}} B17}}{{#ifexpr: 2 > 7 |<nowiki /> | |||
{{!}} colspan="Bottom (inclusive)" {{#if:t||style="background-color:#ccc;"}} {{!}} B16}}{{#ifexpr: 2 > 8 |<nowiki /> | |||
{{!}} colspan=" | |||
" {{#if:t||style="background-color:#ccc;"}} {{!}} B15}}{{#ifexpr: 2 > 9 |<nowiki /> | |||
{{!}} colspan="" {{#if:t||style="background-color:#ccc;"}} {{!}} B14}}{{#ifexpr: 2 > 10 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B13}}{{#ifexpr: 2 > 11 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B12}}{{#ifexpr: 2 > 12 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B11}}{{#ifexpr: 2 > 13 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B10}}{{#ifexpr: 2 > 14 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B9}}{{#ifexpr: 2 > 15 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B8}}{{#ifexpr: 2 > 16 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B7}}{{#ifexpr: 2 > 17 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B6}}{{#ifexpr: 2 > 18 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B5}}{{#ifexpr: 2 > 19 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B4}}{{#ifexpr: 2 > 20 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B3}}{{#ifexpr: 2 > 21 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B2}}{{#ifexpr: 2 > 22 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B1}}{{#ifexpr: 2 > 23 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B0}} | |||
|} | |||
{{#if: BPMEM_SCISSOROFFSET |<span id="{{anchorencode: BPMEM_SCISSOROFFSET }}"></span>}} | |||
{| style="border-collapse: collapse; padding: 0.2em 0.2em 0.2em 0.2em; text-align: center; border: 1px solid #bbb;" border="1" cellspacing="0" | |||
|- | |||
| style="background-color: #ddd; text-align: center; font-size: 130%;" colspan="25" | ''' BPMEM_SCISSOROFFSET ''' {{#if:0x59|(0x59)}} | |||
|- style="text-align: center; background-color: #cdc;" | |||
! style="background-color: #ddd;" | | |||
| style="width: 3%" | 23 | |||
| style="width: 3%" | 22 | |||
| style="width: 3%" | 21 | |||
| style="width: 3%" | 20 | |||
| style="width: 3%" | 19 | |||
| style="width: 3%" | 18 | |||
| style="width: 3%" | 17 | |||
| style="width: 3%" | 16 | |||
| style="width: 3%" | 15 | |||
| style="width: 3%" | 14 | |||
| style="width: 3%" | 13 | |||
| style="width: 3%" | 12 | |||
| style="width: 3%" | 11 | |||
| style="width: 3%" | 10 | |||
| style="width: 3%" | 9 | |||
| style="width: 3%" | 8 | |||
| style="width: 3%" | 7 | |||
| style="width: 3%" | 6 | |||
| style="width: 3%" | 5 | |||
| style="width: 3%" | 4 | |||
| style="width: 3%" | 3 | |||
| style="width: 3%" | 2 | |||
| style="width: 3%" | 1 | |||
| style="width: 3%" | 0 | |||
|- style="text-align: center; background-color: #eee;" | |||
| style="background-color: #ddd; width: 20%" | Access{{#ifexpr: 3 > 0 |<nowiki /> | |||
{{!}} colspan="4" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 3 > 1 |<nowiki /> | |||
{{!}} colspan="10 " {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 3 > 2 |<nowiki /> | |||
{{!}} colspan="10 " {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 3 > 3 |<nowiki /> | |||
{{!}} colspan=" | |||
" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 3 > 4 |<nowiki /> | |||
{{!}} colspan="U" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 3 > 5 |<nowiki /> | |||
{{!}} colspan="R/W" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 3 > 6 |<nowiki /> | |||
{{!}} colspan="R/W" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 3 > 7 |<nowiki /> | |||
{{!}} colspan=" | |||
" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 3 > 8 |<nowiki /> | |||
{{!}} colspan="" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 3 > 9 |<nowiki /> | |||
{{!}} colspan="Y offset / 2" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 3 > 10 |<nowiki /> | |||
{{!}} colspan="X offset / 2" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 3 > 11 |<nowiki /> | |||
{{!}} colspan=" | |||
" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 3 > 12 |<nowiki /> | |||
{{!}} colspan="" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 3 > 13 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 3 > 14 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 3 > 15 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 3 > 16 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 3 > 17 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 3 > 18 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 3 > 19 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 3 > 20 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 3 > 21 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 3 > 22 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}}{{#ifexpr: 3 > 23 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} R/W}} | |||
|- style="text-align: center; background-color: #ded; font-weight: bold;" | |||
| style="background-color: #ddd; width: 20%; font-weight: normal;" | Field{{#ifexpr: 3 > 0 |<nowiki /> | |||
{{!}} colspan="4" {{#if:t||style="background-color:#ccc;"}} {{!}} B23}}{{#ifexpr: 3 > 1 |<nowiki /> | |||
{{!}} colspan="10 " {{#if:t||style="background-color:#ccc;"}} {{!}} B22}}{{#ifexpr: 3 > 2 |<nowiki /> | |||
{{!}} colspan="10 " {{#if:t||style="background-color:#ccc;"}} {{!}} B21}}{{#ifexpr: 3 > 3 |<nowiki /> | |||
{{!}} colspan=" | |||
" {{#if:t||style="background-color:#ccc;"}} {{!}} B20}}{{#ifexpr: 3 > 4 |<nowiki /> | |||
{{!}} colspan="U" {{#if:t||style="background-color:#ccc;"}} {{!}} B19}}{{#ifexpr: 3 > 5 |<nowiki /> | |||
{{!}} colspan="R/W" {{#if:t||style="background-color:#ccc;"}} {{!}} B18}}{{#ifexpr: 3 > 6 |<nowiki /> | |||
{{!}} colspan="R/W" {{#if:t||style="background-color:#ccc;"}} {{!}} B17}}{{#ifexpr: 3 > 7 |<nowiki /> | |||
{{!}} colspan=" | |||
" {{#if:t||style="background-color:#ccc;"}} {{!}} B16}}{{#ifexpr: 3 > 8 |<nowiki /> | |||
{{!}} colspan="" {{#if:t||style="background-color:#ccc;"}} {{!}} B15}}{{#ifexpr: 3 > 9 |<nowiki /> | |||
{{!}} colspan="Y offset / 2" {{#if:t||style="background-color:#ccc;"}} {{!}} B14}}{{#ifexpr: 3 > 10 |<nowiki /> | |||
{{!}} colspan="X offset / 2" {{#if:t||style="background-color:#ccc;"}} {{!}} B13}}{{#ifexpr: 3 > 11 |<nowiki /> | |||
{{!}} colspan=" | |||
" {{#if:t||style="background-color:#ccc;"}} {{!}} B12}}{{#ifexpr: 3 > 12 |<nowiki /> | |||
{{!}} colspan="" {{#if:t||style="background-color:#ccc;"}} {{!}} B11}}{{#ifexpr: 3 > 13 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B10}}{{#ifexpr: 3 > 14 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B9}}{{#ifexpr: 3 > 15 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B8}}{{#ifexpr: 3 > 16 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B7}}{{#ifexpr: 3 > 17 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B6}}{{#ifexpr: 3 > 18 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B5}}{{#ifexpr: 3 > 19 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B4}}{{#ifexpr: 3 > 20 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B3}}{{#ifexpr: 3 > 21 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B2}}{{#ifexpr: 3 > 22 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B1}}{{#ifexpr: 3 > 23 |<nowiki /> | |||
{{!}} colspan="1" {{#if:t||style="background-color:#ccc;"}} {{!}} B0}} | |||
|} | |||
All values have 342 added to them, so a scissor located at (0, 0) with a size of (640, 528) would have left = 342, top = 342, right = 981, bottom = 869. | All values have 342 added to them, so a scissor located at (0, 0) with a size of (640, 528) would have left = 342, top = 342, right = 981, bottom = 869. | ||
Revision as of 01:31, 12 May 2022
The Blitting Processor is a component of the Wii's GX subsystem. It is responsible for copying the EFB to the XFB, doing the RGBA->YCbCr conversion and scaling/antialiasing in the process.
BP (blitting processor) registers
The BP registers are accessed by writing a 8-bit value of 0x61 to the FIFO, followed by 32 bit value. This value is a bit weird - the high 8 bits are the register, and the low 24 bits are the register value.
EFB source registers
One can specify which part of the EFB is copied to the XFB or texture, using the following BP registers:
| GX_BP_EFB_BOXCOORD (0x49) | ||||||||||||||||||||||||
| 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| Access | U | R/W | R/W | |||||||||||||||||||||
| Field | Y | X | ||||||||||||||||||||||
- 0x49: coordinates to top left of rectangle in EFB that will be copied (packed format, unknown)
| GX_BP_EFB_BOXSIZE (0x4a) | ||||||||||||||||||||||||
| 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| Access | U | R/W | R/W | |||||||||||||||||||||
| Field | height-1 | width-1 | ||||||||||||||||||||||
- 0x4a: width and height-1 of rectangle to copy in EFB (again, unknown packed format)
XFB destination registers
The destination of the copy in the XFB is specified by the physical address of the XFB and the row stride (basically width of row, but no scaling appled).
| GX_BP_XFB_ADDR (0x4B) | |
| 230 | |
| Access | R/W |
- 0x4b: Address of destination (XFB). BEWARE: Address is a PHYSICAL address, SHIFTED RIGHT by 5.
| GX_BP_XFB_STRIDE (0x4D) | ||
| 2310 | 90 | |
| Access | U | R/W |
- 0x4d: Low 10 bits specify row stride of destination.
Copy control register
| GX_BP_COPY_CONTROL (0x52) | ||||||||||||||||||||||||
| 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| Access | U | W | R/W | U | ||||||||||||||||||||
| Field | Start | Clr | ||||||||||||||||||||||
- 0x52: This register starts a copy. Important bits:
| Field | Description |
| Start | Writing both of these bits to 1 will start a copy. |
| Clr | Enables or disables clearing of the EFB during the copy. |
Copy clear registers
If EFB clearing is enabled in GX_BP_COPY_CONTROL, at each copy, the EFB is filled with the values specified by these registers.
| GX_BP_COPY_CLEAR_COLOR_HIGH (0x4F) | ||||||||||||||||||||||||
| 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| Access | U | R/W | R/W | |||||||||||||||||||||
| Field | Alpha | Red | ||||||||||||||||||||||
- 0x4F: This register defines the alpha and red components of the copy clear color.
| GX_BP_COPY_CLEAR_COLOR_LOW (0x50) | ||||||||||||||||||||||||
| 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| Access | U | R/W | R/W | |||||||||||||||||||||
| Field | Green | Blue | ||||||||||||||||||||||
- 0x50: This register defines the green and blue components of the copy clear color.
| GX_BP_COPY_CLEAR_DEPTH (0x51) | |
| 230 | |
| Access | R/W |
- 0x51: This register defines the copy clear depth.
A depth value of 0 represents 0.0 in floating-point, and a value of 0xFFFFFF (16777215) represents 1.0 .
So the formula to convert a floating-point depth to a 24-bit depth would be:
- 24_bit_depth = (floating_point_depth * 16777215.0)
Where floating_point_depth is between 0.0 and 1.0, of course.
Copy filter registers
| GX_BP_FILTER_0 (0x01) | |
| 230 | |
| Access | R/W |
| GX_BP_FILTER_1 (0x02) | |
| 230 | |
| Access | R/W |
| GX_BP_FILTER_2 (0x03) | |
| 230 | |
| Access | R/W |
| GX_BP_FILTER_3 (0x04) | |
| 230 | |
| Access | R/W |
Registers 0x01-0x04 are used for tricks like antialiasing. For a plain copy (i.e. no antialiasing) set all for to 0x666666.
Vertical filter registers
| GX_BP_VFILTER_0 (0x53) | ||||||||||||||||||||||||
| 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| Access | R/W | R/W | R/W | R/W | ||||||||||||||||||||
| Field | f3 | f2 | f1 | f0 | ||||||||||||||||||||
| GX_BP_VFILTER_1 (0x54) | ||||||||||||||||||||||||
| 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| Access | U | R/W | R/W | R/W | ||||||||||||||||||||
| Field | f6 | f5 | f4 | |||||||||||||||||||||
Like the filter registers, these vertical filter registers must be set up properly for you to see anything at all. Default values for no fancy operations are as follows:
| Field | Description |
| f0 | 0x00 |
| f1 | 0x00 |
| f2 | 0x15 |
| f3 | 0x16 |
| f4 | 0x15 |
| f5 | 0x00 |
| f6 | 0x00 |
Scissor registers
| BPMEM_SCISSORTL (0x20) | ||||||||||||||||||||||||
| 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| Access | R/W | R/W | ||||||||||||||||||||||
| Field | B23 | B22 | ||||||||||||||||||||||
| BPMEM_SCISSORBR (0x21) | ||||||||||||||||||||||||
| 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| Access | R/W | R/W | ||||||||||||||||||||||
| Field | B23 | B22 | ||||||||||||||||||||||
| BPMEM_SCISSOROFFSET (0x59) | ||||||||||||||||||||||||
| 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| Access | R/W | R/W | R/W | |||||||||||||||||||||
| Field | B23 | B22 | B21 | |||||||||||||||||||||
All values have 342 added to them, so a scissor located at (0, 0) with a size of (640, 528) would have left = 342, top = 342, right = 981, bottom = 869.
Beginning a copy
The following must take place to do a copy:
- Setup clear and z clear registers (optional)
- Set source and destination registers
- Write to display copy control register to begin a copy
- Set clear, z, and control registers again (what? doubt necessary, libogc GX is stupid)