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

« back to all changes in this revision

Viewing changes to src/mame/drivers/vmetal.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:
21
21
|A                                           |
22
22
|                 |--------|          1.U29  |
23
23
|         62256   |Imagetek|                 |
24
 
|         62256   |14220   |          2.U31  |
 
24
|         62256   |I4220   |          2.U31  |
25
25
|                 |        |                 |
26
26
|                 |--------|          3.U28  |
27
27
|                                            |
42
42
      6264    - 8k x8 SRAM (DIP28)
43
43
      TA7222  - Toshiba TA7222 5.8 Watt Audio Power Amplifier (SIP10)
44
44
      EPM7032 - Altera EPM7032LC44-15T High Performance EEPROM-based Programmable Logic Device (PLCC44)
45
 
      Custom  - Imagetek 14220 Graphics Controller (QFP208)
 
45
      Custom  - Imagetek I4220 Graphics Controller (QFP208)
46
46
      VSync   - 58.2328Hz
47
47
      HSync   - 15.32kHz
48
48
      ROMs    -
83
83
{
84
84
public:
85
85
        vmetal_state(const machine_config &mconfig, device_type type, const char *tag)
86
 
                : metro_state(mconfig, type, tag) { }
 
86
                : metro_state(mconfig, type, tag),
 
87
                  m_texttileram(*this, "texttileram"),
 
88
                  m_mid1tileram(*this, "mid1tileram"),
 
89
                  m_mid2tileram(*this, "mid2tileram"),
 
90
                  m_tlookup(*this, "tlookup"),
 
91
                  m_vmetal_videoregs(*this, "vmetal_regs") { }
87
92
 
88
 
        UINT16 *m_texttileram;
89
 
        UINT16 *m_mid1tileram;
90
 
        UINT16 *m_mid2tileram;
91
 
        UINT16 *m_tlookup;
92
 
        UINT16 *m_vmetal_videoregs;
 
93
        required_shared_ptr<UINT16> m_texttileram;
 
94
        required_shared_ptr<UINT16> m_mid1tileram;
 
95
        required_shared_ptr<UINT16> m_mid2tileram;
 
96
        required_shared_ptr<UINT16> m_tlookup;
 
97
        required_shared_ptr<UINT16> m_vmetal_videoregs;
93
98
 
94
99
        tilemap_t *m_texttilemap;
95
100
        tilemap_t *m_mid1tilemap;
96
101
        tilemap_t *m_mid2tilemap;
 
102
        DECLARE_READ16_MEMBER(varia_crom_read);
 
103
        DECLARE_WRITE16_MEMBER(vmetal_texttileram_w);
 
104
        DECLARE_WRITE16_MEMBER(vmetal_mid1tileram_w);
 
105
        DECLARE_WRITE16_MEMBER(vmetal_mid2tileram_w);
 
106
        DECLARE_READ16_MEMBER(varia_dips_bit8_r);
 
107
        DECLARE_READ16_MEMBER(varia_dips_bit7_r);
 
108
        DECLARE_READ16_MEMBER(varia_dips_bit6_r);
 
109
        DECLARE_READ16_MEMBER(varia_dips_bit5_r);
 
110
        DECLARE_READ16_MEMBER(varia_dips_bit4_r);
 
111
        DECLARE_READ16_MEMBER(varia_dips_bit3_r);
 
112
        DECLARE_READ16_MEMBER(varia_dips_bit2_r);
 
113
        DECLARE_READ16_MEMBER(varia_dips_bit1_r);
97
114
};
98
115
 
99
116
 
100
 
static READ16_HANDLER ( varia_crom_read )
 
117
READ16_MEMBER(vmetal_state::varia_crom_read)
101
118
{
102
119
        /* game reads the cgrom, result is 7772, verified to be correct on the real board */
103
120
 
104
 
        vmetal_state *state = space->machine().driver_data<vmetal_state>();
105
 
        UINT8 *cgrom = space->machine().region("gfx1")->base();
 
121
 
 
122
        UINT8 *cgrom = memregion("gfx1")->base();
106
123
        UINT16 retdat;
107
124
 
108
125
        offset = offset << 1;
109
 
        offset |= (state->m_vmetal_videoregs[0x0ab / 2] & 0x7f) << 16;
 
126
        offset |= (m_vmetal_videoregs[0x0ab / 2] & 0x7f) << 16;
110
127
        retdat = ((cgrom[offset] << 8) | (cgrom[offset + 1]));
111
128
        // popmessage("varia romread offset %06x data %04x", offset, retdat);
112
129
 
125
142
}
126
143
 
