

// if(byh < 4) {


/*
 *
 * This function executes the instructions whose hex code is less than 0x40.
 *
 */
      

 int byh_lessthan_four(int byl, int byh, float *lap)
 {
  int m1, m2;
  byh *= 2;
  switch(byl) {
  case 6:  reg[byh] = memr(++rpc); *lap = 7.0 / 3.0;
	if(byh == 6) {
		*lap = 10.0 / 3.0; 
		mhlw(reg[6]); 
	}
	break; /*MVI*/
  case 0xe:byh++; 
	*lap = 7.0 / 3.0;
	reg[byh] = memr(++rpc);
	break;
  case 4: if(byh == 6) {
		*lap = 10.0 / 3.0; 
		reg[6] = mhlr();
	}        /*INR*/
	else
		*lap = 4.0 / 3.0;
	m1 = reg[byh] & 0xf;
	rf[3] = (m1 == 0xf);
	reg[byh] = (reg[byh] + 1) & 0xff;
	if(byh == 6)  mhlw(reg[byh]);
	setrf(reg[byh]);            break;
  case 0xc:*lap = 4.0 / 3.0;
	byh++;
	m1 = reg[byh] & 0xf;
	rf[3] = (m1 == 0xf);
	reg[byh] = (reg[byh] + 1) & 0xff;
	setrf(reg[byh]);
	break;
  case 3: *lap = 6.0 / 3.0;        /*INX*/
	byl = (byh == 6) ? rsp : (reg[byh] * 0x100) + reg[byh + 1];
	byl = (byl == 0xffff) ? 0 : byl + 1;
	if(byh == 6) rsp = byl;
	else {
		reg[byh] = byl / 0x100;
		reg[byh + 1] = byl % 0x100;
	}
	break;
  case 0xb:*lap = 6.0 / 3.0;   /*DCX*/
	byl = (byh == 6) ? rsp : (reg[byh] * 0x100) + reg[byh + 1];
	byl = (byl == 0) ? 0xffff  : byl - 1;
	if(byh == 6)  rsp = byl;
	else {
		reg[byh] = byl/0x100;
		reg[byh + 1] = byl%0x100;
	}
	break;
  case 5: if(byh == 6) {
		*lap = 10.0 / 3.0; 
		reg[6] = mhlr();
	}     /*DCR*/
	else
		*lap = 4.0 / 3.0;
	reg[byh] = reg[byh] + 0xff;
	reg[byh] &= 0xff;
	if(byh == 6)  mhlw(reg[6]);
	setrf(reg[byh]);
	break;
  case 0xd:*lap = 4.0 / 3.0;
	byh++;
	reg[byh] = (reg[byh] + 0xff);
	reg[byh] &= 0xff;
	setrf(reg[byh]);
	break;
  case 8: *lap = 4.0 / 3.0;
	break;
  case 1: *lap = 10.0 / 3.0;   /*LXI*/
	byl = memr(++rpc);
	m1 = memr(++rpc);
	if(byh == 6)   rsp = (m1 * 0x100) + byl;
	else {
		reg[byh] = m1;
		reg[byh + 1] = byl;
	}
	break;
  case 9: *lap = 10.0 / 3.0;       /*DAD*/
	m1 = (byh == 6) ? rsp : (reg[byh] * 0x100) + reg[byh + 1];
	m2 = m1 + (reg[4] * 0x100) + reg[5];
	if(m2 & 0x10000) {
		rf[7] = 1;
		m2 &= 0xffff;
	}
	else rf[7] = 0;
	reg[4] = m2 / 0x100;
	reg[5] = m2 % 0x100;
	break;
  case 2: switch(byh) {
	case 0: *lap = 7.0 / 3.0;    /*STAX B, D*/
		m1 = (reg[byh] * 0x100) + reg[byh + 1];
		memw(m1, reg[7]);
		break;
	case 2:	*lap = 7.0 / 3.0;
		m1 = (reg[byh] * 0x100) + reg[byh + 1];
		memw(m1, reg[7]);
		break;
	case 4: *lap = 16.0/3.0;     /*SHLD*/
		m1 = memr(++rpc);
		byl = memr(++rpc);
		m1 = (byl * 0x100) + m1;
		memw(m1, reg[5]);
		memw((m1 + 1), reg[4]);
		break;
	case 6: *lap = 13.0 / 3.0;   /*STA*/
		m1 = memr(++rpc);
		byl = memr(++rpc);
		m1 += byl * 0x100;
		memw(m1, reg[7]);
	}
	break;
  case 0xa:*lap = 7.0 / 3.0;
	switch(byh) {
	case 0:	m1 = (reg[0] * 0x100) + reg[1];  /*LDAX*/
		reg[7] = memr(m1);
		break;
	case 2:	m1 = (reg[2] * 0x100) + reg[3];
		reg[7] = memr(m1);
		break;
	case 4:	*lap = 16.0 / 3.0;    /*LHLD*/
		m1 = memr(++rpc);
		byl = memr(++rpc);
		m1 += byl * 0x100;
		reg[5] = memr(m1);
		reg[4] = memr(m1 + 1);
		break;
	case 6:	*lap = 13.0 / 3.0;   /*LDA*/
		m1 = memr(++rpc);
		byl = memr(++rpc);
		m1 += byl * 0x100;
		reg[7] = memr(m1);
	}
	break;
  case 0xf:*lap = 4.0 / 3.0;
	switch(byh) {
	case 0:	m1 = reg[7] & 1;     /*RRC*/
		rf[7] = (m1 != 0);
		reg[7] /= 2;
		if(rf[7])  reg[7] = reg[7] | 0x80; 
		break;
	case 2:	m1 = 0;              /*RAR*/
		if(reg[7] & 1)  m1 = 1;
		reg[7] /= 2;
		if(rf[7])   reg[7] |= 0x80;
		rf[7] = m1;
		break;
	case 4:	reg[7] |= 0xff00;    /*CMA*/
		reg[7] = ~reg[7];
		break;
	case 6:	rf[7] = (rf[7] == 0);
	}
	break;
  case 7: *lap = 4.0 / 3.0;
	switch(byh) {
	case 0:	m1 = reg[7];         /*RLC*/
		rf[7] = ((m1 & 0x80) != 0);
		m1 *= 2;
		m1 = m1 & 0xff;
		m1 |= rf[7];
		reg[7] = m1;
		break;
	case 2:	reg[7] *= 2;         /*RAL*/
		reg[7] |= rf[7];
		
		rf[7] = ((reg[7] & 0x100) != 0);
		reg[7] &= 0xff;
		break;
	case 4:	m1 = reg[7];         /*DAA*/
		byh = m1 & 0xf;
		if(byh > 9 || rf[3]) {
			m1 += 6;
			rf[3] = ((byh + 6) > 0xf);
		}
		byl = m1 & 0xf0;
		if((byl > 0x90) || rf[7])   m1 += 0x60;
		if(m1 > 0xff) {
			rf[7] = 1;
			reg[7] = m1 & 0xff;
		}
		else {
			reg[7] = m1;
			rf[7] = 0;
		}
		m1 = reg[7];
		setrf(m1);
		break;
	case 6:	rf[7] = 1;          /*STC*/
	}
  }
  return(0);
 }
