Esempio n. 1
0
void timer_cycle(void)
{
	/* The amount of ticks since we last ran */ 
	unsigned int delta = cpu_get_cycles() - prev_time;
	prev_time = cpu_get_cycles();

	elapsed += delta * 4; /* 4 cycles to a timer tick */
	if(elapsed >= 16)
	{
		timer_tick();
		elapsed -= 16;	/* keep track of the time overflow */
	}
}
Esempio n. 2
0
//Recup donnée immédiate de 16 bits
unsigned short mem_get_word(unsigned short i){
  unsigned long elapsed;

  if(DMA_pending && i < 0xFF80)
  {
    elapsed = cpu_get_cycles() - DMA_pending;
    if(elapsed >= 160)
      DMA_pending = 0;
    else
    {
      return mem[0xFE00+elapsed];
    }
  }
  return mem[i] | (mem[i+1]<<8);
}
Esempio n. 3
0
//Recup donnée immédiate de 8 bits
unsigned char mem_get_byte(unsigned short i)
{
  unsigned long elapsed;
  unsigned char mask = 0;

  if(DMA_pending && i < 0xFF80)
  {
    elapsed = cpu_get_cycles() - DMA_pending;
    if(elapsed >= 160)
      DMA_pending = 0;
    else
    {
      return mem[0xFE00+elapsed];
    }
  }
  return mem[i];
}
Esempio n. 4
0
int sys_clock(uint64_t *val)
{
	error_t err;
	uint64_t cycles;

	if((val == NULL) || NOT_IN_USPACE((uint_t)val))
	{
		err = EINVAL;
		goto fail_inval;
	}

	cycles = cpu_get_cycles(current_cpu);
	err    = cpu_copy_to_uspace(val, &cycles, sizeof(cycles));

fail_inval:
	current_thread->info.errno = err;
	return err; 
}