~ubuntu-branches/debian/sid/mame/sid

« back to all changes in this revision

Viewing changes to src/mame/drivers/cshooter.c

  • Committer: Package Import Robot
  • Author(s): Jordi Mallach, Emmanuel Kasper, Jordi Mallach
  • Date: 2012-06-05 20:02:23 UTC
  • mfrom: (0.3.1) (0.1.4)
  • Revision ID: package-import@ubuntu.com-20120605200223-gnlpogjrg6oqe9md
Tags: 0.146-1
[ Emmanuel Kasper ]
* New upstream release
* Drop patch to fix man pages section and patches to link with flac 
  and jpeg system lib: all this has been pushed upstream by Cesare Falco
* Add DM-Upload-Allowed: yes field.

[ Jordi Mallach ]
* Create a "gnu" TARGETOS stanza that defines NO_AFFINITY_NP.
* Stop setting TARGETOS to "unix" in d/rules. It should be autodetected,
  and set to the appropriate value.
* mame_manpage_section.patch: Change mame's manpage section to 6 (games),
  in the TH declaration.

Show diffs side-by-side

added added

removed removed

Lines of Context:
92
92
{
93
93
public:
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"){ }
96
99
 
97
 
        UINT8* m_txram;
 
100
        required_shared_ptr<UINT8> m_txram;
98
101
        tilemap_t *m_txtilemap;
99
 
        UINT8 *m_mainram;
 
102
        optional_shared_ptr<UINT8> m_mainram;
100
103
        int m_coin_stat;
101
104
        int m_counter;
102
 
        UINT8 *m_spriteram;
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);
104
116
};
105
117
 
106
118
 
121
133
                        0);
122
134
}
123
135
 
124
 
static WRITE8_HANDLER(cshooter_txram_w)
 
136
WRITE8_MEMBER(cshooter_state::cshooter_txram_w)
125
137
{
126
 
        cshooter_state *state = space->machine().driver_data<cshooter_state>();
127
 
        state->m_txram[offset] = data;
128
 
        state->m_txtilemap->mark_tile_dirty(offset/2);
 
138
        m_txram[offset] = data;
 
139
        m_txtilemap->mark_tile_dirty(offset/2);
129
140
}
130
141
 
131
142
static VIDEO_START(cshooter)
145
156
        {
146
157
                UINT8 *spriteram = state->m_spriteram;
147
158
                int i;
148
 
                for(i=0;i<state->m_spriteram_size;i+=4)
 
159
                for(i=0;i<state->m_spriteram.bytes();i+=4)
149
160
                {
150
161
                        if(spriteram[i+3]!=0)
151
162
                        {
210
221
        MACHINE_RESET_CALL(seibu_sound);
211
222
}
212
223
 
213
 
static READ8_HANDLER ( cshooter_coin_r )
 
224
READ8_MEMBER(cshooter_state::cshooter_coin_r)
214
225
{
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") );
220
 
}
221
 
 
222
 
static WRITE8_HANDLER ( cshooter_c500_w )
223
 
{
224
 
}
225
 
 
226
 
static WRITE8_HANDLER ( cshooter_c700_w )
227
 
{
228
 
}
229
 
 
230
 
static WRITE8_HANDLER ( bank_w )
231
 
{
232
 
        memory_set_bankptr(space->machine(), "bank1",&space->machine().region("user1")->base()[0x4000*((data>>4)&3)]);
233
 
}
234
 
 
235
 
 
236
 
static WRITE8_HANDLER(pal_w)
237
 
{
238
 
        space->machine().generic.paletteram.u8[offset]=data;
 
229
        return ( (m_counter++ & 1) ? 0xff : ioport("COIN")->read() );
 
230
}
 
231
 
 
232
WRITE8_MEMBER(cshooter_state::cshooter_c500_w)
 
233
{
 
234
}
 
235
 
 
236
WRITE8_MEMBER(cshooter_state::cshooter_c700_w)
 
237
{
 
238
}
 
239
 
 
240
WRITE8_MEMBER(cshooter_state::bank_w)
 
241
{
 
242
        membank("bank1")->set_base(&machine().root_device().memregion("user1")->base()[0x4000*((data>>4)&3)]);
 
243
}
 
244
 
 
245
 
 
246
WRITE8_MEMBER(cshooter_state::pal_w)
 
247
{
 
248
        m_generic_paletteram_8[offset]=data;
239
249
        offset&=0xff;
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]));
241
251
}
242
252
 
243
 
static WRITE8_HANDLER(pal2_w)
 
253
WRITE8_MEMBER(cshooter_state::pal2_w)
244
254
{
245
 
        space->machine().generic.paletteram.u8[offset]=data;
 
255
        m_generic_paletteram_8[offset]=data;
246
256
        offset&=0x1ff;
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]));
248
258
}
249
259
 
250
 
static READ8_HANDLER(pal_r)
 
260
READ8_MEMBER(cshooter_state::pal_r)
251
261
{
252
 
        return space->machine().generic.paletteram.u8[offset];
 
262
        return m_generic_paletteram_8[offset];
253
263
}
254
264
 
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
273
283
ADDRESS_MAP_END
274
284
 
275
 
static READ8_HANDLER( seibu_sound_comms_r )
276
 
{
277
 
        return seibu_main_word_r(space,offset,0x00ff);
278
 
}
279
 
 
280
 
static WRITE8_HANDLER( seibu_sound_comms_w )
281
 
{
282
 
        seibu_main_word_w(space,offset,data,0x00ff);
283
 
}
284
 
 
285
 
static ADDRESS_MAP_START( airraid_map, AS_PROGRAM, 8 )
 
285
READ8_MEMBER(cshooter_state::seibu_sound_comms_r)
 
286
{
 
287
        return seibu_main_word_r(&space,offset,0x00ff);
 
288
}
 
289
 
 
290
WRITE8_MEMBER(cshooter_state::seibu_sound_comms_w)
 
291
{
 
292
        seibu_main_word_w(&space,offset,data,0x00ff);
 
293
}
 
294
 
 
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")
306
316
ADDRESS_MAP_END
307
317
 
308
318
 
309
319
/* Sound CPU */
310
320
 
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
316
326
ADDRESS_MAP_END
317
327
 
655
665
static DRIVER_INIT( cshooter )
656
666
{
657
667
        /* temp so it boots */
658
 
        UINT8 *rom = machine.region("maincpu")->base();
 
668
        UINT8 *rom = machine.root_device().memregion("maincpu")->base();
659
669
 
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]);
664
674
}
665
675
 
666
676
static DRIVER_INIT( cshootere )
667
677
{
668
678
        address_space *space = machine.device("maincpu")->memory().space(AS_PROGRAM);
669
679
        int A;
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);
672
682
 
673
683
        space->set_decrypted_region(0x0000, 0x7fff, decrypt);
697
707
                        rom[A] = BITSWAP8(rom[A],7,6,1,4,3,2,5,0);
698
708
        }
699
709
 
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);
702
712
}
703
713