public static function unit_lea() { if (($address = parent::$cpu->address()) === null) { parent::exception(PLATO_EX_UNIT_LEA); } parent::$register->write(parent::$mod['code'], $address); return 0; }
public static function unit_jmp() { switch (parent::$opcode) { /* EB cb */ case 0xeb: parent::$cpu->jump(parent::$imm, false, 1); break; /* JMP rel16 */ /* JMP rel32 */ /* JMP rel16 */ /* JMP rel32 */ case 0xe9: parent::$cpu->jump(parent::$imm, false); break; /* JMP r/m16 */ /* JMP r/m32 */ /* JMP r/m16 */ /* JMP r/m32 */ case 0xff: parent::$cpu->jump(parent::$cpu->read_address()); break; /* JMP ptr16:16 */ /* JMP ptr16:32 */ /* JMP ptr16:16 */ /* JMP ptr16:32 */ case 0xea: /* cs */ parent::$code->next_word(); parent::$cpu->jump(parent::$imm); break; /* JMP m16:16 */ /* JMP m16:32 */ /* JMP m16:16 */ /* JMP m16:32 */ case 0xff: if (($address = parent::$cpu->address()) === null) { parent::exception(PLATO_EX_UNIT_JUMP); } parent::$cpu->jump(parent::$cpu->read_address($address)); break; } return 0; }
public static function unit_ud2() { parent::exception(PLATO_EX_UNIT_UD3); }
public static function unit_cpuid() { parent::exception(PLATO_EX_UNIT_CPUID); }
public static function unit_int() { switch (parent::$opcode) { /* INT 3 */ case 0xcc: parent::exception(PLATO_EX_UNIT_INT3); /* INT imm8 */ /* INT imm8 */ case 0xcd: parent::exception(PLATO_EX_UNIT_INT); /* INTO */ /* INTO */ case 0xce: if (parent::$register->OF) { parent::exception(PLATO_EX_UNIT_INTO); } break; } return 0; }