Skip to content

Commit 4c8e53d

Browse files
authored
Merge pull request #1372 from ogamespec/master
PPU Signal rename Wave1 (wiki)
2 parents 2c7e8b6 + c57f3c4 commit 4c8e53d

94 files changed

Lines changed: 3819 additions & 17703 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

BreakingNESWiki/PPU/Readme.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ PPU (Picture Processing Unit) - специализированная микро
4747
- Схема управления адресной шиной. Управляет адресацией VRAM.
4848
- Схемы выборки данных (DATA READER). Схема для выборки исходных данных из VRAM: тайлов и атрибутов. Включает в себя генератор адреса PAR и схему получения цвета бэкграунда.
4949

50-
![PPU](/BreakingNESWiki/imgstore/ppu/PPU.jpg)
50+
![PPU](/BreakingNESWiki/imgstore/ppu/PPU.png)
5151

5252
## Шины PPU
5353

BreakingNESWiki/PPU/contents.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
- [H/V Счётчики](hv.md)
88
- [H/V Декодер](hv_decoder.md)
99
- [PPU FSM](fsm.md)
10-
- [Палитра](cram.md)
10+
- [Генератор Цвета](cram.md)
1111
- [Видеосигнал NTSC](tv.md)
1212
- [Генератор видеосигнала](video_out.md)
1313
- [Сравнение спрайтов](obj_eval.md)

BreakingNESWiki/PPU/cram.md

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
# Палитра (Color RAM)
1+
# Генератор Цвета (Color Generator RAM)
22

33
![ppu_locator_cram](/BreakingNESWiki/imgstore/ppu/ppu_locator_cram.jpg)
44

5-
Логика для работы с палитрой включает в состав следующие схемы:
5+
Логика для работы с генератором цвета (или по простому - "палитрой") включает в состав следующие схемы:
66
- Color Buffer (CB)
77
- Схема управления Color Buffer
8-
- Палитровая память (Color RAM)
9-
- Декодер индекса палитры, поступающего с выхода мультиплексора
8+
- Массив ячеек памяти (Color RAM)
9+
- Декодер адреса CRAM, поступающего с выхода мультиплексора
1010

11-
![CRAM_All](/BreakingNESWiki/imgstore/ppu/CRAM_All.jpg)
11+
![CRAM_All](/BreakingNESWiki/imgstore/ppu/CRAM_All.png)
1212

1313
Сигналы:
1414

@@ -35,7 +35,7 @@ Color Buffer (CB) используется для хранения текуще
3535

3636
### Схема хранения одного разряда CB
3737

38-
|![color_buffer_bit](/BreakingNESWiki/imgstore/ppu/color_buffer_bit.jpg)|![cb_bit_logisim](/BreakingNESWiki/imgstore/ppu/cb_bit_logisim.jpg)|
38+
|![color_buffer_bit](/BreakingNESWiki/imgstore/ppu/color_buffer_bit.jpg)|![CB_Bit](/BreakingNESWiki/imgstore/ppu/CB_Bit.png)|
3939
|---|---|
4040

4141
Схема Logisim весьма приближенно передает исходную схему, т.к. в Logisim отсутствует поддержка inOut сущностей.
@@ -69,12 +69,10 @@ P.S. Если вы разработчик микросхем, пожалуйст
6969
По соглашению группы ячеек, которые адресуются младшими разрядами адреса будем считать "рядами", а группы ячеек, адресуемые старшими разрядами будем считать "колонками".
7070

7171
Касательно Color RAM:
72-
- PAL3, PAL2: Определяет колонку (PAL3 - msb)
73-
- PAL4, PAL1, PAL0: Определяет ряд (PAL4 - msb)
72+
- CGA3, CGA2: Определяет колонку (CGA3 - msb)
73+
- CGA4, CGA1, CGA0: Определяет ряд (CGA4 - msb)
7474
- Ряды 0 и 4 совмещены
7575

76-
Выглядит немного хаотично, но что есть - то есть. Реверсинг памяти по какой-то причине всегда проходит с подобными мучениями в понимании, но не забывайте такой факт, что порядок соединения адресных линий для индексации памяти в общем случае не имеет значения.
77-
7876
Выходы COL:
7977

8078
![cram_col_outputs](/BreakingNESWiki/imgstore/ppu/cram_col_outputs.jpg)
@@ -98,9 +96,9 @@ Precharge PCLK:
9896

9997
### Декодер индекса палитры
10098

