libsidplayfp  0.3.5
sidbuilder.h
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 protected:
34  int m_bufferpos;
35  short *m_buffer;
36 
37 public:
38  sidemu (sidbuilder *builder)
39  : m_builder (builder) {;}
40  virtual ~sidemu () {;}
41 
42  // Standard component functions
43  void reset () { reset (0); }
44  virtual void reset (uint8_t volume) = 0;
45  virtual uint8_t read (uint_least8_t addr) = 0;
46  virtual void write (uint_least8_t addr, uint8_t data) = 0;
47  virtual void clock() = 0;
48  virtual const char *credits (void) = 0;
49 
50  // Standard SID functions
51  virtual void voice (uint_least8_t num, bool mute) = 0;
52  sidbuilder *builder (void) const { return m_builder; }
53 
54  virtual int bufferpos() { return m_bufferpos; }
55  virtual void bufferpos(int pos) { m_bufferpos = pos; }
56  virtual short *buffer() { return m_buffer; }
57 
58  virtual void sampling(float systemfreq, float outputfreq,
59  const sampling_method_t method, const bool fast) { return; }
60 };
61 
63 {
64 private:
65  const char * const m_name;
66 
67 protected:
68  bool m_status;
69 
70 public:
71  sidbuilder(const char * const name)
72  : m_name(name), m_status (true) {;}
73  virtual ~sidbuilder() {;}
74 
75  virtual sidemu *lock (c64env *env, sid2_model_t model) = 0;
76  virtual void unlock (sidemu *device) = 0;
77  const char *name (void) const { return m_name; }
78  virtual const char *error (void) const = 0;
79  virtual const char *credits (void) = 0;
80  virtual void filter (bool enable) = 0;
81 
82  // Determine current state of object (true = okay, false = error).
83  operator bool() const { return m_status; }
84 };
85 
86 #endif // _sidbuilder_h_