home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaMiscModsCD3.iso / _PROGRAMME / PLAYER / MULTIFORMAT / Aplayer.lha / APlayer / Developers / Examples / apFuture13Library.S < prev    next >
Encoding:
Text File  |  1994-07-27  |  25.7 KB  |  1,199 lines

  1. ; $VER: Future13.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    Future13.library,CODE
  72.  
  73. START    moveq    #0,d0
  74.     rts
  75. ;------------------------------------------------------------------------------
  76. LIBNAME    dc.b    "apFuture13.library",0
  77.  
  78. LIBID    dc.b    "Future13.library 1.0 (16-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    FC_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. ;* Future Composer 1.0-1.3 Player
  186. ;******************************************************************************
  187. ;------------------------------------------------------------------------------
  188.     STRUCTURE Future13Struct,0
  189.     APTR    F13_Global
  190.     APTR    F13_SEQPoint
  191.     APTR    F13_PATPoint
  192.     APTR    F13_FRQPoint
  193.     APTR    F13_VOLPoint
  194.     UWORD    F13_OnOff
  195.     UWORD    F13_ActChan
  196.     WORD    F13_ReSpCnt
  197.     WORD    F13_RepSpd
  198.     WORD    F13_SpdTemp
  199.     UWORD    F13_AudTemp
  200.     STRUCT    F13_PerVol,16
  201.     STRUCT    F13_V1Data,64
  202.     STRUCT    F13_Offset1,2
  203.     STRUCT    F13_SSize1,2
  204.     STRUCT    F13_Start1,6
  205.     STRUCT    F13_V2Data,64
  206.     STRUCT    F13_Offset2,2
  207.     STRUCT    F13_SSize2,2
  208.     STRUCT    F13_Start2,6
  209.     STRUCT    F13_V3Data,64
  210.     STRUCT    F13_Offset3,2
  211.     STRUCT    F13_SSize3,2
  212.     STRUCT    F13_Start3,6
  213.     STRUCT    F13_V4Data,64
  214.     STRUCT    F13_Offset4,2
  215.     STRUCT    F13_SSize4,2
  216.     STRUCT    F13_Start4,6
  217.     STRUCT    F13_SoundInfo,10*10+47*10
  218.     LABEL    Future13Struct_SIZEOF
  219. ;------------------------------------------------------------------------------
  220. ; Offset -30: GetTags
  221. ;
  222. ; IN :    Nothing
  223. ;
  224. ; OUT:    A0 = Pointer To A TagList
  225. ;
  226.  
  227. FC_GetTags
  228.     lea    FC_Tags(pc),a0
  229.     rts
  230.  
  231. FC_Tags    dc.l    APT_EarlyCheck,FC_TestModule
  232.  
  233.     dc.l    APT_InitSound,FC_InitSound
  234.     dc.l    APT_EndSound,FC_EndSound
  235.     dc.l    APT_Interrupt,FC_PlayModule
  236.  
  237.     dc.l    APT_PlayerName,fcname
  238.     dc.l    APT_Description,fcdes
  239.  
  240.     dc.l    APT_Volume,TRUE
  241.     dc.l    APT_Pause,TRUE
  242.  
  243.     dc.l    APT_GetSongLength,FC_GetSongLength
  244.  
  245.     dc.l    APT_GetSongPos,FC_GetSongPos
  246.     dc.l    APT_Rewind,FC_Rewind
  247.     dc.l    APT_Forward,FC_Forward
  248.     dc.l    APT_ChangeChannel,FC_ChangeChannel
  249.     dc.l    TAG_END
  250.  
  251. FCNAME    dc.b    "Future Composer 1.0-1.3",0
  252. FCDES    dc.b    "Original player by SuperSero.",10
  253.     dc.b    "Adapted by Tax.",10,10
  254.     dc.b    "This player can play all modules",10
  255.     dc.b    "made with Future Composer 1.0 to",10
  256.     dc.b    "1.3.",0
  257.     even
  258. ;------------------------------------------------------------------------------
  259. ; TestModule
  260. ;
  261. ; IN :    Nothing
  262. ;
  263. ; OUT:    D0 = Success (0=Unknown, 1=Ok, 2=Error)
  264. ;
  265.  
  266. FC_TestModule
  267.     movem.l    d1-d2/a0/a4-a5,-(sp)
  268.  
  269.     subq.l    #4,sp
  270.     moveq    #0,d1
  271.     moveq    #4,d2
  272.     move.l    sp,a0
  273.     move.l    APG_CheckLoad(a5),a4
  274.     jsr    (a4)            ;Load One Longword
  275.     move.l    (sp)+,d1
  276.     tst.l    d0
  277.     beq.b    .tsmod1
  278.  
  279.     moveq    #1,d0            ;Ok
  280.     cmp.l    #"SMOD",d1
  281.     beq.b    .tsmodo
  282.     moveq    #0,d0            ;Unknown
  283.     bra.b    .tsmodo
  284.  
  285. .TSMOD1    moveq    #2,d0            ;Error
  286. .TSMODO    movem.l    (sp)+,d1-d2/a0/a4-a5
  287.     rts
  288. ;------------------------------------------------------------------------------
  289. ; InitSound
  290. ;
  291. ; IN :    A1 = Address
  292. ;
  293. ; OUT:    Nothing
  294. ;
  295.  
  296. FC_InitSound
  297.     movem.l    d0-d3/d6-d7/a0-a6,-(sp)
  298.  
  299.     lea    FC_DataArea,a5
  300.     move.w    #1,F13_OnOff(a5)
  301.     bset    #1,$bfe001        ;Turn Filter Off
  302.  
  303.     lea    100(a1),a0
  304.     move.l    a0,F13_SEQPoint(a5)
  305.     move.l    a1,a0
  306.     add.l    8(a1),a0
  307.     move.l    a0,F13_PATPoint(a5)
  308.     move.l    a1,a0
  309.     add.l    16(a1),a0
  310.     move.l    a0,F13_FRQPoint(a5)
  311.     move.l    a1,a0
  312.     add.l    24(a1),a0
  313.     move.l    a0,F13_VOLPoint(a5)
  314.     move.l    4(a1),d0
  315.     divu    #13,d0
  316.  
  317.     lea    F13_SoundInfo(a5),a2
  318.     moveq    #1,d2
  319.     moveq    #10-1,d1
  320. .INIMO1    clr.l    (a2)
  321.     addq.l    #6,a2
  322.     move.l    d2,(a2)+
  323.     dbra    d1,.inimo1
  324.  
  325.     moveq    #0,d2
  326.     moveq    #$10,d3
  327.     moveq    #$08,d7
  328.     moveq    #32-1,d1
  329. .INIMO2    move.l    d2,(a2)+
  330.     move.w    d3,(a2)+
  331.     move.l    d3,(a2)+
  332.     add.l    #$20,d2
  333.     dbra    d1,.inimo2
  334.  
  335.     moveq    #8-1,d1
  336. .INIMO3    move.l    d2,(a2)+
  337.     move.w    d7,(a2)+
  338.     move.l    d7,(a2)+
  339.     add.l    #$10,d2
  340.     dbra    d1,.inimo3
  341.  
  342.     move.l    d2,(a2)+
  343.     move.w    d3,(a2)+
  344.     move.l    d3,(a2)+
  345.     add.l    #$20,d2
  346.     move.l    d2,(a2)+
  347.     move.w    d7,(a2)+
  348.     move.l    d7,(a2)+
  349.     add.l    #$10,d2
  350.     REPT    2
  351.     move.l    d2,(a2)+
  352.     move.w    d3,(a2)+
  353.     move.l    d3,(a2)+
  354.     add.l    #$20,d2
  355.     ENDR
  356.     REPT    2
  357.     move.l    d2,(a2)+
  358.     move.w    d7,(a2)+
  359.     move.l    d7,(a2)+
  360.     add.l    #$10,d2
  361.     ENDR
  362.     move.l    d2,(a2)+
  363.     move.w    #$18,(a2)+
  364.     move.l    #$18,(a2)
  365.  
  366.     lea    40(a1),a0
  367.     lea    F13_SoundInfo+4(a5),a2
  368.     moveq    #10-1,d1
  369. .INIMO4    move.w    (a0)+,(a2)+
  370.     move.l    (a0)+,(a2)+
  371.     addq.l    #4,a2
  372.     dbra    d1,.inimo4
  373.  
  374.     moveq    #0,d2
  375.     move.l    a1,d1
  376.     add.l    32(a1),d1
  377.     sub.l    #WAVEFORMS,d1
  378.     lea    F13_SoundInfo(a5),a0
  379.     move.l    d1,(a0)+
  380.     moveq    #9-1,d3
  381. .INIMO5    move.w    (a0),d2
  382.     add.l    d2,d1
  383.     add.l    d2,d1
  384.     addq.l    #6,a0
  385.     move.l    d1,(a0)+
  386.     dbra    d3,.inimo5
  387.  
  388.     move.l    F13_SEQpoint(a5),a0
  389.     moveq    #0,d2
  390.     move.b    12(a0),d2        ;Get replay speed
  391.     bne.b    .inimo6
  392.     moveq    #3,d2            ;Set default speed
  393.  
  394. .INIMO6    move.w d2,F13_ReSpCnt(a5)    ;Init repspeed counter
  395.     move.w d2,F13_RepSpd(a5)
  396.  
  397.     clr.w    F13_AudTemp(a5)
  398.     clr.w    F13_SpdTemp(a5)
  399.     move.w    #$000f,$dff096        ;Disable audio DMA
  400.     move.w    #$0780,$dff09a        ;Disable audio IRQ
  401.     moveq    #0,d7
  402.     mulu    #13,d0
  403.  
  404.     lea    F13_V1data(a5),a0    ;Point to 1st voice data area
  405.     lea    SILENT(pc),a1
  406.     lea    o4a0c8(pc),a2
  407.     moveq    #4-1,d6            ;Number of soundchannels-1
  408. .INIMO7    move.l    a1,10(a0)
  409.     move.l    a1,18(a0)
  410.     clr.l    14(a0)
  411.     clr.b    45(a0)
  412.     clr.b    47(a0)
  413.     clr.w    8(a0)
  414.     clr.l    48(a0)
  415.     move.b    #$01,23(a0)
  416.     move.b    #$01,24(a0)
  417.     clr.b    25(a0)
  418.     clr.l    26(a0)
  419.     clr.w    30(a0)
  420.     moveq    #$00,d3
  421.     move.w    (a2)+,d1
  422.     move.w    (a2)+,d3
  423.     divu    #$0003,d3
  424.     move.b    d3,32(a0)
  425.     mulu    #$0003,d3
  426.     and.l    #$00ff,d3
  427.     and.l    #$00ff,d1
  428.     add.l    #$dff0a0,d1
  429.     move.l    d1,a6
  430.     move.l    #$0000,(a6)
  431.     move.w    #$0100,4(a6)
  432.     move.w    #$0000,6(a6)
  433.     move.w    #$0000,8(a6)
  434.     move.l    d1,60(a0)
  435.     clr.w    64(a0)
  436.     move.l    F13_SEQPoint(a5),(a0)
  437.     move.l    F13_SEQPoint(a5),52(a0)
  438.     add.l    d0,52(a0)
  439.     add.l    d3,52(a0)
  440.     add.l    d7,(a0)
  441.     add.l    d3,(a0)
  442.     move.w    #$000d,6(a0)
  443.     move.l    (a0),a3
  444.     move.b    (a3),d1
  445.     andi.l    #$00ff,d1
  446.     lsl.w    #6,d1
  447.     move.l    F13_PATPoint(a5),a4
  448.     adda.l    d1,a4
  449.     move.l    a4,34(a0)
  450.     clr.l    38(a0)
  451.     move.b    #$01,33(a0)
  452.     move.b    #$02,42(a0)
  453.     move.b    1(a3),44(a0)
  454.     move.b    2(a3),22(a0)
  455.     clr.b    43(a0)
  456.     clr.b    45(a0)
  457.     clr.w    56(a0)
  458.     adda.w    #$004a,a0        ;Point to next voice's data area
  459.     dbra    d6,.inimo7
  460.  
  461.     movem.l    (sp)+,d0-d3/d6-d7/a0-a6
  462.     rts
  463. ;------------------------------------------------------------------------------
  464. ; EndSound
  465. ;
  466. ; IN :    A1 = Address
  467. ;
  468. ; OUT:    Nothing
  469. ;
  470.  
  471. FC_EndSound
  472.     move.l    d0,-(sp)
  473.     clr.w    FC_DataArea+F13_OnOff
  474.     moveq    #0,d0
  475.     move.w    d0,$dff0a8
  476.     move.w    d0,$dff0b8
  477.     move.w    d0,$dff0c8
  478.     move.w    d0,$dff0d8
  479.     move.w    #$000f,$dff096
  480.     move.l    (sp)+,d0
  481.     rts
  482. ;------------------------------------------------------------------------------
  483. ; GetSongLength
  484. ;
  485. ; IN :    A1 = Address
  486. ;
  487. ; OUT:    D1 = Length
  488. ;
  489.  
  490. FC_GetSongLength
  491.     move.l    4(a1),d1
  492.     divu    #13,d1            ;Song Length
  493.     rts
  494. ;------------------------------------------------------------------------------
  495. ; GetSongPos
  496. ;
  497. ; IN :    A1 = Address
  498. ;
  499. ; OUT:    D1 = Position (0-x)
  500. ;
  501.  
  502. FC_GetSongPos
  503.     move.l    a0,-(sp)
  504.     lea    FC_DataArea+F13_V1Data,a0
  505.     moveq    #0,d1
  506.     move.w    6(a0),d1
  507.     divu    #13,d1
  508.     subq.w    #1,d1
  509.     move.l    (sp)+,a0
  510.     rts
  511. ;------------------------------------------------------------------------------
  512. ; Rewind
  513. ;
  514. ; IN :    A1 = Address
  515. ;
  516. ; OUT:    D1 = New Position
  517. ;
  518.  
  519. FC_Rewind
  520.     movem.l    d0/d2/a0-a1,-(sp)
  521.  
  522.     bsr.b    FC_GetSongPos
  523.     tst.w    d1
  524.     beq.b    fforwa1
  525.     subq.w    #1,d1
  526.     bra.b    fforwa1
  527. ;------------------------------------------------------------------------------
  528. ; Forward
  529. ;
  530. ; IN :    A1 = Address
  531. ;
  532. ; OUT:    D1 = New Position
  533. ;
  534.  
  535. FC_Forward
  536.     movem.l    d0/d2/a0-a1,-(sp)
  537.  
  538.     bsr.b    FC_GetSongLength
  539.     move.w    d1,d0
  540.  
  541.     bsr.b    FC_GetSongPos
  542.     addq.w    #1,d1
  543.     cmp.w    d0,d1
  544.     blt.b    fforwa1
  545.     moveq    #0,d1
  546.  
  547. FFORWA1    move.w    d1,d2
  548.     mulu    #13,d2
  549.     moveq    #64,d0
  550.     lea    FC_DataArea,a0
  551.  
  552.     lea    F13_V1Data(a0),a1
  553.     move.w    d0,40(a1)        ;Reset Pattern Pos
  554.     move.w    d2,6(a1)        ;Set Song Position
  555.     lea    F13_V2Data(a0),a1
  556.     move.w    d0,40(a1)        ;Reset Pattern Pos
  557.     move.w    d2,6(a1)        ;Set Song Position
  558.     lea    F13_V3Data(a0),a1
  559.     move.w    d0,40(a1)        ;Reset Pattern Pos
  560.     move.w    d2,6(a1)        ;Set Song Position
  561.     lea    F13_V4Data(a0),a1
  562.     move.w    d0,40(a1)        ;Reset Pattern Pos
  563.     move.w    d2,6(a1)        ;Set Song Position
  564.  
  565.     movem.l    (sp)+,d0/d2/a0-a1
  566.     rts
  567. ;------------------------------------------------------------------------------
  568. ; ChangeChannel
  569. ;
  570. ; IN :    A1 = Address
  571. ;    D1 = Channel (0-3)
  572. ;    D2 = State (0=Off 1=On)
  573. ;
  574. ; OUT:    Nothing
  575. ;
  576.  
  577. FC_ChangeChannel
  578.     movem.l    d0-d4/a0,-(sp)
  579.  
  580.     moveq    #0,d3
  581.     moveq    #-1,d4
  582.     bclr    d1,d4
  583.     tst.b    d2
  584.     beq.b    .chgch1
  585.     bset    d1,d3
  586.  
  587. .CHGCH1    lea    FC_DataArea,a0
  588.     move.w    F13_ActChan(a0),d0
  589.     and.w    d4,d0
  590.     or.w    d3,d0
  591.     move.w    d0,F13_ActChan(a0)
  592.  
  593.     movem.l    (sp)+,d0-d4/a0
  594.     rts
  595. ;------------------------------------------------------------------------------
  596. SILENT    dc.w    $0100,$0000,$0000,$00e1
  597. o4a0c8    dc.l    $00000000,$00100003,$00200006,$00300009
  598. PERIODS    dc.w    $06b0,$0650,$05f4,$05a0,$054c,$0500,$04b8,$0474
  599.     dc.w    $0434,$03f8,$03c0,$038a,$0358,$0328,$02fa,$02d0
  600.     dc.w    $02a6,$0280,$025c,$023a,$021a,$01fc,$01e0,$01c5
  601.     dc.w    $01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d
  602.     dc.w    $010d,$00fe,$00f0,$00e2,$00d6,$00ca,$00be,$00b4
  603.     dc.w    $00aa,$00a0,$0097,$008f,$0087,$007f,$0078,$0071
  604.     dc.w    $0071,$0071,$0071,$0071,$0071,$0071,$0071,$0071
  605.     dc.w    $0071,$0071,$0071,$0071,$0d60,$0ca0,$0be8,$0b40
  606.     dc.w    $0a98,$0a00,$0970,$08e8,$0868,$07f0,$0780,$0714
  607.     dc.w    $1ac0,$1940,$17d0,$1680,$1530,$1400,$12e0,$11d0
  608.     dc.w    $10d0,$0fe0,$0f00,$0e28
  609. ;------------------------------------------------------------------------------
  610.     SECTION    PlayRoutine,CODE_C
  611.  
  612. ; PlayModule
  613. ;
  614. ; IN :    A1 = Address
  615. ;    D1 = VBlank/Cia (0=CIA)
  616. ;
  617. ; OUT:    Nothing
  618. ;
  619.  
  620. FC_PlayModule
  621.     movem.l    d0-d7/a0-a6,-(sp)
  622.     lea    FC_DataArea,a4
  623.     move.l    a5,F13_Global(a4)
  624.     bsr.b    play
  625.     movem.l    (sp)+,d0-d7/a0-a6
  626.     rts
  627.  
  628. PLAY    lea    F13_PerVol(a4),a6
  629.     tst.w    F13_OnOff(a4)
  630.     bne.b    music_on
  631.     rts
  632.  
  633. music_on
  634.     subq.w    #1,F13_ReSpCnt(a4)    ;Decrease replayspeed counter
  635.     bne.b    nonewnote
  636.     move.w    F13_RepSpd(a4),F13_ReSpCnt(a4);Restore replayspeed counter
  637.     lea    F13_V1Data(a4),a0    ;Point to voice1 data area
  638.     bsr.w    new_note
  639.     lea    F13_V2Data(a4),a0    ;Point to voice2 data area
  640.     bsr.w    new_note
  641.     lea    F13_V3Data(a4),a0    ;Point to voice3 data area
  642.     bsr.w    new_note
  643.     lea    F13_V4Data(a4),a0    ;Point to voice4 data area
  644.     bsr.w    new_note
  645.  
  646. nonewnote
  647.     clr.w    F13_AudTemp(a4)
  648.     lea    F13_V1Data(a4),a0
  649.     bsr.w    effects
  650.     move.w    d0,(a6)+
  651.     move.w    d1,(a6)+
  652.     lea    F13_V2Data(a4),a0
  653.     bsr.w    effects
  654.     move.w    d0,(a6)+
  655.     move.w    d1,(a6)+
  656.     lea    F13_V3Data(a4),a0
  657.     bsr.w    effects
  658.     move.w    d0,(a6)+
  659.     move.w    d1,(a6)+
  660.     lea    F13_V4Data(a4),a0
  661.     bsr.w    effects
  662.     move.w    d0,(a6)+
  663.     move.w    d1,(a6)+
  664.     lea    F13_PerVol(a4),a6
  665.     move.w    F13_AudTemp(a4),d0
  666.     and.w    F13_ActChan(a4),d0
  667.     ori.w    #$8000,d0        ;Set/clr bit = 1
  668.     move.w    d0,-(a7)
  669.     moveq    #0,d1
  670.     move.l    F13_Start1(a4),d2    ;Get samplepointers
  671.     move.w    F13_Offset1(a4),d1    ;Get offset
  672.     add.l    d1,d2            ;Add offset
  673.     move.l    F13_Start2(a4),d3
  674.     move.w    F13_Offset2(a4),d1
  675.     add.l    d1,d3
  676.     move.l    F13_Start3(a4),d4
  677.     move.w    F13_Offset3(a4),d1
  678.     add.l    d1,d4
  679.     move.l    F13_Start4(a4),d5
  680.     move.w    F13_Offset4(a4),d1
  681.     add.l    d1,d5
  682.     move.w    F13_SSize1(a4),d0    ;Get sound lengths
  683.     move.w    F13_SSize2(a4),d1
  684.     move.w    F13_SSize3(a4),d6
  685.     move.w    F13_SSize4(a4),d7
  686.     move.w    (a7)+,$dff096        ;Enable audio DMA
  687.  
  688. chan1    lea    F13_V1Data(a4),a0
  689.     tst.w    72(a0)
  690.     beq.b    chan2
  691.     subq.w    #1,72(a0)
  692.     cmpi.w    #1,72(a0)
  693.     bne.b    chan2
  694.     clr.w    72(a0)
  695.     btst    #0,F13_ActChan+1(a4)
  696.     beq.b    chan2
  697.     move.l    d2,$dff0a0        ;Set soundstart
  698.     move.w    d0,$dff0a4        ;Set soundlength
  699.  
  700. chan2    lea    F13_V2Data(a4),a0
  701.     tst.w    72(a0)
  702.     beq.b    chan3
  703.     subq.w    #1,72(a0)
  704.     cmpi.w    #1,72(a0)
  705.     bne.b    chan3
  706.     clr.w    72(a0)
  707.     btst    #1,F13_ActChan+1(a4)
  708.     beq.b    chan3
  709.     move.l    d3,$dff0b0
  710.     move.w    d1,$dff0b4
  711.  
  712. chan3    lea    F13_V3Data(a4),a0
  713.     tst.w    72(a0)
  714.     beq.b    chan4
  715.     subq.w    #1,72(a0)
  716.     cmpi.w    #1,72(a0)
  717.     bne.b    chan4
  718.     clr.w    72(a0)
  719.     btst    #2,F13_ActChan+1(a4)
  720.     beq.b    chan4
  721.     move.l    d4,$dff0c0
  722.     move.w    d6,$dff0c4
  723.  
  724. chan4    lea    F13_V4Data(a4),a0
  725.     tst.w    72(a0)
  726.     beq.b    setpervol
  727.     subq.w    #1,72(a0)
  728.     cmpi.w    #1,72(a0)
  729.     bne.b    setpervol
  730.     clr.w    72(a0)
  731.     btst    #3,F13_ActChan+1(a4)
  732.     beq.b    setpervol
  733.     move.l    d5,$dff0d0
  734.     move.w    d7,$dff0d4
  735.  
  736. setpervol
  737.     move.l    F13_Global(a4),a0
  738.     move.l    APG_CalcVolume(a0),a0
  739.     lea    $dff0a6,a5
  740.     move.w    F13_ActChan(a4),d7
  741.  
  742.     moveq    #0,d0
  743.     move.w    (a6),d2
  744.     addq.l    #4,a6
  745.     btst    #0,d7
  746.     beq.b    .skip1
  747.     move.w    d2,(a5)            ;Set period
  748.     move.w    -2(a6),d0        ;Get Volume
  749.     jsr    (a0)
  750. .SKIP1    move.w    d0,2(a5)        ;Set volume
  751.  
  752.     moveq    #0,d0
  753.     move.w    (a6),d2
  754.     addq.l    #4,a6
  755.     btst    #1,d7
  756.     beq.b    .skip2
  757.     move.w    d2,16(a5)        ;Set period
  758.     move.w    -2(a6),d0        ;Get Volume
  759.     jsr    (a0)
  760. .SKIP2    move.w    d0,18(a5)        ;Set volume
  761.  
  762.     moveq    #0,d0
  763.     move.w    (a6),d2
  764.     addq.l    #4,a6
  765.     btst    #2,d7
  766.     beq.b    .skip3
  767.     move.w    d2,32(a5)        ;Set period
  768.     move.w    -2(a6),d0        ;Get Volume
  769.     jsr    (a0)
  770. .SKIP3    move.w    d0,34(a5)        ;Set volume
  771.  
  772.     moveq    #0,d0
  773.     move.w    (a6),d2
  774.     addq.l    #4,a6
  775.     btst    #3,d7
  776.     beq.b    .skip4
  777.     move.w    d2,48(a5)        ;Set period
  778.     move.w    -2(a6),d0        ;Get Volume
  779.     jsr    (a0)
  780. .SKIP4    move.w    d0,50(a5)        ;Set volume
  781.     rts
  782.  
  783. new_note
  784.     moveq    #0,d5
  785.     move.l    34(a0),a1
  786.     adda.w    40(a0),a1
  787.     cmp.w    #64,40(a0)
  788.     bne.b    samepat
  789.     move.l    FC_DataArea+F13_Global,a2
  790.     move.l    APG_SendMsg(a2),a2
  791.     move.w    #MSG_NextPos,d2
  792.     jsr    (a2)            ;Send NextPos Message
  793.     move.l    (a0),a2
  794.     adda.w    6(a0),a2        ;Point to next sequence row
  795.     cmpa.l    52(a0),a2        ;Is it the end?
  796.     bne.b    notend
  797.     move.l    FC_DataArea+F13_Global,a2
  798.     move.l    APG_SendMsg(a2),a2
  799.     move.w    #MSG_NextMod,d2
  800.     jsr    (a2)            ;Send NextMod Message
  801.     move.w    d5,6(a0)
  802.     move.l    (a0),a2            ;Point to first sequence
  803.  
  804. notend    moveq    #1,d1
  805.     addq.b    #1,F13_SpdTemp(a4)
  806.     cmpi.b    #5,F13_SpdTemp(a4)
  807.     bne.b    nonewspd
  808.     move.b    d1,F13_SpdTemp(a4)
  809.     move.b    12(a2),d1        ;Get new replay speed
  810.     beq.b    nonewspd
  811.     move.w    d1,F13_ReSpCnt(a4)    ;store in counter
  812.     move.w    d1,F13_RepSpd(a4)
  813.  
  814. nonewspd
  815.     move.b    (a2),d1            ;Pattern to play
  816.     move.b    1(a2),44(a0)        ;Transpose value
  817.     move.b    2(a2),22(a0)        ;Soundtranspose value
  818.  
  819.     move.w    d5,40(a0)
  820.     lsl.w    #6,d1
  821.     add.l    F13_PATPoint(a4),d1    ;Get pattern pointer
  822.     move.l    d1,34(a0)
  823.     addi.w    #$000d,6(a0)
  824.     move.l    d1,a1
  825.  
  826. samepat    move.b    1(a1),d1        ;Get info byte
  827.     move.b    (a1)+,d0        ;Get note
  828.     bne.b    ww1
  829.     andi.w    #%11000000,d1
  830.     beq.b    noport
  831.     bra.b    ww11
  832.  
  833. ww1    move.w    d5,56(a0)
  834. ww11    move.b    d5,47(a0)
  835.     move.b    (a1),31(a0)
  836.  
  837.         ;31(a0) = PORTAMENTO/INSTR. info
  838.             ;Bit 7 = portamento on
  839.             ;Bit 6 = portamento off
  840.             ;Bit 5-0 = instrument number
  841.         ;47(a0) = portamento value
  842.             ;Bit 7-5 = always zero
  843.             ;Bit 4 = up/down
  844.             ;Bit 3-0 = value
  845. t_porton
  846.     btst    #7,d1
  847.     beq.b    noport
  848.     move.b    2(a1),47(a0)    
  849. noport    andi.w    #$007f,d0
  850.     beq.b    nextnote
  851.     move.b    d0,8(a0)
  852.     move.b    (a1),9(a0)
  853.     move.b    32(a0),d2
  854.     moveq    #0,d3
  855.     bset    d2,d3
  856.     or.w    d3,F13_AudTemp(a4)
  857.     move.w    d3,$dff096
  858.     move.b    (a1),d1
  859.     andi.w    #$003f,d1        ;Max 64 instruments
  860.     add.b    22(a0),d1
  861.     move.l    F13_VOLPoint(a4),a2
  862.     lsl.w    #6,d1
  863.     adda.w    d1,a2
  864.     move.w    d5,16(a0)
  865.     move.b    (a2),23(a0)
  866.     move.b    (a2)+,24(a0)
  867.     move.b    (a2)+,d1
  868.     andi.w    #$00ff,d1
  869.     move.b    (a2)+,27(a0)
  870.     move.b    #$40,46(a0)
  871.     move.b    (a2)+,d0
  872.     move.b    d0,28(a0)
  873.     move.b    d0,29(a0)
  874.     move.b    (a2)+,30(a0)
  875.     move.l    a2,10(a0)
  876.     move.l    F13_FRQPoint(a4),a2
  877.     lsl.w    #6,d1
  878.     adda.w    d1,a2
  879.     move.l    a2,18(a0)
  880.     move.w    d5,50(a0)
  881.     move.b    d5,26(a0)
  882.     move.b    d5,25(a0)
  883. nextnote
  884.     addq.w    #2,40(a0)
  885.     rts
  886.  
  887. effects    moveq    #0,d7
  888. testsustain
  889.     tst.b    26(a0)            ;Is sustain counter = 0
  890.     beq.b    sustzero
  891.     subq.b    #1,26(a0)        ;if no, decrease counter
  892.     bra.w    VOLUfx
  893.  
  894. sustzero                ;Next part of effect sequence
  895.     move.l    18(a0),a1        ;can be executed now.
  896.     adda.w    50(a0),a1
  897. testeffects
  898.     cmpi.b    #$e1,(a1)        ;E1 = end of FREQseq sequence
  899.     beq.w    VOLUfx
  900.     cmpi.b    #$e0,(a1)        ;E0 = loop to other part of sequence
  901.     bne.b    testnewsound
  902.     move.b    1(a1),d0        ;loop to start of sequence + 1(a1)
  903.     andi.w    #$003f,d0
  904.     move.w    d0,50(a0)
  905.     move.l    18(a0),a1
  906.     adda.w    d0,a1
  907. testnewsound
  908.     move.l    a4,-(sp)
  909.     cmpi.b    #$e2,(a1)        ;E2 = set waveform
  910.     bne.b    o49c64
  911.     moveq    #0,d0
  912.     moveq    #0,d1
  913.     move.b    32(a0),d1
  914.     bset    d1,d0
  915.     or.w    d0,F13_AudTemp(a4)
  916.     move.w    d0,$dff096
  917.     move.b    1(a1),d0
  918.     andi.w    #$00ff,d0
  919.     lea    F13_SoundInfo(a4),a4
  920.     add.w    d0,d0
  921.     move.w    d0,d1
  922.     add.w    d1,d1
  923.     add.w    d1,d1
  924.     add.w    d1,d0
  925.     adda.w    d0,a4
  926.     move.l    60(a0),a3
  927.     move.l    (a4),d1
  928.     add.l    #WAVEFORMS,d1
  929.     move.l    d1,(a3)
  930.     move.l    d1,68(a0)
  931.     move.w    4(a4),4(a3)
  932.     move.l    6(a4),64(a0)
  933.     swap    d1
  934.     move.w    #$0003,72(a0)
  935.     tst.w    d1
  936.     bne.b    o49c52
  937.     move.w    #$0002,72(a0)
  938. o49c52    clr.w    16(a0)
  939.     move.b    #$01,23(a0)
  940.     addq.w    #2,50(a0)
  941.     move.l    (sp)+,a4
  942.     bra.w    o49d02
  943.  
  944. o49c64    cmpi.b    #$e4,(a1)
  945.     bne.b    testpatjmp
  946.     move.b    1(a1),d0
  947.     andi.w    #$00ff,d0
  948.     lea    F13_SoundInfo(a4),a4
  949.     add.w    d0,d0
  950.     move.w    d0,d1
  951.     add.w    d1,d1
  952.     add.w    d1,d1
  953.     add.w    d1,d0
  954.     adda.w    d0,a4
  955.     move.l    60(a0),a3
  956.     move.l    (a4),d1
  957.     add.l    #WAVEFORMS,d1
  958.     move.l    d1,(a3)
  959.     move.l    d1,68(a0)
  960.     move.w    4(a4),4(a3)
  961.     move.l    6(a4),64(a0)
  962.  
  963.     swap    d1
  964.     move.w    #$0003,72(a0)
  965.     tst.w    d1
  966.     bne.b    o49cae
  967.     move.w    #$0002,72(a0)
  968. o49cae    addq.w    #2,50(a0)
  969.     move.l    (sp)+,a4
  970.     bra.b    o49d02
  971.  
  972. testpatjmp
  973.     move.l    (sp)+,a4
  974.     cmpi.b    #$e7,(a1)
  975.     bne.b    testnewsustain
  976.     move.b    1(a1),d0
  977.     andi.w    #$00ff,d0
  978.     lsl.w    #6,d0
  979.     move.l    F13_FRQPoint(a4),a1
  980.     adda.w    d0,a1
  981.     move.l    a1,18(a0)
  982.     move.w    d7,50(a0)
  983.     bra.w    testeffects
  984.  
  985. testnewsustain
  986.     cmpi.b    #$e8,(a1)        ;E8 = set sustain time
  987.     bne.b    o49cea
  988.     move.b    1(a1),26(a0)
  989.     addq.w    #2,50(a0)
  990.     bra.w    testsustain
  991.  
  992. o49cea    cmpi.b    #$e3,(a1)
  993.     bne.b    o49d02
  994.     addq.w    #3,50(a0)
  995.     move.b    1(a1),27(a0)
  996.     move.b    2(a1),28(a0)
  997.  
  998. o49d02    move.l    18(a0),a1
  999.     adda.w    50(a0),a1
  1000.     move.b    (a1),43(a0)
  1001.     addq.w    #1,50(a0)
  1002.  
  1003. VOLUfx    tst.b    25(a0)
  1004.     beq.b    o49d1e
  1005.     subq.b    #1,25(a0)
  1006.     bra.b    o49d70
  1007.  
  1008. o49d1e    subq.b    #1,23(a0)
  1009.     bne.b    o49d70
  1010.     move.b    24(a0),23(a0)
  1011.  
  1012. o49d2a    move.l    10(a0),a1
  1013.     adda.w    16(a0),a1
  1014.     move.b    (a1),d0
  1015.     cmpi.b    #$e8,d0
  1016.     bne.b    o49d4a
  1017.     addq.w    #2,16(a0)
  1018.     move.b    1(a1),25(a0)
  1019.     bra.b    VOLUfx
  1020.  
  1021. o49d4a    cmpi.b    #$e1,d0
  1022.     beq.b    o49d70
  1023.     cmpi.b    #$e0,d0
  1024.     bne.b    o49d68
  1025.     move.b    1(a1),d0
  1026.     andi.l    #$003f,d0
  1027.     subq.b    #5,d0
  1028.     move.w    d0,16(a0)
  1029.     bra.b    o49d2a
  1030.  
  1031. o49d68    move.b    (a1),45(a0)
  1032.     addq.w    #1,16(a0)
  1033. o49d70    move.b    43(a0),d0
  1034.     bmi.b    o49d7e
  1035.     add.b    8(a0),d0
  1036.     add.b    44(a0),d0
  1037. o49d7e    andi.w    #$007f,d0
  1038.     lea    PERIODS,a1
  1039.     add.w    d0,d0
  1040.     move.w    d0,d1
  1041.     adda.w    d0,a1
  1042.     move.w    (a1),d0
  1043.     move.b    46(a0),d7
  1044.     tst.b    30(a0)
  1045.     beq.b    o49d9e
  1046.     subq.b    #1,30(a0)
  1047.     bra.b    o49df4
  1048.  
  1049. o49d9e    move.b    d1,d5
  1050.     move.b    28(a0),d4
  1051.     add.b    d4,d4
  1052.     move.b    29(a0),d1
  1053.     tst.b    d7
  1054.     bpl.b    o49db4
  1055.     btst    #0,d7
  1056.     bne.b    o49dda
  1057. o49db4    btst    #5,d7
  1058.     bne.b    o49dc8
  1059.     sub.b    27(a0),d1
  1060.     bcc.b    o49dd6
  1061.     bset    #5,d7
  1062.     moveq    #0,d1
  1063.     bra.b    o49dd6
  1064.  
  1065. o49dc8    add.b    27(a0),d1
  1066.     cmp.b    d4,d1
  1067.     bcs.b    o49dd6
  1068.     bclr    #5,d7
  1069.     move.b    d4,d1
  1070. o49dd6    move.b    d1,29(a0)
  1071. o49dda    lsr.b    #1,d4
  1072.     sub.b    d4,d1
  1073.     bcc.b    o49de4
  1074.     subi.w    #$0100,d1
  1075. o49de4    addi.b    #$a0,d5
  1076.     bcs.b    o49df2
  1077. o49dea    add.w    d1,d1
  1078.     addi.b    #$18,d5
  1079.     bcc.b    o49dea
  1080. o49df2    add.w    d1,d0
  1081. o49df4    eori.b    #$01,d7
  1082.     move.b    d7,46(a0)
  1083.  
  1084. ; DO THE PORTAMENTO THING
  1085.     moveq    #0,d1
  1086.     move.b    47(a0),d1        ;get portavalue
  1087.     beq.b    a56d0            ;0=no portamento
  1088.     cmpi.b    #$1f,d1
  1089.     bls.b    portaup
  1090. portadown
  1091.     andi.w    #$1f,d1
  1092.     neg.w    d1
  1093. portaup    sub.w    d1,56(a0)
  1094. a56d0    add.w    56(a0),d0
  1095. o49e3e    cmpi.w    #$0070,d0
  1096.     bhi.b    nn1
  1097.     move.w    #$0071,d0
  1098. nn1    cmpi.w    #$06b0,d0
  1099.     bls.b    nn2
  1100.     move.w    #$06b0,d0
  1101. nn2    moveq    #0,d1
  1102.     move.b    45(a0),d1
  1103.     rts
  1104. ;------------------------------------------------------------------------------
  1105.     SECTION    WaveForms,DATA_C
  1106.  
  1107. WAVEFORMS
  1108.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1109.     dc.w $3f37,$2f27,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1110.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1111.     dc.w $c037,$2f27,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1112.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1113.     dc.w $c0b8,$2f27,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1114.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1115.     dc.w $c0b8,$b027,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1116.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1117.     dc.w $c0b8,$b0a8,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
  1118.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1119.     dc.w $c0b8,$b0a8,$a017,$0f07,$ff07,$0f17,$1f27,$2f37
  1120.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1121.     dc.w $c0b8,$b0a8,$a098,$0f07,$ff07,$0f17,$1f27,$2f37
  1122.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1123.     dc.w $c0b8,$b0a8,$a098,$9007,$ff07,$0f17,$1f27,$2f37
  1124.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1125.     dc.w $c0b8,$b0a8,$a098,$9088,$ff07,$0f17,$1f27,$2f37
  1126.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1127.     dc.w $c0b8,$b0a8,$a098,$9088,$8007,$0f17,$1f27,$2f37
  1128.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1129.     dc.w $c0b8,$b0a8,$a098,$9088,$8088,$0f17,$1f27,$2f37
  1130.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1131.     dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9017,$1f27,$2f37
  1132.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1133.     dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$1f27,$2f37
  1134.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1135.     dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$a027,$2f37
  1136.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1137.     dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$a0a8,$2f37
  1138.     dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
  1139.     dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$a0a8,$b037
  1140.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1141.     dc.w $7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1142.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1143.     dc.w $817f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1144.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1145.     dc.w $8181,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1146.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1147.     dc.w $8181,$817f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1148.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1149.     dc.w $8181,$8181,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1150.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1151.     dc.w $8181,$8181,$817f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1152.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1153.     dc.w $8181,$8181,$8181,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1154.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1155.     dc.w $8181,$8181,$8181,$817f,$7f7f,$7f7f,$7f7f,$7f7f
  1156.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1157.     dc.w $8181,$8181,$8181,$8181,$7f7f,$7f7f,$7f7f,$7f7f
  1158.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1159.     dc.w $8181,$8181,$8181,$8181,$817f,$7f7f,$7f7f,$7f7f
  1160.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1161.     dc.w $8181,$8181,$8181,$8181,$8181,$7f7f,$7f7f,$7f7f
  1162.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1163.     dc.w $8181,$8181,$8181,$8181,$8181,$817f,$7f7f,$7f7f
  1164.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1165.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$7f7f,$7f7f
  1166.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
  1167.     dc.w $8181,$8181,$8181,$8181,$8181,$8181,$817f,$7f7f
  1168.     dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$8080
  1169.     dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$7f7f
  1170.     dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$8080
  1171.     dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$807f
  1172.     dc.w $8080,$8080,$8080,$8080,$7f7f,$7f7f,$7f7f,$7f7f
  1173.     dc.w $8080,$8080,$8080,$807f,$7f7f,$7f7f,$7f7f,$7f7f
  1174.     dc.w $8080,$8080,$8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1175.     dc.w $8080,$8080,$807f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1176.     dc.w $8080,$8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1177.     dc.w $8080,$807f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1178.     dc.w $8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1179.     dc.w $8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
  1180.     dc.w $8080,$9098,$a0a8,$b0b8,$c0c8,$d0d8,$e0e8,$f0f8
  1181.     dc.w $0008,$1018,$2028,$3038,$4048,$5058,$6068,$707f
  1182.     dc.w $8080,$a0b0,$c0d0,$e0f0,$0010,$2030,$4050,$6070
  1183.     dc.w $4545,$797d,$7a77,$7066,$6158,$534d,$2c20,$1812
  1184.     dc.w $04db,$d3cd,$c6bc,$b5ae,$a8a3,$9d99,$938e,$8b8a
  1185.     dc.w $4545,$797d,$7a77,$7066,$5b4b,$4337,$2c20,$1812
  1186.     dc.w $04f8,$e8db,$cfc6,$beb0,$a8a4,$9e9a,$9594,$8d83
  1187.     dc.w $0000,$4060,$7f60,$4020,$00e0,$c0a0,$80a0,$c0e0
  1188.     dc.w $0000,$4060,$7f60,$4020,$00e0,$c0a0,$80a0,$c0e0
  1189.     dc.w $8080,$9098,$a0a8,$b0b8,$c0c8,$d0d8,$e0e8,$f0f8
  1190.     dc.w $0008,$1018,$2028,$3038,$4048,$5058,$6068,$707f
  1191.     dc.w $8080,$a0b0,$c0d0,$e0f0,$0010,$2030,$4050,$6070
  1192. ;------------------------------------------------------------------------------
  1193.     SECTION    DataArea,BSS
  1194.  
  1195. FC_DataArea
  1196.     ds.b    Future13Struct_SIZEOF
  1197. ;------------------------------------------------------------------------------
  1198. SLUT
  1199.