Atariscne.org

I’m going to explain how I rip SNDH music files from intros and demos using Steem Debug. This isn’t intended as a definitive or advanced guide, but rather a practical walkthrough that should help you get started — and give you a foundation to build on.

The SNDH Archive is always on the lookout for new rips, so if you’ve got the curiosity and a bit of patience, you can definitely contribute. I don’t consider myself an expert, but this guide is focused purely on the task of ripping SNDH files directly from memory.

Make sure you’ve downloaded Steem Debug from the official Steem website. At the time of writing, I’m using Steem SSE v4.0.2 R32.

You’ll find all the prerequisites for this guide linked at the bottom of the article.

This guide assumes you've already got Steem Debug up and running, with an appropriate TOS image loaded. You should also have either a MSA image mounted, or a .PRG/.TOS file ready to execute.

For demonstration purposes, I’ll be using the latest Vectronix release from the Buxton Bytes 2025 party, with the filename: VEX_2025.TOS.

Run Steem Debug

Locate the VEX_2025.TOS file:

In the Debugger window (click the bomb in the top toolbar if the Debugger window is not visible):
 

Go to Options > Stop on next program run, making sure this is ticked:


Run the VEX_2025.TOS program, and once this has finished loading into memory, Steem will stop and wait for your next move. 

A new message will be displayed at the top of the Steem window informing you that a new program has executed:


On the Debugger window, you will see where the VEX_2025.TOS has been loaded into memory, in this example address 018746:


At this address, you want to put a breakpoint so when the application is executed, and unpacked ready for launch, Steem pauses again at this point and stop execution of the unpacked application before the music routines are started (this is imperative):

Then click the Play button so the program is unpacked to the same memory location and the breakpoint is triggered so you can then proceed to the ripping stage:

Once depacked (there may be a small delay), a new message will be displayed at the top of the Steem window informing you that a new program has hit a breakpoint at the address $018746, and Steem pauses (or breaks):

At this point, the VEX_2025.TOS program has been loaded into memory, depacked and is now waiting for your next move!

You've two options at this point; you can step over each instruction as they are executed, or search for the SNDH music headers.  For this SNDH ripping tutorial, I am going to focus on the second method.  However, at the bottom of the article is a link to Grazey's music ripping tutorial that goes into superb deeper detail on the first method.

Now, open a New Memory Browser window:

Once open, enter the address 018746 as indicated below, and press enter:

The Memory Browser will then be set to the known address location where the VEX_2025.TOS program was run and unpacked, ready to be run.

In the input box to the right of the Memory dropdown, enter SNDH and click Find Down:

You should then see the standard SNDH music file header that has been included in the VEX_2025.TOS program when this was compiled to the TOS file.  

Using the arrows on your keyboard, press UP three times to point the address location to the start of the SNDH file, ensuring you see the three ` symbols as below, and the corresponding bra.l mneumonics to the left of each:

The start of the SNDH file header has three branches, each of these you can see in the example above.  These branches call the music initialisation, execute, and restore (or exit) sub-routines.  In-depth information on the SNDH file format can be found on the Official SNDH web site (linked at the bottom of the article).

At this new address 0517b4, click the dropdown next to Dump-> and select 100Kb.  This will dump 100k of memory from the address 0517b4 to a file on your local hard drive.  In this example, I am using the filename VEX_2025.SNDH and saving to the same location at the TOS for ease of reference:

Once you've clicked Save, remove the added .BIN extension so the file is simply called VEX_2025.SNDH.

Go to your favourite SNDH file player and open the newly created file you've dumped - this is your SNDH file!  I use WinJAM.

Edit the file header by right-clicking on the playlist entry of your newly created SNDH file:

On this screen, you can enter the correct SNDH header details on the right and then click Update:

Once you click Update, the SNDH will re-save including this information, and save a packed ICE Packer SNDH file.

Technically, yhe SNDH file should really be truncated so the SNDH file data is the only data in the file, as this is all we are interested in.  Using Grazey's tutorial, and the Steem memory browser, this is possible to work out how you would do this, however, I will cover this in the next installment of this tutorial series.

Let me know how you got on, and if you have any questions, or better methods :)

🔗Steem Debug v4.0.2 
🔗Vectronix Cracktro
🔗Official SNDH Library
🔗SNDH File Format
🔗Grazey's Music Hacking Tutorial

Comments

2
evldhs
Saturday, 07 June 2025 17:07
Nice writeup Tronic. As an addition this kind of rip also works well with a HEX editor. Search the SNDH header tag, and 12 bytes prior starts the SNDH file. If it's a modern maxYMiser file, the end is marked with "Ey up Grazey!!".
Quote
2
Grazey
Wednesday, 11 June 2025 08:21
Well spotted Evil. Yes gwEm added that feature at Psycho Hack. It was always a pain in the past working out the length of a tune. 
Quote
4
Troed
Wednesday, 11 June 2025 14:02
This is why you should always make your own YM dumps into some exotic format for efficient playback. Rippers have complained that there's no skill to the art of ripping nowadays, so make sure to give them a challenge.
Quote
2
Dub
Wednesday, 11 June 2025 20:29
Amen to that Troed
Quote
1
damo/rg
Friday, 13 June 2025 20:05
nice one Tronic!  A while back i looked at Grazey's 'unripped' list and picked one off - got lost and gave up after 10 minutes :D
Quote
0
Tronic
Tuesday, 17 June 2025 14:24
Quoting Troed:
This is why you should always make your own YM dumps into some exotic format for efficient playback. Rippers have complained that there's no skill to the art of ripping nowadays, so make sure to give them a challenge.

Sounds like a nice tutorial there? ;)
Quote

Add comment

Submit

© 2025 The Atariscne Collective | info@atariscne.org