===== DIGIC 8 Register Map: =====
==== UART ====
Controls physical UART connection.
^ Address ^ Description ^
| ''0xD01202F0'' | UART1_RX_SELECT_CONFIG |
| ''0xD01202F4'' | UART1_TX_SELECT_CONFIG |
| ''0xD01302F0'' | UART1_RX_SELECT_MASK |
| ''0xD01302F4'' | UART1_TX_SELECT_MASK |
''UART'' is connected to physical ICU UART on external debug connector. Handled by ''uart_change'' command on drysh.
''0x0'' selects ICU (DryOS on ARM core), ''0x2'' for CCLIME (DryOS on Xtensa core, network).
==== Display ====
^ Address ^ Description ^
| ''0xD030422C'' | ?? |
| ''0xD0304230'' | VRAM pointer |
| ''0xD0304234'' | VRAM pitch |
| ''0xD0304238'' | Resolution |
| ''0xD030423C'' | ?? |
==== LV peaking (Highlights / zebra) ====
^ Address ^ Output ^ Type ^ Controls what? ^
| ''0xD0300520'' | HDMI | zebra | enable / disable |
| ''0xD0300750'' | HDMI | overexpo | threshold and style |
| ''0xD0300754'' | HDMI | overexpo | color |
| ''0xD0300758'' | HDMI | underexpo | threshold and style |
| ''0xD030075C'' | HDMI | underexpo | color |
| ''0xD0304220'' | LCD/EVF | zebra | enable / disable |
| ''0xD0304488'' | LCD/EVF | overexpo | threshold and style |
| ''0xD030448C'' | LCD/EVF | overexpo | color |
| ''0xD0304490'' | LCD/EVF | underexpo | threshold and style |
| ''0xD0304494'' | LCD/EVF | underexpo | color |
Registers used by ''DispVram'' State object to control overexposure highlighting feature.
Different addresses and slightly different values than Digic 6/7, but capabilities are very similar.
__It is possible to have independent zebras configured on LCD and HDMI while running in Clean HDMI mode!__
===Note on directly writing the registers===
Directly writing some registers doesn't work (values are overridden). On R170.739 that happens for HDMI enable register, but this seems to differ from model to model. See [[digic6:registers|DIGIC 6 Register Map:]] for more info.
TL;DR is that you need to find (via xrefs / static code analysis) where reg value is stored, and update that memory address instead.
===Enable register===
''reg & 0x100'' controls if highlight is enabled or not.
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===
**** **** **** **** **** **** **** ****
*... .... .... .... .... .... .... .... visibility (on/off)
..** .... .... .... .... .... .... .... stripes move speed (0-3)
.... ...* .... .... .... .... .... .... stripes angle (45 / -45 deg)
.... .... ..** .... .... .... .... .... stripes style
.... .... .... .*** .... .... .... .... stripes opacity
.... .... .... .... **** **** .... .... threshold (underexpo)
.... .... .... .... .... .... **** **** threshold (overexpo)
Value written should be masked ''0xB137FFFF'' with one read from ''reg + 0x2000''
^ Field ^ Range ^ Description ^
| visibility | 0,1 | zebra visibility (do not confuse with Enable register) |
| speed | 0-3 | lines/dots are moving slower -> faster |
| angle | 0-1 | 0: 45 deg, 1: -45 deg |
| style | 0-2 | 0: light dots, 1: thin lines, 2: thick lines |
| opacity | 0-7 | very opaque -> solid color |
| underexpo_th | 0-255 | Threshold on undexexpo register, ignored on overexpo |
| 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===
Controls color of highlight overlays. ''??YYUUVV'' format. Canon code defaults to black (''00008080'')
===More registers===
Code suggests there are more registers:
The statement was wrong, those registers are likely to control other hardware effects. More testing has to be done to confirm.
^ 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 ====
^ Address ^ Description ^
| ''0xD800021D '' | Left Microphone Level and Peak |
| ''0xD8000220 '' | Right Microphone Level and Peak |