127
144
 
128
 
static WRITE16_HANDLER( vmetal_texttileram_w )
129
 
{
130
 
        vmetal_state *state = space->machine().driver_data<vmetal_state>();
131
 
        COMBINE_DATA(&state->m_texttileram[offset]);
132
 
        state->m_texttilemap->mark_tile_dirty(offset);
133
 
}
134
 
 
135
 
static WRITE16_HANDLER( vmetal_mid1tileram_w )
136
 
{
137
 
        vmetal_state *state = space->machine().driver_data<vmetal_state>();
138
 
        COMBINE_DATA(&state->m_mid1tileram[offset]);
139
 
        state->m_mid1tilemap->mark_tile_dirty(offset);
140
 
}
141
 
 
142
 
static WRITE16_HANDLER( vmetal_mid2tileram_w )
143
 
{
144
 
        vmetal_state *state = space->machine().driver_data<vmetal_state>();
145
 
        COMBINE_DATA(&state->m_mid2tileram[offset]);
146
 
        state->m_mid2tilemap->mark_tile_dirty(offset);
147
 
}
148
 
 
149
 
 
150
 
static READ16_HANDLER ( varia_dips_bit8_r ) { return ((input_port_read(space->machine(), "DSW2") & 0x80) << 0) | ((input_port_read(space->machine(), "DSW1") & 0x80) >> 1); }
151
 
static READ16_HANDLER ( varia_dips_bit7_r ) { return ((input_port_read(space->machine(), "DSW2") & 0x40) << 1) | ((input_port_read(space->machine(), "DSW1") & 0x40) >> 0); }
152
 
static READ16_HANDLER ( varia_dips_bit6_r ) { return ((input_port_read(space->machine(), "DSW2") & 0x20) << 2) | ((input_port_read(space->machine(), "DSW1") & 0x20) << 1); }
153
 
static READ16_HANDLER ( varia_dips_bit5_r ) { return ((input_port_read(space->machine(), "DSW2") & 0x10) << 3) | ((input_port_read(space->machine(), "DSW1") & 0x10) << 2); }
154
 
static READ16_HANDLER ( varia_dips_bit4_r ) { return ((input_port_read(space->machine(), "DSW2") & 0x08) << 4) | ((input_port_read(space->machine(), "DSW1") & 0x08) << 3); }
155
 
static READ16_HANDLER ( varia_dips_bit3_r ) { return ((input_port_read(space->machine(), "DSW2") & 0x04) << 5) | ((input_port_read(space->machine(), "DSW1") & 0x04) << 4); }
156
 
static READ16_HANDLER ( varia_dips_bit2_r ) { return ((input_port_read(space->machine(), "DSW2") & 0x02) << 6) | ((input_port_read(space->machine(), "DSW1") & 0x02) << 5); }
157
 
static READ16_HANDLER ( varia_dips_bit1_r ) { return ((input_port_read(space->machine(), "DSW2") & 0x01) << 7) | ((input_port_read(space->machine(), "DSW1") & 0x01) << 6); }
 
145
WRITE16_MEMBER(vmetal_state::vmetal_texttileram_w)
 
146
{
 
147
 
 
148
        COMBINE_DATA(&m_texttileram[offset]);
 
149
        m_texttilemap->mark_tile_dirty(offset);
 
150
}
 
151
 
 
152
WRITE16_MEMBER(vmetal_state::vmetal_mid1tileram_w)
 
153
{
 
154
 
 
155
        COMBINE_DATA(&m_mid1tileram[offset]);
 
156
        m_mid1tilemap->mark_tile_dirty(offset);
 
157
}
 
158
 
 
159
WRITE16_MEMBER(vmetal_state::vmetal_mid2tileram_w)
 
160
{
 
161
 
 
162
        COMBINE_DATA(&m_mid2tileram[offset]);
 
163
        m_mid2tilemap->mark_tile_dirty(offset);
 
164
}
 
