LMMS
Loading...
Searching...
No Matches
Gbs_Emu.h
Go to the documentation of this file.
1// Nintendo Game Boy GBS music file emulator
2
3// Game_Music_Emu https://bitbucket.org/mpyne/game-music-emu/
4#ifndef GBS_EMU_H
5#define GBS_EMU_H
6
7#include "Classic_Emu.h"
8#include "Gb_Apu.h"
9#include "Gb_Cpu.h"
10
11class Gbs_Emu : private Gb_Cpu, public Classic_Emu {
12 typedef Gb_Cpu cpu;
13public:
14 // Equalizer profiles for Game Boy Color speaker and headphones
17
18 // GBS file header
19 enum { header_size = 112 };
20 struct header_t
21 {
22 char tag [3];
23 byte vers;
26 byte load_addr [2];
27 byte init_addr [2];
28 byte play_addr [2];
29 byte stack_ptr [2];
32 char game [32];
33 char author [32];
34 char copyright [32];
35 };
36
37 // Header for currently loaded file
38 header_t const& header() const { return header_; }
39
40 static gme_type_t static_type() { return gme_gbs_type; }
41
42public:
43 // deprecated
44 using Music_Emu::load;
45 blargg_err_t load( header_t const& h, Data_Reader& in ) // use Remaining_Reader
46 { return load_remaining_( &h, sizeof h, in ); }
47
48public:
49 Gbs_Emu();
50 ~Gbs_Emu();
51protected:
52 blargg_err_t track_info_( track_info_t*, int track ) const;
53 blargg_err_t load_( Data_Reader& );
54 blargg_err_t start_track_( int );
55 blargg_err_t run_clocks( blip_time_t&, int );
56 void set_tempo_( double );
58 void update_eq( blip_eq_t const& );
59 void unload();
60private:
61 // rom
62 enum { bank_size = 0x4000 };
64 void set_bank( int );
65
66 // timer
70 void update_timer();
71
73 void cpu_jsr( gb_addr_t );
74
75public: private: friend class Gb_Cpu;
76 blip_time_t clock() const { return cpu_time - cpu::remain(); }
77
78 enum { joypad_addr = 0xFF00 };
79 enum { ram_addr = 0xA000 };
80 enum { hi_page = 0xFF00 - ram_addr };
81 byte ram [0x4000 + 0x2000 + Gb_Cpu::cpu_padding];
83
84 int cpu_read( gb_addr_t );
85 void cpu_write( gb_addr_t, int );
86};
87
88#endif
blip_long blip_time_t
Definition Blip_Buffer.h:17
unsigned gb_addr_t
Definition Gb_Cpu.h:11
BLARGG_EXPORT gme_type_t const gme_gbs_type
Definition gme.h:166
Definition Blip_Buffer.h:23
Classic_Emu()
Definition Classic_Emu.cpp:21
Definition Data_Reader.h:10
Definition Gb_Apu.h:9
blargg_long remain() const
Definition Gb_Cpu.h:58
@ cpu_padding
Definition Gb_Cpu.h:61
blip_time_t next_play
Definition Gbs_Emu.h:69
blip_time_t clock() const
Definition Gbs_Emu.h:76
Rom_Data< bank_size > rom
Definition Gbs_Emu.h:63
void set_bank(int)
Definition Gbs_Emu.cpp:148
void update_timer()
Definition Gbs_Emu.cpp:162
void cpu_write(gb_addr_t, int)
Definition gb_cpu_io.h:20
blip_time_t cpu_time
Definition Gbs_Emu.h:67
blargg_err_t load(header_t const &h, Data_Reader &in)
Definition Gbs_Emu.h:45
void cpu_jsr(gb_addr_t)
Definition Gbs_Emu.cpp:189
blargg_err_t track_info_(track_info_t *, int track) const
Definition Gbs_Emu.cpp:64
static equalizer_t const handheld_eq
Definition Gbs_Emu.h:15
byte ram[0x4000+0x2000+Gb_Cpu::cpu_padding]
Definition Gbs_Emu.h:81
Gb_Cpu cpu
Definition Gbs_Emu.h:12
static equalizer_t const headphones_eq
Definition Gbs_Emu.h:16
blargg_err_t load_(Data_Reader &)
Definition Gbs_Emu.cpp:108
Gbs_Emu()
Definition Gbs_Emu.cpp:26
friend class Gb_Cpu
Definition Gbs_Emu.h:75
blargg_err_t start_track_(int)
Definition Gbs_Emu.cpp:203
@ joypad_addr
Definition Gbs_Emu.h:78
static gme_type_t static_type()
Definition Gbs_Emu.h:40
header_t header_
Definition Gbs_Emu.h:72
blip_time_t play_period
Definition Gbs_Emu.h:68
@ ram_addr
Definition Gbs_Emu.h:79
void set_tempo_(double)
Definition Gbs_Emu.cpp:197
blargg_err_t run_clocks(blip_time_t &, int)
Definition Gbs_Emu.cpp:240
Gb_Apu apu
Definition Gbs_Emu.h:82
~Gbs_Emu()
Definition Gbs_Emu.cpp:47
int cpu_read(gb_addr_t)
Definition gb_cpu_io.h:6
@ header_size
Definition Gbs_Emu.h:19
void update_eq(blip_eq_t const &)
Definition Gbs_Emu.cpp:134
void unload()
Definition Gbs_Emu.cpp:49
void set_voice(int, Blip_Buffer *, Blip_Buffer *, Blip_Buffer *)
Definition Gbs_Emu.cpp:139
@ bank_size
Definition Gbs_Emu.h:62
@ hi_page
Definition Gbs_Emu.h:80
header_t const & header() const
Definition Gbs_Emu.h:38
Definition Classic_Emu.h:71
Definition Blip_Buffer.h:239
const struct gme_type_t_ * gme_type_t
Definition gme.h:161
float in
Definition lilv_test.c:1460
Definition Gbs_Emu.h:21
byte init_addr[2]
Definition Gbs_Emu.h:27
byte play_addr[2]
Definition Gbs_Emu.h:28
byte first_track
Definition Gbs_Emu.h:25
byte load_addr[2]
Definition Gbs_Emu.h:26
byte timer_modulo
Definition Gbs_Emu.h:30
char game[32]
Definition Gbs_Emu.h:32
byte stack_ptr[2]
Definition Gbs_Emu.h:29
byte track_count
Definition Gbs_Emu.h:24
byte vers
Definition Gbs_Emu.h:23
char copyright[32]
Definition Gbs_Emu.h:34
byte timer_mode
Definition Gbs_Emu.h:31
char author[32]
Definition Gbs_Emu.h:33
char tag[3]
Definition Gbs_Emu.h:22
blargg_err_t load(Data_Reader &)
Definition Gme_File.cpp:93
blargg_err_t load_remaining_(void const *header, long header_size, Data_Reader &remaining)
Definition Gme_File.cpp:107
gme_equalizer_t equalizer_t
Definition Music_Emu.h:106
Definition Gme_File.h:28
uch h[RAND_HEAD_LEN]
Definition crypt.c:459