OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [stable_0_2_0_rc2/] [or1ksim/] [peripheral/] [fb.c] - Diff between revs 1484 and 1486

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 1484 Rev 1486
Line 61... Line 61...
/* Write a register */
/* Write a register */
void fb_write32 (oraddr_t addr, uint32_t value, void *dat)
void fb_write32 (oraddr_t addr, uint32_t value, void *dat)
{
{
  struct fb_state *fb = dat;
  struct fb_state *fb = dat;
 
 
  oraddr_t a = (addr - fb->baseaddr);
  switch (addr) {
 
 
  switch (a) {
 
    case FB_CTRL:    fb->ctrl = value; break;
    case FB_CTRL:    fb->ctrl = value; break;
    case FB_BUFADDR: change_buf_addr (fb, value); break;
    case FB_BUFADDR: change_buf_addr (fb, value); break;
    case FB_CAMBUFADDR: fb->cam_addr = value; break;
    case FB_CAMBUFADDR: fb->cam_addr = value; break;
    case FB_CAMPOSADDR: fb->camera_pos = value;
    case FB_CAMPOSADDR: fb->camera_pos = value;
                     fb->camerax = value % FB_SIZEX;
                     fb->camerax = value % FB_SIZEX;
                     fb->cameray = value / FB_SIZEX;
                     fb->cameray = value / FB_SIZEX;
                     break;
                     break;
    default:
    default:
      a -= FB_PAL;
      addr -= FB_PAL;
      a /= 4;
      addr /= 4;
      if (a < 0 || a >= 256) {
      if (addr < 0 || addr >= 256) {
        fprintf (stderr, "Write out of palette buffer (0x%"PRIxADDR")!\n", addr);
        fprintf (stderr, "Write out of palette buffer (0x%"PRIxADDR")!\n", addr);
      } else fb->pal[a] = value;
      } else fb->pal[addr] = value;
      break;
      break;
  }
  }
}
}
 
 
/* Read a register */
/* Read a register */
oraddr_t fb_read32 (oraddr_t addr, void *dat)
oraddr_t fb_read32 (oraddr_t addr, void *dat)
{
{
  struct fb_state *fb = dat;
  struct fb_state *fb = dat;
 
 
  oraddr_t a = (addr - fb->baseaddr);
  switch (addr) {
 
 
  switch (a) {
 
    case FB_CTRL:
    case FB_CTRL:
      return fb->ctrl & ~0xff000000| (fb->in_refresh ? 0x80000000 : 0) | ((unsigned long)(fb->refresh_count & 0x7f) << 24);
      return fb->ctrl & ~0xff000000| (fb->in_refresh ? 0x80000000 : 0) | ((unsigned long)(fb->refresh_count & 0x7f) << 24);
      break;
      break;
    case FB_BUFADDR: return fb->addr; break;
    case FB_BUFADDR: return fb->addr; break;
    case FB_CAMBUFADDR: return fb->cam_addr; break;
    case FB_CAMBUFADDR: return fb->cam_addr; break;
    case FB_CAMPOSADDR: return fb->camera_pos; break;
    case FB_CAMPOSADDR: return fb->camera_pos; break;
    default:
    default:
      a -= FB_PAL;
      addr -= FB_PAL;
      a /= 4;
      addr /= 4;
      if (a < 0 || a >= 256) {
      if (addr < 0 || addr >= 256) {
        fprintf (stderr, "Read out of palette buffer (0x%"PRIxADDR")!\n", addr);
        fprintf (stderr, "Read out of palette buffer (0x%"PRIxADDR")!\n", addr);
        return 0;
        return 0;
      } else return fb->pal[a];
      } else return fb->pal[addr];
  }
  }
}
}
 
 
/* define these also for big endian */
/* define these also for big endian */
#if __BIG_ENDIAN__
#if __BIG_ENDIAN__
Line 366... Line 362...
}
}
 
 
void fb_sec_end(void *dat)
void fb_sec_end(void *dat)
{
{
  struct fb_state *fb = dat;
  struct fb_state *fb = dat;
 
  struct mem_ops ops;
 
 
  if(!fb->enabled) {
  if(!fb->enabled) {
    free(dat);
    free(dat);
    return;
    return;
  }
  }
 
 
  if (fb->baseaddr)
  memset(&ops, 0, sizeof(struct mem_ops));
    register_memoryarea(fb->baseaddr, FB_PAL + 256*4, 4, 0, fb_read32, fb_write32, dat);
 
 
  ops.readfunc32 = fb_read32;
 
  ops.writefunc32 = fb_write32;
 
  ops.write_dat32 = dat;
 
  ops.read_dat32 = dat;
 
 
 
  /* FIXME: Correct delay? */
 
  ops.delayr = 2;
 
  ops.delayw = 2;
 
 
 
  reg_mem_area(fb->baseaddr, FB_PAL + 256*4, 0, &ops);
 
 
  reg_sim_reset(fb_reset, dat);
  reg_sim_reset(fb_reset, dat);
}
}
 
 
void reg_fb_sec(void)
void reg_fb_sec(void)

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.