trunk/src/mess/machine/dgn_beta.c
| r18061 | r18062 | |
| 71 | 71 | #include "debug/debugcon.h" |
| 72 | 72 | #include "machine/ram.h" |
| 73 | 73 | |
| 74 | | |
| 75 | | // Ram banking handlers. |
| 76 | | static DECLARE_WRITE8_HANDLER( dgnbeta_ram_b0_w ); |
| 77 | | static DECLARE_WRITE8_HANDLER( dgnbeta_ram_b1_w ); |
| 78 | | static DECLARE_WRITE8_HANDLER( dgnbeta_ram_b2_w ); |
| 79 | | static DECLARE_WRITE8_HANDLER( dgnbeta_ram_b3_w ); |
| 80 | | static DECLARE_WRITE8_HANDLER( dgnbeta_ram_b4_w ); |
| 81 | | static DECLARE_WRITE8_HANDLER( dgnbeta_ram_b5_w ); |
| 82 | | static DECLARE_WRITE8_HANDLER( dgnbeta_ram_b6_w ); |
| 83 | | static DECLARE_WRITE8_HANDLER( dgnbeta_ram_b7_w ); |
| 84 | | static DECLARE_WRITE8_HANDLER( dgnbeta_ram_b8_w ); |
| 85 | | static DECLARE_WRITE8_HANDLER( dgnbeta_ram_b9_w ); |
| 86 | | static DECLARE_WRITE8_HANDLER( dgnbeta_ram_bA_w ); |
| 87 | | static DECLARE_WRITE8_HANDLER( dgnbeta_ram_bB_w ); |
| 88 | | static DECLARE_WRITE8_HANDLER( dgnbeta_ram_bC_w ); |
| 89 | | static DECLARE_WRITE8_HANDLER( dgnbeta_ram_bD_w ); |
| 90 | | static DECLARE_WRITE8_HANDLER( dgnbeta_ram_bE_w ); |
| 91 | | static DECLARE_WRITE8_HANDLER( dgnbeta_ram_bF_w ); |
| 92 | | static DECLARE_WRITE8_HANDLER( dgnbeta_ram_bG_w ); |
| 93 | | |
| 94 | | |
| 95 | 74 | #define VERBOSE 0 |
| 96 | 75 | |
| 97 | 76 | |
| r18061 | r18062 | |
| 209 | 188 | // Info for bank switcher |
| 210 | 189 | struct bank_info_entry |
| 211 | 190 | { |
| 212 | | write8_space_func func; // Pointer to write handler |
| 213 | | const char *name; |
| 191 | write8_delegate func; // Pointer to write handler |
| 214 | 192 | offs_t start; // Offset of start of block |
| 215 | 193 | offs_t end; // offset of end of block |
| 216 | 194 | }; |
| 217 | 195 | |
| 218 | 196 | static const struct bank_info_entry bank_info[] = |
| 219 | 197 | { |
| 220 | | { FUNC(dgnbeta_ram_b0_w), 0x0000, 0x0fff }, |
| 221 | | { FUNC(dgnbeta_ram_b1_w), 0x1000, 0x1fff }, |
| 222 | | { FUNC(dgnbeta_ram_b2_w), 0x2000, 0x2fff }, |
| 223 | | { FUNC(dgnbeta_ram_b3_w), 0x3000, 0x3fff }, |
| 224 | | { FUNC(dgnbeta_ram_b4_w), 0x4000, 0x4fff }, |
| 225 | | { FUNC(dgnbeta_ram_b5_w), 0x5000, 0x5fff }, |
| 226 | | { FUNC(dgnbeta_ram_b6_w), 0x6000, 0x6fff }, |
| 227 | | { FUNC(dgnbeta_ram_b7_w), 0x7000, 0x7fff }, |
| 228 | | { FUNC(dgnbeta_ram_b8_w), 0x8000, 0x8fff }, |
| 229 | | { FUNC(dgnbeta_ram_b9_w), 0x9000, 0x9fff }, |
| 230 | | { FUNC(dgnbeta_ram_bA_w), 0xA000, 0xAfff }, |
| 231 | | { FUNC(dgnbeta_ram_bB_w), 0xB000, 0xBfff }, |
| 232 | | { FUNC(dgnbeta_ram_bC_w), 0xC000, 0xCfff }, |
| 233 | | { FUNC(dgnbeta_ram_bD_w), 0xD000, 0xDfff }, |
| 234 | | { FUNC(dgnbeta_ram_bE_w), 0xE000, 0xEfff }, |
| 235 | | { FUNC(dgnbeta_ram_bF_w), 0xF000, 0xFBff }, |
| 236 | | { FUNC(dgnbeta_ram_bG_w), 0xFF00, 0xFfff } |
| 198 | { write8_delegate(FUNC(dgn_beta_state::dgnbeta_ram_b0_w),(dgn_beta_state*)0), 0x0000, 0x0fff }, |
| 199 | { write8_delegate(FUNC(dgn_beta_state::dgnbeta_ram_b1_w),(dgn_beta_state*)0), 0x1000, 0x1fff }, |
| 200 | { write8_delegate(FUNC(dgn_beta_state::dgnbeta_ram_b2_w),(dgn_beta_state*)0), 0x2000, 0x2fff }, |
| 201 | { write8_delegate(FUNC(dgn_beta_state::dgnbeta_ram_b3_w),(dgn_beta_state*)0), 0x3000, 0x3fff }, |
| 202 | { write8_delegate(FUNC(dgn_beta_state::dgnbeta_ram_b4_w),(dgn_beta_state*)0), 0x4000, 0x4fff }, |
| 203 | { write8_delegate(FUNC(dgn_beta_state::dgnbeta_ram_b5_w),(dgn_beta_state*)0), 0x5000, 0x5fff }, |
| 204 | { write8_delegate(FUNC(dgn_beta_state::dgnbeta_ram_b6_w),(dgn_beta_state*)0), 0x6000, 0x6fff }, |
| 205 | { write8_delegate(FUNC(dgn_beta_state::dgnbeta_ram_b7_w),(dgn_beta_state*)0), 0x7000, 0x7fff }, |
| 206 | { write8_delegate(FUNC(dgn_beta_state::dgnbeta_ram_b8_w),(dgn_beta_state*)0), 0x8000, 0x8fff }, |
| 207 | { write8_delegate(FUNC(dgn_beta_state::dgnbeta_ram_b9_w),(dgn_beta_state*)0), 0x9000, 0x9fff }, |
| 208 | { write8_delegate(FUNC(dgn_beta_state::dgnbeta_ram_bA_w),(dgn_beta_state*)0), 0xA000, 0xAfff }, |
| 209 | { write8_delegate(FUNC(dgn_beta_state::dgnbeta_ram_bB_w),(dgn_beta_state*)0), 0xB000, 0xBfff }, |
| 210 | { write8_delegate(FUNC(dgn_beta_state::dgnbeta_ram_bC_w),(dgn_beta_state*)0), 0xC000, 0xCfff }, |
| 211 | { write8_delegate(FUNC(dgn_beta_state::dgnbeta_ram_bD_w),(dgn_beta_state*)0), 0xD000, 0xDfff }, |
| 212 | { write8_delegate(FUNC(dgn_beta_state::dgnbeta_ram_bE_w),(dgn_beta_state*)0), 0xE000, 0xEfff }, |
| 213 | { write8_delegate(FUNC(dgn_beta_state::dgnbeta_ram_bF_w),(dgn_beta_state*)0), 0xF000, 0xFBff }, |
| 214 | { write8_delegate(FUNC(dgn_beta_state::dgnbeta_ram_bG_w),(dgn_beta_state*)0), 0xFF00, 0xFfff } |
| 237 | 215 | }; |
| 238 | 216 | |
| 239 | 217 | #define is_last_page(page) (((page==LastPage) || (page==LastPage+1)) ? 1 : 0) |
| r18061 | r18062 | |
| 295 | 273 | readbank = &machine.device<ram_device>(RAM_TAG)->pointer()[(MapPage*RamPageSize)-256]; |
| 296 | 274 | logerror("Error RAM in Last page !\n"); |
| 297 | 275 | } |
| 298 | | space_0.install_legacy_write_handler(bank_start, bank_end,bank_info[Page].func,bank_info[Page].name); |
| 299 | | space_1.install_legacy_write_handler(bank_start, bank_end,bank_info[Page].func,bank_info[Page].name); |
| 276 | write8_delegate func = bank_info[Page].func; |
| 277 | if (!func.isnull()) func.late_bind(*state); |
| 278 | space_0.install_write_handler(bank_start, bank_end,bank_info[Page].func); |
| 279 | space_1.install_write_handler(bank_start, bank_end,bank_info[Page].func); |
| 300 | 280 | } |
| 301 | 281 | else // Block is rom, or undefined |
| 302 | 282 | { |
| r18061 | r18062 | |
| 397 | 377 | state->m_PageRegs[state->m_TaskReg][bank].memory[offset]=data; |
| 398 | 378 | } |
| 399 | 379 | |
| 400 | | static WRITE8_HANDLER( dgnbeta_ram_b0_w ) |
| 380 | WRITE8_MEMBER(dgn_beta_state::dgnbeta_ram_b0_w ) |
| 401 | 381 | { |
| 402 | | dgn_beta_bank_memory(space.machine(),offset,data,0); |
| 382 | dgn_beta_bank_memory(machine(),offset,data,0); |
| 403 | 383 | } |
| 404 | 384 | |
| 405 | | static WRITE8_HANDLER( dgnbeta_ram_b1_w ) |
| 385 | WRITE8_MEMBER(dgn_beta_state::dgnbeta_ram_b1_w ) |
| 406 | 386 | { |
| 407 | | dgn_beta_bank_memory(space.machine(),offset,data,1); |
| 387 | dgn_beta_bank_memory(machine(),offset,data,1); |
| 408 | 388 | } |
| 409 | 389 | |
| 410 | | static WRITE8_HANDLER( dgnbeta_ram_b2_w ) |
| 390 | WRITE8_MEMBER(dgn_beta_state::dgnbeta_ram_b2_w ) |
| 411 | 391 | { |
| 412 | | dgn_beta_bank_memory(space.machine(),offset,data,2); |
| 392 | dgn_beta_bank_memory(machine(),offset,data,2); |
| 413 | 393 | } |
| 414 | 394 | |
| 415 | | static WRITE8_HANDLER( dgnbeta_ram_b3_w ) |
| 395 | WRITE8_MEMBER(dgn_beta_state::dgnbeta_ram_b3_w ) |
| 416 | 396 | { |
| 417 | | dgn_beta_bank_memory(space.machine(),offset,data,3); |
| 397 | dgn_beta_bank_memory(machine(),offset,data,3); |
| 418 | 398 | } |
| 419 | 399 | |
| 420 | | static WRITE8_HANDLER( dgnbeta_ram_b4_w ) |
| 400 | WRITE8_MEMBER(dgn_beta_state::dgnbeta_ram_b4_w ) |
| 421 | 401 | { |
| 422 | | dgn_beta_bank_memory(space.machine(),offset,data,4); |
| 402 | dgn_beta_bank_memory(machine(),offset,data,4); |
| 423 | 403 | } |
| 424 | 404 | |
| 425 | | static WRITE8_HANDLER( dgnbeta_ram_b5_w ) |
| 405 | WRITE8_MEMBER(dgn_beta_state::dgnbeta_ram_b5_w ) |
| 426 | 406 | { |
| 427 | | dgn_beta_bank_memory(space.machine(),offset,data,5); |
| 407 | dgn_beta_bank_memory(machine(),offset,data,5); |
| 428 | 408 | } |
| 429 | 409 | |
| 430 | | static WRITE8_HANDLER( dgnbeta_ram_b6_w ) |
| 410 | WRITE8_MEMBER(dgn_beta_state::dgnbeta_ram_b6_w ) |
| 431 | 411 | { |
| 432 | | dgn_beta_bank_memory(space.machine(),offset,data,6); |
| 412 | dgn_beta_bank_memory(machine(),offset,data,6); |
| 433 | 413 | } |
| 434 | 414 | |
| 435 | | static WRITE8_HANDLER( dgnbeta_ram_b7_w ) |
| 415 | WRITE8_MEMBER(dgn_beta_state::dgnbeta_ram_b7_w ) |
| 436 | 416 | { |
| 437 | | dgn_beta_bank_memory(space.machine(),offset,data,7); |
| 417 | dgn_beta_bank_memory(machine(),offset,data,7); |
| 438 | 418 | } |
| 439 | 419 | |
| 440 | | static WRITE8_HANDLER( dgnbeta_ram_b8_w ) |
| 420 | WRITE8_MEMBER(dgn_beta_state::dgnbeta_ram_b8_w ) |
| 441 | 421 | { |
| 442 | | dgn_beta_bank_memory(space.machine(),offset,data,8); |
| 422 | dgn_beta_bank_memory(machine(),offset,data,8); |
| 443 | 423 | } |
| 444 | 424 | |
| 445 | | static WRITE8_HANDLER( dgnbeta_ram_b9_w ) |
| 425 | WRITE8_MEMBER(dgn_beta_state::dgnbeta_ram_b9_w ) |
| 446 | 426 | { |
| 447 | | dgn_beta_bank_memory(space.machine(),offset,data,9); |
| 427 | dgn_beta_bank_memory(machine(),offset,data,9); |
| 448 | 428 | } |
| 449 | 429 | |
| 450 | | static WRITE8_HANDLER( dgnbeta_ram_bA_w ) |
| 430 | WRITE8_MEMBER(dgn_beta_state::dgnbeta_ram_bA_w ) |
| 451 | 431 | { |
| 452 | | dgn_beta_bank_memory(space.machine(),offset,data,10); |
| 432 | dgn_beta_bank_memory(machine(),offset,data,10); |
| 453 | 433 | } |
| 454 | 434 | |
| 455 | | static WRITE8_HANDLER( dgnbeta_ram_bB_w ) |
| 435 | WRITE8_MEMBER(dgn_beta_state::dgnbeta_ram_bB_w ) |
| 456 | 436 | { |
| 457 | | dgn_beta_bank_memory(space.machine(),offset,data,11); |
| 437 | dgn_beta_bank_memory(machine(),offset,data,11); |
| 458 | 438 | } |
| 459 | 439 | |
| 460 | | static WRITE8_HANDLER( dgnbeta_ram_bC_w ) |
| 440 | WRITE8_MEMBER(dgn_beta_state::dgnbeta_ram_bC_w ) |
| 461 | 441 | { |
| 462 | | dgn_beta_bank_memory(space.machine(),offset,data,12); |
| 442 | dgn_beta_bank_memory(machine(),offset,data,12); |
| 463 | 443 | } |
| 464 | 444 | |
| 465 | | static WRITE8_HANDLER( dgnbeta_ram_bD_w ) |
| 445 | WRITE8_MEMBER(dgn_beta_state::dgnbeta_ram_bD_w ) |
| 466 | 446 | { |
| 467 | | dgn_beta_bank_memory(space.machine(),offset,data,13); |
| 447 | dgn_beta_bank_memory(machine(),offset,data,13); |
| 468 | 448 | } |
| 469 | 449 | |
| 470 | | static WRITE8_HANDLER( dgnbeta_ram_bE_w ) |
| 450 | WRITE8_MEMBER(dgn_beta_state::dgnbeta_ram_bE_w ) |
| 471 | 451 | { |
| 472 | | dgn_beta_bank_memory(space.machine(),offset,data,14); |
| 452 | dgn_beta_bank_memory(machine(),offset,data,14); |
| 473 | 453 | } |
| 474 | 454 | |
| 475 | | static WRITE8_HANDLER( dgnbeta_ram_bF_w ) |
| 455 | WRITE8_MEMBER(dgn_beta_state::dgnbeta_ram_bF_w ) |
| 476 | 456 | { |
| 477 | | dgn_beta_bank_memory(space.machine(),offset,data,15); |
| 457 | dgn_beta_bank_memory(machine(),offset,data,15); |
| 478 | 458 | } |
| 479 | 459 | |
| 480 | | static WRITE8_HANDLER( dgnbeta_ram_bG_w ) |
| 460 | WRITE8_MEMBER(dgn_beta_state::dgnbeta_ram_bG_w ) |
| 481 | 461 | { |
| 482 | | dgn_beta_bank_memory(space.machine(),offset,data,16); |
| 462 | dgn_beta_bank_memory(machine(),offset,data,16); |
| 483 | 463 | } |
| 484 | 464 | |
| 485 | 465 | /* |