trunk/src/mame/includes/megadriv.h
| r22072 | r22073 | |
| 164 | 164 | |
| 165 | 165 | int m_protcount; |
| 166 | 166 | |
| 167 | | // jzth protection |
| 168 | | DECLARE_WRITE16_MEMBER( bl_710000_w ) |
| 169 | | { |
| 170 | | int pc = space.device().safe_pc(); |
| 171 | | |
| 172 | | logerror("%06x writing to bl_710000_w %04x %04x\n", pc, data, mem_mask); |
| 173 | | |
| 174 | | // protection value is read from 0x710000 after a series of writes.. and stored at ff0007 |
| 175 | | // startup |
| 176 | | /* |
| 177 | | 059ce0 writing to bl_710000_w ff08 ffff |
| 178 | | 059d04 writing to bl_710000_w 000a ffff |
| 179 | | 059d04 writing to bl_710000_w 000b ffff |
| 180 | | 059d04 writing to bl_710000_w 000c ffff |
| 181 | | 059d04 writing to bl_710000_w 000f ffff |
| 182 | | 059d1c writing to bl_710000_w ff09 ffff |
| 183 | | 059d2a reading from bl_710000_r (wants 0xe) |
| 184 | | 059ce0 writing to bl_710000_w ff08 ffff |
| 185 | | 059d04 writing to bl_710000_w 000a ffff |
| 186 | | 059d04 writing to bl_710000_w 000b ffff |
| 187 | | 059d04 writing to bl_710000_w 000c ffff |
| 188 | | 059d04 writing to bl_710000_w 000f ffff |
| 189 | | 059d1c writing to bl_710000_w ff09 ffff |
| 190 | | 059d2a reading from bl_710000_r (wants 0xe) |
| 191 | | */ |
| 192 | | // before lv stage 3 |
| 193 | | /* |
| 194 | | 059ce0 writing to bl_710000_w 0008 ffff |
| 195 | | 059d04 writing to bl_710000_w 000b ffff |
| 196 | | 059d04 writing to bl_710000_w 000f ffff |
| 197 | | 059d1c writing to bl_710000_w ff09 ffff |
| 198 | | 059d2a reading from bl_710000_r (wants 0x4) |
| 199 | | */ |
| 200 | | // start level 3 |
| 201 | | /* |
| 202 | | 059ce0 writing to bl_710000_w ff08 ffff |
| 203 | | 059d04 writing to bl_710000_w 000b ffff |
| 204 | | 059d04 writing to bl_710000_w 000c ffff |
| 205 | | 059d04 writing to bl_710000_w 000e ffff |
| 206 | | 059d1c writing to bl_710000_w ff09 ffff |
| 207 | | 059d2a reading from bl_710000_r (wants 0x5) |
| 208 | | |
| 209 | | // after end sequence |
| 210 | | 059ce0 writing to bl_710000_w 0008 ffff |
| 211 | | 059d04 writing to bl_710000_w 000a ffff |
| 212 | | 059d04 writing to bl_710000_w 000b ffff |
| 213 | | 059d04 writing to bl_710000_w 000c ffff |
| 214 | | 059d04 writing to bl_710000_w 000f ffff |
| 215 | | 059d1c writing to bl_710000_w ff09 ffff |
| 216 | | 059d2a reading from bl_710000_r (wants 0xe) |
| 217 | | |
| 218 | | */ |
| 219 | | m_protcount++; |
| 220 | | } |
| 221 | | |
| 222 | | |
| 223 | | DECLARE_READ16_MEMBER( bl_710000_r ) |
| 224 | | { |
| 225 | | UINT16 ret; |
| 226 | | int pc = space.device().safe_pc(); |
| 227 | | logerror("%06x reading from bl_710000_r\n", pc); |
| 228 | | |
| 229 | | if (m_protcount==6) { ret = 0xe; } |
| 230 | | else if (m_protcount==5) { ret = 0x5; } |
| 231 | | else if (m_protcount==4) { ret = 0x4; } |
| 232 | | else ret = 0xf; |
| 233 | | |
| 234 | | m_protcount = 0; |
| 235 | | return ret; |
| 236 | | } |
| 237 | | |
| 238 | 167 | DECLARE_DRIVER_INIT(aladmdb); |
| 239 | 168 | DECLARE_DRIVER_INIT(mk3mdb); |
| 240 | 169 | DECLARE_DRIVER_INIT(ssf2mdb); |
| r22072 | r22073 | |
| 242 | 171 | DECLARE_DRIVER_INIT(topshoot); |
| 243 | 172 | DECLARE_DRIVER_INIT(puckpkmn); |
| 244 | 173 | DECLARE_DRIVER_INIT(hshavoc); |
| 174 | DECLARE_WRITE16_MEMBER( bl_710000_w ); |
| 175 | DECLARE_READ16_MEMBER( bl_710000_r ); |
| 176 | DECLARE_WRITE16_MEMBER( aladmdb_w ); |
| 177 | DECLARE_READ16_MEMBER( aladmdb_r ); |
| 178 | DECLARE_READ16_MEMBER( mk3mdb_dsw_r ); |
| 179 | DECLARE_READ16_MEMBER( ssf2mdb_dsw_r ); |
| 180 | DECLARE_READ16_MEMBER( srmdb_dsw_r ); |
| 181 | DECLARE_READ16_MEMBER( topshoot_200051_r ); |
| 182 | DECLARE_READ16_MEMBER(puckpkmna_70001c_r); |
| 183 | DECLARE_READ16_MEMBER(puckpkmna_4b2476_r); |
| 245 | 184 | }; |
| 246 | 185 | |
| 247 | 186 | |
trunk/src/mame/drivers/megadrvb.c
| r22072 | r22073 | |
| 264 | 264 | * |
| 265 | 265 | *************************************/ |
| 266 | 266 | |
| 267 | | static WRITE16_HANDLER( aladmdb_w ) |
| 267 | WRITE16_MEMBER(md_boot_state::aladmdb_w ) |
| 268 | 268 | { |
| 269 | 269 | /* |
| 270 | 270 | Values returned from the log file : |
| r22072 | r22073 | |
| 276 | 276 | logerror("aladmdb_w : %06x - data = %04x\n",space.device().safe_pc(),data); |
| 277 | 277 | } |
| 278 | 278 | |
| 279 | | static READ16_HANDLER( aladmdb_r ) |
| 279 | READ16_MEMBER(md_boot_state::aladmdb_r ) |
| 280 | 280 | { |
| 281 | | md_boot_state *state = space.machine().driver_data<md_boot_state>(); |
| 282 | 281 | if (space.device().safe_pc()==0x1b2a56) |
| 283 | 282 | { |
| 284 | | state->m_aladmdb_mcu_port = state->ioport("MCU")->read(); |
| 283 | m_aladmdb_mcu_port = ioport("MCU")->read(); |
| 285 | 284 | |
| 286 | | if (state->m_aladmdb_mcu_port & 0x100) |
| 287 | | return ((state->m_aladmdb_mcu_port & 0x0f) | 0x100); // coin inserted, calculate the number of coins |
| 285 | if (m_aladmdb_mcu_port & 0x100) |
| 286 | return ((m_aladmdb_mcu_port & 0x0f) | 0x100); // coin inserted, calculate the number of coins |
| 288 | 287 | else |
| 289 | 288 | return (0x100); //MCU status, needed if you fall into a pitfall |
| 290 | 289 | } |
| 291 | 290 | if (space.device().safe_pc()==0x1b2a72) return 0x0000; |
| 292 | | if (space.device().safe_pc()==0x1b2d24) return (space.machine().root_device().ioport("MCU")->read() & 0x00f0) | 0x1200; // difficulty |
| 291 | if (space.device().safe_pc()==0x1b2d24) return (ioport("MCU")->read() & 0x00f0) | 0x1200; // difficulty |
| 293 | 292 | if (space.device().safe_pc()==0x1b2d4e) return 0x0000; |
| 294 | 293 | |
| 295 | 294 | logerror("aladbl_r : %06x\n",space.device().safe_pc()); |
| r22072 | r22073 | |
| 297 | 296 | return 0x0000; |
| 298 | 297 | } |
| 299 | 298 | |
| 300 | | static READ16_HANDLER( mk3mdb_dsw_r ) |
| 299 | READ16_MEMBER(md_boot_state::mk3mdb_dsw_r ) |
| 301 | 300 | { |
| 302 | 301 | static const char *const dswname[3] = { "DSWA", "DSWB", "DSWC" }; |
| 303 | | return space.machine().root_device().ioport(dswname[offset])->read(); |
| 302 | return ioport(dswname[offset])->read(); |
| 304 | 303 | } |
| 305 | 304 | |
| 306 | | static READ16_HANDLER( ssf2mdb_dsw_r ) |
| 305 | READ16_MEMBER(md_boot_state::ssf2mdb_dsw_r ) |
| 307 | 306 | { |
| 308 | 307 | static const char *const dswname[3] = { "DSWA", "DSWB", "DSWC" }; |
| 309 | | return space.machine().root_device().ioport(dswname[offset])->read(); |
| 308 | return ioport(dswname[offset])->read(); |
| 310 | 309 | } |
| 311 | 310 | |
| 312 | | static READ16_HANDLER( srmdb_dsw_r ) |
| 311 | READ16_MEMBER(md_boot_state::srmdb_dsw_r ) |
| 313 | 312 | { |
| 314 | 313 | static const char *const dswname[3] = { "DSWA", "DSWB", "DSWC" }; |
| 315 | | return space.machine().root_device().ioport(dswname[offset])->read(); |
| 314 | return ioport(dswname[offset])->read(); |
| 316 | 315 | } |
| 317 | 316 | |
| 318 | | static READ16_HANDLER( topshoot_200051_r ) |
| 317 | READ16_MEMBER(md_boot_state::topshoot_200051_r ) |
| 319 | 318 | { |
| 320 | 319 | return -0x5b; |
| 321 | 320 | } |
| 322 | 321 | |
| 322 | // jzth protection |
| 323 | WRITE16_MEMBER(md_boot_state::bl_710000_w) |
| 324 | { |
| 325 | int pc = space.device().safe_pc(); |
| 326 | |
| 327 | logerror("%06x writing to bl_710000_w %04x %04x\n", pc, data, mem_mask); |
| 328 | |
| 329 | // protection value is read from 0x710000 after a series of writes.. and stored at ff0007 |
| 330 | // startup |
| 331 | /* |
| 332 | 059ce0 writing to bl_710000_w ff08 ffff |
| 333 | 059d04 writing to bl_710000_w 000a ffff |
| 334 | 059d04 writing to bl_710000_w 000b ffff |
| 335 | 059d04 writing to bl_710000_w 000c ffff |
| 336 | 059d04 writing to bl_710000_w 000f ffff |
| 337 | 059d1c writing to bl_710000_w ff09 ffff |
| 338 | 059d2a reading from bl_710000_r (wants 0xe) |
| 339 | 059ce0 writing to bl_710000_w ff08 ffff |
| 340 | 059d04 writing to bl_710000_w 000a ffff |
| 341 | 059d04 writing to bl_710000_w 000b ffff |
| 342 | 059d04 writing to bl_710000_w 000c ffff |
| 343 | 059d04 writing to bl_710000_w 000f ffff |
| 344 | 059d1c writing to bl_710000_w ff09 ffff |
| 345 | 059d2a reading from bl_710000_r (wants 0xe) |
| 346 | */ |
| 347 | // before lv stage 3 |
| 348 | /* |
| 349 | 059ce0 writing to bl_710000_w 0008 ffff |
| 350 | 059d04 writing to bl_710000_w 000b ffff |
| 351 | 059d04 writing to bl_710000_w 000f ffff |
| 352 | 059d1c writing to bl_710000_w ff09 ffff |
| 353 | 059d2a reading from bl_710000_r (wants 0x4) |
| 354 | */ |
| 355 | // start level 3 |
| 356 | /* |
| 357 | 059ce0 writing to bl_710000_w ff08 ffff |
| 358 | 059d04 writing to bl_710000_w 000b ffff |
| 359 | 059d04 writing to bl_710000_w 000c ffff |
| 360 | 059d04 writing to bl_710000_w 000e ffff |
| 361 | 059d1c writing to bl_710000_w ff09 ffff |
| 362 | 059d2a reading from bl_710000_r (wants 0x5) |
| 363 | |
| 364 | // after end sequence |
| 365 | 059ce0 writing to bl_710000_w 0008 ffff |
| 366 | 059d04 writing to bl_710000_w 000a ffff |
| 367 | 059d04 writing to bl_710000_w 000b ffff |
| 368 | 059d04 writing to bl_710000_w 000c ffff |
| 369 | 059d04 writing to bl_710000_w 000f ffff |
| 370 | 059d1c writing to bl_710000_w ff09 ffff |
| 371 | 059d2a reading from bl_710000_r (wants 0xe) |
| 372 | |
| 373 | */ |
| 374 | m_protcount++; |
| 375 | } |
| 376 | |
| 377 | |
| 378 | READ16_MEMBER(md_boot_state::bl_710000_r) |
| 379 | { |
| 380 | UINT16 ret; |
| 381 | int pc = space.device().safe_pc(); |
| 382 | logerror("%06x reading from bl_710000_r\n", pc); |
| 383 | |
| 384 | if (m_protcount==6) { ret = 0xe; } |
| 385 | else if (m_protcount==5) { ret = 0x5; } |
| 386 | else if (m_protcount==4) { ret = 0x4; } |
| 387 | else ret = 0xf; |
| 388 | |
| 389 | m_protcount = 0; |
| 390 | return ret; |
| 391 | } |
| 392 | |
| 393 | |
| 323 | 394 | /************************************* |
| 324 | 395 | * |
| 325 | 396 | * Game-specific port definitions |
| r22072 | r22073 | |
| 664 | 735 | #endif |
| 665 | 736 | |
| 666 | 737 | // 220000 = writes to mcu? 330000 = reads? |
| 667 | | machine().device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x220000, 0x220001, FUNC(aladmdb_w)); |
| 668 | | machine().device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x330000, 0x330001, FUNC(aladmdb_r)); |
| 738 | machine().device("maincpu")->memory().space(AS_PROGRAM).install_write_handler(0x220000, 0x220001, write16_delegate(FUNC(md_boot_state::aladmdb_w),this)); |
| 739 | machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0x330000, 0x330001, read16_delegate(FUNC(md_boot_state::aladmdb_r),this)); |
| 669 | 740 | |
| 670 | 741 | m_megadrive_6buttons_pad = 0; |
| 671 | 742 | DRIVER_INIT_CALL(megadrij); |
| r22072 | r22073 | |
| 714 | 785 | rom[0x07] = 0x02; |
| 715 | 786 | rom[0x06] = 0x10; |
| 716 | 787 | |
| 717 | | machine().device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x770070, 0x770075, FUNC(mk3mdb_dsw_r) ); |
| 788 | machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0x770070, 0x770075, read16_delegate(FUNC(md_boot_state::mk3mdb_dsw_r),this)); |
| 718 | 789 | |
| 719 | 790 | m_megadrive_6buttons_pad = 1; |
| 720 | 791 | DRIVER_INIT_CALL(megadriv); |
| r22072 | r22073 | |
| 728 | 799 | |
| 729 | 800 | machine().root_device().membank("bank5")->set_base(machine().root_device().memregion( "maincpu" )->base() + 0x400000 ); |
| 730 | 801 | |
| 731 | | machine().device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x770070, 0x770075, FUNC(ssf2mdb_dsw_r) ); |
| 802 | machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0x770070, 0x770075, read16_delegate(FUNC(md_boot_state::ssf2mdb_dsw_r),this)); |
| 732 | 803 | |
| 733 | 804 | m_megadrive_6buttons_pad = 1; |
| 734 | 805 | DRIVER_INIT_CALL(megadrij); |
| r22072 | r22073 | |
| 757 | 828 | rom[0x06] = 0xd2; |
| 758 | 829 | rom[0x07] = 0x00; |
| 759 | 830 | |
| 760 | | machine().device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x770070, 0x770075, FUNC(srmdb_dsw_r) ); |
| 831 | machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0x770070, 0x770075, read16_delegate(FUNC(md_boot_state::srmdb_dsw_r),this)); |
| 761 | 832 | |
| 762 | 833 | m_megadrive_6buttons_pad = 0; |
| 763 | 834 | DRIVER_INIT_CALL(megadriv); |
| r22072 | r22073 | |
| 765 | 836 | |
| 766 | 837 | DRIVER_INIT_MEMBER(md_boot_state,topshoot) |
| 767 | 838 | { |
| 768 | | machine().device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x200050, 0x200051, FUNC(topshoot_200051_r) ); |
| 839 | machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0x200050, 0x200051, read16_delegate(FUNC(md_boot_state::topshoot_200051_r),this)); |
| 769 | 840 | machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_port(0x200042, 0x200043, "IN0"); |
| 770 | 841 | machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_port(0x200044, 0x200045, "IN1"); |
| 771 | 842 | machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_port(0x200046, 0x200047, "IN2"); |