trunk/src/mame/audio/t5182.c
| r243414 | r243415 | |
| 152 | 152 | const device_type T5182 = &device_creator<t5182_device>; |
| 153 | 153 | |
| 154 | 154 | t5182_device::t5182_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 155 | | : device_t(mconfig, T5182, "T5182 MCU", tag, owner, clock, "toshiba_t5182", __FILE__), |
| 156 | | m_t5182_sharedram(NULL), |
| 155 | : device_t(mconfig, T5182, "T5182 MCU", tag, owner, clock, "t5182", __FILE__), |
| 156 | m_ourcpu(*this, "t5182_z80"), |
| 157 | m_sharedram(*this, "sharedram"), |
| 157 | 158 | m_irqstate(0), |
| 158 | 159 | m_semaphore_main(0), |
| 159 | 160 | m_semaphore_snd(0) |
| 160 | 161 | { |
| 161 | 162 | } |
| 162 | 163 | |
| 163 | | //------------------------------------------------- |
| 164 | | // device_config_complete - perform any |
| 165 | | // operations now that the configuration is |
| 166 | | // complete |
| 167 | | //------------------------------------------------- |
| 168 | 164 | |
| 169 | | void t5182_device::device_config_complete() |
| 170 | | { |
| 171 | | } |
| 172 | | |
| 173 | 165 | //------------------------------------------------- |
| 174 | 166 | // device_start - device-specific startup |
| 175 | 167 | //------------------------------------------------- |
| 176 | 168 | |
| 177 | 169 | void t5182_device::device_start() |
| 178 | 170 | { |
| 179 | | m_t5182_sharedram = reinterpret_cast<UINT8 *>(machine().root_device().memshare("t5182_sharedram")->ptr()); |
| 180 | | |
| 181 | | save_pointer(NAME(m_t5182_sharedram), sizeof(UINT8)); |
| 171 | m_setirq_cb = timer_alloc(SETIRQ_CB); |
| 172 | |
| 182 | 173 | save_item(NAME(m_irqstate)); |
| 183 | 174 | save_item(NAME(m_semaphore_main)); |
| 184 | 175 | save_item(NAME(m_semaphore_snd)); |
| 185 | | |
| 186 | | m_ourcpu = machine().device<cpu_device>("t5182_z80"); |
| 187 | 176 | } |
| 188 | 177 | |
| 189 | 178 | READ8_MEMBER(t5182_device::sharedram_r) |
| 190 | 179 | { |
| 191 | | return m_t5182_sharedram[offset]; |
| 180 | return m_sharedram[offset]; |
| 192 | 181 | } |
| 193 | 182 | |
| 194 | 183 | WRITE8_MEMBER(t5182_device::sharedram_w) |
| 195 | 184 | { |
| 196 | | m_t5182_sharedram[offset] = data; |
| 185 | m_sharedram[offset] = data; |
| 197 | 186 | } |
| 198 | 187 | |
| 199 | 188 | TIMER_CALLBACK_MEMBER( t5182_device::setirq_callback ) |
| r243414 | r243415 | |
| 230 | 219 | m_ourcpu->set_input_line(0,ASSERT_LINE); |
| 231 | 220 | } |
| 232 | 221 | |
| 222 | void t5182_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) |
| 223 | { |
| 224 | switch (id) |
| 225 | { |
| 226 | case SETIRQ_CB: |
| 227 | setirq_callback(ptr, param); |
| 228 | break; |
| 229 | default: |
| 230 | assert_always(FALSE, "Unknown id in t5182_device::device_timer"); |
| 231 | } |
| 232 | } |
| 233 | 233 | |
| 234 | | |
| 235 | 234 | WRITE8_MEMBER( t5182_device::sound_irq_w ) |
| 236 | 235 | { |
| 237 | | space.machine().scheduler().synchronize(timer_expired_delegate(FUNC(t5182_device::setirq_callback), this), CPU_ASSERT); |
| 236 | synchronize(SETIRQ_CB, CPU_ASSERT); |
| 238 | 237 | } |
| 239 | 238 | |
| 240 | 239 | WRITE8_MEMBER( t5182_device::ym2151_irq_ack_w ) |
| 241 | 240 | { |
| 242 | | space.machine().scheduler().synchronize(timer_expired_delegate(FUNC(t5182_device::setirq_callback), this), YM2151_ACK); |
| 241 | synchronize(SETIRQ_CB, YM2151_ACK); |
| 243 | 242 | } |
| 244 | 243 | |
| 245 | 244 | WRITE8_MEMBER( t5182_device::cpu_irq_ack_w ) |
| 246 | 245 | { |
| 247 | | space.machine().scheduler().synchronize(timer_expired_delegate(FUNC(t5182_device::setirq_callback), this), CPU_CLEAR); |
| 246 | synchronize(SETIRQ_CB, CPU_CLEAR); |
| 248 | 247 | } |
| 249 | 248 | |
| 250 | 249 | WRITE_LINE_MEMBER(t5182_device::ym2151_irq_handler) |
| 251 | 250 | { |
| 252 | 251 | if (state) |
| 253 | | machine().scheduler().synchronize(timer_expired_delegate(FUNC(t5182_device::setirq_callback), this), YM2151_ASSERT); |
| 252 | synchronize(SETIRQ_CB, YM2151_ASSERT); |
| 254 | 253 | else |
| 255 | | machine().scheduler().synchronize(timer_expired_delegate(FUNC(t5182_device::setirq_callback), this), YM2151_CLEAR); |
| 254 | synchronize(SETIRQ_CB, YM2151_CLEAR); |
| 256 | 255 | } |
| 257 | 256 | |
| 258 | 257 | READ8_MEMBER(t5182_device::sharedram_semaphore_snd_r) |
| r243414 | r243415 | |
| 285 | 284 | return m_semaphore_main | (m_irqstate & 2); |
| 286 | 285 | } |
| 287 | 286 | |
| 287 | // ROM definition for the QS1000 internal program ROM |
| 288 | ROM_START( t5182 ) |
| 289 | ROM_REGION( 0x2000, "cpu", 0 ) |
| 290 | ROM_LOAD( "t5182.rom", 0x0000, 0x2000, CRC(d354c8fc) SHA1(a1c9e1ac293f107f69cc5788cf6abc3db1646e33) ) |
| 291 | ROM_END |
| 292 | |
| 288 | 293 | //------------------------------------------------- |
| 289 | | // MACHINE_CONFIG_FRAGMENT( t5182 ) |
| 294 | // rom_region - return a pointer to the device's |
| 295 | // internal ROM region |
| 290 | 296 | //------------------------------------------------- |
| 297 | const rom_entry *t5182_device::device_rom_region() const |
| 298 | { |
| 299 | return ROM_NAME( t5182 ); |
| 300 | } |
| 291 | 301 | |
| 292 | | MACHINE_CONFIG_FRAGMENT( t5182 ) |
| 293 | | MCFG_CPU_ADD("t5182_z80", Z80, T5182_CLOCK) |
| 294 | | MCFG_CPU_PROGRAM_MAP(t5182_map) |
| 295 | | MCFG_CPU_IO_MAP(t5182_io) |
| 302 | INPUT_PORTS_START(t5182) |
| 303 | PORT_START("T5182_COIN") |
| 304 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(2) |
| 305 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(2) |
| 306 | INPUT_PORTS_END |
| 296 | 307 | |
| 297 | | MACHINE_CONFIG_END |
| 308 | //------------------------------------------------- |
| 309 | // input_ports - return a pointer to the implicit |
| 310 | // input ports description for this device |
| 311 | //------------------------------------------------- |
| 298 | 312 | |
| 313 | ioport_constructor t5182_device::device_input_ports() const |
| 314 | { |
| 315 | return INPUT_PORTS_NAME(t5182); |
| 316 | } |
| 317 | |
| 299 | 318 | |
| 300 | 319 | // 4000-407F RAM shared with main CPU |
| 301 | 320 | // 4000 output queue length |
| r243414 | r243415 | |
| 315 | 334 | // A0XX |
| 316 | 335 | // rest unused |
| 317 | 336 | ADDRESS_MAP_START( t5182_map, AS_PROGRAM, 8, t5182_device ) |
| 318 | | AM_RANGE(0x0000, 0x1fff) AM_ROM // internal ROM |
| 337 | AM_RANGE(0x0000, 0x1fff) AM_ROM AM_REGION("cpu", 0) // internal ROM |
| 319 | 338 | AM_RANGE(0x2000, 0x27ff) AM_RAM AM_MIRROR(0x1800) // internal RAM |
| 320 | | AM_RANGE(0x4000, 0x40ff) AM_RAM AM_MIRROR(0x3F00) AM_SHARE("t5182_sharedram") // 2016 with four 74ls245s, one each for main and t5182 address and data. pins 23, 22, 20, 19, 18 are all tied low so only 256 bytes are usable |
| 321 | | AM_RANGE(0x8000, 0xffff) AM_ROM // external ROM |
| 339 | AM_RANGE(0x4000, 0x40ff) AM_RAM AM_MIRROR(0x3F00) AM_SHARE("sharedram") // 2016 with four 74ls245s, one each for main and t5182 address and data. pins 23, 22, 20, 19, 18 are all tied low so only 256 bytes are usable |
| 340 | AM_RANGE(0x8000, 0xffff) AM_ROM AM_REGION(":t5182_z80", 0) // external ROM |
| 322 | 341 | ADDRESS_MAP_END |
| 323 | 342 | |
| 324 | 343 | |
| r243414 | r243415 | |
| 334 | 353 | // 50 W test mode status flags (bit 0 = ROM test fail, bit 1 = RAM test fail, bit 2 = YM2151 IRQ not received) |
| 335 | 354 | ADDRESS_MAP_START( t5182_io, AS_IO, 8, t5182_device ) |
| 336 | 355 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 337 | | AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) |
| 338 | | AM_RANGE(0x10, 0x10) AM_DEVWRITE("t5182", t5182_device, sharedram_semaphore_snd_acquire_w) |
| 339 | | AM_RANGE(0x11, 0x11) AM_DEVWRITE("t5182", t5182_device, sharedram_semaphore_snd_release_w) |
| 340 | | AM_RANGE(0x12, 0x12) AM_DEVWRITE("t5182", t5182_device, ym2151_irq_ack_w) |
| 341 | | AM_RANGE(0x13, 0x13) AM_DEVWRITE("t5182", t5182_device, cpu_irq_ack_w) |
| 342 | | AM_RANGE(0x20, 0x20) AM_DEVREAD("t5182", t5182_device, sharedram_semaphore_main_r) |
| 343 | | AM_RANGE(0x30, 0x30) AM_READ_PORT(T5182COINPORT) |
| 356 | AM_RANGE(0x00, 0x01) AM_DEVREADWRITE(":ymsnd", ym2151_device, read, write) |
| 357 | AM_RANGE(0x10, 0x10) AM_WRITE(sharedram_semaphore_snd_acquire_w) |
| 358 | AM_RANGE(0x11, 0x11) AM_WRITE(sharedram_semaphore_snd_release_w) |
| 359 | AM_RANGE(0x12, 0x12) AM_WRITE(ym2151_irq_ack_w) |
| 360 | AM_RANGE(0x13, 0x13) AM_WRITE(cpu_irq_ack_w) |
| 361 | AM_RANGE(0x20, 0x20) AM_READ(sharedram_semaphore_main_r) |
| 362 | AM_RANGE(0x30, 0x30) AM_READ_PORT("T5182_COIN") |
| 344 | 363 | ADDRESS_MAP_END |
| 364 | |
| 365 | |
| 366 | //------------------------------------------------- |
| 367 | // MACHINE_CONFIG_FRAGMENT( t5182 ) |
| 368 | //------------------------------------------------- |
| 369 | |
| 370 | MACHINE_CONFIG_FRAGMENT( t5182 ) |
| 371 | MCFG_CPU_ADD("t5182_z80", Z80, T5182_CLOCK) |
| 372 | MCFG_CPU_PROGRAM_MAP(t5182_map) |
| 373 | MCFG_CPU_IO_MAP(t5182_io) |
| 374 | |
| 375 | MACHINE_CONFIG_END |
| 376 | |
| 377 | //------------------------------------------------- |
| 378 | // machine_config_additions - device-specific |
| 379 | // machine configurations |
| 380 | //------------------------------------------------- |
| 381 | |
| 382 | machine_config_constructor t5182_device::device_mconfig_additions() const |
| 383 | { |
| 384 | return MACHINE_CONFIG_NAME( t5182 ); |
| 385 | } |
trunk/src/mame/drivers/darkmist.c
| r243414 | r243415 | |
| 28 | 28 | #include "includes/darkmist.h" |
| 29 | 29 | |
| 30 | 30 | |
| 31 | | WRITE8_MEMBER(darkmist_state::darkmist_hw_w) |
| 31 | WRITE8_MEMBER(darkmist_state::hw_w) |
| 32 | 32 | { |
| 33 | 33 | m_hw=data; |
| 34 | 34 | membank("bank1")->set_base(&memregion("maincpu")->base()[0x010000+((data&0x80)?0x4000:0)]); |
| r243414 | r243415 | |
| 40 | 40 | AM_RANGE(0xc801, 0xc801) AM_READ_PORT("P1") |
| 41 | 41 | AM_RANGE(0xc802, 0xc802) AM_READ_PORT("P2") |
| 42 | 42 | AM_RANGE(0xc803, 0xc803) AM_READ_PORT("START") |
| 43 | | AM_RANGE(0xc804, 0xc804) AM_WRITE(darkmist_hw_w) |
| 43 | AM_RANGE(0xc804, 0xc804) AM_WRITE(hw_w) |
| 44 | 44 | AM_RANGE(0xc805, 0xc805) AM_WRITEONLY AM_SHARE("spritebank") |
| 45 | 45 | AM_RANGE(0xc806, 0xc806) AM_READ_PORT("DSW1") |
| 46 | 46 | AM_RANGE(0xc807, 0xc807) AM_READ_PORT("DSW2") |
| r243414 | r243415 | |
| 173 | 173 | PORT_DIPSETTING( 0x80, DEF_STR( No ) ) |
| 174 | 174 | PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) |
| 175 | 175 | |
| 176 | | PORT_START(T5182COINPORT) |
| 177 | | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(2) |
| 178 | | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(2) |
| 179 | | |
| 180 | 176 | INPUT_PORTS_END |
| 181 | 177 | |
| 182 | 178 | static const gfx_layout charlayout = |
| r243414 | r243415 | |
| 213 | 209 | GFXDECODE_ENTRY( "gfx3", 0, tilelayout, 0, 16*4 ) |
| 214 | 210 | GFXDECODE_END |
| 215 | 211 | |
| 216 | | TIMER_DEVICE_CALLBACK_MEMBER(darkmist_state::darkmist_scanline) |
| 212 | TIMER_DEVICE_CALLBACK_MEMBER(darkmist_state::scanline) |
| 217 | 213 | { |
| 218 | 214 | int scanline = param; |
| 219 | 215 | |
| r243414 | r243415 | |
| 230 | 226 | /* basic machine hardware */ |
| 231 | 227 | MCFG_CPU_ADD("maincpu", Z80,4000000) /* ? MHz */ |
| 232 | 228 | MCFG_CPU_PROGRAM_MAP(memmap) |
| 233 | | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", darkmist_state, darkmist_scanline, "screen", 0, 1) |
| 229 | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", darkmist_state, scanline, "screen", 0, 1) |
| 234 | 230 | |
| 235 | | MCFG_T5182_ADD("t5182") |
| 236 | | MCFG_FRAGMENT_ADD(t5182) |
| 231 | MCFG_DEVICE_ADD("t5182", T5182, 0) |
| 232 | |
| 237 | 233 | |
| 238 | 234 | /* video hardware */ |
| 239 | 235 | MCFG_SCREEN_ADD("screen", RASTER) |
| r243414 | r243415 | |
| 241 | 237 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) |
| 242 | 238 | MCFG_SCREEN_SIZE(256, 256) |
| 243 | 239 | MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 16, 256-16-1) |
| 244 | | MCFG_SCREEN_UPDATE_DRIVER(darkmist_state, screen_update_darkmist) |
| 240 | MCFG_SCREEN_UPDATE_DRIVER(darkmist_state, screen_update) |
| 245 | 241 | MCFG_SCREEN_PALETTE("palette") |
| 246 | 242 | |
| 247 | 243 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", darkmist) |
| r243414 | r243415 | |
| 266 | 262 | |
| 267 | 263 | ROM_LOAD( "dm_16.rom", 0x10000, 0x08000, CRC(094579d9) SHA1(2449bc9ba38396912ee9b72dd870ea9fcff95776) ) |
| 268 | 264 | |
| 269 | | ROM_REGION( 0x10000, "t5182_z80", 0 ) /* Toshiba T5182 module */ |
| 270 | | ROM_LOAD( "t5182.rom", 0x0000, 0x2000, CRC(d354c8fc) SHA1(a1c9e1ac293f107f69cc5788cf6abc3db1646e33) ) |
| 271 | | ROM_LOAD( "dm_17.rom", 0x8000, 0x8000, CRC(7723dcae) SHA1(a0c69e7a7b6fd74f7ed6b9c6419aed94aabcd4b0) ) |
| 265 | ROM_REGION( 0x8000, "t5182_z80", 0 ) /* Toshiba T5182 external ROM */ |
| 266 | ROM_LOAD( "dm_17.rom", 0x0000, 0x8000, CRC(7723dcae) SHA1(a0c69e7a7b6fd74f7ed6b9c6419aed94aabcd4b0) ) |
| 272 | 267 | |
| 273 | 268 | ROM_REGION( 0x4000, "gfx1", 0 ) |
| 274 | 269 | ROM_LOAD( "dm_13.rom", 0x00000, 0x02000, CRC(38bb38d9) SHA1(d751990166dd3d503c5de7667679b96210061cd1) ) |
| r243414 | r243415 | |
| 395 | 390 | int i; |
| 396 | 391 | UINT8 *ROM = memregion("t5182_z80")->base(); |
| 397 | 392 | |
| 398 | | for(i=0x8000;i<0x10000;i++) |
| 393 | for(i=0x0000;i<0x2000;i++) |
| 399 | 394 | ROM[i] = BITSWAP8(ROM[i], 7,1,2,3,4,5,6,0); |
| 400 | 395 | } |
| 401 | 396 | |
| r243414 | r243415 | |
| 473 | 468 | } |
| 474 | 469 | } |
| 475 | 470 | |
| 476 | | GAME( 1986, darkmist, 0, darkmist, darkmist, darkmist_state, darkmist, ROT270, "Taito Corporation", "The Lost Castle In Darkmist", GAME_IMPERFECT_GRAPHICS|GAME_NO_COCKTAIL ) |
| 471 | GAME( 1986, darkmist, 0, darkmist, darkmist, darkmist_state, darkmist, ROT270, "Taito Corporation", "The Lost Castle In Darkmist", GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
trunk/src/mame/drivers/mustache.c
| r243414 | r243415 | |
| 43 | 43 | static ADDRESS_MAP_START( memmap, AS_PROGRAM, 8, mustache_state ) |
| 44 | 44 | AM_RANGE(0x0000, 0x7fff) AM_ROM |
| 45 | 45 | AM_RANGE(0x8000, 0xbfff) AM_ROM |
| 46 | | AM_RANGE(0xc000, 0xcfff) AM_RAM_WRITE(mustache_videoram_w) AM_SHARE("videoram") |
| 46 | AM_RANGE(0xc000, 0xcfff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram") |
| 47 | 47 | AM_RANGE(0xd000, 0xd000) AM_DEVWRITE("t5182", t5182_device, sound_irq_w) |
| 48 | 48 | AM_RANGE(0xd001, 0xd001) AM_DEVREAD("t5182", t5182_device, sharedram_semaphore_snd_r) |
| 49 | 49 | AM_RANGE(0xd002, 0xd002) AM_DEVWRITE("t5182", t5182_device, sharedram_semaphore_main_acquire_w) |
| r243414 | r243415 | |
| 54 | 54 | AM_RANGE(0xd802, 0xd802) AM_READ_PORT("START") |
| 55 | 55 | AM_RANGE(0xd803, 0xd803) AM_READ_PORT("DSWA") |
| 56 | 56 | AM_RANGE(0xd804, 0xd804) AM_READ_PORT("DSWB") |
| 57 | | AM_RANGE(0xd806, 0xd806) AM_WRITE(mustache_scroll_w) |
| 58 | | AM_RANGE(0xd807, 0xd807) AM_WRITE(mustache_video_control_w) |
| 57 | AM_RANGE(0xd806, 0xd806) AM_WRITE(scroll_w) |
| 58 | AM_RANGE(0xd807, 0xd807) AM_WRITE(video_control_w) |
| 59 | 59 | AM_RANGE(0xe800, 0xefff) AM_WRITEONLY AM_SHARE("spriteram") |
| 60 | 60 | AM_RANGE(0xf000, 0xffff) AM_RAM |
| 61 | 61 | ADDRESS_MAP_END |
| r243414 | r243415 | |
| 123 | 123 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 124 | 124 | // There is an 8th dipswitch here, which controls screen flip, but the operator sheet implies it does it via hardware, i.e. not readable by cpu. May need further investigation. |
| 125 | 125 | |
| 126 | | PORT_START(T5182COINPORT) |
| 127 | | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(2) |
| 128 | | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(2) |
| 129 | 126 | INPUT_PORTS_END |
| 130 | 127 | |
| 131 | 128 | |
| r243414 | r243415 | |
| 155 | 152 | GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 0x80, 8 ) |
| 156 | 153 | GFXDECODE_END |
| 157 | 154 | |
| 158 | | TIMER_DEVICE_CALLBACK_MEMBER(mustache_state::mustache_scanline) |
| 155 | TIMER_DEVICE_CALLBACK_MEMBER(mustache_state::scanline) |
| 159 | 156 | { |
| 160 | 157 | int scanline = param; |
| 161 | 158 | |
| r243414 | r243415 | |
| 173 | 170 | /* basic machine hardware */ |
| 174 | 171 | MCFG_CPU_ADD("maincpu", Z80, CPU_CLOCK) |
| 175 | 172 | MCFG_CPU_PROGRAM_MAP(memmap) |
| 176 | | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", mustache_state, mustache_scanline, "screen", 0, 1) |
| 173 | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", mustache_state, scanline, "screen", 0, 1) |
| 177 | 174 | |
| 178 | | MCFG_T5182_ADD("t5182") |
| 179 | | MCFG_FRAGMENT_ADD(t5182) |
| 175 | MCFG_DEVICE_ADD("t5182", T5182, 0) |
| 180 | 176 | |
| 177 | |
| 181 | 178 | /* video hardware */ |
| 182 | 179 | MCFG_SCREEN_ADD("screen", RASTER) |
| 183 | 180 | MCFG_SCREEN_REFRESH_RATE(56.747) |
| 184 | 181 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) |
| 185 | 182 | MCFG_SCREEN_SIZE(32*8, 32*8) |
| 186 | 183 | MCFG_SCREEN_VISIBLE_AREA(1*8, 31*8-1, 0, 31*8-1) |
| 187 | | MCFG_SCREEN_UPDATE_DRIVER(mustache_state, screen_update_mustache) |
| 184 | MCFG_SCREEN_UPDATE_DRIVER(mustache_state, screen_update) |
| 188 | 185 | MCFG_SCREEN_PALETTE("palette") |
| 189 | 186 | |
| 190 | 187 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", mustache) |
| r243414 | r243415 | |
| 207 | 204 | ROM_LOAD( "mustache.h18", 0x0000, 0x8000, CRC(123bd9b8) SHA1(33a7cba5c3a54b0b1a15dd1e24d298b6f7274321) ) |
| 208 | 205 | ROM_LOAD( "mustache.h16", 0x8000, 0x4000, CRC(62552beb) SHA1(ee10991d7de0596608fa1db48805781cbfbbdb9f) ) |
| 209 | 206 | |
| 210 | | ROM_REGION( 0x10000, "t5182_z80", 0 ) /* Toshiba T5182 module */ |
| 211 | | ROM_LOAD( "t5182.rom", 0x0000, 0x2000, CRC(d354c8fc) SHA1(a1c9e1ac293f107f69cc5788cf6abc3db1646e33) ) |
| 212 | | ROM_LOAD( "mustache.e5", 0x8000, 0x8000, CRC(efbb1943) SHA1(3320e9eaeb776d09ed63f7dedc79e720674e6718) ) |
| 207 | ROM_REGION( 0x8000, "t5182_z80", 0 ) /* Toshiba T5182 external ROM */ |
| 208 | ROM_LOAD( "mustache.e5", 0x0000, 0x8000, CRC(efbb1943) SHA1(3320e9eaeb776d09ed63f7dedc79e720674e6718) ) |
| 213 | 209 | |
| 214 | 210 | ROM_REGION( 0x0c000, "gfx1",0) /* BG tiles */ |
| 215 | 211 | ROM_LOAD( "mustache.a13", 0x0000, 0x4000, CRC(9baee4a7) SHA1(31bcec838789462e67e54ebe7256db9fc4e51b69) ) |
| r243414 | r243415 | |
| 278 | 274 | } |
| 279 | 275 | |
| 280 | 276 | |
| 281 | | GAME( 1987, mustache, 0, mustache, mustache, mustache_state, mustache, ROT90, "Seibu Kaihatsu (March license)", "Mustache Boy", 0 ) |
| 277 | GAME( 1987, mustache, 0, mustache, mustache, mustache_state, mustache, ROT90, "Seibu Kaihatsu (March license)", "Mustache Boy", GAME_SUPPORTS_SAVE ) |
trunk/src/mame/drivers/panicr.c
| r243414 | r243415 | |
| 69 | 69 | public: |
| 70 | 70 | panicr_state(const machine_config &mconfig, device_type type, const char *tag) |
| 71 | 71 | : driver_device(mconfig, type, tag), |
| 72 | | m_mainram(*this, "mainram"), |
| 73 | | m_spriteram(*this, "spriteram"), |
| 74 | | m_textram(*this, "textram"), |
| 75 | | m_spritebank(*this, "spritebank"), |
| 76 | 72 | m_maincpu(*this, "maincpu"), |
| 77 | 73 | m_t5182(*this, "t5182"), |
| 78 | 74 | m_gfxdecode(*this, "gfxdecode"), |
| 79 | 75 | m_screen(*this, "screen"), |
| 80 | | m_palette(*this, "palette") { } |
| 76 | m_palette(*this, "palette"), |
| 77 | m_mainram(*this, "mainram"), |
| 78 | m_spriteram(*this, "spriteram"), |
| 79 | m_textram(*this, "textram"), |
| 80 | m_spritebank(*this, "spritebank") { } |
| 81 | 81 | |
| 82 | | required_shared_ptr<UINT8> m_mainram; |
| 83 | | required_shared_ptr<UINT8> m_spriteram; |
| 84 | | required_shared_ptr<UINT8> m_textram; |
| 85 | | required_shared_ptr<UINT8> m_spritebank; |
| 86 | | |
| 87 | 82 | required_device<cpu_device> m_maincpu; |
| 88 | 83 | required_device<t5182_device> m_t5182; |
| 89 | 84 | required_device<gfxdecode_device> m_gfxdecode; |
| 90 | 85 | required_device<screen_device> m_screen; |
| 91 | 86 | required_device<palette_device> m_palette; |
| 87 | |
| 88 | required_shared_ptr<UINT8> m_mainram; |
| 89 | required_shared_ptr<UINT8> m_spriteram; |
| 90 | required_shared_ptr<UINT8> m_textram; |
| 91 | required_shared_ptr<UINT8> m_spritebank; |
| 92 | 92 | |
| 93 | 93 | tilemap_t *m_bgtilemap; |
| 94 | 94 | tilemap_t *m_infotilemap_2; |
| 95 | | |
| 96 | 95 | tilemap_t *m_txttilemap; |
| 96 | |
| 97 | 97 | int m_scrollx; |
| 98 | bitmap_ind16 *m_temprender; |
| 99 | bitmap_ind16 *m_tempbitmap_1; |
| 100 | rectangle m_tempbitmap_clip; |
| 98 | 101 | |
| 99 | | DECLARE_READ8_MEMBER(panicr_collision_r); |
| 100 | | DECLARE_WRITE8_MEMBER(panicr_scrollx_lo_w); |
| 101 | | DECLARE_WRITE8_MEMBER(panicr_scrollx_hi_w); |
| 102 | | DECLARE_WRITE8_MEMBER(panicr_output_w); |
| 102 | DECLARE_READ8_MEMBER(collision_r); |
| 103 | DECLARE_WRITE8_MEMBER(scrollx_lo_w); |
| 104 | DECLARE_WRITE8_MEMBER(scrollx_hi_w); |
| 105 | DECLARE_WRITE8_MEMBER(output_w); |
| 103 | 106 | DECLARE_READ8_MEMBER(t5182shared_r); |
| 104 | 107 | DECLARE_WRITE8_MEMBER(t5182shared_w); |
| 105 | 108 | |
| 106 | | DECLARE_DRIVER_INIT(panicr); |
| 107 | 109 | TILE_GET_INFO_MEMBER(get_bgtile_info); |
| 108 | 110 | TILE_GET_INFO_MEMBER(get_infotile_info); |
| 109 | 111 | TILE_GET_INFO_MEMBER(get_infotile_info_2); |
| 110 | 112 | TILE_GET_INFO_MEMBER(get_infotile_info_3); |
| 111 | 113 | TILE_GET_INFO_MEMBER(get_infotile_info_4); |
| 112 | | |
| 113 | 114 | TILE_GET_INFO_MEMBER(get_txttile_info); |
| 115 | |
| 116 | DECLARE_DRIVER_INIT(panicr); |
| 114 | 117 | virtual void video_start(); |
| 115 | 118 | DECLARE_PALETTE_INIT(panicr); |
| 116 | | UINT32 screen_update_panicr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 117 | | TIMER_DEVICE_CALLBACK_MEMBER(panicr_scanline); |
| 119 | |
| 120 | UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 118 | 121 | void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect ); |
| 119 | | |
| 120 | | bitmap_ind16 *m_temprender; |
| 121 | | |
| 122 | | bitmap_ind16 *m_tempbitmap_1; |
| 123 | | rectangle m_tempbitmap_clip; |
| 122 | |
| 123 | TIMER_DEVICE_CALLBACK_MEMBER(scanline); |
| 124 | 124 | }; |
| 125 | 125 | |
| 126 | 126 | |
| r243414 | r243415 | |
| 243 | 243 | |
| 244 | 244 | m_txttilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(panicr_state::get_txttile_info),this),TILEMAP_SCAN_ROWS,8,8,32,32 ); |
| 245 | 245 | m_txttilemap->configure_groups(*m_gfxdecode->gfx(0), 0); |
| 246 | |
| 247 | save_item(NAME(m_scrollx)); |
| 246 | 248 | } |
| 247 | 249 | |
| 248 | 250 | void panicr_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect ) |
| 249 | 251 | { |
| 250 | | UINT8 *spriteram = m_spriteram; |
| 251 | 252 | int offs,flipx,flipy,x,y,color,sprite; |
| 252 | 253 | |
| 253 | 254 | |
| r243414 | r243415 | |
| 256 | 257 | for (offs = m_spriteram.bytes() - 16; offs>=0; offs-=16) |
| 257 | 258 | { |
| 258 | 259 | flipx = 0; |
| 259 | | flipy = spriteram[offs+1] & 0x80; |
| 260 | | y = spriteram[offs+2]; |
| 261 | | x = spriteram[offs+3]; |
| 262 | | if (spriteram[offs+1] & 0x40) x -= 0x100; |
| 260 | flipy = m_spriteram[offs+1] & 0x80; |
| 261 | y = m_spriteram[offs+2]; |
| 262 | x = m_spriteram[offs+3]; |
| 263 | if (m_spriteram[offs+1] & 0x40) x -= 0x100; |
| 263 | 264 | |
| 264 | | if (spriteram[offs+1] & 0x20) |
| 265 | if (m_spriteram[offs+1] & 0x20) |
| 265 | 266 | { |
| 266 | 267 | // often set |
| 267 | 268 | } |
| 268 | 269 | |
| 269 | | if (spriteram[offs+1] & 0x10) |
| 270 | if (m_spriteram[offs+1] & 0x10) |
| 270 | 271 | { |
| 271 | | popmessage("(spriteram[offs+1] & 0x10) %02x\n", (spriteram[offs+1] & 0x10)); |
| 272 | popmessage("(spriteram[offs+1] & 0x10) %02x\n", (m_spriteram[offs+1] & 0x10)); |
| 272 | 273 | } |
| 273 | 274 | |
| 274 | 275 | |
| 275 | | color = spriteram[offs+1] & 0x0f; |
| 276 | | sprite = spriteram[offs+0] | (*m_spritebank << 8); |
| 276 | color = m_spriteram[offs+1] & 0x0f; |
| 277 | sprite = m_spriteram[offs+0] | (*m_spritebank << 8); |
| 277 | 278 | |
| 278 | 279 | m_gfxdecode->gfx(2)->transmask(bitmap,cliprect, |
| 279 | 280 | sprite, |
| r243414 | r243415 | |
| 282 | 283 | } |
| 283 | 284 | } |
| 284 | 285 | |
| 285 | | UINT32 panicr_state::screen_update_panicr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 286 | UINT32 panicr_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 286 | 287 | { |
| 287 | 288 | m_bgtilemap->set_scrollx(0, m_scrollx); |
| 288 | 289 | m_bgtilemap->draw(screen, *m_temprender, m_tempbitmap_clip, 0,0); |
| r243414 | r243415 | |
| 341 | 342 | |
| 342 | 343 | ***************************************************************************/ |
| 343 | 344 | |
| 344 | | READ8_MEMBER(panicr_state::panicr_collision_r) |
| 345 | READ8_MEMBER(panicr_state::collision_r) |
| 345 | 346 | { |
| 346 | 347 | // re-render the collision data here |
| 347 | 348 | // collisions are based on 2 bits from the tile data, relative to a page of tiles |
| r243414 | r243415 | |
| 384 | 385 | } |
| 385 | 386 | |
| 386 | 387 | |
| 387 | | WRITE8_MEMBER(panicr_state::panicr_scrollx_lo_w) |
| 388 | WRITE8_MEMBER(panicr_state::scrollx_lo_w) |
| 388 | 389 | { |
| 389 | | logerror("panicr_scrollx_lo_w %02x\n", data); |
| 390 | logerror("scrollx_lo_w %02x\n", data); |
| 390 | 391 | m_scrollx = (m_scrollx & 0xff00) | (data << 1 & 0xfe) | (data >> 7 & 0x01); |
| 391 | 392 | } |
| 392 | 393 | |
| 393 | | WRITE8_MEMBER(panicr_state::panicr_scrollx_hi_w) |
| 394 | WRITE8_MEMBER(panicr_state::scrollx_hi_w) |
| 394 | 395 | { |
| 395 | | logerror("panicr_scrollx_hi_w %02x\n", data); |
| 396 | logerror("scrollx_hi_w %02x\n", data); |
| 396 | 397 | m_scrollx = (m_scrollx & 0xff) | ((data &0xf0) << 4) | ((data & 0x0f) << 12); |
| 397 | 398 | } |
| 398 | 399 | |
| 399 | | WRITE8_MEMBER(panicr_state::panicr_output_w) |
| 400 | WRITE8_MEMBER(panicr_state::output_w) |
| 400 | 401 | { |
| 401 | 402 | // d6, d7: play counter? (it only triggers on 1st coin) |
| 402 | 403 | coin_counter_w(machine(), 0, (data & 0x40) ? 1 : 0); |
| 403 | 404 | coin_counter_w(machine(), 1, (data & 0x80) ? 1 : 0); |
| 404 | 405 | |
| 405 | | logerror("panicr_output_w %02x\n", data); |
| 406 | logerror("output_w %02x\n", data); |
| 406 | 407 | |
| 407 | 408 | // other bits: ? |
| 408 | 409 | } |
| r243414 | r243415 | |
| 426 | 427 | AM_RANGE(0x00000, 0x01fff) AM_RAM AM_SHARE("mainram") |
| 427 | 428 | AM_RANGE(0x02000, 0x03cff) AM_RAM AM_SHARE("spriteram") // how big is sprite ram, some places definitely have sprites at 3000+ |
| 428 | 429 | AM_RANGE(0x03d00, 0x03fff) AM_RAM |
| 429 | | AM_RANGE(0x08000, 0x0bfff) AM_READ(panicr_collision_r) |
| 430 | AM_RANGE(0x08000, 0x0bfff) AM_READ(collision_r) |
| 430 | 431 | AM_RANGE(0x0c000, 0x0cfff) AM_RAM AM_SHARE("textram") |
| 431 | 432 | AM_RANGE(0x0d000, 0x0d000) AM_DEVWRITE("t5182", t5182_device, sound_irq_w) |
| 432 | 433 | AM_RANGE(0x0d002, 0x0d002) AM_DEVWRITE("t5182", t5182_device, sharedram_semaphore_main_acquire_w) |
| r243414 | r243415 | |
| 438 | 439 | AM_RANGE(0x0d404, 0x0d404) AM_READ_PORT("START") |
| 439 | 440 | AM_RANGE(0x0d406, 0x0d406) AM_READ_PORT("DSW1") |
| 440 | 441 | AM_RANGE(0x0d407, 0x0d407) AM_READ_PORT("DSW2") |
| 441 | | AM_RANGE(0x0d802, 0x0d802) AM_WRITE(panicr_scrollx_hi_w) |
| 442 | | AM_RANGE(0x0d804, 0x0d804) AM_WRITE(panicr_scrollx_lo_w) |
| 443 | | AM_RANGE(0x0d80a, 0x0d80a) AM_WRITE(panicr_output_w) |
| 442 | AM_RANGE(0x0d802, 0x0d802) AM_WRITE(scrollx_hi_w) |
| 443 | AM_RANGE(0x0d804, 0x0d804) AM_WRITE(scrollx_lo_w) |
| 444 | AM_RANGE(0x0d80a, 0x0d80a) AM_WRITE(output_w) |
| 444 | 445 | AM_RANGE(0x0d80c, 0x0d80c) AM_WRITEONLY AM_SHARE("spritebank") |
| 445 | 446 | AM_RANGE(0x0d818, 0x0d818) AM_WRITENOP // watchdog? |
| 446 | 447 | AM_RANGE(0xf0000, 0xfffff) AM_ROM |
| r243414 | r243415 | |
| 519 | 520 | PORT_DIPSETTING( 0x80, DEF_STR( Upright ) ) |
| 520 | 521 | PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) |
| 521 | 522 | |
| 522 | | PORT_START(T5182COINPORT) |
| 523 | | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(2) |
| 524 | | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(2) |
| 525 | 523 | INPUT_PORTS_END |
| 526 | 524 | |
| 527 | 525 | |
| r243414 | r243415 | |
| 594 | 592 | GFXDECODE_END |
| 595 | 593 | |
| 596 | 594 | |
| 597 | | TIMER_DEVICE_CALLBACK_MEMBER(panicr_state::panicr_scanline) |
| 595 | TIMER_DEVICE_CALLBACK_MEMBER(panicr_state::scanline) |
| 598 | 596 | { |
| 599 | 597 | int scanline = param; |
| 600 | 598 | |
| r243414 | r243415 | |
| 608 | 606 | static MACHINE_CONFIG_START( panicr, panicr_state ) |
| 609 | 607 | MCFG_CPU_ADD("maincpu", V20,MASTER_CLOCK/2) /* Sony 8623h9 CXQ70116D-8 (V20 compatible) */ |
| 610 | 608 | MCFG_CPU_PROGRAM_MAP(panicr_map) |
| 611 | | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", panicr_state, panicr_scanline, "screen", 0, 1) |
| 609 | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", panicr_state, scanline, "screen", 0, 1) |
| 612 | 610 | |
| 613 | | MCFG_T5182_ADD("t5182") |
| 614 | | MCFG_FRAGMENT_ADD(t5182) |
| 611 | MCFG_DEVICE_ADD("t5182", T5182, 0) |
| 612 | |
| 615 | 613 | |
| 616 | 614 | MCFG_SCREEN_ADD("screen", RASTER) |
| 617 | 615 | MCFG_SCREEN_REFRESH_RATE(60) |
| r243414 | r243415 | |
| 619 | 617 | MCFG_SCREEN_SIZE(32*8, 32*8) |
| 620 | 618 | // MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1) |
| 621 | 619 | MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) |
| 622 | | MCFG_SCREEN_UPDATE_DRIVER(panicr_state, screen_update_panicr) |
| 620 | MCFG_SCREEN_UPDATE_DRIVER(panicr_state, screen_update) |
| 623 | 621 | MCFG_SCREEN_PALETTE("palette") |
| 624 | 622 | |
| 625 | 623 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", panicr) |
| r243414 | r243415 | |
| 643 | 641 | ROM_LOAD16_BYTE("2.19m", 0x0f0000, 0x08000, CRC(3d48b0b5) SHA1(a6e8b38971a8964af463c16f32bb7dbd301dd314) ) |
| 644 | 642 | ROM_LOAD16_BYTE("1.19n", 0x0f0001, 0x08000, CRC(674131b9) SHA1(63499cd5ad39e79e70f3ba7060680f0aa133f095) ) |
| 645 | 643 | |
| 646 | | ROM_REGION( 0x10000, "t5182_z80", 0 ) /* Toshiba T5182 module */ |
| 647 | | ROM_LOAD( "t5182.rom", 0x0000, 0x2000, CRC(d354c8fc) SHA1(a1c9e1ac293f107f69cc5788cf6abc3db1646e33) ) |
| 648 | | ROM_LOAD( "22d.bin", 0x8000, 0x8000, CRC(eb1a46e1) SHA1(278859ae4bca9f421247e646d789fa1206dcd8fc) ) |
| 644 | ROM_REGION( 0x8000, "t5182_z80", 0 ) /* Toshiba T5182 external ROM */ |
| 645 | ROM_LOAD( "22d.bin", 0x0000, 0x8000, CRC(eb1a46e1) SHA1(278859ae4bca9f421247e646d789fa1206dcd8fc) ) |
| 649 | 646 | |
| 650 | 647 | ROM_REGION( 0x04000, "gfx1", 0 ) |
| 651 | 648 | ROM_LOAD( "13f.bin", 0x000000, 0x2000, CRC(4e6b3c04) SHA1(f388969d5d822df0eaa4d8300cbf9cee47468360) ) |
| r243414 | r243415 | |
| 682 | 679 | ROM_LOAD16_BYTE("2g.19m", 0x0f0000, 0x08000, CRC(cf759403) SHA1(1a0911c943ecc752e46873c9a5da981745f7562d) ) |
| 683 | 680 | ROM_LOAD16_BYTE("1g.19n", 0x0f0001, 0x08000, CRC(06877f9b) SHA1(8b92209d6422ff2b1f3cb66bd39a3ff84e399eec) ) |
| 684 | 681 | |
| 685 | | ROM_REGION( 0x10000, "t5182_z80", 0 ) /* Toshiba T5182 module */ |
| 686 | | ROM_LOAD( "t5182.rom", 0x0000, 0x2000, CRC(d354c8fc) SHA1(a1c9e1ac293f107f69cc5788cf6abc3db1646e33) ) |
| 687 | | ROM_LOAD( "22d.bin", 0x8000, 0x8000, CRC(eb1a46e1) SHA1(278859ae4bca9f421247e646d789fa1206dcd8fc) ) |
| 682 | ROM_REGION( 0x10000, "t5182_z80", 0 ) /* Toshiba T5182 external ROM */ |
| 683 | ROM_LOAD( "22d.bin", 0x0000, 0x8000, CRC(eb1a46e1) SHA1(278859ae4bca9f421247e646d789fa1206dcd8fc) ) |
| 688 | 684 | |
| 689 | 685 | ROM_REGION( 0x04000, "gfx1", 0 ) |
| 690 | 686 | ROM_LOAD( "13f.bin", 0x000000, 0x2000, CRC(4e6b3c04) SHA1(f388969d5d822df0eaa4d8300cbf9cee47468360) ) |
| r243414 | r243415 | |
| 832 | 828 | } |
| 833 | 829 | |
| 834 | 830 | |
| 835 | | GAME( 1986, panicr, 0, panicr, panicr, panicr_state, panicr, ROT270, "Seibu Kaihatsu (Taito license)", "Panic Road (Japan)", GAME_IMPERFECT_GRAPHICS ) |
| 836 | | GAME( 1986, panicrg, panicr, panicr, panicr, panicr_state, panicr, ROT270, "Seibu Kaihatsu (Tuning license)", "Panic Road (Germany)", GAME_IMPERFECT_GRAPHICS ) |
| 831 | GAME( 1986, panicr, 0, panicr, panicr, panicr_state, panicr, ROT270, "Seibu Kaihatsu (Taito license)", "Panic Road (Japan)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |
| 832 | GAME( 1986, panicrg, panicr, panicr, panicr, panicr_state, panicr, ROT270, "Seibu Kaihatsu (Tuning license)", "Panic Road (Germany)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |