summaryrefslogtreecommitdiff
path: root/plugins/gme/game-music-emu-0.6.0/gme/Sap_Emu.h
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/gme/game-music-emu-0.6.0/gme/Sap_Emu.h')
-rw-r--r--plugins/gme/game-music-emu-0.6.0/gme/Sap_Emu.h69
1 files changed, 69 insertions, 0 deletions
diff --git a/plugins/gme/game-music-emu-0.6.0/gme/Sap_Emu.h b/plugins/gme/game-music-emu-0.6.0/gme/Sap_Emu.h
new file mode 100644
index 00000000..21879447
--- /dev/null
+++ b/plugins/gme/game-music-emu-0.6.0/gme/Sap_Emu.h
@@ -0,0 +1,69 @@
+// Atari XL/XE SAP music file emulator
+
+// Game_Music_Emu 0.5.5
+#ifndef SAP_EMU_H
+#define SAP_EMU_H
+
+#include "Classic_Emu.h"
+#include "Sap_Apu.h"
+#include "Sap_Cpu.h"
+
+class Sap_Emu : private Sap_Cpu, public Classic_Emu {
+ typedef Sap_Cpu cpu;
+public:
+ static gme_type_t static_type() { return gme_sap_type; }
+public:
+ Sap_Emu();
+ ~Sap_Emu();
+ struct info_t {
+ byte const* rom_data;
+ const char* warning;
+ long init_addr;
+ long play_addr;
+ long music_addr;
+ int type;
+ int track_count;
+ int fastplay;
+ bool stereo;
+ char author [256];
+ char name [256];
+ char copyright [ 32];
+ };
+protected:
+ blargg_err_t track_info_( track_info_t*, int track ) const;
+ blargg_err_t load_mem_( byte const*, long );
+ blargg_err_t start_track_( int );
+ blargg_err_t run_clocks( blip_time_t&, int );
+ void set_tempo_( double );
+ void set_voice( int, Blip_Buffer*, Blip_Buffer*, Blip_Buffer* );
+ void update_eq( blip_eq_t const& );
+public: private: friend class Sap_Cpu;
+ int cpu_read( sap_addr_t );
+ void cpu_write( sap_addr_t, int );
+ void cpu_write_( sap_addr_t, int );
+private:
+ info_t info;
+
+ byte const* file_end;
+ sap_time_t scanline_period;
+ sap_time_t next_play;
+ sap_time_t time_mask;
+ Sap_Apu apu;
+ Sap_Apu apu2;
+
+ // large items
+ struct {
+ byte padding1 [0x100];
+ byte ram [0x10000];
+ byte padding2 [0x100];
+ } mem;
+ Sap_Apu_Impl apu_impl;
+
+ sap_time_t play_period() const;
+ void call_play();
+ void cpu_jsr( sap_addr_t );
+ void call_init( int track );
+ void run_routine( sap_addr_t );
+};
+
+#endif