home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / DUNE / SILY2K13.ZIP / SILLY_2K.13 / SYS / dspmod.txt < prev    next >
Encoding:
Text File  |  2012-08-27  |  7.2 KB  |  331 lines

  1.                             04/12/94
  2.  
  3.                 DSPMOD User's Manual
  4.                 ====================
  5.             written by bITmASTER of TCE
  6.  
  7.  
  8. Hi Freaks,
  9.  
  10. ich hasse es, irgendwelche Dokumentationen zu schreiben. Da aber der
  11. DSPMOD immer umfangreicher wird, geht es nicht mehr ohne.
  12.  
  13. DSPMOD ist ein Modulereplayer für den Falcon 030. Er wurde speziell
  14. für Demos konzepiert. DSPMOD hat folgende Eigenschaften:
  15.  
  16. - Replay für 4-Kanal-MOD's oder 8 Kanal-MOD's ( Octalizer )
  17. - Replay für 4-Kanal-MOD's und 4 Kanäle für FX ( Geräusche, z.B. für
  18.   Games )
  19. - verbraucht wenig 68030er-Rechenzeit
  20. - läβt sich einfach einbinden
  21. - die Frequenz des Interrupts ist ziemlich egal ( 50...70 Hz )
  22.   ( also einfach den VBL verwenden )
  23. - vblank-Speed und BPM-Speed wird unterstützt
  24. - Surround-Effekt
  25. - Interpolation
  26.  
  27. DSPMOD ist kein PD oder Shareware sondern No-Profit-Ware. Das bedeutet:
  28.  
  29. - DSPMOD kann beliebig kopiert werden, aber nur ohne Profit-Absicht,
  30.   d.h. DSPMOD darf nicht auf kommerziellen PD-Disk's, Coverdisk's oder
  31.   CD's verkauft werden
  32.  
  33. - DSPMOD kann über Mailboxen verbreitet werden
  34.  
  35. - DSPMOD kann in jeden nichtkommerziellen Programm ( Freeware )
  36.   verwendet werden ( z.B. Demos )
  37.  
  38. - wer DSPMOD in Sharewareprogrammen ( z.B. Games ) verwenden will,
  39.   muβ mir dies mitteilen.
  40.  
  41. - kommerzielle Nutzung ist nur mit mein vorheriges Einverständnis
  42.   möglich
  43.  
  44. Die DSPMOD-Funktionen:
  45.  
  46. Offset  Funktion
  47.  28    init
  48.  32     off
  49.  36    PlayerOn
  50.  40    PlayerOff
  51.  44    PlayMusic
  52.  48    PlayTime
  53.  52    ModType
  54.  56    fx
  55.  60    not used
  56.  61    Flags
  57.  62    SurroundDelay
  58.  64    DspTracks
  59.  66    PlayInfos
  60.  70    SampleSets
  61.  
  62. init
  63. ====
  64.  
  65. Assembler:
  66.  
  67. bsr DSPMOD+28
  68. in:    -
  69. out:       a0: Zeiger auf Version-String
  70.  
  71. C:
  72.  
  73. char *init( void );
  74.  
  75. Diese Funktion muß immer zuerst aufgerufen werden.
  76. u.a. wird die Soundmatrix initialisiert. Es wird der DSP-Output
  77. mit den Codec ( DA-Wandler ) verbunden.
  78. Da ich selbst keinen richtigen Überblick über die Versionen des
  79. DSPMOD's habe, ist jetzt im Versionsstring das Datum der letzten
  80. Assemblierung enthalten. Daran kann man sicher die neuste Version
  81. erkennen.
  82.  
  83. off
  84. ===
  85.  
  86. Assembler:
  87.  
  88. bsr DSPMOD+32
  89. in:    -
  90. out:    -
  91.  
  92. C:
  93.  
  94. void off( void )
  95.  
  96. Deinstalliert DSPMOD. Die Matrix wird wieder auf den alten Zustand
  97. zurückgesetzt. Diese Funktion muß bei beenden des Programm's, welches
  98. DSPMOD benutzt, ausgeführt werden.
  99.  
  100. PlayerOn
  101. ========
  102.  
  103. Assembler:
  104.  
  105. bsr DSPMOD+36
  106. in:    a0: Zeiger auf Modul, a1: Zeiger auf VolumeTab
  107. out:    -
  108.  
  109. C:
  110.  
  111. void PlayerOn( char *mod, int *vol_tab )
  112.  
  113. Spiel ein Modul ab. Die Volume-Tabelle besteht aus 8 Words, welche die
  114. SampleMainVol's festlegen. Zur Bestimmung der Volumes siehe "Volume-
  115. Calculation".
  116.  
  117. PlayerOff
  118. =========
  119.  
  120. Assembler:
  121.  
  122. bsr DSPMOD+40
  123. in:    -
  124. out:    -
  125.  
  126. C:
  127.  
  128. void PlayerOn( void )
  129.  
  130. Stoppt das Abspielen des Modules. Nach PlayerOff() kann mit PlayerOn()
  131. ein neues Modul gestartet werden.
  132.  
  133.  
  134.  
  135. PlayMusic
  136. =========
  137.  
  138. Assembler:
  139.  
  140. bsr DSPMOD+44
  141. in:    -
  142. out:    -
  143.  
  144. C:
  145.  
  146. void PlayMusic( void )
  147.  
  148. PlayMusic ist die Interruptroutine, sie muß regelmäßig aufgerufen
  149. werden. Die Interruptfrequenz kann zwischen 50...70 Hz liegen.
  150. Die Inhalter der Register d0-a6 werden dabei verändert !
  151.  
  152.  
  153. PlayTime
  154. ========
  155.  
  156. Assembler:
  157.  
  158. bsr DSPMOD+48
  159. in:    a0: Zeiger auf Modul
  160. out:    d0: Playtime in BCD, z.B. $1234 = 12 Min, 34 Sek
  161.  
  162. C:
  163.  
  164. int PlayTime( char *mod )
  165.  
  166. Ermittelt die Spieldauer eine Modules.
  167.  
  168. ModType
  169. =======
  170.  
  171. Assembler:
  172.  
  173. bsr DSPMOD+52
  174. in:    a0: Zeiger auf Modul
  175. out:    d0: Anzahl der Tracks ( 4 oder 8 ), 0 bei unbekannten MOD
  176.  
  177. C:
  178.  
  179. int ModType( char *mod )
  180.  
  181. Es werden Module mit folgenden Magic erkannt:
  182. "M.K."
  183. "FLT4"
  184. "CD8 "
  185. "CD81"
  186. "FA08"
  187. Achtung: ein altes 15er Module wird nicht erkannt ( d0 = 0 ) !
  188.  
  189. fx
  190. ==
  191.  
  192. Assembler:
  193.  
  194. bsr DSPMOD+56
  195. in:    d0: fx-Channel ( 0 ... 3 )
  196.     d1: Sample-Period
  197.     d2: Sample-Volume
  198.     d3: Sample-Position
  199.     a0: Sample-Start    ( Adresse )
  200.     a1: Sample-Ende         ( Adresse )
  201.     a2: Repeat-Start        ( Adresse )
  202.     a3: Repeat-Länge        ( Bytes )
  203.  
  204. out:    -
  205.  
  206. C:
  207.  
  208. void fx( int channel, int periode, int volume, int position,
  209.          char *start, char *end, char *rep_start, long rep_len );
  210.  
  211. Alle Adressen und die Länge müssen geradzahlig sein !
  212.  
  213. DSPMOD+60:    Kopierschutz-Byte ;-)
  214.  
  215. DSPMOD+61:    Flags
  216.         b0: Surround an
  217.         b1: Interpolation an
  218.  
  219. DSPMOD+62:    dc.w SurroundDelay
  220.         1... SurroundDelay in 1/49170 s - Schritten
  221.  
  222.  
  223. DSPMOD+64:    dc.w    DspTracks
  224. Anzahl der Tracks, die der DSP verarbeitet. Wird automatisch je
  225. nach Modul gesetzt ( 4 oder 8 Tracks ). Wenn bei einen 4-Kanal-Modul
  226. fx ausgegeben werden soll, muß DspTracks je nach fx-Channels erhöht
  227. werden. z.B. 4 fx-Channels -> DspTracks = 8. Wenn fx nicht mehr
  228. gebraucht wird, kann DspTracks wieder auf 4 zurückgesetzt werden
  229. ( spart Rechenzeit ).
  230.  
  231. DSPMOD+66:    dc.l    PlayInfos
  232. Zeiger auf Variablen des MOD-Interpreters
  233.  
  234. DSPMOD+70     Zeiger auf SampleSets[8]
  235.  
  236. Für jeden Channel gibt es ein Sample-Set. In Assembler sieht
  237. das so aus:
  238.  
  239. SampPtr:    ds.l 1        ;aktuelle Sample-Position
  240. SampEnd:      ds.l 1        ;Sample-Ende
  241. RepStart:    ds.l 1          ;Repeat-Start
  242. RepLen:        ds.l 1          ;Repeat-Länge
  243. SampPtrFrac:    ds.l 1        ;aktuelle Sample-Position fractional
  244.                 ;Part
  245. SampPer:    ds.w 1          ;Periode, Amiga-kompatibel
  246.                      ;z.b. für C-1: 856
  247. SampVol:    ds.w 1          ;Volume, wird von der Replay-
  248.                      ;Routine gesetzt
  249.                      ;0 ( min ) ... 64 ( max )
  250. SampMainVol:    ds.w 1          ;Volume, wird durch den User
  251.                      ;bestimmt werden
  252.                      ;0 ( min ) ... $7fff ( max )
  253. SampPos:    ds.w 1          ;Stereopositon, wird durch User
  254.                    ;festgelegt
  255.                      ;-63 ( links ) ... 63 ( rechts )
  256.  
  257. ein Sample-Set ist 28 Bytes groß.
  258.  
  259. In C sieht das so aus:
  260.  
  261. struct {
  262.       char *ptr;
  263.       char *end;
  264.       char *repstart;
  265.       long replen;
  266.       long frac_pos
  267.       int per;
  268.       int vol;
  269.       int main_vol;
  270.       int pos;
  271. } SampSets[];
  272.  
  273.  
  274. Volume-Calculation
  275. ==================
  276.  
  277. Die Lautstärke eines Samples wird durch 3 Faktoren bestimmt:
  278.  
  279. 1:  SampVol, Volume von MOD-Interpreter
  280.     0...64
  281.     die Volumes werden als Festkomma-Zahl interpretiert:
  282.  
  283.     0   $00     0.00
  284.     :    :       :
  285.    32   $20     0.25
  286.     :    :       :
  287.    64   $40     0.50
  288.  
  289.  
  290. 2:  SampMainVol, wird von User festgelegt
  291.     0...32767
  292.     die Volumes werden als Festkomma-Zahl interpretiert:
  293.  
  294.        0   $0000     0.00
  295.        :     :        :
  296.    16384   $4000     0.25
  297.        :     :        :
  298.    32767   $7fff     0.99
  299.  
  300. 3:  SampPos, wird von User festgelegt
  301.       -63 ...  0  ... 63
  302.     -0.492 ... 0 ... 0.492
  303.     links    mitte   rechts
  304.  
  305. Die Lautstärke, mit der ein Sample links / rechts ausgegeben wird,
  306. wird wie folgt berechnet:
  307.  
  308. Links  = SampVol * SampMainVol * ( 0.5 - SampPos )
  309. Rechts = SampVol * SampMainVol * ( 0.5 + SampPos )
  310.  
  311. SampleMainVol muβ so gewählt werden, daβ keine Übersteuerung auftritt.
  312.  
  313. z.B. 4-Kanal-MOD, 2 Kanäle links, 2 Kanäle rechts
  314.      Maximalausteuerung = 0.99
  315.      0.99 = 0.5 * SampMainVol * 0.92 * 2
  316.      SampMainVol = 1.08
  317.      SampMainVol kann aber nur max. 0.99 sein, also muβ dieser Wert
  318.      genommen werden
  319.  
  320.      8-Kanal-MOD, 4 Kanäle links, 4 Kanäle rechts
  321.      Maximalausteuerung = 0.99
  322.      0.99 = 0.5 * SampMainVol * 0.92 * 4
  323.      SampMainVol <= 0.53
  324.  
  325. OK, das ist alles Theorie, man kann den maximalen Wert von SampleMainVol
  326. auch einfach ausprobieren.
  327.  
  328.  
  329. EOF ( ich bin eben schreibfaul )
  330.  
  331.