LMMS
Loading...
Searching...
No Matches
Nsf_Emu.h
Go to the documentation of this file.
1// Nintendo NES/Famicom NSF music file emulator
2
3// Game_Music_Emu https://bitbucket.org/mpyne/game-music-emu/
4#ifndef NSF_EMU_H
5#define NSF_EMU_H
6
7#include "Classic_Emu.h"
8#include "Nes_Apu.h"
9#include "Nes_Cpu.h"
10
11class Nsf_Emu : private Nes_Cpu, public Classic_Emu {
12 typedef Nes_Cpu cpu;
13public:
14 // Equalizer profiles for US NES and Japanese Famicom
15 static equalizer_t const nes_eq;
16 static equalizer_t const famicom_eq;
17
18 // NSF file header
19 enum { header_size = 0x80 };
20 struct header_t
21 {
22 char tag [5];
23 byte vers;
26 byte load_addr [2];
27 byte init_addr [2];
28 byte play_addr [2];
29 char game [32];
30 char author [32];
31 char copyright [32];
32 byte ntsc_speed [2];
33 byte banks [8];
34 byte pal_speed [2];
37 byte unused [4];
38 };
39
40 // Header for currently loaded file
41 header_t const& header() const { return header_; }
42
43 static gme_type_t static_type() { return gme_nsf_type; }
44
45public:
46 // deprecated
47 using Music_Emu::load;
48 blargg_err_t load( header_t const& h, Data_Reader& in ) // use Remaining_Reader
49 { return load_remaining_( &h, sizeof h, in ); }
50
51public:
52 Nsf_Emu();
53 ~Nsf_Emu();
54 Nes_Apu* apu_() { return &apu; }
55protected:
56 blargg_err_t track_info_( track_info_t*, int track ) const;
57 blargg_err_t load_( Data_Reader& );
58 blargg_err_t start_track_( int );
59 blargg_err_t run_clocks( blip_time_t&, int );
60 void set_tempo_( double );
62 void update_eq( blip_eq_t const& );
63 void unload();
64protected:
65 enum { bank_count = 8 };
71
72 // timing
78
79 enum { rom_begin = 0x8000 };
80 enum { bank_select_addr = 0x5FF8 };
81 enum { bank_size = 0x1000 };
83
84public: private: friend class Nes_Cpu;
86 int cpu_read( nes_addr_t );
87 void cpu_write( nes_addr_t, int );
88 void cpu_write_misc( nes_addr_t, int );
90
91private:
96 static int pcm_read( void*, nes_addr_t );
97 blargg_err_t init_sound();
98
100
101 enum { sram_addr = 0x6000 };
102 byte sram [0x2000];
104};
105
106#endif
blip_long blip_time_t
Definition Blip_Buffer.h:17
blargg_long nes_time_t
Definition Nes_Apu.h:9
unsigned nes_addr_t
Definition Nes_Apu.h:10
Definition Blip_Buffer.h:23
Classic_Emu()
Definition Classic_Emu.cpp:21
Definition Data_Reader.h:10
Definition Nes_Apu.h:17
@ page_size
Definition Nes_Cpu.h:22
Definition Nes_Fme7_Apu.h:19
Definition Nes_Namco_Apu.h:12
Definition Nes_Vrc6_Apu.h:12
int play_ready
Definition Nsf_Emu.h:77
@ bank_count
Definition Nsf_Emu.h:65
header_t header_
Definition Nsf_Emu.h:99
void set_tempo_(double)
Definition Nsf_Emu.cpp:138
@ rom_begin
Definition Nsf_Emu.h:79
Nes_Apu * apu_()
Definition Nsf_Emu.h:54
double clock_rate_
Definition Nsf_Emu.h:69
byte sram[0x2000]
Definition Nsf_Emu.h:102
Nsf_Emu()
Definition Nsf_Emu.cpp:44
@ sram_addr
Definition Nsf_Emu.h:101
Nes_Cpu cpu
Definition Nsf_Emu.h:12
blargg_err_t track_info_(track_info_t *, int track) const
Definition Nsf_Emu.cpp:90
header_t const & header() const
Definition Nsf_Emu.h:41
static int pcm_read(void *, nes_addr_t)
Definition Nsf_Emu.cpp:39
bool pal_only
Definition Nsf_Emu.h:70
nes_time_t play_period
Definition Nsf_Emu.h:75
byte initial_banks[bank_count]
Definition Nsf_Emu.h:66
void cpu_write(nes_addr_t, int)
Definition nes_cpu_io.h:43
void update_eq(blip_eq_t const &)
Definition Nsf_Emu.cpp:333
byte unmapped_code[Nes_Cpu::page_size+8]
Definition Nsf_Emu.h:103
static equalizer_t const nes_eq
Definition Nsf_Emu.h:15
static gme_type_t static_type()
Definition Nsf_Emu.h:43
class Nes_Fme7_Apu * fme7
Definition Nsf_Emu.h:94
void cpu_write_misc(nes_addr_t, int)
Definition Nsf_Emu.cpp:389
@ badop_addr
Definition Nsf_Emu.h:89
int cpu_read(nes_addr_t)
Definition nes_cpu_io.h:10
@ bank_size
Definition Nsf_Emu.h:81
blargg_err_t start_track_(int)
Definition Nsf_Emu.cpp:452
Nes_Apu apu
Definition Nsf_Emu.h:95
nes_addr_t play_addr
Definition Nsf_Emu.h:68
@ header_size
Definition Nsf_Emu.h:19
blargg_err_t init_sound()
Definition Nsf_Emu.cpp:162
blargg_err_t run_clocks(blip_time_t &, int)
Definition Nsf_Emu.cpp:490
void unload()
Definition Nsf_Emu.cpp:60
Nes_Cpu::registers_t saved_state
Definition Nsf_Emu.h:73
class Nes_Namco_Apu * namco
Definition Nsf_Emu.h:92
nes_addr_t init_addr
Definition Nsf_Emu.h:67
friend class Nes_Cpu
Definition Nsf_Emu.h:84
static equalizer_t const famicom_eq
Definition Nsf_Emu.h:16
Rom_Data< bank_size > rom
Definition Nsf_Emu.h:82
blargg_err_t load(header_t const &h, Data_Reader &in)
Definition Nsf_Emu.h:48
blargg_err_t load_(Data_Reader &)
Definition Nsf_Emu.cpp:271
void set_voice(int, Blip_Buffer *, Blip_Buffer *, Blip_Buffer *)
Definition Nsf_Emu.cpp:346
~Nsf_Emu()
Definition Nsf_Emu.cpp:58
nes_time_t next_play
Definition Nsf_Emu.h:74
class Nes_Vrc6_Apu * vrc6
Definition Nsf_Emu.h:93
void cpu_jsr(nes_addr_t)
int play_extra
Definition Nsf_Emu.h:76
@ bank_select_addr
Definition Nsf_Emu.h:80
Definition Classic_Emu.h:71
Definition Blip_Buffer.h:239
const struct gme_type_t_ * gme_type_t
Definition gme.h:161
const gme_type_t gme_nsf_type
Definition gme.h:170
float in
Definition lilv_test.c:1460
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 Nes_Cpu.h:32
Definition Nsf_Emu.h:21
byte init_addr[2]
Definition Nsf_Emu.h:27
char tag[5]
Definition Nsf_Emu.h:22
char author[32]
Definition Nsf_Emu.h:30
byte first_track
Definition Nsf_Emu.h:25
byte speed_flags
Definition Nsf_Emu.h:35
byte unused[4]
Definition Nsf_Emu.h:37
byte vers
Definition Nsf_Emu.h:23
char game[32]
Definition Nsf_Emu.h:29
byte ntsc_speed[2]
Definition Nsf_Emu.h:32
byte chip_flags
Definition Nsf_Emu.h:36
byte load_addr[2]
Definition Nsf_Emu.h:26
char copyright[32]
Definition Nsf_Emu.h:31
byte pal_speed[2]
Definition Nsf_Emu.h:34
byte banks[8]
Definition Nsf_Emu.h:33
byte play_addr[2]
Definition Nsf_Emu.h:28
byte track_count
Definition Nsf_Emu.h:24
Definition Gme_File.h:28
uch h[RAND_HEAD_LEN]
Definition crypt.c:459