Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/libsnes/bsnes/snes/alt/ppu-compatibility/render/render.cpp
2 views
1
#ifdef PPU_CPP
2
3
#include "cache.cpp"
4
#include "windows.cpp"
5
#include "bg.cpp"
6
#include "oam.cpp"
7
#include "mode7.cpp"
8
#include "addsub.cpp"
9
#include "line.cpp"
10
11
//Mode 0: ->
12
// 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
13
// BG4B, BG3B, OAM0, BG4A, BG3A, OAM1, BG2B, BG1B, OAM2, BG2A, BG1A, OAM3
14
void PPU::render_line_mode0() {
15
render_line_bg<0, BG1, COLORDEPTH_4>(8, 11);
16
render_line_bg<0, BG2, COLORDEPTH_4>(7, 10);
17
render_line_bg<0, BG3, COLORDEPTH_4>(2, 5);
18
render_line_bg<0, BG4, COLORDEPTH_4>(1, 4);
19
render_line_oam(3, 6, 9, 12);
20
}
21
22
//Mode 1 (pri=1): ->
23
// 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
24
// BG3B, OAM0, OAM1, BG2B, BG1B, OAM2, BG2A, BG1A, OAM3, BG3A
25
//
26
//Mode 1 (pri=0): ->
27
// 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
28
// BG3B, OAM0, BG3A, OAM1, BG2B, BG1B, OAM2, BG2A, BG1A, OAM3
29
void PPU::render_line_mode1() {
30
if(regs.bg3_priority) {
31
render_line_bg<1, BG1, COLORDEPTH_16>(5, 8);
32
render_line_bg<1, BG2, COLORDEPTH_16>(4, 7);
33
render_line_bg<1, BG3, COLORDEPTH_4 >(1, 10);
34
render_line_oam(2, 3, 6, 9);
35
} else {
36
render_line_bg<1, BG1, COLORDEPTH_16>(6, 9);
37
render_line_bg<1, BG2, COLORDEPTH_16>(5, 8);
38
render_line_bg<1, BG3, COLORDEPTH_4 >(1, 3);
39
render_line_oam(2, 4, 7, 10);
40
}
41
}
42
43
//Mode 2: ->
44
// 1, 2, 3, 4, 5, 6, 7, 8
45
// BG2B, OAM0, BG1B, OAM1, BG2A, OAM2, BG1A, OAM3
46
void PPU::render_line_mode2() {
47
render_line_bg<2, BG1, COLORDEPTH_16>(3, 7);
48
render_line_bg<2, BG2, COLORDEPTH_16>(1, 5);
49
render_line_oam(2, 4, 6, 8);
50
}
51
52
//Mode 3: ->
53
// 1, 2, 3, 4, 5, 6, 7, 8
54
// BG2B, OAM0, BG1B, OAM1, BG2A, OAM2, BG1A, OAM3
55
void PPU::render_line_mode3() {
56
render_line_bg<3, BG1, COLORDEPTH_256>(3, 7);
57
render_line_bg<3, BG2, COLORDEPTH_16 >(1, 5);
58
render_line_oam(2, 4, 6, 8);
59
}
60
61
//Mode 4: ->
62
// 1, 2, 3, 4, 5, 6, 7, 8
63
// BG2B, OAM0, BG1B, OAM1, BG2A, OAM2, BG1A, OAM3
64
void PPU::render_line_mode4() {
65
render_line_bg<4, BG1, COLORDEPTH_256>(3, 7);
66
render_line_bg<4, BG2, COLORDEPTH_4 >(1, 5);
67
render_line_oam(2, 4, 6, 8);
68
}
69
70
//Mode 5: ->
71
// 1, 2, 3, 4, 5, 6, 7, 8
72
// BG2B, OAM0, BG1B, OAM1, BG2A, OAM2, BG1A, OAM3
73
void PPU::render_line_mode5() {
74
render_line_bg<5, BG1, COLORDEPTH_16>(3, 7);
75
render_line_bg<5, BG2, COLORDEPTH_4 >(1, 5);
76
render_line_oam(2, 4, 6, 8);
77
}
78
79
//Mode 6: ->
80
// 1, 2, 3, 4, 5, 6
81
// OAM0, BG1B, OAM1, OAM2, BG1A, OAM3
82
void PPU::render_line_mode6() {
83
render_line_bg<6, BG1, COLORDEPTH_16>(2, 5);
84
render_line_oam(1, 3, 4, 6);
85
}
86
87
//Mode7: ->
88
// 1, 2, 3, 4, 5
89
// OAM0, BG1n, OAM1, OAM2, OAM3
90
91
//Mode 7 EXTBG: ->
92
// 1, 2, 3, 4, 5, 6, 7
93
// BG2B, OAM0, BG1n, OAM1, BG2A, OAM2, OAM3
94
void PPU::render_line_mode7() {
95
if(regs.mode7_extbg == false) {
96
render_line_mode7<BG1>(2, 2);
97
render_line_oam(1, 3, 4, 5);
98
} else {
99
render_line_mode7<BG1>(3, 3);
100
render_line_mode7<BG2>(1, 5);
101
render_line_oam(2, 4, 6, 7);
102
}
103
}
104
105
void PPU::render_line() {
106
if(regs.display_disabled == true) {
107
render_line_clear();
108
return;
109
}
110
111
flush_pixel_cache();
112
build_window_tables(COL);
113
update_bg_info();
114
115
switch(regs.bg_mode) {
116
case 0: render_line_mode0(); break;
117
case 1: render_line_mode1(); break;
118
case 2: render_line_mode2(); break;
119
case 3: render_line_mode3(); break;
120
case 4: render_line_mode4(); break;
121
case 5: render_line_mode5(); break;
122
case 6: render_line_mode6(); break;
123
case 7: render_line_mode7(); break;
124
}
125
126
render_line_output();
127
}
128
129
#endif
130
131