Previous 199869 Revisions Next

r26062 Saturday 9th November, 2013 at 04:26:19 UTC by Carl
(mess) clean up the refresh bit, it's always the same as the 5170 (nw)
[src/mess/drivers]at.c
[src/mess/includes]at.h
[src/mess/machine]at.c southbridge.c southbridge.h

trunk/src/mess/machine/at.c
r26061r26062
266266READ8_MEMBER( at_state::at_portb_r )
267267{
268268   UINT8 data = m_at_speaker;
269   data &= ~0xc0; /* AT BIOS don't likes this being set */
269   data &= ~0xd0; /* AT BIOS don't likes this being set */
270270
271   /* 0x10 is the dram refresh line bit.  The 5170 (bios 1) and 5162 test the cpu clock against it in post. */
272   if ( --m_poll_delay < 0 )
273   {
274      if(m_type == TYPE_286)
275         m_poll_delay = m_at_offset1 ? 3 : 2;
276      else
277         m_poll_delay = 3;
278      m_at_offset1 ^= 0x10;
279   }
280   data = (data & ~0x10) | ( m_at_offset1 & 0x10 );
271   /* 0x10 is the dram refresh line bit, 15.085us. */
272   data |= (machine().time().as_ticks(110000) & 1) ? 0x10 : 0;
281273
282274   if (m_pit8254->get_output(2))
283275      data |= 0x20;
r26061r26062
307299{
308300   address_space& space = m_maincpu->space(AS_PROGRAM);
309301
310   if(!strncmp(m_maincpu->shortname(), "i386", 4))
311      m_type = TYPE_386;
312   else if(!strncmp(m_maincpu->shortname(), "i486", 4))
313      m_type = TYPE_486;
314   else
315      m_type = TYPE_286;
316
317302   /* MESS managed RAM */
318303   membank("bank10")->set_base(m_ram->pointer());
319304
r26061r26062
324309      space.install_write_bank(0x100000,  ram_limit - 1, "bank1");
325310      membank("bank1")->set_base(m_ram->pointer() + 0xa0000);
326311   }
327
328   if(m_type == TYPE_286)
329      m_at_offset1 = 0;
330   else
331      m_at_offset1 = 0xff;
332312}
333313
334314DRIVER_INIT_MEMBER(at_state,atcga)
r26061r26062
343323
344324DRIVER_INIT_MEMBER(at586_state,at586)
345325{
346   m_type = TYPE_586;
347   m_at_offset1 = 0xff;
348326}
349327
350328IRQ_CALLBACK_MEMBER(at_state::at_irq_callback)
r26061r26062
359337
360338MACHINE_RESET_MEMBER(at_state,at)
361339{
362   if(m_type == TYPE_286)
363      m_poll_delay = 3;
364   else
365      m_poll_delay = 4;
366340   m_at_spkrdata = 0;
367341   m_at_speaker_input = 0;
368342   m_dma_channel = -1;
trunk/src/mess/machine/southbridge.c
r26061r26062
224224   spaceio.nop_readwrite(0x00e0, 0x00ef);
225225
226226
227   m_at_offset1 = 0xff;
228227   machine().device(":maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(southbridge_device::at_irq_callback),this));
229228}
230229
r26061r26062
234233
235234void southbridge_device::device_reset()
236235{
237   m_poll_delay = 4;
238236   m_at_spkrdata = 0;
239237   m_at_speaker_input = 0;
240238   m_dma_channel = -1;
r26061r26062
454452READ8_MEMBER( southbridge_device::at_portb_r )
455453{
456454   UINT8 data = m_at_speaker;
457   data &= ~0xc0; /* AT BIOS don't likes this being set */
455   data &= ~0xd0; /* AT BIOS don't likes this being set */
458456
459   /* This needs fixing/updating not sure what this is meant to fix */
460   if ( --m_poll_delay < 0 )
461   {
462      m_poll_delay = 25;
463      m_at_offset1 ^= 0x10;
464   }
465   data = (data & ~0x10) | ( m_at_offset1 & 0x10 );
457   /* 0x10 is the dram refresh line bit on the 5170, just a timer here, 15.085us. */
458   data |= (machine().time().as_ticks(110000) & 1) ? 0x10 : 0;
466459
467460   if (m_pit8254->get_output(2))
468461      data |= 0x20;
trunk/src/mess/machine/southbridge.h
r26061r26062
109109      DECLARE_READ8_MEMBER(pc_dma_read_word);
110110      DECLARE_WRITE8_MEMBER(pc_dma_write_word);
111111protected:
112      int m_poll_delay;
113112      UINT8 m_at_spkrdata;
114113      UINT8 m_at_speaker_input;
115114      int m_dma_channel;
r26061r26062
118117      UINT8 m_at_pages[0x10];
119118      UINT16 m_dma_high_byte;
120119      UINT8 m_at_speaker;
121      UINT8 m_at_offset1;
122120      void at_speaker_set_spkrdata(UINT8 data);
123121      void at_speaker_set_input(UINT8 data);
124122
trunk/src/mess/includes/at.h
r26061r26062
5151   required_device<cpu_device> m_maincpu;
5252
5353   DECLARE_DRIVER_INIT(at586);
54
55   UINT8 m_at_offset1;
56
57   enum {
58      TYPE_586
59   };
60
61   int m_type;
6254};
6355
6456class at_state : public driver_device
r26061r26062
137129   DECLARE_WRITE16_MEMBER(neat_chipset_w);
138130   DECLARE_WRITE_LINE_MEMBER(at_mc146818_irq);
139131   DECLARE_WRITE8_MEMBER(write_rtc);
140   int m_poll_delay;
141132   UINT8 m_at_spkrdata;
142133   UINT8 m_at_speaker_input;
143134   int m_dma_channel;
r26061r26062
146137   UINT8 m_at_pages[0x10];
147138   UINT16 m_dma_high_byte;
148139   UINT8 m_at_speaker;
149   UINT8 m_at_offset1;
150140   UINT16 m_ps1_reg[2];
151141   DECLARE_READ16_MEMBER(ps1_unk_r);
152142   DECLARE_WRITE16_MEMBER(ps1_unk_w);
r26061r26062
171161   IRQ_CALLBACK_MEMBER(at_irq_callback);
172162   void init_at_common();
173163   UINT32 at_286_a20(bool state);
174
175   enum {
176      TYPE_286,
177      TYPE_386,
178      TYPE_486,
179   };
180
181   int m_type;
182164};
183165
184166
trunk/src/mess/drivers/at.c
r26061r26062
121121
122122READ8_MEMBER( at_state::ps1_kbdc_r )
123123{
124   int old_delay = m_poll_delay;
125124   UINT8 ret = at_keybc_r(space, offset, mem_mask);
126   if(old_delay == 0)
127      m_poll_delay = 8;
128125   return ret;
129126}
130127

Previous 199869 Revisions Next


© 1997-2024 The MAME Team