<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>https://mirror.atariki.pl/w/index.php?action=history&amp;feed=atom&amp;title=SNDH</id>
	<title>SNDH - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="https://mirror.atariki.pl/w/index.php?action=history&amp;feed=atom&amp;title=SNDH"/>
	<link rel="alternate" type="text/html" href="https://mirror.atariki.pl/w/index.php?title=SNDH&amp;action=history"/>
	<updated>2026-10-02T00:03:57Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://mirror.atariki.pl/w/index.php?title=SNDH&amp;diff=3565&amp;oldid=prev</id>
		<title>imported&gt;Atariki recovery: Reconstructed from archived HTML; see provenance manifest</title>
		<link rel="alternate" type="text/html" href="https://mirror.atariki.pl/w/index.php?title=SNDH&amp;diff=3565&amp;oldid=prev"/>
		<updated>2026-10-01T08:51:48Z</updated>

		<summary type="html">&lt;p&gt;Reconstructed from archived HTML; see provenance manifest&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Format muzyki na tzw. &amp;quot;syntetykach&amp;quot; w formacie chipu YM2149, stosowanego w [[ST|Atari ST]] i pokrewnych.&lt;br /&gt;
&lt;br /&gt;
== Archiwum ==&lt;br /&gt;
&lt;br /&gt;
[http://sndh.atari.org/ Archiwum] muzyk z Atari ST w formacie SNDH, znaleźć tam można także opis narzędzi do tworzenia muzyki, linki do playerów, itp.&lt;br /&gt;
&lt;br /&gt;
== Format pliku SNDH ==&lt;br /&gt;
&lt;br /&gt;
Za stroną archiwum:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; SNDH file structure, Revision 2.10&lt;br /&gt;
&lt;br /&gt;
; Original SNDH Format devised by Jochen Knaus&lt;br /&gt;
; SNDH V1.1 Updated/Created by Anders Eriksson and Odd Skancke&lt;br /&gt;
; SNDH V2.0 by Phil Graham&lt;br /&gt;
; SNDH V2.1 by Phil Graham&lt;br /&gt;
&lt;br /&gt;
; This document was originally created by Anders Eriksson, updated and&lt;br /&gt;
; adapted with SNDH v2 structures by Phil Graham.&lt;br /&gt;
&lt;br /&gt;
; October, 2012&lt;br /&gt;
;&lt;br /&gt;
;&lt;br /&gt;
; All values are in MOTOROLA BIG ENDIAN format&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------------------------&lt;br /&gt;
;Offset         Size    Function                    Example&lt;br /&gt;
;---------------------------------------------------------------------------&lt;br /&gt;
;0              4       INIT music driver           bra.w  init_music_driver&lt;br /&gt;
;                       (subtune number in d0.w)&lt;br /&gt;
;4              4       EXIT music driver           bra.w  exit_music_driver&lt;br /&gt;
;8              4       music driver PLAY           bra.w  vbl_play&lt;br /&gt;
;12             4       SNDH head                   dc.b   &amp;#039;SNDH&amp;#039;&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------------------------&lt;br /&gt;
;Beneath follows the different TAGS that can (should) be used.&lt;br /&gt;
;The order of the TAGS is not important.&lt;br /&gt;
;---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------------------------&lt;br /&gt;
; TAG   Description      Example                           Termination&lt;br /&gt;
;---------------------------------------------------------------------------&lt;br /&gt;
; TITL  Title of Song    dc.b &amp;#039;TITL&amp;#039;,&amp;#039;Led Storm&amp;#039;,0         0 (Null)&lt;br /&gt;
; COMM  Composer Name    dc.b &amp;#039;COMM&amp;#039;,&amp;#039;Tim Follin&amp;#039;,0        0 (Null)&lt;br /&gt;
; RIPP  Ripper Name      dc.b &amp;#039;RIPP&amp;#039;,&amp;#039;Me the hacker&amp;#039;,0     0 (Null)&lt;br /&gt;
; CONV  Converter Name   dc.b &amp;#039;CONV&amp;#039;,&amp;#039;Me the converter&amp;#039;,0  0 (Null)&lt;br /&gt;
; ##??  Sub Tunes        dc.b &amp;#039;##04&amp;#039;,0                     0 (Null)&lt;br /&gt;
; TA???  Timer A         dc.b &amp;#039;TA50&amp;#039;,0                     0 (Null)&lt;br /&gt;
; TB???  Timer B         dc.b &amp;#039;TB60&amp;#039;,0                     0 (Null)&lt;br /&gt;
; TC???  Timer C         dc.b &amp;#039;TC50&amp;#039;,0                     0 (Null)&lt;br /&gt;
; TD???  Timer D         dc.b &amp;#039;TD100&amp;#039;,0                    0 (Null)&lt;br /&gt;
; !V??  VBL              dc.b &amp;#039;!V50&amp;#039;,0                     0 (Null)&lt;br /&gt;
; YEAR  Year of release  dc.b &amp;#039;1996&amp;#039;,0                     0 (Null) SNHDv2&lt;br /&gt;
; #!??  Default Sub tune dc.b &amp;#039;#!02&amp;#039;,0                     0 (Null) SNDHv21&lt;br /&gt;
; #!SN  Sub tune names	 dc.w x1,x2,x3,x4                  None&lt;br /&gt;
;                        dc.b &amp;quot;Subtune Name 1&amp;quot;,0	   0 (Null) SNDHv21&lt;br /&gt;
;                        dc.b &amp;quot;Subtune Name 2&amp;quot;,0	   0 (Null) SNDHv21&lt;br /&gt;
;                        dc.b &amp;quot;Subtune Name 3&amp;quot;,0	   0 (Null) SNDHv21&lt;br /&gt;
;                        dc.b &amp;quot;Subtune Name 4&amp;quot;,0	   0 (Null) SNDHv21&lt;br /&gt;
; TIME  (sub) tune time  dc.b &amp;#039;TIME&amp;#039;                       None     SNDHv2&lt;br /&gt;
;       (in seconds)     dc.w x1,x2,x3,x4&lt;br /&gt;
; HDNS  End of Header    dc.b &amp;#039;HDNS&amp;#039;                       None     SNDHv2&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------------------------&lt;br /&gt;
;Calling method and speed&lt;br /&gt;
;---------------------------------------------------------------------------&lt;br /&gt;
;This a very important part to do correctly.&lt;br /&gt;
;Here you specify what hardware interrupt to use for calling the music&lt;br /&gt;
;driver.&lt;br /&gt;
;&lt;br /&gt;
;These options are available;&lt;br /&gt;
;dc.b  &amp;#039;!Vnn&amp;#039;       VBL (nn=frequency)&lt;br /&gt;
;dc.b  &amp;#039;TAnnn&amp;#039;,0    Timer A (nnn=frequency)&lt;br /&gt;
;dc.b  &amp;#039;TBnnn&amp;#039;,0    Timer B (nnn=frequency)&lt;br /&gt;
;dc.b  &amp;#039;TCnnn&amp;#039;,0    Timer C (nnn=frequency)&lt;br /&gt;
;dc.b  &amp;#039;TDnnn&amp;#039;,0    Timer D (nnn=frequency)&lt;br /&gt;
;&lt;br /&gt;
;VBL           - Is NOT recommended for use. There is no change made to the&lt;br /&gt;
;                VBL frequency so it will play at the current VBL speed.&lt;br /&gt;
;&lt;br /&gt;
;Timer A       - Is only recommended if Timer C is not accurate enough. Use&lt;br /&gt;
;                with caution, many songs are using Timer A for special&lt;br /&gt;
;                effects.&lt;br /&gt;
;&lt;br /&gt;
;Timer B       - Is only recommended if Timer C is not accurate enough. Use&lt;br /&gt;
;                with caution, many songs are using Timer B for special&lt;br /&gt;
;                effects.&lt;br /&gt;
;&lt;br /&gt;
;Timer C       - The default timer if nothing is specified. Default speed&lt;br /&gt;
;                is 50Hz. Use Timer C playback wherever possible. It hooks&lt;br /&gt;
;                up to the OS 200Hz Timer C interrupt and leaves all other&lt;br /&gt;
;                interrupts free for special effects.&lt;br /&gt;
;&lt;br /&gt;
;                For songs with a replay speed uneven of 200Hz, SND Player&lt;br /&gt;
;                uses a smart routine to correct for the wrong speed. The&lt;br /&gt;
;                result is usually very good. If the result isn&amp;#039;t good&lt;br /&gt;
;                enough,then consider another Timer, but be careful with&lt;br /&gt;
;                Timer collisions!&lt;br /&gt;
;&lt;br /&gt;
;Timer D       - Is only recommended if Timer C is not accurate enough.&lt;br /&gt;
;                Use with caution, many songs are using Timer D for&lt;br /&gt;
;                special effects.&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------------------------&lt;br /&gt;
; Default Tune Tag (!#??)&lt;br /&gt;
;---------------------------------------------------------------------------&lt;br /&gt;
; The !# Tag is followed by a two character ascii value signifying the&lt;br /&gt;
; default sub-tune to be played. If this tag is null then a sub-tune of&lt;br /&gt;
; 1 is assumed.&lt;br /&gt;
;---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------------------------&lt;br /&gt;
; Sub Tune Names (!#SN)&lt;br /&gt;
;---------------------------------------------------------------------------&lt;br /&gt;
; The !#SN Tag is followed by a table of word offsets pointing to the ascii&lt;br /&gt;
; text of sub tune names. The base offset is the actaul !#SN tag. See&lt;br /&gt;
; example header below.&lt;br /&gt;
;---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------------------------&lt;br /&gt;
; TIME Tag&lt;br /&gt;
;---------------------------------------------------------------------------&lt;br /&gt;
; The TIME tag is followed by &amp;#039;x&amp;#039; short words (&amp;#039;x&amp;#039; being the number of&lt;br /&gt;
; tunes). Each word contains the length of each sub tune in seconds. If the&lt;br /&gt;
; word is null then it is assumed that the tune endlessly loops.&lt;br /&gt;
;---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------------------------&lt;br /&gt;
; HDNS Tag&lt;br /&gt;
;---------------------------------------------------------------------------&lt;br /&gt;
; The HDNS signifies the end of the SNDH header and the start of the actual&lt;br /&gt;
; music data. This tag must be on an even boundary.&lt;br /&gt;
;---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
;---------------------------------------------------------------------------&lt;br /&gt;
;Example of a complete SNDH header/file&lt;br /&gt;
;---------------------------------------------------------------------------&lt;br /&gt;
;&lt;br /&gt;
;      section text&lt;br /&gt;
;&lt;br /&gt;
;      bra.w  sndh_init&lt;br /&gt;
;      bra.w  sndh_exit&lt;br /&gt;
;      bra.w  sndh_vbl&lt;br /&gt;
;&lt;br /&gt;
;      dc.b   &amp;#039;SNDH&amp;#039;&lt;br /&gt;
;      dc.b   &amp;#039;TITL&amp;#039;,&amp;#039;Mindbomb - Digi Synth&amp;#039;,0&lt;br /&gt;
;      dc.b   &amp;#039;COMM&amp;#039;,&amp;#039;Spaz&amp;#039;,0&lt;br /&gt;
;      dc.b   &amp;#039;RIPP&amp;#039;,&amp;#039;Grazey/PHF&amp;#039;,0&lt;br /&gt;
;      dc.b   &amp;#039;CONV&amp;#039;,&amp;#039;Quartet-2-SNDH (c) PHF&amp;#039;,0&lt;br /&gt;
;      dc.b   &amp;#039;##06&amp;#039;,0&lt;br /&gt;
;      dc.b   &amp;#039;TC200&amp;#039;,0&lt;br /&gt;
;      dc.b   &amp;#039;!#01&amp;#039;,0&lt;br /&gt;
;      even&lt;br /&gt;
;.subt dc.b   &amp;#039;!#SN&amp;#039;             ; Subtune names&lt;br /&gt;
;      dc.w   .t1-.subt          ; Offset from .subt&lt;br /&gt;
;      dc.w   .t2-.subt&lt;br /&gt;
;      dc.w   .t3-.subt&lt;br /&gt;
;      dc.w   .t4-.subt&lt;br /&gt;
;      dc.w   .t5-.subt&lt;br /&gt;
;      dc.w   .t6-.subt&lt;br /&gt;
;&lt;br /&gt;
;.t1   dc.b   &amp;#039;What a Bummer&amp;#039;,0&lt;br /&gt;
;.t2   dc.b   &amp;#039;Paninaro&amp;#039;,0&lt;br /&gt;
;.t3   dc.b   &amp;#039;Fade to a Pinkish Red&amp;#039;,0&lt;br /&gt;
;.t4   dc.b   &amp;#039;Revenge of the Mutant Wafer Biscuits&amp;#039;,0&lt;br /&gt;
;.t5   dc.b   &amp;#039;Mind Bomb (Theme)&amp;#039;,0&lt;br /&gt;
;.t6   dc.b   &amp;#039;In The Night&amp;#039;,0&lt;br /&gt;
;&lt;br /&gt;
;      even&lt;br /&gt;
;  dc.b  &amp;#039;YEAR&amp;#039;,&amp;#039;1990&amp;#039;,0&lt;br /&gt;
;  dc.b  &amp;#039;TIME&amp;#039;&lt;br /&gt;
;  dc.w  $e1,$60,$78,$11c,$40,$5f&lt;br /&gt;
;  even&lt;br /&gt;
;  dc.b  &amp;#039;HDNS&amp;#039;,0&lt;br /&gt;
&lt;br /&gt;
;&lt;br /&gt;
;&lt;br /&gt;
;sndh_init:&lt;br /&gt;
;  movem.l d0-a6,-(sp)&lt;br /&gt;
;  bsr.w  player&lt;br /&gt;
;  movem.l  (sp)+,d0-a6&lt;br /&gt;
;  rts&lt;br /&gt;
;&lt;br /&gt;
;sndh_exit:&lt;br /&gt;
;  movem.l d0-a6,-(sp)&lt;br /&gt;
;  bsr.w  player+4&lt;br /&gt;
;  movem.l  (sp)+,d0-a6&lt;br /&gt;
;  rts&lt;br /&gt;
;&lt;br /&gt;
;sndh_vbl:&lt;br /&gt;
;  movem.l d0-a6,-(sp)&lt;br /&gt;
;  bsr.w  player+8&lt;br /&gt;
;  movem.l  (sp)+,d0-a6&lt;br /&gt;
;  rts&lt;br /&gt;
;&lt;br /&gt;
;  section data&lt;br /&gt;
;&lt;br /&gt;
;player:&lt;br /&gt;
;  incbin  &amp;#039;replaycode.bin&amp;#039;&lt;br /&gt;
;  even&lt;br /&gt;
&lt;br /&gt;
;http://phf.atari.org&lt;br /&gt;
&lt;br /&gt;
;(EOF)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Dodatkowe info ==&lt;br /&gt;
&lt;br /&gt;
Kolega [[AdamK|Adam Kłobukowski]] prowadzi stronę [[http://sndhrecord.atari.org [1]]], wg autora: This project aims to record SNDH Archive into modern digital formats.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Ten artykuł to tylko [http://pl.wikipedia.org/wiki/Wikipedia:Zalążek_artykułu zalążek]. Możesz pomóc rozwojowi [[Atariki]] poprzez rozszerzenie go o więcej informacji.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Kategoria:Atari ST]]&lt;br /&gt;
[[Kategoria:Programowanie Atari 16/32-bit]]&lt;br /&gt;
[[Kategoria:Glosariusz]]&lt;br /&gt;
[[Kategoria:Niezbędnik kodera]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Atariki recovery</name></author>
	</entry>
</feed>