Skip to content

DSperate v1.15.0

Choose a tag to compare

@github-actions github-actions released this 10 Sep 22:22
· 3 commits to main since this release

DSperate v1.15.0

Screen layout is now something you set from the pause menu rather than only from the ini, panel rotation reaches the scanline tiers for portrait handhelds, and the Pokemon games that hung on CONTINUE run.

Fixes:

  • Pokemon Platinum, HeartGold/SoulSilver and the romhacks built on them no longer hang on CONTINUE. Picking CONTINUE shuts the Wi-Fi radio down and then spins on W_POWERSTATE waiting for the power-off to show; with the register merely stored the ARM7 never left that loop and the screen stayed black. The transceiver power model is now ported from melonDS -- force, mode reset, power-state/TX/down-control, RF status and pins, and the 2048 us delayed power-on on a scheduler event. The five reference scenes are bit-identical, so nothing else moved.
  • On the KMS/DRM tier the pause menu no longer appears one press late. A menu redraw is a one-off present with no frame behind it, and that tier queues a flip behind the pending one and only issues it when the next frame starts -- so the picture waited for a keypress that had already happened. The present path now flushes.
  • Non-ASCII text draws instead of turning into blanks. Titles come from RetroAchievements as the game is actually named ("Okamiden" with a macron), and the menu font is ASCII. A Latin letter with a mark is now folded onto the letter it decorates and anything else non-ASCII draws as ?, with widths and trimming counting glyphs rather than bytes.
  • A dump RetroAchievements knows but has not published a set for is no longer announced as "achievements active". It loads successfully with zero achievements, which used to raise the same toast as a real set and send the player looking for a list that is not there. It is now quiet, and the account page says what happened. This is separate from an unknown hash, which still reports itself with the hash.
  • Truncated achievement descriptions scroll. A description too long for the row marquees like a name does, so it can be read to the end.
  • A pass over compiler warnings across the tree.

Additions:

  • The screen layout is on the pause menu. A LAYOUT row on the layout page picks between VERTICAL, HORIZONTAL, SINGLE, PIP, DOMINANT V and DOMINANT H directly, and the row reads the layout that is actually on screen -- the hotkeys and a loaded state move it without writing video.layout.
  • The layout hotkeys step through a set you choose (video.layout_cycle, one checkbox per layout on the same page). Ticking a layout puts it back at its own place in the ring rather than at the end, and the last ticked layout cannot be unticked, since the hotkeys need somewhere to go. The checkboxes take effect as you tick them; nothing on screen moves until you press a hotkey.
  • DS_ROTATE on the scanline tiers. Panel rotation of 0/90/180/270 -- the display-engine tier's convention -- now works on the fbdev, KMS, dmabuf and window-surface tiers, for a portrait fb0 like the RG28XX's. The frame is composed unrotated by the existing layout, scaling, inset and canvas code, so the pause menu and the OSD rotate with the game, and the present transposes it with NEON. Touch input un-rotates with it. On an RG35XX SP running SM64 this costs about 3.7 ms a frame against no rotation; the unrotated path is untouched.
  • DS_SHOT_AT=N takes the screenshot hotkey's picture after frame N, for offscreen and replay runs where no hotkey can fire.
  • The README is rewritten as a concise feature list.

Full changelog: v1.14.1...v1.15.0

Games run without BIOS or firmware dumps (built-in FreeBIOS and a generated firmware); a set dumped from your own DS unlocks the firmware boot and cycle-exact SWI timing. None is included.

Tarballs: linux-aarch64 / linux-armhf are dynamically linked and stripped -- the ones to package. The -static variants carry libstdc++/libgcc inside and keep their debug symbols, for a device whose runtime is older than the build's, or for a backtrace.