101-
:warning: Обратите внимание, что сигнал PAL4 следует не в обычном порядке. Данный бит выбирает тип палитры: палитра для бэкграунда или для спрайтов.
99+
:warning: Обратите внимание, что сигнал CGA4 следует не в обычном порядке. Данный бит выбирает тип палитры: палитра для бэкграунда или для спрайтов.
102100

103-
|![cram_decoder](/BreakingNESWiki/imgstore/ppu/cram_decoder.jpg)|![cram_decoder_logic](/BreakingNESWiki/imgstore/ppu/cram_decoder_logic.jpg)|
101+
|![cram_decoder](/BreakingNESWiki/imgstore/ppu/cram_decoder.jpg)|![CRAM_Decoder](/BreakingNESWiki/imgstore/ppu/CRAM_Decoder.png)|
104102
|---|---|
105103

106104
|COL0 \| COL1 \| COL2 \| COL3|
@@ -113,4 +111,4 @@ Precharge PCLK:
113111
|ROW7|
114112
|ROW3|
115113

116-
Подобный паттерн организации памяти повторяется 6 раз для каждого разряда Color Buffer.
114+
Подобный паттерн организации памяти повторяется 6 раз для каждого разряда Color Buffer.

BreakingNESWiki/PPU/dataread.md

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,5 @@
11
# Схема выборки данных
22

3-
> [!WARNING]
4-
> На данный момент этот раздел вики претерпевает рефакторинг, в связи с тем, что мы некорректно интерпретировали положение схемы PAR (Picture Address Register). То что раньше назвалось "PatGen" - это на самом деле PAR,
5-
> а то что раньше называлось PAR - это на самом деле не показанный в патенте адресный мультиплексор (который мы решили назвать нехитро - PPU Address Mux, PAMUX).
6-
> Кроме этого "PAR Counters" теперь называются "Tile Counters", т.к. ничего общего с PAR они не имеют.
7-
> Также мы планируем дать более понятные и адкеватные названия для некоторых сигналов (но уже после рефакторинга вики).
8-
> Со временем, когда будет сделана вычитка всех правок и мы убедимся что нет ошибок переименования данная плашка будет также удалена.
9-
103
В патенте PPU эта схема упоминается как `Still Picture Generator`.
114

125
Схема занимает почти четверть площади PPU и находится в правом нижнем углу микросхемы:

BreakingNESWiki/PPU/fifo.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,22 @@
2020
|H0'' - H2''|Используются для получения сигналов /SHx|
2121
|H3'' - H5''|Используются для выбора лейна|
2222
|**FSM**||
23-
|PAR/O|"PAR for Object". Выборка тайла для объекта (спрайта)|
23+
|OBJ_READ|Сигнал для события выборки данных спрайтов из памяти.|
2424
|0/HPOS|"Clear HPos". Очистить счётчики H в спрайтовой FIFO и начать работу FIFO|
2525
|/VIS|"Not Visible". Невидимая часть сигнала (использует спрайтовая логика)|
2626
|CLPO|1: Отсечение спрайтов.|
2727
|**Из схемы сравнения спрайтов**||
2828
|PD/FIFO|Для зануления выхода схемы H. Inv|
2929
|**Внутренние сигналы**||
30-
|/SH2|0: Загрузка атрибута спрайта|
31-
|/SH3|0: Загрузка Х позиции в обратный счётчик|
32-
|/SH5|0: Загрузка A байта спрайта в спаренный регистр сдвига|
33-
|/SH7|0: Загрузка B байта спрайта в спаренный регистр сдвига|
30+
|/OBJ_RD_ATTR|0: Загрузка атрибута спрайта|
31+
|/OBJ_RD_X|0: Загрузка Х позиции в обратный счётчик|
32+
|/OBJ_RD_A|0: Загрузка A байта спрайта в спаренный регистр сдвига|
33+
|/OBJ_RD_B|0: Загрузка B байта спрайта в спаренный регистр сдвига|
3434
|/Tx|Результат работы схемы H.INV, входное значение для загрузки в спаренный регистр сдвига (в инверсной логике)|
3535
|#0/H|Производный сигнал от 0/HPOS|
3636
|#x/EN|0: Лейн активен. Каждый лейн может активироваться индивидуально своим #EN сигналом.|
3737
|**Выходные сигналы**||
38-
|/SH2|Также используется в Data Reader|
38+
|/OBJ_RD_ATTR|Также используется в Data Reader|
3939
|/SPR0HIT|Для определения события `Sprite 0 Hit`.|
4040
|#ZCOL0, #ZCOL1, ZCOL2, ZCOL3, #ZPRIO|Результаты работы FIFO для мультиплексора (MUX)|
4141

