home *** CD-ROM | disk | FTP | other *** search
/ ST-Computer Leser 2002 January / STC_CD_01_2002.iso / SCENE / IMATROLL / SRC / SYS / DSPMOD.S < prev    next >
Text File  |  2001-12-08  |  6KB  |  253 lines

  1. ; Falcon demoshell
  2. ; November 3, 1999
  3. ;
  4. ; Anders Eriksson
  5. ; ae@atari.org
  6. ;
  7. ; dspmod.s
  8.  
  9. musicflag:    equ    1
  10.  
  11.  
  12. dspmod_init:    equ    28
  13. dspmod_off:        equ    32
  14. dspmod_playeron:    equ    36
  15. dspmod_playeroff:    equ    40
  16. dspmod_playmusic:    equ    44
  17. dspmod_playtime:    equ    48
  18. dspmod_modtype:    equ    52
  19. dspmod_fx:        equ    56
  20. dspmod_not_used:    equ    60
  21. dspmod_flags:    equ    61
  22. dspmod_surrounddelay:    equ    62
  23. dspmod_dsptracks:    equ    64
  24. dspmod_playinfos:    equ    66
  25. dspmod_samplesets:    equ    70
  26.  
  27. dspmod_interpolation:    equ    0
  28. dspmod_surround:    equ    1
  29.  
  30.  
  31. ; --------------------------------------------------------------
  32.         section    text
  33. ; --------------------------------------------------------------
  34.  
  35.  
  36.  
  37. ; --------------------------------------------------------------
  38. ;        load mod and reserve memory
  39. ; --------------------------------------------------------------
  40.  
  41.  
  42. dspmod_load:    clr.w    -(sp)                    ;Mxalloc()
  43.         move.l    #8000,-(sp)                ;audio dma buffer
  44.         move.w    #$44,-(sp)                ;
  45.         trap    #1                    ;
  46.         addq.l    #8,sp                    ;
  47.  
  48.         tst.l    d0                    ;ramcheck
  49.         bne.s    .ok                    ;ok
  50.         move.l    #exit_nostram_text,error_adr        ;error message
  51.         bra.w    exit                    ;
  52.  
  53. .ok:        move.l    d0,dspmod_dma_pointer            ;dma buffer
  54.  
  55.         move.l    #dspmod_file,filename            ;filename address
  56.  
  57.         move.w    #0,-(sp)                ;fsfirst() get fileinfo
  58.         move.l    filename,-(sp)                ;
  59.         move.w    #$4e,-(sp)                ;
  60.         trap    #1                    ;
  61.         addq.l    #8,sp                    ;
  62.  
  63.         tst.l    d0                    ;file found?
  64.         beq.s    .found                    ;ok
  65.         move.l    #exit_musicnotfound_text,error_adr    ;error message
  66.         bra.w    exit                    ;
  67.  
  68. .found:        move.l    dta+26,filelength            ;store filelength
  69.  
  70.  
  71.         move.w    #3,-(sp)                ;mxalloc()
  72.         move.l    filelength,-(sp)            ;
  73.         move.w    #$44,-(sp)                ;
  74.         trap    #1                    ;
  75.         addq.l    #8,sp                    ;
  76.  
  77.         tst.l    d0                    ;ramcheck
  78.         bne.s    .loadmod                ;ok
  79.         move.l    #exit_nomodram_text,error_adr        ;error message
  80.         bra.w    exit                    ;
  81.  
  82. .loadmod:    move.l    d0,dspmod_adr
  83.  
  84.         move.l    dspmod_adr,filebuffer            ;load the module
  85.         move.l    #dspmod_file,filename            ;
  86.         jsr    loader                    ;
  87.  
  88.         rts
  89.  
  90.  
  91. ; --------------------------------------------------------------
  92. ;        start dspmod
  93. ; --------------------------------------------------------------
  94.  
  95. dspmod_begin:    
  96.         bsr.w    dspmod_saveaudio            ;save audio regsiters
  97.         bsr.w    dspmod_start                ;init dspmod
  98.         bsr.w    dspmod_play_module            ;start player
  99.         rts
  100.  
  101.  
  102. ; --------------------------------------------------------------
  103. ;        close down dspmod
  104. ; --------------------------------------------------------------
  105.  
  106. dspmod_end:    bsr.w    dspmod_stop                ;stop player and restore dsp
  107.         bsr.w    dspmod_restoreaudio            ;restore audio registers
  108.         rts
  109.  
  110.  
  111. ; --------------------------------------------------------------
  112. ;        dspmod subroutines
  113. ; --------------------------------------------------------------
  114.  
  115. dspmod_play_module:
  116.         move.l    dspmod_adr,a0                ;address to module
  117.         lea.l    dspmod_voltab4,a1            ;4channel volumetable
  118.         bsr.w    dspmod_player+dspmod_modtype        ;check mod type
  119.         cmp.w    #4,d0                    ;if 4, start module
  120.         beq.s    .four                    ;
  121.         lea.l    dspmod_voltab8,a1            ;otherwise, use 8channel table
  122. .four:        move.l    dspmod_adr,a0                ;address to module
  123.         bsr.w    dspmod_player+dspmod_playeron         ;start playing
  124.  
  125.         ifne    dspmod_surround
  126.         bchg    #0,dspmod_player+dspmod_flags         ;toggle surround on/off
  127.         endc
  128.  
  129.         ifne    dspmod_interpolation
  130.         bchg    #1,dspmod_player+dspmod_flags         ;toggle interpolation on/off
  131.         endc
  132.  
  133.         rts
  134.  
  135.  
  136.  
  137. dspmod_vbl:    bsr.w    dspmod_player+44            ;call player
  138.         rts
  139.  
  140.  
  141. dspmod_start:    bsr.w    dspmod_player+dspmod_init         ;install player
  142.  
  143.         move.w    #$200b,$ffff8932.w             ;dsp-out-> dac & dma-in
  144.         clr.b    $ffff8900.w                 ;no dma-Interrupts
  145.         clr.b    $ffff8936.w                 ;record 1 track
  146.         move.b    #$40,$ffff8921.w             ;16 Bit
  147.  
  148.         move.b    #$80,$ffff8901.w             ;select record-frame-register
  149.         move.l    dspmod_dma_pointer,d0            ;
  150.         move.l    d0,d1                    ;
  151.         move.b    d1,$ffff8907.w              ;basis Low
  152.         lsr.l    #8,d1                    ;
  153.         move.b    d1,$ffff8905.w              ;basis Mid
  154.         lsr.l    #8,d1                    ;
  155.         move.b    d1,$ffff8903.w              ;basis High
  156.         add.l    #8000,d0                ;
  157.         move.l    d0,d1                    ;
  158.         move.b    d1,$ffff8913.w              ;end Low
  159.         lsr.l    #8,d1                    ;
  160.         move.b    d1,$ffff8911.w              ;end Mid
  161.         lsr.l    #8,d1                    ;
  162.         move.b    d1,$ffff890f.w              ;end High
  163.  
  164.         move.b    #$b0,$ffff8901.w             ;repeated record
  165.  
  166.         rts
  167.  
  168.  
  169. dspmod_stop:    clr.b    $ffff8901.w                 ;dma-stop
  170.         bsr.w    dspmod_player+dspmod_playeroff        ;stop module
  171.         bsr.w    dspmod_player+dspmod_off        ;dsp system off
  172.         bsr.w    dspmod_fix                ;load new dsp bootstrap (bugfix)
  173.         rts
  174.  
  175.  
  176. dspmod_saveaudio:                        ;save audio registers
  177.         lea.l    dspmod_saveaudiobuf,a0
  178.         move.w    $ffff8930.w,(a0)+
  179.         move.w    $ffff8932.w,(a0)+
  180.         move.b    $ffff8934.w,(a0)+
  181.         move.b    $ffff8935.w,(a0)+
  182.         move.b    $ffff8936.w,(a0)+
  183.         move.b    $ffff8937.w,(a0)+
  184.         move.b    $ffff8938.w,(a0)+
  185.         move.b    $ffff8939.w,(a0)+
  186.         move.w    $ffff893a.w,(a0)+
  187.         move.b    $ffff893c.w,(a0)+
  188.         move.b    $ffff8941.w,(a0)+
  189.         move.b    $ffff8943.w,(a0)+
  190.         move.b    $ffff8900.w,(a0)+
  191.         move.b    $ffff8901.w,(a0)+
  192.         move.b    $ffff8920.w,(a0)+
  193.         move.b    $ffff8921.w,(a0)+
  194.         rts
  195.  
  196. dspmod_restoreaudio:                        ;restore audio registers
  197.         lea.l    dspmod_saveaudiobuf,a0
  198.         move.w    (a0)+,$ffff8930.w
  199.         move.w    (a0)+,$ffff8932.w
  200.         move.b    (a0)+,$ffff8934.w
  201.         move.b    (a0)+,$ffff8935.w
  202.         move.b    (a0)+,$ffff8936.w
  203.         move.b    (a0)+,$ffff8937.w
  204.         move.b    (a0)+,$ffff8938.w
  205.         move.b    (a0)+,$ffff8939.w
  206.         move.w    (a0)+,$ffff893a.w
  207.         move.b    (a0)+,$ffff893c.w
  208.         move.b    (a0)+,$ffff8941.w
  209.         move.b    (a0)+,$ffff8943.w
  210.         move.b    (a0)+,$ffff8900.w
  211.         move.b    (a0)+,$ffff8901.w
  212.         move.b    (a0)+,$ffff8920.w
  213.         move.b    (a0)+,$ffff8921.w
  214.         rts
  215.  
  216.  
  217. dspmod_fix:    include    'sys\dsp_fix.s'                 ;NoCrew DSP bootstrap-code replacement
  218.  
  219.  
  220.  
  221. ; --------------------------------------------------------------
  222.         section    data
  223. ; --------------------------------------------------------------
  224.  
  225.         even
  226.  
  227. dspmod_voltab4:    dc.w    $7fff,$7fff,$7fff,$7fff,0,0,0,0
  228.         even
  229.  
  230. dspmod_voltab8:    dc.w    $3fff,$3fff,$3fff,$3fff,$3fff,$3fff,$3fff,$3fff
  231.         even
  232.  
  233. dspmod_player:    incbin    'sys\dspmod.tce'
  234.         even
  235.  
  236. dspmod_file:    dc.b    'data\ninety6.mod',0
  237.         even
  238.  
  239.  
  240. ; --------------------------------------------------------------
  241.         section    bss
  242. ; --------------------------------------------------------------
  243.  
  244.         even
  245.  
  246. dspmod_saveaudiobuf:    ds.w    10                ;audio save
  247. dspmod_dma_pointer:    ds.l    1                ;dma loop 
  248. dspmod_adr:        ds.l    1                ;module address
  249.  
  250.  
  251. ; --------------------------------------------------------------
  252.         section    text
  253. ; --------------------------------------------------------------