vak: (Знайка)
[personal profile] vak
Сделал я тулзу, автоматически преобразующую MOO тесты в исходник для Googletest. Типа такого:
TEST_F(MachineTest, adc_al_45h)
{
// Initial CPU State
cpu.set_ax(0xADEE);
cpu.set_bx(0xFD34);
cpu.set_cx(0xA1B4);
cpu.set_dx(0x4038);
cpu.set_cs(0xD271);
cpu.set_ss(0xF076);
cpu.set_ds(0x8702);
cpu.set_es(0xCE41);
cpu.set_sp(0x5BDF);
cpu.set_bp(0xD8D9);
cpu.set_si(0x0000);
cpu.set_di(0x2DB1);
cpu.set_ip(0x8490);
cpu.set_flags(0xF4C3);
machine.trace_registers();

// Initial RAM entries
machine.mem_store_byte(0xDABA0, 0x3E);
machine.mem_store_byte(0xDABA1, 0x14);
machine.mem_store_byte(0xDABA2, 0x45);
machine.mem_store_byte(0xDABA3, 0x90);
machine.mem_store_byte(0xDABA4, 0x90);
machine.mem_store_byte(0xDABA5, 0x90);

// Single-step.
cpu.step();

// Final CPU State
EXPECT_EQ(cpu.get_ax(), 0xAD34);
EXPECT_EQ(cpu.get_ip(), 0x8493);
EXPECT_EQ(cpu.get_flags(), 0xF413);

// Final RAM entries
EXPECT_EQ(memory.load8(0xDABA0), 0x3E);
EXPECT_EQ(memory.load8(0xDABA1), 0x14);
EXPECT_EQ(memory.load8(0xDABA2), 0x45);
EXPECT_EQ(memory.load8(0xDABA3), 0x90);
EXPECT_EQ(memory.load8(0xDABA4), 0x90);
EXPECT_EQ(memory.load8(0xDABA5), 0x90);
}
Для начала конвертнул три сотни тестов, по одному из каждой категории. Много интересного узнал. Про неиспользуемые биты регистра флагов, про недокументированные коды операций, про плохо описанные команды типа AAA.

ChatGPT вчера долго пытался меня убедить, что в процессоре 8086 была команда BOUND. Имел наглость отсылать к официальному The 8086 Family Users Manual от 1979 года. Чувак, говорю, в этом документе нет команды BOUND. Ой да, говорит, Интел просто забыл упомянуть. Но 62h точно-точно выполняется как BOUND, мамой клянусь. Пока я не ткнул его мордой в MOO тесты, и только тогда он признал, что коды 6xh работают как 7xh, то есть как условные переходы.

Грок, тот сразу выяснил, что инструкция BOUND появилась позже, в 80186 процессоре. Есть таки разница между искусственными интеллектами, не все они одинаково умные.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org