Loading...
Searching...
No Matches
superfx.h
Go to the documentation of this file.
1
18#ifndef SNES_SUPERFX_H
19#define SNES_SUPERFX_H
20
21#include <snes/types.h>
22
23/*============================================================================
24 * GSU Register Definitions ($3000-$303F)
25 *============================================================================*/
26
27#define REG_GSU_R0 (*(volatile u16*)0x3000)
28#define REG_GSU_R1 (*(volatile u16*)0x3002)
29#define REG_GSU_R2 (*(volatile u16*)0x3004)
30#define REG_GSU_R3 (*(volatile u16*)0x3006)
31#define REG_GSU_R4 (*(volatile u16*)0x3008)
32#define REG_GSU_R5 (*(volatile u16*)0x300A)
33#define REG_GSU_R6 (*(volatile u16*)0x300C)
34#define REG_GSU_R7 (*(volatile u16*)0x300E)
35#define REG_GSU_R8 (*(volatile u16*)0x3010)
36#define REG_GSU_R9 (*(volatile u16*)0x3012)
37#define REG_GSU_R10 (*(volatile u16*)0x3014)
38#define REG_GSU_R11 (*(volatile u16*)0x3016)
39#define REG_GSU_R12 (*(volatile u16*)0x3018)
40#define REG_GSU_R13 (*(volatile u16*)0x301A)
41#define REG_GSU_R14 (*(volatile u16*)0x301C)
42#define REG_GSU_R15 (*(volatile u16*)0x301E)
43
44#define REG_SFR (*(volatile u16*)0x3030)
45#define REG_SFR_L (*(volatile u8*)0x3030)
46#define SFR_GO 0x20
47
48#define REG_BRAMR (*(volatile u8*)0x3033)
49#define REG_PBR (*(volatile u8*)0x3034)
50#define REG_ROMBR (*(volatile u8*)0x3036)
51#define REG_SCBR (*(volatile u8*)0x3038)
52#define REG_CLSR (*(volatile u8*)0x3039)
53#define REG_SCMR (*(volatile u8*)0x303A)
54#define REG_VCR (*(volatile u8*)0x303B)
55#define REG_RAMBR (*(volatile u8*)0x303C)
56#define REG_CBR (*(volatile u16*)0x303E)
57
58#define CLSR_10MHZ 0x00
59#define CLSR_21MHZ 0x01
60
61#define SCMR_2BPP 0x00
62#define SCMR_4BPP 0x01
63#define SCMR_8BPP 0x03
64#define SCMR_RAN 0x08
65#define SCMR_RON 0x10
66#define SCMR_H128 0x00
67#define SCMR_H160 0x04
68#define SCMR_H192 0x20
69
70#define GSU_SRAM_BASE 0x700000
71
72/*============================================================================
73 * Library Configuration Variables (defined in lib/source/superfx.asm)
74 * Set these BEFORE calling gsuLaunch().
75 *============================================================================*/
76
78extern u8 gsu_prog_bank;
79
81extern u16 gsu_prog_addr;
82
84extern u8 gsu_cfgr;
85
87extern u8 gsu_scmr;
88
90extern u8 gsu_scbr;
91
93extern u8 gsu_dma_src_hi;
94
96extern u8 superfx_status;
97
98/*============================================================================
99 * API Functions
100 *============================================================================*/
101
109
117extern void gsuLaunch(void);
118
123extern void gsuSetupBitmapTilemap(u16 vramAddr);
124
131extern void gsuDmaFullFrame(void);
132
141extern void gsuSetupHdmaBlanking(u16 topBlank, u16 bottomBlank);
142
143#endif /* SNES_SUPERFX_H */
unsigned short u16
16-bit unsigned integer (0 to 65535)
Definition types.h:52
unsigned char u8
8-bit unsigned integer (0 to 255)
Definition types.h:46
u8 gsu_dma_src_hi
DMA source high byte ($00=buffer A at $70:0000, $40=buffer B at $70:4000)
void gsuSetupBitmapTilemap(u16 vramAddr)
Setup column-major tilemap for SuperFX PLOT framebuffer.
u8 gsu_cfgr
CFGR register value ($80=IRQ mask, $A0=IRQ mask + fast multiply)
u8 gsu_prog_bank
GSU program bank byte (set by gsuSetProgram)
u16 gsu_prog_addr
GSU program 16-bit address (set by gsuSetProgram)
u8 gsu_scbr
SCBR screen base ($00=buffer A, $10=buffer B)
u8 gsuInit(void)
Initialize SuperFX — detect hardware, set default config.
void gsuDmaFullFrame(void)
Scanline-polled 16KB DMA from SRAM to VRAM (60 FPS)
void gsuSetupHdmaBlanking(u16 topBlank, u16 bottomBlank)
Setup HDMA screen blanking for DMA bandwidth.
u8 superfx_status
SuperFX status from crt0 init (VCR chip version, 0=not detected)
u8 gsu_scmr
SCMR register value ($18=RAN+RON, $19=4bpp+RAN+RON)
void gsuLaunch(void)
Launch GSU program and wait for completion (WRAM-safe)
OpenSNES Standard Types.