src/emu/video/pc_vga.c
| r13529 | r13530 | |
| 410 | 410 | |
| 411 | 411 | static void vga_cpu_interface(running_machine &machine) |
| 412 | 412 | { |
| 413 | | address_space *space = machine.firstcpu->memory().space(AS_PROGRAM); |
| 413 | address_space *space = machine.firstcpu->memory().space(vga.vga_intf.mem_addressspace); |
| 414 | 414 | static int sequencer, gc; |
| 415 | 415 | read8_space_func read_handler; const char *read_handler_name; |
| 416 | 416 | write8_space_func write_handler; const char *write_handler_name; |
| r13529 | r13530 | |
| 449 | 449 | case 0x00: |
| 450 | 450 | if (vga.vga_intf.vga_memory_bank != NULL) |
| 451 | 451 | { |
| 452 | | vga.vga_intf.map_vga_memory(machine, 0xA0000, 0xBFFFF, read_handler, read_handler_name, write_handler, write_handler_name); |
| 452 | vga.vga_intf.map_vga_memory(machine, vga.vga_intf.mem_offset + 0x00000, vga.vga_intf.mem_offset + 0x1FFFF, read_handler, read_handler_name, write_handler, write_handler_name); |
| 453 | 453 | memory_set_bankptr(machine, vga.vga_intf.vga_memory_bank, vga.memory); |
| 454 | 454 | } |
| 455 | 455 | break; |
| 456 | 456 | case 0x04: |
| 457 | | vga.vga_intf.map_vga_memory(machine, 0xA0000, 0xAFFFF, read_handler, read_handler_name, write_handler, write_handler_name); |
| 457 | vga.vga_intf.map_vga_memory(machine, vga.vga_intf.mem_offset + 0x00000, vga.vga_intf.mem_offset + 0x0FFFF, read_handler, read_handler_name, write_handler, write_handler_name); |
| 458 | 458 | break; |
| 459 | 459 | case 0x08: |
| 460 | | vga.vga_intf.map_vga_memory(machine, 0xB0000, 0xB7FFF, read_handler, read_handler_name, write_handler, write_handler_name); |
| 460 | vga.vga_intf.map_vga_memory(machine, vga.vga_intf.mem_offset + 0x10000, vga.vga_intf.mem_offset + 0x17FFF, read_handler, read_handler_name, write_handler, write_handler_name); |
| 461 | 461 | break; |
| 462 | 462 | case 0x0C: |
| 463 | | vga.vga_intf.map_vga_memory(machine, 0xB8000, 0xBFFFF, read_handler, read_handler_name, write_handler, write_handler_name); |
| 463 | vga.vga_intf.map_vga_memory(machine, vga.vga_intf.mem_offset + 0x18000, vga.vga_intf.mem_offset + 0x1FFFF, read_handler, read_handler_name, write_handler, write_handler_name); |
| 464 | 464 | break; |
| 465 | 465 | } |
| 466 | 466 | } |
| r13529 | r13530 | |
| 493 | 493 | sel = vga.gc.data[6] & 0x0c; |
| 494 | 494 | if (sel) |
| 495 | 495 | { |
| 496 | | if (sel == 0x04) space->install_legacy_read_handler(0xa0000, 0xaffff, read_handler, read_handler_name, mask); else space->nop_read(0xa0000, 0xaffff); |
| 497 | | if (sel == 0x08) space->install_legacy_read_handler(0xb0000, 0xb7fff, read_handler, read_handler_name, mask); else space->nop_read(0xb0000, 0xb7fff); |
| 498 | | if (sel == 0x0C) space->install_legacy_read_handler(0xb8000, 0xbffff, read_handler, read_handler_name, mask); else space->nop_read(0xb8000, 0xbffff); |
| 499 | | if (sel == 0x04) space->install_legacy_write_handler(0xa0000, 0xaffff, write_handler, write_handler_name, mask); else space->nop_write(0xa0000, 0xaffff); |
| 500 | | if (sel == 0x08) space->install_legacy_write_handler(0xb0000, 0xb7fff, write_handler, write_handler_name, mask); else space->nop_write(0xb0000, 0xb7fff); |
| 501 | | if (sel == 0x0C) space->install_legacy_write_handler(0xb8000, 0xbffff, write_handler, write_handler_name, mask); else space->nop_write(0xb8000, 0xbffff); |
| 496 | if (sel == 0x04) space->install_legacy_read_handler(vga.vga_intf.mem_offset + 0x00000, vga.vga_intf.mem_offset + 0x0ffff, read_handler, read_handler_name, mask); else space->nop_read(vga.vga_intf.mem_offset + 0x00000, vga.vga_intf.mem_offset + 0x0ffff); |
| 497 | if (sel == 0x08) space->install_legacy_read_handler(vga.vga_intf.mem_offset + 0x10000, vga.vga_intf.mem_offset + 0x17fff, read_handler, read_handler_name, mask); else space->nop_read(vga.vga_intf.mem_offset + 0x10000, vga.vga_intf.mem_offset + 0x17fff); |
| 498 | if (sel == 0x0C) space->install_legacy_read_handler(vga.vga_intf.mem_offset + 0x18000, vga.vga_intf.mem_offset + 0x1ffff, read_handler, read_handler_name, mask); else space->nop_read(vga.vga_intf.mem_offset + 0x18000, vga.vga_intf.mem_offset + 0x1ffff); |
| 499 | if (sel == 0x04) space->install_legacy_write_handler(vga.vga_intf.mem_offset + 0x00000, vga.vga_intf.mem_offset + 0x0ffff, write_handler, write_handler_name, mask); else space->nop_write(vga.vga_intf.mem_offset + 0x00000, vga.vga_intf.mem_offset + 0x0ffff); |
| 500 | if (sel == 0x08) space->install_legacy_write_handler(vga.vga_intf.mem_offset + 0x10000, vga.vga_intf.mem_offset + 0x17fff, write_handler, write_handler_name, mask); else space->nop_write(vga.vga_intf.mem_offset + 0x10000, vga.vga_intf.mem_offset + 0x17fff); |
| 501 | if (sel == 0x0C) space->install_legacy_write_handler(vga.vga_intf.mem_offset + 0x18000, vga.vga_intf.mem_offset + 0x1ffff, write_handler, write_handler_name, mask); else space->nop_write(vga.vga_intf.mem_offset + 0x18000, vga.vga_intf.mem_offset + 0x1ffff); |
| 502 | 502 | } |
| 503 | 503 | else |
| 504 | 504 | { |
| 505 | 505 | memory_set_bankptr(machine,"bank1", vga.memory); |
| 506 | | space->install_read_bank(0xa0000, 0xbffff, "bank1" ); |
| 507 | | space->install_write_bank(0xa0000, 0xbffff, "bank1" ); |
| 506 | space->install_read_bank(vga.vga_intf.mem_offset + 0x00000, vga.vga_intf.mem_offset + 0x1ffff, "bank1" ); |
| 507 | space->install_write_bank(vga.vga_intf.mem_offset + 0x00000, vga.vga_intf.mem_offset + 0x1ffff, "bank1" ); |
| 508 | 508 | } |
| 509 | 509 | |
| 510 | 510 | } |
| r13529 | r13530 | |
| 912 | 912 | void pc_vga_init(running_machine &machine, const struct pc_vga_interface *vga_intf, const struct pc_svga_interface *svga_intf) |
| 913 | 913 | { |
| 914 | 914 | int i, j, k, mask1, buswidth; |
| 915 | | address_space *spacevga; |
| 915 | address_space *mem_space,*io_space; |
| 916 | 916 | |
| 917 | 917 | memset(&vga, 0, sizeof(vga)); |
| 918 | 918 | |
| r13529 | r13530 | |
| 958 | 958 | memset(vga.gc.data, '\0', vga.svga_intf.gc_regcount); |
| 959 | 959 | |
| 960 | 960 | buswidth = downcast<legacy_cpu_device *>(machine.firstcpu)->space_config(AS_PROGRAM)->m_databus_width; |
| 961 | | spacevga =machine.firstcpu->memory().space(vga.vga_intf.port_addressspace); |
| 961 | mem_space = machine.firstcpu->memory().space(vga.vga_intf.mem_addressspace); |
| 962 | io_space = machine.firstcpu->memory().space(vga.vga_intf.port_addressspace); |
| 962 | 963 | switch(buswidth) |
| 963 | 964 | { |
| 964 | 965 | case 8: |
| r13529 | r13530 | |
| 981 | 982 | fatalerror("VGA: Bus width %d not supported", buswidth); |
| 982 | 983 | break; |
| 983 | 984 | } |
| 984 | | spacevga->install_legacy_read_handler(vga.vga_intf.port_offset + 0x3b0, vga.vga_intf.port_offset + 0x3bf, FUNC(vga_port_03b0_r), mask); |
| 985 | | spacevga->install_legacy_read_handler(vga.vga_intf.port_offset + 0x3c0, vga.vga_intf.port_offset + 0x3cf, FUNC(vga_port_03c0_r), mask); |
| 986 | | spacevga->install_legacy_read_handler(vga.vga_intf.port_offset + 0x3d0, vga.vga_intf.port_offset + 0x3df, FUNC(vga_port_03d0_r), mask); |
| 985 | io_space->install_legacy_read_handler(vga.vga_intf.port_offset + 0x3b0, vga.vga_intf.port_offset + 0x3bf, FUNC(vga_port_03b0_r), mask); |
| 986 | io_space->install_legacy_read_handler(vga.vga_intf.port_offset + 0x3c0, vga.vga_intf.port_offset + 0x3cf, FUNC(vga_port_03c0_r), mask); |
| 987 | io_space->install_legacy_read_handler(vga.vga_intf.port_offset + 0x3d0, vga.vga_intf.port_offset + 0x3df, FUNC(vga_port_03d0_r), mask); |
| 987 | 988 | |
| 988 | | spacevga->install_legacy_write_handler(vga.vga_intf.port_offset + 0x3b0, vga.vga_intf.port_offset + 0x3bf, FUNC(vga_port_03b0_w), mask); |
| 989 | | spacevga->install_legacy_write_handler(vga.vga_intf.port_offset + 0x3c0, vga.vga_intf.port_offset + 0x3cf, FUNC(vga_port_03c0_w), mask); |
| 990 | | spacevga->install_legacy_write_handler(vga.vga_intf.port_offset + 0x3d0, vga.vga_intf.port_offset + 0x3df, FUNC(vga_port_03d0_w), mask); |
| 989 | io_space->install_legacy_write_handler(vga.vga_intf.port_offset + 0x3b0, vga.vga_intf.port_offset + 0x3bf, FUNC(vga_port_03b0_w), mask); |
| 990 | io_space->install_legacy_write_handler(vga.vga_intf.port_offset + 0x3c0, vga.vga_intf.port_offset + 0x3cf, FUNC(vga_port_03c0_w), mask); |
| 991 | io_space->install_legacy_write_handler(vga.vga_intf.port_offset + 0x3d0, vga.vga_intf.port_offset + 0x3df, FUNC(vga_port_03d0_w), mask); |
| 991 | 992 | |
| 992 | 993 | pc_vga_reset(machine); |
| 993 | 994 | } |
| r13529 | r13530 | |
| 996 | 997 | { |
| 997 | 998 | vga.monitor.retrace=1; |
| 998 | 999 | } |
| 1000 | |
| 999 | 1001 | static VIDEO_START( vga ) |
| 1000 | 1002 | { |
| 1001 | 1003 | vga.monitor.get_clock=vga_get_clock; |