src/mess/video/pc_aga.c
| r11579 | r11580 | |
| 489 | 489 | UINT8 data = 0xFF; |
| 490 | 490 | |
| 491 | 491 | if ( aga.mode == AGA_MONO ) { |
| 492 | | device_t *devconf = space->machine().device(AGA_MC6845_NAME); |
| 492 | mc6845_device *mc6845 = space->machine().device<mc6845_device>(AGA_MC6845_NAME); |
| 493 | 493 | switch( offset ) |
| 494 | 494 | { |
| 495 | 495 | case 0: case 2: case 4: case 6: |
| 496 | 496 | /* return last written mc6845 address value here? */ |
| 497 | 497 | break; |
| 498 | 498 | case 1: case 3: case 5: case 7: |
| 499 | | data = mc6845_register_r( devconf, offset ); |
| 499 | data = mc6845->register_r(*space, offset); |
| 500 | 500 | break; |
| 501 | 501 | case 10: |
| 502 | 502 | data = (input_port_read(space->machine(), "IN0") & 0x80 ) | 0x08 | aga.mda_status; |
| r11579 | r11580 | |
| 511 | 511 | static WRITE8_HANDLER ( pc_aga_mda_w ) |
| 512 | 512 | { |
| 513 | 513 | if ( aga.mode == AGA_MONO ) { |
| 514 | | device_t *devconf = space->machine().device(AGA_MC6845_NAME); |
| 514 | mc6845_device *mc6845 = space->machine().device<mc6845_device>(AGA_MC6845_NAME); |
| 515 | 515 | switch( offset ) |
| 516 | 516 | { |
| 517 | 517 | case 0: case 2: case 4: case 6: |
| 518 | | mc6845_address_w( devconf, offset, data ); |
| 518 | mc6845->address_w( *space, offset, data ); |
| 519 | 519 | break; |
| 520 | 520 | case 1: case 3: case 5: case 7: |
| 521 | | mc6845_register_w( devconf, offset, data ); |
| 521 | mc6845->register_w( *space, offset, data ); |
| 522 | 522 | break; |
| 523 | 523 | case 8: |
| 524 | 524 | aga.mda_mode_control = data; |
| r11579 | r11580 | |
| 544 | 544 | UINT8 data = 0xFF; |
| 545 | 545 | |
| 546 | 546 | if ( aga.mode == AGA_COLOR ) { |
| 547 | | device_t *devconf = space->machine().device(AGA_MC6845_NAME); |
| 547 | mc6845_device *mc6845 = space->machine().device<mc6845_device>(AGA_MC6845_NAME); |
| 548 | 548 | switch( offset ) { |
| 549 | 549 | case 0: case 2: case 4: case 6: |
| 550 | 550 | /* return last written mc6845 address value here? */ |
| 551 | 551 | break; |
| 552 | 552 | case 1: case 3: case 5: case 7: |
| 553 | | data = mc6845_register_r( devconf, offset ); |
| 553 | data = mc6845->register_r( *space, offset); |
| 554 | 554 | break; |
| 555 | 555 | case 10: |
| 556 | 556 | data = aga.vsync | ( ( data & 0x40 ) >> 4 ) | aga.hsync; |
| r11579 | r11580 | |
| 590 | 590 | static WRITE8_HANDLER ( pc_aga_cga_w ) |
| 591 | 591 | { |
| 592 | 592 | if ( aga.mode == AGA_COLOR ) { |
| 593 | | device_t *devconf = space->machine().device(AGA_MC6845_NAME); |
| 593 | mc6845_device *mc6845 = space->machine().device<mc6845_device>(AGA_MC6845_NAME); |
| 594 | 594 | |
| 595 | 595 | switch(offset) { |
| 596 | 596 | case 0: case 2: case 4: case 6: |
| 597 | | mc6845_address_w( devconf, offset, data ); |
| 597 | mc6845->address_w( *space, offset, data ); |
| 598 | 598 | break; |
| 599 | 599 | case 1: case 3: case 5: case 7: |
| 600 | | mc6845_register_w( devconf, offset, data ); |
| 600 | mc6845->register_w( *space, offset, data ); |
| 601 | 601 | break; |
| 602 | 602 | case 8: |
| 603 | 603 | aga.cga_mode_control = data; |
| r11579 | r11580 | |
| 605 | 605 | //logerror("mode set to %02X\n", aga.cga_mode_control & 0x3F ); |
| 606 | 606 | switch ( aga.cga_mode_control & 0x3F ) { |
| 607 | 607 | case 0x08: case 0x09: case 0x0C: case 0x0D: |
| 608 | | mc6845_set_hpixels_per_column( devconf, 8 ); |
| 608 | mc6845->set_hpixels_per_column( 8 ); |
| 609 | 609 | aga.update_row = cga_text_inten_update_row; |
| 610 | 610 | break; |
| 611 | 611 | case 0x0A: case 0x0B: case 0x2A: case 0x2B: |
| 612 | | mc6845_set_hpixels_per_column( devconf, 8 ); |
| 612 | mc6845->set_hpixels_per_column( 8 ); |
| 613 | 613 | if ( CGA_MONITOR == CGA_MONITOR_COMPOSITE ) { |
| 614 | 614 | aga.update_row = cga_gfx_4bppl_update_row; |
| 615 | 615 | } else { |
| r11579 | r11580 | |
| 617 | 617 | } |
| 618 | 618 | break; |
| 619 | 619 | case 0x0E: case 0x0F: case 0x2E: case 0x2F: |
| 620 | | mc6845_set_hpixels_per_column( devconf, 8 ); |
| 620 | mc6845->set_hpixels_per_column( 8 ); |
| 621 | 621 | aga.update_row = cga_gfx_2bpp_update_row; |
| 622 | 622 | break; |
| 623 | 623 | case 0x18: case 0x19: case 0x1C: case 0x1D: |
| 624 | | mc6845_set_hpixels_per_column( devconf, 8 ); |
| 624 | mc6845->set_hpixels_per_column( 8 ); |
| 625 | 625 | aga.update_row = cga_text_inten_alt_update_row; |
| 626 | 626 | break; |
| 627 | 627 | case 0x1A: case 0x1B: case 0x3A: case 0x3B: |
| 628 | | mc6845_set_hpixels_per_column( devconf, 8 ); |
| 628 | mc6845->set_hpixels_per_column( 8 ); |
| 629 | 629 | if ( CGA_MONITOR == CGA_MONITOR_COMPOSITE ) { |
| 630 | 630 | aga.update_row = cga_gfx_4bpph_update_row; |
| 631 | 631 | } else { |
| r11579 | r11580 | |
| 633 | 633 | } |
| 634 | 634 | break; |
| 635 | 635 | case 0x1E: case 0x1F: case 0x3E: case 0x3F: |
| 636 | | mc6845_set_hpixels_per_column( devconf, 16 ); |
| 636 | mc6845->set_hpixels_per_column( 16 ); |
| 637 | 637 | aga.update_row = cga_gfx_1bpp_update_row; |
| 638 | 638 | break; |
| 639 | 639 | case 0x28: case 0x29: case 0x2C: case 0x2D: |
| 640 | | mc6845_set_hpixels_per_column( devconf, 8 ); |
| 640 | mc6845->set_hpixels_per_column( 8 ); |
| 641 | 641 | aga.update_row = cga_text_blink_update_row; |
| 642 | 642 | break; |
| 643 | 643 | case 0x38: case 0x39: case 0x3C: case 0x3D: |
| 644 | | mc6845_set_hpixels_per_column( devconf, 8 ); |
| 644 | mc6845->set_hpixels_per_column( 8 ); |
| 645 | 645 | aga.update_row = cga_text_blink_alt_update_row; |
| 646 | 646 | break; |
| 647 | 647 | default: |
| r11579 | r11580 | |
| 671 | 671 | |
| 672 | 672 | void pc_aga_set_mode(running_machine &machine, AGA_MODE mode) |
| 673 | 673 | { |
| 674 | | device_t *devconf = machine.device(AGA_MC6845_NAME); |
| 674 | mc6845_device *mc6845 = machine.device<mc6845_device>(AGA_MC6845_NAME); |
| 675 | 675 | |
| 676 | 676 | aga.mode = mode; |
| 677 | 677 | |
| 678 | 678 | switch (aga.mode) { |
| 679 | 679 | case AGA_COLOR: |
| 680 | | mc6845_set_clock( devconf, XTAL_14_31818MHz/8 ); |
| 680 | mc6845->set_clock( XTAL_14_31818MHz/8 ); |
| 681 | 681 | break; |
| 682 | 682 | case AGA_MONO: |
| 683 | | mc6845_set_clock( devconf, 16257000/9 ); |
| 683 | mc6845->set_clock( 16257000/9 ); |
| 684 | 684 | break; |
| 685 | 685 | case AGA_OFF: |
| 686 | 686 | break; |
| r11579 | r11580 | |
| 756 | 756 | |
| 757 | 757 | static SCREEN_UPDATE( mc6845_aga ) |
| 758 | 758 | { |
| 759 | | device_t *devconf = screen->machine().device(AGA_MC6845_NAME); |
| 760 | | mc6845_update( devconf, bitmap, cliprect); |
| 759 | mc6845_device *mc6845 = screen->machine().device<mc6845_device>(AGA_MC6845_NAME); |
| 760 | mc6845->update(bitmap, cliprect); |
| 761 | 761 | |
| 762 | 762 | return 0; |
| 763 | 763 | } |