165
 
 
166
 
 
167
READ16_MEMBER(vmetal_state::varia_dips_bit8_r){ return ((ioport("DSW2")->read() & 0x80) << 0) | ((ioport("DSW1")->read() & 0x80) >> 1); }
 
168
READ16_MEMBER(vmetal_state::varia_dips_bit7_r){ return ((ioport("DSW2")->read() & 0x40) << 1) | ((ioport("DSW1")->read() & 0x40) >> 0); }
 
169
READ16_MEMBER(vmetal_state::varia_dips_bit6_r){ return ((ioport("DSW2")->read() & 0x20) << 2) | ((ioport("DSW1")->read() & 0x20) << 1); }
 
170
READ16_MEMBER(vmetal_state::varia_dips_bit5_r){ return ((ioport("DSW2")->read() & 0x10) << 3) | ((ioport("DSW1")->read() & 0x10) << 2); }
 
171
READ16_MEMBER(vmetal_state::varia_dips_bit4_r){ return ((ioport("DSW2")->read() & 0x08) << 4) | ((ioport("DSW1")->read() & 0x08) << 3); }
 
172
READ16_MEMBER(vmetal_state::varia_dips_bit3_r){ return ((ioport("DSW2")->read() & 0x04) << 5) | ((ioport("DSW1")->read() & 0x04) << 4); }
 
173
READ16_MEMBER(vmetal_state::varia_dips_bit2_r){ return ((ioport("DSW2")->read() & 0x02) << 6) | ((ioport("DSW1")->read() & 0x02) << 5); }
 
174
READ16_MEMBER(vmetal_state::varia_dips_bit1_r){ return ((ioport("DSW2")->read() & 0x01) << 7) | ((ioport("DSW1")->read() & 0x01) << 6); }
158
175
 
159
176
static WRITE8_DEVICE_HANDLER( vmetal_control_w )
160
177
{
216
233
}
217
234
 
218
235
 
219
 
static ADDRESS_MAP_START( varia_program_map, AS_PROGRAM, 16 )
 
236
static ADDRESS_MAP_START( varia_program_map, AS_PROGRAM, 16, vmetal_state )
220
237
        AM_RANGE(0x000000, 0x0fffff) AM_ROM
221
 
        AM_RANGE(0x100000, 0x11ffff) AM_RAM_WRITE(vmetal_texttileram_w) AM_BASE_MEMBER(vmetal_state, m_texttileram)
222
 
        AM_RANGE(0x120000, 0x13ffff) AM_RAM_WRITE(vmetal_mid1tileram_w) AM_BASE_MEMBER(vmetal_state, m_mid1tileram)
223
 
        AM_RANGE(0x140000, 0x15ffff) AM_RAM_WRITE(vmetal_mid2tileram_w) AM_BASE_MEMBER(vmetal_state, m_mid2tileram)
 
238
        AM_RANGE(0x100000, 0x11ffff) AM_RAM_WRITE(vmetal_texttileram_w) AM_SHARE("texttileram")
 
239
        AM_RANGE(0x120000, 0x13ffff) AM_RAM_WRITE(vmetal_mid1tileram_w) AM_SHARE("mid1tileram")
 
240
        AM_RANGE(0x140000, 0x15ffff) AM_RAM_WRITE(vmetal_mid2tileram_w) AM_SHARE("mid2tileram")
224
241
 
225
242
        AM_RANGE(0x160000, 0x16ffff) AM_READ(varia_crom_read) // cgrom read window ..
226
243
 
227
 
        AM_RANGE(0x170000, 0x173fff) AM_RAM_WRITE(paletteram16_GGGGGRRRRRBBBBBx_word_w) AM_BASE_GENERIC(paletteram)     // Palette
228
 
        AM_RANGE(0x174000, 0x174fff) AM_RAM AM_BASE_SIZE_MEMBER(vmetal_state, m_spriteram, m_spriteram_size)
 
244
        AM_RANGE(0x170000, 0x173fff) AM_RAM_WRITE(paletteram_GGGGGRRRRRBBBBBx_word_w) AM_SHARE("paletteram")    // Palette
 
245
        AM_RANGE(0x174000, 0x174fff) AM_RAM AM_SHARE("spriteram")
229
246
        AM_RANGE(0x175000, 0x177fff) AM_RAM
230
 
        AM_RANGE(0x178000, 0x1787ff) AM_RAM AM_BASE_MEMBER(vmetal_state, m_tlookup)
