home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaMiscModsCD3.iso / _PROGRAMME / PLAYER / MULTIFORMAT / Aplayer.lha / APlayer / Developers / Examples / apFredLibrary.S next >
Encoding:
Text File  |  1994-07-27  |  6.4 KB  |  344 lines

  1. ; $VER: Fred.library 2.0
  2. ;
  3.  
  4.     INCDIR    "Includes3.0:Include3.0/"
  5.     INCLUDE    "Exec/Types.i"
  6.     INCLUDE    "Own/SystemBases.i"
  7.     INCLUDE    "Own/SystemStructures.i"
  8.     INCLUDE    "Own/SystemOffsets.i"
  9.     INCLUDE    "Own/AccessiblePlayer.i"
  10.  
  11.  
  12. VERSION        =    2
  13. REVISION    =    0
  14.  
  15. TRUE        =    -1
  16. FALSE        =    0
  17.  
  18. ; Library Data
  19.  
  20. LN_Name        =    10
  21. LN_Type        =    8
  22. NT_Library    =    9
  23.  
  24. LIBB_Summing    =    0
  25. LIBB_Changed    =    1
  26. LIBB_SumUsed    =    2
  27. LIBB_DelExp    =    3
  28.  
  29. LIBF_Summing    =    1<<LIBB_Summing
  30. LIBF_Changed    =    1<<LIBB_Changed
  31. LIBF_SumUsed    =    1<<LIBB_SumUsed
  32. LIBF_DelExp    =    1<<LIBB_DelExp
  33.  
  34. ; Macros
  35.  
  36. INBYTE    MACRO
  37.     dc.b    %11100000,0
  38.     dc.w    \1
  39.     dc.b    \2,0
  40.     ENDM
  41.  
  42. INWORD    MACRO
  43.     dc.b    %11010000,0
  44.     dc.w    \1,\2
  45.     ENDM
  46.  
  47. INLONG    MACRO
  48.     dc.b    %11000000,0
  49.     dc.w    \1
  50.     dc.l    \2
  51.     ENDM
  52.  
  53. ; Library Base Structure
  54.  
  55.     STRUCTURE LibraryStruct,0
  56.     STRUCT    LIB_Node,14
  57.     UBYTE    LIB_Flags
  58.     UBYTE    LIB_Pad
  59.     UWORD    LIB_NegSize
  60.     UWORD    LIB_PosSize
  61.     UWORD    LIB_Version
  62.     UWORD    LIB_Revision
  63.     APTR    LIB_IDString
  64.     ULONG    LIB_Sum
  65.     UWORD    LIB_OpenCnt
  66.  
  67.     LONG    LIB_SegList
  68.     LABEL    LibraryStruct_SIZEOF
  69.  
  70.  
  71.     SECTION    Fred.library,CODE
  72.  
  73. START    moveq    #0,d0
  74.     rts
  75. ;------------------------------------------------------------------------------
  76. LIBNAME    dc.b    "apFred.library",0
  77.  
  78. LIBID    dc.b    "Fred.library 2.0 (13-June-1994)",0
  79.     even
  80. ;------------------------------------------------------------------------------
  81. ; ROMTAG Structure
  82. ;
  83.  
  84. ROMTAG    dc.w    $4afc            ;ROMTAG Indentifier
  85.     dc.l    romtag
  86.     dc.l    slut
  87.     dc.b    $80            ;Flags
  88.     dc.b    version
  89.     dc.b    $09            ;Type Of Module
  90.     dc.b    $00            ;Initialization Priority
  91.     dc.l    libname
  92.     dc.l    libid
  93.     dc.l    autinit            ;Pointer To AUTOINIT Table
  94. ;------------------------------------------------------------------------------
  95. ; AUTOINIT Table
  96. ;
  97.  
  98. AUTINIT    dc.l    LibraryStruct_SIZEOF    ;Size Of Structure AFTER Base Address
  99.     dc.l    vector            ;Pointer To Vector Table
  100.     dc.l    inittab            ;Pointer To Init Structure
  101.     dc.l    init            ;Pointer To Init Routine
  102. ;------------------------------------------------------------------------------
  103. ; Init Table
  104. ;
  105.  
  106. INITTAB    INBYTE    LN_Type,NT_Library
  107.     INBYTE    LIB_Flags,LIBF_SumUsed!LIBF_Changed
  108.     INWORD    LIB_Version,version
  109.     INWORD    LIB_Revision,revision
  110.     INLONG    LN_Name,libname
  111.     INLONG    LIB_IDString,libid
  112.     dc.l    0
  113. ;------------------------------------------------------------------------------
  114. ; Vector Table
  115. ;
  116.  
  117. VECTOR    dc.w    -1
  118.     dc.w    opnlib-vector,clslib-vector,expunge-vector,extfunc-vector
  119.     dc.w    FP_GetTags-vector
  120.     dc.w    -1
  121. ;------------------------------------------------------------------------------
  122. ; Init Routine
  123. ;
  124.  
  125. INIT    movem.l    d1-d7/a0-a6,-(sp)
  126.     move.l    d0,a4            ;Base Address
  127.     move.l    a0,LIB_SegList(a4)
  128.  
  129.     move.l    a4,d0
  130.     movem.l    (sp)+,d1-d7/a0-a6
  131.     rts
  132. ;------------------------------------------------------------------------------
  133. ; Offset  -6: Open Library
  134. ;
  135.  
  136. OPNLIB    addq.w    #1,LIB_OpenCnt(a6)
  137.     bclr    #LIBB_DelExp,LIB_Flags(a6)
  138.     move.l    a6,d0
  139.     rts
  140. ;------------------------------------------------------------------------------
  141. ; Offset -12: Close Library
  142. ;
  143.  
  144. CLSLIB    moveq    #0,d0
  145.     subq.w    #1,LIB_OpenCnt(a6)
  146.     bne.b    clslibo
  147.     btst    #LIBB_DelExp,LIB_Flags(a6)
  148.     bne.b    expunge
  149. CLSLIBO    rts
  150. ;------------------------------------------------------------------------------
  151. ; Offset -18: Expunge
  152. ;
  153.  
  154. EXPUNGE    movem.l    d1-d7/a0-a6,-(sp)
  155.     move.l    a6,a4
  156.     tst.w    LIB_OpenCnt(a4)
  157.     beq.b    exp1
  158.     bset    #LIBB_DelExp,LIB_Flags(a4)
  159.     moveq    #0,d0
  160.     bra.b    expungo
  161.  
  162. EXP1    move.l    4.w,a6
  163.     move.l    LIB_SegList(a4),d2
  164.     move.l    a4,a1
  165.     jsr    Remove(a6)
  166.  
  167.     move.l    a4,a1
  168.     moveq    #0,d0
  169.     move.w    LIB_NegSize(a4),d0
  170.     sub.l    d0,a1
  171.     add.w    LIB_PosSize(a4),d0
  172.     jsr    FreeMem(a6)
  173.     move.l    d2,d0
  174.  
  175. EXPUNGO    movem.l    (sp)+,d1-d7/a0-a6
  176.     rts
  177. ;------------------------------------------------------------------------------
  178. ; Offset -24: ExtFunc
  179. ;
  180.  
  181. EXTFUNC    moveq    #0,d0
  182.     rts
  183. ;------------------------------------------------------------------------------
  184. ;******************************************************************************
  185. ;* Fred Player
  186. ;******************************************************************************
  187. ;------------------------------------------------------------------------------
  188. ; Offset -30: GetTags
  189. ;
  190. ; IN :    Nothing
  191. ;
  192. ; OUT:    A0 = Pointer To A TagList
  193. ;
  194.  
  195. FP_GetTags
  196.     lea    FP_Tags(pc),a0
  197.     rts
  198.  
  199. FP_Tags    dc.l    APT_PlayerName,fpname
  200.     dc.l    APT_Description,fpdes
  201.  
  202.     dc.l    APT_Check,FP_TestModule
  203.     dc.l    APT_InitSound,FP_InitSound
  204.     dc.l    APT_EndSound,FP_EndSound
  205.     dc.l    APT_Interrupt,FP_PlayModule
  206.  
  207.     dc.l    APT_Author,FP_Author
  208.     dc.l    APT_SubSong,FP_SubSong
  209.  
  210.     dc.l    APT_Pause,TRUE
  211.     dc.l    TAG_END
  212.  
  213. FPNAME    dc.b    "Fred Player",0
  214. FPDES    dc.b    "Original player by JC & Fred.",10
  215.     dc.b    "Adapted by Tax.",0
  216.     even
  217. ;------------------------------------------------------------------------------
  218. ; TestModule
  219. ;
  220. ; IN :    A1 = Address
  221. ;
  222. ; OUT:    D0 = Success (0=Unknown, 1=Ok, 2=Error)
  223. ;
  224.  
  225. FP_TestModule
  226.     movem.l    d1-d2/a1/a3,-(sp)
  227.  
  228.     cmp.w    #$4efa,(a1)
  229.     bne.b    .tsmod3
  230.     cmp.w    #$4efa,4(a1)
  231.     bne.b    .tsmod3
  232.     cmp.w    #$4efa,8(a1)
  233.     bne.b    .tsmod3
  234.     cmp.w    #$4efa,12(a1)
  235.     bne.b    .tsmod3
  236.  
  237.     moveq    #0,d1
  238.     move.w    2(a1),d1
  239.     add.l    d1,a1
  240.     moveq    #4-1,d2
  241. .TSMOD1    cmp.w    #$123a,2(a1)
  242.     bne.b    .tsmod2
  243.     cmp.w    #$b001,6(a1)
  244.     beq.b    .tsmod4
  245. .TSMOD2    addq.l    #2,a1
  246.     dbra    d2,.tsmod1
  247.  
  248. .TSMOD3    moveq    #0,d0            ;Unknown
  249.     bra.b    .tsmodo
  250.  
  251. .TSMOD4    move.w    4(a1),d1
  252.     add.l    d1,a1
  253.  
  254.     moveq    #0,d1
  255.     move.b    4(a1),d1
  256.     addq.w    #1,d1
  257.     move.w    d1,maxtune
  258.  
  259.     moveq    #1,d0            ;Ok
  260. .TSMODO    movem.l    (sp)+,d1-d2/a1/a3
  261.     rts
  262. ;------------------------------------------------------------------------------
  263. ; InitSound
  264. ;
  265. ; IN :    A1 = Address
  266. ;
  267. ; OUT:    Nothing
  268. ;
  269.  
  270. FP_InitSound
  271.     movem.l    d0-d7/a0-a6,-(sp)
  272.  
  273.     move.w    APG_Tune(a5),d0
  274.     ext.l    d0
  275.     jsr    (a1)            ;Init Module
  276.  
  277.     movem.l    (sp)+,d0-d7/a0-a6
  278.     rts
  279. ;------------------------------------------------------------------------------
  280. ; EndSound
  281. ;
  282. ; IN :    A1 = Address
  283. ;
  284. ; OUT:    Nothing
  285. ;
  286.  
  287. FP_EndSound
  288.     movem.l    d0-d7/a0-a6,-(sp)
  289.  
  290.     moveq    #0,d1
  291.     jsr    8(a1)            ;Stop Module Playing
  292.  
  293.     moveq    #0,d0
  294.     move.w    d0,$dff0a8
  295.     move.w    d0,$dff0b8
  296.     move.w    d0,$dff0c8
  297.     move.w    d0,$dff0d8
  298.  
  299.     movem.l    (sp)+,d0-d7/a0-a6
  300.     rts
  301. ;------------------------------------------------------------------------------
  302. ; PlayModule
  303. ;
  304. ; IN :    A1 = Address
  305. ;    D1 = VBlank/Cia (0=CIA)
  306. ;
  307. ; OUT:    Nothing
  308. ;
  309.  
  310. FP_PlayModule
  311.     movem.l    d0-d7/a0-a6,-(sp)
  312.     jsr    4(a1)            ;Play Module
  313.     movem.l    (sp)+,d0-d7/a0-a6
  314.     rts
  315. ;------------------------------------------------------------------------------
  316. ; Author
  317. ;
  318. ; IN :    A1 = Address
  319. ;
  320. ; OUT:    D0 = Pointer To Author Or NULL For Not Found
  321. ;
  322.  
  323. FP_Author
  324.     move.l    #author,d0
  325.     rts
  326.  
  327. AUTHOR    dc.b    "Fred",0
  328.     even
  329. ;------------------------------------------------------------------------------
  330. ; SubSong
  331. ;
  332. ; IN :    A1 = Address
  333. ;
  334. ; OUT:    A0 = Pointer To Two SubSongs Words
  335. ;
  336.  
  337. FP_SubSong
  338.     lea    maxtune(pc),a0
  339.     rts
  340.  
  341. MAXTUNE    dc.w    0,0
  342. ;------------------------------------------------------------------------------
  343. SLUT
  344.