| 8236 | } |
| 8237 | |
| 8238 | void testPushE32() { |
| 8239 | for (int i = 0; i < 8; i++) { |
| 8240 | U8 rm = i | (6 << 3) | 0xC0; |
| 8241 | newInstructionWithRM(0xff, rm, 0); |
| 8242 | U32 value = 0x56781234; |
| 8243 | ESP -= 4; |
| 8244 | if (i == 4) { |
| 8245 | value = cpu->reg[i].u32; |
| 8246 | } else { |
| 8247 | cpu->reg[i].u32 = value; |
| 8248 | } |
| 8249 | memory->writed(cpu->seg[SS].address + ESP, 0xAAAAAAAA); |
| 8250 | memory->writed(cpu->seg[SS].address + ESP - 4, 0xCCCCCCCC); |
| 8251 | memory->writed(cpu->seg[SS].address + ESP - 8, 0xBBBBBBBB); |
| 8252 | runTestCPU(); |
| 8253 | assertTrue(ESP == 4088); |
| 8254 | assertTrue(memory->readd(cpu->seg[SS].address + ESP) == value); |
| 8255 | assertTrue(memory->readd(cpu->seg[SS].address + ESP + 4) == 0xAAAAAAAA); |
| 8256 | assertTrue(memory->readd(cpu->seg[SS].address + ESP - 4) == 0xBBBBBBBB); |
| 8257 | } |
| 8258 | |
| 8259 | U8 rm = (6 << 3); |
| 8260 | if (cpu->big) |
| 8261 | rm += 5; |
| 8262 | else |
| 8263 | rm += 6; |
| 8264 | newInstructionWithRM(0xff, rm, 0); |
| 8265 | pushCode32(200); |
| 8266 | |
| 8267 | ESP -= 4; |
| 8268 | U32 value = 0x56781234; |
| 8269 | memory->writed(cpu->seg[DS].address + 200, value); |
| 8270 | |
| 8271 | memory->writed(cpu->seg[SS].address + ESP, 0xAAAAAAAA); |
| 8272 | memory->writed(cpu->seg[SS].address + ESP - 4, 0xCCCCCCCC); |
| 8273 | memory->writed(cpu->seg[SS].address + ESP - 8, 0xBBBBBBBB); |
| 8274 | runTestCPU(); |
| 8275 | assertTrue(ESP == 4088); |
| 8276 | assertTrue(memory->readd(cpu->seg[SS].address + ESP) == value); |
| 8277 | assertTrue(memory->readd(cpu->seg[SS].address + ESP + 4) == 0xAAAAAAAA); |
| 8278 | assertTrue(memory->readd(cpu->seg[SS].address + ESP - 4) == 0xBBBBBBBB); |
| 8279 | } |
| 8280 | |
| 8281 | void testCallE16() { |
| 8282 | for (int i = 0; i < 8; i++) { |
no test coverage detected