231
 
        AM_RANGE(0x178800, 0x1796ff) AM_RAM AM_BASE_MEMBER(vmetal_state, m_vmetal_videoregs)
232
 
        AM_RANGE(0x179700, 0x179713) AM_WRITEONLY AM_BASE_MEMBER(vmetal_state, m_videoregs)     // Metro sprite chip Video Registers
 
247
        AM_RANGE(0x178000, 0x1787ff) AM_RAM AM_SHARE("tlookup")
 
248
        AM_RANGE(0x178800, 0x1796ff) AM_RAM AM_SHARE("vmetal_regs")
 
249
        AM_RANGE(0x179700, 0x179713) AM_WRITEONLY AM_SHARE("videoregs") // Metro sprite chip Video Registers
233
250
 
234
 
        AM_RANGE(0x200000, 0x200001) AM_READ_PORT("P1_P2") AM_DEVWRITE8("essnd", vmetal_control_w, 0x00ff)
 
251
        AM_RANGE(0x200000, 0x200001) AM_READ_PORT("P1_P2") AM_DEVWRITE8_LEGACY("essnd", vmetal_control_w, 0x00ff)
235
252
        AM_RANGE(0x200002, 0x200003) AM_READ_PORT("SYSTEM")
236
253
 
237
254
        /* same weird way to read Dip Switches as in many games in metro.c driver - use balcube_dsw_r read handler once the driver is merged */
252
269
        AM_RANGE(0x31fffa, 0x31fffb) AM_READ(varia_dips_bit2_r) // 0x40 = dip1-2  -> 0xff0085 , 0x80 = dip2-2 -> 0xff0084
253
270
        AM_RANGE(0x31fffc, 0x31fffd) AM_READ(varia_dips_bit1_r) // 0x40 = dip1-1  -> 0xff0085 , 0x80 = dip2-1 -> 0xff0084
254
271
 
255
 
        AM_RANGE(0x400000, 0x400001) AM_DEVREADWRITE8_MODERN("oki", okim6295_device, read, write, 0x00ff )
256
 
        AM_RANGE(0x400002, 0x400003) AM_DEVWRITE8_MODERN("oki", okim6295_device, write, 0x00ff) // Volume/channel info
257
 
        AM_RANGE(0x500000, 0x50000d) AM_DEVWRITE8("essnd", vmetal_es8712_w, 0x00ff)
 
272
        AM_RANGE(0x400000, 0x400001) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff )
 
273
        AM_RANGE(0x400002, 0x400003) AM_DEVWRITE8("oki", okim6295_device, write, 0x00ff)        // Volume/channel info
 
274
        AM_RANGE(0x500000, 0x50000d) AM_DEVWRITE8_LEGACY("essnd", vmetal_es8712_w, 0x00ff)
258
275
 
259
276
        AM_RANGE(0xff0000, 0xffffff) AM_RAM
260
277
ADDRESS_MAP_END
403
420
        SET_TILE_INFO(0, tile, color, TILE_FLIPYX(0x0));
404
421
}
405
422
 
 
423
static void expand_gfx1(running_machine &machine)
 
424
{
 
425
        metro_state *state = machine.driver_data<metro_state>();
 
426
        UINT8 *base_gfx = state->memregion("gfx1")->base();
 
427
        UINT32 length = 2 * state->memregion("gfx1")->bytes();
 
428
        state->m_expanded_gfx1 = auto_alloc_array(machine, UINT8, length);
 
429
        for (int i = 0; i < length; i += 2)
 
430
        {
 
431
                UINT8 src = base_gfx[i / 2];
 
432
                state->m_expanded_gfx1[i+0] = src & 15;
 
433
                state->m_expanded_gfx1[i+1] = src >> 4;
 
434
        }
 
435
}
 
436
 
406
437
static VIDEO_START(varia)
407
438
{
408
439
        vmetal_state *state = machine.driver_data<vmetal_state>();
414
445
        state->m_texttilemap->set_transparent_pen(15);
415
446
        state->m_mid1tilemap->set_transparent_pen(15);
416
447
        state->m_mid2tilemap->set_transparent_pen(15);
 
448
 
 
449
        expand_gfx1(machine);
417
450
}
418
451
 
419
452
static SCREEN_UPDATE_IND16(varia)