Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision |
digic8:registers [2022/02/20 13:45] – [LV peaking (Highlights / zebra)] kitor | digic8:registers [2022/02/20 17:04] – [LV peaking (Highlights / zebra)] kitor |
---|
| |
^ Address ^ Output ^ Type ^ Controls what? ^ | ^ Address ^ Output ^ Type ^ Controls what? ^ |
| ''0xD0300520'' | HDMI | overexpo | enable / disable | | | ''0xD0300520'' | HDMI | zebra | enable / disable | |
| ''0xD0300550'' | HDMI | underexpo | enable / disable | | |
| ''0xD0300750'' | HDMI | overexpo | threshold and style | | | ''0xD0300750'' | HDMI | overexpo | threshold and style | |
| ''0xD0300754'' | HDMI | overexpo | color | | | ''0xD0300754'' | HDMI | overexpo | color | |
| ''0xD0300758'' | HDMI | underexpo | threshold and style | | | ''0xD0300758'' | HDMI | underexpo | threshold and style | |
| ''0xD030075C'' | HDMI | underexpo | color | | | ''0xD030075C'' | HDMI | underexpo | color | |
| ''0xD0304220'' | LCD/EVF | overexpo | enable / disable | | | ''0xD0304220'' | LCD/EVF | zebra | enable / disable | |
| ''0xD0304250'' | LCD/EVF | underexpo | enable / disable | | |
| ''0xD0304488'' | LCD/EVF | overexpo | threshold and style | | | ''0xD0304488'' | LCD/EVF | overexpo | threshold and style | |
| ''0xD030448C'' | LCD/EVF | overexpo | color | | | ''0xD030448C'' | LCD/EVF | overexpo | color | |
Registers used by ''DispVram'' State object to control overexposure highlighting feature. | Registers used by ''DispVram'' State object to control overexposure highlighting feature. |
| |
Not tested on HDMI yet (registers found via static analysis). Ability to have underexposure highlights (like on D45) is not yet confirmed. | ===Note on HDMI registers=== |
| Directly poking HDMI enable doesn't work. There's something running in DryOS that constantly overwrites this register with value saved in runtime. |
| |
Code suggests there are more registers: | On R180.739 I was able to follow xrefs to that register, and found a function that writes them - on R180.739 source value is stored in ''b054''. If you apply the rules but write value to ''b054'' instead of register - it will get updated and zebras displayed on HDMI. |
| |
^ Output ^ Reg ^ Addresses ^ Range ^ | |
| HDMI(?) | Enable | ''0xD0300520 + 0x30 * n'' | n∈(0-7) | | |
| HDMI(?) | Threshold | ''0xD0300750 + 0x8 * n'' | n∈(0-5) | | |
| HDMI(?) | Color | ''0xD0300754 + 0x8 * n'' | n∈(0-5) | | |
| LCD(?) | Enable | ''0xD0304220 + 0x30 * n'' | n∈(0-7) | | |
| LCD(?) | Threshold | ''0xD0304488 + 0x8 * n'' | n∈(0-5) | | |
| LCD(?) | Color | ''0xD030448C + 0x8 * n'' | n∈(0-5) | | |
| |
For ''n > 1'' there's no visible difference. | |
| |
For ''n > 1'' Threshold registers accept both thresholds at the same time, but since those have no observed effects on displayed image - meaning is unknown. | __It is possible to have independent zebras configured on LCD and HDMI while running in Clean HDMI mode!__ |
| |
===Enable register=== | ===Enable register=== |
| |
Value written should be masked ''0x100'' with one read from ''reg + 0x2000'' | Value written should be masked ''0x100'' with one read from ''reg + 0x2000'' |
| |
| This register lies in **Display registers** range and most likely has more meanings. |
| |
===Threshold / style register=== | ===Threshold / style register=== |
Value written should be masked ''0xB137FFFF'' with one read from ''reg + 0x2000'' | Value written should be masked ''0xB137FFFF'' with one read from ''reg + 0x2000'' |
| |
^ Field ^ Range ^ Description ^ | ^ Field ^ Range ^ Description ^ |
| visibility | 0,1 | zebra visibility (do not confuse with Enable register) | | | visibility | 0,1 | zebra visibility (do not confuse with Enable register) | |
| speed | 0-3 | lines/dots are moving slower -> faster | | | speed | 0-3 | lines/dots are moving slower -> faster | |
| underexpo_th | 0-255 | Threshold on undexexpo register, ignored on overexpo | | | underexpo_th | 0-255 | Threshold on undexexpo register, ignored on overexpo | |
| overexpo_th | 0-255 | Threshold on overexpo register, ignored on underexpo | | | overexpo_th | 0-255 | Threshold on overexpo register, ignored on underexpo | |
| |
| **Note: On HDMI max threshold is 0xE8** Values above that are not displayed! |
| |
===Color register=== | ===Color register=== |
| |
Controls color of highlight overlays. ''??YYUUVV'' format. Canon code defaults to black (''00008080'') | Controls color of highlight overlays. ''??YYUUVV'' format. Canon code defaults to black (''00008080'') |
| |
| ===More registers=== |
| |
| Code suggests there are more registers: |
| |
| ^ Output ^ Reg ^ Addresses ^ Range ^ |
| | HDMI | Enable | ''0xD0300520 + 0x30 * n'' | n∈⟨0,7⟩ | |
| | LCD | Enable | ''0xD0304220 + 0x30 * n'' | n∈⟨0,7⟩ | |
| | HDMI | Threshold | ''0xD0300750 + 0x8 * m'' | m∈⟨0,5⟩ | |
| | HDMI | Color | ''0xD0300754 + 0x8 * m'' | m∈⟨0,5⟩ | |
| | LCD | Threshold | ''0xD0304488 + 0x8 * m'' | m∈⟨0,5⟩ | |
| | LCD | Color | ''0xD030448C + 0x8 * m'' | m∈⟨0,5⟩ | |
| |
| n values above 0 and m values above 1 are not understood. There's no visible difference on screen. |
| |
| For ''m > 1'' Threshold registers accept both under and overexposure thresholds at the same time, but since those have no visible effects on displayed image - meaning is unknown. |
| |
| Guess: maybe ''m > 1'' are in use for 10 bit / HDR mode? |
==== Audio ==== | ==== Audio ==== |
| |