94
94
cshooter_state(const machine_config &mconfig, device_type type, const char *tag)
95
: driver_device(mconfig, type, tag) { }
95
: driver_device(mconfig, type, tag) ,
96
m_txram(*this, "txram"),
97
m_mainram(*this, "mainram"),
98
m_spriteram(*this, "spriteram"){ }
100
required_shared_ptr<UINT8> m_txram;
98
101
tilemap_t *m_txtilemap;
102
optional_shared_ptr<UINT8> m_mainram;
103
size_t m_spriteram_size;
105
optional_shared_ptr<UINT8> m_spriteram;
106
DECLARE_WRITE8_MEMBER(cshooter_txram_w);
107
DECLARE_READ8_MEMBER(cshooter_coin_r);
108
DECLARE_WRITE8_MEMBER(cshooter_c500_w);
109
DECLARE_WRITE8_MEMBER(cshooter_c700_w);
110
DECLARE_WRITE8_MEMBER(bank_w);
111
DECLARE_WRITE8_MEMBER(pal_w);
112
DECLARE_WRITE8_MEMBER(pal2_w);
113
DECLARE_READ8_MEMBER(pal_r);
114
DECLARE_READ8_MEMBER(seibu_sound_comms_r);
115
DECLARE_WRITE8_MEMBER(seibu_sound_comms_w);
210
221
MACHINE_RESET_CALL(seibu_sound);
213
static READ8_HANDLER ( cshooter_coin_r )
224
READ8_MEMBER(cshooter_state::cshooter_coin_r)
215
cshooter_state *state = space->machine().driver_data<cshooter_state>();
216
226
/* Even reads must return 0xff - Odd reads must return the contents of input port 5.
217
227
Code at 0x5061 is executed once during P.O.S.T. where there is one read.
218
228
Code at 0x50b4 is then executed each frame (not sure) where there are 2 reads. */
219
return ( (state->m_counter++ & 1) ? 0xff : input_port_read(space->machine(), "COIN") );
222
static WRITE8_HANDLER ( cshooter_c500_w )
226
static WRITE8_HANDLER ( cshooter_c700_w )
230
static WRITE8_HANDLER ( bank_w )
232
memory_set_bankptr(space->machine(), "bank1",&space->machine().region("user1")->base()[0x4000*((data>>4)&3)]);
236
static WRITE8_HANDLER(pal_w)
238
space->machine().generic.paletteram.u8[offset]=data;
229
return ( (m_counter++ & 1) ? 0xff : ioport("COIN")->read() );
232
WRITE8_MEMBER(cshooter_state::cshooter_c500_w)
236
WRITE8_MEMBER(cshooter_state::cshooter_c700_w)
240
WRITE8_MEMBER(cshooter_state::bank_w)
242
membank("bank1")->set_base(&machine().root_device().memregion("user1")->base()[0x4000*((data>>4)&3)]);
246
WRITE8_MEMBER(cshooter_state::pal_w)
248
m_generic_paletteram_8[offset]=data;
240
palette_set_color_rgb(space->machine(), offset, pal4bit(space->machine().generic.paletteram.u8[offset] >> 4), pal4bit(space->machine().generic.paletteram.u8[offset]), pal4bit(space->machine().generic.paletteram.u8[offset+0x100]));
250
palette_set_color_rgb(machine(), offset, pal4bit(m_generic_paletteram_8[offset] >> 4), pal4bit(m_generic_paletteram_8[offset]), pal4bit(m_generic_paletteram_8[offset+0x100]));
243
static WRITE8_HANDLER(pal2_w)
253
WRITE8_MEMBER(cshooter_state::pal2_w)
245
space->machine().generic.paletteram.u8[offset]=data;
255
m_generic_paletteram_8[offset]=data;
247
palette_set_color_rgb(space->machine(), offset, pal4bit(space->machine().generic.paletteram.u8[offset] >> 4), pal4bit(space->machine().generic.paletteram.u8[offset]), pal4bit(space->machine().generic.paletteram.u8[offset+0x200]));
257
palette_set_color_rgb(machine(), offset, pal4bit(m_generic_paletteram_8[offset] >> 4), pal4bit(m_generic_paletteram_8[offset]), pal4bit(m_generic_paletteram_8[offset+0x200]));
250
static READ8_HANDLER(pal_r)
260
READ8_MEMBER(cshooter_state::pal_r)
252
return space->machine().generic.paletteram.u8[offset];
262
return m_generic_paletteram_8[offset];
255
static ADDRESS_MAP_START( cshooter_map, AS_PROGRAM, 8 )
265
static ADDRESS_MAP_START( cshooter_map, AS_PROGRAM, 8, cshooter_state )
256
266
AM_RANGE(0x0000, 0x7fff) AM_ROM
257
267
AM_RANGE(0x8000, 0xafff) AM_READ_BANK("bank1") AM_WRITEONLY
258
268
AM_RANGE(0xb000, 0xb0ff) AM_READONLY // sound related ?
259
AM_RANGE(0xc000, 0xc1ff) AM_WRITE(pal_w) AM_READ(pal_r) AM_BASE_GENERIC(paletteram)
269
AM_RANGE(0xc000, 0xc1ff) AM_WRITE(pal_w) AM_READ(pal_r) AM_SHARE("paletteram")
260
270
AM_RANGE(0xc200, 0xc200) AM_READ_PORT("IN0")
261
271
AM_RANGE(0xc201, 0xc201) AM_READ_PORT("IN1")
262
272
AM_RANGE(0xc202, 0xc202) AM_READ_PORT("IN2")
267
277
AM_RANGE(0xc600, 0xc600) AM_WRITENOP // see notes
268
278
AM_RANGE(0xc700, 0xc700) AM_WRITE(cshooter_c700_w)
269
279
AM_RANGE(0xc801, 0xc801) AM_WRITENOP // see notes
270
AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(cshooter_txram_w) AM_BASE_MEMBER(cshooter_state, m_txram)
280
AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(cshooter_txram_w) AM_SHARE("txram")
271
281
AM_RANGE(0xd800, 0xdfff) AM_RAM
272
282
AM_RANGE(0xe000, 0xffff) AM_RAM
275
static READ8_HANDLER( seibu_sound_comms_r )
277
return seibu_main_word_r(space,offset,0x00ff);
280
static WRITE8_HANDLER( seibu_sound_comms_w )
282
seibu_main_word_w(space,offset,data,0x00ff);
285
static ADDRESS_MAP_START( airraid_map, AS_PROGRAM, 8 )
285
READ8_MEMBER(cshooter_state::seibu_sound_comms_r)
287
return seibu_main_word_r(&space,offset,0x00ff);
290
WRITE8_MEMBER(cshooter_state::seibu_sound_comms_w)
292
seibu_main_word_w(&space,offset,data,0x00ff);
295
static ADDRESS_MAP_START( airraid_map, AS_PROGRAM, 8, cshooter_state )
286
296
AM_RANGE(0x0000, 0x7fff) AM_ROM
287
297
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") AM_WRITENOP // rld result write-back
288
298
// AM_RANGE(0xb000, 0xb0ff) AM_RAM
296
306
AM_RANGE(0xc600, 0xc600) AM_WRITENOP // see notes
297
307
AM_RANGE(0xc700, 0xc700) AM_WRITE(cshooter_c700_w)
298
308
AM_RANGE(0xc801, 0xc801) AM_WRITENOP // see notes
299
AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(cshooter_txram_w) AM_BASE_MEMBER(cshooter_state, m_txram)
300
AM_RANGE(0xd800, 0xdbff) AM_WRITE(pal2_w) AM_READ(pal_r) AM_BASE_GENERIC(paletteram)
309
AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(cshooter_txram_w) AM_SHARE("txram")
310
AM_RANGE(0xd800, 0xdbff) AM_WRITE(pal2_w) AM_READ(pal_r) AM_SHARE("paletteram")
301
311
AM_RANGE(0xdc11, 0xdc11) AM_WRITE(bank_w)
302
312
AM_RANGE(0xdc00, 0xdc1f) AM_RAM //video registers
303
313
AM_RANGE(0xde00, 0xde0f) AM_READWRITE(seibu_sound_comms_r,seibu_sound_comms_w)
304
AM_RANGE(0xe000, 0xfdff) AM_RAM AM_BASE_MEMBER(cshooter_state, m_mainram)
305
AM_RANGE(0xfe00, 0xffff) AM_RAM AM_BASE_SIZE_MEMBER(cshooter_state, m_spriteram, m_spriteram_size)
314
AM_RANGE(0xe000, 0xfdff) AM_RAM AM_SHARE("mainram")
315
AM_RANGE(0xfe00, 0xffff) AM_RAM AM_SHARE("spriteram")
311
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8 )
321
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, cshooter_state )
312
322
AM_RANGE(0x0000, 0x1fff) AM_ROM
313
AM_RANGE(0xc000, 0xc001) AM_WRITENOP // AM_DEVWRITE("ym1", ym2203_w) ?
314
AM_RANGE(0xc800, 0xc801) AM_WRITENOP // AM_DEVWRITE("ym2", ym2203_w) ?
323
AM_RANGE(0xc000, 0xc001) AM_WRITENOP // AM_DEVWRITE_LEGACY("ym1", ym2203_w) ?
324
AM_RANGE(0xc800, 0xc801) AM_WRITENOP // AM_DEVWRITE_LEGACY("ym2", ym2203_w) ?
315
325
AM_RANGE(0xf800, 0xffff) AM_RAM
655
665
static DRIVER_INIT( cshooter )
657
667
/* temp so it boots */
658
UINT8 *rom = machine.region("maincpu")->base();
668
UINT8 *rom = machine.root_device().memregion("maincpu")->base();
660
670
rom[0xa2] = 0x00;
661
671
rom[0xa3] = 0x00;
662
672
rom[0xa4] = 0x00;
663
memory_set_bankptr(machine, "bank1",&machine.region("user1")->base()[0]);
673
machine.root_device().membank("bank1")->set_base(&machine.root_device().memregion("user1")->base()[0]);
666
676
static DRIVER_INIT( cshootere )
668
678
address_space *space = machine.device("maincpu")->memory().space(AS_PROGRAM);
670
UINT8 *rom = machine.region("maincpu")->base();
680
UINT8 *rom = machine.root_device().memregion("maincpu")->base();
671
681
UINT8 *decrypt = auto_alloc_array(machine, UINT8, 0x8000);
673
683
space->set_decrypted_region(0x0000, 0x7fff, decrypt);
697
707
rom[A] = BITSWAP8(rom[A],7,6,1,4,3,2,5,0);
700
memory_set_bankptr(machine, "bank1",&machine.region("user1")->base()[0]);
710
machine.root_device().membank("bank1")->set_base(&machine.root_device().memregion("user1")->base()[0]);
701
711
seibu_sound_decrypt(machine,"audiocpu",0x2000);