1 /***************************************************************************
2                           sidbuilder.h  -  Sid Builder Classes
3                              -------------------
4     begin                : Sat May 6 2001
5     copyright            : (C) 2000 by Simon White
6     email                : s_a_white@email.com
7  ***************************************************************************/
8 
9 /***************************************************************************
10  *                                                                         *
11  *   This program is free software; you can redistribute it and/or modify  *
12  *   it under the terms of the GNU General Public License as published by  *
13  *   the Free Software Foundation; either version 2 of the License, or     *
14  *   (at your option) any later version.                                   *
15  *                                                                         *
16  ***************************************************************************/
17 
18 #ifndef _sidbuilder_h_
19 #define _sidbuilder_h_
20 
21 #include "sid2types.h"
22 #include "component.h"
23 #include "c64env.h"
24 
25 
26 // Inherit this class to create a new SID emulations for libsidplay2.
27 class sidbuilder;
28 class sidemu: public component
29 {
30 private:
31     sidbuilder *m_builder;
32 
33 public:
sidemu(sidbuilder * builder)34     sidemu (sidbuilder *builder)
35     :m_builder (builder) {;}
~sidemu()36     virtual ~sidemu () {;}
37 
38     // Standard component functions
reset()39     void            reset () { reset (0); }
40     virtual void    reset (uint8_t volume) = 0;
41     virtual uint8_t read  (uint_least8_t addr) = 0;
42     virtual void    write (uint_least8_t addr, uint8_t data) = 0;
43     virtual const   char *credits (void) = 0;
44 
45     // Standard SID functions
46     virtual int_least32_t output  (uint_least8_t bits) = 0;
47     virtual void          voice   (uint_least8_t num,
48                                    uint_least8_t vol,
49                                    bool mute) = 0;
50     virtual void          gain    (int_least8_t precent) = 0;
optimisation(uint_least8_t)51     virtual void          optimisation (uint_least8_t /*level*/) {;}
builder(void)52     sidbuilder           *builder (void) const { return m_builder; }
53 };
54 
55 
56 class sidbuilder
57 {
58 private:
59     const char * const m_name;
60 
61 protected:
62     bool m_status;
63 
64 public:
65     // Determine current state of object (true = okay, false = error).
sidbuilder(const char * const name)66     sidbuilder(const char * const name)
67         : m_name(name), m_status (true) {;}
~sidbuilder()68     virtual ~sidbuilder() {;}
69 
70     virtual  sidemu      *lock    (c64env *env, sid2_model_t model) = 0;
71     virtual  void         unlock  (sidemu *device) = 0;
name(void)72     const    char        *name    (void) const { return m_name; }
73     virtual  const  char *error   (void) const = 0;
74     virtual  const  char *credits (void) = 0;
75     operator bool() const { return m_status; }
76 };
77 
78 #endif // _sidbuilder_h_
79