Sign in

Garhoogin

@garhoogin.com
199 followers 45 following 92 posts

Site administrator at dshack.org.

PostsRepliesMedia
Garhoogin @garhoogin.com · 13/08/2025
Though most changes introduced with each revision to the DS firmware had minimal visible difference, the 2005-02-28 version does introduce a bug fix for the initial setup language selection GUI. Before, you could input the Back button before the animation completes, cutting off the selection sound.
030
Garhoogin @garhoogin.com · 24/07/2025
The BNFR font file format used by the firmware does not have support for kerning pairs, so the spacing between the L and T in "HEALTH" would appear too wide. The BNLL file splits the text at this point and moves the letters 1 pixel closer together. This is only done for English. [2/2]
A comparison of the text with and without the kerning adjustment. The difference is 1 pixel, but makes the difference between awkward spacing and good looking spacing.
030
Garhoogin @garhoogin.com · 24/07/2025
In the DS firmware boot menu, the health and safety heading text is split into two separate text elements to adjust for kerning in the word HEALTH. This is controlled by a BNLL file, which defines text and where it goes on the screen. [1/2]
A preview of the English health-and-safety BNLL file. The heading ("WARNING - HEALTH AND SAFETY") is split into two messages around where the L and T meet in the word HEALTH.
151
Garhoogin @garhoogin.com · 25/01/2025
It becomes clear that all we're doing after right shifting the color one place is separating and re-combining parts of the color. It can finally be simplified: [8/9]
110
Garhoogin @garhoogin.com · 25/01/2025
It becomes apparent now that since we're going to be setting the most significant bit of each channel with the final OR with 0x808080, we don't need to worry about clearing the upper bit of each channel. We'll rearrange some shifts: [7/9]
110
Garhoogin @garhoogin.com · 25/01/2025
We can pull out the right shifts on each of the channels next by combining some shifts: [6/9]
110
Garhoogin @garhoogin.com · 25/01/2025
We can pull some operations out. First, we can eliminate some of the OR operations: [5/9]
110
Garhoogin @garhoogin.com · 25/01/2025
Given y is 8 bits, right shifting it one place gives a 7-bit value. Because the addition will not produce any carries, it can be written with a bitwise OR operation. Applying this to all channels gives the following code: [4/9]
    int r = (c >> 0) & 0xFF, g = (c >> 8) & 0xFF, b = (c >> 16) & 0xFF;
    r = (r >> 1) | 0x80;
    g = (g >> 1) | 0x80;
    b = (b >> 1) | 0x80;
    c = (r << 0) | (g << 8) | (b << 16);
110
Garhoogin @garhoogin.com · 16/12/2024
In a way that makes sense, given that the font the banner text renders with has the following glyphs to use, none of which appear Cyrillic that I can tell:
Set of glyphs included in the DS firmware's main font
120
Garhoogin @garhoogin.com · 11/12/2024
The receiving system performs some checks on the sequence, like ensuring the time delay is between 1 and 100 frames. The chime sequences for the L+Up, L+Left and L+Right combinations all have invalid time delays, which results in no sound. I've restored the sounds playable here attached. [9/9]
010
Garhoogin @garhoogin.com · 07/12/2024
The main differences in the file format are where newer hardware features are supported, such as extended palettes and affine extended backgrounds. The file version signature strings were also updated, and some fields rearranged. An example ISC file is attached here: [6/7]
An excerp from an ISC file I created. At offset 800h is where the footer begins with a CLRF block that describes whether each screen tile is cleared or not. This is followed by a LINK block that indicates which ICG file this ISC file is meant to be linked with, a CMNT block that stores a brief comment about the file, a CLRC block that tells CAD software what the clear tile value is for this file, a MODE block that tells the software what BG format is used, a SIZE block that stores the size of the background (useful for free-size backgrounds), a VER block, and a terminating END block.
120
Garhoogin @garhoogin.com · 26/11/2024
The patches it applies add signature checks to overlays that the game sends since they have signature checks disabled in the release ROM. It checks the game ID against "ASME" or "ASMJ" and applies a version of the patch for the specific version of the game. Function is at 02328AF8 and shown: [2/4]
Function IplPatchSuperMario64DS, the function that detects the game region and applies the appropriate patch to the game.
110