Jo Engine
2026.11.1
Jo Sega Saturn Engine
Toggle main menu visibility
Loading...
Searching...
No Matches
jo_engine
jo
sega_saturn.h
Go to the documentation of this file.
1
/*
2
** Jo Sega Saturn Engine
3
** Copyright (c) 2012-2026, Johannes Fetz (johannesfetz@gmail.com)
4
** All rights reserved.
5
**
6
** Redistribution and use in source and binary forms, with or without
7
** modification, are permitted provided that the following conditions are met:
8
** * Redistributions of source code must retain the above copyright
9
** notice, this list of conditions and the following disclaimer.
10
** * Redistributions in binary form must reproduce the above copyright
11
** notice, this list of conditions and the following disclaimer in the
12
** documentation and/or other materials provided with the distribution.
13
** * Neither the name of the Johannes Fetz nor the
14
** names of its contributors may be used to endorse or promote products
15
** derived from this software without specific prior written permission.
16
**
17
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18
** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19
** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20
** DISCLAIMED. IN NO EVENT SHALL Johannes Fetz BE LIABLE FOR ANY
21
** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22
** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23
** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24
** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
*/
34
35
#ifndef __JO_SEGA_SATURN_H__
36
# define __JO_SEGA_SATURN_H__
37
38
/*
39
40
-------------------------------------------------|-----------------------------|------------------------------
41
| Function | Normal Scroll Screen | Rotation Scroll Screen |
42
| |-----------------------------|-----------------------------|------------------------------
43
| | NBG0 | NBG1 | NBG2 | NBG3 | RBG0 | RBG1 |
44
-------------------------------------------------|-----------------------------|------------------------------
45
| Character Colour | 16 colours | 16 colours | 16 colours | 16 colours | 16 colours | 16 colours |
46
| Count | 256 " " | 256 " " | 256 " " | 256 " " | 256 " " | 256 " " |
47
| | 2048 " " | 2048 " " | | | 2048 " " | 2048 " " |
48
| | 32768 " " | 32768 " " | | | 32768 " " | 32768 " " |
49
| | 16770000 " " | | | | 16770000 " " | 16770000 " " |
50
-------------------------------------------------|-----------------------------|------------------------------
51
| Character Size | 1x1 Cells , 2x2 Cells |
52
-------------------------------------------------|-----------------------------|------------------------------
53
| Pattern Name | 1 word , 2 words |
54
| Data Size | |
55
-------------------------------------------------|-----------------------------|------------------------------
56
| Plane Size | 1 H x 1 V 1 Pages ; 2 H x 1 V 1 Pages ; 2 H x 2 V Pages (I don't understand ... ) |
57
-------------------------------------------------|-----------------------------|------------------------------
58
| Plane Count | 4 | 16 |
59
-------------------------------------------------|-----------------------------|------------------------------
60
| Bitmap Possible | Yes | No | Yes | No |
61
-------------------------------------------------|-----------------------------|------------------------------
62
| Bitmap Size | 512 x 256 | N/A | 512x256 | N/A |
63
| | 512 x 512 | | 512x512 | |
64
| | 1024 x 256 | | | |
65
| | 1024 x 512 | | | |
66
-------------------------------------------------|-----------------------------|------------------------------
67
| Scale | 0.25 x - 256 x | None | Any ? |
68
-------------------------------------------------|-----------------------------|------------------------------
69
| Rotation | No | Yes |
70
-------------------------------------------------|-----------------------------|-----------------------------|
71
| Linescroll | Yes | No |
72
-------------------------------------------------|-----------------------------|------------------------------
73
| Column Scroll | Yes | No |
74
-------------------------------------------------|-----------------------------|------------------------------
75
| Mosaic | Yes | Horizontal Only |
76
-------------------------------------------------|-----------------------------|------------------------------
77
*/
78
79
/*
80
██╗ ██╗██████╗ ██████╗ ██╗
81
██║ ██║██╔══██╗██╔══██╗███║
82
██║ ██║██║ ██║██████╔╝╚██║
83
╚██╗ ██╔╝██║ ██║██╔═══╝ ██║
84
╚████╔╝ ██████╔╝██║ ██║
85
╚═══╝ ╚═════╝ ╚═╝ ╚═╝
86
87
*/
88
90
# define JO_VDP1_VRAM (0x25C00000)
92
# define JO_VDP1_FB (0x25C80000)
94
# define JO_VDP1_REG (0x25D00000)
96
# define JO_VDP1_LAST_REG (0x25D00016)
97
99
# define JO_VDP1_TVMR (*(volatile unsigned short *)0x25D00000)
// 0x0
101
# define JO_VDP1_FBCR (*(volatile unsigned short *)0x25D00002)
// 0x0
103
# define JO_VDP1_PTMR (*(volatile unsigned short *)0x25D00004)
// 0x2
105
# define JO_VDP1_EWDR (*(volatile unsigned short *)0x25D00006)
// 0x0
107
# define JO_VDP1_EWLR (*(volatile unsigned short *)0x25D00008)
// 0x0
109
# define JO_VDP1_EWRR (*(volatile unsigned short *)0x25D0000A)
// 0x58FF
111
# define JO_VDP1_ENDR (*(volatile unsigned short *)0x25D0000C)
// 0x0
113
# define JO_VDP1_EDSR (*(volatile unsigned short *)0x25D00010)
// 0x3
115
# define JO_VDP1_LOPR (*(volatile unsigned short *)0x25D00012)
// N/A
117
# define JO_VDP1_COPR (*(volatile unsigned short *)0x25D00014)
// N/A
119
# define JO_VDP1_MODR (*(volatile unsigned short *)0x25D00016)
// 0x1100
121
# define JO_VDP1_USER_AREA_SIZE (0x70538)
123
# define JO_VDP1_USER_AREA_END_ADDR (0x25C7E6F8)
// Before the gouraud tables of the 3D (JO_VDP1_CLIP_GOURAUD_TABLE_OFFSET)
125
# define JO_VDP1_TEXTURE_DEF_BASE_ADDRESS (0x10000)
126
127
/*
128
██╗ ██╗██████╗ ██████╗ ██████╗
129
██║ ██║██╔══██╗██╔══██╗╚════██╗
130
██║ ██║██║ ██║██████╔╝ █████╔╝
131
╚██╗ ██╔╝██║ ██║██╔═══╝ ██╔═══╝
132
╚████╔╝ ██████╔╝██║ ███████╗
133
╚═══╝ ╚═════╝ ╚═╝ ╚══════╝
134
135
*/
137
# define JO_VDP2_REG (0x25F80000)
139
# define JO_VDP2_LAST_REG (0x25F8011E)
141
# define JO_VDP2_VRAM (0x25E00000)
143
# define JO_VDP2_VRAM_A0 (JO_VDP2_VRAM)
145
# define JO_VDP2_VRAM_A1 (0x25E20000)
147
# define JO_VDP2_VRAM_B0 (0x25E40000)
149
# define JO_VDP2_VRAM_B1 (0x25E60000)
151
# define JO_VDP2_CRAM (0x25F00000)
153
# define JO_VDP2_BANK_SIZE (0x20000)
154
155
# define JO_VDP2_NBG0_CEL_ADR (JO_VDP2_VRAM_A1)
156
# define JO_VDP2_NBG0_MAP_ADR (JO_VDP2_VRAM_B1)
157
# define JO_VDP2_NBG1_CEL_ADR (JO_VDP2_VRAM_A0)
158
# define JO_VDP2_NBG1_MAP_ADR (JO_VDP2_VRAM_B0)
159
160
161
/* 180002 - r/w - EXTEN - External Signal Enable Register
162
bit-> /----15----|----14----|----13----|----12----|----11----|----10----|----09----|----08----\
163
| -- | -- | -- | -- | -- | -- | EXLTEN | EXSYEN |
164
|----07----|----06----|----05----|----04----|----03----|----02----|----01----|----00----|
165
| -- | -- | -- | -- | -- | -- | DASEL | EXBGEN |
166
\----------|----------|----------|----------|----------|----------|----------|---------*/
167
# define JO_VDP2_TVMD (*(volatile unsigned short *)0x25F80000)
// 0x8110 0x8120
168
# define JO_VDP2_EXTEN (*(volatile unsigned short *)0x25F80002)
// 0x0
169
# define JO_VDP2_TVSTAT (*(volatile unsigned short *)0x25F80004)
// N/A
171
# define JO_VDP2_TVSTAT_PAL (1 << 0)
172
173
/* 180006 - r/w - VRSIZE - VRAM Size
174
bit-> /----15----|----14----|----13----|----12----|----11----|----10----|----09----|----08----\
175
| VRAMSZ | -- | -- | -- | -- | -- | -- | -- |
176
|----07----|----06----|----05----|----04----|----03----|----02----|----01----|----00----|
177
| -- | -- | -- | -- | VER3 | VER2 | VER1 | VER0 |
178
\----------|----------|----------|----------|----------|----------|----------|---------*/
179
# define JO_VDP2_VRSIZE (*(volatile unsigned short *)0x25F80006)
// 0x0
180
181
/* 180008 - r/o - HCNT - H-Counter
182
bit-> /----15----|----14----|----13----|----12----|----11----|----10----|----09----|----08----\
183
| -- | -- | -- | -- | -- | -- | HCT9 | HCT8 |
184
|----07----|----06----|----05----|----04----|----03----|----02----|----01----|----00----|
185
| HCT7 | HCT6 | HCT5 | HCT4 | HCT3 | HCT2 | HCT1 | HCT0 |
186
\----------|----------|----------|----------|----------|----------|----------|---------*/
187
# define JO_VDP2_HCNT (*(volatile unsigned short *)0x25F80008)
// 0x275 0x26B
188
189
/* 18000A - r/o - VCNT - V-Counter
190
bit-> /----15----|----14----|----13----|----12----|----11----|----10----|----09----|----08----\
191
| -- | -- | -- | -- | -- | -- | VCT9 | VCT8 |
192
|----07----|----06----|----05----|----04----|----03----|----02----|----01----|----00----|
193
| VCT7 | VCT6 | VCT5 | VCT4 | VCT3 | VCT2 | VCT1 | VCT0 |
194
\----------|----------|----------|----------|----------|----------|----------|---------*/
195
# define JO_VDP2_VCNT (*(volatile unsigned short *)0x25F8000A)
// 0x36
196
197
/* 18000E - r/w - RAMCTL - RAM Control
198
bit-> /----15----|----14----|----13----|----12----|----11----|----10----|----09----|----08----\
199
| CRKTE | -- | CRMD1 | CRMD0 | -- | -- | VRBMD | VRAMD |
200
|----07----|----06----|----05----|----04----|----03----|----02----|----01----|----00----|
201
| RDBSB11 | RDBSB10 | RDBSB01 | RDBSB00 | RDBSA11 | RDBSA10 | RDBSA01 | RDBSA00 |
202
\----------|----------|----------|----------|----------|----------|----------|---------*/
203
# define JO_VDP2_RAMCTL (*(volatile unsigned short *)0x25F8000E)
// 0x1327
204
205
# define JO_VDP2_CYCA0L (*(volatile unsigned short *)0x25F80010)
// 0x5555
206
# define JO_VDP2_CYCA0U (*(volatile unsigned short *)0x25F80012)
// 0xFEEE
207
# define JO_VDP2_CYCA1L (*(volatile unsigned short *)0x25F80014)
// 0x5555
208
# define JO_VDP2_CYCA1U (*(volatile unsigned short *)0x25F80016)
// 0xFEEE
209
# define JO_VDP2_CYCB0L (*(volatile unsigned short *)0x25F80018)
// 0xFFFF
210
# define JO_VDP2_CYCB0U (*(volatile unsigned short *)0x25F8001A)
// 0xEEEE
211
# define JO_VDP2_CYCB1L (*(volatile unsigned short *)0x25F8001C)
// 0x44F
212
# define JO_VDP2_CYCB1U (*(volatile unsigned short *)0x25F8001E)
// 0xEEEE
213
214
/* 180020 - r/w - BGON - SCREEN DISPLAY ENABLE
215
216
this register allows each tilemap to be enabled or disabled and also which layers are solid
217
218
bit-> /----15----|----14----|----13----|----12----|----11----|----10----|----09----|----08----\
219
| -- | -- | -- | R0TPON | N3TPON | N2TPON | N1TPON | N0TPON |
220
|----07----|----06----|----05----|----04----|----03----|----02----|----01----|----00----|
221
| -- | -- | R1ON | R0ON | N3ON | N2ON | N1ON | N0ON |
222
\----------|----------|----------|----------|----------|----------|----------|---------*/
223
# define JO_VDP2_BGON (*(volatile unsigned short *)0x25F80020)
// 0x3
224
225
/*
226
180022 - MZCTL - Mosaic Control
227
bit-> /----15----|----14----|----13----|----12----|----11----|----10----|----09----|----08----\
228
| -- | -- | -- | -- | -- | -- | -- | -- |
229
|----07----|----06----|----05----|----04----|----03----|----02----|----01----|----00----|
230
| -- | -- | -- | -- | -- | -- | -- | -- |
231
\----------|----------|----------|----------|----------|----------|----------|---------*/
232
# define JO_VDP2_MZCTL (*(volatile unsigned short *)0x25F80022)
// 0x0
233
# define JO_VDP2_SFSEL (*(volatile unsigned short *)0x25F80024)
// 0x0
234
# define JO_VDP2_SFCODE (*(volatile unsigned short *)0x25F80026)
// 0x0
235
# define JO_VDP2_CHCTLA (*(volatile unsigned short *)0x25F80028)
// 0x3210
236
# define JO_VDP2_CHCTLB (*(volatile unsigned short *)0x25F8002A)
// 0x1000
237
/*
238
18002C - BMPNA - Bitmap Palette Number (NBG0, NBG1)
239
bit-> /----15----|----14----|----13----|----12----|----11----|----10----|----09----|----08----\
240
| -- | -- | -- | -- | -- | -- | -- | -- |
241
|----07----|----06----|----05----|----04----|----03----|----02----|----01----|----00----|
242
| -- | -- | -- | -- | -- | -- | -- | -- |
243
\----------|----------|----------|----------|----------|----------|----------|---------*/
244
# define JO_VDP2_BMPNA (*(volatile unsigned short *)0x25F8002C)
// 0x0
245
246
/* 18002E - Bitmap Palette Number (RBG0)
247
bit-> /----15----|----14----|----13----|----12----|----11----|----10----|----09----|----08----\
248
| -- | -- | -- | -- | -- | -- | -- | -- |
249
|----07----|----06----|----05----|----04----|----03----|----02----|----01----|----00----|
250
| -- | -- | -- | -- | -- | -- | -- | -- |
251
\----------|----------|----------|----------|----------|----------|----------|---------*/
252
# define JO_VDP2_BMPNB (*(volatile unsigned short *)0x25F8002E)
// 0x0
253
254
/* 180030 - PNCN0 - Pattern Name Control (NBG0)
255
bit-> /----15----|----14----|----13----|----12----|----11----|----10----|----09----|----08----\
256
| N0PNB | N0CNSM | -- | -- | -- | -- | N0SPR | N0SCC |
257
|----07----|----06----|----05----|----04----|----03----|----02----|----01----|----00----|
258
| N0SPLT6 | N0SPLT5 | N0SPLT4 | N0SPCN4 | N0SPCN3 | N0SPCN2 | N0SPCN1 | N0SPCN0 |
259
\----------|----------|----------|----------|----------|----------|----------|---------*/
260
# define JO_VDP2_PNCN0 (*(volatile unsigned short *)0x25F80030)
// 0x800C
261
# define JO_VDP2_PNCN1 (*(volatile unsigned short *)0x25F80032)
// 0xC00E
262
# define JO_VDP2_PNCN2 (*(volatile unsigned short *)0x25F80034)
// 0xC000
263
# define JO_VDP2_PNCN3 (*(volatile unsigned short *)0x25F80036)
// 0xC000
264
# define JO_VDP2_PNCR (*(volatile unsigned short *)0x25F80038)
// 0xC000
265
# define JO_VDP2_PLSZ (*(volatile unsigned short *)0x25F8003A)
// 0x0
266
# define JO_VDP2_MPOFN (*(volatile unsigned short *)0x25F8003C)
// 0x0
267
# define JO_VDP2_MPOFR (*(volatile unsigned short *)0x25F8003E)
// 0x0
268
269
# define JO_VDP2_MPABN0 (*(volatile unsigned short *)0x25F80040)
// 0x3B3B
270
# define JO_VDP2_MPCDN0 (*(volatile unsigned short *)0x25F80042)
// 0x3B3B
271
# define JO_VDP2_MPABN1 (*(volatile unsigned short *)0x25F80044)
// 0x3939
272
# define JO_VDP2_MPCDN1 (*(volatile unsigned short *)0x25F80046)
// 0x3939
273
# define JO_VDP2_MPABN2 (*(volatile unsigned short *)0x25F80048)
// 0x0
274
# define JO_VDP2_MPCDN2 (*(volatile unsigned short *)0x25F8004A)
// 0x0
275
# define JO_VDP2_MPABN3 (*(volatile unsigned short *)0x25F8004C)
// 0x0
276
# define JO_VDP2_MPCDN3 (*(volatile unsigned short *)0x25F8004E)
// 0x0
277
278
# define JO_VDP2_MPABRA (*(volatile unsigned short *)0x25F80050)
// 0x2020
279
# define JO_VDP2_MPCDRA (*(volatile unsigned short *)0x25F80052)
// 0x2020
280
# define JO_VDP2_MPEFRA (*(volatile unsigned short *)0x25F80054)
// 0x2020
281
# define JO_VDP2_MPGHRA (*(volatile unsigned short *)0x25F80056)
// 0x2020
282
# define JO_VDP2_MPIJRA (*(volatile unsigned short *)0x25F80058)
// 0x2020
283
# define JO_VDP2_MPKLRA (*(volatile unsigned short *)0x25F8005A)
// 0x2020
284
# define JO_VDP2_MPMNRA (*(volatile unsigned short *)0x25F8005C)
// 0x2020
285
# define JO_VDP2_MPOPRA (*(volatile unsigned short *)0x25F8005E)
// 0x2020
286
287
# define JO_VDP2_MPABRB (*(volatile unsigned short *)0x25F80060)
// 0x2828
288
# define JO_VDP2_MPCDRB (*(volatile unsigned short *)0x25F80062)
// 0x2828
289
# define JO_VDP2_MPEFRB (*(volatile unsigned short *)0x25F80064)
// 0x2828
290
# define JO_VDP2_MPGHRB (*(volatile unsigned short *)0x25F80066)
// 0x2838
291
# define JO_VDP2_MPIJRB (*(volatile unsigned short *)0x25F80068)
// 0x2828
292
# define JO_VDP2_MPKLRB (*(volatile unsigned short *)0x25F8006A)
// 0x2828
293
# define JO_VDP2_MPMNRB (*(volatile unsigned short *)0x25F8006C)
// 0x2828
294
# define JO_VDP2_MPOPRB (*(volatile unsigned short *)0x25F8006E)
// 0x2828
295
296
# define JO_VDP2_SCXIN0 (*(volatile unsigned short *)0x25F80070)
// 0x0
297
# define JO_VDP2_SCXDN0 (*(volatile unsigned short *)0x25F80072)
// 0x0
298
# define JO_VDP2_SCYIN0 (*(volatile unsigned short *)0x25F80074)
// 0x0
299
# define JO_VDP2_SCYDN0 (*(volatile unsigned short *)0x25F80076)
// 0x0
300
# define JO_VDP2_ZMXIN0 (*(volatile unsigned short *)0x25F80078)
// 0x1
301
# define JO_VDP2_ZMXDN0 (*(volatile unsigned short *)0x25F8007A)
// 0x0
302
# define JO_VDP2_ZMYIN0 (*(volatile unsigned short *)0x25F8007C)
// 0x1
303
# define JO_VDP2_ZMYDN0 (*(volatile unsigned short *)0x25F8007E)
// 0x0
304
305
# define JO_VDP2_SCXIN1 (*(volatile unsigned short *)0x25F80080)
// 0x0
306
# define JO_VDP2_SCXDN1 (*(volatile unsigned short *)0x25F80082)
// 0x0
307
# define JO_VDP2_SCYIN1 (*(volatile unsigned short *)0x25F80084)
// 0x0
308
# define JO_VDP2_SCYDN1 (*(volatile unsigned short *)0x25F80086)
// 0x0
309
# define JO_VDP2_ZMXIN1 (*(volatile unsigned short *)0x25F80088)
// 0x1
310
# define JO_VDP2_ZMXDN1 (*(volatile unsigned short *)0x25F8008A)
// 0x0
311
# define JO_VDP2_ZMYIN1 (*(volatile unsigned short *)0x25F8008C)
// 0x1
312
# define JO_VDP2_ZMYDN1 (*(volatile unsigned short *)0x25F8008E)
// 0x0
313
314
# define JO_VDP2_SCXN2 (*(volatile unsigned short *)0x25F80090)
// 0x0
315
# define JO_VDP2_SCYN2 (*(volatile unsigned short *)0x25F80092)
// 0x0
316
# define JO_VDP2_SCXN3 (*(volatile unsigned short *)0x25F80094)
// 0x0
317
# define JO_VDP2_SCYN3 (*(volatile unsigned short *)0x25F80096)
// 0x0
318
# define JO_VDP2_ZMCTL (*(volatile unsigned short *)0x25F80098)
// 0x0
319
# define JO_VDP2_SCRCTL (*(volatile unsigned short *)0x25F8009A)
// 0x0
320
# define JO_VDP2_VCSTAU (*(volatile unsigned short *)0x25F8009C)
// 0x0
321
# define JO_VDP2_VCSTAL (*(volatile unsigned short *)0x25F8009E)
// 0x0
322
323
# define JO_VDP2_LSTA0U (*(volatile unsigned short *)0x25F800A0)
// 0x0
324
# define JO_VDP2_LSTA0L (*(volatile unsigned short *)0x25F800A2)
// 0x0
325
# define JO_VDP2_LSTA1U (*(volatile unsigned short *)0x25F800A4)
// 0x0
326
# define JO_VDP2_LSTA1L (*(volatile unsigned short *)0x25F800A6)
// 0x0
327
# define JO_VDP2_LCTAU (*(volatile unsigned short *)0x25F800A8)
// 0x0
328
# define JO_VDP2_LCTAL (*(volatile unsigned short *)0x25F800AA)
// 0x0
329
# define JO_VDP2_BKTAU (*(volatile unsigned short *)0x25F800AC)
// 0x12F1
330
# define JO_VDP2_BKTAL (*(volatile unsigned short *)0x25F800AE)
// 0xFFFF
331
332
# define JO_VDP2_RPMD (*(volatile unsigned short *)0x25F800B0)
// 0x0
333
# define JO_VDP2_RPRCTL (*(volatile unsigned short *)0x25F800B2)
// 0x0
334
# define JO_VDP2_KTCTL (*(volatile unsigned short *)0x25F800B4)
// 0x0
335
# define JO_VDP2_KTAOF (*(volatile unsigned short *)0x25F800B6)
// 0x0
336
# define JO_VDP2_OVPNRA (*(volatile unsigned short *)0x25F800B8)
// 0x0
337
# define JO_VDP2_OVPNRB (*(volatile unsigned short *)0x25F800BA)
// 0x0
338
# define JO_VDP2_RPTAU (*(volatile unsigned short *)0x25F800BC)
// 0x1
339
# define JO_VDP2_RPTAL (*(volatile unsigned short *)0x25F800BE)
// 0xFF80
340
341
# define JO_VDP2_WPSX0 (*(volatile unsigned short *)0x25F800C0)
// 0x0
342
# define JO_VDP2_WPSY0 (*(volatile unsigned short *)0x25F800C2)
// 0x0
343
# define JO_VDP2_WPEX0 (*(volatile unsigned short *)0x25F800C4)
// 0x27E SCRW-1
344
# define JO_VDP2_WPEY0 (*(volatile unsigned short *)0x25F800C6)
// 0x1BE SCRH-1
345
# define JO_VDP2_WPSX1 (*(volatile unsigned short *)0x25F800C8)
// 0x0
346
# define JO_VDP2_WPSY1 (*(volatile unsigned short *)0x25F800CA)
// 0x0
347
# define JO_VDP2_WPEX1 (*(volatile unsigned short *)0x25F800CC)
// 0x27E SCRW-1
348
# define JO_VDP2_WPEY1 (*(volatile unsigned short *)0x25F800CE)
// 0x1BE SCRH-1
349
350
# define JO_VDP2_WCTLA (*(volatile unsigned short *)0x25F800D0)
// 0x0
351
# define JO_VDP2_WCTLB (*(volatile unsigned short *)0x25F800D2)
// 0x0
352
# define JO_VDP2_WCTLC (*(volatile unsigned short *)0x25F800D4)
// 0x0
353
# define JO_VDP2_WCTLD (*(volatile unsigned short *)0x25F800D6)
// 0x0
354
# define JO_VDP2_LWTA0U (*(volatile unsigned short *)0x25F800D8)
// 0x0
355
# define JO_VDP2_LWTA0L (*(volatile unsigned short *)0x25F800DA)
// 0x0
356
# define JO_VDP2_LWTA1U (*(volatile unsigned short *)0x25F800DC)
// 0x0
357
# define JO_VDP2_LWTA1L (*(volatile unsigned short *)0x25F800DE)
// 0x0
358
359
# define JO_VDP2_SPCTL (*(volatile unsigned short *)0x25F800E0)
// 0x23
360
# define JO_VDP2_SDCTL (*(volatile unsigned short *)0x25F800E2)
// 0x0
361
# define JO_VDP2_CRAOFA (*(volatile unsigned short *)0x25F800E4)
// 0x0
362
# define JO_VDP2_CRAOFB (*(volatile unsigned short *)0x25F800E6)
// 0x0
364
# define JO_VDP2_CRAOFB_SPRITE_OFFSET_MASK (0x00F0)
366
# define JO_VDP2_CRAOFB_SPRITE_OFFSET(N) (((N) & 7) << 4)
367
# define JO_VDP2_LNCLEN (*(volatile unsigned short *)0x25F800E8)
// 0x0
368
# define JO_VDP2_SFPRMD (*(volatile unsigned short *)0x25F800EA)
// 0x0
369
# define JO_VDP2_CCCTL (*(volatile unsigned short *)0x25F800EC)
// 0x0
370
# define JO_VDP2_SFCCMD (*(volatile unsigned short *)0x25F800EE)
// 0x0
371
372
# define JO_VDP2_PRISA (*(volatile unsigned short *)0x25F800F0)
// 0x506
373
# define JO_VDP2_PRISB (*(volatile unsigned short *)0x25F800F2)
// 0x505
374
# define JO_VDP2_PRISC (*(volatile unsigned short *)0x25F800F4)
// 0x505
375
# define JO_VDP2_PRISD (*(volatile unsigned short *)0x25F800F6)
// 0x505
376
# define JO_VDP2_PRINA (*(volatile unsigned short *)0x25F800F8)
// 0x607
377
# define JO_VDP2_PRINB (*(volatile unsigned short *)0x25F800FA)
// 0x102
378
# define JO_VDP2_PRIR (*(volatile unsigned short *)0x25F800FC)
// 0x4
379
# define JO_VDP2_RESERVE (*(volatile unsigned short *)0x25F800FE)
// 0x0
380
381
# define JO_VDP2_CCRSA (*(volatile unsigned short *)0x25F80100)
// 0x0
382
# define JO_VDP2_CCRSB (*(volatile unsigned short *)0x25F80102)
// 0x0
383
# define JO_VDP2_CCRSC (*(volatile unsigned short *)0x25F80104)
// 0x0
384
# define JO_VDP2_CCRSD (*(volatile unsigned short *)0x25F80106)
// 0x0
385
# define JO_VDP2_CCRNA (*(volatile unsigned short *)0x25F80108)
// 0x0
386
# define JO_VDP2_CCRNB (*(volatile unsigned short *)0x25F8010A)
// 0x0
387
# define JO_VDP2_CCRR (*(volatile unsigned short *)0x25F8010C)
// 0x0
388
# define JO_VDP2_CCRLB (*(volatile unsigned short *)0x25F8010E)
// 0x0
389
390
# define JO_VDP2_CLOFEN (*(volatile unsigned short *)0x25F80110)
// 0x0
391
# define JO_VDP2_CLOFSL (*(volatile unsigned short *)0x25F80112)
// 0x0
392
# define JO_VDP2_COAR (*(volatile unsigned short *)0x25F80114)
// 0x0
393
# define JO_VDP2_COAG (*(volatile unsigned short *)0x25F80116)
// 0x0
394
# define JO_VDP2_COAB (*(volatile unsigned short *)0x25F80118)
// 0x0
395
# define JO_VDP2_COBR (*(volatile unsigned short *)0x25F8011A)
// 0x0
396
# define JO_VDP2_COBG (*(volatile unsigned short *)0x25F8011C)
// 0x0
397
# define JO_VDP2_COBB (*(volatile unsigned short *)0x25F8011E)
// 0x0
398
399
/*
400
██╗ ██╗ ██████╗ ██████╗ ██╗ ██╗ ██████╗ █████╗ ███╗ ███╗
401
██║ ██║██╔═══██╗██╔══██╗██║ ██╔╝ ██╔══██╗██╔══██╗████╗ ████║
402
██║ █╗ ██║██║ ██║██████╔╝█████╔╝ ██████╔╝███████║██╔████╔██║
403
██║███╗██║██║ ██║██╔══██╗██╔═██╗ ██╔══██╗██╔══██║██║╚██╔╝██║
404
╚███╔███╔╝╚██████╔╝██║ ██║██║ ██╗ ██║ ██║██║ ██║██║ ╚═╝ ██║
405
╚══╝╚══╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝
406
407
*/
408
410
# define JO_WORK_RAM_HIGH (0x06000000)
412
# define JO_WORK_RAM_LOW (0x00200000)
414
# define JO_WORK_RAM_SIZE (0x100000)
416
# define JO_WORK_RAM_BOOT_ROM (0x06000000)
418
# define JO_WORK_RAM_SLAVE_CPU_STACK_AREA (0x06000800)
420
# define JO_WORK_RAM_MASTER_CPU_DEFAULT_STACK (0x06001000)
422
# define JO_WORK_RAM_UNKNOWN_USAGE (0x06002000)
424
# define JO_WORK_RAM_USER_PROGRAM_AND_DATA (0x06004000)
426
extern
unsigned
int
_jo_work_start
;
427
# define JO_WORK_RAM_ENGINE_WORK ((unsigned int)&_jo_work_start)
429
# define JO_WORK_RAM_USER_PROGRAM_AND_DATA_END (JO_WORK_RAM_ENGINE_WORK)
431
# define JO_WORK_RAM_STACK_TOP (0x060FFC00)
433
# define JO_WORK_RAM_STACK_BOTTOM (0x060FBC00)
435
# define JO_WORK_RAM_SLAVE_STACK_TOP (0x06004000)
436
438
# define JO_RAM_CARTRIDGE_ID (*(volatile unsigned char *)0x24FFFFFF)
440
# define JO_RAM_CARTRIDGE_ID_8MBITS (0x5a)
442
# define JO_RAM_CARTRIDGE_ID_32MBITS (0x5c)
444
# define JO_RAM_CARTRIDGE_ENABLE (*(volatile unsigned short *)0x257EFFFE)
446
# define JO_RAM_CARTRIDGE_ADDRESS (0x22400000)
448
# define JO_RAM_CARTRIDGE_8MBITS_BANK2_ADDRESS (0x22600000)
450
# define JO_RAM_CARTRIDGE_8MBITS_BANK_SIZE (0x80000)
452
# define JO_RAM_CARTRIDGE_32MBITS_SIZE (0x400000)
454
# define JO_RAM_CARTRIDGE_ASR0 (0x23301FF0)
456
# define JO_RAM_CARTRIDGE_AREF (0x00000013)
457
459
# define JO_WORK_RAM_ENGINE_WORK_SECTION __attribute__((section("JO_WORK")))
461
# define JO_WORK_RAM_ENGINE_WORK_ALIGNED_SECTION __attribute__((section("JO_WORK_ALIGNED")))
462
463
/*
464
███████╗ ██████╗██╗ ██╗
465
██╔════╝██╔════╝██║ ██║
466
███████╗██║ ██║ ██║
467
╚════██║██║ ██║ ██║
468
███████║╚██████╗╚██████╔╝
469
╚══════╝ ╚═════╝ ╚═════╝
470
*/
471
473
# define JO_SCU_IMS (*(volatile unsigned int *)0x25FE00A0)
476
# define JO_BIOS_SCU_IMS (*(volatile unsigned int *)0x06000348)
479
# define JO_BIOS_CHANGE_SYSTEM_CLOCK(CLOCK) ((**(void (**)(unsigned int))0x06000320)(CLOCK))
481
# define JO_BIOS_SYSTEM_CLOCK_320 (0)
483
# define JO_BIOS_SYSTEM_CLOCK_352 (1)
485
# define JO_SCU_IST (*(volatile unsigned int *)0x25FE00A4)
487
# define JO_SCU_ASR0 (*(volatile unsigned int *)0x25FE00B0)
489
# define JO_SCU_AREF (*(volatile unsigned int *)0x25FE00B8)
491
# define JO_SCU_DMA_READ(N) (*(volatile unsigned int *)(0x25FE0000 + (N) * 0x20))
492
# define JO_SCU_DMA_WRITE(N) (*(volatile unsigned int *)(0x25FE0004 + (N) * 0x20))
493
# define JO_SCU_DMA_COUNT(N) (*(volatile unsigned int *)(0x25FE0008 + (N) * 0x20))
494
# define JO_SCU_DMA_ADD(N) (*(volatile unsigned int *)(0x25FE000C + (N) * 0x20))
495
# define JO_SCU_DMA_ENABLE(N) (*(volatile unsigned int *)(0x25FE0010 + (N) * 0x20))
496
# define JO_SCU_DMA_MODE(N) (*(volatile unsigned int *)(0x25FE0014 + (N) * 0x20))
498
# define JO_SCU_DMA_STATUS (*(volatile unsigned int *)0x25FE007C)
500
# define JO_SCU_DMA_STATUS_BUSY(N) (1 << (4 + (N) * 4))
502
# define JO_SCU_DMA_ADD_READ4_WRITE2 (0x101)
504
# define JO_SCU_DMA_ENABLE_START (0x101)
506
# define JO_SCU_DMA_MODE_DIRECT (0x00000007)
508
# define JO_SCU_DMA_MODE_INDIRECT (0x01000007)
510
# define JO_SCU_DMA_INDIRECT_END (0x80000000)
511
513
# define JO_SCU_INT_VBLANK_IN (1 << 0)
514
# define JO_SCU_INT_VBLANK_OUT (1 << 1)
515
# define JO_SCU_INT_HBLANK_IN (1 << 2)
516
# define JO_SCU_INT_TIMER0 (1 << 3)
517
# define JO_SCU_INT_TIMER1 (1 << 4)
518
# define JO_SCU_INT_SOUND (1 << 6)
519
# define JO_SCU_INT_SMPC (1 << 7)
520
# define JO_SCU_INT_SPRITE_END (1 << 13)
521
# define JO_SCU_INT_ALL (0x0000BFFF)
522
524
# define JO_VECTOR_VBLANK_IN (0x40)
525
# define JO_VECTOR_VBLANK_OUT (0x41)
526
# define JO_VECTOR_HBLANK_IN (0x42)
527
# define JO_VECTOR_TIMER0 (0x43)
528
# define JO_VECTOR_TIMER1 (0x44)
529
# define JO_VECTOR_SOUND (0x46)
530
# define JO_VECTOR_SMPC (0x47)
531
# define JO_VECTOR_SPRITE_END (0x4D)
532
533
/*
534
███████╗██╗ ██╗ ██████╗
535
██╔════╝██║ ██║ ╚════██╗
536
███████╗███████║ █████╔╝
537
╚════██║██╔══██║ ██╔═══╝
538
███████║██║ ██║ ███████╗
539
╚══════╝╚═╝ ╚═╝ ╚══════╝
540
*/
541
543
# define JO_CACHE_THROUGH(ADDR) ((unsigned int)(ADDR) | 0x20000000)
545
# define JO_SH2_CCR (*(volatile unsigned char *)0xFFFFFE92)
547
# define JO_SH2_CCR_CACHE_ENABLE (1 << 0)
549
# define JO_SH2_CCR_CACHE_PURGE (1 << 4)
551
# define JO_SH2_SR_INTERRUPT_MASK (0xF0)
553
# define JO_SH2_SR_INTERRUPTS_ON (0x00)
555
# define JO_SH2_FRT_TIER (*(volatile unsigned char *)0xFFFFFE10)
557
# define JO_SH2_FRT_FTCSR (*(volatile unsigned char *)0xFFFFFE11)
559
# define JO_SH2_FRT_TIER_NO_INTERRUPT (1 << 0)
561
# define JO_SH2_FRT_FTCSR_ICF (1 << 7)
563
# define JO_SH2_FRT_FTCSR_OCFA (1 << 3)
565
# define JO_SH2_FRT_TIER_ICIE (1 << 7)
567
# define JO_SH2_FRT_TIER_OCIAE (1 << 3)
569
# define JO_SH2_FRT_OCRAH (*(volatile unsigned char *)0xFFFFFE14)
571
# define JO_SH2_FRT_OCRAL (*(volatile unsigned char *)0xFFFFFE15)
573
# define JO_SH2_FRT_TOCR (*(volatile unsigned char *)0xFFFFFE17)
575
# define JO_SH2_FRT_TOCR_OCRA (0xE0)
577
# define JO_SH2_IPRB (*(volatile unsigned short *)0xFFFFFE60)
579
# define JO_SH2_VCRC (*(volatile unsigned short *)0xFFFFFE66)
581
# define JO_SH2_DVSR (*(volatile int *)0xFFFFFF00)
583
# define JO_SH2_DVDNT (*(volatile int *)0xFFFFFF04)
585
# define JO_SH2_DVDNTH (*(volatile int *)0xFFFFFF10)
587
# define JO_SH2_DVDNTL (*(volatile int *)0xFFFFFF14)
589
# define JO_SH2_SAR0 (*(volatile unsigned int *)0xFFFFFF80)
591
# define JO_SH2_DAR0 (*(volatile unsigned int *)0xFFFFFF84)
593
# define JO_SH2_TCR0 (*(volatile unsigned int *)0xFFFFFF88)
595
# define JO_SH2_CHCR0 (*(volatile unsigned int *)0xFFFFFF8C)
597
# define JO_SH2_DMAOR (*(volatile unsigned int *)0xFFFFFFB0)
599
# define JO_SH2_CHCR_DEST_INCREMENT (1 << 14)
601
# define JO_SH2_CHCR_SRC_INCREMENT (1 << 12)
603
# define JO_SH2_CHCR_SIZE_8 (0 << 10)
605
# define JO_SH2_CHCR_SIZE_16 (1 << 10)
607
# define JO_SH2_CHCR_SIZE_32 (2 << 10)
609
# define JO_SH2_CHCR_AUTO_REQUEST (1 << 9)
611
# define JO_SH2_CHCR_TRANSFER_END (1 << 1)
613
# define JO_SH2_CHCR_ENABLE (1 << 0)
615
# define JO_SH2_DMAOR_ENABLE (1 << 0)
617
# define JO_SH2_CACHE_PURGE_AREA (0x40000000)
619
# define JO_SH2_CACHE_LINE_SIZE (16)
620
621
/*
622
███████╗ ██████╗███████╗██████╗
623
██╔════╝██╔════╝██╔════╝██╔══██╗
624
███████╗██║ ███████╗██████╔╝
625
╚════██║██║ ╚════██║██╔═══╝
626
███████║╚██████╗███████║██║
627
╚══════╝ ╚═════╝╚══════╝╚═╝
628
*/
629
631
# define JO_SOUND_RAM (0x25A00000)
633
# define JO_SCSP_SLOT(SLOT, OFFSET) (*(volatile unsigned short *)(0x25B00000 + ((SLOT) << 5) + (OFFSET)))
635
# define JO_SCSP_COMMON(OFFSET) (*(volatile unsigned short *)(0x25B00400 + (OFFSET)))
636
638
# define JO_SCSP_SLOT_COUNT (32)
639
640
/*
641
** SCSP slot registers (offset in bytes)
642
*/
644
# define JO_SCSP_SLOT_CONTROL (0x00)
646
# define JO_SCSP_SLOT_START_ADDRESS (0x02)
648
# define JO_SCSP_SLOT_LOOP_START (0x04)
650
# define JO_SCSP_SLOT_LOOP_END (0x06)
652
# define JO_SCSP_SLOT_ENVELOPE_ATTACK (0x08)
654
# define JO_SCSP_SLOT_ENVELOPE_RELEASE (0x0A)
656
# define JO_SCSP_SLOT_TOTAL_LEVEL (0x0C)
658
# define JO_SCSP_SLOT_MODULATION (0x0E)
660
# define JO_SCSP_SLOT_PITCH (0x10)
662
# define JO_SCSP_SLOT_LFO (0x12)
664
# define JO_SCSP_SLOT_DSP_INPUT (0x14)
666
# define JO_SCSP_SLOT_MIXER (0x16)
667
668
/*
669
** JO_SCSP_SLOT_CONTROL fields
670
*/
672
# define JO_SCSP_KEY_ON_EXECUTE (1 << 12)
674
# define JO_SCSP_KEY_ON (1 << 11)
676
# define JO_SCSP_KEY_MASK (0x07FF)
678
# define JO_SCSP_LOOP_NORMAL (1 << 5)
680
# define JO_SCSP_PCM_8BITS (1 << 4)
682
# define JO_SCSP_START_ADDRESS_HIGH(ADDR) (((ADDR) >> 16) & 0xF)
684
# define JO_SCSP_START_ADDRESS_LOW(ADDR) ((ADDR) & 0xFFFF)
685
687
# define JO_SCSP_SOURCE_NOISE (1 << 7)
688
690
# define JO_SCSP_ENVELOPE_ATTACK(AR, D1R, D2R) ((((D2R) & 0x1F) << 11) | (((D1R) & 0x1F) << 6) | ((AR) & 0x1F))
693
# define JO_SCSP_ENVELOPE_RELEASE(RR) ((0xF << 10) | ((RR) & 0x1F))
696
# define JO_SCSP_MODULATION(MDL, X, Y) ((((MDL) & 0xF) << 12) | (((X) & 0x3F) << 6) | ((Y) & 0x3F))
698
# define JO_SCSP_LFO(LFOF, ALFOWS, ALFOS) ((((LFOF) & 0x1F) << 10) | (((ALFOWS) & 3) << 3) | ((ALFOS) & 7))
700
# define JO_SCSP_LFO_TRIANGLE (2)
703
# define JO_SCSP_DSP_SEND(ISEL, IMXL) ((((ISEL) & 0xF) << 3) | ((IMXL) & 7))
704
706
# define JO_SCSP_ATTACK_RATE_MAX (0x1F)
708
# define JO_SCSP_RELEASE_RATE_MAX (0x1F)
709
714
# define JO_SCSP_PITCH(OCT, FNS) ((((OCT) & 0xF) << 11) | ((FNS) & 0x3FF))
716
# define JO_SCSP_FNS_MAX (1023)
718
# define JO_SCSP_FNS_PER_OCTAVE (1024)
720
# define JO_SCSP_BASE_SAMPLING_RATE (44100)
724
# define JO_SCSP_TOTAL_LEVEL(VOLUME) (((127 - ((VOLUME) & 127)) << 1) & 0xFF)
725
731
static
__jo_force_inline
unsigned
short
__jo_scsp_pitch
(
unsigned
int
rate)
732
{
733
int
oct;
734
unsigned
int
base;
735
unsigned
int
fns;
736
737
if
(rate == 0)
738
rate =
JO_SCSP_BASE_SAMPLING_RATE
;
739
oct = 0;
740
base =
JO_SCSP_BASE_SAMPLING_RATE
;
741
while
(rate < base && oct > -8)
742
{
743
base >>= 1;
744
--oct;
745
}
746
while
(rate >= (base << 1) && oct < 7)
747
{
748
base <<= 1;
749
++oct;
750
}
751
fns = ((rate - base) *
JO_SCSP_FNS_PER_OCTAVE
) / base;
752
if
(fns >
JO_SCSP_FNS_MAX
)
753
fns =
JO_SCSP_FNS_MAX
;
754
return
((
unsigned
short
)
JO_SCSP_PITCH
(oct, fns));
755
}
756
757
/*
758
** JO_SCSP_SLOT_MIXER fields
759
*/
761
# define JO_SCSP_DIRECT_LEVEL(LEVEL) ((LEVEL) << 13)
763
# define JO_SCSP_DIRECT_PAN(PAN) (((PAN) & 0x1F) << 8)
765
# define JO_SCSP_EFFECT_LEVEL(LEVEL) ((LEVEL) << 5)
767
# define JO_SCSP_EFFECT_PAN(PAN) ((PAN) & 0x1F)
769
# define JO_SCSP_PAN_CENTER (0x00)
771
# define JO_SCSP_PAN_LEFT_SIDE (0x10)
773
# define JO_SCSP_PAN_RIGHT (0x0F)
775
# define JO_SCSP_PAN_LEFT (0x1F)
777
# define JO_SCSP_LEVEL_MAX (7)
778
780
# define JO_SCSP_CDDA_LEFT_SLOT (16)
782
# define JO_SCSP_CDDA_RIGHT_SLOT (17)
783
784
/*
785
** SCSP common registers
786
*/
788
# define JO_SCSP_COMMON_MASTER_VOLUME (0x00)
790
# define JO_SCSP_COMMON_RING_BUFFER (0x02)
793
# define JO_SCSP_DSP_AREA (0x25B00700)
794
# define JO_SCSP_DSP_AREA_SIZE (0x500)
796
# define JO_SCSP_DSP_COEF (0x000)
798
# define JO_SCSP_DSP_ADDRESS (0x080)
800
# define JO_SCSP_DSP_PROGRAM (0x100)
802
# define JO_SCSP_DSP_FLOAT_ZERO (0x6000)
807
# define JO_SCSP_RING_BUFFER(WORDS, ADDR) ((((WORDS) >= 65536 ? 3 : (WORDS) >= 32768 ? 2 : (WORDS) >= 16384 ? 1 : 0) << 7) | (((ADDR) >> 13) & 0x7F))
809
# define JO_SCSP_MASTER_VOLUME_MASK (0x000F)
811
# define JO_SCSP_MASTER_VOLUME_MAX (0x000F)
812
813
/*
814
██╗ ██╗███████╗██╗ ██████╗ ███████╗██████╗ ███████╗
815
██║ ██║██╔════╝██║ ██╔══██╗██╔════╝██╔══██╗██╔════╝
816
███████║█████╗ ██║ ██████╔╝█████╗ ██████╔╝███████╗
817
██╔══██║██╔══╝ ██║ ██╔═══╝ ██╔══╝ ██╔══██╗╚════██║
818
██║ ██║███████╗███████╗██║ ███████╗██║ ██║███████║
819
╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚══════╝╚═╝ ╚═╝╚══════╝
820
821
*/
822
826
# define JO_IS_PTR_INSIDE_USER_RAM_AREA(PTR) (((unsigned int)(PTR)) >= JO_WORK_RAM_USER_PROGRAM_AND_DATA && \
827
((unsigned int)(PTR)) < JO_WORK_RAM_USER_PROGRAM_AND_DATA_END)
828
832
# define JO_IS_ARRAY_INSIDE_USER_RAM_AREA(ARRAY) (JO_IS_PTR_INSIDE_USER_RAM_AREA((unsigned char *)ARRAY) && \
833
JO_IS_PTR_INSIDE_USER_RAM_AREA(((unsigned char *)ARRAY) + sizeof(ARRAY)))
834
835
#endif
/* !__JO_SEGA_SATURN_H__ */
836
837
/*
838
** END OF FILE
839
*/
JO_SCSP_FNS_PER_OCTAVE
#define JO_SCSP_FNS_PER_OCTAVE
Frequency number count per octave.
Definition
sega_saturn.h:718
JO_SCSP_BASE_SAMPLING_RATE
#define JO_SCSP_BASE_SAMPLING_RATE
Sampling rate at octave 0 and frequency number 0 (Hz).
Definition
sega_saturn.h:720
JO_SCSP_PITCH
#define JO_SCSP_PITCH(OCT, FNS)
Pitch register value.
Definition
sega_saturn.h:714
JO_SCSP_FNS_MAX
#define JO_SCSP_FNS_MAX
Maximum frequency number.
Definition
sega_saturn.h:716
_jo_work_start
unsigned int _jo_work_start
Start of the engine work area (VDP1 command lists, 3D buffers, etc): after the program and its data (...
__jo_scsp_pitch
static __jo_force_inline unsigned short __jo_scsp_pitch(unsigned int rate)
Pitch register value for a sampling rate (Internal usage).
Definition
sega_saturn.h:731
__jo_force_inline
#define __jo_force_inline
force inline attribute (and prevent Doxygen prototype parsing bug)
Definition
types.h:39
Generated by
1.18.0