Previous 199869 Revisions Next

r33326 Monday 10th November, 2014 at 22:08:07 UTC by Olivier Galibert
i82875p: Host bridge fun [O. Galibert]
[src/emu/machine]i82875p.c i82875p.h pci.c pci.h

trunk/src/emu/machine/i82875p.c
r241837r241838
66DEVICE_ADDRESS_MAP_START(agp_translation_map, 32, i82875p_host_device)
77ADDRESS_MAP_END
88
9DEVICE_ADDRESS_MAP_START(config_map, 32, i82875p_host_device)
10   AM_RANGE(0x50, 0x53) AM_READWRITE8 (agpm_r,     agpm_w,     0x0000ff00)
11   AM_RANGE(0x50, 0x53) AM_READ8      (gc_r,                   0x00ff0000)
12   AM_RANGE(0x50, 0x53) AM_READ8      (csabcont_r,             0xff000000)
13   AM_RANGE(0x58, 0x5b) AM_READ       (eap_r)
14   AM_RANGE(0x5c, 0x5f) AM_READ8      (derrsyn_r,              0x000000ff)
15   AM_RANGE(0x5c, 0x5f) AM_READ8      (des_r,                  0x0000ff00)
16   AM_RANGE(0x60, 0x63) AM_READWRITE8 (fpllcont_r, fpllcont_w, 0x000000ff)
17   AM_RANGE(0x90, 0x97) AM_READWRITE8 (pam_r,      pam_w,      0xffffffff)
18   AM_RANGE(0x9c, 0x9f) AM_READWRITE8 (smram_r,    smram_w,    0x0000ff00)
19   AM_RANGE(0x9c, 0x9f) AM_READWRITE8 (esmramc_r,  esmramc_w,  0x00ff0000)
20   AM_RANGE(0xa0, 0xa3) AM_READ       (acapid_r)
21   AM_RANGE(0xa4, 0xa7) AM_READ       (agpstat_r)
22   AM_RANGE(0xa8, 0xab) AM_READ       (agpcmd_r)
23   AM_RANGE(0xb0, 0xb3) AM_READWRITE  (agpctrl_r,  agpctrl_w)
24   AM_RANGE(0xb4, 0xb7) AM_READWRITE8 (apsize_r,   apsize_w,   0x000000ff)
25   AM_RANGE(0xb8, 0xbb) AM_READWRITE  (attbase_r,  attbase_w)
26   AM_RANGE(0xbc, 0xbf) AM_READWRITE8 (amtt_r,     amtt_w,     0x000000ff)
27   AM_RANGE(0xbc, 0xbf) AM_READWRITE8 (lptt_r,     lptt_w,     0x0000ff00)
28   AM_RANGE(0xc4, 0xc7) AM_READWRITE16(toud_r,     toud_w,     0x0000ffff)
29   AM_RANGE(0xc4, 0xc7) AM_READWRITE16(mchcfg_r,   mchcfg_w,   0xffff0000)
30   AM_RANGE(0xc8, 0xcb) AM_READ16     (errsts_r,               0x0000ffff)
31   AM_RANGE(0xc8, 0xcb) AM_READWRITE16(errcmd_r,   errcmd_w,   0xffff0000)
32   AM_RANGE(0xcc, 0xcf) AM_READWRITE16(smicmd_r,   smicmd_w,   0x0000ffff)
33   AM_RANGE(0xcc, 0xcf) AM_READWRITE16(scicmd_r,   scicmd_w,   0xffff0000)
34   AM_RANGE(0xdc, 0xdf) AM_READWRITE16(skpd_r,     skpd_w,     0xffff0000)
35   AM_RANGE(0xe4, 0xe7) AM_READ       (capreg1_r)
36   AM_RANGE(0xe8, 0xeb) AM_READ8      (capreg2_r,              0x000000ff)
37
38   AM_INHERIT_FROM(pci_host_device::config_map)
39ADDRESS_MAP_END
40
941i82875p_host_device::i82875p_host_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
1042   : pci_host_device(mconfig, I82875P_HOST, "i82875p northbridge", tag, owner, clock, "i82875p_host", __FILE__)
1143{
r241837r241838
2153   ram_size = _ram_size;
2254}
2355
56READ8_MEMBER(i82875p_host_device::capptr_r)
57{
58   return 0xe4;
59}
60
2461void i82875p_host_device::device_start()
2562{
2663   pci_host_device::device_start();
r241837r241838
4178   add_map(256*1024*1024, M_MEM, FUNC(i82875p_host_device::agp_translation_map));
4279}
4380
81READ8_MEMBER(  i82875p_host_device::agpm_r)
82{
83   return agpm;
84}
85
86WRITE8_MEMBER( i82875p_host_device::agpm_w)
87{
88   agpm = data;
89   logerror("%s: agpm = %02x\n", tag(), agpm);
90}
91
92READ8_MEMBER(  i82875p_host_device::gc_r)
93{
94   return 0x08;
95}
96
97READ8_MEMBER(  i82875p_host_device::csabcont_r)
98{
99   return 0x00;
100}
101
102READ32_MEMBER( i82875p_host_device::eap_r)
103{
104   return 0x00000000;
105}
106
107READ8_MEMBER(  i82875p_host_device::derrsyn_r)
108{
109   return 0x00;
110}
111
112READ8_MEMBER(  i82875p_host_device::des_r)
113{
114   return 0x00;
115}
116
117READ8_MEMBER(  i82875p_host_device::fpllcont_r)
118{
119   return fpllcont;
120}
121
122WRITE8_MEMBER( i82875p_host_device::fpllcont_w)
123{
124   fpllcont = data;
125   logerror("%s: fpllcont = %02x\n", tag(), data);
126}
127
128READ8_MEMBER(  i82875p_host_device::pam_r)
129{
130   return pam[offset];
131}
132
133WRITE8_MEMBER( i82875p_host_device::pam_w)
134{
135   pam[offset] = data;
136   logerror("%s: pam[%d] = %02x\n", tag(), offset, data);
137   remap_cb();
138}
139
140READ8_MEMBER(  i82875p_host_device::smram_r)
141{
142   return smram;
143}
144
145WRITE8_MEMBER( i82875p_host_device::smram_w)
146{
147   if(!(smram & 0x10))
148      smram = (data & 0xfe) | 0x02;
149   logerror("%s: smram = %02x\n", tag(), smram);
150   remap_cb();
151}
152
153READ8_MEMBER(  i82875p_host_device::esmramc_r)
154{
155   return esmramc;
156}
157
158WRITE8_MEMBER( i82875p_host_device::esmramc_w)
159{
160   if(!(smram & 0x10))
161      esmramc = (data & 0x87) | 0x38;
162   logerror("%s: esmramc = %02x\n", tag(), smram);
163   remap_cb();
164}
165
166READ32_MEMBER( i82875p_host_device::acapid_r)
167{
168   return 0x00300002;
169}
170
171READ32_MEMBER( i82875p_host_device::agpstat_r)
172{
173   return 0x1f004a13;
174}
175
176READ32_MEMBER( i82875p_host_device::agpcmd_r)
177{
178   return 0x00000a00;
179}
180
181READ32_MEMBER( i82875p_host_device::agpctrl_r)
182{
183   return agpctrl;
184}
185
186WRITE32_MEMBER(i82875p_host_device::agpctrl_w)
187{
188   COMBINE_DATA(&agpctrl);
189   logerror("%s: agpctrl = %08x\n", tag(), agpctrl);
190}
191
192READ8_MEMBER(  i82875p_host_device::apsize_r)
193{
194   return apsize;
195}
196
197WRITE8_MEMBER( i82875p_host_device::apsize_w)
198{
199   apsize = data;
200   logerror("%s: apsize = %02x\n", tag(), apsize);
201}
202
203READ32_MEMBER( i82875p_host_device::attbase_r)
204{
205   return attbase;
206}
207
208WRITE32_MEMBER(i82875p_host_device::attbase_w)
209{
210   COMBINE_DATA(&attbase);
211   logerror("%s: attbase = %08x\n", tag(), attbase);
212}
213
214READ8_MEMBER(  i82875p_host_device::amtt_r)
215{
216   return amtt;
217}
218
219WRITE8_MEMBER( i82875p_host_device::amtt_w)
220{
221   amtt = data;
222}
223
224READ8_MEMBER(  i82875p_host_device::lptt_r)
225{
226   return lptt;
227}
228
229WRITE8_MEMBER( i82875p_host_device::lptt_w)
230{
231   lptt = data;
232}
233
234READ16_MEMBER( i82875p_host_device::toud_r)
235{
236   return toud;
237}
238
239WRITE16_MEMBER(i82875p_host_device::toud_w)
240{
241   COMBINE_DATA(&toud);
242   logerror("%s: toud = %08x\n", tag(), 512*toud);
243   remap_cb();
244}
245
246READ16_MEMBER( i82875p_host_device::mchcfg_r)
247{
248   return mchcfg;
249}
250
251WRITE16_MEMBER(i82875p_host_device::mchcfg_w)
252{
253   COMBINE_DATA(&mchcfg);
254}
255
256READ16_MEMBER( i82875p_host_device::errsts_r)
257{
258   return 0x0000;
259}
260
261READ16_MEMBER( i82875p_host_device::errcmd_r)
262{
263   return errcmd;
264}
265
266WRITE16_MEMBER(i82875p_host_device::errcmd_w)
267{
268   COMBINE_DATA(&errcmd);
269}
270
271READ16_MEMBER( i82875p_host_device::smicmd_r)
272{
273   return smicmd;
274}
275
276WRITE16_MEMBER(i82875p_host_device::smicmd_w)
277{
278   COMBINE_DATA(&smicmd);
279}
280
281READ16_MEMBER( i82875p_host_device::scicmd_r)
282{
283   return scicmd;
284}
285
286WRITE16_MEMBER(i82875p_host_device::scicmd_w)
287{
288   COMBINE_DATA(&scicmd);
289}
290
291READ16_MEMBER( i82875p_host_device::skpd_r)
292{
293   return skpd;
294}
295
296WRITE16_MEMBER(i82875p_host_device::skpd_w)
297{
298   COMBINE_DATA(&skpd);
299}
300
301READ32_MEMBER( i82875p_host_device::capreg1_r)
302{
303   return 0x0106a009;
304}
305
306READ8_MEMBER(  i82875p_host_device::capreg2_r)
307{
308   return 0x00;
309}
310
44311void i82875p_host_device::device_reset()
45312{
46313   pci_host_device::device_reset();
314
315   agpm = 0x00;
316   fpllcont = 0x00;
317   memset(pam, 0, sizeof(pam));
318   smram = 0x02;
319   esmramc = 0x38;
320   agpctrl = 0x00000000;
321   apsize = 0x00;
322   attbase = 0x00000000;
323   amtt = 0x10;
324   lptt = 0x10;
325   toud = 0x0400;
326   mchcfg = 0x0000;
327   errcmd = 0x0000;
328   smicmd = 0x0000;
329   scicmd = 0x0000;
330   skpd = 0x0000;
47331}
48332
49333void i82875p_host_device::map_extra(UINT64 memory_window_start, UINT64 memory_window_end, UINT64 memory_offset, address_space *memory_space,
50334                           UINT64 io_window_start, UINT64 io_window_end, UINT64 io_offset, address_space *io_space)
51335{
52336   io_space->install_device(0, 0xffff, *static_cast<pci_host_device *>(this), &pci_host_device::io_configuration_access_map);
337
338   UINT32 top = toud << 16;
339   if(top > ram_size)
340      top = ram_size;
341
342   memory_space->install_ram          (0x00000000, 0x0007ffff, &ram[0x00000000/4]);
343
344   if(smram & 0x40)
345      memory_space->install_ram      (0x000a0000, 0x000bffff, &ram[0x000a0000/4]);
346
347   if(pam[1] & 0x01)
348      memory_space->install_rom      (0x000c0000, 0x000c3fff, &ram[0x000c0000/4]);
349   if(pam[1] & 0x02)
350      memory_space->install_writeonly(0x000c0000, 0x000c3fff, &ram[0x000c0000/4]);
351   if(pam[1] & 0x10)
352      memory_space->install_rom      (0x000c4000, 0x000c7fff, &ram[0x000c4000/4]);
353   if(pam[1] & 0x20)
354      memory_space->install_writeonly(0x000c4000, 0x000c7fff, &ram[0x000c4000/4]);
355   if(pam[2] & 0x01)
356      memory_space->install_rom      (0x000c8000, 0x000cbfff, &ram[0x000c8000/4]);
357   if(pam[2] & 0x02)
358      memory_space->install_writeonly(0x000c8000, 0x000cbfff, &ram[0x000c8000/4]);
359   if(pam[2] & 0x10)
360      memory_space->install_rom      (0x000cc000, 0x000cffff, &ram[0x000cc000/4]);
361   if(pam[2] & 0x20)
362      memory_space->install_writeonly(0x000cc000, 0x000cffff, &ram[0x000cc000/4]);
363   if(pam[3] & 0x01)
364      memory_space->install_rom      (0x000d0000, 0x000d3fff, &ram[0x000d0000/4]);
365   if(pam[3] & 0x02)
366      memory_space->install_writeonly(0x000d0000, 0x000d3fff, &ram[0x000d0000/4]);
367   if(pam[3] & 0x10)
368      memory_space->install_rom      (0x000d4000, 0x000d7fff, &ram[0x000d4000/4]);
369   if(pam[3] & 0x20)
370      memory_space->install_writeonly(0x000d4000, 0x000d7fff, &ram[0x000d4000/4]);
371   if(pam[4] & 0x01)
372      memory_space->install_rom      (0x000d8000, 0x000dbfff, &ram[0x000d8000/4]);
373   if(pam[4] & 0x02)
374      memory_space->install_writeonly(0x000d8000, 0x000dbfff, &ram[0x000d8000/4]);
375   if(pam[4] & 0x10)
376      memory_space->install_rom      (0x000dc000, 0x000dffff, &ram[0x000dc000/4]);
377   if(pam[4] & 0x20)
378      memory_space->install_writeonly(0x000dc000, 0x000dffff, &ram[0x000dc000/4]);
379   if(pam[5] & 0x01)
380      memory_space->install_rom      (0x000e0000, 0x000e3fff, &ram[0x000e0000/4]);
381   if(pam[5] & 0x02)
382      memory_space->install_writeonly(0x000e0000, 0x000e3fff, &ram[0x000e0000/4]);
383   if(pam[5] & 0x10)
384      memory_space->install_rom      (0x000e4000, 0x000e7fff, &ram[0x000e4000/4]);
385   if(pam[5] & 0x20)
386      memory_space->install_writeonly(0x000e4000, 0x000e7fff, &ram[0x000e4000/4]);
387   if(pam[6] & 0x01)
388      memory_space->install_rom      (0x000e8000, 0x000ebfff, &ram[0x000e8000/4]);
389   if(pam[6] & 0x02)
390      memory_space->install_writeonly(0x000e8000, 0x000ebfff, &ram[0x000e8000/4]);
391   if(pam[6] & 0x10)
392      memory_space->install_rom      (0x000ec000, 0x000effff, &ram[0x000ec000/4]);
393   if(pam[6] & 0x20)
394      memory_space->install_writeonly(0x000ec000, 0x000effff, &ram[0x000ec000/4]);
395   if(pam[0] & 0x10)
396      memory_space->install_rom      (0x000f0000, 0x000fffff, &ram[0x000f0000/4]);
397   if(pam[0] & 0x20)
398      memory_space->install_writeonly(0x000f0000, 0x000fffff, &ram[0x000f0000/4]);
399
400   memory_space->install_ram          (0x00100000, 0x00efffff, &ram[0x00100000/4]);
401   if(!(pam[7] & 0x80))
402      memory_space->install_ram      (0x00f00000, 0x00ffffff, &ram[0x00f00000/4]);
403   if(top > 0x01000000)
404      memory_space->install_ram      (0x01000000, top-1,      &ram[0x01000000/4]);
405
406   if((esmramc & 0x40) && (smram & 0x08))
407      memory_space->install_ram      (0xfeda0000, 0xfedbffff, &ram[0x000a0000/4]);
408
53409}
54410
55411
trunk/src/emu/machine/i82875p.h
r241837r241838
2323   virtual void map_extra(UINT64 memory_window_start, UINT64 memory_window_end, UINT64 memory_offset, address_space *memory_space,
2424                     UINT64 io_window_start, UINT64 io_window_end, UINT64 io_offset, address_space *io_space);
2525
26   virtual DECLARE_ADDRESS_MAP(config_map, 32);
27
28   virtual DECLARE_READ8_MEMBER(capptr_r);
29
30   DECLARE_READ8_MEMBER(  agpm_r);
31   DECLARE_WRITE8_MEMBER( agpm_w);
32   DECLARE_READ8_MEMBER(  gc_r);
33   DECLARE_READ8_MEMBER(  csabcont_r);
34   DECLARE_READ32_MEMBER( eap_r);
35   DECLARE_READ8_MEMBER(  derrsyn_r);
36   DECLARE_READ8_MEMBER(  des_r);
37   DECLARE_READ8_MEMBER(  fpllcont_r);
38   DECLARE_WRITE8_MEMBER( fpllcont_w);
39   DECLARE_READ8_MEMBER(  pam_r);
40   DECLARE_WRITE8_MEMBER( pam_w);
41   DECLARE_READ8_MEMBER(  smram_r);
42   DECLARE_WRITE8_MEMBER( smram_w);
43   DECLARE_READ8_MEMBER(  esmramc_r);
44   DECLARE_WRITE8_MEMBER( esmramc_w);
45   DECLARE_READ32_MEMBER( acapid_r);
46   DECLARE_READ32_MEMBER( agpstat_r);
47   DECLARE_READ32_MEMBER( agpcmd_r);
48   DECLARE_READ32_MEMBER( agpctrl_r);
49   DECLARE_WRITE32_MEMBER(agpctrl_w);
50   DECLARE_READ8_MEMBER(  apsize_r);
51   DECLARE_WRITE8_MEMBER( apsize_w);
52   DECLARE_READ32_MEMBER( attbase_r);
53   DECLARE_WRITE32_MEMBER(attbase_w);
54   DECLARE_READ8_MEMBER(  amtt_r);
55   DECLARE_WRITE8_MEMBER( amtt_w);
56   DECLARE_READ8_MEMBER(  lptt_r);
57   DECLARE_WRITE8_MEMBER( lptt_w);
58   DECLARE_READ16_MEMBER( toud_r);
59   DECLARE_WRITE16_MEMBER(toud_w);
60   DECLARE_READ16_MEMBER( mchcfg_r);
61   DECLARE_WRITE16_MEMBER(mchcfg_w);
62   DECLARE_READ16_MEMBER( errsts_r);
63   DECLARE_READ16_MEMBER( errcmd_r);
64   DECLARE_WRITE16_MEMBER(errcmd_w);
65   DECLARE_READ16_MEMBER( smicmd_r);
66   DECLARE_WRITE16_MEMBER(smicmd_w);
67   DECLARE_READ16_MEMBER( scicmd_r);
68   DECLARE_WRITE16_MEMBER(scicmd_w);
69   DECLARE_READ16_MEMBER( skpd_r);
70   DECLARE_WRITE16_MEMBER(skpd_w);
71   DECLARE_READ32_MEMBER( capreg1_r);
72   DECLARE_READ8_MEMBER(  capreg2_r);
73
2674protected:
2775   virtual void device_start();
2876   virtual void device_reset();
r241837r241838
3482   int ram_size;
3583   cpu_device *cpu;
3684   dynamic_array<UINT32> ram;
85
86   UINT8 agpm, fpllcont, pam[8], smram, esmramc;
87   UINT8 apsize, amtt, lptt;
88   UINT16 toud, mchcfg, errsts, errcmd, smicmd, scicmd, skpd;
89   UINT32 agpctrl, attbase;
3790};
3891
3992class i82875p_agp_device : public agp_bridge_device {
trunk/src/emu/machine/pci.c
r241837r241838
1313   AM_RANGE(0x0c, 0x0f) AM_READ8 (header_type_r,     0x00ff0000)
1414   AM_RANGE(0x0c, 0x0f) AM_READ8 (bist_r,            0xff000000)
1515
16   AM_RANGE(0x2c, 0x2f) AM_READ16(subvendor_r,          0x0000ffff)
17   AM_RANGE(0x2c, 0x2f) AM_READ16(subsystem_r,          0xffff0000)
16   AM_RANGE(0x2c, 0x2f) AM_READ16(subvendor_r,       0x0000ffff)
17   AM_RANGE(0x2c, 0x2f) AM_READ16(subsystem_r,       0xffff0000)
18
19   AM_RANGE(0x34, 0x37) AM_READ8 (capptr_r,          0x000000ff)
1820ADDRESS_MAP_END
1921
2022pci_device::pci_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)
r241837r241838
8789   return subsystem_id;
8890}
8991
92READ8_MEMBER(pci_device::capptr_r)
93{
94   return 0x00;
95}
96
9097void pci_device::scan_sub_devices(pci_device **devices, dynamic_array<pci_device *> &all, dynamic_array<pci_device *> &bridges, device_t *root)
9198{
9299}
trunk/src/emu/machine/pci.h
r241837r241838
5252   virtual DECLARE_READ8_MEMBER(bist_r);
5353   DECLARE_READ16_MEMBER(subvendor_r);
5454   DECLARE_READ16_MEMBER(subsystem_r);
55   virtual DECLARE_READ8_MEMBER(capptr_r);
5556
5657protected:
5758   enum {


Previous 199869 Revisions Next


© 1997-2024 The MAME Team