| 8193 | } |
| 8194 | |
| 8195 | void testPushE16() { |
| 8196 | for (int i = 0; i < 8; i++) { |
| 8197 | U8 rm = i | (6 << 3) | 0xC0; |
| 8198 | newInstructionWithRM(0xff, rm, 0); |
| 8199 | U32 value = 0xDDDD1234; |
| 8200 | ESP -= 2; |
| 8201 | if (i == 4) { |
| 8202 | value = cpu->reg[i].u32; |
| 8203 | } else { |
| 8204 | cpu->reg[i].u32 = value; |
| 8205 | } |
| 8206 | memory->writew(cpu->seg[SS].address + ESP, 0xAAAA); |
| 8207 | memory->writew(cpu->seg[SS].address + ESP - 2, 0xCCCC); |
| 8208 | memory->writew(cpu->seg[SS].address + ESP - 4, 0xBBBB); |
| 8209 | runTestCPU(); |
| 8210 | assertTrue(ESP == 4092); |
| 8211 | assertTrue(memory->readw(cpu->seg[SS].address + ESP) == (U16)value); |
| 8212 | assertTrue(memory->readw(cpu->seg[SS].address + ESP + 2) == 0xAAAA); |
| 8213 | assertTrue(memory->readw(cpu->seg[SS].address + ESP - 2) == 0xBBBB); |
| 8214 | } |
| 8215 | |
| 8216 | U8 rm = (6 << 3); |
| 8217 | if (cpu->big) |
| 8218 | rm += 5; |
| 8219 | else |
| 8220 | rm += 6; |
| 8221 | newInstructionWithRM(0xff, rm, 0); |
| 8222 | pushCode16(200); |
| 8223 | |
| 8224 | ESP -= 2; |
| 8225 | U16 value = 0x1234; |
| 8226 | memory->writew(cpu->seg[DS].address + 200, value); |
| 8227 | |
| 8228 | memory->writew(cpu->seg[SS].address + ESP, 0xAAAA); |
| 8229 | memory->writew(cpu->seg[SS].address + ESP - 2, 0xCCCC); |
| 8230 | memory->writew(cpu->seg[SS].address + ESP - 4, 0xBBBB); |
| 8231 | runTestCPU(); |
| 8232 | assertTrue(ESP == 4092); |
| 8233 | assertTrue(memory->readw(cpu->seg[SS].address + ESP) == (U16)value); |
| 8234 | assertTrue(memory->readw(cpu->seg[SS].address + ESP + 2) == 0xAAAA); |
| 8235 | assertTrue(memory->readw(cpu->seg[SS].address + ESP - 2) == 0xBBBB); |
| 8236 | } |
| 8237 | |
| 8238 | void testPushE32() { |
| 8239 | for (int i = 0; i < 8; i++) { |
no test coverage detected