emoemu 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +77 -0
- package/.node-version +1 -0
- package/CLAUDE.md +435 -0
- package/README.md +404 -0
- package/TODO.md +655 -0
- package/dist/index.cjs +25108 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +25085 -0
- package/docs/building-libretro-cores-arm-mac.md +237 -0
- package/docs/config-file-format.md +488 -0
- package/docs/cores-trd.md +425 -0
- package/docs/headless-hardware-rendering-trd.md +676 -0
- package/docs/libretro-cores-trd.md +997 -0
- package/docs/mupen64-software-rendering-trd.md +751 -0
- package/docs/n64-support-trd.md +306 -0
- package/docs/native-rendering-trd.md +540 -0
- package/docs/native-ui-rendering-trd.md +1195 -0
- package/docs/netplay-trd.md +665 -0
- package/docs/retroarch-netplay-docs.md +277 -0
- package/docs/save-state-format.md +666 -0
- package/eslint.config.js +111 -0
- package/icon/icon.png +0 -0
- package/icon/icon.pxd +0 -0
- package/package.json +63 -0
- package/pnpm-workspace.yaml +10 -0
- package/src/Emulator/consts.ts +14 -0
- package/src/Emulator/index.ts +2496 -0
- package/src/Emulator/saveState/index.ts +155 -0
- package/src/Emulator/screenshot/index.ts +160 -0
- package/src/Emulator/terminalDimensions/index.ts +79 -0
- package/src/Emulator/types.ts +83 -0
- package/src/cli/commands/consts.ts +10 -0
- package/src/cli/commands/index.ts +462 -0
- package/src/cli/parseArgs/consts.ts +17 -0
- package/src/cli/parseArgs/index.ts +457 -0
- package/src/cli/parseArgs/types.ts +61 -0
- package/src/cli/runEmulator/index.ts +406 -0
- package/src/cli/runEmulator/types.ts +7 -0
- package/src/consts.ts +19 -0
- package/src/core/button/consts.ts +35 -0
- package/src/core/button/index.ts +123 -0
- package/src/core/core.ts +300 -0
- package/src/core/index.ts +19 -0
- package/src/cores/libretro/api/index.ts +334 -0
- package/src/cores/libretro/api/types.ts +148 -0
- package/src/cores/libretro/callbacks/consts.ts +41 -0
- package/src/cores/libretro/callbacks/index.ts +456 -0
- package/src/cores/libretro/consts.ts +45 -0
- package/src/cores/libretro/coreOptions/consts.ts +36 -0
- package/src/cores/libretro/coreOptions/index.ts +222 -0
- package/src/cores/libretro/environment/consts.ts +118 -0
- package/src/cores/libretro/environment/index.ts +1095 -0
- package/src/cores/libretro/index.ts +937 -0
- package/src/cores/libretro/loader/index.ts +496 -0
- package/src/cores/libretro/pixelFormat/consts.ts +43 -0
- package/src/cores/libretro/pixelFormat/index.ts +397 -0
- package/src/cores/libretro/types.ts +339 -0
- package/src/frontend/AudioManager/index.ts +420 -0
- package/src/frontend/SettingsManager/index.ts +250 -0
- package/src/frontend/config/index.ts +608 -0
- package/src/frontend/config/tests.ts +354 -0
- package/src/frontend/config/types.ts +36 -0
- package/src/frontend/consts.ts +114 -0
- package/src/frontend/coreBuilder/index.ts +644 -0
- package/src/frontend/coreBuilder/types.ts +15 -0
- package/src/frontend/coreDownloader/index.ts +620 -0
- package/src/frontend/coreDownloader/types.ts +17 -0
- package/src/frontend/corePreferences/index.ts +69 -0
- package/src/frontend/coreRegistry/index.ts +276 -0
- package/src/frontend/directoryCache/index.ts +75 -0
- package/src/frontend/index.ts +79 -0
- package/src/frontend/notifications/consts.ts +14 -0
- package/src/frontend/notifications/index.ts +250 -0
- package/src/frontend/playlist/consts.ts +168 -0
- package/src/frontend/playlist/index.ts +899 -0
- package/src/frontend/playlist/labelFormatter/consts.ts +15 -0
- package/src/frontend/playlist/labelFormatter/index.ts +155 -0
- package/src/frontend/playlist/labelFormatter/tests.ts +153 -0
- package/src/frontend/playlist/reader/index.ts +559 -0
- package/src/frontend/playlist/sync/index.ts +511 -0
- package/src/frontend/playlist/systemLookup/index.ts +233 -0
- package/src/frontend/playlist/utils/index.ts +50 -0
- package/src/frontend/romScanner/consts.ts +348 -0
- package/src/frontend/romScanner/index.ts +1957 -0
- package/src/frontend/saveServices/consts.ts +2 -0
- package/src/frontend/saveServices/index.ts +313 -0
- package/src/frontend/serviceProvider/index.ts +108 -0
- package/src/frontend/serviceProvider/types.ts +13 -0
- package/src/index.ts +428 -0
- package/src/input/Controller/consts.ts +50 -0
- package/src/input/Controller/index.ts +81 -0
- package/src/input/GamepadManager/consts.ts +22 -0
- package/src/input/GamepadManager/index.ts +418 -0
- package/src/input/InputManager/consts.ts +86 -0
- package/src/input/InputManager/index.ts +593 -0
- package/src/input/InputMapper/consts.ts +33 -0
- package/src/input/InputMapper/index.ts +436 -0
- package/src/input/consts.ts +410 -0
- package/src/input/gamepadProfiles/index.ts +1100 -0
- package/src/input/index.ts +38 -0
- package/src/input/inputUtils/index.ts +31 -0
- package/src/netplay/FrameBuffer/consts.ts +2 -0
- package/src/netplay/FrameBuffer/index.ts +364 -0
- package/src/netplay/FrameBuffer/tests.ts +286 -0
- package/src/netplay/InputBuffer/consts.ts +7 -0
- package/src/netplay/InputBuffer/index.ts +347 -0
- package/src/netplay/InputBuffer/tests.ts +166 -0
- package/src/netplay/NetplayClient/index.ts +976 -0
- package/src/netplay/NetplayConnection/index.ts +536 -0
- package/src/netplay/NetplayDiscovery/consts.ts +41 -0
- package/src/netplay/NetplayDiscovery/index.ts +525 -0
- package/src/netplay/NetplayServer/index.ts +1407 -0
- package/src/netplay/SyncManager/index.ts +984 -0
- package/src/netplay/SyncManager/tests.ts +419 -0
- package/src/netplay/consts.ts +371 -0
- package/src/netplay/crc32/consts.ts +14 -0
- package/src/netplay/crc32/index.ts +97 -0
- package/src/netplay/crc32/tests.ts +40 -0
- package/src/netplay/index.ts +41 -0
- package/src/netplay/netplayLogger/consts.ts +30 -0
- package/src/netplay/netplayLogger/index.ts +345 -0
- package/src/netplay/protocol/consts.ts +86 -0
- package/src/netplay/protocol/index.ts +1280 -0
- package/src/netplay/protocol/tests.ts +606 -0
- package/src/netplay/protocol/types.ts +20 -0
- package/src/netplay/types.ts +395 -0
- package/src/rendering/KittyRenderer/index.ts +616 -0
- package/src/rendering/NativeRenderer/index.ts +279 -0
- package/src/rendering/NativeRenderer/tests.ts +133 -0
- package/src/rendering/TerminalRenderer/index.ts +770 -0
- package/src/rendering/consts.ts +401 -0
- package/src/rendering/fonts/CozetteVector.ttf +0 -0
- package/src/rendering/index.ts +26 -0
- package/src/rendering/nativeUi/NativeWindowManager/index.ts +158 -0
- package/src/rendering/nativeUi/NativeWindowManager/tests.ts +81 -0
- package/src/rendering/nativeUi/consts.ts +6 -0
- package/src/rendering/nativeUi/index.ts +20 -0
- package/src/rendering/postProcessing/consts.ts +38 -0
- package/src/rendering/postProcessing/index.ts +923 -0
- package/src/rendering/shared/ansi/consts.ts +12 -0
- package/src/rendering/shared/ansi/index.ts +104 -0
- package/src/rendering/shared/consts.ts +2 -0
- package/src/rendering/shared/fitToTerminal/index.ts +67 -0
- package/src/ui/AddRomsPrompt/consts.ts +13 -0
- package/src/ui/AddRomsPrompt/index.tsx +781 -0
- package/src/ui/App/consts.ts +2 -0
- package/src/ui/App/index.tsx +456 -0
- package/src/ui/AppCapabilities/index.tsx +67 -0
- package/src/ui/ConfigContext/index.tsx +56 -0
- package/src/ui/CoreManager/consts.ts +11 -0
- package/src/ui/CoreManager/index.tsx +779 -0
- package/src/ui/CoreSelector/consts.ts +2 -0
- package/src/ui/CoreSelector/index.tsx +251 -0
- package/src/ui/DialogContainer/index.tsx +42 -0
- package/src/ui/DialogOptionsList/index.tsx +61 -0
- package/src/ui/DuplicateCrcPrompt/consts.ts +5 -0
- package/src/ui/DuplicateCrcPrompt/index.tsx +146 -0
- package/src/ui/GamepadContext/consts.ts +15 -0
- package/src/ui/GamepadContext/index.tsx +295 -0
- package/src/ui/NativeDialog/index.tsx +120 -0
- package/src/ui/NetplayDisconnectedDialog/index.tsx +93 -0
- package/src/ui/NetplayPauseMenu/consts.ts +2 -0
- package/src/ui/NetplayPauseMenu/index.tsx +97 -0
- package/src/ui/RomBrowser/NetplayPanel/consts.ts +24 -0
- package/src/ui/RomBrowser/NetplayPanel/index.tsx +520 -0
- package/src/ui/RomBrowser/SettingsPanel/index.tsx +478 -0
- package/src/ui/RomBrowser/consts.ts +61 -0
- package/src/ui/RomBrowser/index.tsx +1164 -0
- package/src/ui/RomBrowser/settingsConfig/index.ts +320 -0
- package/src/ui/RomBrowser/types.ts +67 -0
- package/src/ui/SaveStateDialog/consts.ts +2 -0
- package/src/ui/SaveStateDialog/index.tsx +225 -0
- package/src/ui/WarningDialog/index.tsx +113 -0
- package/src/ui/consts.ts +27 -0
- package/src/ui/hooks/useClearTerminal/consts.ts +2 -0
- package/src/ui/hooks/useClearTerminal/index.ts +37 -0
- package/src/ui/hooks/useDialogNavigation/index.ts +99 -0
- package/src/ui/hooks/useGamepad/consts.ts +21 -0
- package/src/ui/hooks/useGamepad/index.ts +194 -0
- package/src/ui/index.ts +27 -0
- package/src/utils/buffer/consts.ts +17 -0
- package/src/utils/buffer/index.ts +129 -0
- package/src/utils/color/consts.ts +58 -0
- package/src/utils/color/index.ts +183 -0
- package/src/utils/compression/consts.ts +50 -0
- package/src/utils/compression/index.ts +101 -0
- package/src/utils/consts.ts +2 -0
- package/src/utils/crc32/consts.ts +22 -0
- package/src/utils/crc32/index.ts +83 -0
- package/src/utils/ensureDirectory/index.ts +10 -0
- package/src/utils/format/consts.ts +8 -0
- package/src/utils/format/index.ts +53 -0
- package/src/utils/getErrorMessage/index.ts +10 -0
- package/src/utils/index.ts +113 -0
- package/src/utils/ini/index.ts +200 -0
- package/src/utils/kitty/consts.ts +13 -0
- package/src/utils/kitty/index.ts +181 -0
- package/src/utils/logger/consts.ts +35 -0
- package/src/utils/logger/index.ts +217 -0
- package/src/utils/paths/consts.ts +18 -0
- package/src/utils/paths/index.ts +151 -0
- package/src/utils/png/consts.ts +34 -0
- package/src/utils/png/index.ts +131 -0
- package/src/utils/readJsonFile/index.ts +16 -0
- package/src/utils/rotateLogFile/index.ts +44 -0
- package/src/utils/safeClose/index.ts +10 -0
- package/src/utils/terminal/consts.ts +8 -0
- package/src/utils/terminal/index.ts +102 -0
- package/src/utils/thumbnailRenderer/consts.ts +2 -0
- package/src/utils/thumbnailRenderer/index.ts +147 -0
- package/src/utils/typedError/index.ts +26 -0
- package/tsconfig.json +31 -0
- package/vitest.config.ts +13 -0
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
# Building Libretro Cores for ARM Macs
|
|
2
|
+
|
|
3
|
+
This guide explains how to build libretro cores from source for Apple Silicon (M1/M2/M3/M4) Macs.
|
|
4
|
+
|
|
5
|
+
## Automatic Building
|
|
6
|
+
|
|
7
|
+
**emoemu automatically builds certain cores from source on ARM Macs.** When you try to download a core that requires building (like `mupen64plus_next` for N64), emoemu will:
|
|
8
|
+
|
|
9
|
+
1. Detect that you're on ARM macOS
|
|
10
|
+
2. Clone the source repository
|
|
11
|
+
3. Build with the correct flags for software rendering
|
|
12
|
+
4. Install the built core to your cores directory
|
|
13
|
+
|
|
14
|
+
This happens transparently through the Core Manager UI or when the core is needed.
|
|
15
|
+
|
|
16
|
+
**Requirements for automatic building:**
|
|
17
|
+
- Xcode command-line tools (`xcode-select --install`)
|
|
18
|
+
- Git (included with Xcode CLI tools)
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Why Build From Source?
|
|
23
|
+
|
|
24
|
+
### Pre-built Core Availability
|
|
25
|
+
|
|
26
|
+
The libretro/RetroArch project provides pre-built cores, but **ARM64 macOS cores are not officially distributed**. The buildbot only provides:
|
|
27
|
+
|
|
28
|
+
| Platform | Architecture | Pre-built Available |
|
|
29
|
+
|----------|--------------|---------------------|
|
|
30
|
+
| macOS | x86_64 (Intel) | Yes |
|
|
31
|
+
| macOS | arm64 (Apple Silicon) | **No** |
|
|
32
|
+
| Linux | x86_64, arm64 | Yes |
|
|
33
|
+
| Windows | x86_64 | Yes |
|
|
34
|
+
|
|
35
|
+
This means ARM Mac users must either:
|
|
36
|
+
1. Run x86_64 cores under Rosetta 2 (slower, compatibility issues)
|
|
37
|
+
2. Build cores from source natively (recommended)
|
|
38
|
+
|
|
39
|
+
### Software Rendering Requirement
|
|
40
|
+
|
|
41
|
+
For emoemu specifically, we need cores that can render without OpenGL/Vulkan since terminal output doesn't have GPU acceleration. The N64 core (mupen64plus-next) defaults to GlideN64 which requires OpenGL. Building from source ensures we have the Angrylion software renderer available.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Prerequisites
|
|
46
|
+
|
|
47
|
+
Install Xcode command-line tools and build dependencies:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
# Xcode CLI tools
|
|
51
|
+
xcode-select --install
|
|
52
|
+
|
|
53
|
+
# Build tools (via Homebrew)
|
|
54
|
+
brew install cmake nasm pkg-config
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Building Mupen64Plus-Next (N64)
|
|
60
|
+
|
|
61
|
+
The mupen64plus-next core is the recommended N64 emulator. It includes multiple RDP plugins, including Angrylion for software-only rendering.
|
|
62
|
+
|
|
63
|
+
### Clone and Build
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
# Clone the repository
|
|
67
|
+
git clone https://github.com/libretro/mupen64plus-libretro-nx.git
|
|
68
|
+
cd mupen64plus-libretro-nx
|
|
69
|
+
|
|
70
|
+
# Build for ARM64 macOS
|
|
71
|
+
# HAVE_PARALLEL_RDP=0 disables Vulkan-dependent ParaLLEl RDP
|
|
72
|
+
# WITH_DYNAREC=aarch64 enables the ARM64 dynamic recompiler
|
|
73
|
+
make -j$(sysctl -n hw.ncpu) platform=osx HAVE_PARALLEL_RDP=0 WITH_DYNAREC=aarch64
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Build Output
|
|
77
|
+
|
|
78
|
+
The build produces:
|
|
79
|
+
```
|
|
80
|
+
mupen64plus_next_libretro.dylib
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Install the Core
|
|
84
|
+
|
|
85
|
+
Copy to emoemu's cores directory:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
# Create cores directory if needed
|
|
89
|
+
mkdir -p ~/.config/emoemu/cores
|
|
90
|
+
|
|
91
|
+
# Copy the built core
|
|
92
|
+
cp mupen64plus_next_libretro.dylib ~/.config/emoemu/cores/
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Or to the system-wide RetroArch location (if using RetroArch as well):
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
cp mupen64plus_next_libretro.dylib ~/Library/Application\ Support/RetroArch/cores/
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Core Configuration for Software Rendering
|
|
104
|
+
|
|
105
|
+
After building, configure the core to use software rendering. Create or edit the core options file:
|
|
106
|
+
|
|
107
|
+
**Global options** (`~/.config/emoemu/retroarch-core-options.cfg`):
|
|
108
|
+
```ini
|
|
109
|
+
mupen64plus-rdp-plugin = "angrylion"
|
|
110
|
+
mupen64plus-rsp-plugin = "parallel"
|
|
111
|
+
mupen64plus-cpucore = "dynamic_recompiler"
|
|
112
|
+
mupen64plus-angrylion-multithread = "all threads"
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Or use emoemu's built-in preset:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# emoemu automatically applies software rendering settings for N64
|
|
119
|
+
emoemu game.z64 --core libretro-mupen64plus-next
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Plugin Options Explained
|
|
123
|
+
|
|
124
|
+
| Option | Value | Purpose |
|
|
125
|
+
|--------|-------|---------|
|
|
126
|
+
| `rdp-plugin` | `angrylion` | Software RDP renderer (no GPU needed) |
|
|
127
|
+
| `rsp-plugin` | `parallel` | Fast RSP with ARM64 dynarec |
|
|
128
|
+
| `cpucore` | `dynamic_recompiler` | ARM64 CPU dynarec for performance |
|
|
129
|
+
| `angrylion-multithread` | `all threads` | Use all CPU cores for rendering |
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Building Other Cores
|
|
134
|
+
|
|
135
|
+
### General Build Process
|
|
136
|
+
|
|
137
|
+
Most libretro cores follow a similar pattern:
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
git clone https://github.com/libretro/<core-name>.git
|
|
141
|
+
cd <core-name>
|
|
142
|
+
make -j$(sysctl -n hw.ncpu) platform=osx
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Common Build Variables
|
|
146
|
+
|
|
147
|
+
| Variable | Purpose | Example |
|
|
148
|
+
|----------|---------|---------|
|
|
149
|
+
| `platform=osx` | Target macOS | Required |
|
|
150
|
+
| `ARCH=arm64` | Force ARM64 (usually auto-detected) | Optional |
|
|
151
|
+
| `-j$(sysctl -n hw.ncpu)` | Parallel build with all cores | Recommended |
|
|
152
|
+
|
|
153
|
+
### Cores Tested on ARM Mac
|
|
154
|
+
|
|
155
|
+
| Core | Repository | Notes |
|
|
156
|
+
|------|------------|-------|
|
|
157
|
+
| mupen64plus-next | `libretro/mupen64plus-libretro-nx` | N64, use `HAVE_PARALLEL_RDP=0` |
|
|
158
|
+
| snes9x | `libretro/snes9x` | SNES, builds cleanly |
|
|
159
|
+
| genesis-plus-gx | `libretro/Genesis-Plus-GX` | Genesis/Mega Drive |
|
|
160
|
+
| mgba | `libretro/mgba` | GBA |
|
|
161
|
+
| nestopia | `libretro/nestopia` | NES (alternative to native) |
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Troubleshooting
|
|
166
|
+
|
|
167
|
+
### "OpenGL support required" Error
|
|
168
|
+
|
|
169
|
+
If you see this error at runtime:
|
|
170
|
+
```
|
|
171
|
+
mupen64plus: libretro frontend doesn't have OpenGL support
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
The core is trying to use GlideN64 (OpenGL-based renderer). Solutions:
|
|
175
|
+
|
|
176
|
+
1. **Set core options before loading**: Ensure `mupen64plus-rdp-plugin = "angrylion"` is set
|
|
177
|
+
2. **Check option file location**: Options must be in the correct config path
|
|
178
|
+
3. **Verify GET_VARIABLE works**: The frontend must properly return option values to the core
|
|
179
|
+
|
|
180
|
+
### Build Fails with ARM64 Errors
|
|
181
|
+
|
|
182
|
+
If the build fails on ARM64-specific code:
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
# Explicitly set architecture
|
|
186
|
+
make platform=osx ARCH=arm64
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Missing Dependencies
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
# Install common build dependencies
|
|
193
|
+
brew install cmake nasm pkg-config zlib libpng
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Core Crashes on Load
|
|
197
|
+
|
|
198
|
+
1. Verify the `.dylib` is ARM64:
|
|
199
|
+
```bash
|
|
200
|
+
file mupen64plus_next_libretro.dylib
|
|
201
|
+
# Should show: Mach-O 64-bit dynamically linked shared library arm64
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
2. Check for missing symbols:
|
|
205
|
+
```bash
|
|
206
|
+
nm -u mupen64plus_next_libretro.dylib
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## Performance Notes
|
|
212
|
+
|
|
213
|
+
### ARM64 Advantages
|
|
214
|
+
|
|
215
|
+
Apple Silicon provides excellent single-threaded performance, which benefits:
|
|
216
|
+
- CPU emulation (dynamic recompiler)
|
|
217
|
+
- Angrylion multi-threaded rendering
|
|
218
|
+
|
|
219
|
+
### Expected N64 Performance
|
|
220
|
+
|
|
221
|
+
| Chip | Angrylion Performance |
|
|
222
|
+
|------|----------------------|
|
|
223
|
+
| M1 | 45-60 FPS (most games) |
|
|
224
|
+
| M1 Pro/Max | 60 FPS (consistent) |
|
|
225
|
+
| M2/M3/M4 | 60 FPS (all games) |
|
|
226
|
+
|
|
227
|
+
Performance depends on:
|
|
228
|
+
- Game complexity (Zelda OoT is demanding)
|
|
229
|
+
- `angrylion-multithread` setting
|
|
230
|
+
- Background system load
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Related Documentation
|
|
235
|
+
|
|
236
|
+
- [N64 Support TRD](n64-support-trd.md) - Detailed N64 emulation requirements
|
|
237
|
+
- [Libretro Cores TRD](libretro-cores-trd.md) - General libretro integration
|