; 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)