Previous 199869 Revisions Next

r33022 Monday 27th October, 2014 at 22:10:48 UTC by Carl
i386: zero descriptors and stack size (nw)
[src/emu/cpu/i386]i386.c i386op16.inc i386op32.inc

trunk/src/emu/cpu/i386/i386.c
r241533r241534
125125   UINT32 base, limit;
126126   int entry;
127127
128   if(!seg->selector)
129   {
130      seg->flags = 0;
131      seg->base = 0;
132      seg->limit = 0;
133      seg->d = 0;
134      seg->valid = false;
135      return 0;
136   }
137
128138   if ( seg->selector & 0x4 )
129139   {
130140      base = m_ldtr.base;
r241533r241534
147157   if (seg->flags & 0x8000)
148158      seg->limit = (seg->limit << 12) | 0xfff;
149159   seg->d = (seg->flags & 0x4000) ? 1 : 0;
150   seg->valid = (seg->selector & ~3)?(true):(false);
160   seg->valid = true;
151161
152162   if(desc)
153163      *desc = ((UINT64)v2<<32)|v1;
r241533r241534
212222      if (!V8086_MODE)
213223      {
214224         i386_load_protected_mode_segment(&m_sreg[segment], NULL );
215         i386_set_descriptor_accessed(m_sreg[segment].selector);
225         if(m_sreg[segment].selector)
226            i386_set_descriptor_accessed(m_sreg[segment].selector);
216227      }
217228      else
218229      {
r241533r241534
31323143   save_item(NAME(m_sreg[ES].base));
31333144   save_item(NAME(m_sreg[ES].limit));
31343145   save_item(NAME(m_sreg[ES].flags));
3146   save_item(NAME(m_sreg[ES].d));
31353147   save_item(NAME(m_sreg[CS].selector));
31363148   save_item(NAME(m_sreg[CS].base));
31373149   save_item(NAME(m_sreg[CS].limit));
31383150   save_item(NAME(m_sreg[CS].flags));
3151   save_item(NAME(m_sreg[CS].d));
31393152   save_item(NAME(m_sreg[SS].selector));
31403153   save_item(NAME(m_sreg[SS].base));
31413154   save_item(NAME(m_sreg[SS].limit));
31423155   save_item(NAME(m_sreg[SS].flags));
3156   save_item(NAME(m_sreg[SS].d));
31433157   save_item(NAME(m_sreg[DS].selector));
31443158   save_item(NAME(m_sreg[DS].base));
31453159   save_item(NAME(m_sreg[DS].limit));
31463160   save_item(NAME(m_sreg[DS].flags));
3161   save_item(NAME(m_sreg[DS].d));
31473162   save_item(NAME(m_sreg[FS].selector));
31483163   save_item(NAME(m_sreg[FS].base));
31493164   save_item(NAME(m_sreg[FS].limit));
31503165   save_item(NAME(m_sreg[FS].flags));
3166   save_item(NAME(m_sreg[FS].d));
31513167   save_item(NAME(m_sreg[GS].selector));
31523168   save_item(NAME(m_sreg[GS].base));
31533169   save_item(NAME(m_sreg[GS].limit));
31543170   save_item(NAME(m_sreg[GS].flags));
3171   save_item(NAME(m_sreg[GS].d));
31553172   save_item(NAME(m_eip));
31563173   save_item(NAME(m_prev_eip));
31573174   save_item(NAME(m_CF));
trunk/src/emu/cpu/i386/i386op16.inc
r241533r241534
17461746
17471747void i386_device::i386_push_ax()           // Opcode 0x50
17481748{
1749   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1750   if(i386_limit_check(SS,offset-2) == 0)
1749   UINT32 offset;
1750   if(STACK_32BIT)
1751      offset = REG32(ESP) - 2;
1752   else
1753      offset = (REG16(SP) - 2) & 0xffff;
1754   if(i386_limit_check(SS,offset) == 0)
17511755      PUSH16(REG16(AX) );
17521756   else
17531757      FAULT(FAULT_SS,0)
r241533r241534
17561760
17571761void i386_device::i386_push_cx()           // Opcode 0x51
17581762{
1759   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1760   if(i386_limit_check(SS,offset-2) == 0)
1763   UINT32 offset;
1764   if(STACK_32BIT)
1765      offset = REG32(ESP) - 2;
1766   else
1767      offset = (REG16(SP) - 2) & 0xffff;
1768   if(i386_limit_check(SS,offset) == 0)
17611769      PUSH16(REG16(CX) );
17621770   else
17631771      FAULT(FAULT_SS,0)
r241533r241534
17661774
17671775void i386_device::i386_push_dx()           // Opcode 0x52
17681776{
1769   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1770   if(i386_limit_check(SS,offset-2) == 0)
1777   UINT32 offset;
1778   if(STACK_32BIT)
1779      offset = REG32(ESP) - 2;
1780   else
1781      offset = (REG16(SP) - 2) & 0xffff;
1782   if(i386_limit_check(SS,offset) == 0)
17711783      PUSH16(REG16(DX) );
17721784   else
17731785      FAULT(FAULT_SS,0)
r241533r241534
17761788
17771789void i386_device::i386_push_bx()           // Opcode 0x53
17781790{
1779   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1780   if(i386_limit_check(SS,offset-2) == 0)
1791   UINT32 offset;
1792   if(STACK_32BIT)
1793      offset = REG32(ESP) - 2;
1794   else
1795      offset = (REG16(SP) - 2) & 0xffff;
1796   if(i386_limit_check(SS,offset) == 0)
17811797      PUSH16(REG16(BX) );
17821798   else
17831799      FAULT(FAULT_SS,0)
r241533r241534
17861802
17871803void i386_device::i386_push_sp()           // Opcode 0x54
17881804{
1789   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1790   if(i386_limit_check(SS,offset-2) == 0)
1805   UINT32 offset;
1806   if(STACK_32BIT)
1807      offset = REG32(ESP) - 2;
1808   else
1809      offset = (REG16(SP) - 2) & 0xffff;
1810   if(i386_limit_check(SS,offset) == 0)
17911811      PUSH16(REG16(SP) );
17921812   else
17931813      FAULT(FAULT_SS,0)
r241533r241534
17961816
17971817void i386_device::i386_push_bp()           // Opcode 0x55
17981818{
1799   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1800   if(i386_limit_check(SS,offset-2) == 0)
1819   UINT32 offset;
1820   if(STACK_32BIT)
1821      offset = REG32(ESP) - 2;
1822   else
1823      offset = (REG16(SP) - 2) & 0xffff;
1824   if(i386_limit_check(SS,offset) == 0)
18011825      PUSH16(REG16(BP) );
18021826   else
18031827      FAULT(FAULT_SS,0)
r241533r241534
18061830
18071831void i386_device::i386_push_si()           // Opcode 0x56
18081832{
1809   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1810   if(i386_limit_check(SS,offset-2) == 0)
1833   UINT32 offset;
1834   if(STACK_32BIT)
1835      offset = REG32(ESP) - 2;
1836   else
1837      offset = (REG16(SP) - 2) & 0xffff;
1838   if(i386_limit_check(SS,offset) == 0)
18111839      PUSH16(REG16(SI) );
18121840   else
18131841      FAULT(FAULT_SS,0)
r241533r241534
18161844
18171845void i386_device::i386_push_di()           // Opcode 0x57
18181846{
1819   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1820   if(i386_limit_check(SS,offset-2) == 0)
1847   UINT32 offset;
1848   if(STACK_32BIT)
1849      offset = REG32(ESP) - 2;
1850   else
1851      offset = (REG16(SP) - 2) & 0xffff;
1852   if(i386_limit_check(SS,offset) == 0)
18211853      PUSH16(REG16(DI) );
18221854   else
18231855      FAULT(FAULT_SS,0)
r241533r241534
18261858
18271859void i386_device::i386_push_cs16()         // Opcode 0x0e
18281860{
1829   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1830   if(i386_limit_check(SS,offset-2) == 0)
1861   UINT32 offset;
1862   if(STACK_32BIT)
1863      offset = REG32(ESP) - 2;
1864   else
1865      offset = (REG16(SP) - 2) & 0xffff;
1866   if(i386_limit_check(SS,offset) == 0)
18311867      PUSH16(m_sreg[CS].selector );
18321868   else
18331869      FAULT(FAULT_SS,0)
r241533r241534
18361872
18371873void i386_device::i386_push_ds16()         // Opcode 0x1e
18381874{
1839   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1840   if(i386_limit_check(SS,offset-2) == 0)
1875   UINT32 offset;
1876   if(STACK_32BIT)
1877      offset = REG32(ESP) - 2;
1878   else
1879      offset = (REG16(SP) - 2) & 0xffff;
1880   if(i386_limit_check(SS,offset) == 0)
18411881      PUSH16(m_sreg[DS].selector );
18421882   else
18431883      FAULT(FAULT_SS,0)
r241533r241534
18461886
18471887void i386_device::i386_push_es16()         // Opcode 0x06
18481888{
1849   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1850   if(i386_limit_check(SS,offset-2) == 0)
1889   UINT32 offset;
1890   if(STACK_32BIT)
1891      offset = REG32(ESP) - 2;
1892   else
1893      offset = (REG16(SP) - 2) & 0xffff;
1894   if(i386_limit_check(SS,offset) == 0)
18511895      PUSH16(m_sreg[ES].selector );
18521896   else
18531897      FAULT(FAULT_SS,0)
r241533r241534
18561900
18571901void i386_device::i386_push_fs16()         // Opcode 0x0f a0
18581902{
1859   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1860   if(i386_limit_check(SS,offset-2) == 0)
1903   UINT32 offset;
1904   if(STACK_32BIT)
1905      offset = REG32(ESP) - 2;
1906   else
1907      offset = (REG16(SP) - 2) & 0xffff;
1908   if(i386_limit_check(SS,offset) == 0)
18611909      PUSH16(m_sreg[FS].selector );
18621910   else
18631911      FAULT(FAULT_SS,0)
r241533r241534
18661914
18671915void i386_device::i386_push_gs16()         // Opcode 0x0f a8
18681916{
1869   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1870   if(i386_limit_check(SS,offset-2) == 0)
1917   UINT32 offset;
1918   if(STACK_32BIT)
1919      offset = REG32(ESP) - 2;
1920   else
1921      offset = (REG16(SP) - 2) & 0xffff;
1922   if(i386_limit_check(SS,offset) == 0)
18711923      PUSH16(m_sreg[GS].selector );
18721924   else
18731925      FAULT(FAULT_SS,0)
r241533r241534
18761928
18771929void i386_device::i386_push_ss16()         // Opcode 0x16
18781930{
1879   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1880   if(i386_limit_check(SS,offset-2) == 0)
1931   UINT32 offset;
1932   if(STACK_32BIT)
1933      offset = REG32(ESP) - 2;
1934   else
1935      offset = (REG16(SP) - 2) & 0xffff;
1936   if(i386_limit_check(SS,offset) == 0)
18811937      PUSH16(m_sreg[SS].selector );
18821938   else
18831939      FAULT(FAULT_SS,0)
r241533r241534
18871943void i386_device::i386_push_i16()          // Opcode 0x68
18881944{
18891945   UINT16 value = FETCH16();
1890   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1891   if(i386_limit_check(SS,offset-2) == 0)
1946   UINT32 offset;
1947   if(STACK_32BIT)
1948      offset = REG32(ESP) - 2;
1949   else
1950      offset = (REG16(SP) - 2) & 0xffff;
1951   if(i386_limit_check(SS,offset) == 0)
18921952      PUSH16(value);
18931953   else
18941954      FAULT(FAULT_SS,0)
r241533r241534
18981958void i386_device::i386_pusha()             // Opcode 0x60
18991959{
19001960   UINT16 temp = REG16(SP);
1901   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1902   if(i386_limit_check(SS,offset-16) == 0)
1961   UINT32 offset;
1962   if(STACK_32BIT)
1963      offset = REG32(ESP) - 16;
1964   else
1965      offset = (REG16(SP) - 16) & 0xffff;
1966   if(i386_limit_check(SS,offset) == 0)
19031967   {
19041968      PUSH16(REG16(AX) );
19051969      PUSH16(REG16(CX) );
r241533r241534
19171981
19181982void i386_device::i386_pushf()             // Opcode 0x9c
19191983{
1920   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1921   if(i386_limit_check(SS,offset-2) == 0)
1984   UINT32 offset;
1985   if(STACK_32BIT)
1986      offset = REG32(ESP) - 2;
1987   else
1988      offset = (REG16(SP) - 2) & 0xffff;
1989   if(i386_limit_check(SS,offset) == 0)
19221990      PUSH16(get_flags() & 0xffff );
19231991   else
19241992      FAULT(FAULT_SS,0)
trunk/src/emu/cpu/i386/i386op32.inc
r241533r241534
15991599
16001600void i386_device::i386_push_eax()          // Opcode 0x50
16011601{
1602   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1603   if(i386_limit_check(SS,offset-4) == 0)
1602   UINT32 offset;
1603   if(STACK_32BIT)
1604      offset = REG32(ESP) - 4;
1605   else
1606      offset = (REG16(SP) - 4) & 0xffff;
1607   if(i386_limit_check(SS,offset) == 0)
16041608      PUSH32(REG32(EAX) );
16051609   else
16061610      FAULT(FAULT_SS,0)
r241533r241534
16091613
16101614void i386_device::i386_push_ecx()          // Opcode 0x51
16111615{
1612   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1613   if(i386_limit_check(SS,offset-4) == 0)
1616   UINT32 offset;
1617   if(STACK_32BIT)
1618      offset = REG32(ESP) - 4;
1619   else
1620      offset = (REG16(SP) - 4) & 0xffff;
1621   if(i386_limit_check(SS,offset) == 0)
16141622      PUSH32(REG32(ECX) );
16151623   else
16161624      FAULT(FAULT_SS,0)
r241533r241534
16191627
16201628void i386_device::i386_push_edx()          // Opcode 0x52
16211629{
1622   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1623   if(i386_limit_check(SS,offset-4) == 0)
1630   UINT32 offset;
1631   if(STACK_32BIT)
1632      offset = REG32(ESP) - 4;
1633   else
1634      offset = (REG16(SP) - 4) & 0xffff;
1635   if(i386_limit_check(SS,offset) == 0)
16241636      PUSH32(REG32(EDX) );
16251637   else
16261638      FAULT(FAULT_SS,0)
r241533r241534
16291641
16301642void i386_device::i386_push_ebx()          // Opcode 0x53
16311643{
1632   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1633   if(i386_limit_check(SS,offset-4) == 0)
1644   UINT32 offset;
1645   if(STACK_32BIT)
1646      offset = REG32(ESP) - 4;
1647   else
1648      offset = (REG16(SP) - 4) & 0xffff;
1649   if(i386_limit_check(SS,offset) == 0)
16341650      PUSH32(REG32(EBX) );
16351651   else
16361652      FAULT(FAULT_SS,0)
r241533r241534
16391655
16401656void i386_device::i386_push_esp()          // Opcode 0x54
16411657{
1642   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1643   if(i386_limit_check(SS,offset-4) == 0)
1658   UINT32 offset;
1659   if(STACK_32BIT)
1660      offset = REG32(ESP) - 4;
1661   else
1662      offset = (REG16(SP) - 4) & 0xffff;
1663   if(i386_limit_check(SS,offset) == 0)
16441664      PUSH32(REG32(ESP) );
16451665   else
16461666      FAULT(FAULT_SS,0)
r241533r241534
16491669
16501670void i386_device::i386_push_ebp()          // Opcode 0x55
16511671{
1652   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1653   if(i386_limit_check(SS,offset-4) == 0)
1672   UINT32 offset;
1673   if(STACK_32BIT)
1674      offset = REG32(ESP) - 4;
1675   else
1676      offset = (REG16(SP) - 4) & 0xffff;
1677   if(i386_limit_check(SS,offset) == 0)
16541678      PUSH32(REG32(EBP) );
16551679   else
16561680      FAULT(FAULT_SS,0)
r241533r241534
16591683
16601684void i386_device::i386_push_esi()          // Opcode 0x56
16611685{
1662   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1663   if(i386_limit_check(SS,offset-4) == 0)
1686   UINT32 offset;
1687   if(STACK_32BIT)
1688      offset = REG32(ESP) - 4;
1689   else
1690      offset = (REG16(SP) - 4) & 0xffff;
1691   if(i386_limit_check(SS,offset) == 0)
16641692      PUSH32(REG32(ESI) );
16651693   else
16661694      FAULT(FAULT_SS,0)
r241533r241534
16691697
16701698void i386_device::i386_push_edi()          // Opcode 0x57
16711699{
1672   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1673   if(i386_limit_check(SS,offset-4) == 0)
1700   UINT32 offset;
1701   if(STACK_32BIT)
1702      offset = REG32(ESP) - 4;
1703   else
1704      offset = (REG16(SP) - 4) & 0xffff;
1705   if(i386_limit_check(SS,offset) == 0)
16741706      PUSH32(REG32(EDI) );
16751707   else
16761708      FAULT(FAULT_SS,0)
r241533r241534
16791711
16801712void i386_device::i386_push_cs32()         // Opcode 0x0e
16811713{
1682   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1683   if(i386_limit_check(SS,offset-4) == 0)
1714   UINT32 offset;
1715   if(STACK_32BIT)
1716      offset = REG32(ESP) - 4;
1717   else
1718      offset = (REG16(SP) - 4) & 0xffff;
1719   if(i386_limit_check(SS,offset) == 0)
16841720      PUSH32(m_sreg[CS].selector );
16851721   else
16861722      FAULT(FAULT_SS,0)
r241533r241534
16891725
16901726void i386_device::i386_push_ds32()         // Opcode 0x1e
16911727{
1692   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1693   if(i386_limit_check(SS,offset-4) == 0)
1728   UINT32 offset;
1729   if(STACK_32BIT)
1730      offset = REG32(ESP) - 4;
1731   else
1732      offset = (REG16(SP) - 4) & 0xffff;
1733   if(i386_limit_check(SS,offset) == 0)
16941734      PUSH32(m_sreg[DS].selector );
16951735   else
16961736      FAULT(FAULT_SS,0)
r241533r241534
16991739
17001740void i386_device::i386_push_es32()         // Opcode 0x06
17011741{
1702   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1703   if(i386_limit_check(SS,offset-4) == 0)
1742   UINT32 offset;
1743   if(STACK_32BIT)
1744      offset = REG32(ESP) - 4;
1745   else
1746      offset = (REG16(SP) - 4) & 0xffff;
1747   if(i386_limit_check(SS,offset) == 0)
17041748      PUSH32(m_sreg[ES].selector );
17051749   else
17061750      FAULT(FAULT_SS,0)
r241533r241534
17091753
17101754void i386_device::i386_push_fs32()         // Opcode 0x0f a0
17111755{
1712   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1713   if(i386_limit_check(SS,offset-4) == 0)
1756   UINT32 offset;
1757   if(STACK_32BIT)
1758      offset = REG32(ESP) - 4;
1759   else
1760      offset = (REG16(SP) - 4) & 0xffff;
1761   if(i386_limit_check(SS,offset) == 0)
17141762      PUSH32(m_sreg[FS].selector );
17151763   else
17161764      FAULT(FAULT_SS,0)
r241533r241534
17191767
17201768void i386_device::i386_push_gs32()         // Opcode 0x0f a8
17211769{
1722   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1723   if(i386_limit_check(SS,offset-4) == 0)
1770   UINT32 offset;
1771   if(STACK_32BIT)
1772      offset = REG32(ESP) - 4;
1773   else
1774      offset = (REG16(SP) - 4) & 0xffff;
1775   if(i386_limit_check(SS,offset) == 0)
17241776      PUSH32(m_sreg[GS].selector );
17251777   else
17261778      FAULT(FAULT_SS,0)
r241533r241534
17291781
17301782void i386_device::i386_push_ss32()         // Opcode 0x16
17311783{
1732   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1733   if(i386_limit_check(SS,offset-4) == 0)
1784   UINT32 offset;
1785   if(STACK_32BIT)
1786      offset = REG32(ESP) - 4;
1787   else
1788      offset = (REG16(SP) - 4) & 0xffff;
1789   if(i386_limit_check(SS,offset) == 0)
17341790      PUSH32(m_sreg[SS].selector );
17351791   else
17361792      FAULT(FAULT_SS,0)
r241533r241534
17401796void i386_device::i386_push_i32()          // Opcode 0x68
17411797{
17421798   UINT32 value = FETCH32();
1743   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1744   if(i386_limit_check(SS,offset-4) == 0)
1799   UINT32 offset;
1800   if(STACK_32BIT)
1801      offset = REG32(ESP) - 4;
1802   else
1803      offset = (REG16(SP) - 4) & 0xffff;
1804   if(i386_limit_check(SS,offset) == 0)
17451805      PUSH32(value);
17461806   else
17471807      FAULT(FAULT_SS,0)
r241533r241534
17511811void i386_device::i386_pushad()            // Opcode 0x60
17521812{
17531813   UINT32 temp = REG32(ESP);
1754   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1755   if(i386_limit_check(SS,offset-32) == 0)
1814   UINT32 offset;
1815   if(STACK_32BIT)
1816      offset = REG32(ESP) - 32;
1817   else
1818      offset = (REG16(SP) - 32) & 0xffff;
1819   if(i386_limit_check(SS,offset) == 0)
17561820   {
17571821      PUSH32(REG32(EAX) );
17581822      PUSH32(REG32(ECX) );
r241533r241534
17721836{
17731837   if(!m_IOP1 && !m_IOP2 && V8086_MODE)
17741838      FAULT(FAULT_GP,0)
1775   UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
1776   if(i386_limit_check(SS,offset-4) == 0)
1839      UINT32 offset;
1840      if(STACK_32BIT)
1841         offset = REG32(ESP) - 4;
1842      else
1843         offset = (REG16(SP) - 4) & 0xffff;
1844   if(i386_limit_check(SS,offset) == 0)
17771845      PUSH32(get_flags() & 0x00fcffff );
17781846   else
17791847      FAULT(FAULT_SS,0)


Previous 199869 Revisions Next


© 1997-2024 The MAME Team