home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 28 / amigaformatcd28.iso / +system+ / tools / sound / eagleplayer2.00 / developer / examples / eaglerippers / iff.s
Text File  |  1998-02-26  |  7KB  |  312 lines

  1. *-----------------------------------------------------------------------------*
  2. *                 Eagleripper V1.0                      *
  3. *                IFF                          *
  4. *-----------------------------------------------------------------------------*
  5. Test    = 0
  6.         incdir    include:
  7.         include    misc/eagleplayerripper.i
  8.         include    exec/exec_lib.i
  9.             
  10.     if    Test
  11.     lea    data,a0
  12.     *lea    IFF8SVXTags,a0
  13.     move.l    #datasize,d0
  14.     move.l    a0,a5
  15.     move.l    a0,a4
  16.     move.l    d0,d4
  17.     move.l    d0,d6
  18. wait:    move.l    a5,a1
  19.     move.l    a4,a0
  20.     move.l    d4,d0
  21.     move.l    (a1),d1
  22.     *bsr    IFF8SVXRipp1
  23.     bsr    IFFSMUSRipp1
  24.     tst.l    d0
  25.     beq.s    .Ja
  26.     addq.l    #2,a5
  27.     subq.l    #2,d6
  28.     blt.s    .Err
  29.     btst    #6,$bfe001
  30.     bne.s    wait
  31. .err:    moveq    #-1,d0
  32. .ret:    illegal
  33.  
  34. .ja:    move.l    d1,d0
  35.     bsr    GetModuleName
  36.     bra.s    .Ret
  37.     endc
  38.         RIPPERHEADER    IFF8SVXTags
  39.  
  40.     dc.b    "Eagleripper-IFF-Sampleripper (8SVX...) V1.0",10
  41.     dc.b    "done by Eagleeye/DFT 28.08.97",0
  42.     even
  43.  
  44. IFF8SVXTags:    dc.l    RPT_Formatname,.Formatname
  45.         dc.l    RPT_Ripp1,IFF8SVXRipp1
  46.         dc.l    RPT_RequestRipper,1
  47.         dc.l    RPT_Version,1<<16!0
  48.         dc.l    RPT_Creator,.Creator
  49.         dc.l    RPT_GetModuleName,GetModuleName
  50.         dc.l    RPT_Playername,.Playername
  51.         dc.l    RPT_Prefix,.Prefix
  52.         dc.l    RPT_Next,IFFSMUSTags
  53.         dc.l    0
  54.  
  55. .Creator:    dc.b    "???, adapted by DEFECT",0
  56. .Formatname:    dc.b    "IFF-8SVX",0
  57. .Playername:    dc.b    "IFF 8SVX",0
  58. .Prefix:    dc.b    "IFF.",0
  59.         even
  60.  
  61. IFFSMUSTags:    dc.l    RPT_Formatname,.Formatname
  62.         dc.l    RPT_Ripp1,IFFSMUSRipp1
  63.         dc.l    RPT_RequestRipper,1
  64.         dc.l    RPT_Version,1<<16!0
  65.         dc.l    RPT_Creator,.Creator
  66.         dc.l    RPT_GetModuleName,GetModuleName
  67.         dc.l    RPT_Playername,.Playername
  68.         dc.l    RPT_Prefix,.Prefix
  69.         dc.l    0
  70.  
  71. .Creator:    dc.b    "???, adapted by DEFECT",0
  72. .Playername:
  73. .Formatname:    dc.b    "IFF-SMUS",0
  74. .Prefix:    dc.b    "SMUS.",0
  75.         even
  76.  
  77. *-----------------------------------------------------------------------------*
  78. * Input: a0=Adr (start of memory)
  79. *     d0=Size (size of memory)
  80. *     a1=current adr
  81. *     d1=(a1.l)
  82. * Output:d0=Error oder NULL
  83. *     d1=Size
  84. *     a0=Startadr (data)
  85. *-----------------------------------------------------------------------------*
  86. IFF8SVXRipp1:    cmp.l    #"FORM",d1
  87.         beq.s    .Ja
  88.         rts
  89.  
  90.         *--- Jetzt testen, ob es ein IFF-Sample sein kann ---*
  91. .Ja:        move.l    a1,-(a7)
  92.         add.l    d0,a0
  93.         sub.l    a1,a0
  94.         move.l    a0,d1            ->> max. Size
  95.         move.l    (a7)+,a0        ;Startadr
  96.  
  97.         subq.l    #8,d1
  98.  
  99.         move.l    4(a1),d0
  100.         cmp.l    d0,d1
  101.         blo.s    .Error
  102.         addq.l    #8,a1
  103.         subq.l    #4,d1
  104.  
  105.         move.l    (a1)+,d0
  106.         cmp.l    #"8SVX",d0
  107.         bne.s    .Error
  108.  
  109.         *--- Chunks durchtesten ---*
  110. .NextChunk:    move.l    (a1)+,d0
  111.         move.l    (a1)+,d2
  112.         addq.l    #1,d2
  113.         bclr    #0,d2
  114.         cmp.l    #4,d2
  115.         blt.s    .Error
  116.         subq.l    #8,d1
  117.         cmp.l    d2,d1
  118.         blo.s    .Error
  119.         bsr    CheckChunkName
  120.         bne.s    .Error
  121.         move.l    -8(a1),d0
  122.         lea    (a1,d2.l),a1
  123.         sub.l    d2,d1
  124.         cmp.l    #"BODY",d0
  125.         beq.s    .Fertig
  126.         bra.s    .NextChunk
  127.  
  128. .Fertig:    move.l    a1,d1
  129.         sub.l    a0,d1
  130.         moveq    #0,d0
  131. .Return:    rts
  132. .Error:        moveq    #-1,d0
  133.         rts
  134.  
  135. *-----------------------------------------------------------------------------*
  136. * Input: a0=Adr (start of memory)
  137. *     d0=Size (size of memory)
  138. *     a1=current adr
  139. *     d1=(a1.l)
  140. * Output:d0=Error oder NULL
  141. *     d1=Size
  142. *     a0=Startadr (data)
  143. *-----------------------------------------------------------------------------*
  144. IFFSMUSRipp1:    cmp.l    #"FORM",d1
  145.         beq.s    .Ja
  146.         rts
  147.  
  148.         *--- Jetzt testen, ob es ein IFF-Sample sein kann ---*
  149. .Ja:        move.l    a1,-(a7)
  150.         add.l    d0,a0
  151.         sub.l    a1,a0
  152.         move.l    a0,d1            ->> max. Size
  153.         move.l    (a7)+,a0        ;Startadr
  154.  
  155.         subq.l    #8,d1
  156.  
  157.         move.l    4(a1),d0
  158.         cmp.l    d0,d1
  159.         blo.s    .Error
  160.         addq.l    #8,a1
  161.         subq.l    #4,d1
  162.  
  163.         move.l    (a1)+,d0
  164.         cmp.l    #"SMUS",d0
  165.         bne.s    .Error
  166.  
  167.         *--- Chunks durchtesten ---*
  168. .NextChunk:    move.l    (a1)+,d0
  169.         move.l    (a1)+,d2
  170.         addq.l    #1,d2
  171.         bclr    #0,d2
  172.         cmp.l    #4,d2
  173.         blt.s    .Error
  174.         subq.l    #8,d1
  175.         cmp.l    d2,d1
  176.         blo.s    .Error
  177.         bsr    CheckChunkName
  178.         bne.s    .Error
  179.         move.l    -8(a1),d0
  180.         lea    (a1,d2.l),a1
  181.         sub.l    d2,d1
  182.         cmp.l    #"TRAK",d0
  183.         bne.s    .NextChunk
  184.  
  185. .AlleTrackssuchen:
  186.         move.l    (a1)+,d0
  187.         move.l    (a1)+,d2
  188.         cmp.l    #"TRAK",d0
  189.         bne.s    .Fertig
  190.         addq.l    #1,d2
  191.         bclr    #0,d2
  192.         cmp.l    #4,d2
  193.         blt.s    .Error
  194.         subq.l    #8,d1
  195.         cmp.l    d2,d1
  196.         blo.s    .Error
  197.         bsr    CheckChunkName
  198.         bne.s    .Error
  199.         move.l    -8(a1),d0
  200.         lea    (a1,d2.l),a1
  201.         sub.l    d2,d1
  202.         bra.s    .AlleTrackssuchen
  203.  
  204. .Fertig:    subq.l    #8,a1
  205.         move.l    a1,d1
  206.         sub.l    a0,d1
  207.         moveq    #0,d0
  208. .Return:    rts
  209. .Error:        moveq    #-1,d0
  210.         rts
  211.  
  212. *-----------------------------------------------------------------------------*
  213. CheckChunkName:    movem.l    d1/d2,-(a7)
  214.         move.l    d0,d1
  215.         moveq    #3,d2
  216. .NextByte:    cmp.b    #" ",d1
  217.         blo.s    .Return
  218.         cmp.b    #"z",d1
  219.         bhi.s    .Return
  220.         lsr.l    #8,d1
  221.         dbf    d2,.NextByte
  222.         moveq    #0,d0
  223. .Return:    movem.l    (a7)+,d1/d2
  224.         tst.l    d0
  225.         rts
  226.  
  227. *-----------------------------------------------------------------------------*
  228. * Input: a0=Start of Modul
  229. *     d0=Size
  230. * Output:d0=Ptr to name or NULL
  231. *-----------------------------------------------------------------------------*
  232. GetModuleName:    move.l    a2,-(a7)
  233.         move.l    a0,a2
  234.         move.l    a0,a1
  235.         move.l    d0,d3
  236.         move.l    (a1),d1
  237.         bsr    IFF8SVXRipp1
  238.         beq.s    .Ja
  239.         move.l    d3,d0
  240.         move.l    a2,a0
  241.         move.l    a2,a1
  242.         move.l    (a1),d1
  243.         bsr    IFFSMUSRipp1
  244.         bne.s    .Error
  245.  
  246. .Ja:        *--- Name-Hunk finden ---*
  247.         lea    12(a2),a2
  248. .NextHunk:    move.l    (a2)+,d0
  249.         move.l    (a2)+,d1
  250.         cmp.l    #"BODY",d0
  251.         beq.s    .Error
  252.         cmp.l    #"TRAK",d0
  253.         beq.s    .Error
  254.         cmp.l    #"NAME",d0
  255.         beq.s    .NameFound
  256.         lea    (a2,d1.l),a2
  257.         bra.s    .NextHunk
  258. .Error:        sub.l    a2,a2
  259. .NameFound:    move.l    a2,d0        
  260.         move.l    (a7)+,a2
  261.         rts
  262.  
  263.  
  264.     if    test
  265. data:        incdir    "Modules:ADPCM-IFF-MPEG-Wave/"
  266.         *ds.b    200
  267.  
  268.         *incbin    IFF.Anrufb.Anonym             
  269.         *incbin    IFF.Anrufb.Beatles            
  270.         *incbin    IFF.Anrufb.BeichtStuhl        
  271.         *incbin    IFF.Anrufb.Blühm_Anruf        
  272.         *incbin    IFF.Anrufb.Boney_M            
  273.         *incbin    IFF.Anrufb.Der_Hund           
  274.         *incbin    IFF.Anrufb.Faust              
  275.         *incbin    IFF.Anrufb.Grizmek            
  276.         *incbin    IFF.Anrufb.Hallervorden       
  277.         *incbin    IFF.Anrufb.Kohl&Bush          
  278.         *incbin    IFF.Anrufb.Kohl_English       
  279.         *incbin    IFF.Anrufb.Magnum             
  280.         *incbin    IFF.Anrufb.Mcp                
  281.         *incbin    IFF.Anrufb.Moser              
  282.         *incbin    IFF.Anrufb.Nasa               
  283.         *incbin    IFF.Anrufb.Nutte              
  284.         *incbin    IFF.Anrufb.Papst2             
  285.         *incbin    IFF.Anrufb.Putze              
  286.         *incbin    IFF.Anrufb.Ruehmann           
  287.         *incbin    IFF.Anrufb.Todesstern         
  288.         *incbin    IFF.Anrufb.Werners-Röhrich    
  289.         *incbin    IFF.Anrufb.Willy              
  290.         *incbin    IFF.Anrufp.Die_Prinzen        
  291.         *incbin    IFF.Bundy-Titelsong           
  292.         *incbin    IFF.Hupe                      
  293.         *incbin    IFF.KitomerII                 
  294.         *incbin    IFF.Milka_It's cool Man       
  295.         *incbin    IFF.Pronounce                 
  296.         *incbin    IFF.Roadrunner                
  297.         *incbin    IFF.Sprichniewieder           
  298.  
  299.         *incdir    "Modules:Verschiedenes/"
  300.         *incbin    "BD.Motorhead 1"
  301.         *incbin    "BD.Motorhead 2"
  302.         *incbin    "BD.Motorhead 3"
  303.  
  304.         incdir    modules:smus/
  305.         incbin    smus.painterman
  306.  
  307.  
  308.  
  309.  
  310. datasize    = *-data
  311.     endc
  312.