LMMS
Loading...
Searching...
No Matches
hes_cpu_io.h
Go to the documentation of this file.
1
2#include "Hes_Emu.h"
3
4#include "blargg_source.h"
5
7{
8 check( addr <= 0xFFFF );
9 int result = *cpu::get_code( addr );
10 if ( mmr [addr >> page_shift] == 0xFF )
11 result = cpu_read_( addr );
12 return result;
13}
14
16{
17 check( addr <= 0xFFFF );
18 byte* out = write_pages [addr >> page_shift];
19 addr &= page_size - 1;
20 if ( out )
21 out [addr] = data;
22 else if ( mmr [addr >> page_shift] == 0xFF )
23 cpu_write_( addr, data );
24}
25
26inline byte const* Hes_Emu::cpu_set_mmr( int page, int bank )
27{
28 write_pages [page] = 0;
29 if ( bank < 0x80 )
30 return rom.at_addr( bank * (blargg_long) page_size );
31
32 byte* data = 0;
33 switch ( bank )
34 {
35 case 0xF8:
36 data = cpu::ram;
37 break;
38
39 case 0xF9:
40 case 0xFA:
41 case 0xFB:
42 data = &sgx [(bank - 0xF9) * page_size];
43 break;
44
45 default:
46 if ( bank != 0xFF )
47 debug_printf( "Unmapped bank $%02X\n", bank );
48 return rom.unmapped();
49 }
50
52 return data;
53}
54
55#define CPU_READ_FAST( cpu, addr, time, out ) \
56 CPU_READ_FAST_( STATIC_CAST(Hes_Emu*,cpu), addr, time, out )
57
58#define CPU_READ_FAST_( cpu, addr, time, out ) \
59{\
60 out = READ_PROG( addr );\
61 if ( mmr [addr >> page_shift] == 0xFF )\
62 {\
63 FLUSH_TIME();\
64 out = cpu->cpu_read_( addr );\
65 CACHE_TIME();\
66 }\
67}
68
69#define CPU_WRITE_FAST( cpu, addr, data, time ) \
70 CPU_WRITE_FAST_( STATIC_CAST(Hes_Emu*,cpu), addr, data, time )
71
72#define CPU_WRITE_FAST_( cpu, addr, data, time ) \
73{\
74 byte* out = cpu->write_pages [addr >> page_shift];\
75 addr &= page_size - 1;\
76 if ( out )\
77 {\
78 out [addr] = data;\
79 }\
80 else if ( mmr [addr >> page_shift] == 0xFF )\
81 {\
82 FLUSH_TIME();\
83 cpu->cpu_write_( addr, data );\
84 CACHE_TIME();\
85 }\
86}
87
88#define CPU_READ( cpu, addr, time ) \
89 STATIC_CAST(Hes_Emu*,cpu)->cpu_read( addr )
90
91#define CPU_WRITE( cpu, addr, data, time ) \
92 STATIC_CAST(Hes_Emu*,cpu)->cpu_write( addr, data )
93
94#define CPU_WRITE_VDP( cpu, addr, data, time ) \
95 STATIC_CAST(Hes_Emu*,cpu)->cpu_write_vdp( addr, data )
96
97#define CPU_SET_MMR( cpu, page, bank ) \
98 STATIC_CAST(Hes_Emu*,cpu)->cpu_set_mmr( page, bank )
99
100#define CPU_DONE( cpu, time, result_out ) \
101 result_out = STATIC_CAST(Hes_Emu*,cpu)->cpu_done()
unsigned hes_addr_t
Definition Hes_Cpu.h:10
#define debug_printf
Definition blargg_source.h:26
#define check(expr)
Definition blargg_source.h:32
@ page_size
Definition Hes_Cpu.h:17
uint8_t mmr[page_count+1]
Definition Hes_Cpu.h:38
@ page_shift
Definition Hes_Cpu.h:18
uint8_t const * get_code(hes_addr_t)
Definition Hes_Cpu.h:87
uint8_t ram[page_size]
Definition Hes_Cpu.h:24
Rom_Data< page_size > rom
Definition Hes_Emu.h:57
byte * write_pages[page_count+1]
Definition Hes_Emu.h:47
int cpu_read_(hes_addr_t)
Definition Hes_Emu.cpp:355
void cpu_write(hes_addr_t, int)
Definition hes_cpu_io.h:15
byte const * cpu_set_mmr(int page, int bank)
Definition hes_cpu_io.h:26
int cpu_read(hes_addr_t)
Definition hes_cpu_io.h:6
void cpu_write_(hes_addr_t, int data)
Definition Hes_Emu.cpp:286
byte sgx[3 *page_size+cpu_padding]
Definition Hes_Emu.h:88
JSAMPIMAGE data
Definition jpeglib.h:945
static SerdStatus page(SerdReader *reader)
Definition reader.c:112
float out
Definition lilv_test.c:1461
int result
Definition process.c:1455