src/mess/machine/68901mfp.c
| r798 | r799 | |
| 106 | 106 | {
|
| 107 | 107 | mfp_68901 *mfp_p = &mfp[which];
|
| 108 | 108 | |
| 109 | logerror("MFP68901 read register %u\n", reg);
|
| 110 | |
| 109 | 111 | switch (reg)
|
| 110 | 112 | {
|
| 111 | | case 0x00:
|
| 113 | case MFP68901_REGISTER_GPIP:
|
| 112 | 114 | {
|
| 113 | 115 | UINT8 gpio = 0;
|
| 114 | 116 | |
| r798 | r799 | |
| 123 | 125 | mfp68901_irq_ack(which);
|
| 124 | 126 | return gpio;
|
| 125 | 127 | }
|
| 126 | | case 0x01: return mfp_p->aer;
|
| 127 | | case 0x02: return mfp_p->ddr;
|
| 128 | | case 0x03: return mfp_p->iera;
|
| 129 | | case 0x04: return mfp_p->ierb;
|
| 130 | | case 0x05: return mfp_p->ipra;
|
| 131 | | case 0x06: return mfp_p->iprb;
|
| 132 | | case 0x07: return mfp_p->isra;
|
| 133 | | case 0x08: return mfp_p->isrb;
|
| 134 | | case 0x09: return mfp_p->imra;
|
| 135 | | case 0x0a: return mfp_p->imrb;
|
| 136 | | case 0x0b: return mfp_p->vr;
|
| 137 | | case 0x0c: return mfp_p->tacr;
|
| 138 | | case 0x0d: return mfp_p->tbcr;
|
| 139 | | case 0x0e: return mfp_p->tcdcr;
|
| 140 | | case 0x0f: return mfp_p->tarr;
|
| 141 | | case 0x10: return mfp_p->tbrr;
|
| 142 | | case 0x11: return mfp_p->tcrr;
|
| 143 | | case 0x12: return mfp_p->tdrr;
|
| 144 | | case 0x13: return mfp_p->scr;
|
| 145 | | case 0x14: return mfp_p->ucr;
|
| 146 | | case 0x15: return mfp_p->rsr;
|
| 147 | | case 0x16: return mfp_p->tsr;
|
| 148 | | case 0x17: return mfp_p->udr;
|
| 149 | | default: return 0;
|
| 128 | case MFP68901_REGISTER_AER: return mfp_p->aer;
|
| 129 | case MFP68901_REGISTER_DDR: return mfp_p->ddr;
|
| 130 | |
| 131 | case MFP68901_REGISTER_IERA: return mfp_p->iera;
|
| 132 | case MFP68901_REGISTER_IERB: return mfp_p->ierb;
|
| 133 | case MFP68901_REGISTER_IPRA: return mfp_p->ipra;
|
| 134 | case MFP68901_REGISTER_IPRB: return mfp_p->iprb;
|
| 135 | case MFP68901_REGISTER_ISRA: return mfp_p->isra;
|
| 136 | case MFP68901_REGISTER_ISRB: return mfp_p->isrb;
|
| 137 | case MFP68901_REGISTER_IMRA: return mfp_p->imra;
|
| 138 | case MFP68901_REGISTER_IMRB: return mfp_p->imrb;
|
| 139 | case MFP68901_REGISTER_VR: return mfp_p->vr;
|
| 140 | |
| 141 | case MFP68901_REGISTER_TACR: return mfp_p->tacr;
|
| 142 | case MFP68901_REGISTER_TBCR: return mfp_p->tbcr;
|
| 143 | case MFP68901_REGISTER_TCDCR: return mfp_p->tcdcr;
|
| 144 | case MFP68901_REGISTER_TADR:
|
| 145 | return mfp_p->tarr;
|
| 146 | case MFP68901_REGISTER_TBDR: |
| 147 | return mfp_p->tbrr;
|
| 148 | case MFP68901_REGISTER_TCDR: return mfp_p->tcrr;
|
| 149 | case MFP68901_REGISTER_TDDR: return mfp_p->tdrr;
|
| 150 | |
| 151 | case MFP68901_REGISTER_SCR: return mfp_p->scr;
|
| 152 | case MFP68901_REGISTER_UCR: return mfp_p->ucr;
|
| 153 | case MFP68901_REGISTER_RSR: return mfp_p->rsr;
|
| 154 | case MFP68901_REGISTER_TSR: return mfp_p->tsr;
|
| 155 | case MFP68901_REGISTER_UDR: return mfp_p->udr;
|
| 156 | default:
|
| 157 | return 0;
|
| 150 | 158 | }
|
| 151 | 159 | }
|
| 152 | 160 | |
| r798 | r799 | |
| 235 | 243 | switch (mfp_p->tacr & 0x0f)
|
| 236 | 244 | {
|
| 237 | 245 | case MFP68901_TCR_TIMER_DELAY_4:
|
| 238 | | mame_timer_adjust(mfp_p->timer_a, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 4));
|
| 246 | mame_timer_adjust(mfp_p->timer_a, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 4));
|
| 239 | 247 | break;
|
| 240 | 248 | case MFP68901_TCR_TIMER_DELAY_10:
|
| 241 | | mame_timer_adjust(mfp_p->timer_a, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 10));
|
| 249 | mame_timer_adjust(mfp_p->timer_a, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 10));
|
| 242 | 250 | break;
|
| 243 | 251 | case MFP68901_TCR_TIMER_DELAY_16:
|
| 244 | | mame_timer_adjust(mfp_p->timer_a, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 16));
|
| 252 | mame_timer_adjust(mfp_p->timer_a, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 16));
|
| 245 | 253 | break;
|
| 246 | 254 | case MFP68901_TCR_TIMER_DELAY_50:
|
| 247 | | mame_timer_adjust(mfp_p->timer_a, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 50));
|
| 255 | mame_timer_adjust(mfp_p->timer_a, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 50));
|
| 248 | 256 | break;
|
| 249 | 257 | case MFP68901_TCR_TIMER_DELAY_64:
|
| 250 | | mame_timer_adjust(mfp_p->timer_a, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 64));
|
| 258 | mame_timer_adjust(mfp_p->timer_a, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 64));
|
| 251 | 259 | break;
|
| 252 | 260 | case MFP68901_TCR_TIMER_DELAY_100:
|
| 253 | | mame_timer_adjust(mfp_p->timer_a, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 100));
|
| 261 | mame_timer_adjust(mfp_p->timer_a, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 100));
|
| 254 | 262 | break;
|
| 255 | 263 | case MFP68901_TCR_TIMER_DELAY_200:
|
| 256 | | mame_timer_adjust(mfp_p->timer_a, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 200));
|
| 264 | mame_timer_adjust(mfp_p->timer_a, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 200));
|
| 257 | 265 | break;
|
| 258 | 266 | case MFP68901_TCR_TIMER_STOPPED:
|
| 259 | 267 | case MFP68901_TCR_TIMER_EVENT:
|
| r798 | r799 | |
| 285 | 293 | switch (mfp_p->tbcr & 0x0f)
|
| 286 | 294 | {
|
| 287 | 295 | case MFP68901_TCR_TIMER_DELAY_4:
|
| 288 | | mame_timer_adjust(mfp_p->timer_b, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 4));
|
| 296 | mame_timer_adjust(mfp_p->timer_b, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 4));
|
| 289 | 297 | break;
|
| 290 | 298 | case MFP68901_TCR_TIMER_DELAY_10:
|
| 291 | | mame_timer_adjust(mfp_p->timer_b, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 10));
|
| 299 | mame_timer_adjust(mfp_p->timer_b, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 10));
|
| 292 | 300 | break;
|
| 293 | 301 | case MFP68901_TCR_TIMER_DELAY_16:
|
| 294 | | mame_timer_adjust(mfp_p->timer_b, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 16));
|
| 302 | mame_timer_adjust(mfp_p->timer_b, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 16));
|
| 295 | 303 | break;
|
| 296 | 304 | case MFP68901_TCR_TIMER_DELAY_50:
|
| 297 | | mame_timer_adjust(mfp_p->timer_b, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 50));
|
| 305 | mame_timer_adjust(mfp_p->timer_b, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 50));
|
| 298 | 306 | break;
|
| 299 | 307 | case MFP68901_TCR_TIMER_DELAY_64:
|
| 300 | | mame_timer_adjust(mfp_p->timer_b, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 64));
|
| 308 | mame_timer_adjust(mfp_p->timer_b, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 64));
|
| 301 | 309 | break;
|
| 302 | 310 | case MFP68901_TCR_TIMER_DELAY_100:
|
| 303 | | mame_timer_adjust(mfp_p->timer_b, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 100));
|
| 311 | mame_timer_adjust(mfp_p->timer_b, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 100));
|
| 304 | 312 | break;
|
| 305 | 313 | case MFP68901_TCR_TIMER_DELAY_200:
|
| 306 | | mame_timer_adjust(mfp_p->timer_b, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 200));
|
| 314 | mame_timer_adjust(mfp_p->timer_b, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 200));
|
| 307 | 315 | break;
|
| 308 | 316 | case MFP68901_TCR_TIMER_STOPPED:
|
| 309 | 317 | case MFP68901_TCR_TIMER_EVENT:
|
| r798 | r799 | |
| 335 | 343 | switch (mfp_p->tcdcr & 0x07)
|
| 336 | 344 | {
|
| 337 | 345 | case MFP68901_TCR_TIMER_DELAY_4:
|
| 338 | | mame_timer_adjust(mfp_p->timer_d, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 4));
|
| 346 | mame_timer_adjust(mfp_p->timer_d, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 4));
|
| 339 | 347 | break;
|
| 340 | 348 | case MFP68901_TCR_TIMER_DELAY_10:
|
| 341 | | mame_timer_adjust(mfp_p->timer_d, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 10));
|
| 349 | mame_timer_adjust(mfp_p->timer_d, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 10));
|
| 342 | 350 | break;
|
| 343 | 351 | case MFP68901_TCR_TIMER_DELAY_16:
|
| 344 | | mame_timer_adjust(mfp_p->timer_d, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 16));
|
| 352 | mame_timer_adjust(mfp_p->timer_d, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 16));
|
| 345 | 353 | break;
|
| 346 | 354 | case MFP68901_TCR_TIMER_DELAY_50:
|
| 347 | | mame_timer_adjust(mfp_p->timer_d, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 50));
|
| 355 | mame_timer_adjust(mfp_p->timer_d, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 50));
|
| 348 | 356 | break;
|
| 349 | 357 | case MFP68901_TCR_TIMER_DELAY_64:
|
| 350 | | mame_timer_adjust(mfp_p->timer_d, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 64));
|
| 358 | mame_timer_adjust(mfp_p->timer_d, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 64));
|
| 351 | 359 | break;
|
| 352 | 360 | case MFP68901_TCR_TIMER_DELAY_100:
|
| 353 | | mame_timer_adjust(mfp_p->timer_d, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 100));
|
| 361 | mame_timer_adjust(mfp_p->timer_d, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 100));
|
| 354 | 362 | break;
|
| 355 | 363 | case MFP68901_TCR_TIMER_DELAY_200:
|
| 356 | | mame_timer_adjust(mfp_p->timer_d, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 200));
|
| 364 | mame_timer_adjust(mfp_p->timer_d, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 200));
|
| 357 | 365 | break;
|
| 358 | 366 | case MFP68901_TCR_TIMER_STOPPED:
|
| 359 | 367 | mame_timer_enable(mfp_p->timer_d, 0);
|
| r798 | r799 | |
| 363 | 371 | switch ((mfp_p->tcdcr >> 4) & 0x07)
|
| 364 | 372 | {
|
| 365 | 373 | case MFP68901_TCR_TIMER_DELAY_4:
|
| 366 | | mame_timer_adjust(mfp_p->timer_c, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 4));
|
| 374 | mame_timer_adjust(mfp_p->timer_c, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 4));
|
| 367 | 375 | break;
|
| 368 | 376 | case MFP68901_TCR_TIMER_DELAY_10:
|
| 369 | | mame_timer_adjust(mfp_p->timer_c, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 10));
|
| 377 | mame_timer_adjust(mfp_p->timer_c, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 10));
|
| 370 | 378 | break;
|
| 371 | 379 | case MFP68901_TCR_TIMER_DELAY_16:
|
| 372 | | mame_timer_adjust(mfp_p->timer_c, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 16));
|
| 380 | mame_timer_adjust(mfp_p->timer_c, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 16));
|
| 373 | 381 | break;
|
| 374 | 382 | case MFP68901_TCR_TIMER_DELAY_50:
|
| 375 | | mame_timer_adjust(mfp_p->timer_c, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 50));
|
| 383 | mame_timer_adjust(mfp_p->timer_c, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 50));
|
| 376 | 384 | break;
|
| 377 | 385 | case MFP68901_TCR_TIMER_DELAY_64:
|
| 378 | | mame_timer_adjust(mfp_p->timer_c, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 64));
|
| 386 | mame_timer_adjust(mfp_p->timer_c, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 64));
|
| 379 | 387 | break;
|
| 380 | 388 | case MFP68901_TCR_TIMER_DELAY_100:
|
| 381 | | mame_timer_adjust(mfp_p->timer_c, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 100));
|
| 389 | mame_timer_adjust(mfp_p->timer_c, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 100));
|
| 382 | 390 | break;
|
| 383 | 391 | case MFP68901_TCR_TIMER_DELAY_200:
|
| 384 | | mame_timer_adjust(mfp_p->timer_c, time_zero, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 200));
|
| 392 | mame_timer_adjust(mfp_p->timer_c, time_never, 0, MAME_TIME_IN_HZ(mfp_p->timer_clock / 200));
|
| 385 | 393 | break;
|
| 386 | 394 | case MFP68901_TCR_TIMER_STOPPED:
|
| 387 | 395 | mame_timer_enable(mfp_p->timer_c, 0);
|
| r798 | r799 | |
| 526 | 534 | |
| 527 | 535 | if (mfp_p->imra & 0x20)
|
| 528 | 536 | {
|
| 529 | | mfp68901_irq_ack(which);
|
| 530 | | |
| 537 | //mfp68901_irq_ack(which);
|
| 538 | mfp_p->irq_callback(which, ASSERT_LINE, (mfp_p->vr & 0xf0) | MFP68901_INT_TIMER_A);
|
| 539 | |
| 531 | 540 | if (mfp_p->tao)
|
| 532 | 541 | {
|
| 533 | 542 | mfp_p->tao = 0;
|
| r798 | r799 | |
| 564 | 573 | |
| 565 | 574 | if (mfp_p->imra & 0x01)
|
| 566 | 575 | {
|
| 567 | | mfp68901_irq_ack(which);
|
| 576 | //mfp68901_irq_ack(which);
|
| 577 | mfp_p->irq_callback(which, ASSERT_LINE, (mfp_p->vr & 0xf0) | MFP68901_INT_TIMER_B);
|
| 568 | 578 | |
| 569 | 579 | if (mfp_p->tbo)
|
| 570 | 580 | {
|
| r798 | r799 | |
| 602 | 612 | |
| 603 | 613 | if (mfp_p->imrb & 0x20)
|
| 604 | 614 | {
|
| 605 | | mfp68901_irq_ack(which);
|
| 615 | //mfp68901_irq_ack(which);
|
| 616 | mfp_p->irq_callback(which, ASSERT_LINE, (mfp_p->vr & 0xf0) | MFP68901_INT_TIMER_C);
|
| 606 | 617 | |
| 607 | 618 | if (mfp_p->tco)
|
| 608 | 619 | {
|
| r798 | r799 | |
| 640 | 651 | |
| 641 | 652 | if (mfp_p->imrb & 0x01)
|
| 642 | 653 | {
|
| 643 | | mfp68901_irq_ack(which);
|
| 654 | //mfp68901_irq_ack(which);
|
| 655 | mfp_p->irq_callback(which, ASSERT_LINE, (mfp_p->vr & 0xf0) | MFP68901_INT_TIMER_D);
|
| 644 | 656 | |
| 645 | 657 | if (mfp_p->tdo)
|
| 646 | 658 | {
|
| r798 | r799 | |
| 688 | 700 | // count down on 0->1 transition
|
| 689 | 701 | if (mfp_p->tai == 0 && value == 1)
|
| 690 | 702 | {
|
| 691 | | mfp_p->tai = value;
|
| 692 | 703 | mfp68901_timer_count_a(which);
|
| 693 | 704 | }
|
| 694 | 705 | }
|
| r798 | r799 | |
| 697 | 708 | // count down on 1->0 transition
|
| 698 | 709 | if (mfp_p->tai == 1 && value == 0)
|
| 699 | 710 | {
|
| 700 | | mfp_p->tai = value;
|
| 701 | 711 | mfp68901_timer_count_a(which);
|
| 702 | 712 | }
|
| 703 | 713 | }
|
| 714 | |
| 715 | mfp_p->tai = value;
|
| 704 | 716 | break;
|
| 705 | 717 | |
| 706 | 718 | case MFP68901_TCR_TIMER_PULSE_4:
|
| r798 | r799 | |
| 738 | 750 | // count down on 0->1 transition
|
| 739 | 751 | if (mfp_p->tbi == 0 && value == 1)
|
| 740 | 752 | {
|
| 741 | | mfp_p->tbi = value;
|
| 742 | 753 | mfp68901_timer_count_b(which);
|
| 743 | 754 | }
|
| 744 | 755 | }
|
| r798 | r799 | |
| 747 | 758 | // count down on 1->0 transition
|
| 748 | 759 | if (mfp_p->tbi == 1 && value == 0)
|
| 749 | 760 | {
|
| 750 | | mfp_p->tbi = value;
|
| 751 | 761 | mfp68901_timer_count_b(which);
|
| 752 | 762 | }
|
| 753 | 763 | }
|
| 764 | |
| 765 | mfp_p->tbi = value;
|
| 754 | 766 | break;
|
| 755 | 767 | |
| 756 | 768 | case MFP68901_TCR_TIMER_PULSE_4:
|
| r798 | r799 | |
| 794 | 806 | mfp68901_timer_count_d(which);
|
| 795 | 807 | }
|
| 796 | 808 | |
| 797 | | READ16_HANDLER( mfp68901_0_register16_r ) { return mfp68901_register_r(0, offset / 2); }
|
| 798 | | READ16_HANDLER( mfp68901_1_register16_r ) { return mfp68901_register_r(1, offset / 2); }
|
| 799 | | READ16_HANDLER( mfp68901_2_register16_r ) { return mfp68901_register_r(2, offset / 2); }
|
| 800 | | READ16_HANDLER( mfp68901_3_register16_r ) { return mfp68901_register_r(3, offset / 2); }
|
| 809 | READ16_HANDLER( mfp68901_0_register16_r ) { return mfp68901_register_r(0, offset); }
|
| 810 | READ16_HANDLER( mfp68901_1_register16_r ) { return mfp68901_register_r(1, offset); }
|
| 811 | READ16_HANDLER( mfp68901_2_register16_r ) { return mfp68901_register_r(2, offset); }
|
| 812 | READ16_HANDLER( mfp68901_3_register16_r ) { return mfp68901_register_r(3, offset); }
|
| 801 | 813 | |
| 802 | | WRITE16_HANDLER( mfp68901_0_register_msb_w ) { if (ACCESSING_MSB) mfp68901_register_w(0, offset / 2, (data >> 8) & 0xff); }
|
| 803 | | WRITE16_HANDLER( mfp68901_1_register_msb_w ) { if (ACCESSING_MSB) mfp68901_register_w(0, offset / 2, (data >> 8) & 0xff); }
|
| 804 | | WRITE16_HANDLER( mfp68901_2_register_msb_w ) { if (ACCESSING_MSB) mfp68901_register_w(0, offset / 2, (data >> 8) & 0xff); }
|
| 805 | | WRITE16_HANDLER( mfp68901_3_register_msb_w ) { if (ACCESSING_MSB) mfp68901_register_w(0, offset / 2, (data >> 8) & 0xff); }
|
| 814 | WRITE16_HANDLER( mfp68901_0_register_msb_w ) { if (ACCESSING_MSB) mfp68901_register_w(0, offset, (data >> 8) & 0xff); }
|
| 815 | WRITE16_HANDLER( mfp68901_1_register_msb_w ) { if (ACCESSING_MSB) mfp68901_register_w(0, offset, (data >> 8) & 0xff); }
|
| 816 | WRITE16_HANDLER( mfp68901_2_register_msb_w ) { if (ACCESSING_MSB) mfp68901_register_w(0, offset, (data >> 8) & 0xff); }
|
| 817 | WRITE16_HANDLER( mfp68901_3_register_msb_w ) { if (ACCESSING_MSB) mfp68901_register_w(0, offset, (data >> 8) & 0xff); }
|
| 806 | 818 | |
| 807 | | WRITE16_HANDLER( mfp68901_0_register_lsb_w ) { if (ACCESSING_LSB) mfp68901_register_w(0, offset / 2, data & 0xff); }
|
| 808 | | WRITE16_HANDLER( mfp68901_1_register_lsb_w ) { if (ACCESSING_LSB) mfp68901_register_w(0, offset / 2, data & 0xff); }
|
| 809 | | WRITE16_HANDLER( mfp68901_2_register_lsb_w ) { if (ACCESSING_LSB) mfp68901_register_w(0, offset / 2, data & 0xff); }
|
| 810 | | WRITE16_HANDLER( mfp68901_3_register_lsb_w ) { if (ACCESSING_LSB) mfp68901_register_w(0, offset / 2, data & 0xff); }
|
| 819 | WRITE16_HANDLER( mfp68901_0_register_lsb_w ) { if (ACCESSING_LSB) mfp68901_register_w(0, offset, data & 0xff); }
|
| 820 | WRITE16_HANDLER( mfp68901_1_register_lsb_w ) { if (ACCESSING_LSB) mfp68901_register_w(0, offset, data & 0xff); }
|
| 821 | WRITE16_HANDLER( mfp68901_2_register_lsb_w ) { if (ACCESSING_LSB) mfp68901_register_w(0, offset, data & 0xff); }
|
| 822 | WRITE16_HANDLER( mfp68901_3_register_lsb_w ) { if (ACCESSING_LSB) mfp68901_register_w(0, offset, data & 0xff); }
|
src/mess/drivers/atarist.c
| r798 | r799 | |
| 26 | 26 | - connect ikbd to ACIA #0 |
| 27 | 27 | - floppy image device_load |
| 28 | 28 | - MFP interrupts |
| 29 | | - MMU banking |
| 30 | 29 | - accurate screen timing |
| 31 | 30 | - fdc.dma_int ? |
| 32 | 31 | - save states |
| 33 | 32 | - Mega ST real time clock |
| 34 | 33 | - mirror 8 first bytes of ROM inside romdef |
| 34 | - memory shadow |
| 35 | 35 | |
| 36 | 36 | */ |
| 37 | 37 | |
| r798 | r799 | |
| 258 | 258 | |
| 259 | 259 | bit description |
| 260 | 260 | |
| 261 | | 0 JOY 1-5 |
| 261 | 0 JOY 1-5 output |
| 262 | 262 | 1 JOY 0-6 |
| 263 | 263 | 2 JOY 1-6 |
| 264 | 264 | 3 SD FROM CPU |
| r798 | r799 | |
| 324 | 324 | ADDRESS_MAP_END |
| 325 | 325 | |
| 326 | 326 | static ADDRESS_MAP_START(keyboard_io_map, ADDRESS_SPACE_IO, 8) |
| 327 | | AM_RANGE(HD63701_PORT1, HD63701_PORT1) AM_WRITE(hd6301_port1_w) |
| 327 | /* AM_RANGE(HD63701_PORT1, HD63701_PORT1) AM_WRITE(hd6301_port1_w) |
| 328 | 328 | AM_RANGE(HD63701_PORT2, HD63701_PORT2) AM_READWRITE(hd6301_port2_r, hd6301_port2_w) |
| 329 | 329 | AM_RANGE(HD63701_PORT3, HD63701_PORT3) AM_READ(hd6301_port_3_r) |
| 330 | | AM_RANGE(HD63701_PORT4, HD63701_PORT4) AM_READ(hd6301_port_4_r) |
| 330 | AM_RANGE(HD63701_PORT4, HD63701_PORT4) AM_READ(hd6301_port_4_r)*/ |
| 331 | 331 | ADDRESS_MAP_END |
| 332 | 332 | |
| 333 | 333 | static ADDRESS_MAP_START(st_map, ADDRESS_SPACE_PROGRAM, 16) |
| r798 | r799 | |
| 341 | 341 | AM_RANGE(0xff8600, 0xff860f) AM_READWRITE(atarist_fdc_r, atarist_fdc_w) |
| 342 | 342 | AM_RANGE(0xff8800, 0xff8801) AM_READWRITE(AY8910_read_port_0_msb_r, AY8910_control_port_0_msb_w) |
| 343 | 343 | AM_RANGE(0xff8802, 0xff8803) AM_WRITE(AY8910_write_port_0_msb_w) |
| 344 | | AM_RANGE(0xfffa00, 0xfffa3f) AM_READWRITE(mfp68901_0_register16_r, mfp68901_0_register_lsb_w) |
| 344 | AM_RANGE(0xfffa00, 0xfffa2f) AM_READWRITE(mfp68901_0_register16_r, mfp68901_0_register_lsb_w) |
| 345 | 345 | AM_RANGE(0xfffc00, 0xfffc01) AM_READWRITE(acia6850_0_stat_msb_r, acia6850_0_ctrl_msb_w) |
| 346 | 346 | AM_RANGE(0xfffc02, 0xfffc03) AM_READWRITE(acia6850_0_data_msb_r, acia6850_0_data_msb_w) |
| 347 | 347 | AM_RANGE(0xfffc04, 0xfffc05) AM_READWRITE(acia6850_1_stat_msb_r, acia6850_1_ctrl_msb_w) |
| r798 | r799 | |
| 498 | 498 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad +") PORT_CODE(KEYCODE_PLUS_PAD) |
| 499 | 499 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 3") PORT_CODE(KEYCODE_3_PAD) |
| 500 | 500 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad Enter") PORT_CODE(KEYCODE_ENTER_PAD) |
| 501 | |
| 502 | PORT_START_TAG("JOY0") |
| 503 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1) PORT_8WAY // XB |
| 504 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) PORT_8WAY // XA |
| 505 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) PORT_8WAY // YA |
| 506 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) PORT_8WAY // YB |
| 507 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_8WAY |
| 508 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_8WAY |
| 509 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_8WAY |
| 510 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_8WAY |
| 511 | |
| 512 | PORT_START_TAG("JOY1") |
| 513 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) |
| 514 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) |
| 515 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) |
| 516 | |
| 517 | PORT_START_TAG("MOUSE_X") |
| 518 | PORT_BIT( 0xff, 0x00, IPT_MOUSE_X ) PORT_SENSITIVITY(100) PORT_KEYDELTA(5) PORT_MINMAX(0, 255) PORT_PLAYER(1) |
| 519 | |
| 520 | PORT_START_TAG("MOUSE_Y") |
| 521 | PORT_BIT( 0xff, 0x00, IPT_MOUSE_Y ) PORT_SENSITIVITY(100) PORT_KEYDELTA(5) PORT_MINMAX(0, 255) PORT_PLAYER(1) |
| 501 | 522 | INPUT_PORTS_END |
| 502 | 523 | |
| 503 | 524 | INPUT_PORTS_START( atarist ) |
| r798 | r799 | |
| 509 | 530 | PORT_CONFSETTING( 0x00, "Monochrome" ) |
| 510 | 531 | PORT_CONFSETTING( 0x80, "Color" ) |
| 511 | 532 | |
| 512 | | PORT_START_TAG("MOUSE_X") |
| 513 | | PORT_BIT( 0xff, 0x00, IPT_MOUSE_X) PORT_SENSITIVITY(100) PORT_KEYDELTA(5) PORT_MINMAX(0, 255) PORT_PLAYER(1) |
| 514 | | |
| 515 | | PORT_START_TAG("MOUSE_Y") |
| 516 | | PORT_BIT( 0xff, 0x00, IPT_MOUSE_Y) PORT_SENSITIVITY(100) PORT_KEYDELTA(5) PORT_MINMAX(0, 255) PORT_PLAYER(1) |
| 517 | | |
| 518 | | PORT_START_TAG("MOUSE_BUTTONS") |
| 519 | | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) |
| 520 | | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) |
| 521 | | |
| 522 | | PORT_START_TAG("JOY0") |
| 523 | | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_8WAY |
| 524 | | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_8WAY |
| 525 | | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_8WAY |
| 526 | | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_8WAY |
| 527 | | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 528 | | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 529 | | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 530 | | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) |
| 531 | | |
| 532 | | PORT_START_TAG("JOY1") |
| 533 | | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1) PORT_8WAY |
| 534 | | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) PORT_8WAY |
| 535 | | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) PORT_8WAY |
| 536 | | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) PORT_8WAY |
| 537 | | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 538 | | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 539 | | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 540 | | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) |
| 541 | | |
| 542 | 533 | PORT_INCLUDE( ikbd ) |
| 543 | 534 | INPUT_PORTS_END |
| 544 | 535 | |
| r798 | r799 | |
| 811 | 802 | ROM_START( atarist ) |
| 812 | 803 | ROM_REGION16_BE( 0x1000000, REGION_CPU1, 0 ) |
| 813 | 804 | ROM_SYSTEM_BIOS( 0, "tos100", "TOS 1.0 (ROM TOS)" ) |
| 814 | | ROMX_LOAD( "tos100.img", 0xfc0000, 0x030000, BAD_DUMP CRC(d331af30) SHA1(7bcc2311d122f451bd03c9763ade5a119b2f90da), ROM_BIOS(1) ) // this is a US rom |
| 805 | ROMX_LOAD( "tos100.img", 0xfc0000, 0x030000, BAD_DUMP CRC(16e3e979), ROM_BIOS(1) ) // this is a German rom |
| 815 | 806 | ROM_SYSTEM_BIOS( 1, "tos102", "TOS 1.02 (MEGA TOS)" ) |
| 816 | 807 | ROMX_LOAD( "tos102.img", 0xfc0000, 0x030000, BAD_DUMP CRC(3b5cd0c5) SHA1(87900a40a890fdf03bd08be6c60cc645855cbce5), ROM_BIOS(2) ) |
| 817 | 808 | ROM_SYSTEM_BIOS( 2, "tos104", "TOS 1.04 (Rainbow TOS)" ) |