Previous 15994 Revisions Next

r13530 Friday 9th December, 2011 at 03:00:29 UTC by Angelo Salese
Updated VGA core to accept a start address for VGA RAM (needed for Paint & Puzzle in MAME)
[src/emu/video]pc_vga.c pc_vga.h
[src/mess/machine]at.c pc.c
[src/mess/video]cirrus.c

src/emu/video/pc_vga.c
r13529r13530
410410
411411static void vga_cpu_interface(running_machine &machine)
412412{
413   address_space *space = machine.firstcpu->memory().space(AS_PROGRAM);
413   address_space *space = machine.firstcpu->memory().space(vga.vga_intf.mem_addressspace);
414414   static int sequencer, gc;
415415   read8_space_func read_handler; const char *read_handler_name;
416416   write8_space_func write_handler; const char *write_handler_name;
r13529r13530
449449         case 0x00:
450450            if (vga.vga_intf.vga_memory_bank != NULL)
451451            {
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);
453453               memory_set_bankptr(machine, vga.vga_intf.vga_memory_bank, vga.memory);
454454            }
455455            break;
456456         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);
458458            break;
459459         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);
461461            break;
462462         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);
464464            break;
465465      }
466466   }
r13529r13530
493493      sel = vga.gc.data[6] & 0x0c;
494494      if (sel)
495495      {
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);
502502      }
503503      else
504504      {
505505         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" );
508508      }
509509
510510   }
r13529r13530
912912void pc_vga_init(running_machine &machine, const struct pc_vga_interface *vga_intf, const struct pc_svga_interface *svga_intf)
913913{
914914   int i, j, k, mask1, buswidth;
915   address_space *spacevga;
915   address_space *mem_space,*io_space;
916916
917917   memset(&vga, 0, sizeof(vga));
918918
r13529r13530
958958   memset(vga.gc.data, '\0', vga.svga_intf.gc_regcount);
959959
960960   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);
962963   switch(buswidth)
963964   {
964965      case 8:
r13529r13530
981982         fatalerror("VGA: Bus width %d not supported", buswidth);
982983         break;
983984   }
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);
987988
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);
991992
992993   pc_vga_reset(machine);
993994}
r13529r13530
996997{
997998   vga.monitor.retrace=1;
998999}
1000
9991001static VIDEO_START( vga )
10001002{
10011003   vga.monitor.get_clock=vga_get_clock;
src/emu/video/pc_vga.h
r13529r13530
2222   /* VGA dipswitch (???) */
2323   read8_space_func read_dipswitch;
2424
25   /* where the RAM go */
26   int mem_addressspace;
27   offs_t mem_offset;
28
2529   /* where the ports go */
2630   int port_addressspace;
2731   offs_t port_offset;
src/mess/machine/at.c
r13529r13530
327327   NULL,
328328   NULL,
329329   input_port_0_r,
330   AS_PROGRAM,
331   0xa0000,
330332   AS_IO,
331333   0x0000
332334};
src/mess/machine/pc.c
r13529r13530
10861086   NULL,
10871087
10881088   input_port_0_r,
1089
1089   AS_PROGRAM,
1090   0xa0000,
10901091   AS_IO,
10911092   0x0000
10921093};
src/mess/video/cirrus.c
r13529r13530
164164   bebox_map_vga_memory,
165165
166166   NULL,
167
168167   AS_PROGRAM,
168   0xC00A0000,
169   AS_PROGRAM,
169170   0x80000000
170171};
171172

Previous 15994 Revisions Next


© 1998-2018 The MESS Team