OpenSNES
Modern Open-Source SNES Development SDK
Loading...
Searching...
No Matches
sa1.h
Go to the documentation of this file.
1
34
35#ifndef OPENSNES_SA1_H
36#define OPENSNES_SA1_H
37
38#include <snes/types.h>
39
40/* Removed on 2026-10-05 (1.0 plan, lot C): sa1Init.
41 * The replacements are in docs/UPGRADING.md; `make check-upgrade` names them. */
42
43/*============================================================================
44 * SA-1 Register Definitions ($2200-$23FF)
45 *============================================================================*/
46
47/* --- SNES CPU → SA-1 control registers (write) --- */
48
49#define REG_SA1_CCNT (*(volatile u8*)0x2200)
50#define REG_SA1_SIE (*(volatile u8*)0x2201)
51#define REG_SA1_SIC (*(volatile u8*)0x2202)
52#define REG_SA1_CRVL (*(volatile u8*)0x2203)
53#define REG_SA1_CRVH (*(volatile u8*)0x2204)
54#define REG_SA1_CNVL (*(volatile u8*)0x2205)
55#define REG_SA1_CNVH (*(volatile u8*)0x2206)
56#define REG_SA1_CIVL (*(volatile u8*)0x2207)
57#define REG_SA1_CIVH (*(volatile u8*)0x2208)
58
59/* --- SA-1 → SNES CPU control registers (write from SA-1 side) --- */
60
61#define REG_SA1_SCNT (*(volatile u8*)0x2209)
62#define REG_SA1_CIE (*(volatile u8*)0x220A)
63#define REG_SA1_CIC (*(volatile u8*)0x220B)
64
65/* --- ROM banking (Super MMC) --- */
66
67#define REG_SA1_CXB (*(volatile u8*)0x2220)
68#define REG_SA1_DXB (*(volatile u8*)0x2221)
69#define REG_SA1_EXB (*(volatile u8*)0x2222)
70#define REG_SA1_FXB (*(volatile u8*)0x2223)
71
72/* --- BW-RAM configuration --- */
73
74#define REG_SA1_BMAPS (*(volatile u8*)0x2224)
75#define REG_SA1_BMAP (*(volatile u8*)0x2225)
76#define REG_SA1_SBWE (*(volatile u8*)0x2226)
77#define REG_SA1_CBWE (*(volatile u8*)0x2227)
78#define REG_SA1_BWPA (*(volatile u8*)0x2228)
79
80/* --- I-RAM protection --- */
81
82#define REG_SA1_SIWP (*(volatile u8*)0x2229)
83#define REG_SA1_CIWP (*(volatile u8*)0x222A)
84
85/* --- DMA --- */
86
87#define REG_SA1_DCNT (*(volatile u8*)0x2230)
88#define REG_SA1_CDMA (*(volatile u8*)0x2231)
89#define REG_SA1_SDAL (*(volatile u8*)0x2232)
90#define REG_SA1_SDAH (*(volatile u8*)0x2233)
91#define REG_SA1_SDAB (*(volatile u8*)0x2234)
92#define REG_SA1_DDAL (*(volatile u8*)0x2235)
93#define REG_SA1_DDAH (*(volatile u8*)0x2236)
94#define REG_SA1_DDAB (*(volatile u8*)0x2237)
95#define REG_SA1_DTCL (*(volatile u8*)0x2238)
96#define REG_SA1_DTCH (*(volatile u8*)0x2239)
97
98/* --- Hardware arithmetic --- */
99
100#define REG_SA1_MCNT (*(volatile u8*)0x2250)
101#define REG_SA1_MAL (*(volatile u8*)0x2251)
102#define REG_SA1_MAH (*(volatile u8*)0x2252)
103#define REG_SA1_MBL (*(volatile u8*)0x2253)
104#define REG_SA1_MBH (*(volatile u8*)0x2254)
105
106/* --- Status registers (read) --- */
107
108#define REG_SA1_SFR (*(volatile u8*)0x2300)
109#define REG_SA1_CFR (*(volatile u8*)0x2301)
110#define REG_SA1_HCRL (*(volatile u8*)0x2302)
111#define REG_SA1_HCRH (*(volatile u8*)0x2303)
112#define REG_SA1_VCRL (*(volatile u8*)0x2304)
113#define REG_SA1_VCRH (*(volatile u8*)0x2305)
114#define REG_SA1_MR (*(volatile u32*)0x2306)
115#define REG_SA1_OF (*(volatile u8*)0x230B)
116
117/*============================================================================
118 * SA-1 Constants
119 *============================================================================*/
120
122#define SA1_IRAM_BASE 0x3000
123
125#define SA1_IRAM_SIZE 2048
126
128#define SA1_IRAM ((volatile u8*)SA1_IRAM_BASE)
129
131#define SA1_READY_MAGIC 0xA5
132
134#define SA1_READY_ADDR SA1_IRAM_BASE
135
136/* CCNT ($2200) bit definitions. Arbiter: fullsnes, "2200h SNES CCNT - SA-1
137 * CPU Control (W)" — bit 4 NMI, bit 5 Reset (1 = reset), bit 6 Wait, bit 7
138 * IRQ; the Nintendo development manual, 4.1.1, agrees (RESB "0: Cancel,
139 * 1: Reset"). Two of these constants were wrong until 2026-09-20. */
140#define SA1_CCNT_SA1_IRQ 0x80
141#define SA1_CCNT_SA1_RDYB 0x40
142#define SA1_CCNT_SA1_RESB 0x20
143#define SA1_CCNT_SA1_NMI 0x10
144#define SA1_CCNT_MSG 0x0F
145
146/*============================================================================
147 * SA-1 API
148 *============================================================================*/
149
163
164#endif /* OPENSNES_SA1_H */
unsigned char u8
8-bit unsigned integer (0 to 255)
Definition types.h:47
u8 sa1IsReady(void)
Did the SA-1 boot? (crt0 starts it; this only reads the outcome).
OpenSNES Standard Types.