annotate Plugins/Input/console/Gbs_Emu.h @ 352:f13ab2d8e9cf trunk

[svn] various fixes :(
author nenolod
date Mon, 26 Dec 2005 14:12:35 -0800
parents 252843aac42f
children 0b9507985f0d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
90
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
1
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
2 // Game Boy GBS-format game music file emulator
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
3
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
4 // Game_Music_Emu 0.2.4. Copyright (C) 2003-2005 Shay Green. GNU LGPL license.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
5
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
6 #ifndef GBS_EMU_H
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
7 #define GBS_EMU_H
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
8
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
9 #include "Classic_Emu.h"
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
10 #include "Gb_Apu.h"
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
11 #include "Gb_Cpu.h"
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
12
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
13 class Gbs_Emu : public Classic_Emu {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
14 public:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
15 // Sets internal gain, where 1.0 results in almost no clamping. Default gain
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
16 // roughly matches volume of other emulators.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
17 Gbs_Emu( double gain = 1.3 );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
18 ~Gbs_Emu();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
19
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
20 struct header_t {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
21 char tag [3];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
22 byte vers;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
23 byte track_count;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
24 byte first_track;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
25 byte load_addr [2];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
26 byte init_addr [2];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
27 byte play_addr [2];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
28 byte stack_ptr [2];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
29 byte timer_modulo;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
30 byte timer_mode;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
31 char game [32];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
32 char author [32];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
33 char copyright [32];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
34
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
35 enum { song = 0 }; // no song titles
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
36 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
37 BOOST_STATIC_ASSERT( sizeof (header_t) == 112 );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
38
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
39 // Load GBS, given its header and reader for remaining data
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
40 blargg_err_t load( const header_t&, Emu_Reader& );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
41
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
42 const char** voice_names() const;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
43 blargg_err_t start_track( int );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
44
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
45
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
46 // End of public interface
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
47 protected:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
48 void set_voice( int, Blip_Buffer*, Blip_Buffer*, Blip_Buffer* );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
49 void update_eq( blip_eq_t const& );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
50 blip_time_t run( int, bool* );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
51 private:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
52 // rom
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
53 const byte* rom_bank;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
54 byte* rom;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
55 void unload();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
56 int bank_count;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
57 void set_bank( int );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
58 static void write_rom( Gbs_Emu*, gb_addr_t, int );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
59 static int read_rom( Gbs_Emu*, gb_addr_t );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
60 static int read_bank( Gbs_Emu*, gb_addr_t );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
61
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
62 // state
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
63 gb_addr_t load_addr;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
64 gb_addr_t init_addr;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
65 gb_addr_t play_addr;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
66 gb_addr_t stack_ptr;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
67 int timer_modulo_init;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
68 int timer_mode;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
69
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
70 // timer
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
71 gb_time_t cpu_time;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
72 gb_time_t play_period;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
73 gb_time_t next_play;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
74 int double_speed;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
75
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
76 // hardware
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
77 Gb_Apu apu;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
78 byte hi_page [0x100];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
79 void set_timer( int tma, int tmc );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
80 static int read_io( Gbs_Emu*, gb_addr_t );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
81 static void write_io( Gbs_Emu*, gb_addr_t, int );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
82 static int read_unmapped( Gbs_Emu*, gb_addr_t );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
83 static void write_unmapped( Gbs_Emu*, gb_addr_t, int );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
84
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
85 // cpu and ram
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
86 Gb_Cpu cpu;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
87 void cpu_jsr( gb_addr_t );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
88 gb_time_t clock() const;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
89 byte ram [0x4000];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
90 static int read_ram( Gbs_Emu*, gb_addr_t );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
91 static void write_ram( Gbs_Emu*, gb_addr_t, int );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
92 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
93
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
94 #endif
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
95