SuperFX (GSU) coprocessor library — registers, config, and API. More...
#include <snes/types.h>Go to the source code of this file.
Macros | |
| #define | CLSR_10MHZ 0x00 |
| #define | CLSR_21MHZ 0x01 |
| #define | GSU_SRAM_BASE 0x700000 |
| #define | REG_BRAMR (*(volatile u8*)0x3033) |
| #define | REG_CBR (*(volatile u16*)0x303E) |
| #define | REG_CLSR (*(volatile u8*)0x3039) |
| #define | REG_GSU_R0 (*(volatile u16*)0x3000) |
| #define | REG_GSU_R1 (*(volatile u16*)0x3002) |
| #define | REG_GSU_R10 (*(volatile u16*)0x3014) |
| #define | REG_GSU_R11 (*(volatile u16*)0x3016) |
| #define | REG_GSU_R12 (*(volatile u16*)0x3018) |
| #define | REG_GSU_R13 (*(volatile u16*)0x301A) |
| #define | REG_GSU_R14 (*(volatile u16*)0x301C) |
| #define | REG_GSU_R15 (*(volatile u16*)0x301E) |
| #define | REG_GSU_R2 (*(volatile u16*)0x3004) |
| #define | REG_GSU_R3 (*(volatile u16*)0x3006) |
| #define | REG_GSU_R4 (*(volatile u16*)0x3008) |
| #define | REG_GSU_R5 (*(volatile u16*)0x300A) |
| #define | REG_GSU_R6 (*(volatile u16*)0x300C) |
| #define | REG_GSU_R7 (*(volatile u16*)0x300E) |
| #define | REG_GSU_R8 (*(volatile u16*)0x3010) |
| #define | REG_GSU_R9 (*(volatile u16*)0x3012) |
| #define | REG_PBR (*(volatile u8*)0x3034) |
| #define | REG_RAMBR (*(volatile u8*)0x303C) |
| #define | REG_ROMBR (*(volatile u8*)0x3036) |
| #define | REG_SCBR (*(volatile u8*)0x3038) |
| #define | REG_SCMR (*(volatile u8*)0x303A) |
| #define | REG_SFR (*(volatile u16*)0x3030) |
| #define | REG_SFR_L (*(volatile u8*)0x3030) |
| #define | REG_VCR (*(volatile u8*)0x303B) |
| #define | SCMR_2BPP 0x00 |
| #define | SCMR_4BPP 0x01 |
| #define | SCMR_8BPP 0x03 |
| #define | SCMR_H128 0x00 |
| #define | SCMR_H160 0x04 |
| #define | SCMR_H192 0x20 |
| #define | SCMR_RAN 0x08 |
| #define | SCMR_RON 0x10 |
| #define | SFR_GO 0x20 |
Functions | |
| void | gsuDmaFullFrame (void) |
| Scanline-polled 16KB DMA from SRAM to VRAM (60 FPS) | |
| u8 | gsuInit (void) |
| Initialize SuperFX — detect hardware, set default config. | |
| void | gsuLaunch (void) |
| Launch GSU program and wait for completion (WRAM-safe) | |
| void | gsuSetupBitmapTilemap (u16 vramAddr) |
| Setup column-major tilemap for SuperFX PLOT framebuffer. | |
| void | gsuSetupHdmaBlanking (u16 topBlank, u16 bottomBlank) |
| Setup HDMA screen blanking for DMA bandwidth. | |
Variables | |
| u8 | gsu_cfgr |
| CFGR register value ($80=IRQ mask, $A0=IRQ mask + fast multiply) | |
| u8 | gsu_dma_src_hi |
| DMA source high byte ($00=buffer A at $70:0000, $40=buffer B at $70:4000) | |
| u16 | gsu_prog_addr |
| GSU program 16-bit address (set by gsuSetProgram) | |
| u8 | gsu_prog_bank |
| GSU program bank byte (set by gsuSetProgram) | |
| u8 | gsu_scbr |
| SCBR screen base ($00=buffer A, $10=buffer B) | |
| u8 | gsu_scmr |
| SCMR register value ($18=RAN+RON, $19=4bpp+RAN+RON) | |
| u8 | superfx_status |
| SuperFX status from crt0 init (VCR chip version, 0=not detected) | |
SuperFX (GSU) coprocessor library — registers, config, and API.
Provides a complete C API for SuperFX cartridges:
The GSU code itself is written in SuperFX assembly (.sfx files). The C API handles all SNES-side boilerplate.
| #define CLSR_10MHZ 0x00 |
| #define CLSR_21MHZ 0x01 |
| #define GSU_SRAM_BASE 0x700000 |
| #define REG_BRAMR (*(volatile u8*)0x3033) |
| #define REG_CBR (*(volatile u16*)0x303E) |
| #define REG_CLSR (*(volatile u8*)0x3039) |
| #define REG_GSU_R0 (*(volatile u16*)0x3000) |
| #define REG_GSU_R1 (*(volatile u16*)0x3002) |
| #define REG_GSU_R10 (*(volatile u16*)0x3014) |
| #define REG_GSU_R11 (*(volatile u16*)0x3016) |
| #define REG_GSU_R12 (*(volatile u16*)0x3018) |
| #define REG_GSU_R13 (*(volatile u16*)0x301A) |
| #define REG_GSU_R14 (*(volatile u16*)0x301C) |
| #define REG_GSU_R15 (*(volatile u16*)0x301E) |
| #define REG_GSU_R2 (*(volatile u16*)0x3004) |
| #define REG_GSU_R3 (*(volatile u16*)0x3006) |
| #define REG_GSU_R4 (*(volatile u16*)0x3008) |
| #define REG_GSU_R5 (*(volatile u16*)0x300A) |
| #define REG_GSU_R6 (*(volatile u16*)0x300C) |
| #define REG_GSU_R7 (*(volatile u16*)0x300E) |
| #define REG_GSU_R8 (*(volatile u16*)0x3010) |
| #define REG_GSU_R9 (*(volatile u16*)0x3012) |
| #define REG_PBR (*(volatile u8*)0x3034) |
| #define REG_RAMBR (*(volatile u8*)0x303C) |
| #define REG_ROMBR (*(volatile u8*)0x3036) |
| #define REG_SCBR (*(volatile u8*)0x3038) |
| #define REG_SCMR (*(volatile u8*)0x303A) |
| #define REG_SFR (*(volatile u16*)0x3030) |
| #define REG_SFR_L (*(volatile u8*)0x3030) |
| #define REG_VCR (*(volatile u8*)0x303B) |
| #define SCMR_2BPP 0x00 |
| #define SCMR_4BPP 0x01 |
| #define SCMR_8BPP 0x03 |
| #define SCMR_H128 0x00 |
| #define SCMR_H160 0x04 |
| #define SCMR_H192 0x20 |
| #define SCMR_RAN 0x08 |
| #define SCMR_RON 0x10 |
| #define SFR_GO 0x20 |
|
extern |
Scanline-polled 16KB DMA from SRAM to VRAM (60 FPS)
Polls V-counter until scanline 184, then DMAs full framebuffer. Requires gsuSetupHdmaBlanking() for sufficient DMA bandwidth.
| u8 gsuInit | ( | void | ) |
Initialize SuperFX — detect hardware, set default config.
Sets defaults: gsu_cfgr=$80, gsu_scmr=$19, gsu_scbr=$00, gsu_dma_src_hi=$00
|
extern |
Launch GSU program and wait for completion (WRAM-safe)
Call gsuSetProgram() first to set the GSU binary address. Reads gsu_cfgr, gsu_scmr, gsu_scbr for configuration. Disables NMI during execution (ROM inaccessible).
|
extern |
Setup column-major tilemap for SuperFX PLOT framebuffer.
| vramAddr | VRAM word address for tilemap (typically 0x4000) |
Setup HDMA screen blanking for DMA bandwidth.
| topBlank | Scanlines of forced blank at top (e.g., 40) |
| bottomBlank | Scanlines of forced blank at bottom (e.g., 40) |
Creates black bars like Star Fox. Total blank + VBlank must provide enough bandwidth for the 16KB framebuffer DMA (~6.2ms needed).
|
extern |
CFGR register value ($80=IRQ mask, $A0=IRQ mask + fast multiply)
|
extern |
DMA source high byte ($00=buffer A at $70:0000, $40=buffer B at $70:4000)
|
extern |
GSU program 16-bit address (set by gsuSetProgram)
|
extern |
GSU program bank byte (set by gsuSetProgram)
|
extern |
SCBR screen base ($00=buffer A, $10=buffer B)
|
extern |
SCMR register value ($18=RAN+RON, $19=4bpp+RAN+RON)
|
extern |
SuperFX status from crt0 init (VCR chip version, 0=not detected)