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