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
162
u8
sa1IsReady
(
void
);
163
164
#endif
/* OPENSNES_SA1_H */
u8
unsigned char u8
8-bit unsigned integer (0 to 255)
Definition
types.h:47
sa1IsReady
u8 sa1IsReady(void)
Did the SA-1 boot? (crt0 starts it; this only reads the outcome).
types.h
OpenSNES Standard Types.
lib
include
snes
sa1.h
Generated by
1.16.1