home *** CD-ROM | disk | FTP | other *** search
/ M.u.C.S. Disc 2000 / MUCS2000.iso / sound / dspmod34 / easy_use.s < prev   
Text File  |  1999-09-01  |  6KB  |  282 lines

  1.  
  2. dspmod34_init:        equ    28
  3. dspmod34_off:        equ    32
  4. dspmod34_playeron:    equ    36
  5. dspmod34_playeroff:    equ    40
  6. dspmod34_playmusic:    equ    44
  7. dspmod34_playtime:    equ    48
  8. dspmod34_modtype:    equ    52
  9. dspmod34_fx:        equ    56
  10. dspmod34_not_used:    equ    60
  11. dspmod34_flags:        equ    61
  12. dspmod34_surrounddelay:    equ    62
  13. dspmod34_dsptracks:    equ    64
  14. dspmod34_playinfos:    equ    66
  15. dspmod34_samplesets:    equ    70
  16.  
  17.  
  18. dspmod34_interpolation:    equ    0
  19. dspmod34_surround:    equ    0
  20.  
  21.  
  22. ; dspmod34 - September 1, 1999
  23. ; by bITmASTER of TCE
  24. ;
  25. ; Additional patches and fixes by Noring/NoCrew
  26. ; and Evil/DHS, thanks to Earx/FUN for tips.
  27. ;
  28. ; news for v3.2
  29. ; nocrew dsp bootstrap code fix so other dsp app's
  30. ; work after dspmod.
  31. ;
  32. ; news for v3.3:
  33. ; There was an error in dspmod32 with FastRam machines.
  34. ; The DMA-Playbuffer was allocated to FastRam and
  35. ; caused random ST-RAM overwrites (one 8k block).
  36. ;
  37. ; news for v3.4:
  38. ; save and restore of most sound registers
  39. ; no more loss of the ym-chip after running
  40. ; dspmod.
  41. ;
  42. ; Use this routine from the VBL or a Timer. It can
  43. ; be anything between 50-100 Hz (maybe more as well).
  44. ;
  45. ; This file assembles right off with Devpac and
  46. ; Assemble.
  47.  
  48.  
  49.     section    text
  50.  
  51. begin:
  52.     move.l    4(sp),a5                ;address to basepage
  53.     move.l    $0c(a5),d0                ;length of text segment
  54.     add.l    $14(a5),d0                ;length of data segment
  55.     add.l    $1c(a5),d0                ;length of bss segment
  56.     add.l    #$1000,d0                ;length of stackpointer
  57.     add.l    #$100,d0                ;length of basepage
  58.     move.l    a5,d1                    ;address to basepage
  59.     add.l    d0,d1                    ;end of program
  60.     and.l    #-2,d1                    ;make address even
  61.     move.l    d1,sp                    ;new stackspace
  62.     move.l    d0,-(sp)                ;mshrink()
  63.     move.l    a5,-(sp)                ;
  64.     move.w    d0,-(sp)                ;
  65.     move.w    #$4a,-(sp)                ;
  66.     trap    #1                    ;
  67.     lea    12(sp),sp                ;
  68.  
  69.     move.w    #0,-(sp)                ;mxalloc() - reserve stram only
  70.     move.l    #8000,-(sp)                ;for dma playbuffer
  71.     move.w    #$44,-(sp)                ;
  72.     trap    #1                    ;
  73.     addq.l    #8,sp                    ;
  74.     tst.l    d0                    ;check if there is stram enough
  75.     beq.w    exit_nostram                ;nope
  76.     move.l    d0,dspmod34_dma_pointer            ;store address of stram buffer
  77.  
  78.  
  79.  
  80.  
  81.     bsr.w    dspmod34_supervisor_in            ;enter supervisor for inits
  82.  
  83.     bsr.w    dspmod34_saveaudio            ;save audio regsiters
  84.     bsr.w    dspmod34_start                ;init dspmod
  85.     bsr.w    dspmod34_play_module            ;start player
  86.     move.l    #dspmod34_vbl,$04d2.w            ;place routine on vbl
  87.  
  88.     bsr.w    dspmod34_supervisor_out            ;exit supervisor - inits done
  89.  
  90.  
  91.  
  92.     move.w    #7,-(sp)                ;wait for keypress
  93.     trap    #1                    ;
  94.     addq.l    #2,sp                    ;
  95.  
  96.  
  97.  
  98.     bsr.w    dspmod34_supervisor_in            ;enter supervisor for restore
  99.  
  100.     clr.l    $04d2.w                    ;remove vbl routine
  101.     bsr.w    dspmod34_stop                ;stop player and restore dsp
  102.  
  103.     bsr.w    dspmod34_restoreaudio            ;restore audio registers
  104.  
  105.     bsr.w    dspmod34_supervisor_out            ;exit supervisor - restore done
  106.  
  107.  
  108.  
  109. exit_nostram:
  110.     clr.w    -(sp)                    ;terminate program
  111.     trap    #1                    ;
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118. ;
  119. ; subroutines
  120. ;
  121.  
  122.  
  123. dspmod34_supervisor_in:
  124.     clr.l    -(sp)                    ;enter supervisormode
  125.     move.w    #32,-(sp)                ;
  126.     trap    #1                    ;
  127.     addq.l    #6,sp                    ;
  128.     move.l    d0,dspmod34_save_stack            ;
  129.     rts
  130.  
  131. dspmod34_supervisor_out:
  132.     move.l    dspmod34_save_stack,-(sp)        ;exit supervisor
  133.     move.w    #32,-(sp)                ;
  134.     trap    #1                    ;
  135.     addq.l    #6,sp                    ;
  136.     rts
  137.  
  138.  
  139.  
  140. dspmod34_play_module:
  141.     lea.l    dspmod34_mod,a0                ;address to module
  142.     lea.l    dspmod34_voltab4,a1            ;4channel volumetable
  143.     bsr.w    dspmod34_player+dspmod34_modtype    ;check mod type
  144.     cmp.w    #4,d0                    ;if 4, start module
  145.     beq.s    .four                    ;
  146.     lea.l    dspmod34_voltab8,a1            ;otherwise, use 8channel table
  147. .four:    lea.l    dspmod34_mod,a0                ;address to module
  148.     bsr.w    dspmod34_player+dspmod34_playeron     ;start playing
  149.  
  150.     ifne    dspmod34_surround
  151.     bchg    #0,dspmod34_player+dspmod34_flags     ;toggle surround on/off
  152.     endc
  153.  
  154.     ifne    dspmod34_interpolation
  155.     bchg    #1,dspmod34_player+dspmod34_flags     ;toggle interpolation on/off
  156.     endc
  157.  
  158.     rts
  159.  
  160.  
  161.  
  162. dspmod34_vbl:
  163.     bsr.w    dspmod34_player+44            ;call player
  164.     rts
  165.  
  166.  
  167.  
  168. dspmod34_start:    
  169.     bsr.w    dspmod34_player+dspmod34_init         ;install player
  170.  
  171.     move.w    #$200b,$ffff8932.w             ;DSP-Out-> DAC & DMA-In
  172.     clr.b    $ffff8900.w                 ;no DMA-Interrupts
  173.     clr.b    $ffff8936.w                 ;record 1 track
  174.     move.b    #$40,$ffff8921.w             ;16 Bit
  175.  
  176.     move.b    #$80,$ffff8901.w             ;select record-frame-register
  177.     move.l    dspmod34_dma_pointer,d0            ;
  178.     move.l    d0,d1                    ;
  179.     move.b    d1,$ffff8907.w              ;Basis Low
  180.     lsr.l    #8,d1                    ;
  181.     move.b    d1,$ffff8905.w              ;Basis Mid
  182.     lsr.l    #8,d1                    ;
  183.     move.b    d1,$ffff8903.w              ;Basis High
  184.     add.l    #8000,d0                ;
  185.     move.l    d0,d1                    ;
  186.     move.b    d1,$ffff8913.w              ;End Low
  187.     lsr.l    #8,d1                    ;
  188.     move.b    d1,$ffff8911.w              ;End Mid
  189.     lsr.l    #8,d1                    ;
  190.     move.b    d1,$ffff890f.w              ;End High
  191.  
  192.     move.b    #$b0,$ffff8901.w             ;repeated record
  193.  
  194.     rts
  195.  
  196.  
  197. dspmod34_stop:
  198.     clr.b    $ffff8901.w                 ;DMA-Stop
  199.     bsr.w    dspmod34_player+dspmod34_playeroff    ;stop module
  200.     bsr.w    dspmod34_player+dspmod34_off        ;dsp system off
  201.     bsr.w    dspmod34_fix                ;load new dsp bootstrap (bugfix)
  202.     rts
  203.  
  204.  
  205. dspmod34_saveaudio:
  206.     lea.l    dspmod34_saveaudiobuf,a0
  207.     move.w    $ffff8930.w,(a0)+
  208.     move.w    $ffff8932.w,(a0)+
  209.     move.b    $ffff8934.w,(a0)+
  210.     move.b    $ffff8935.w,(a0)+
  211.     move.b    $ffff8936.w,(a0)+
  212.     move.b    $ffff8937.w,(a0)+
  213.     move.b    $ffff8938.w,(a0)+
  214.     move.b    $ffff8939.w,(a0)+
  215.     move.w    $ffff893a.w,(a0)+
  216.     move.b    $ffff893c.w,(a0)+
  217.     move.b    $ffff8941.w,(a0)+
  218.     move.b    $ffff8943.w,(a0)+
  219.     move.b    $ffff8900.w,(a0)+
  220.     move.b    $ffff8901.w,(a0)+
  221.     move.b    $ffff8920.w,(a0)+
  222.     move.b    $ffff8921.w,(a0)+
  223.     rts
  224.  
  225. dspmod34_restoreaudio:
  226.     lea.l    dspmod34_saveaudiobuf,a0
  227.     move.w    (a0)+,$ffff8930.w
  228.     move.w    (a0)+,$ffff8932.w
  229.     move.b    (a0)+,$ffff8934.w
  230.     move.b    (a0)+,$ffff8935.w
  231.     move.b    (a0)+,$ffff8936.w
  232.     move.b    (a0)+,$ffff8937.w
  233.     move.b    (a0)+,$ffff8938.w
  234.     move.b    (a0)+,$ffff8939.w
  235.     move.w    (a0)+,$ffff893a.w
  236.     move.b    (a0)+,$ffff893c.w
  237.     move.b    (a0)+,$ffff8941.w
  238.     move.b    (a0)+,$ffff8943.w
  239.     move.b    (a0)+,$ffff8900.w
  240.     move.b    (a0)+,$ffff8901.w
  241.     move.b    (a0)+,$ffff8920.w
  242.     move.b    (a0)+,$ffff8921.w
  243.     rts
  244.  
  245.  
  246. dspmod34_fix:    
  247.     include    'dsp_fix.s'                ;NoCrew DSP bootstrap-code replacement
  248.  
  249.  
  250.  
  251.  
  252.     section    data
  253.  
  254.     even
  255.  
  256. dspmod34_voltab4:
  257.     dc.w $7fff,$7fff,$7fff,$7fff
  258.     dc.w 0,0,0,0
  259.     even
  260.  
  261.  
  262. dspmod34_voltab8:
  263.     dc.w $3fff,$3fff,$3fff,$3fff
  264.     dc.w $3fff,$3fff,$3fff,$3fff
  265.     even
  266.  
  267.  
  268. dspmod34_player:
  269.     incbin 'dspmod.tce'
  270.     even
  271.  
  272.  
  273. dspmod34_mod:                        ;module - can be 4-8 channels
  274.     incbin 'd:\temp\mod.mod'
  275.     even
  276.  
  277.  
  278.     section    bss
  279.  
  280. dspmod34_saveaudiobuf:    ds.w    10
  281. dspmod34_dma_pointer:    ds.l    1
  282. dspmod34_save_stack:    ds.l    1