; SNDH file structure, Revision 2.00 ; Original SNDH Format devised by Jochen Knaus ; SNDH V1.1 Updated/Created by Anders Eriksson and Odd Skancke ; SNDH V2.0 by Phil Graham ; This document was originally created by Anders Eriksson, updated and ; adapted with SNDH v2 structures by Phil Graham. ; February, 2005 ; ; ; All values are in MOTOROLA BIG ENDIAN format ;--------------------------------------------------------------------------- ;Offset Size Function Example ;--------------------------------------------------------------------------- ;0 4 INIT music driver bra.w init_music_driver ; (subtune number in d0.w) ;4 4 EXIT music driver bra.w exit_music_driver ;8 4 music driver PLAY bra.w vbl_play ;12 4 SNDH head dc.b 'SNDH' ;--------------------------------------------------------------------------- ;Beneath follows the different TAGS that can (should) be used. ;The order of the TAGS is not important. ;--------------------------------------------------------------------------- ;--------------------------------------------------------------------------- ; TAG Description Example Termination ;--------------------------------------------------------------------------- ; TITL Title of Song dc.b 'TITL','Led Storm',0 0 (Null) ; COMM Composer Name dc.b 'COMM','Tim Follin',0 0 (Null) ; RIPP Ripper Name dc.b 'RIPP','Me the hacker',0 0 (Null) ; CONV Converter Name dc.b 'CONV','Me the converter',0 0 (Null) ; ##?? Sub Tunes dc.b '##04',0 0 (Null) ; TA??? Timer A dc.b 'TA50',0 0 (Null) ; TB??? Timer B dc.b 'TB60',0 0 (Null) ; TC??? Timer C dc.b 'TC50',0 0 (Null) ; TD??? Timer D dc.b 'TD100',0 0 (Null) ; !V?? VBL dc.b '!V50',0 0 (Null) ; YEAR Year of release dc.b '1996',0 0 (Null) SNHDv2 ; TIME (sub) tune time dc.b 'TIME' None SNDHv2 ; (in seconds) dc.w x1,x2,x3,x4 ; HDNS End of Header dc.b 'HDNS' None SNDHv2 ; Must be on an ; EVEN boundary ;--------------------------------------------------------------------------- ;Calling method and speed ;--------------------------------------------------------------------------- ;This a very important part to do correctly. ;Here you specify what hardware interrupt to use for calling the music ;driver. ; ;These options are available; ;dc.b '!Vnn' VBL (nn=frequency) ;dc.b 'TAnnn',0 Timer A (nnn=frequency) ;dc.b 'TBnnn',0 Timer B (nnn=frequency) ;dc.b 'TCnnn',0 Timer C (nnn=frequency) ;dc.b 'TDnnn',0 Timer D (nnn=frequency) ; ;VBL - Is NOT recommended for use. There is no change made to the ; VBL frequency so it will play at the current VBL speed. ; ;Timer A - Is only recommended if Timer C is not accurate enough. Use ; with caution, many songs are using Timer A for special ; effects. ; ;Timer B - Is only recommended if Timer C is not accurate enough. Use ; with caution, many songs are using Timer B for special ; effects. ; ;Timer C - The default timer if nothing is specified. Default speed ; is 50Hz. Use Timer C playback wherever possible. It hooks ; up to the OS 200Hz Timer C interrupt and leaves all other ; interrupts free for special effects. ; ; For songs with a replay speed uneven of 200Hz, SND Player ; uses a smart routine to correct for the wrong speed. The ; result is usually very good. If the result isn't good ; enough,then consider another Timer, but be careful with ; Timer collisions! ; ;Timer D - Is only recommended if Timer C is not accurate enough. ; Use with caution, many songs are using Timer D for ; special effects. ;--------------------------------------------------------------------------- ; TIME Tag ;--------------------------------------------------------------------------- ; The TIME tag is followed by 'x' short words ('x' being the number of ; tunes). Each word contains the length of each sub tune in seconds. If the ; word is null then it is assumed that the tune endlessly loops. ;--------------------------------------------------------------------------- ;--------------------------------------------------------------------------- ; HDNS Tag ;--------------------------------------------------------------------------- ; The HDNS signifies the end of the SNDH header and the start of the actual ; music data. This tag must be on an even boundary. ;--------------------------------------------------------------------------- ;--------------------------------------------------------------------------- ;Example of a complete SNDH header/file ;--------------------------------------------------------------------------- ; ; section text ; ; bra.w sndh_init ; bra.w sndh_exit ; bra.w sndh_vbl ; ; dc.b 'SNDH' ; dc.b 'TITL','Odd Stuff Main Tune',0 ; dc.b 'COMM','Dma-Sc / Sector one',0 ; dc.b 'CONV','John Doe',0 ; dc.b 'RIPP','Doe Johnson',0 ; dc.b '##01',0 ; dc.b 'TC50',0 ; dc.b 'YEAR','2001',0 ; dc.b 'TIME' ; dc.w $e1 ; 3 mins 45 secs = 225 seconds = $e1 ; even ; dc.b 'HDNS' ; ; ;sndh_init: ; movem.l d0-a6,-(sp) ; lea songfile(pc),a0 ; bsr.w player ; movem.l (sp)+,d0-a6 ; rts ; ;sndh_exit: ; movem.l d0-a6,-(sp) ; bsr.w player+4 ; movem.l (sp)+,d0-a6 ; rts ; ;sndh_vbl: ; movem.l d0-a6,-(sp) ; bsr.w player+8 ; movem.l (sp)+,d0-a6 ; rts ; ; section data ; ;songfile: ; incbin 'mysong' ; even ; ;player: ; incbin 'replaycode.bin' ; even ;http://phf.atari.org/ ;(EOF)