@@ -137,8 +137,8 @@ HINV и HDIR - это два комплементарных сигнала (он
137137

138138
## Схема Sprite H
139139

140-
Также в состав FIFO было решено включить небольшую схему для получения значений `/SHx` (Sprite H). Схема находится выше мультиплексора, но большинство выходов `/SHx` используются только в Object FIFO (`/SH2` также используется в Data Reader).
140+
Также в состав FIFO было решено включить небольшую схему для получения значений `/OBJ_RD_x` (Object Read). Схема находится выше мультиплексора, но большинство выходов `/OBJ_RD_x` используются только в Object FIFO (`/OBJ_RD_ATTR` также используется в Data Reader).
141141

142142
![sprite_h](/BreakingNESWiki/imgstore/ppu/sprite_h.jpg)
143143

144-
![SpriteH](/BreakingNESWiki/imgstore/ppu/SpriteH.png)
144+
![SpriteH](/BreakingNESWiki/imgstore/ppu/SpriteH.png)

BreakingNESWiki/PPU/fsm.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
- Схема EVEN/ODD
1515
- Схема управления H/V счётчиками
1616

17-
![hv_fsm_all](/BreakingNESWiki/imgstore/ppu/hv_fsm_all.jpg)
17+
![HV_FSM_All](/BreakingNESWiki/imgstore/ppu/HV_FSM_All.png)
1818

1919
Управляющая логика насыщена разного рода сигналами, которые приходят и уходят практически во все возможные узлы PPU.
2020

@@ -53,7 +53,7 @@
5353
|/EVAL|Sprite Logic|"Sprite Evaluation in Progress"|
5454
|E/EV|Sprite Logic|"End Sprite Evaluation"|
5555
|I/OAM2|Sprite Logic|"Init OAM2". Инициализировать дополнительную [OAM](oam.md)|
56-
|PAR/O|All|"PAR for Object". Выборка тайла для объекта (спрайта).|
56+
|OBJ_READ|All|Сигнал для события выборки данных спрайтов из памяти.|
5757
|/VIS|Sprite Logic|"Not Visible". Невидимая часть сигнала (использует [схема сравнения спрайтов](obj_eval.md))|
5858
|#F/NT|Data Reader, OAM Eval|0: "Fetch Name Table"|
5959
|F/TB|Data Reader|"Fetch Tile B"|
@@ -105,7 +105,7 @@
105105

106106
![hv_fporch](/BreakingNESWiki/imgstore/ppu/hv_fporch.jpg)
107107

108-
![hv_fsm_horz](/BreakingNESWiki/imgstore/ppu/hv_fsm_horz.jpg)
108+
![HPosLogic](/BreakingNESWiki/imgstore/ppu/HPosLogic.png)
109109

110110
Логическая схема:
111111

@@ -125,7 +125,7 @@
125125

126126
Логическая схема:
127127

128-
![hv_fsm_vert_logic](/BreakingNESWiki/imgstore/ppu/hv_fsm_vert_logic.jpg)
128+
![VPosLogic](/BreakingNESWiki/imgstore/ppu/VPosLogic.png)
129129

130130
## Обработка прерывания VBlank
131131

@@ -160,4 +160,4 @@
160160

161161
Логическая схема:
162162

163-
![hv_counters_control_logic](/BreakingNESWiki/imgstore/ppu/hv_counters_control_logic.jpg)
163+
![hv_counters_control_logic](/BreakingNESWiki/imgstore/ppu/hv_counters_control_logic.jpg)

BreakingNESWiki/PPU/hv_decoder.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ H/V-декодер выбирает нужные пиксели и строки
3030
|6|63|10101001010101010101| |yes|/EVAL|
3131
|7|255|00010101010101010101| |yes|E/EV (также /EVAL)|
3232
|8|0-63|10101000000000000001| |yes|I/OAM2|
33-
|9|256-319|01101000000000000001| |yes|PAR/O|
33+
|9|256-319|01101000000000000001| |yes|OBJ_READ|
3434
|10|0-255|10000000000000000011|yes|yes|/VIS|
3535
|11|Каждый 0..1|00000000000010100001| |yes|#F/NT|
3636
|12|Каждый 6..7|00000000000001010000| | |F/TB|

BreakingNESWiki/PPU/mux.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030

3131
## Логическая схема
3232

33-
![mux_logic](/BreakingNESWiki/imgstore/ppu/mux_logic.jpg)
33+
![MUX_All](/BreakingNESWiki/imgstore/ppu/MUX_All.png)
3434

3535
Схема управления:
3636

0 commit comments

Comments
 (0)