Difference between revisions of "MVD Services"
(54 intermediate revisions by 3 users not shown) | |||
Line 11: | Line 11: | ||
! Available since system version | ! Available since system version | ||
! Description | ! Description | ||
+ | ! Used by [[Internet_Browser|SKATER]] | ||
|- | |- | ||
| 0x00010082 | | 0x00010082 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
| [[MVDSTD:Initialize|Initialize]] | | [[MVDSTD:Initialize|Initialize]] | ||
+ | | Yes | ||
|- | |- | ||
| 0x00020000 | | 0x00020000 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
| [[MVDSTD:Shutdown|Shutdown]] | | [[MVDSTD:Shutdown|Shutdown]] | ||
+ | | Yes | ||
|- | |- | ||
| 0x00030300 | | 0x00030300 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
| [[MVDSTD:CalculateWorkBufSize|CalculateWorkBufSize]] | | [[MVDSTD:CalculateWorkBufSize|CalculateWorkBufSize]] | ||
+ | | Yes | ||
|- | |- | ||
| 0x000400C0 | | 0x000400C0 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
− | | | + | | [[MVDSTD:CalculateImageSize|CalculateImageSize]] |
+ | | No | ||
|- | |- | ||
| 0x00050100 | | 0x00050100 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
− | | (s8 unk0, s8 unk1, s8 unk2, u32 unk3) SKATER uses hard-coded value 0 for all of these params. | + | | (s8 unk0, s8 unk1, s8 unk2, u32 unk3) SKATER uses hard-coded value 0 for all of these params. Using different input data for this doesn't seem to affect video-processing output. |
+ | | Yes | ||
|- | |- | ||
| 0x00060000 | | 0x00060000 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
− | | Unknown. | + | | Unknown. |
+ | | No | ||
|- | |- | ||
| 0x00070000 | | 0x00070000 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
| Used during shutdown with video-processing. | | Used during shutdown with video-processing. | ||
+ | | Yes | ||
|- | |- | ||
| 0x00080142 | | 0x00080142 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
| [[MVDSTD:ProcessNALUnit|ProcessNALUnit]] | | [[MVDSTD:ProcessNALUnit|ProcessNALUnit]] | ||
+ | | Yes | ||
|- | |- | ||
| 0x00090042 | | 0x00090042 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
| [[MVDSTD:ControlFrameRendering|ControlFrameRendering]] | | [[MVDSTD:ControlFrameRendering|ControlFrameRendering]] | ||
+ | | Yes | ||
|- | |- | ||
| 0x000A0000 | | 0x000A0000 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
| [[MVDSTD:GetStatus|GetStatus]] | | [[MVDSTD:GetStatus|GetStatus]] | ||
+ | | Yes | ||
|- | |- | ||
| 0x000B0000 | | 0x000B0000 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
| GetStatusOther(unknown what this is used for). Same output size as [[MVDSTD:GetStatus|GetStatus]]. | | GetStatusOther(unknown what this is used for). Same output size as [[MVDSTD:GetStatus|GetStatus]]. | ||
+ | | No | ||
|- | |- | ||
| 0x000C0100 | | 0x000C0100 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
− | | (u8 unk0, s8 unk1, u32 unk2, u32 unk3) Unknown. | + | | (u8 unk0, s8 unk1, u32 unk2, u32 unk3) Unknown. |
+ | | No | ||
|- | |- | ||
| 0x000D0000 | | 0x000D0000 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
− | | Unknown. | + | | Unknown. |
+ | | No | ||
|- | |- | ||
| 0x000E0202 | | 0x000E0202 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
− | | Unknown | + | | Unknown. The code for this appears to be similar to [[MVDSTD:ProcessNALUnit|ProcessNALUnit]], this DMAs data from the input buffer as well. |
+ | | No | ||
|- | |- | ||
| 0x000F0042 | | 0x000F0042 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
− | | (s8 unk, val0, handle) Unknown | + | | (s8 unk, val0, handle) Unknown. Presumably the command 0x000E0202 version of [[MVDSTD:ControlFrameRendering]]. |
+ | | No | ||
|- | |- | ||
− | | | + | | 0x00100000 |
− | | | + | | [[8.1.0-0_New3DS]] |
− | | Unknown. | + | | Unknown. This writes 0x28-bytes of output starting at cmdreply[2]. |
+ | | No | ||
|- | |- | ||
| 0x00110000 | | 0x00110000 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
− | | Unknown. | + | | Unknown. |
+ | | No | ||
|- | |- | ||
| 0x001200C0 | | 0x001200C0 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
− | | (s8 unk0, u32 unk1, u32 unk2) Unknown. | + | | (s8 unk0, u32 unk1, u32 unk2) Unknown. |
+ | | No | ||
|- | |- | ||
| 0x00130000 | | 0x00130000 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
− | | Unknown. | + | | Unknown. |
+ | | No | ||
|- | |- | ||
| 0x001400C2 | | 0x001400C2 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
− | | Unknown | + | | Unknown. The code for this appears to be similar to [[MVDSTD:ProcessNALUnit|ProcessNALUnit]], this DMAs data from the input buffer as well. |
+ | | No | ||
|- | |- | ||
| 0x00150042 | | 0x00150042 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
− | | (s8 unk, val0, handle) Unknown | + | | (s8 unk, val0, handle) Unknown. Presumably the command 0x001400C2 version of [[MVDSTD:ControlFrameRendering]]. |
+ | | No | ||
|- | |- | ||
| 0x00160000 | | 0x00160000 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
− | | Unknown. | + | | Unknown. |
+ | | No | ||
|- | |- | ||
| 0x00170000 | | 0x00170000 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
− | | Unknown. | + | | Unknown. |
+ | | No | ||
|- | |- | ||
| 0x00180000 | | 0x00180000 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
| Unknown. Used during initialization regardless of the operation mode(color-conversion/video-processing). | | Unknown. Used during initialization regardless of the operation mode(color-conversion/video-processing). | ||
+ | | Yes | ||
|- | |- | ||
| 0x00190000 | | 0x00190000 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
| Unknown. Used during shutdown regardless of the operation mode(color-conversion/video-processing). | | Unknown. Used during shutdown regardless of the operation mode(color-conversion/video-processing). | ||
+ | | Yes | ||
|- | |- | ||
| 0x001A0000 | | 0x001A0000 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
| Used when doing color-format conversion. This triggers writing to the output buffer specified via config. | | Used when doing color-format conversion. This triggers writing to the output buffer specified via config. | ||
+ | | Yes | ||
|- | |- | ||
| 0x001B0040 | | 0x001B0040 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
− | | (u8 | + | | (u8 inval) Used during video-processing initialization. SKATER uses hard-coded value 1 for this. MVD-sysmodule checks that the input value is not 0 or higher than 11. The input value must be one of the following: 1, 6, 9, or 10. Using any of these values instead of 1 results in no data being written to the output buffer with normal video processing, without any errors being thrown. |
+ | | Yes | ||
|- | |- | ||
| 0x001C0000 | | 0x001C0000 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
| Used during shutdown with video-processing. | | Used during shutdown with video-processing. | ||
+ | | Yes | ||
|- | |- | ||
| 0x001D0042 | | 0x001D0042 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
| [[MVDSTD:GetConfig|GetConfig]] | | [[MVDSTD:GetConfig|GetConfig]] | ||
+ | | Yes | ||
|- | |- | ||
| 0x001E0044 | | 0x001E0044 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
| [[MVDSTD:SetConfig|SetConfig]] | | [[MVDSTD:SetConfig|SetConfig]] | ||
+ | | Yes | ||
|- | |- | ||
| 0x001F0902 | | 0x001F0902 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
− | | | + | | [[MVDSTD:SetupOutputBuffers|SetupOutputBuffers]] |
+ | | No | ||
|- | |- | ||
| 0x00200002 | | 0x00200002 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
− | | (val0, handle) Unknown | + | | (val0, handle) Unknown. This loads data from the table entry which has a field matching a certain value. This is the global table used by [[MVDSTD:SetupOutputBuffers|SetupOutputBuffers]]. |
+ | | No | ||
|- | |- | ||
| 0x00210100 | | 0x00210100 | ||
− | | | + | | [[8.1.0-0_New3DS]] |
− | | | + | | [[MVDSTD:OverrideOutputBuffers|OverrideOutputBuffers]] |
+ | | No | ||
|} | |} | ||
Line 174: | Line 208: | ||
| 0x4 | | 0x4 | ||
| 0x4 | | 0x4 | ||
− | | The default for this is 0x0. Must be <=5. When non-zero, the type value at offset 0x0 must be one of the following: 0x00020001, 0x00010001, 0x00010005, 0x00010006, or 0x00010007. | + | | The default for this is 0x0. Must be <=5. When non-zero, the type value at offset 0x0 must be one of the following: 0x00020001, 0x00010001, 0x00010005, 0x00010006, or 0x00010007. Doesn't seem to have any visible affect on the output for video processing. |
|- | |- | ||
| 0x8 | | 0x8 | ||
Line 208: | Line 242: | ||
| 0x4 | | 0x4 | ||
| Physical data address, only used for color-conversion when the type value has bitmask 0x20000 set. This isn't used when the value at offset 0x4 is 0x0 or 0x4. | | Physical data address, only used for color-conversion when the type value has bitmask 0x20000 set. This isn't used when the value at offset 0x4 is 0x0 or 0x4. | ||
+ | |- | ||
+ | | 0x28 | ||
+ | | 0x4 | ||
+ | | Unknown. Doesn't seem to have any visible affect on the output. | ||
+ | |- | ||
+ | | 0x2C | ||
+ | | 0x4 | ||
+ | | When non-zero this enables some sort of color adjustment for the output? | ||
+ | |- | ||
+ | | 0x30 | ||
+ | | 0x4 | ||
+ | | Same affect as offset 0x2C? This must not be enabled at the same time as that field. | ||
+ | |- | ||
+ | | 0x34 | ||
+ | | 0x4 | ||
+ | | Unknown, must be <8 for video-processing? Doesn't seem to have any visible affect on the output. | ||
+ | |- | ||
+ | | 0x38 | ||
+ | | 0x4 | ||
+ | | Unknown. Doesn't seem to have any visible affect on the output. | ||
+ | |- | ||
+ | | 0x3C | ||
+ | | 0x4 | ||
+ | | Unknown, must be <8 for video-processing? Doesn't seem to have any visible affect on the output. | ||
|- | |- | ||
| 0x40 | | 0x40 | ||
| 0x4 | | 0x4 | ||
− | | When non-zero this enables usage of the 4 words starting at offset 0x44. | + | | When non-zero this enables usage of the 4 words starting at offset 0x44. SKATER sets this to 0x0 for color-conversion, and 0x1 for video processing(this flag isn't mandatory for the latter). |
|- | |- | ||
| 0x44 | | 0x44 | ||
| 0x4 | | 0x4 | ||
− | | See offset 0x40. The default for this is 0x0. Must be <=widthval. Where widthval = <width value from the field at offset 0xC>. The low 4-bits of this value must be clear. | + | | See offset 0x40. The default for this is 0x0. u32 input_crop_x_pos. Must be <=widthval. Where widthval = <width value from the field at offset 0xC>. The low 4-bits of this value must be clear. |
|- | |- | ||
| 0x48 | | 0x48 | ||
| 0x4 | | 0x4 | ||
− | | See offset 0x40. The default for this is 0x0. Must be <=heightval. Where heightval = <height value from the field at offset 0x10>. The low 4-bits of this value must be clear. | + | | See offset 0x40. The default for this is 0x0. u32 input_crop_y_pos. Must be <=heightval. Where heightval = <height value from the field at offset 0x10>. The low 4-bits of this value must be clear. |
|- | |- | ||
| 0x4C | | 0x4C | ||
| 0x4 | | 0x4 | ||
− | | See offset 0x40. | + | | See offset 0x40. u32 input_crop_height. Must be >=16 and <=heightval. Where heightval = <height value from the field at offset 0x10>. The low 3-bits of this value must be clear. |
|- | |- | ||
| 0x50 | | 0x50 | ||
| 0x4 | | 0x4 | ||
− | | See offset 0x40. | + | | See offset 0x40. u32 input_crop_width. Must be >=width_min and <=widthval. Where widthval = <width value from the field at offset 0xC>. The low 3-bits of this value must be clear. |
|- | |- | ||
| 0x54 | | 0x54 | ||
Line 235: | Line 293: | ||
| 0x58 | | 0x58 | ||
| 0x4 | | 0x4 | ||
− | | Output format type, see below. SKATER writes value 0x40002 here | + | | Output format type, see below. SKATER writes value 0x40002 here. |
|- | |- | ||
| 0x5C | | 0x5C | ||
Line 251: | Line 309: | ||
| 0x68 | | 0x68 | ||
| 0x4 | | 0x4 | ||
− | | | + | | Additional output data physical address. This is only used when the output format type is value 0x00020001. |
+ | |- | ||
+ | | 0x6C | ||
+ | | 0x4 | ||
+ | | Unknown, doesn't seem to have a visible affect on the output. Must be <3 for video-processing? | ||
+ | |- | ||
+ | | 0x70 | ||
+ | | 0x4 | ||
+ | | Unknown, doesn't seem to have a visible affect on the output. | ||
+ | |- | ||
+ | | 0x74 | ||
+ | | 0x4 | ||
+ | | Unknown, doesn't seem to have a visible affect on the output. | ||
+ | |- | ||
+ | | 0x78 | ||
+ | | 0x4 | ||
+ | | Unknown, doesn't seem to have a visible affect on the output. | ||
+ | |- | ||
+ | | 0x7C | ||
+ | | 0x4 | ||
+ | | Unknown, doesn't seem to have a visible affect on the output. | ||
+ | |- | ||
+ | | 0x80 | ||
+ | | 0x4 | ||
+ | | Unknown. Must be <=1 for video processing? Doesn't seem to have a visible affect on the output. | ||
+ | |- | ||
+ | | 0x84 | ||
+ | | 0x4 | ||
+ | | Unknown, doesn't seem to have a visible affect on the output. | ||
+ | |- | ||
+ | | 0x88 | ||
+ | | 0x4 | ||
+ | | Unknown, doesn't seem to have a visible affect on the output. | ||
+ | |- | ||
+ | | 0x8C | ||
+ | | 0x4 | ||
+ | | Unknown, doesn't seem to have a visible affect on the output. | ||
+ | |- | ||
+ | | 0x90 | ||
+ | | 0x4 | ||
+ | | Unknown, doesn't seem to have a visible affect on the output. | ||
+ | |- | ||
+ | | 0x94 | ||
+ | | 0x4 | ||
+ | | Unknown, doesn't seem to have a visible affect on the output. | ||
+ | |- | ||
+ | | 0x98 | ||
+ | | 0x4 | ||
+ | | Unknown, doesn't seem to have a visible affect on the output. | ||
+ | |- | ||
+ | | 0x9C | ||
+ | | 0x4 | ||
+ | | Unknown, doesn't seem to have a visible affect on the output. | ||
+ | |- | ||
+ | | 0xA0 | ||
+ | | 0x4 | ||
+ | | Unknown, doesn't seem to have a visible affect on the output. | ||
+ | |- | ||
+ | | 0xA4 | ||
+ | | 0x4 | ||
+ | | Unknown, doesn't seem to have a visible affect on the output. | ||
+ | |- | ||
+ | | 0xA8 | ||
+ | | 0x4 | ||
+ | | Unknown, doesn't seem to have a visible affect on the output. | ||
|- | |- | ||
| 0xAC | | 0xAC | ||
| 0x4 | | 0x4 | ||
| Unknown, must be zero for video-processing. | | Unknown, must be zero for video-processing. | ||
+ | |- | ||
+ | | 0xB0 | ||
+ | | 0x28 | ||
+ | | Unknown, doesn't seem to have a visible affect on the output. | ||
|- | |- | ||
| 0xD8 | | 0xD8 | ||
| 0x4 | | 0x4 | ||
| Unknown, must be zero for video-processing. | | Unknown, must be zero for video-processing. | ||
+ | |- | ||
+ | | 0xDC | ||
+ | | 0x28 | ||
+ | | Unknown, doesn't seem to have a visible affect on the output. | ||
|- | |- | ||
| 0x104 | | 0x104 | ||
| 0x4 | | 0x4 | ||
− | | | + | | This flag enables using the following 4 words when non-zero. |
|- | |- | ||
| 0x108 | | 0x108 | ||
Line 432: | Line 562: | ||
! Type value | ! Type value | ||
! Mode | ! Mode | ||
− | ! | + | ! Video processing |
+ | ! Color conversion | ||
|- | |- | ||
| 0x00010001 | | 0x00010001 | ||
| Color conversion | | Color conversion | ||
− | | | + | | N/A |
+ | | YUYV422 | ||
|- | |- | ||
| 0x00010002 | | 0x00010002 | ||
| Video processing | | Video processing | ||
− | | | + | | H.264, but no output will be written to output buffer with error code 0xD961710A |
+ | | N/A | ||
|- | |- | ||
| 0x00010004 | | 0x00010004 | ||
| Video processing | | Video processing | ||
− | | | + | | H.264, but no output will be written to output buffer with error code 0xD961710A |
+ | | N/A | ||
|- | |- | ||
| 0x00010005 | | 0x00010005 | ||
− | | Color conversion | + | | Color conversion, Video processing |
− | | | + | | H.264, but no output will be written to output buffer with error code 0xD961710A |
+ | | YVYU422 | ||
|- | |- | ||
| 0x00010006 | | 0x00010006 | ||
− | | Color conversion | + | | Color conversion, Video processing |
− | | | + | | H.264, but no output will be written to output buffer with error code 0xD961710A |
+ | | UYVY422 | ||
|- | |- | ||
| 0x00010007 | | 0x00010007 | ||
− | | Color conversion | + | | Color conversion, Video processing |
− | | ? | + | | H.264, but no output will be written to output buffer with error code 0xD961710A |
+ | | VYUY422? | ||
|- | |- | ||
| 0x00020000 | | 0x00020000 | ||
− | | | + | | Video processing |
− | | | + | | H.264, but no output will be written to output buffer with error code 0xD961710A |
+ | | N/A | ||
|- | |- | ||
| 0x00020001 | | 0x00020001 | ||
| Video processing | | Video processing | ||
| H.264 | | H.264 | ||
+ | | N/A | ||
|- | |- | ||
| 0x00020002 | | 0x00020002 | ||
− | | ? | + | | Video processing |
− | | | + | | H.264, output will be corrupt a little?? |
+ | | N/A | ||
|- | |- | ||
| 0x00080000 | | 0x00080000 | ||
| Video processing | | Video processing | ||
− | | | + | | H.264, output will be gray-scale. |
+ | | N/A | ||
|- | |- | ||
| 0x00080001 | | 0x00080001 | ||
| Video processing | | Video processing | ||
− | | | + | | H.264, but no output will be written to output buffer with error code 0xD961710A |
+ | | N/A | ||
|- | |- | ||
| 0x00180001 | | 0x00180001 | ||
| Video processing | | Video processing | ||
− | | | + | | H.264, but no output will be written to output buffer with error code 0xD961710A |
+ | | N/A | ||
|} | |} | ||
Line 488: | Line 631: | ||
! Type value | ! Type value | ||
! Description | ! Description | ||
+ | ! Note | ||
|- | |- | ||
| 0x00010001 | | 0x00010001 | ||
− | | | + | | YUYV422 |
+ | | N/A | ||
|- | |- | ||
| 0x00010005 | | 0x00010005 | ||
− | | | + | | YVYU422 |
+ | | A certain MVD state field must not be set to 0x8170 in order to use this. | ||
|- | |- | ||
| 0x00010006 | | 0x00010006 | ||
− | | | + | | UYVY422 |
+ | | see 0x00010005 for the usage requirement. | ||
|- | |- | ||
| 0x00010007 | | 0x00010007 | ||
− | | | + | | VYUY422 |
+ | | see 0x00010005 for the usage requirement. | ||
|- | |- | ||
| 0x00010008 | | 0x00010008 | ||
− | | A certain MVD-module state field must not be set to 0x8170 in order to use this. Whether this can actually be used is determined by another MVD-module state field. | + | | YUYV422 with some align? |
+ | | A certain MVD-module state field must not be set to 0x8170 in order to use this. Whether this can actually be used is determined by another MVD-module state field. 16bit format. | ||
|- | |- | ||
| 0x00010009 | | 0x00010009 | ||
− | | | + | | YVYU422 with some align? |
+ | | see 0x00010008 for the usage requirements. 16bit format. | ||
|- | |- | ||
| 0x0001000A | | 0x0001000A | ||
− | | | + | | UYVY422 with some align? |
+ | | see 0x00010008 for the usage requirements. 16bit format. | ||
|- | |- | ||
| 0x0001000B | | 0x0001000B | ||
− | | | + | | VYUY422 with some align? |
+ | | see 0x00010008 for the usage requirements. 16bit format. | ||
|- | |- | ||
| 0x00020001 | | 0x00020001 | ||
− | | Some sort of YUV format? | + | | Some sort of YUV format? |
+ | | 12bit format. The initial output is written to the normal output buffer, then the rest is written to the additional output buffer dedicated to this out-type. | ||
|- | |- | ||
| 0x00040000 | | 0x00040000 | ||
− | | Unknown | + | | Unknown |
+ | | Doesn't write anything to the out-buffer when doing color-conversion. | ||
|- | |- | ||
| 0x00040001 | | 0x00040001 | ||
− | | | + | | ARGB1555? |
+ | | N/A | ||
|- | |- | ||
| 0x00040002 | | 0x00040002 | ||
− | | | + | | RGB565 |
+ | | N/A | ||
|- | |- | ||
| 0x00040003 | | 0x00040003 | ||
− | | | + | | ABGR1555? |
+ | | N/A | ||
|- | |- | ||
| 0x00040004 | | 0x00040004 | ||
− | | | + | | BGR565 |
+ | | N/A | ||
|- | |- | ||
| 0x00041000 | | 0x00041000 | ||
− | | Unknown | + | | Unknown |
+ | | Doesn't write anything to the out-buffer when doing color-conversion. | ||
|- | |- | ||
| 0x00041001 | | 0x00041001 | ||
− | | | + | | ARGB32 |
+ | | N/A | ||
|- | |- | ||
| 0x00041002 | | 0x00041002 | ||
− | | | + | | ABGR32 |
+ | | N/A | ||
|} | |} | ||
==MVD Service "l2b:u"== | ==MVD Service "l2b:u"== | ||
This one uses the I/O mapped @ 0x10130000. | This one uses the I/O mapped @ 0x10130000. | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Command Header | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x00010040 | ||
+ | | SetInputFormat? | ||
+ | |- | ||
+ | | 0x00020080 | ||
+ | | GetInputFormat? | ||
+ | |- | ||
+ | | 0x00030040 | ||
+ | | SetOutputFormat | ||
+ | |- | ||
+ | | 0x00040080 | ||
+ | | GetOutputFormat | ||
+ | |- | ||
+ | | 0x00050040 | ||
+ | | SetTransferEndInterrupt | ||
+ | |- | ||
+ | | 0x00060080 | ||
+ | | GetTransferEndInterrupt | ||
+ | |- | ||
+ | | 0x00070080 | ||
+ | | GetL2BEndEvent | ||
+ | |- | ||
+ | | 0x00080102 | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x00090080 | ||
+ | | Waits on a DMA Handle | ||
+ | |- | ||
+ | | 0x000A0102 | ||
+ | | MaybeSetRecieving | ||
+ | |- | ||
+ | | 0x000B0080 | ||
+ | | isDoneRecieving | ||
+ | |- | ||
+ | | 0x000C0040 | ||
+ | | SetInputLineWidth | ||
+ | |- | ||
+ | | 0x000D0080 | ||
+ | | GetInputLineWidth | ||
+ | |- | ||
+ | | 0x000E0040 | ||
+ | | SetInputLines | ||
+ | |- | ||
+ | | 0x000F0080 | ||
+ | | GetInputLines | ||
+ | |- | ||
+ | | 0x00100040 | ||
+ | | MaybeSetAlpha | ||
+ | |- | ||
+ | | 0x00110080 | ||
+ | | MaybeGetAlpha | ||
+ | |- | ||
+ | | 0x00120040 | ||
+ | | StartConversion | ||
+ | |- | ||
+ | | 0x00130040 | ||
+ | | StopConversion | ||
+ | |- | ||
+ | | 0x00140080 | ||
+ | | isBusyConversion | ||
+ | |- | ||
+ | | 0x00150040 | ||
+ | | SetPackageParameter | ||
+ | |- | ||
+ | | 0x00160080 | ||
+ | | GetPackageParameter | ||
+ | |- | ||
+ | | 0x00170080 | ||
+ | | PingProcess | ||
+ | |} | ||
==MVD Service "l2b2:u"== | ==MVD Service "l2b2:u"== | ||
Line 548: | Line 783: | ||
==MVD Service "y2r2:u"== | ==MVD Service "y2r2:u"== | ||
− | This | + | This is a exact copy of y2r camera service and hence named y2r2. |
==MVD Result-codes== | ==MVD Result-codes== | ||
Line 560: | Line 795: | ||
| | | | ||
| Invalid [[MVDSTD:GetConfig|configuration]], mainly when setting the config. | | Invalid [[MVDSTD:GetConfig|configuration]], mainly when setting the config. | ||
+ | |- | ||
+ | | 0xD96170CA | ||
+ | | -2(~1) | ||
+ | | | ||
+ | |- | ||
+ | | 0xE16170C9 | ||
+ | | -1(~0) | ||
+ | | | ||
+ | |- | ||
+ | | 0xF96171C8 | ||
+ | | -0xFB(~0xFA) | ||
+ | | | ||
|- | |- | ||
| 0x17000 | | 0x17000 | ||
− | | | + | | 0x0 |
| OK | | OK | ||
+ | |- | ||
+ | | 0x17001 | ||
+ | | 0x1 | ||
+ | | Returned after processing NAL-unit parameter-sets. | ||
|- | |- | ||
| 0x17002 | | 0x17002 | ||
+ | | 0x2 | ||
+ | | Busy. When returned by command 0x00090042 during video processing, SKATER uses the {[[MVDSTD:GetConfig]], [[MVDSTD:SetConfig]], and 0x00090042} commands again(same config as before). The SKATER code for this includes this debug string: "H264 output %lld us corrected to %lld us\n". | ||
+ | |- | ||
+ | | 0x17003 | ||
+ | | 0x3 | ||
+ | | | ||
+ | |- | ||
+ | | 0x17004 | ||
+ | | 0x4 | ||
+ | | Returned when not all of the input NAL-unit buffer was processed. | ||
+ | |- | ||
+ | | 0x17005 | ||
+ | | 0x5 | ||
+ | | | ||
+ | |- | ||
+ | | 0x17006 | ||
+ | | 0x6 | ||
+ | | | ||
+ | |- | ||
+ | | 0x17007 | ||
+ | | 0x7 | ||
+ | | | ||
+ | |- | ||
+ | | 0x17038 | ||
+ | | | ||
| | | | ||
− | |||
|} | |} | ||
Latest revision as of 11:30, 28 September 2021
This is for using the MVD hardware video decoder(unknown whether MVD can do more than decoding) + hardware color-format converter. The New_3DS Internet Browser uses mvd:STD for video decoding + YUV2RGB for decoded MJPEG frames.
See here for the supported hardware decoder video codecs.
There can only be one service session open at a time for each individual MVD service.
MVD Service "mvd:STD"[edit]
Command Header | Available since system version | Description | Used by SKATER |
---|---|---|---|
0x00010082 | 8.1.0-0_New3DS | Initialize | Yes |
0x00020000 | 8.1.0-0_New3DS | Shutdown | Yes |
0x00030300 | 8.1.0-0_New3DS | CalculateWorkBufSize | Yes |
0x000400C0 | 8.1.0-0_New3DS | CalculateImageSize | No |
0x00050100 | 8.1.0-0_New3DS | (s8 unk0, s8 unk1, s8 unk2, u32 unk3) SKATER uses hard-coded value 0 for all of these params. Using different input data for this doesn't seem to affect video-processing output. | Yes |
0x00060000 | 8.1.0-0_New3DS | Unknown. | No |
0x00070000 | 8.1.0-0_New3DS | Used during shutdown with video-processing. | Yes |
0x00080142 | 8.1.0-0_New3DS | ProcessNALUnit | Yes |
0x00090042 | 8.1.0-0_New3DS | ControlFrameRendering | Yes |
0x000A0000 | 8.1.0-0_New3DS | GetStatus | Yes |
0x000B0000 | 8.1.0-0_New3DS | GetStatusOther(unknown what this is used for). Same output size as GetStatus. | No |
0x000C0100 | 8.1.0-0_New3DS | (u8 unk0, s8 unk1, u32 unk2, u32 unk3) Unknown. | No |
0x000D0000 | 8.1.0-0_New3DS | Unknown. | No |
0x000E0202 | 8.1.0-0_New3DS | Unknown. The code for this appears to be similar to ProcessNALUnit, this DMAs data from the input buffer as well. | No |
0x000F0042 | 8.1.0-0_New3DS | (s8 unk, val0, handle) Unknown. Presumably the command 0x000E0202 version of MVDSTD:ControlFrameRendering. | No |
0x00100000 | 8.1.0-0_New3DS | Unknown. This writes 0x28-bytes of output starting at cmdreply[2]. | No |
0x00110000 | 8.1.0-0_New3DS | Unknown. | No |
0x001200C0 | 8.1.0-0_New3DS | (s8 unk0, u32 unk1, u32 unk2) Unknown. | No |
0x00130000 | 8.1.0-0_New3DS | Unknown. | No |
0x001400C2 | 8.1.0-0_New3DS | Unknown. The code for this appears to be similar to ProcessNALUnit, this DMAs data from the input buffer as well. | No |
0x00150042 | 8.1.0-0_New3DS | (s8 unk, val0, handle) Unknown. Presumably the command 0x001400C2 version of MVDSTD:ControlFrameRendering. | No |
0x00160000 | 8.1.0-0_New3DS | Unknown. | No |
0x00170000 | 8.1.0-0_New3DS | Unknown. | No |
0x00180000 | 8.1.0-0_New3DS | Unknown. Used during initialization regardless of the operation mode(color-conversion/video-processing). | Yes |
0x00190000 | 8.1.0-0_New3DS | Unknown. Used during shutdown regardless of the operation mode(color-conversion/video-processing). | Yes |
0x001A0000 | 8.1.0-0_New3DS | Used when doing color-format conversion. This triggers writing to the output buffer specified via config. | Yes |
0x001B0040 | 8.1.0-0_New3DS | (u8 inval) Used during video-processing initialization. SKATER uses hard-coded value 1 for this. MVD-sysmodule checks that the input value is not 0 or higher than 11. The input value must be one of the following: 1, 6, 9, or 10. Using any of these values instead of 1 results in no data being written to the output buffer with normal video processing, without any errors being thrown. | Yes |
0x001C0000 | 8.1.0-0_New3DS | Used during shutdown with video-processing. | Yes |
0x001D0042 | 8.1.0-0_New3DS | GetConfig | Yes |
0x001E0044 | 8.1.0-0_New3DS | SetConfig | Yes |
0x001F0902 | 8.1.0-0_New3DS | SetupOutputBuffers | No |
0x00200002 | 8.1.0-0_New3DS | (val0, handle) Unknown. This loads data from the table entry which has a field matching a certain value. This is the global table used by SetupOutputBuffers. | No |
0x00210100 | 8.1.0-0_New3DS | OverrideOutputBuffers | No |
This one uses the I/O mapped @ 0x10207000.
This service is used by the New_3DS Internet Browser. SKATER runs the entire MVD initialization/shutdown each time the video player is entered/exited.
Linear-memory vaddrs passed to this service should be in the 0x30* region, MVD-sysmodule doesn't support the 0x14* region.
By default MVD does(?) various post-processing with the output image, this is controlled by the configuration. This post-processing isn't done at all in certain cases.
Initialization procedures:
- Color-conversion: Use command MVDSTD:Initialize with bufsize=1, then command 0x00180000.
- H.264: If needed, use MVDSTD:CalculateWorkBufSize. Then use MVDSTD:Initialize. Then use commands 0x00050100, 0x00180000, and 0x001B0040. Then use MVDSTD:ProcessNALUnit for each of the individual NAL-unit parameter sets("Sequence Parameter Set" and "Picture Parameter Set"), with the main video processing starting afterwards.
Shutdown procedures:
- Color-conversion: just use command 0x00190000, then MVDSTD:Shutdown.
- H.264: Use command 0x00090042 in a loop, waiting for it to return a retval that isn't 0x00017002. Then use commands 0x001C0000, 0x00190000, and 0x00070000. Then use MVDSTD:Shutdown.
MVDSTD configuration structure[edit]
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | Input format type, see below. |
0x4 | 0x4 | The default for this is 0x0. Must be <=5. When non-zero, the type value at offset 0x0 must be one of the following: 0x00020001, 0x00010001, 0x00010005, 0x00010006, or 0x00010007. Doesn't seem to have any visible affect on the output for video processing. |
0x8 | 0x4 | The default for this is 0x0. This must be <=1. Referred to as "H264 range" in SKATER. When 0x1 the output image is brighter than normal. |
0x0C | 0x4 | Input video width. Must be >=width_min and <width_max. This must be aligned: the low <dimensions_alignment>-bits must be clear. |
0x10 | 0x4 | Input video height. Must be >=height_min and <height_max. This must be aligned: the low <dimensions_alignment>-bits must be clear. |
0x14 | 0x4 | Input data physical address, only set for color-conversion. This isn't used when the value at offset 0x4 is 0x1 or 0x5. |
0x18 | 0x4 | Physical data address, only used for color-conversion when the type value has bitmask 0x20000 set. This isn't used when the value at offset 0x4 is 0x1 or 0x5. |
0x1C | 0x4 | Physical data address, only used for color-conversion when the type value is 0x20000. This isn't used when the value at offset 0x4 is 0x1 or 0x5. |
0x20 | 0x4 | Physical data address, for color-conversion. This isn't used when the value at offset 0x4 is 0x0 or 0x4. |
0x24 | 0x4 | Physical data address, only used for color-conversion when the type value has bitmask 0x20000 set. This isn't used when the value at offset 0x4 is 0x0 or 0x4. |
0x28 | 0x4 | Unknown. Doesn't seem to have any visible affect on the output. |
0x2C | 0x4 | When non-zero this enables some sort of color adjustment for the output? |
0x30 | 0x4 | Same affect as offset 0x2C? This must not be enabled at the same time as that field. |
0x34 | 0x4 | Unknown, must be <8 for video-processing? Doesn't seem to have any visible affect on the output. |
0x38 | 0x4 | Unknown. Doesn't seem to have any visible affect on the output. |
0x3C | 0x4 | Unknown, must be <8 for video-processing? Doesn't seem to have any visible affect on the output. |
0x40 | 0x4 | When non-zero this enables usage of the 4 words starting at offset 0x44. SKATER sets this to 0x0 for color-conversion, and 0x1 for video processing(this flag isn't mandatory for the latter). |
0x44 | 0x4 | See offset 0x40. The default for this is 0x0. u32 input_crop_x_pos. Must be <=widthval. Where widthval = <width value from the field at offset 0xC>. The low 4-bits of this value must be clear. |
0x48 | 0x4 | See offset 0x40. The default for this is 0x0. u32 input_crop_y_pos. Must be <=heightval. Where heightval = <height value from the field at offset 0x10>. The low 4-bits of this value must be clear. |
0x4C | 0x4 | See offset 0x40. u32 input_crop_height. Must be >=16 and <=heightval. Where heightval = <height value from the field at offset 0x10>. The low 3-bits of this value must be clear. |
0x50 | 0x4 | See offset 0x40. u32 input_crop_width. Must be >=width_min and <=widthval. Where widthval = <width value from the field at offset 0xC>. The low 3-bits of this value must be clear. |
0x54 | 0x4 | The default for this is 0x0. Must be <=5. For video processing, and when this value is non-zero, the type value at offset 0x0 must not be any of the following: 0x00010004, 0x00010001, 0x0x00100001, or 0x00200001. For video processing, the type value at offset 0x0 must not be 0x80000 when this value at offset 0x54 is non-zero. |
0x58 | 0x4 | Output format type, see below. SKATER writes value 0x40002 here. |
0x5C | 0x4 | Output video width. Must be >=16, and must be <somewidth_statefield. |
0x60 | 0x4 | Output video height. Must be >=16, and must be <someheight_statefield. |
0x64 | 0x4 | Output data physical address. |
0x68 | 0x4 | Additional output data physical address. This is only used when the output format type is value 0x00020001. |
0x6C | 0x4 | Unknown, doesn't seem to have a visible affect on the output. Must be <3 for video-processing? |
0x70 | 0x4 | Unknown, doesn't seem to have a visible affect on the output. |
0x74 | 0x4 | Unknown, doesn't seem to have a visible affect on the output. |
0x78 | 0x4 | Unknown, doesn't seem to have a visible affect on the output. |
0x7C | 0x4 | Unknown, doesn't seem to have a visible affect on the output. |
0x80 | 0x4 | Unknown. Must be <=1 for video processing? Doesn't seem to have a visible affect on the output. |
0x84 | 0x4 | Unknown, doesn't seem to have a visible affect on the output. |
0x88 | 0x4 | Unknown, doesn't seem to have a visible affect on the output. |
0x8C | 0x4 | Unknown, doesn't seem to have a visible affect on the output. |
0x90 | 0x4 | Unknown, doesn't seem to have a visible affect on the output. |
0x94 | 0x4 | Unknown, doesn't seem to have a visible affect on the output. |
0x98 | 0x4 | Unknown, doesn't seem to have a visible affect on the output. |
0x9C | 0x4 | Unknown, doesn't seem to have a visible affect on the output. |
0xA0 | 0x4 | Unknown, doesn't seem to have a visible affect on the output. |
0xA4 | 0x4 | Unknown, doesn't seem to have a visible affect on the output. |
0xA8 | 0x4 | Unknown, doesn't seem to have a visible affect on the output. |
0xAC | 0x4 | Unknown, must be zero for video-processing. |
0xB0 | 0x28 | Unknown, doesn't seem to have a visible affect on the output. |
0xD8 | 0x4 | Unknown, must be zero for video-processing. |
0xDC | 0x28 | Unknown, doesn't seem to have a visible affect on the output. |
0x104 | 0x4 | This flag enables using the following 4 words when non-zero. |
0x108 | 0x4 | u32 output_x_pos. Output X position in the output buffer. |
0x10C | 0x4 | u32 output_y_pos. Same as above except for the Y pos. |
0x110 | 0x4 | u32 output_width_override. The low 2-bits must be clear. When the output width is less than this, this value is used to align the output image width to the specified value via value0-pixels. When this value is less than the output width, this value is used for the output width instead. |
0x114 | 0x4 | Same as the field at offset 0x110 except for the output height. |
0x118 | 0x4 | Unknown, when non-zero it seems the output buffer isn't written any more? |
The size of this structure is fixed to 0x11C-bytes. The user process does the LINEAR-mem vaddr->physaddr conversion for the above physaddrs, when modifying the config struct before using MVDSTD:SetConfig. For the above physaddrs that are checked/used, the physaddr must not be 0x0, and the physaddr must be 8-byte aligned(low 3-bits clear).
For color-conversion, the output frame is split into two images via the two output physaddrs.
For *_min/*_max/dimensions_alignment mentioned above: *_min = 16 for color-conversion, 48 for video processing. *_max = 2048 for color-conversion, 4672 for video processing. dimensions_alignment = 4 for color-conversion, 3 for video processing.
The configuration doesn't seem to change at all while SKATER is running video processing(each MVDSTD:SetConfig input config appears to the same).
SKATER video processing config[edit]
When processing video, SKATER gets the config, updates all of the fields listed below, then uses MVDSTD:SetConfig.
Offset | Size | Description | Written value |
---|---|---|---|
0x0 | 0x4 | Input format type. | 0x00020001(H.264), hard-coded. |
0x8 | 0x4 | Loaded from unique input state. This is the 'range' field in the following debug print: "H264 w=%d h=%d range=%d pics=%d multi=%d\n". | |
0xC | 0x4 | Input video width. | Loaded from unique input state. |
0x10 | 0x4 | Input video height. | Loaded from unique input state. |
0x40 | 0x4 | Flag | 0x1, hard-coded. |
0x44 | 0x4 | Loaded from unique input state. | |
0x48 | 0x4 | Loaded from unique input state. | |
0x4C | 0x4 | Loaded from unique input state. | |
0x50 | 0x4 | Loaded from unique input state. | |
0x54 | 0x4 | 0x0, hard-coded. | |
0x58 | 0x4 | Output format type. | Loaded from unique input state. |
0x5C | 0x4 | Output video width. | Loaded from unique input state. |
0x60 | 0x4 | Output video height. | Loaded from unique input state. |
0x64 | 0x4 | Output data physical address. | |
0x68 | 0x4 | Output data physical address, only set for color-conversion. | 0x0, hard-coded. |
0xA8 | 0x4 | 0x1, hard-coded. | |
0xAC | 0x4 | 0x0, hard-coded. | |
0xD8 | 0x4 | 0x0, hard-coded. | |
0x104 | 0x4 | 0x1, hard-coded. | |
0x108 | 0x4 | Loaded from unique input state. | |
0x10C | 0x4 | Loaded from unique input state. | |
0x110 | 0x4 | Loaded from unique input state. | |
0x114 | 0x4 | Loaded from unique input state. | |
0x118 | 0x4 | 0x0, hard-coded. |
"Loaded from unique input state" refers to the field being loaded from state seperate from the other fields used for this configuration structure.
Input formats[edit]
Type value | Mode | Video processing | Color conversion |
---|---|---|---|
0x00010001 | Color conversion | N/A | YUYV422 |
0x00010002 | Video processing | H.264, but no output will be written to output buffer with error code 0xD961710A | N/A |
0x00010004 | Video processing | H.264, but no output will be written to output buffer with error code 0xD961710A | N/A |
0x00010005 | Color conversion, Video processing | H.264, but no output will be written to output buffer with error code 0xD961710A | YVYU422 |
0x00010006 | Color conversion, Video processing | H.264, but no output will be written to output buffer with error code 0xD961710A | UYVY422 |
0x00010007 | Color conversion, Video processing | H.264, but no output will be written to output buffer with error code 0xD961710A | VYUY422? |
0x00020000 | Video processing | H.264, but no output will be written to output buffer with error code 0xD961710A | N/A |
0x00020001 | Video processing | H.264 | N/A |
0x00020002 | Video processing | H.264, output will be corrupt a little?? | N/A |
0x00080000 | Video processing | H.264, output will be gray-scale. | N/A |
0x00080001 | Video processing | H.264, but no output will be written to output buffer with error code 0xD961710A | N/A |
0x00180001 | Video processing | H.264, but no output will be written to output buffer with error code 0xD961710A | N/A |
Output formats[edit]
Type value | Description | Note |
---|---|---|
0x00010001 | YUYV422 | N/A |
0x00010005 | YVYU422 | A certain MVD state field must not be set to 0x8170 in order to use this. |
0x00010006 | UYVY422 | see 0x00010005 for the usage requirement. |
0x00010007 | VYUY422 | see 0x00010005 for the usage requirement. |
0x00010008 | YUYV422 with some align? | A certain MVD-module state field must not be set to 0x8170 in order to use this. Whether this can actually be used is determined by another MVD-module state field. 16bit format. |
0x00010009 | YVYU422 with some align? | see 0x00010008 for the usage requirements. 16bit format. |
0x0001000A | UYVY422 with some align? | see 0x00010008 for the usage requirements. 16bit format. |
0x0001000B | VYUY422 with some align? | see 0x00010008 for the usage requirements. 16bit format. |
0x00020001 | Some sort of YUV format? | 12bit format. The initial output is written to the normal output buffer, then the rest is written to the additional output buffer dedicated to this out-type. |
0x00040000 | Unknown | Doesn't write anything to the out-buffer when doing color-conversion. |
0x00040001 | ARGB1555? | N/A |
0x00040002 | RGB565 | N/A |
0x00040003 | ABGR1555? | N/A |
0x00040004 | BGR565 | N/A |
0x00041000 | Unknown | Doesn't write anything to the out-buffer when doing color-conversion. |
0x00041001 | ARGB32 | N/A |
0x00041002 | ABGR32 | N/A |
MVD Service "l2b:u"[edit]
This one uses the I/O mapped @ 0x10130000.
Command Header | Description |
---|---|
0x00010040 | SetInputFormat? |
0x00020080 | GetInputFormat? |
0x00030040 | SetOutputFormat |
0x00040080 | GetOutputFormat |
0x00050040 | SetTransferEndInterrupt |
0x00060080 | GetTransferEndInterrupt |
0x00070080 | GetL2BEndEvent |
0x00080102 | ? |
0x00090080 | Waits on a DMA Handle |
0x000A0102 | MaybeSetRecieving |
0x000B0080 | isDoneRecieving |
0x000C0040 | SetInputLineWidth |
0x000D0080 | GetInputLineWidth |
0x000E0040 | SetInputLines |
0x000F0080 | GetInputLines |
0x00100040 | MaybeSetAlpha |
0x00110080 | MaybeGetAlpha |
0x00120040 | StartConversion |
0x00130040 | StopConversion |
0x00140080 | isBusyConversion |
0x00150040 | SetPackageParameter |
0x00160080 | GetPackageParameter |
0x00170080 | PingProcess |
MVD Service "l2b2:u"[edit]
This uses the same command-handler as "l2b:u".
MVD Service "y2r2:u"[edit]
This is a exact copy of y2r camera service and hence named y2r2.
MVD Result-codes[edit]
Result-code | Internal MVD status-code | Description |
---|---|---|
0xD961710F | Invalid configuration, mainly when setting the config. | |
0xD96170CA | -2(~1) | |
0xE16170C9 | -1(~0) | |
0xF96171C8 | -0xFB(~0xFA) | |
0x17000 | 0x0 | OK |
0x17001 | 0x1 | Returned after processing NAL-unit parameter-sets. |
0x17002 | 0x2 | Busy. When returned by command 0x00090042 during video processing, SKATER uses the {MVDSTD:GetConfig, MVDSTD:SetConfig, and 0x00090042} commands again(same config as before). The SKATER code for this includes this debug string: "H264 output %lld us corrected to %lld us\n". |
0x17003 | 0x3 | |
0x17004 | 0x4 | Returned when not all of the input NAL-unit buffer was processed. |
0x17005 | 0x5 | |
0x17006 | 0x6 | |
0x17007 | 0x7 | |
0x17038 |
Supported H.264 Levels and Profiles[edit]
Level | Baseline | Main | High | High 10 (High10, High10p, Hi10p or 10-bit H.264) | High 4:2:2 (High422p or High422) | High 4:4:4 Predictive (Hi444PP) |
---|---|---|---|---|---|---|
1 | Yes | Yes | Yes | Yes | Untested | Untested |
1b | Yes | Yes | Yes | Yes | Untested | Untested |
1.1 | Yes | Yes | Yes | Yes | Untested | Untested |
1.2 | Yes | Yes | Yes | Yes | Untested | Untested |
1.3 | Yes | Yes | Yes | Yes | Untested | Untested |
2 | Yes | Yes | Yes | Yes | Untested | Untested |
2.1 | Yes | Yes | Yes | Yes | Untested | Untested |
2.2 | Yes | Yes | Yes | Yes | Untested | Untested |
3 | Yes | Yes | Yes | Yes | Untested | Untested |
3.1 | Yes | Yes | Yes | Yes | Untested | Untested |
3.2 | Yes | Yes | Yes | Yes | Untested | Untested |
4 | No (untested) | No (untested) | No (untested) | No (untested) | No (untested) | No (untested) |
4.1 | No (untested) | No (untested) | No (untested) | No (untested) | No (untested) | No (untested) |
4.2 | No (untested) | No (untested) | No (untested) | No (untested) | No (untested) | No (untested) |
5 | No (untested) | No (untested) | No (untested) | No (untested) | No (untested) | No (untested) |
5.1 | No (untested) | No (untested) | No (untested) | No (untested) | No (untested) | No (untested) |
5.2 | No (untested) | No (untested) | No (untested) | No (untested) | No (untested) | No (untested) |
created using the New 3DS Internet Browser, New 3DS Internet Browser Specs and the following test pages:
Baseline Profile Test
Main Profile Test
High Profile Test
High10 Profile Test