Previous 199869 Revisions Next

r26493 Tuesday 3rd December, 2013 at 16:06:45 UTC by Carl
i386: permit more msrs for the pentium bios (nw)
i8089: disassemble more (nw)
southbridge: refresh bit from pit1, can't do AT yet as 5170 won't boot (nw)
[src/emu/cpu/i386]i386priv.h
[src/emu/cpu/i8089]i8089_dasm.c
[src/mess/machine]southbridge.c southbridge.h

trunk/src/emu/cpu/i386/i386priv.h
r26492r26493
13981398   // Event Counters (TODO)
13991399   case 0x11:  // CESR
14001400      *valid_msr = 1;
1401      popmessage("WRMSR: Reading CESR");
1401      popmessage("RDMSR: Reading CESR");
14021402      return 0;
14031403   case 0x12:  // CTR0
14041404      *valid_msr = 1;
r26492r26493
14071407      *valid_msr = 1;
14081408      return cpustate->perfctr[1];
14091409   default:
1410      if(!(offset & ~0xf)) // 2-f are test registers
1411      {
1412         *valid_msr = 1;
1413         logerror("RDMSR: Reading test MSR %x", offset);
1414         return 0;
1415      }
14101416      logerror("RDMSR: invalid P5 MSR read %08x at %08x\n",offset,cpustate->pc-2);
14111417      *valid_msr = 0;
14121418      return 0;
r26492r26493
14471453      *valid_msr = 1;
14481454      break;
14491455   default:
1456      if(!(offset & ~0xf)) // 2-f are test registers
1457      {
1458         *valid_msr = 1;
1459         logerror("WRMSR: Writing test MSR %x", offset);
1460         break;
1461      }
14501462      logerror("WRMSR: invalid MSR write %08x (%08x%08x) at %08x\n",offset,(UINT32)(data >> 32),(UINT32)data,cpustate->pc-2);
14511463      *valid_msr = 0;
14521464      break;
trunk/src/emu/cpu/i8089/i8089_dasm.c
r26492r26493
1313
1414#include "emu.h"
1515
16INT16 displacement(offs_t &pc, int wb, const UINT8 *oprom)
16INT16 displacement(offs_t &pc, int wb, const UINT8 *oprom, bool aa1)
1717{
1818   INT16 result = 0;
1919
2020   switch (wb)
2121   {
2222   case 1:
23      return oprom[2];
23      result = oprom[2 + aa1];
2424      pc += 1;
2525      break;
2626   case 2:
27      return oprom[2] | (oprom[3] << 8);
27      result = oprom[2 + aa1] | (oprom[3 + aa1] << 8);
2828      pc += 2;
2929      break;
3030   }
r26492r26493
4545   }
4646}
4747
48UINT8 imm8(offs_t &pc, const UINT8 *oprom)
48UINT8 imm8(offs_t &pc, const UINT8 *oprom, bool aa1)
4949{
5050   pc += 1;
51   return oprom[2];
51   return oprom[2 + aa1];
5252}
5353
54UINT16 imm16(offs_t &pc, const UINT8 *oprom)
54UINT16 imm16(offs_t &pc, const UINT8 *oprom, bool aa1)
5555{
5656   pc += 2;
57   return oprom[2] | (oprom[3] << 8);
57   return oprom[2 + aa1] | (oprom[3 + aa1] << 8);
5858}
5959
6060#define BRP brp_name[brp]
61#define SDISP displacement(pc, wb, oprom)
61#define SDISP displacement(pc, wb, oprom, (aa == 1))
6262#define OFFSET(x) offset(x, pc, aa, mm, oprom)
63#define IMM8 imm8(pc, oprom)
64#define IMM16 imm16(pc, oprom)
63#define IMM8 imm8(pc, oprom, (aa == 1))
64#define IMM16 imm16(pc, oprom, (aa == 1))
6565
6666CPU_DISASSEMBLE( i8089 )
6767{
r26492r26493
107107      if (w) sprintf(buffer, "addi %s, %04x", BRP, IMM16);
108108      else   sprintf(buffer, "addbi %s, %02x", BRP, IMM8);
109109      break;
110   case 0x09:
111      if (w) sprintf(buffer, "ori %s, %04x", BRP, IMM16);
112      else   sprintf(buffer, "orbi %s, %02x", BRP, IMM8);
113      break;
110114   case 0x0a:
111115      if (w) sprintf(buffer, "andi %s, %04x", BRP, IMM16);
112116      else   sprintf(buffer, "andbi %s, %02x", BRP, IMM8);
113117      break;
118   case 0x0b:
119      sprintf(buffer, "not %s", BRP);
120      break;
114121   case 0x0c:
115122      if (w) sprintf(buffer, "movi %s, %04x", BRP, IMM16);
116123      else   sprintf(buffer, "movbi %s, %02x", BRP, IMM8);
117124      break;
125   case 0x0e:
126      sprintf(buffer, "inc %s", BRP);
127      break;
118128   case 0x0f:
119129      sprintf(buffer, "dec %s", BRP);
120130      break;
131   case 0x10:
132      sprintf(buffer, "jnz %s, %06x", BRP, pc + SDISP);
133      break;
134   case 0x11:
135      sprintf(buffer, "jz %s, %06x", BRP, pc + SDISP);
136      break;
121137   case 0x12:
122138      sprintf(buffer, "hlt");
123139      break;
140   case 0x13:
141      OFFSET(o);
142      if (w) sprintf(buffer, "movi %s, %04x", o, IMM16);
143      else   sprintf(buffer, "movbi %s, %02x", o, IMM8);
144      break;
145   case 0x20:
146      OFFSET(o);
147      if (w) sprintf(buffer, "mov %s, %s", BRP, o);
148      else   sprintf(buffer, "movb %s, %s", BRP, o);
149      break;
150   case 0x21:
151      OFFSET(o);
152      if (w) sprintf(buffer, "mov %s, %s", o, BRP);
153      else   sprintf(buffer, "movb %s, %s", o, BRP);
154      break;
124155   case 0x22:
125156      OFFSET(o);
126157      sprintf(buffer, "lpd %s, %s", BRP, o);
127158      break;
159   case 0x23:
160      OFFSET(o);
161      sprintf(buffer, "movp %s, %s", BRP, o);
162      break;
163   case 0x24:
164   {
165      char buf[20];
166      OFFSET(o);
167      pc += cpu_disassemble_i8089(device, buf, pc, oprom + (pc - ppc), opram, options) & 0xffff;
168      if(w) sprintf(buffer, "mov %s, %s", buf, o);
169      else sprintf(buffer, "movb %s, %s", buf, o);
170      break;
171   }
172   case 0x26:
173      OFFSET(o);
174      sprintf(buffer, "movp %s, %s", o, BRP);
175      break;
176   case 0x27:
177      OFFSET(o);
178      sprintf(buffer, "call %s, %06x", o, pc + SDISP);
179      flags = DASMFLAG_STEP_OVER;
180      break;
128181   case 0x28:
129182      OFFSET(o);
130183      if (w) sprintf(buffer, "add %s, %s", BRP, o);
131184      else   sprintf(buffer, "addb %s, %s", BRP, o);
132185      break;
186   case 0x29:
187      OFFSET(o);
188      if (w) sprintf(buffer, "or %s, %s", BRP, o);
189      else   sprintf(buffer, "orb %s, %s", BRP, o);
190      break;
133191   case 0x2a:
134192      OFFSET(o);
135193      if (w) sprintf(buffer, "and %s, %s", BRP, o);
136194      else   sprintf(buffer, "andb %s, %s", BRP, o);
137195      break;
138   case 0x27:
196   case 0x2b:
139197      OFFSET(o);
140      sprintf(buffer, "call %s, %06x", o, ppc + SDISP);
141      flags = DASMFLAG_STEP_OVER;
198      if(w) sprintf(buffer, "not %s, %s", BRP, o);
199      else sprintf(buffer, "notb %s, %s", BRP, o);
142200      break;
201   case 0x2c:
202      OFFSET(o);
203      sprintf(buffer, "jmce %s, %06x", o, pc + SDISP);
204      break;
205   case 0x2d:
206      OFFSET(o);
207      sprintf(buffer, "jmcne %s, %06x", o, pc + SDISP);
208      break;
209   case 0x2e:
210      OFFSET(o);
211      sprintf(buffer, "jnbt %s, %d, %06x", o, brp, pc + SDISP);
212      break;
213   case 0x2f:
214      OFFSET(o);
215      sprintf(buffer, "jbt %s, %d, %06x", o, brp, pc + SDISP);
216      break;
143217   case 0x30:
144218      OFFSET(o);
145219      if (w) sprintf(buffer, "addi %s, %04x", o, IMM16);
146220      else   sprintf(buffer, "addbi %s, %02x", o, IMM8);
147221      break;
222   case 0x31:
223      OFFSET(o);
224      if (w) sprintf(buffer, "ori %s, %04x", o, IMM16);
225      else   sprintf(buffer, "ori %s, %02x", o, IMM8);
226      break;
148227   case 0x32:
149228      OFFSET(o);
150229      if (w) sprintf(buffer, "andi %s, %04x", o, IMM16);
151230      else   sprintf(buffer, "andbi %s, %02x", o, IMM8);
152231      break;
232   case 0x33:
233      OFFSET(o);
234      sprintf(buffer, "%s", o);
235      break;
153236   case 0x34:
154237      OFFSET(o);
155238      if (w) sprintf(buffer, "add %s, %s", o, BRP);
156239      else   sprintf(buffer, "addb %s, %s", o, BRP);
157240      break;
241   case 0x35:
242      OFFSET(o);
243      if (w) sprintf(buffer, "or %s, %s", o, BRP);
244      else   sprintf(buffer, "orb %s, %s", o, BRP);
245      break;
158246   case 0x36:
159247      OFFSET(o);
160248      if (w) sprintf(buffer, "and %s, %s", o, BRP);
161249      else   sprintf(buffer, "andb %s, %s", o, BRP);
162250      break;
251   case 0x37:
252      OFFSET(o);
253      if(w) sprintf(buffer, "not %s", o);
254      else sprintf(buffer, "notb %s", o);
255      break;
256   case 0x38:
257      OFFSET(o);
258      if(w) sprintf(buffer, "jnz %s, %06x", o, pc + SDISP);
259      else sprintf(buffer, "jnzb %s, %06x", o, pc + SDISP);
260      break;
261   case 0x39:
262      OFFSET(o);
263      if(w) sprintf(buffer, "jz %s, %06x", o, pc + SDISP);
264      else sprintf(buffer, "jzb %s, %06x", o, pc + SDISP);
265      break;
266   case 0x3a:
267      OFFSET(o);
268      if (w) sprintf(buffer, "inc %s", o);
269      else   sprintf(buffer, "incb %s", o);
270      break;
163271   case 0x3b:
164272      OFFSET(o);
165273      if (w) sprintf(buffer, "dec %s", o);
166274      else   sprintf(buffer, "decb %s", o);
167275      break;
276   case 0x3d:
277      OFFSET(o);
278      sprintf(buffer, "set %s, %d", o, brp);
279      break;
168280   case 0x3e:
169281      OFFSET(o);
170282      sprintf(buffer, "clr %s, %d", o, brp);
trunk/src/mess/machine/southbridge.c
r26492r26493
2020      }, {
2121         4772720/4,              /* dram refresh */
2222         DEVCB_NULL,
23         DEVCB_NULL
23         DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, southbridge_device, at_pit8254_out1_changed)
2424      }, {
2525         4772720/4,              /* pio port c pin 4, and speaker polling enough */
2626         DEVCB_NULL,
r26492r26493
286286      m_pic8259_master->ir0_w(state);
287287}
288288
289WRITE_LINE_MEMBER( southbridge_device::at_pit8254_out1_changed )
290{
291   if(state)
292      m_refresh = !m_refresh;
293}
289294
290295WRITE_LINE_MEMBER( southbridge_device::at_pit8254_out2_changed )
291296{
r26492r26493
455460   data &= ~0xd0; /* AT BIOS don't likes this being set */
456461
457462   /* 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;
463   data |= m_refresh ? 0x10 : 0;
459464
460465   if (m_pit8254->get_output(2))
461466      data |= 0x20;
trunk/src/mess/machine/southbridge.h
r26492r26493
7070      DECLARE_WRITE8_MEMBER(at_portb_w);
7171      DECLARE_READ8_MEMBER(get_slave_ack);
7272      DECLARE_WRITE_LINE_MEMBER(at_pit8254_out0_changed);
73      DECLARE_WRITE_LINE_MEMBER(at_pit8254_out1_changed);
7374      DECLARE_WRITE_LINE_MEMBER(at_pit8254_out2_changed);
7475      DECLARE_WRITE_LINE_MEMBER(pc_dma_hrq_changed);
7576      DECLARE_READ8_MEMBER(pc_dma8237_0_dack_r);
r26492r26493
117118      UINT8 m_at_pages[0x10];
118119      UINT16 m_dma_high_byte;
119120      UINT8 m_at_speaker;
121      bool m_refresh;
120122      void at_speaker_set_spkrdata(UINT8 data);
121123      void at_speaker_set_input(UINT8 data);
122124

Previous 199869 Revisions Next


© 1997-2024 The MAME Team