Ejemplo n.º 1
0
int run(cpu *pcpu) {
	
	char byte;
	
	pcpu->fl = CPU_CLEAN;

	if ((byte = get_byte(pcpu->ip)) < 0) {
		pcpu->fl = CPU_ERROR;
		pcpu->ip++;	
		return -1;
	}
	//printf("Cel id-> %d, byte : 0x%x, at IP: %s\n",pcpu->pcel->id ,byte, decodificar(get_byte(pcpu->ip)));	
	//show_regs(pcpu,0);	
	switch(byte) {
      	case 0X00   : nop0(pcpu);   break;
      	case 0X01   : nop1(pcpu);   break;
                                                                                                    
      	case 0X02 : pushax(pcpu); break;
      	case 0X03 : pushbx(pcpu); break;
      	case 0X04 : pushcx(pcpu); break;
      	case 0X05 : pushdx(pcpu); break;
      	case 0X06 : popax(pcpu);  break;
      	case 0X07 : popbx(pcpu);  break;
      	case 0X08 : popcx(pcpu);  break;
      	case 0X09 : popdx(pcpu);  break;
      	case 0X0a : movcd(pcpu);  break;
      	case 0X0b : movab(pcpu);  break;
      	case 0X0c : movii(pcpu); break;
                                                                                                    
      	case 0X0d : sub_ab(pcpu);  break;
      	case 0X0e : sub_ac(pcpu);  break;
      	case 0X0f : inc_a(pcpu);   break;
      	case 0X10 : inc_b(pcpu);   break;
      	case 0X11 : dec_c(pcpu);   break;
      	case 0X12 : inc_c(pcpu);   break;
      	case 0X13 : zero(pcpu);    break;
      	case 0X14 : not0(pcpu);    break;
      	case 0X15 : shl(pcpu);     break;
      
      	case 0X16 : ifz(pcpu);   break;
      	case 0X17 : jmp(pcpu);     break;
      	case 0X18 : jmpb(pcpu);   break;
      	case 0X19 : call(pcpu);    break;
      	case 0X1a : ret(pcpu);     break;
                                                                                                    
      	case 0X1b : adr(pcpu);     break;
	case 0X1c : adrb(pcpu);   break;
	case 0x1d : adrf(pcpu);   break;
      	case 0X1e : mal(pcpu);     break;
      	case 0X1f : divide(pcpu);  break;
	//default:printf("CPU: Instruccion No Encontrada!\n");break;	
	}
	return 0;
}
void TestIfAssertDisabled(TheType IF_MOD_ASSERT_REPORTS(type))
{
	int a=1;

	EXPECT_NO_FAILURE;

	MOD_ASSERT_G(type, ++a==0);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 1));

	MOD_ASSERT_PG(a, type, ++a==0);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 1));

	MOD_ASSERT_GO(type, ++a, "++a", ++a==0);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 1));

	MOD_ASSERT_PGO(a, type, ++a, "++a", ++a==0);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 1));


	// the condition should still be evaluated,
	// so a should increase

	MOD_VERIFY_G(type, ++a==0);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 2));

	MOD_VERIFY_PG(a, type, ++a==0);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 3));

	MOD_VERIFY_GO(type, ++a, "++a", ++a==0);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 4));

	MOD_VERIFY_PGO(a, type, ++a, "++a", ++a==0);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 5));

	Inc inc_a(a);

	int rv = 0;
	a=0;
	rv = MOD_VERIFY_VG(type, a++);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 1));
	META_ASSERT(rbEQUAL(rv, 0));

	a=0;
	rv = MOD_VERIFY_VPG((a), type, a++);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 1));
	META_ASSERT(rbEQUAL(rv, 0));

	a=0;
	rv = MOD_VERIFY_VGO(type, inc_a, "++a", a++);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 1));
	META_ASSERT(rbEQUAL(rv, 0));

	a=0;
	rv = MOD_VERIFY_VPGO((a), type, inc_a, "++a", a++);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 1));
	META_ASSERT(rbEQUAL(rv, 0));

	a=0;
	rv = MOD_VERIFY_VNPG(type, a++);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 1));
	META_ASSERT(rbEQUAL(rv, 0));

	a=0;
	rv = MOD_VERIFY_VSPG((a), type, a++);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 1));
	META_ASSERT(rbEQUAL(rv, 0));

	a=0;
	rv = MOD_VERIFY_VNPGO(type, inc_a, "++a", a++);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 1));
	META_ASSERT(rbEQUAL(rv, 0));

	a=0;
	rv = MOD_VERIFY_VSPGO((a), type, inc_a, "++a", a++);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 1));
	META_ASSERT(rbEQUAL(rv, 0));

	a=0;
	rv = MOD_VERIFY_VG(type, rbvMORE(a++,1));
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 1));
	META_ASSERT(rbEQUAL(rv, 0));
}
void TestIfCheckDisabled(TheType IF_MOD_CHECK_REPORTS(type))
{
	int a=1;

	// the condition should still be evaluated,
	// so a should increase
	// the condition always fails, so it's increased twice

	MOD_CHECK_G(type, ++a==0, ++a);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 3));

	MOD_CHECK_PG(a, type, ++a==0, ++a);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 5));

	MOD_CHECK_GO(type, ++a, "++a", ++a==0, ++a);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 7));

	MOD_CHECK_PGO(a, type, ++a, "++a", ++a==0, ++a);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 9));

	Inc inc_a(a);

	int rv=0;
	a=0;
	rv=MOD_CHECK_VG(type, a++, inc_a);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 2));
	META_ASSERT(rbEQUAL(rv, 0));

	a=0;
	rv=MOD_CHECK_VPG((a), type, a++, inc_a);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 2));
	META_ASSERT(rbEQUAL(rv, 0));

	a=0;
	rv=MOD_CHECK_VGO(type, inc_a, "++a", a++, inc_a);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 2));
	META_ASSERT(rbEQUAL(rv, 0));

	a=0;
	rv=MOD_CHECK_VPGO((a), type, inc_a, "++a", a++, inc_a);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 2));
	META_ASSERT(rbEQUAL(rv, 0));

	a=0;
	rv=MOD_CHECK_VG(type, rbvMORE(a++, 1), inc_a);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 2));
	META_ASSERT(rbEQUAL(rv, 0));

	bool b;
	a=0;
	b=MOD_CHECK_BG(type, a++);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 1));

	a=0;
	b=MOD_CHECK_BPG((a), type, a++);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 1));

	a=0;
	b=MOD_CHECK_BGO(type, inc_a, "++a", a++);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 1));

	a=0;
	b=MOD_CHECK_BPGO((a), type, inc_a, "++a", a++);
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 1));

	a=0;
	b=MOD_CHECK_BG(type, rbvMORE(a++, 0));
	META_ASSERT(!CheckLoggerCalled());
	META_ASSERT(rbEQUAL(a, 1));
}