Line 25: |
Line 25: |
| |- | | |- |
| | 0x1EC1x00C | | | 0x1EC1x00C |
− | | ??? | + | | [[#MTX_IE|MTX_IE]] |
| | 4 | | | 4 |
| |- | | |- |
Line 36: |
Line 36: |
| ==Matrix unit== | | ==Matrix unit== |
| | | |
− | There are two matrix units, one at +0x200, and the other one at +0x300 | + | There are two matrix units, one at +0x200 for vertical (Y) scaling, and the other one at +0x300 for horizontal (X) scaling. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 48: |
Line 48: |
| | 4 | | | 4 |
| | Kernel width - 1 is written here, 1 <= width <= 8 | | | Kernel width - 1 is written here, 1 <= width <= 8 |
| + | |
| + | This decides how many pixels are written each batch. |
| |- | | |- |
| | 0x1EC1xn04 | | | 0x1EC1xn04 |
| | KRN_PATTERN_BITS | | | KRN_PATTERN_BITS |
| | 4 | | | 4 |
− | | If the corresponding bit is set then a new pixel is read(?) | + | | If the corresponding bit for the current batch iteration index is set then a new pixel is read. |
| + | |
| + | The amount of set bits determine how many pixels are read each batch. Any bit indexes past KRN_WIDTH are ignored. |
| | | |
− | This value is 6 bits, but it has to be written with a 32bit write. | + | This value is 8 bits, but it has to be written with a 32bit write. |
| |- | | |- |
| | 0x1EC1xn40 | | | 0x1EC1xn40 |
Line 62: |
Line 66: |
| |- | | |- |
| |} | | |} |
− |
| |
| | | |
| =Descriptions= | | =Descriptions= |
Line 76: |
Line 79: |
| |- | | |- |
| | 1 | | | 1 |
− | | ??? set after init sequence | + | | Enable vertical matrix |
| |- | | |- |
| | 2 | | | 2 |
− | | ??? set after init sequence | + | | Enable horizontal matrix |
| + | |- |
| + | | 4 |
| + | | ??? |
| + | |- |
| + | | 5 |
| + | | ??? |
| |- | | |- |
| | 8-9 | | | 8-9 |
− | | Mode? 0 = 4byte color, 1 = 3byte color, 2 = 2byte color, 3 = 2byte color | + | | Input pixel mode? 0 = 4byte color, 1 = 3byte color, 2 = 2byte color, 3 = 2byte color |
| |- | | |- |
| | 10-11 | | | 10-11 |
− | | Another mode? Input mode? Initialized to 0 | + | | Output framebuffer rotation: 0 = normal, 1 = 90° CW (right), 2 = 180° CW (upside down, not mirrored), 3 = 270° CW (left) |
| |- | | |- |
| | 12 | | | 12 |
− | | ??? initialized to 0 | + | | Output tiling for use with the GPU. When set, the output width and height must be a multiple of 8. |
| |- | | |- |
| | 15 | | | 15 |
− | | ??? set after init sequence | + | | Start bit (setting this will eventually raise MTX interrupt 0) |
| |- | | |- |
| | 16 | | | 16 |
− | | ??? not yet inited bit ??? | + | | Data still available flag (?) |
| |- | | |- |
| |} | | |} |
Line 105: |
Line 114: |
| |- | | |- |
| | 0-8 | | | 0-8 |
− | | Output framebuffer width - 1 is written here | + | | Output framebuffer width - 1 is written here, 1 <= width <= 512 |
| |- | | |- |
| | 16-25 | | | 16-25 |
− | | Output framebuffer height - 1 is written here | + | | Output framebuffer height - 1 is written here, 1 <= height <= 512 |
| |- | | |- |
| |} | | |} |
Line 115: |
Line 124: |
| | | |
| Reading this register will return pending interrupts. | | Reading this register will return pending interrupts. |
− | Writing this register will acknowledge the pending interrupt. | + | Writing this register will acknowledge pending interrupts where the bits are set. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 122: |
Line 131: |
| |- | | |- |
| | 0 | | | 0 |
− | | Interrupt 0 | + | | FIFO ready (signal to start DMA) |
| |- | | |- |
| | 1 | | | 1 |
− | | Interrupt 1 | + | | FIFO overrun(?) (occurs if DMA is too slow) |
| |- | | |- |
| | 2 | | | 2 |
− | | Interrupt 2 | + | | FIFO underrun(?) (occurs on VBlank) |
| |- | | |- |
| |} | | |} |
| + | |
| + | ==MTX_IE== |
| + | |
| + | Interrupt Enable for the above interrupts. |