digraph {
rankdir=LR;
node [shape=plaintext];
subgraph cluster__ines {
label="Ines";
graph[style=dotted];
ines__seq [label=<
pos | size | type | id |
0 | 16 | Header | header |
16 | 512 | | trainer |
528 | (header.len_prg_rom * 16384) | | prg_rom |
... | (header.len_chr_rom * 8192) | | chr_rom |
... | 8224 | Playchoice10 | playchoice10 |
... | ⇲ | str(ASCII) | title |
>];
subgraph cluster__header {
label="Ines::Header";
graph[style=dotted];
header__seq [label=<
pos | size | type | id |
0 | 4 | | magic |
4 | 1 | u1 | len_prg_rom |
5 | 1 | u1 | len_chr_rom |
6 | 1 | F6 | f6 |
7 | 1 | F7 | f7 |
8 | 1 | u1 | len_prg_ram |
9 | 1 | F9 | f9 |
10 | 1 | F10 | f10 |
11 | 5 | | reserved |
>];
header__inst__mapper [label=<
id | value |
mapper | (f6.lower_mapper | (f7.upper_mapper << 4)) |
>];
subgraph cluster__f6 {
label="Ines::Header::F6";
graph[style=dotted];
f6__seq [label=<
pos | size | type | id |
0 | 4b | b4 | lower_mapper |
0:4 | 1b | BitsType1(BigBitEndian) | four_screen |
0:5 | 1b | BitsType1(BigBitEndian) | trainer |
0:6 | 1b | BitsType1(BigBitEndian) | has_battery_ram |
0:7 | 1b | b1→Mirroring | mirroring |
>];
}
subgraph cluster__f7 {
label="Ines::Header::F7";
graph[style=dotted];
f7__seq [label=<
pos | size | type | id |
0 | 4b | b4 | upper_mapper |
0:4 | 2b | b2 | format |
0:6 | 1b | BitsType1(BigBitEndian) | playchoice10 |
0:7 | 1b | BitsType1(BigBitEndian) | vs_unisystem |
>];
}
subgraph cluster__f9 {
label="Ines::Header::F9";
graph[style=dotted];
f9__seq [label=<
pos | size | type | id |
0 | 7b | b7 | reserved |
0:7 | 1b | b1→TvSystem | tv_system |
>];
}
subgraph cluster__f10 {
label="Ines::Header::F10";
graph[style=dotted];
f10__seq [label=<
pos | size | type | id |
0 | 2b | b2 | reserved1 |
0:2 | 1b | BitsType1(BigBitEndian) | bus_conflict |
0:3 | 1b | BitsType1(BigBitEndian) | prg_ram |
0:4 | 2b | b2 | reserved2 |
0:6 | 2b | b2→TvSystem | tv_system |
>];
}
}
subgraph cluster__playchoice10 {
label="Ines::Playchoice10";
graph[style=dotted];
playchoice10__seq [label=<
pos | size | type | id |
0 | 8192 | | inst_rom |
8192 | 32 | Prom | prom |
>];
subgraph cluster__prom {
label="Ines::Playchoice10::Prom";
graph[style=dotted];
prom__seq [label=<
pos | size | type | id |
0 | 16 | | data |
16 | 16 | | counter_out |
>];
}
}
}
ines__seq:header_type -> header__seq [style=bold];
header__seq:len_prg_rom_type -> ines__seq:prg_rom_size [color="#404040"];
header__seq:len_chr_rom_type -> ines__seq:chr_rom_size [color="#404040"];
ines__seq:playchoice10_type -> playchoice10__seq [style=bold];
header__seq:f6_type -> f6__seq [style=bold];
header__seq:f7_type -> f7__seq [style=bold];
header__seq:f9_type -> f9__seq [style=bold];
header__seq:f10_type -> f10__seq [style=bold];
f6__seq:lower_mapper_type -> header__inst__mapper [color="#404040"];
f7__seq:upper_mapper_type -> header__inst__mapper [color="#404040"];
playchoice10__seq:prom_type -> prom__seq [style=bold];
}