Guide

Nintendo DS on the GKD Pixel 2 with DSperate

By Tarik Caramanico · · Updated · 3 min read

The Nintendo DS had two screens, one of them a touch screen, and the GKD Pixel 2 has one 4:3 screen and no touch. So a DS game on the Pixel 2 needs a way to show both screens and to touch. ZyperOS runs DS games on DSperate, with a stylus you steer with the d-pad. This guide covers the emulator, the buttons, the game's language and your saves.

On this page
  1. The emulator
  2. Adding DS games
  3. The buttons on DSperate
  4. Three screen layouts
  5. Moving your saves from DraStic
  6. Sources

The emulator

DSperate is an open DS emulator (GPL-3.0) with an ARM64 JIT and NEON rendering. ZyperOS builds it with Thwonp's libretro wrapper from plorpOS and runs it inside its own emulator, Diatom, so a DS game gets ZyperOS's in-game menu: save, load, screens and stylus. It ships with ZyperOS, so there is nothing to add.

Adding DS games

Put .nds files, or .zip files with one inside, in Roms/Nintendo DS. The adding games guide shows the three ways to send them.

Most DS sets are decrypted dumps, and those boot on DSperate's own free BIOS, with nothing else to add. An encrypted dump needs the DS's bios7.bin, bios9.bin and firmware.bin, loose in Bios/.

A DS game reads its language from the firmware, and a firmware.bin carries the language of the console it was dumped from. ZyperOS tells DSperate which language to use with each game, and your firmware.bin is left as it is. Open the Nintendo DS shelf, press MENU and change Game Language: Auto follows MENU > Language where the DS has it (English, Español, Français, Deutsch, Italiano and 日本語) and is English where it does not (Português (Brasil) and 简体中文), or pick one of the languages outright. A game resumes where you left it only in the language you left it in. After you change Game Language, a game left in another language starts fresh in the new one, with a note that says why, and its battery save keeps your progress. A save state you load yourself keeps the language it was saved in, and Reset in the in-game menu starts the game again in the row's language.

The buttons on DSperate

A game starts with the top screen alone, full size. The shoulders do the rest:

  • L1 and R1 are the DS's L and R.
  • L2 shows the other screen.
  • R2 shows the bottom screen and turns the stylus on: the d-pad moves a cursor and A touches. R2 again turns the stylus off and goes back.
  • MENU opens ZyperOS's in-game menu. Controls there has a page for the two screens and the stylus.

Three screen layouts

The in-game menu has a Screens row with three layouts, plus Swap Screens and Stylus:

  • Single: one screen alone, filling the Pixel 2's 640x480 panel exactly, since a DS screen is 4:3 like the panel. This is where a game starts. L2 shows the other screen.
  • Stacked: both screens, one over the other, as a 320x480 picture in the middle of the panel.
  • Top Focus: one screen large, at twice the DS's size, and the other a quarter of its size beside it at the bottom.

Swap Screens puts the bottom screen first: on top in Stacked, the large one in Top Focus, the one shown in Single. While the stylus is on, the screen you touch is always the large or the shown one.

Single is the best fit for games played mostly on one screen. Stacked suits games that use both all the time, such as a map below the action.

Moving your saves from DraStic

DraStic keeps a game's battery save as Saves/<game>.dsv. The first time that game runs on DSperate with no save of its own, ZyperOS takes the .dsv over: it keeps the save chip's bytes, writes them as DSperate's .srm, and never touches an .srm that is already there. After that, DSperate keeps its own file.

So a card moved from another system with DraStic saves, ROGUE OS among them, picks up where you left off on DSperate.

Sources

  1. ZyperOS README, Supported systems: the Nintendo DS paragraph, the folder and file types, the BIOS files.
  2. config/systems.cfg: DSperate, its license, the free BIOS, the game's language and saves carried over.
  3. THIRD-PARTY-LICENSES.md: DSperate and its libretro wrapper, thwonp/dsperate-lr with beebono/DSperate.
  4. src/dsv.h: how DraStic's .dsv saves are taken over.