Submit initial patch from FS#12176. Adds support for several new game music formats...
[kugel-rb.git] / apps / codecs / libgme / hes_cpu_io.h
blob6b49c69e22b63e5b8bb76bb320a2f53baaebfee1
2 #include "hes_emu.h"
4 #include "blargg_source.h"
6 int Cpu_read( struct Hes_Emu* this, hes_addr_t addr )
8 check( addr <= 0xFFFF );
9 int result = *Cpu_get_code( &this->cpu, addr );
10 if ( this->cpu.mmr [addr >> page_shift] == 0xFF )
11 result = Emu_cpu_read( this, addr );
12 return result;
15 void Cpu_write( struct Hes_Emu* this, hes_addr_t addr, int data )
17 check( addr <= 0xFFFF );
18 byte* out = this->write_pages [addr >> page_shift];
19 addr &= page_size - 1;
20 if ( out )
21 out [addr] = data;
22 else if ( this->cpu.mmr [addr >> page_shift] == 0xFF )
23 Emu_cpu_write( this, addr, data );
26 #define CPU_READ_FAST( emu, addr, time, out ) \
27 CPU_READ_FAST_( emu, addr, time, out )
29 #define CPU_READ_FAST_( emu, addr, time, out ) \
31 out = READ_PROG( addr );\
32 if ( emu->cpu.mmr [addr >> page_shift] == 0xFF )\
34 FLUSH_TIME();\
35 out = Emu_cpu_read( emu, addr );\
36 CACHE_TIME();\
40 #define CPU_WRITE_FAST( emu, addr, data, time ) \
41 CPU_WRITE_FAST_( emu, addr, data, time )
43 #define CPU_WRITE_FAST_( emu, addr, data, time ) \
45 byte* out = emu->write_pages [addr >> page_shift];\
46 addr &= page_size - 1;\
47 if ( out )\
49 out [addr] = data;\
51 else if ( emu->cpu.mmr [addr >> page_shift] == 0xFF )\
53 FLUSH_TIME();\
54 Emu_cpu_write( emu, addr, data );\
55 CACHE_TIME();\
59 #define CPU_READ( emu, addr, time ) \
60 Cpu_read( emu, addr )
62 #define CPU_WRITE( emu, addr, data, time ) \
63 Cpu_write( emu, addr, data )
65 #define CPU_WRITE_VDP( emu, addr, data, time ) \
66 Cpu_write_vdp( emu, addr, data )
68 #define CPU_SET_MMR( emu, page, bank ) \
69 Emu_cpu_set_mmr( emu, page, bank )
71 #define CPU_DONE( emu, time, result_out ) \
72 result_out = Cpu_done( emu )