71
71
*************************************/
73
static WRITE16_HANDLER( hacked_controls_w )
75
bionicc_state *state = space->machine().driver_data<bionicc_state>();
77
logerror("%06x: hacked_controls_w %04x %02x\n", cpu_get_pc(&space->device()), offset, data);
78
COMBINE_DATA(&state->m_inp[offset]);
81
static READ16_HANDLER( hacked_controls_r )
83
bionicc_state *state = space->machine().driver_data<bionicc_state>();
85
logerror("%06x: hacked_controls_r %04x %04x\n", cpu_get_pc(&space->device()), offset, state->m_inp[offset]);
86
return state->m_inp[offset];
89
static WRITE16_HANDLER( bionicc_mpu_trigger_w )
91
bionicc_state *state = space->machine().driver_data<bionicc_state>();
93
data = input_port_read(space->machine(), "SYSTEM") >> 12;
94
state->m_inp[0] = data ^ 0x0f;
96
data = input_port_read(space->machine(), "P2");
97
state->m_inp[1] = data ^ 0xff;
99
data = input_port_read(space->machine(), "P1");
100
state->m_inp[2] = data ^ 0xff;
104
static WRITE16_HANDLER( hacked_soundcommand_w )
106
bionicc_state *state = space->machine().driver_data<bionicc_state>();
108
COMBINE_DATA(&state->m_soundcommand);
109
soundlatch_w(space, 0, state->m_soundcommand & 0xff);
112
static READ16_HANDLER( hacked_soundcommand_r )
114
bionicc_state *state = space->machine().driver_data<bionicc_state>();
116
return state->m_soundcommand;
73
WRITE16_MEMBER(bionicc_state::hacked_controls_w)
76
logerror("%06x: hacked_controls_w %04x %02x\n", cpu_get_pc(&space.device()), offset, data);
77
COMBINE_DATA(&m_inp[offset]);
80
READ16_MEMBER(bionicc_state::hacked_controls_r)
83
logerror("%06x: hacked_controls_r %04x %04x\n", cpu_get_pc(&space.device()), offset, m_inp[offset]);
87
WRITE16_MEMBER(bionicc_state::bionicc_mpu_trigger_w)
90
data = ioport("SYSTEM")->read() >> 12;
91
m_inp[0] = data ^ 0x0f;
93
data = ioport("P2")->read();
94
m_inp[1] = data ^ 0xff;
96
data = ioport("P1")->read();
97
m_inp[2] = data ^ 0xff;
101
WRITE16_MEMBER(bionicc_state::hacked_soundcommand_w)
104
COMBINE_DATA(&m_soundcommand);
105
soundlatch_byte_w(space, 0, m_soundcommand & 0xff);
108
READ16_MEMBER(bionicc_state::hacked_soundcommand_r)
111
return m_soundcommand;
147
142
*************************************/
149
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16 )
144
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, bionicc_state )
150
145
AM_RANGE(0x000000, 0x03ffff) AM_ROM
151
146
AM_RANGE(0xfe0000, 0xfe07ff) AM_RAM /* RAM? */
152
AM_RANGE(0xfe0800, 0xfe0cff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
147
AM_RANGE(0xfe0800, 0xfe0cff) AM_RAM AM_SHARE("spriteram")
153
148
AM_RANGE(0xfe0d00, 0xfe3fff) AM_RAM /* RAM? */
154
149
AM_RANGE(0xfe4000, 0xfe4001) AM_WRITE(bionicc_gfxctrl_w) /* + coin counters */
155
150
AM_RANGE(0xfe4000, 0xfe4001) AM_READ_PORT("SYSTEM")
156
151
AM_RANGE(0xfe4002, 0xfe4003) AM_READ_PORT("DSW")
157
152
AM_RANGE(0xfe8010, 0xfe8017) AM_WRITE(bionicc_scroll_w)
158
153
AM_RANGE(0xfe801a, 0xfe801b) AM_WRITE(bionicc_mpu_trigger_w) /* ??? not sure, but looks like it */
159
AM_RANGE(0xfec000, 0xfecfff) AM_RAM_WRITE(bionicc_txvideoram_w) AM_BASE_MEMBER(bionicc_state, m_txvideoram)
160
AM_RANGE(0xff0000, 0xff3fff) AM_RAM_WRITE(bionicc_fgvideoram_w) AM_BASE_MEMBER(bionicc_state, m_fgvideoram)
161
AM_RANGE(0xff4000, 0xff7fff) AM_RAM_WRITE(bionicc_bgvideoram_w) AM_BASE_MEMBER(bionicc_state, m_bgvideoram)
162
AM_RANGE(0xff8000, 0xff87ff) AM_RAM_WRITE(bionicc_paletteram_w) AM_BASE_MEMBER(bionicc_state, m_paletteram)
154
AM_RANGE(0xfec000, 0xfecfff) AM_RAM_WRITE(bionicc_txvideoram_w) AM_SHARE("txvideoram")
155
AM_RANGE(0xff0000, 0xff3fff) AM_RAM_WRITE(bionicc_fgvideoram_w) AM_SHARE("fgvideoram")
156
AM_RANGE(0xff4000, 0xff7fff) AM_RAM_WRITE(bionicc_bgvideoram_w) AM_SHARE("bgvideoram")
157
AM_RANGE(0xff8000, 0xff87ff) AM_RAM_WRITE(bionicc_paletteram_w) AM_SHARE("paletteram")
163
158
AM_RANGE(0xffc000, 0xfffff7) AM_RAM /* working RAM */
164
159
AM_RANGE(0xfffff8, 0xfffff9) AM_READWRITE(hacked_soundcommand_r, hacked_soundcommand_w) /* hack */
165
160
AM_RANGE(0xfffffa, 0xffffff) AM_READWRITE(hacked_controls_r, hacked_controls_w) /* hack */
169
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8 )
164
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, bionicc_state )
170
165
AM_RANGE(0x0000, 0x7fff) AM_ROM
171
AM_RANGE(0x8000, 0x8001) AM_DEVREADWRITE("ymsnd", ym2151_r, ym2151_w)
172
AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_r)
166
AM_RANGE(0x8000, 0x8001) AM_DEVREADWRITE_LEGACY("ymsnd", ym2151_r, ym2151_w)
167
AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r)
173
168
AM_RANGE(0xc000, 0xc7ff) AM_RAM
375
370
MCFG_MACHINE_RESET(bionicc)
377
372
/* video hardware */
378
MCFG_VIDEO_ATTRIBUTES(VIDEO_BUFFERS_SPRITERAM)
380
373
MCFG_SCREEN_ADD("screen", RASTER)
381
374
MCFG_SCREEN_REFRESH_RATE(60)
382
375
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
383
376
MCFG_SCREEN_SIZE(32*8, 32*8)
384
377
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
385
378
MCFG_SCREEN_UPDATE_STATIC(bionicc)
386
MCFG_SCREEN_VBLANK_STATIC(bionicc)
379
MCFG_SCREEN_VBLANK_DEVICE("spriteram", buffered_spriteram16_device, vblank_copy_rising)
388
381
MCFG_GFXDECODE(bionicc)
389
382
MCFG_PALETTE_LENGTH(1024)
391
384
MCFG_VIDEO_START(bionicc)
386
MCFG_BUFFERED_SPRITERAM16_ADD("spriteram")
393
388
MCFG_SPEAKER_STANDARD_MONO("mono")
395
390
MCFG_SOUND_ADD("ymsnd", YM2151, 3579545)