Previous 199869 Revisions Next

r26209 Saturday 16th November, 2013 at 22:14:47 UTC by R. Belmont
Continuing with "old GCC" fixes. (nw)
[src/emu/cpu/i86]i286.c i286.h

trunk/src/emu/cpu/i86/i286.c
r26208r26209
10571057               {
10581058                  case 0:
10591059                     if(!PM)
1060                        throw TRAP(FAULT_UD, -1);
1060                        throw TRAP(FAULT_UD, (UINT16)-1);
10611061                     m_modrm = fetch();
10621062                     switch (m_modrm & 0x38)
10631063                     {
r26208r26209
11501150                           break;
11511151
11521152                        default:
1153                           throw TRAP(FAULT_UD, -1);
1153                           throw TRAP(FAULT_UD, (UINT16)-1);
11541154                     }
11551155                     break;
11561156                  case 1:
r26208r26209
11581158                     UINT32 ea;
11591159                     m_modrm = fetch();
11601160                     if((m_modrm >= 0xc0) && (m_modrm < 0xe0))
1161                        throw TRAP(FAULT_UD, -1);
1161                        throw TRAP(FAULT_UD, (UINT16)-1);
11621162                     switch (m_modrm & 0x38)
11631163                     {
11641164                        case 0: /* sgdt */
r26208r26209
11971197                           m_msw = (m_msw & 1) | msw;
11981198                           break;
11991199                        default:
1200                           throw TRAP(FAULT_UD, -1);
1200                           throw TRAP(FAULT_UD, (UINT16)-1);
12011201                     }
12021202                     break;
12031203                  }
12041204                  case 2: /* LAR */
12051205                     if(!PM)
1206                        throw TRAP(FAULT_UD, -1);
1206                        throw TRAP(FAULT_UD, (UINT16)-1);
12071207                     m_modrm = fetch_op();
12081208                     tmp = GetRMWord();
12091209                     if((addr = selector_address(tmp)) == -1)
r26208r26209
12261226                     break;
12271227                  case 3: /* LSL */
12281228                     if(!PM)
1229                        throw TRAP(FAULT_UD, -1);
1229                        throw TRAP(FAULT_UD, (UINT16)-1);
12301230                     m_modrm = fetch_op();
12311231                     tmp = GetRMWord();
12321232                     if((addr = selector_address(tmp)) == -1)
r26208r26209
12911291                     m_msw &= ~8;
12921292                     break;
12931293                  default:
1294                     throw TRAP(FAULT_UD, -1);
1294                     throw TRAP(FAULT_UD, (UINT16)-1);
12951295               }
12961296               break;
12971297            }
r26208r26209
13581358            case 0x63: // arpl
13591359            {
13601360               UINT16 tmp, source;
1361               if (!PM) throw TRAP(FAULT_UD,-1);
1361               if (!PM) throw TRAP(FAULT_UD,(UINT16)-1);
13621362
13631363               m_modrm=fetch_op();
13641364               tmp=GetRMWord();
r26208r26209
14421442                     break;
14431443                  default:
14441444                     logerror("%s: %06x: Mov Sreg - Invalid register\n", tag(), pc());
1445                     throw TRAP(FAULT_UD, -1);
1445                     throw TRAP(FAULT_UD, (UINT16)-1);
14461446               }
14471447               break;
14481448
r26208r26209
14711471
14721472            case 0x9b: // i_wait
14731473               if((m_msw & 0x0a) == 0x0a)
1474                  throw TRAP(FAULT_NM, -1);
1474                  throw TRAP(FAULT_NM, (UINT16)-1);
14751475               CLK(WAIT);
14761476               break;
14771477
r26208r26209
15501550            {
15511551               m_modrm = fetch();
15521552               if(m_modrm >= 0xc0)
1553                  throw TRAP(FAULT_UD, -1);
1553                  throw TRAP(FAULT_UD, (UINT16)-1);
15541554               UINT16 tmp = GetRMWord();
15551555               data_descriptor(ES, GetnextRMWord());
15561556               RegWord(tmp);
r26208r26209
15621562            {
15631563               m_modrm = fetch();
15641564               if(m_modrm >= 0xc0)
1565                  throw TRAP(FAULT_UD, -1);
1565                  throw TRAP(FAULT_UD, (UINT16)-1);
15661566               UINT16 tmp = GetRMWord();
15671567               data_descriptor(DS, GetnextRMWord());
15681568               RegWord(tmp);
r26208r26209
16841684            case 0xde:
16851685            case 0xdf:
16861686               if((m_msw & 8) || (m_msw & 4))
1687                  throw TRAP(FAULT_NM, -1);
1687                  throw TRAP(FAULT_NM, (UINT16)-1);
16881688               m_modrm = fetch();
16891689               GetRMByte();
16901690               CLK(NOP);
r26208r26209
17821782                     break;
17831783                  default:
17841784                     logerror("%s: %06x: FF Pre with unimplemented mod\n", tag(), pc());
1785                     throw TRAP(FAULT_UD,-1);
1785                     throw TRAP(FAULT_UD,(UINT16)-1);
17861786                  }
17871787               }
17881788               break;
r26208r26209
18191819                  m_icount -= 10; // UD fault timing?
18201820                  logerror("%s: %06x: Invalid Opcode %02x\n", tag(), pc(), op);
18211821                  m_ip = m_prev_ip;
1822                  throw TRAP(FAULT_UD, -1);
1822                  throw TRAP(FAULT_UD, (UINT16)-1);
18231823               }
18241824               break;
18251825         }
trunk/src/emu/cpu/i86/i286.h
r26208r26209
8080   virtual void execute_set_input(int inputnum, int state);
8181   bool memory_translate(address_spacenum spacenum, int intention, offs_t &address);
8282
83   virtual void interrupt(int int_num, int trap = 1) { if(trap) throw TRAP(int_num, -1); else interrupt_descriptor(int_num, 0, 0); }
83   virtual void interrupt(int int_num, int trap = 1) { if(trap) throw TRAP(int_num, (UINT16)-1); else interrupt_descriptor(int_num, 0, 0); }
8484   virtual UINT8 read_port_byte(UINT16 port);
8585   virtual UINT16 read_port_word(UINT16 port);
8686   virtual void write_port_byte(UINT16 port, UINT8 data);

Previous 199869 Revisions Next


© 1997-2024 The MAME Team