Previous 199869 Revisions Next

r33778 Tuesday 9th December, 2014 at 20:53:03 UTC by Olivier Galibert
pci: expansion rom management [O. Galibert]
[src/emu/machine]pci.c pci.h
[src/emu/video]gf6800gt.c
[src/mame/drivers]lindbergh.c

trunk/src/emu/machine/pci.c
r242289r242290
1313   AM_RANGE(0x0c, 0x0f) AM_READ8      (latency_timer_r,                          0x0000ff00)
1414   AM_RANGE(0x0c, 0x0f) AM_READ8      (header_type_r,                            0x00ff0000)
1515   AM_RANGE(0x0c, 0x0f) AM_READ8      (bist_r,                                   0xff000000)
16   AM_RANGE(0x0c, 0x0f) AM_WRITENOP
1617   AM_RANGE(0x10, 0x27) AM_READWRITE  (address_base_r,      address_base_w)
17
18   // Cardbus CIS pointer at 28
1819   AM_RANGE(0x2c, 0x2f) AM_READ16     (subvendor_r,                              0x0000ffff)
1920   AM_RANGE(0x2c, 0x2f) AM_READ16     (subsystem_r,                              0xffff0000)
2021   AM_RANGE(0x2c, 0x2f) AM_WRITENOP
21
22   AM_RANGE(0x30, 0x33) AM_READWRITE  (expansion_base_r,    expansion_base_w)
2223   AM_RANGE(0x34, 0x37) AM_READ8      (capptr_r,                                 0x000000ff)
2324ADDRESS_MAP_END
2425
r242289r242290
8889
8990   bank_count = 0;
9091   bank_reg_count = 0;
92
93   expansion_rom = 0;
94   expansion_rom_size = 0;
95   expansion_rom_base = 0;
9196}
9297
9398void pci_device::device_reset()
r242289r242290
209214   return subsystem_id;
210215}
211216
217READ32_MEMBER(pci_device::expansion_base_r)
218{
219   return expansion_rom_base;
220}
221
222
223WRITE32_MEMBER(pci_device::expansion_base_w)
224{
225   COMBINE_DATA(&expansion_rom_base);
226   if(!expansion_rom_size)
227      expansion_rom_base = 0;
228   else {
229      // Trick to get an address resolution at expansion_rom_size with minimal granularity of 0x800, plus bit 1 set to keep the on/off information
230      expansion_rom_base &= 0xfffff801 & (1-expansion_rom_size);
231   }
232   remap_cb();
233}
234
212235READ8_MEMBER(pci_device::capptr_r)
213236{
214237   return 0x00;
r242289r242290
256279      case 5: space->install_readwrite_handler(start, end, 0, 0, read32_delegate(FUNC(pci_device::unmapped5_r), this), write32_delegate(FUNC(pci_device::unmapped5_w), this)); break;
257280      }
258281      space->install_device_delegate(start, end, *this, bi.map);
282      logerror("%s: map %s at %0*x-%0*x\n", tag(), bi.map.name(), bi.flags & M_IO ? 4 : 8, UINT32(start), bi.flags & M_IO ? 4 : 8, UINT32(end));
259283   }
260284
261285   map_extra(memory_window_start, memory_window_end, memory_offset, memory_space,
262286            io_window_start, io_window_end, io_offset, io_space);
287
288   if(expansion_rom_base & 1) {
289      logerror("%s: map expansion rom at %08x-%08x\n", tag(), expansion_rom_base & ~1, (expansion_rom_base & ~1) + expansion_rom_size - 1);
290      UINT32 start = (expansion_rom_base & ~1) + memory_offset;
291      UINT32 end = start + expansion_rom_size - 1;
292      if(end > memory_window_end)
293         end = memory_window_end;
294      memory_space->install_rom(start, end, (void *)expansion_rom);
295   }
263296}
264297
265298void pci_device::map_extra(UINT64 memory_window_start, UINT64 memory_window_end, UINT64 memory_offset, address_space *memory_space,
r242289r242290
305338   logerror("Device %s (%s) has 0x%" I64FMT "x bytes of %s named %s\n", tag(), name(), size, flags & M_IO ? "io" : "memory", map.name());
306339}
307340
341void pci_device::add_rom(const UINT8 *rom, UINT32 size)
342{
343   expansion_rom = rom;
344   expansion_rom_size = size;
345   logerror("Device %s (%s) has 0x%x bytes of expansion rom\n", tag(), name(), size);
346}
347
348void pci_device::add_rom_from_region()
349{
350   add_rom(m_region->base(), m_region->bytes());
351}
352
308353agp_device::agp_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
309354   : pci_device(mconfig, type, name, tag, owner, clock, shortname, source)
310355{
r242289r242290
662707   logerror("%s: iolimitu_w %04x\n", tag(), data);
663708}
664709
665READ32_MEMBER (pci_bridge_device::expansion_base_r)
666{
667   logerror("%s: expansion_base_r\n", tag());
668   return 0xffffffff;
669}
670
671WRITE32_MEMBER(pci_bridge_device::expansion_base_w)
672{
673   logerror("%s: expansion_base_w %08x\n", tag(), data);
674}
675
676710READ8_MEMBER  (pci_bridge_device::interrupt_line_r)
677711{
678712   logerror("%s: interrupt_line_r\n", tag());
trunk/src/emu/machine/pci.h
r242289r242290
7474   DECLARE_WRITE32_MEMBER(address_base_w);
7575   DECLARE_READ16_MEMBER(subvendor_r);
7676   DECLARE_READ16_MEMBER(subsystem_r);
77   DECLARE_READ32_MEMBER (expansion_base_r);
78   DECLARE_WRITE32_MEMBER(expansion_base_w);
7779   virtual DECLARE_READ8_MEMBER(capptr_r);
7880
7981protected:
r242289r242290
104106   UINT32 pclass;
105107   UINT8 revision;
106108   UINT16 command, command_mask, status;
109   const UINT8 *expansion_rom;
110   UINT32 expansion_rom_size;
111   UINT32 expansion_rom_base;
107112
108113   virtual void device_start();
109114   virtual void device_reset();
r242289r242290
116121      address_map_delegate delegate(map, name, static_cast<T *>(this));
117122      add_map(size, flags, delegate);
118123   }
124
125   void add_rom(const UINT8 *data, UINT32 size);
126   void add_rom_from_region();
119127};
120128
121129class agp_device : public pci_device {
r242289r242290
173181   DECLARE_WRITE16_MEMBER(iobaseu_w);
174182   DECLARE_READ16_MEMBER (iolimitu_r);
175183   DECLARE_WRITE16_MEMBER(iolimitu_w);
176   DECLARE_READ32_MEMBER (expansion_base_r);
177   DECLARE_WRITE32_MEMBER(expansion_base_w);
178184   DECLARE_READ8_MEMBER  (interrupt_line_r);
179185   DECLARE_WRITE8_MEMBER (interrupt_line_w);
180186   DECLARE_READ8_MEMBER  (interrupt_pin_r);
trunk/src/emu/video/gf6800gt.c
r242289r242290
2222   add_map( 16*1024*1024, M_MEM, FUNC(geforce_6800gt_device::map1));
2323   add_map(256*1024*1024, M_MEM, FUNC(geforce_6800gt_device::map2));
2424   add_map( 16*1024*1024, M_MEM, FUNC(geforce_6800gt_device::map3));
25   add_rom_from_region();
2526}
2627
2728void geforce_6800gt_device::device_reset()
trunk/src/mame/drivers/lindbergh.c
r242289r242290
384384   ROM_REGION(0x400000, ":pci:1e.0:03.0", 0) /* Baseboard MPC firmware */ \
385385   ROM_LOAD("fpr-24370b.ic6", 0x000000, 0x400000, CRC(c3b021a4) SHA1(1b6938a50fe0e4ae813864649eb103838c399ac0)) \
386386\
387   ROM_REGION32_LE(0x10000, ":pci:01.0:00.0", 0) /* Geforce bios extension (custom or standard?) */ \
387   ROM_REGION32_LE(0x10000, ":pci:01.0:00.0", 0) /* Geforce bios extension (custom for the card) */ \
388388   ROM_LOAD("vid_bios.u504", 0x00000, 0x10000, CRC(f78d14d7) SHA1(f129787e487984edd23bf344f2e9500c85052275)) \
389389
390390ROM_START(lindbios)


Previous 199869 Revisions Next


© 1997-2024 The MAME Team