48
required_shared_ptr<UINT8> m_fg_videoram;
49
required_shared_ptr<UINT8> m_bg_videoram;
48
50
tilemap_t *m_bg_tilemap;
49
51
tilemap_t *m_fg_tilemap;
52
DECLARE_WRITE8_MEMBER(ettrivia_fg_w);
53
DECLARE_WRITE8_MEMBER(ettrivia_bg_w);
54
DECLARE_WRITE8_MEMBER(ettrivia_control_w);
55
DECLARE_READ8_MEMBER(ettrivia_question_r);
56
DECLARE_WRITE8_MEMBER(b000_w);
57
DECLARE_READ8_MEMBER(b000_r);
58
DECLARE_WRITE8_MEMBER(b800_w);
53
static WRITE8_HANDLER( ettrivia_fg_w )
55
ettrivia_state *state = space->machine().driver_data<ettrivia_state>();
56
state->m_fg_videoram[offset] = data;
57
state->m_fg_tilemap->mark_tile_dirty(offset);
60
static WRITE8_HANDLER( ettrivia_bg_w )
62
ettrivia_state *state = space->machine().driver_data<ettrivia_state>();
63
state->m_bg_videoram[offset] = data;
64
state->m_bg_tilemap->mark_tile_dirty(offset);
67
static WRITE8_HANDLER( ettrivia_control_w )
69
ettrivia_state *state = space->machine().driver_data<ettrivia_state>();
70
space->machine().tilemap().mark_all_dirty();
72
state->m_palreg = (data >> 1) & 3;
73
state->m_gfx_bank = (data >> 2) & 1;
75
state->m_question_bank = (data >> 3) & 3;
77
coin_counter_w(space->machine(), 0, data & 0x80);
79
flip_screen_set(space->machine(), data & 1);
82
static READ8_HANDLER( ettrivia_question_r )
84
ettrivia_state *state = space->machine().driver_data<ettrivia_state>();
85
UINT8 *QUESTIONS = space->machine().region("user1")->base();
86
return QUESTIONS[offset + 0x10000 * state->m_question_bank];
89
static WRITE8_HANDLER( b000_w )
91
ettrivia_state *state = space->machine().driver_data<ettrivia_state>();
92
state->m_b000_val = data;
95
static READ8_HANDLER( b000_r )
97
ettrivia_state *state = space->machine().driver_data<ettrivia_state>();
98
if(state->m_b800_prev)
99
return state->m_b000_ret;
62
WRITE8_MEMBER(ettrivia_state::ettrivia_fg_w)
64
m_fg_videoram[offset] = data;
65
m_fg_tilemap->mark_tile_dirty(offset);
68
WRITE8_MEMBER(ettrivia_state::ettrivia_bg_w)
70
m_bg_videoram[offset] = data;
71
m_bg_tilemap->mark_tile_dirty(offset);
74
WRITE8_MEMBER(ettrivia_state::ettrivia_control_w)
76
machine().tilemap().mark_all_dirty();
78
m_palreg = (data >> 1) & 3;
79
m_gfx_bank = (data >> 2) & 1;
81
m_question_bank = (data >> 3) & 3;
83
coin_counter_w(machine(), 0, data & 0x80);
85
flip_screen_set(data & 1);
88
READ8_MEMBER(ettrivia_state::ettrivia_question_r)
90
UINT8 *QUESTIONS = memregion("user1")->base();
91
return QUESTIONS[offset + 0x10000 * m_question_bank];
94
WRITE8_MEMBER(ettrivia_state::b000_w)
99
READ8_MEMBER(ettrivia_state::b000_r)
101
return state->m_b000_val;
104
static WRITE8_HANDLER( b800_w )
107
WRITE8_MEMBER(ettrivia_state::b800_w)
106
ettrivia_state *state = space->machine().driver_data<ettrivia_state>();
109
111
/* special case to return the value written to 0xb000 */
110
112
/* does it reset the chips too ? */
112
case 0xc4: state->m_b000_ret = ay8910_r(space->machine().device("ay1"), 0); break;
113
case 0x94: state->m_b000_ret = ay8910_r(space->machine().device("ay2"), 0); break;
114
case 0x86: state->m_b000_ret = ay8910_r(space->machine().device("ay3"), 0); break;
114
case 0xc4: m_b000_ret = ay8910_r(machine().device("ay1"), 0); break;
115
case 0x94: m_b000_ret = ay8910_r(machine().device("ay2"), 0); break;
116
case 0x86: m_b000_ret = ay8910_r(machine().device("ay3"), 0); break;
117
switch(state->m_b800_prev)
119
case 0xe0: ay8910_address_w(space->machine().device("ay1"),0,state->m_b000_val); break;
120
case 0x98: ay8910_address_w(space->machine().device("ay2"),0,state->m_b000_val); break;
121
case 0x83: ay8910_address_w(space->machine().device("ay3"),0,state->m_b000_val); break;
121
case 0xe0: ay8910_address_w(machine().device("ay1"),0,m_b000_val); break;
122
case 0x98: ay8910_address_w(machine().device("ay2"),0,m_b000_val); break;
123
case 0x83: ay8910_address_w(machine().device("ay3"),0,m_b000_val); break;
123
case 0xa0: ay8910_data_w(space->machine().device("ay1"),0,state->m_b000_val); break;
124
case 0x88: ay8910_data_w(space->machine().device("ay2"),0,state->m_b000_val); break;
125
case 0x81: ay8910_data_w(space->machine().device("ay3"),0,state->m_b000_val); break;
125
case 0xa0: ay8910_data_w(machine().device("ay1"),0,m_b000_val); break;
126
case 0x88: ay8910_data_w(machine().device("ay2"),0,m_b000_val); break;
127
case 0x81: ay8910_data_w(machine().device("ay3"),0,m_b000_val); break;
131
state->m_b800_prev = data;
134
static ADDRESS_MAP_START( cpu_map, AS_PROGRAM, 8 )
136
static ADDRESS_MAP_START( cpu_map, AS_PROGRAM, 8, ettrivia_state )
135
137
AM_RANGE(0x0000, 0x7fff) AM_ROM
136
138
AM_RANGE(0x8000, 0x87ff) AM_RAM AM_SHARE("nvram")
137
139
AM_RANGE(0x9000, 0x9000) AM_WRITE(ettrivia_control_w)