1 /*
2  * Adplug - Replayer for many OPL2/OPL3 audio file formats.
3  * Copyright (C) 1999 - 2003 Simon Peter, <dn.tlp@gmx.net>, et al.
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
18  *
19  * [xad] PSI player, by Riven the Mage <riven@ok.ru>
20  */
21 
22 #include "xad.h"
23 
24 class CxadpsiPlayer: public CxadPlayer
25 {
26 public:
27   static CPlayer *factory(Copl *newopl);
28 
CxadpsiPlayer(Copl * newopl)29   CxadpsiPlayer(Copl *newopl): CxadPlayer(newopl)
30     { }
31 
32 protected:
33   struct psi_header
34   {
35     unsigned short  instr_ptr;
36     unsigned short  seq_ptr;
37   } header;
38 
39   struct
40   {
41     unsigned char   *instr_table;
42     unsigned char   *seq_table;
43     unsigned char   note_delay[9];
44     unsigned char   note_curdelay[9];
45     unsigned char   looping[9];
46   } psi;
47   //
xadplayer_load()48   bool		  xadplayer_load()
49     {
50       if(xad.fmt == PSI)
51 	return true;
52       else
53 	return false;
54     }
55   void            xadplayer_rewind(int subsong);
56   void            xadplayer_update();
57   float           xadplayer_getrefresh();
58   std::string     xadplayer_gettype();
59   unsigned int    xadplayer_getinstruments();
60 
61 private:
62   static const unsigned char psi_adlib_registers[99];
63   static const unsigned short psi_notes[16];
64 };
65