LMMS
Loading...
Searching...
No Matches
Kss_Emu.h
Go to the documentation of this file.
1// MSX computer KSS music file emulator
2
3// Game_Music_Emu https://bitbucket.org/mpyne/game-music-emu/
4#ifndef KSS_EMU_H
5#define KSS_EMU_H
6
7#include "Classic_Emu.h"
8#include "Kss_Scc_Apu.h"
9#include "Kss_Cpu.h"
10#include "Sms_Apu.h"
11#include "Ay_Apu.h"
12
13class Kss_Emu : private Kss_Cpu, public Classic_Emu {
14 typedef Kss_Cpu cpu;
15public:
16 // KSS file header
17 enum { header_size = 0x10 };
18 struct header_t
19 {
20 byte tag [4];
21 byte load_addr [2];
22 byte load_size [2];
23 byte init_addr [2];
24 byte play_addr [2];
29 };
30
31 enum { ext_header_size = 0x10 };
33 {
34 byte data_size [4];
35 byte unused [4];
36 byte first_track [2];
37 byte last_tack [2];
38 byte psg_vol;
39 byte scc_vol;
42 };
43
45
46 // Header for currently loaded file
47 composite_header_t const& header() const { return header_; }
48
49 static gme_type_t static_type() { return gme_kss_type; }
50public:
51 Kss_Emu();
52 ~Kss_Emu();
53protected:
54 blargg_err_t track_info_( track_info_t*, int track ) const;
55 blargg_err_t load_( Data_Reader& );
56 blargg_err_t start_track_( int );
57 blargg_err_t run_clocks( blip_time_t&, int );
58 void set_tempo_( double );
60 void update_eq( blip_eq_t const& );
61 void unload();
62private:
65
68 void update_gain();
69
70 unsigned scc_enabled; // 0 or 0xC000
72 void set_bank( int logical, int physical );
73 blargg_long bank_size() const { return (16 * 1024L) >> (header_.bank_mode >> 7 & 1); }
74
78
79 friend void kss_cpu_out( class Kss_Cpu*, cpu_time_t, unsigned addr, int data );
80 friend int kss_cpu_in( class Kss_Cpu*, cpu_time_t, unsigned addr );
81 void cpu_write( unsigned addr, int data );
82 friend void kss_cpu_write( class Kss_Cpu*, unsigned addr, int data );
83
84 // large items
85 enum { mem_size = 0x10000 };
87
91 byte unmapped_read [0x100];
93};
94
95#endif
blargg_long cpu_time_t
Definition Ay_Cpu.h:9
blip_long blip_time_t
Definition Blip_Buffer.h:17
Definition Ay_Apu.h:10
Definition Blip_Buffer.h:23
Classic_Emu()
Definition Classic_Emu.cpp:21
Definition Data_Reader.h:10
Kss_Cpu()
Definition Kss_Cpu.cpp:62
@ cpu_padding
Definition Kss_Cpu.h:74
@ page_size
Definition Kss_Cpu.h:22
blargg_err_t load_(Data_Reader &)
Definition Kss_Emu.cpp:121
Sms_Apu * sn
Definition Kss_Emu.h:90
void update_eq(blip_eq_t const &)
Definition Kss_Emu.cpp:166
blargg_err_t start_track_(int)
Definition Kss_Emu.cpp:194
byte unmapped_read[0x100]
Definition Kss_Emu.h:91
byte unmapped_write[page_size]
Definition Kss_Emu.h:92
void cpu_write(unsigned addr, int data)
Definition Kss_Emu.cpp:282
friend void kss_cpu_write(class Kss_Cpu *, unsigned addr, int data)
Definition Kss_Emu.cpp:307
@ header_size
Definition Kss_Emu.h:17
@ mem_size
Definition Kss_Emu.h:85
void unload()
Definition Kss_Emu.cpp:46
~Kss_Emu()
Definition Kss_Emu.cpp:44
byte ram[mem_size+cpu_padding]
Definition Kss_Emu.h:86
Kss_Emu()
Definition Kss_Emu.cpp:24
Scc_Apu scc
Definition Kss_Emu.h:89
blargg_err_t track_info_(track_info_t *, int track) const
Definition Kss_Emu.cpp:67
void set_voice(int, Blip_Buffer *, Blip_Buffer *, Blip_Buffer *)
Definition Kss_Emu.cpp:174
composite_header_t const & header() const
Definition Kss_Emu.h:47
bool scc_accessed
Definition Kss_Emu.h:66
blip_time_t play_period
Definition Kss_Emu.h:75
int ay_latch
Definition Kss_Emu.h:77
void set_bank(int logical, int physical)
Definition Kss_Emu.cpp:259
blargg_err_t run_clocks(blip_time_t &, int)
Definition Kss_Emu.cpp:377
int bank_count
Definition Kss_Emu.h:71
unsigned scc_enabled
Definition Kss_Emu.h:70
Kss_Cpu cpu
Definition Kss_Emu.h:14
@ ext_header_size
Definition Kss_Emu.h:31
Rom_Data< page_size > rom
Definition Kss_Emu.h:63
static gme_type_t static_type()
Definition Kss_Emu.h:49
friend int kss_cpu_in(class Kss_Cpu *, cpu_time_t, unsigned addr)
Definition Kss_Emu.cpp:364
Ay_Apu ay
Definition Kss_Emu.h:88
void update_gain()
Definition Kss_Emu.cpp:110
composite_header_t header_
Definition Kss_Emu.h:64
blip_time_t next_play
Definition Kss_Emu.h:76
friend void kss_cpu_out(class Kss_Cpu *, cpu_time_t, unsigned addr, int data)
Definition Kss_Emu.cpp:314
bool gain_updated
Definition Kss_Emu.h:67
blargg_long bank_size() const
Definition Kss_Emu.h:73
void set_tempo_(double)
Definition Kss_Emu.cpp:187
Definition Classic_Emu.h:71
Definition Kss_Scc_Apu.h:11
Definition Sms_Apu.h:9
Definition Blip_Buffer.h:239
const gme_type_t gme_kss_type
Definition gme.h:169
const struct gme_type_t_ * gme_type_t
Definition gme.h:161
JSAMPIMAGE data
Definition jpeglib.h:945
Definition Kss_Emu.h:44
Definition Kss_Emu.h:33
byte unused[4]
Definition Kss_Emu.h:35
byte first_track[2]
Definition Kss_Emu.h:36
byte msx_audio_vol
Definition Kss_Emu.h:41
byte data_size[4]
Definition Kss_Emu.h:34
byte scc_vol
Definition Kss_Emu.h:39
byte psg_vol
Definition Kss_Emu.h:38
byte last_tack[2]
Definition Kss_Emu.h:37
byte msx_music_vol
Definition Kss_Emu.h:40
Definition Kss_Emu.h:19
byte load_size[2]
Definition Kss_Emu.h:22
byte bank_mode
Definition Kss_Emu.h:26
byte first_bank
Definition Kss_Emu.h:25
byte extra_header
Definition Kss_Emu.h:27
byte play_addr[2]
Definition Kss_Emu.h:24
byte device_flags
Definition Kss_Emu.h:28
byte load_addr[2]
Definition Kss_Emu.h:21
byte init_addr[2]
Definition Kss_Emu.h:23
byte tag[4]
Definition Kss_Emu.h:20
Definition Gme_File.h:28