亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pxa2xx_lcd.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
?? 第 1 頁 / 共 2 頁
字號:
    case FBR1:        s->dma_ch[1].branch = value & 0xfffffff3;        break;    case FBR2:        s->dma_ch[2].branch = value & 0xfffffff3;        break;    case FBR3:        s->dma_ch[3].branch = value & 0xfffffff3;        break;    case FBR4:        s->dma_ch[4].branch = value & 0xfffffff3;        break;    case FBR5:        s->dma_ch[5].branch = value & 0xfffffff3;        break;    case FBR6:        s->dma_ch[6].branch = value & 0xfffffff3;        break;    case BSCNTR:        s->bscntr = value & 0xf;        break;    case PRSR:        break;    case LCSR0:        s->status[0] &= ~(value & 0xfff);        if (value & LCSR0_BER)            s->status[0] &= ~LCSR0_BERCH(7);        break;    case LCSR1:        s->status[1] &= ~(value & 0x3e3f3f);        break;    default:    fail:        cpu_abort(cpu_single_env,                "%s: Bad offset " REG_FMT "\n", __FUNCTION__, offset);    }}static CPUReadMemoryFunc *pxa2xx_lcdc_readfn[] = {    pxa2xx_lcdc_read,    pxa2xx_lcdc_read,    pxa2xx_lcdc_read};static CPUWriteMemoryFunc *pxa2xx_lcdc_writefn[] = {    pxa2xx_lcdc_write,    pxa2xx_lcdc_write,    pxa2xx_lcdc_write};/* Load new palette for a given DMA channel, convert to internal format */static void pxa2xx_palette_parse(struct pxa2xx_lcdc_s *s, int ch, int bpp){    int i, n, format, r, g, b, alpha;    uint32_t *dest, *src;    s->pal_for = LCCR4_PALFOR(s->control[4]);    format = s->pal_for;    switch (bpp) {    case pxa_lcdc_2bpp:        n = 4;        break;    case pxa_lcdc_4bpp:        n = 16;        break;    case pxa_lcdc_8bpp:        n = 256;        break;    default:        format = 0;        return;    }    src = (uint32_t *) s->dma_ch[ch].pbuffer;    dest = (uint32_t *) s->dma_ch[ch].palette;    alpha = r = g = b = 0;    for (i = 0; i < n; i ++) {        switch (format) {        case 0: /* 16 bpp, no transparency */            alpha = 0;            if (s->control[0] & LCCR0_CMS)                r = g = b = *src & 0xff;            else {                r = (*src & 0xf800) >> 8;                g = (*src & 0x07e0) >> 3;                b = (*src & 0x001f) << 3;            }            break;        case 1: /* 16 bpp plus transparency */            alpha = *src & (1 << 24);            if (s->control[0] & LCCR0_CMS)                r = g = b = *src & 0xff;            else {                r = (*src & 0xf800) >> 8;                g = (*src & 0x07e0) >> 3;                b = (*src & 0x001f) << 3;            }            break;        case 2: /* 18 bpp plus transparency */            alpha = *src & (1 << 24);            if (s->control[0] & LCCR0_CMS)                r = g = b = *src & 0xff;            else {                r = (*src & 0xf80000) >> 16;                g = (*src & 0x00fc00) >> 8;                b = (*src & 0x0000f8);            }            break;        case 3: /* 24 bpp plus transparency */            alpha = *src & (1 << 24);            if (s->control[0] & LCCR0_CMS)                r = g = b = *src & 0xff;            else {                r = (*src & 0xff0000) >> 16;                g = (*src & 0x00ff00) >> 8;                b = (*src & 0x0000ff);            }            break;        }        switch (s->ds->depth) {        case 8:            *dest = rgb_to_pixel8(r, g, b) | alpha;            break;        case 15:            *dest = rgb_to_pixel15(r, g, b) | alpha;            break;        case 16:            *dest = rgb_to_pixel16(r, g, b) | alpha;            break;        case 24:            *dest = rgb_to_pixel24(r, g, b) | alpha;            break;        case 32:            *dest = rgb_to_pixel32(r, g, b) | alpha;            break;        }        src ++;        dest ++;    }}static void pxa2xx_lcdc_dma0_redraw_horiz(struct pxa2xx_lcdc_s *s,                uint8_t *fb, int *miny, int *maxy){    int y, src_width, dest_width, dirty[2];    uint8_t *src, *dest;    ram_addr_t x, addr, new_addr, start, end;    drawfn fn = 0;    if (s->dest_width)        fn = s->line_fn[s->transp][s->bpp];    if (!fn)        return;    src = fb;    src_width = (s->xres + 3) & ~3;     /* Pad to a 4 pixels multiple */    if (s->bpp == pxa_lcdc_19pbpp || s->bpp == pxa_lcdc_18pbpp)        src_width *= 3;    else if (s->bpp > pxa_lcdc_16bpp)        src_width *= 4;    else if (s->bpp > pxa_lcdc_8bpp)        src_width *= 2;    dest = s->ds->data;    dest_width = s->xres * s->dest_width;    addr = (ram_addr_t) (fb - phys_ram_base);    start = addr + s->yres * src_width;    end = addr;    dirty[0] = dirty[1] = cpu_physical_memory_get_dirty(start, VGA_DIRTY_FLAG);    for (y = 0; y < s->yres; y ++) {        new_addr = addr + src_width;        for (x = addr + TARGET_PAGE_SIZE; x < new_addr;                        x += TARGET_PAGE_SIZE) {            dirty[1] = cpu_physical_memory_get_dirty(x, VGA_DIRTY_FLAG);            dirty[0] |= dirty[1];        }        if (dirty[0] || s->invalidated) {            fn((uint32_t *) s->dma_ch[0].palette,                            dest, src, s->xres, s->dest_width);            if (addr < start)                start = addr;            end = new_addr;            if (y < *miny)                *miny = y;            if (y >= *maxy)                *maxy = y + 1;        }        addr = new_addr;        dirty[0] = dirty[1];        src += src_width;        dest += dest_width;    }    if (end > start)        cpu_physical_memory_reset_dirty(start, end, VGA_DIRTY_FLAG);}static void pxa2xx_lcdc_dma0_redraw_vert(struct pxa2xx_lcdc_s *s,                uint8_t *fb, int *miny, int *maxy){    int y, src_width, dest_width, dirty[2];    uint8_t *src, *dest;    ram_addr_t x, addr, new_addr, start, end;    drawfn fn = 0;    if (s->dest_width)        fn = s->line_fn[s->transp][s->bpp];    if (!fn)        return;    src = fb;    src_width = (s->xres + 3) & ~3;     /* Pad to a 4 pixels multiple */    if (s->bpp == pxa_lcdc_19pbpp || s->bpp == pxa_lcdc_18pbpp)        src_width *= 3;    else if (s->bpp > pxa_lcdc_16bpp)        src_width *= 4;    else if (s->bpp > pxa_lcdc_8bpp)        src_width *= 2;    dest_width = s->yres * s->dest_width;    dest = s->ds->data + dest_width * (s->xres - 1);    addr = (ram_addr_t) (fb - phys_ram_base);    start = addr + s->yres * src_width;    end = addr;    dirty[0] = dirty[1] = cpu_physical_memory_get_dirty(start, VGA_DIRTY_FLAG);    for (y = 0; y < s->yres; y ++) {        new_addr = addr + src_width;        for (x = addr + TARGET_PAGE_SIZE; x < new_addr;                        x += TARGET_PAGE_SIZE) {            dirty[1] = cpu_physical_memory_get_dirty(x, VGA_DIRTY_FLAG);            dirty[0] |= dirty[1];        }        if (dirty[0] || s->invalidated) {            fn((uint32_t *) s->dma_ch[0].palette,                            dest, src, s->xres, -dest_width);            if (addr < start)                start = addr;            end = new_addr;            if (y < *miny)                *miny = y;            if (y >= *maxy)                *maxy = y + 1;        }        addr = new_addr;        dirty[0] = dirty[1];        src += src_width;        dest += s->dest_width;    }    if (end > start)        cpu_physical_memory_reset_dirty(start, end, VGA_DIRTY_FLAG);}static void pxa2xx_lcdc_resize(struct pxa2xx_lcdc_s *s){    int width, height;    if (!(s->control[0] & LCCR0_ENB))        return;    width = LCCR1_PPL(s->control[1]) + 1;    height = LCCR2_LPP(s->control[2]) + 1;    if (width != s->xres || height != s->yres) {        if (s->orientation)            dpy_resize(s->ds, height, width);        else            dpy_resize(s->ds, width, height);        s->invalidated = 1;        s->xres = width;        s->yres = height;    }}static void pxa2xx_update_display(void *opaque){    struct pxa2xx_lcdc_s *s = (struct pxa2xx_lcdc_s *) opaque;    uint8_t *fb;    target_phys_addr_t fbptr;    int miny, maxy;    int ch;    if (!(s->control[0] & LCCR0_ENB))        return;    pxa2xx_descriptor_load(s);    pxa2xx_lcdc_resize(s);    miny = s->yres;    maxy = 0;    s->transp = s->dma_ch[2].up || s->dma_ch[3].up;    /* Note: With overlay planes the order depends on LCCR0 bit 25.  */    for (ch = 0; ch < PXA_LCDDMA_CHANS; ch ++)        if (s->dma_ch[ch].up) {            if (!s->dma_ch[ch].source) {                pxa2xx_dma_ber_set(s, ch);                continue;            }            fbptr = s->dma_ch[ch].source;            if (!(fbptr >= PXA2XX_SDRAM_BASE &&                    fbptr <= PXA2XX_SDRAM_BASE + phys_ram_size)) {                pxa2xx_dma_ber_set(s, ch);                continue;            }            fbptr -= PXA2XX_SDRAM_BASE;            fb = phys_ram_base + fbptr;            if (s->dma_ch[ch].command & LDCMD_PAL) {                memcpy(s->dma_ch[ch].pbuffer, fb,                                MAX(LDCMD_LENGTH(s->dma_ch[ch].command),                                sizeof(s->dma_ch[ch].pbuffer)));                pxa2xx_palette_parse(s, ch, s->bpp);            } else {                /* Do we need to reparse palette */                if (LCCR4_PALFOR(s->control[4]) != s->pal_for)                    pxa2xx_palette_parse(s, ch, s->bpp);                /* ACK frame start */                pxa2xx_dma_sof_set(s, ch);                s->dma_ch[ch].redraw(s, fb, &miny, &maxy);                s->invalidated = 0;                /* ACK frame completed */                pxa2xx_dma_eof_set(s, ch);            }        }    if (s->control[0] & LCCR0_DIS) {        /* ACK last frame completed */        s->control[0] &= ~LCCR0_ENB;        s->status[0] |= LCSR0_LDD;    }    if (s->orientation)        dpy_update(s->ds, miny, 0, maxy, s->xres);    else        dpy_update(s->ds, 0, miny, s->xres, maxy);    pxa2xx_lcdc_int_update(s);    qemu_irq_raise(s->vsync_cb);}static void pxa2xx_invalidate_display(void *opaque){    struct pxa2xx_lcdc_s *s = (struct pxa2xx_lcdc_s *) opaque;    s->invalidated = 1;}static void pxa2xx_screen_dump(void *opaque, const char *filename){    /* TODO */}static void pxa2xx_lcdc_orientation(void *opaque, int angle){    struct pxa2xx_lcdc_s *s = (struct pxa2xx_lcdc_s *) opaque;    if (angle) {        s->dma_ch[0].redraw = pxa2xx_lcdc_dma0_redraw_vert;    } else {        s->dma_ch[0].redraw = pxa2xx_lcdc_dma0_redraw_horiz;    }    s->orientation = angle;    s->xres = s->yres = -1;    pxa2xx_lcdc_resize(s);}static void pxa2xx_lcdc_save(QEMUFile *f, void *opaque){    struct pxa2xx_lcdc_s *s = (struct pxa2xx_lcdc_s *) opaque;    int i;    qemu_put_be32(f, s->irqlevel);    qemu_put_be32(f, s->transp);    for (i = 0; i < 6; i ++)        qemu_put_be32s(f, &s->control[i]);    for (i = 0; i < 2; i ++)        qemu_put_be32s(f, &s->status[i]);    for (i = 0; i < 2; i ++)        qemu_put_be32s(f, &s->ovl1c[i]);    for (i = 0; i < 2; i ++)        qemu_put_be32s(f, &s->ovl2c[i]);    qemu_put_be32s(f, &s->ccr);    qemu_put_be32s(f, &s->cmdcr);    qemu_put_be32s(f, &s->trgbr);    qemu_put_be32s(f, &s->tcr);    qemu_put_be32s(f, &s->liidr);    qemu_put_8s(f, &s->bscntr);    for (i = 0; i < 7; i ++) {        qemu_put_betl(f, s->dma_ch[i].branch);        qemu_put_byte(f, s->dma_ch[i].up);        qemu_put_buffer(f, s->dma_ch[i].pbuffer, sizeof(s->dma_ch[i].pbuffer));        qemu_put_betl(f, s->dma_ch[i].descriptor);        qemu_put_betl(f, s->dma_ch[i].source);        qemu_put_be32s(f, &s->dma_ch[i].id);        qemu_put_be32s(f, &s->dma_ch[i].command);    }}static int pxa2xx_lcdc_load(QEMUFile *f, void *opaque, int version_id){    struct pxa2xx_lcdc_s *s = (struct pxa2xx_lcdc_s *) opaque;    int i;    s->irqlevel = qemu_get_be32(f);    s->transp = qemu_get_be32(f);    for (i = 0; i < 6; i ++)        qemu_get_be32s(f, &s->control[i]);    for (i = 0; i < 2; i ++)        qemu_get_be32s(f, &s->status[i]);    for (i = 0; i < 2; i ++)        qemu_get_be32s(f, &s->ovl1c[i]);    for (i = 0; i < 2; i ++)        qemu_get_be32s(f, &s->ovl2c[i]);    qemu_get_be32s(f, &s->ccr);    qemu_get_be32s(f, &s->cmdcr);    qemu_get_be32s(f, &s->trgbr);    qemu_get_be32s(f, &s->tcr);    qemu_get_be32s(f, &s->liidr);    qemu_get_8s(f, &s->bscntr);    for (i = 0; i < 7; i ++) {        s->dma_ch[i].branch = qemu_get_betl(f);        s->dma_ch[i].up = qemu_get_byte(f);        qemu_get_buffer(f, s->dma_ch[i].pbuffer, sizeof(s->dma_ch[i].pbuffer));        s->dma_ch[i].descriptor = qemu_get_betl(f);        s->dma_ch[i].source = qemu_get_betl(f);        qemu_get_be32s(f, &s->dma_ch[i].id);        qemu_get_be32s(f, &s->dma_ch[i].command);    }    s->bpp = LCCR3_BPP(s->control[3]);    s->xres = s->yres = s->pal_for = -1;    return 0;}#define BITS 8#include "pxa2xx_template.h"#define BITS 15#include "pxa2xx_template.h"#define BITS 16#include "pxa2xx_template.h"#define BITS 24#include "pxa2xx_template.h"#define BITS 32#include "pxa2xx_template.h"struct pxa2xx_lcdc_s *pxa2xx_lcdc_init(target_phys_addr_t base, qemu_irq irq,                DisplayState *ds){    int iomemtype;    struct pxa2xx_lcdc_s *s;    s = (struct pxa2xx_lcdc_s *) qemu_mallocz(sizeof(struct pxa2xx_lcdc_s));    s->base = base;    s->invalidated = 1;    s->irq = irq;    s->ds = ds;    pxa2xx_lcdc_orientation(s, graphic_rotate);    iomemtype = cpu_register_io_memory(0, pxa2xx_lcdc_readfn,                    pxa2xx_lcdc_writefn, s);    cpu_register_physical_memory(base, 0x00100000, iomemtype);    graphic_console_init(ds, pxa2xx_update_display,                    pxa2xx_invalidate_display, pxa2xx_screen_dump, s);    switch (s->ds->depth) {    case 0:        s->dest_width = 0;        break;    case 8:        s->line_fn[0] = pxa2xx_draw_fn_8;        s->line_fn[1] = pxa2xx_draw_fn_8t;        s->dest_width = 1;        break;    case 15:        s->line_fn[0] = pxa2xx_draw_fn_15;        s->line_fn[1] = pxa2xx_draw_fn_15t;        s->dest_width = 2;        break;    case 16:        s->line_fn[0] = pxa2xx_draw_fn_16;        s->line_fn[1] = pxa2xx_draw_fn_16t;        s->dest_width = 2;        break;    case 24:        s->line_fn[0] = pxa2xx_draw_fn_24;        s->line_fn[1] = pxa2xx_draw_fn_24t;        s->dest_width = 3;        break;    case 32:        s->line_fn[0] = pxa2xx_draw_fn_32;        s->line_fn[1] = pxa2xx_draw_fn_32t;        s->dest_width = 4;        break;    default:        fprintf(stderr, "%s: Bad color depth\n", __FUNCTION__);        exit(1);    }    register_savevm("pxa2xx_lcdc", 0, 0,                    pxa2xx_lcdc_save, pxa2xx_lcdc_load, s);    return s;}void pxa2xx_lcd_vsync_notifier(struct pxa2xx_lcdc_s *s, qemu_irq handler){    s->vsync_cb = handler;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产入口| 欧美日韩国产小视频| 色8久久精品久久久久久蜜| 欧美日韩成人综合天天影院| 久久精品人人做| 日韩福利视频网| 91视频国产资源| 国产午夜精品一区二区三区嫩草| 亚洲成人av电影在线| 99久久er热在这里只有精品66| 日韩一区二区在线看片| 夜夜精品视频一区二区 | 成人aa视频在线观看| 制服.丝袜.亚洲.中文.综合| 亚洲免费色视频| 成人av电影在线网| 久久久久国产精品人| 国产一区二区免费视频| 欧美日韩一二区| 亚洲男人的天堂一区二区| 国产在线观看一区二区| 日韩一区二区不卡| 免费人成网站在线观看欧美高清| 欧美性感一区二区三区| 亚洲精品乱码久久久久久| 色综合一区二区三区| 亚洲欧美一区二区三区孕妇| 成人av免费在线播放| 国产精品高潮久久久久无| 成人h精品动漫一区二区三区| 国产亚洲欧美色| 国产成人av自拍| 国产精品视频免费看| 成人永久aaa| 亚洲色图另类专区| 一本大道久久a久久精二百 | 一本色道久久综合亚洲精品按摩 | 日韩午夜激情免费电影| 性欧美疯狂xxxxbbbb| 欧美色视频一区| 日韩av网站免费在线| 91麻豆精品国产91久久久更新时间 | 久久久午夜精品| 国产精品亚洲一区二区三区在线 | 日韩精品专区在线影院重磅| 日韩av一二三| 久久久久97国产精华液好用吗 | 免费在线观看一区| 欧美va日韩va| 成人不卡免费av| 亚洲影院久久精品| 日韩女优制服丝袜电影| 国产成人免费xxxxxxxx| 中文字幕佐山爱一区二区免费| 91麻豆国产自产在线观看| 亚洲电影一区二区| 欧美成人在线直播| 成人v精品蜜桃久久一区| 一区二区三区四区中文字幕| 91精品国模一区二区三区| 久久99热这里只有精品| 国产精品欧美综合在线| 欧美午夜电影一区| 精品一区二区在线免费观看| 国产精品黄色在线观看| 在线播放91灌醉迷j高跟美女| 国产精品一区在线| 亚洲免费在线视频一区 二区| 日韩一区二区三区三四区视频在线观看 | 久久嫩草精品久久久精品一| 色诱视频网站一区| 国内外成人在线视频| 亚洲激情五月婷婷| 久久精品水蜜桃av综合天堂| 日本高清无吗v一区| 韩国v欧美v亚洲v日本v| 亚洲国产精品一区二区久久恐怖片 | 激情伊人五月天久久综合| 国产精品久久久一区麻豆最新章节| 欧美撒尿777hd撒尿| 顶级嫩模精品视频在线看| 人人爽香蕉精品| 亚洲美女精品一区| 久久久久久99久久久精品网站| 欧美性感一类影片在线播放| 高清在线不卡av| 美女高潮久久久| 亚洲图片自拍偷拍| 亚洲欧美日韩国产综合| 国产日韩一级二级三级| 欧美肥妇bbw| 欧美在线观看你懂的| av在线综合网| 成人av在线播放网址| 国产一区欧美二区| 亚洲444eee在线观看| 亚洲欧美国产三级| 最新国产の精品合集bt伙计| 久久久夜色精品亚洲| 精品999在线播放| 日韩欧美中文字幕一区| 欧美精品tushy高清| 欧美曰成人黄网| 91高清视频在线| 91亚洲精品一区二区乱码| 成人国产精品免费观看动漫| 成人午夜视频在线观看| 国产成人免费av在线| 国产99久久精品| www.日韩av| 色婷婷亚洲一区二区三区| 97成人超碰视| 一本在线高清不卡dvd| 一本一道久久a久久精品综合蜜臀| av在线播放不卡| 在线视频国内一区二区| 欧美怡红院视频| 精品视频在线免费看| 欧美日韩免费高清一区色橹橹 | 中文子幕无线码一区tr| 国产日产精品1区| 日本一区二区成人在线| 国产精品初高中害羞小美女文| 国产精品嫩草99a| 亚洲欧洲性图库| 一区二区三区在线播放| 日韩激情在线观看| 男男成人高潮片免费网站| 国产一区亚洲一区| 不卡av在线免费观看| 99久久精品免费看| 欧美性感一类影片在线播放| 日韩一区国产二区欧美三区| 久久在线免费观看| 亚洲视频每日更新| 首页综合国产亚洲丝袜| 国产综合久久久久影院| 成人黄色在线视频| 欧美日韩一区二区欧美激情| 精品少妇一区二区三区免费观看 | 亚洲国产乱码最新视频 | 欧美激情在线免费观看| 伊人性伊人情综合网| 日本不卡在线视频| 国产风韵犹存在线视精品| 一本大道久久a久久综合| 日韩精品一区国产麻豆| 中文字幕亚洲精品在线观看| 午夜欧美在线一二页| 国产最新精品精品你懂的| 日本韩国一区二区三区视频| 精品国产一二三区| 亚洲欧美日韩在线不卡| 精品一区二区三区蜜桃| av中文字幕在线不卡| 日韩精品资源二区在线| 一区二区三区在线免费播放| 韩国精品久久久| 4438x亚洲最大成人网| 国产精品麻豆久久久| 日韩**一区毛片| 91在线小视频| 久久综合精品国产一区二区三区| 一区二区三区不卡视频| 高清成人在线观看| 日韩欧美成人一区二区| 亚洲一级二级三级在线免费观看| 东方欧美亚洲色图在线| 精品嫩草影院久久| 亚洲电影视频在线| 色噜噜夜夜夜综合网| 欧美激情中文字幕| 狠狠网亚洲精品| 欧美人妇做爰xxxⅹ性高电影| 国产精品女人毛片| 国产精品一区在线| 精品国产乱码久久久久久蜜臀| 天天做天天摸天天爽国产一区| 91麻豆123| 亚洲欧洲日韩综合一区二区| 国产成人免费在线观看不卡| 日韩精品专区在线影院观看| 午夜精品国产更新| 在线观看国产日韩| 亚洲人亚洲人成电影网站色| 国产精品一区二区久久不卡| 精品久久久久久亚洲综合网| 日韩影院在线观看| 欧美日韩高清一区二区不卡| 一区二区三区四区在线播放| 91在线一区二区三区| 亚洲少妇30p| 日本大香伊一区二区三区| 亚洲女人小视频在线观看| 97精品国产露脸对白| 亚洲精品水蜜桃| 欧美专区亚洲专区| 亚洲国产精品精华液网站| 欧美日韩成人综合| 美女一区二区三区在线观看|