28
28
missb2_state(const machine_config &mconfig, device_type type, const char *tag)
29
: bublbobl_state(mconfig, type, tag) { }
29
: bublbobl_state(mconfig, type, tag),
30
m_bgvram(*this, "bgvram"),
31
m_bg_paletteram(*this, "bg_paletteram") { }
32
UINT8 * m_bg_paletteram;
33
required_shared_ptr<UINT8> m_bgvram;
34
required_shared_ptr<UINT8> m_bg_paletteram;
35
DECLARE_WRITE8_MEMBER(bg_paletteram_RRRRGGGGBBBBxxxx_be_w);
36
DECLARE_WRITE8_MEMBER(missb2_bg_bank_w);
136
140
palette_set_color_rgb(machine, color + 256, pal4bit(data >> 12), pal4bit(data >> 8), pal4bit(data >> 4));
139
static WRITE8_HANDLER( bg_paletteram_RRRRGGGGBBBBxxxx_be_w )
143
WRITE8_MEMBER(missb2_state::bg_paletteram_RRRRGGGGBBBBxxxx_be_w)
141
missb2_state *state = space->machine().driver_data<missb2_state>();
142
state->m_bg_paletteram[offset] = data;
143
bg_changecolor_RRRRGGGGBBBBxxxx(space->machine(), offset / 2, state->m_bg_paletteram[offset | 1] | (state->m_bg_paletteram[offset & ~1] << 8));
146
m_bg_paletteram[offset] = data;
147
bg_changecolor_RRRRGGGGBBBBxxxx(machine(), offset / 2, m_bg_paletteram[offset | 1] | (m_bg_paletteram[offset & ~1] << 8));
146
static WRITE8_HANDLER( missb2_bg_bank_w )
150
WRITE8_MEMBER(missb2_state::missb2_bg_bank_w)
150
154
// I don't know how this is really connected, bit 1 is always high afaik...
151
155
bank = ((data & 2) ? 1 : 0) | ((data & 1) ? 4 : 0);
153
memory_set_bank(space->machine(), "bank2", bank);
154
memory_set_bank(space->machine(), "bank3", bank);
157
membank("bank2")->set_entry(bank);
158
membank("bank3")->set_entry(bank);
157
161
/* Memory Maps */
159
static ADDRESS_MAP_START( master_map, AS_PROGRAM, 8 )
163
static ADDRESS_MAP_START( master_map, AS_PROGRAM, 8, missb2_state )
160
164
AM_RANGE(0x0000, 0x7fff) AM_ROM
161
165
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
162
AM_RANGE(0xc000, 0xdcff) AM_RAM AM_BASE_SIZE_MEMBER(missb2_state, m_videoram, m_videoram_size)
163
AM_RANGE(0xdd00, 0xdfff) AM_RAM AM_BASE_SIZE_MEMBER(missb2_state, m_objectram, m_objectram_size)
166
AM_RANGE(0xc000, 0xdcff) AM_RAM AM_SHARE("videoram")
167
AM_RANGE(0xdd00, 0xdfff) AM_RAM AM_SHARE("objectram")
164
168
AM_RANGE(0xe000, 0xf7ff) AM_RAM AM_SHARE("share1")
165
AM_RANGE(0xf800, 0xf9ff) AM_RAM_WRITE(paletteram_RRRRGGGGBBBBxxxx_be_w) AM_BASE_GENERIC(paletteram)
169
AM_RANGE(0xf800, 0xf9ff) AM_RAM_WRITE(paletteram_RRRRGGGGBBBBxxxx_byte_be_w) AM_SHARE("paletteram")
166
170
AM_RANGE(0xfa00, 0xfa00) AM_WRITE(bublbobl_sound_command_w)
167
171
AM_RANGE(0xfa03, 0xfa03) AM_WRITENOP // sound cpu reset
168
172
AM_RANGE(0xfa80, 0xfa80) AM_WRITENOP
179
183
AM_RANGE(0xff98, 0xff98) AM_WRITENOP // ???
182
static ADDRESS_MAP_START( slave_map, AS_PROGRAM, 8 )
186
static ADDRESS_MAP_START( slave_map, AS_PROGRAM, 8, missb2_state )
183
187
AM_RANGE(0x0000, 0x7fff) AM_ROM
184
188
AM_RANGE(0x9000, 0x9fff) AM_ROMBANK("bank2") // ROM data for the background palette ram
185
189
AM_RANGE(0xa000, 0xafff) AM_ROMBANK("bank3") // ROM data for the background palette ram
186
190
AM_RANGE(0xb000, 0xb1ff) AM_ROM // banked ???
187
AM_RANGE(0xc000, 0xc1ff) AM_RAM_WRITE(bg_paletteram_RRRRGGGGBBBBxxxx_be_w) AM_BASE_MEMBER(missb2_state, m_bg_paletteram)
191
AM_RANGE(0xc000, 0xc1ff) AM_RAM_WRITE(bg_paletteram_RRRRGGGGBBBBxxxx_be_w) AM_SHARE("bg_paletteram")
188
192
AM_RANGE(0xc800, 0xcfff) AM_RAM // main ???
189
193
AM_RANGE(0xd000, 0xd000) AM_WRITE(missb2_bg_bank_w)
190
194
AM_RANGE(0xd002, 0xd002) AM_WRITENOP
191
AM_RANGE(0xd003, 0xd003) AM_RAM AM_BASE_MEMBER(missb2_state, m_bgvram)
195
AM_RANGE(0xd003, 0xd003) AM_RAM AM_SHARE("bgvram")
192
196
AM_RANGE(0xe000, 0xf7ff) AM_RAM AM_SHARE("share1")
195
199
// Looks like the original bublbobl code modified to support the OKI M6295.
197
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8 )
201
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, missb2_state )
198
202
AM_RANGE(0x0000, 0x7fff) AM_ROM
199
203
AM_RANGE(0x8000, 0x8fff) AM_RAM
200
AM_RANGE(0x9000, 0x9000) AM_DEVREADWRITE_MODERN("oki", okim6295_device, read, write)
201
AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE("ymsnd", ym3526_r, ym3526_w)
202
AM_RANGE(0xb000, 0xb000) AM_READ(soundlatch_r) AM_WRITENOP // message for main cpu
204
AM_RANGE(0x9000, 0x9000) AM_DEVREADWRITE("oki", okim6295_device, read, write)
205
AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE_LEGACY("ymsnd", ym3526_r, ym3526_w)
206
AM_RANGE(0xb000, 0xb000) AM_READ(soundlatch_byte_r) AM_WRITENOP // message for main cpu
203
207
AM_RANGE(0xb001, 0xb001) AM_READNOP AM_WRITE(bublbobl_sh_nmi_enable_w) // bit 0: message pending for main cpu, bit 1: message pending for sound cpu
204
208
AM_RANGE(0xb002, 0xb002) AM_WRITE(bublbobl_sh_nmi_disable_w)
205
209
AM_RANGE(0xe000, 0xefff) AM_ROM // space for diagnostic ROM?
407
411
/* Sound Interfaces */
409
413
// Handler called by the 3526 emulator when the internal timers cause an IRQ
410
static void irqhandler(device_t *device, int irq)
414
static WRITE_LINE_DEVICE_HANDLER( irqhandler )
412
416
logerror("YM3526 firing an IRQ\n");
413
417
// cputag_set_input_line(device->machine(), "audiocpu", 0, irq ? ASSERT_LINE : CLEAR_LINE);
570
574
static void configure_banks( running_machine& machine )
572
UINT8 *ROM = machine.region("maincpu")->base();
573
UINT8 *SLAVE = machine.region("slave")->base();
576
UINT8 *ROM = machine.root_device().memregion("maincpu")->base();
577
UINT8 *SLAVE = machine.root_device().memregion("slave")->base();
575
memory_configure_bank(machine, "bank1", 0, 8, &ROM[0x10000], 0x4000);
579
machine.root_device().membank("bank1")->configure_entries(0, 8, &ROM[0x10000], 0x4000);
577
581
/* 2009-11 FP: isn't there a way to configure both at once? */
578
memory_configure_bank(machine, "bank2", 0, 7, &SLAVE[0x8000], 0x1000);
579
memory_configure_bank(machine, "bank3", 0, 7, &SLAVE[0x9000], 0x1000);
582
machine.root_device().membank("bank2")->configure_entries(0, 7, &SLAVE[0x8000], 0x1000);
583
machine.root_device().membank("bank3")->configure_entries(0, 7, &SLAVE[0x9000], 0x1000);
582
586
static DRIVER_INIT( missb2 )