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

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

?? vga.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
?? 第 1 頁 / 共 4 頁
字號:
/* * QEMU VGA Emulator. * * Copyright (c) 2003 Fabrice Bellard * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */#include "hw.h"#include "console.h"#include "pc.h"#include "pci.h"#include "vga_int.h"#include "pixel_ops.h"//#define DEBUG_VGA//#define DEBUG_VGA_MEM//#define DEBUG_VGA_REG//#define DEBUG_BOCHS_VBE/* force some bits to zero */const uint8_t sr_mask[8] = {    (uint8_t)~0xfc,    (uint8_t)~0xc2,    (uint8_t)~0xf0,    (uint8_t)~0xc0,    (uint8_t)~0xf1,    (uint8_t)~0xff,    (uint8_t)~0xff,    (uint8_t)~0x00,};const uint8_t gr_mask[16] = {    (uint8_t)~0xf0, /* 0x00 */    (uint8_t)~0xf0, /* 0x01 */    (uint8_t)~0xf0, /* 0x02 */    (uint8_t)~0xe0, /* 0x03 */    (uint8_t)~0xfc, /* 0x04 */    (uint8_t)~0x84, /* 0x05 */    (uint8_t)~0xf0, /* 0x06 */    (uint8_t)~0xf0, /* 0x07 */    (uint8_t)~0x00, /* 0x08 */    (uint8_t)~0xff, /* 0x09 */    (uint8_t)~0xff, /* 0x0a */    (uint8_t)~0xff, /* 0x0b */    (uint8_t)~0xff, /* 0x0c */    (uint8_t)~0xff, /* 0x0d */    (uint8_t)~0xff, /* 0x0e */    (uint8_t)~0xff, /* 0x0f */};#define cbswap_32(__x) \((uint32_t)( \		(((uint32_t)(__x) & (uint32_t)0x000000ffUL) << 24) | \		(((uint32_t)(__x) & (uint32_t)0x0000ff00UL) <<  8) | \		(((uint32_t)(__x) & (uint32_t)0x00ff0000UL) >>  8) | \		(((uint32_t)(__x) & (uint32_t)0xff000000UL) >> 24) ))#ifdef WORDS_BIGENDIAN#define PAT(x) cbswap_32(x)#else#define PAT(x) (x)#endif#ifdef WORDS_BIGENDIAN#define BIG 1#else#define BIG 0#endif#ifdef WORDS_BIGENDIAN#define GET_PLANE(data, p) (((data) >> (24 - (p) * 8)) & 0xff)#else#define GET_PLANE(data, p) (((data) >> ((p) * 8)) & 0xff)#endifstatic const uint32_t mask16[16] = {    PAT(0x00000000),    PAT(0x000000ff),    PAT(0x0000ff00),    PAT(0x0000ffff),    PAT(0x00ff0000),    PAT(0x00ff00ff),    PAT(0x00ffff00),    PAT(0x00ffffff),    PAT(0xff000000),    PAT(0xff0000ff),    PAT(0xff00ff00),    PAT(0xff00ffff),    PAT(0xffff0000),    PAT(0xffff00ff),    PAT(0xffffff00),    PAT(0xffffffff),};#undef PAT#ifdef WORDS_BIGENDIAN#define PAT(x) (x)#else#define PAT(x) cbswap_32(x)#endifstatic const uint32_t dmask16[16] = {    PAT(0x00000000),    PAT(0x000000ff),    PAT(0x0000ff00),    PAT(0x0000ffff),    PAT(0x00ff0000),    PAT(0x00ff00ff),    PAT(0x00ffff00),    PAT(0x00ffffff),    PAT(0xff000000),    PAT(0xff0000ff),    PAT(0xff00ff00),    PAT(0xff00ffff),    PAT(0xffff0000),    PAT(0xffff00ff),    PAT(0xffffff00),    PAT(0xffffffff),};static const uint32_t dmask4[4] = {    PAT(0x00000000),    PAT(0x0000ffff),    PAT(0xffff0000),    PAT(0xffffffff),};static uint32_t expand4[256];static uint16_t expand2[256];static uint8_t expand4to8[16];static void vga_screen_dump(void *opaque, const char *filename);static uint32_t vga_ioport_read(void *opaque, uint32_t addr){    VGAState *s = opaque;    int val, index;    /* check port range access depending on color/monochrome mode */    if ((addr >= 0x3b0 && addr <= 0x3bf && (s->msr & MSR_COLOR_EMULATION)) ||        (addr >= 0x3d0 && addr <= 0x3df && !(s->msr & MSR_COLOR_EMULATION))) {        val = 0xff;    } else {        switch(addr) {        case 0x3c0:            if (s->ar_flip_flop == 0) {                val = s->ar_index;            } else {                val = 0;            }            break;        case 0x3c1:            index = s->ar_index & 0x1f;            if (index < 21)                val = s->ar[index];            else                val = 0;            break;        case 0x3c2:            val = s->st00;            break;        case 0x3c4:            val = s->sr_index;            break;        case 0x3c5:            val = s->sr[s->sr_index];#ifdef DEBUG_VGA_REG            printf("vga: read SR%x = 0x%02x\n", s->sr_index, val);#endif            break;        case 0x3c7:            val = s->dac_state;            break;	case 0x3c8:	    val = s->dac_write_index;	    break;        case 0x3c9:            val = s->palette[s->dac_read_index * 3 + s->dac_sub_index];            if (++s->dac_sub_index == 3) {                s->dac_sub_index = 0;                s->dac_read_index++;            }            break;        case 0x3ca:            val = s->fcr;            break;        case 0x3cc:            val = s->msr;            break;        case 0x3ce:            val = s->gr_index;            break;        case 0x3cf:            val = s->gr[s->gr_index];#ifdef DEBUG_VGA_REG            printf("vga: read GR%x = 0x%02x\n", s->gr_index, val);#endif            break;        case 0x3b4:        case 0x3d4:            val = s->cr_index;            break;        case 0x3b5:        case 0x3d5:            val = s->cr[s->cr_index];#ifdef DEBUG_VGA_REG            printf("vga: read CR%x = 0x%02x\n", s->cr_index, val);#endif            break;        case 0x3ba:        case 0x3da:            /* just toggle to fool polling */            s->st01 ^= ST01_V_RETRACE | ST01_DISP_ENABLE;            val = s->st01;            s->ar_flip_flop = 0;            break;        default:            val = 0x00;            break;        }    }#if defined(DEBUG_VGA)    printf("VGA: read addr=0x%04x data=0x%02x\n", addr, val);#endif    return val;}static void vga_ioport_write(void *opaque, uint32_t addr, uint32_t val){    VGAState *s = opaque;    int index;    /* check port range access depending on color/monochrome mode */    if ((addr >= 0x3b0 && addr <= 0x3bf && (s->msr & MSR_COLOR_EMULATION)) ||        (addr >= 0x3d0 && addr <= 0x3df && !(s->msr & MSR_COLOR_EMULATION)))        return;#ifdef DEBUG_VGA    printf("VGA: write addr=0x%04x data=0x%02x\n", addr, val);#endif    switch(addr) {    case 0x3c0:        if (s->ar_flip_flop == 0) {            val &= 0x3f;            s->ar_index = val;        } else {            index = s->ar_index & 0x1f;            switch(index) {            case 0x00 ... 0x0f:                s->ar[index] = val & 0x3f;                break;            case 0x10:                s->ar[index] = val & ~0x10;                break;            case 0x11:                s->ar[index] = val;                break;            case 0x12:                s->ar[index] = val & ~0xc0;                break;            case 0x13:                s->ar[index] = val & ~0xf0;                break;            case 0x14:                s->ar[index] = val & ~0xf0;                break;            default:                break;            }        }        s->ar_flip_flop ^= 1;        break;    case 0x3c2:        s->msr = val & ~0x10;        break;    case 0x3c4:        s->sr_index = val & 7;        break;    case 0x3c5:#ifdef DEBUG_VGA_REG        printf("vga: write SR%x = 0x%02x\n", s->sr_index, val);#endif        s->sr[s->sr_index] = val & sr_mask[s->sr_index];        break;    case 0x3c7:        s->dac_read_index = val;        s->dac_sub_index = 0;        s->dac_state = 3;        break;    case 0x3c8:        s->dac_write_index = val;        s->dac_sub_index = 0;        s->dac_state = 0;        break;    case 0x3c9:        s->dac_cache[s->dac_sub_index] = val;        if (++s->dac_sub_index == 3) {            memcpy(&s->palette[s->dac_write_index * 3], s->dac_cache, 3);            s->dac_sub_index = 0;            s->dac_write_index++;        }        break;    case 0x3ce:        s->gr_index = val & 0x0f;        break;    case 0x3cf:#ifdef DEBUG_VGA_REG        printf("vga: write GR%x = 0x%02x\n", s->gr_index, val);#endif        s->gr[s->gr_index] = val & gr_mask[s->gr_index];        break;    case 0x3b4:    case 0x3d4:        s->cr_index = val;        break;    case 0x3b5:    case 0x3d5:#ifdef DEBUG_VGA_REG        printf("vga: write CR%x = 0x%02x\n", s->cr_index, val);#endif        /* handle CR0-7 protection */        if ((s->cr[0x11] & 0x80) && s->cr_index <= 7) {            /* can always write bit 4 of CR7 */            if (s->cr_index == 7)                s->cr[7] = (s->cr[7] & ~0x10) | (val & 0x10);            return;        }        switch(s->cr_index) {        case 0x01: /* horizontal display end */        case 0x07:        case 0x09:        case 0x0c:        case 0x0d:        case 0x12: /* vertical display end */            s->cr[s->cr_index] = val;            break;        default:            s->cr[s->cr_index] = val;            break;        }        break;    case 0x3ba:    case 0x3da:        s->fcr = val & 0x10;        break;    }}#ifdef CONFIG_BOCHS_VBEstatic uint32_t vbe_ioport_read_index(void *opaque, uint32_t addr){    VGAState *s = opaque;    uint32_t val;    val = s->vbe_index;    return val;}static uint32_t vbe_ioport_read_data(void *opaque, uint32_t addr){    VGAState *s = opaque;    uint32_t val;    if (s->vbe_index <= VBE_DISPI_INDEX_NB) {        if (s->vbe_regs[VBE_DISPI_INDEX_ENABLE] & VBE_DISPI_GETCAPS) {            switch(s->vbe_index) {                /* XXX: do not hardcode ? */            case VBE_DISPI_INDEX_XRES:                val = VBE_DISPI_MAX_XRES;                break;            case VBE_DISPI_INDEX_YRES:                val = VBE_DISPI_MAX_YRES;                break;            case VBE_DISPI_INDEX_BPP:                val = VBE_DISPI_MAX_BPP;                break;            default:                val = s->vbe_regs[s->vbe_index];                break;            }        } else {            val = s->vbe_regs[s->vbe_index];        }    } else {        val = 0;    }#ifdef DEBUG_BOCHS_VBE    printf("VBE: read index=0x%x val=0x%x\n", s->vbe_index, val);#endif    return val;}static void vbe_ioport_write_index(void *opaque, uint32_t addr, uint32_t val){    VGAState *s = opaque;    s->vbe_index = val;}static void vbe_ioport_write_data(void *opaque, uint32_t addr, uint32_t val){    VGAState *s = opaque;    if (s->vbe_index <= VBE_DISPI_INDEX_NB) {#ifdef DEBUG_BOCHS_VBE        printf("VBE: write index=0x%x val=0x%x\n", s->vbe_index, val);#endif        switch(s->vbe_index) {        case VBE_DISPI_INDEX_ID:            if (val == VBE_DISPI_ID0 ||                val == VBE_DISPI_ID1 ||                val == VBE_DISPI_ID2 ||                val == VBE_DISPI_ID3 ||                val == VBE_DISPI_ID4) {                s->vbe_regs[s->vbe_index] = val;            }            break;        case VBE_DISPI_INDEX_XRES:            if ((val <= VBE_DISPI_MAX_XRES) && ((val & 7) == 0)) {                s->vbe_regs[s->vbe_index] = val;            }            break;        case VBE_DISPI_INDEX_YRES:            if (val <= VBE_DISPI_MAX_YRES) {                s->vbe_regs[s->vbe_index] = val;            }            break;        case VBE_DISPI_INDEX_BPP:            if (val == 0)                val = 8;            if (val == 4 || val == 8 || val == 15 ||                val == 16 || val == 24 || val == 32) {                s->vbe_regs[s->vbe_index] = val;            }            break;        case VBE_DISPI_INDEX_BANK:            if (s->vbe_regs[VBE_DISPI_INDEX_BPP] == 4) {              val &= (s->vbe_bank_mask >> 2);            } else {              val &= s->vbe_bank_mask;            }            s->vbe_regs[s->vbe_index] = val;            s->bank_offset = (val << 16);            break;        case VBE_DISPI_INDEX_ENABLE:            if ((val & VBE_DISPI_ENABLED) &&                !(s->vbe_regs[VBE_DISPI_INDEX_ENABLE] & VBE_DISPI_ENABLED)) {                int h, shift_control;                s->vbe_regs[VBE_DISPI_INDEX_VIRT_WIDTH] =                    s->vbe_regs[VBE_DISPI_INDEX_XRES];                s->vbe_regs[VBE_DISPI_INDEX_VIRT_HEIGHT] =                    s->vbe_regs[VBE_DISPI_INDEX_YRES];                s->vbe_regs[VBE_DISPI_INDEX_X_OFFSET] = 0;                s->vbe_regs[VBE_DISPI_INDEX_Y_OFFSET] = 0;                if (s->vbe_regs[VBE_DISPI_INDEX_BPP] == 4)                    s->vbe_line_offset = s->vbe_regs[VBE_DISPI_INDEX_XRES] >> 1;                else                    s->vbe_line_offset = s->vbe_regs[VBE_DISPI_INDEX_XRES] *                        ((s->vbe_regs[VBE_DISPI_INDEX_BPP] + 7) >> 3);                s->vbe_start_addr = 0;                /* clear the screen (should be done in BIOS) */                if (!(val & VBE_DISPI_NOCLEARMEM)) {                    memset(s->vram_ptr, 0,                           s->vbe_regs[VBE_DISPI_INDEX_YRES] * s->vbe_line_offset);                }                /* we initialize the VGA graphic mode (should be done                   in BIOS) */                s->gr[0x06] = (s->gr[0x06] & ~0x0c) | 0x05; /* graphic mode + memory map 1 */                s->cr[0x17] |= 3; /* no CGA modes */                s->cr[0x13] = s->vbe_line_offset >> 3;                /* width */                s->cr[0x01] = (s->vbe_regs[VBE_DISPI_INDEX_XRES] >> 3) - 1;                /* height (only meaningful if < 1024) */                h = s->vbe_regs[VBE_DISPI_INDEX_YRES] - 1;                s->cr[0x12] = h;                s->cr[0x07] = (s->cr[0x07] & ~0x42) |                    ((h >> 7) & 0x02) | ((h >> 3) & 0x40);                /* line compare to 1023 */                s->cr[0x18] = 0xff;                s->cr[0x07] |= 0x10;                s->cr[0x09] |= 0x40;                if (s->vbe_regs[VBE_DISPI_INDEX_BPP] == 4) {                    shift_control = 0;                    s->sr[0x01] &= ~8; /* no double line */                } else {                    shift_control = 2;                    s->sr[4] |= 0x08; /* set chain 4 mode */                    s->sr[2] |= 0x0f; /* activate all planes */                }                s->gr[0x05] = (s->gr[0x05] & ~0x60) | (shift_control << 5);                s->cr[0x09] &= ~0x9f; /* no double scan */            } else {                /* XXX: the bios should do that */                s->bank_offset = 0;            }            s->dac_8bit = (val & VBE_DISPI_8BIT_DAC) > 0;            s->vbe_regs[s->vbe_index] = val;            break;        case VBE_DISPI_INDEX_VIRT_WIDTH:            {                int w, h, line_offset;                if (val < s->vbe_regs[VBE_DISPI_INDEX_XRES])                    return;                w = val;                if (s->vbe_regs[VBE_DISPI_INDEX_BPP] == 4)                    line_offset = w >> 1;                else                    line_offset = w * ((s->vbe_regs[VBE_DISPI_INDEX_BPP] + 7) >> 3);                h = s->vram_size / line_offset;                /* XXX: support weird bochs semantics ? */                if (h < s->vbe_regs[VBE_DISPI_INDEX_YRES])

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩色视频在线观看| 91免费视频大全| 91蜜桃网址入口| 国产精品九色蝌蚪自拍| 精品久久久久久久久久久久久久久久久| 亚洲444eee在线观看| 精品一二三四在线| 一本一道综合狠狠老| 日韩午夜在线观看| 国产精品高清亚洲| 日日夜夜一区二区| 成人免费高清在线观看| 911精品国产一区二区在线| 久久久久亚洲蜜桃| 日韩国产高清影视| bt7086福利一区国产| 91精品国产综合久久久久| www日韩大片| 亚洲综合男人的天堂| 国产乱码一区二区三区| 在线视频综合导航| 日本一区二区三区国色天香| 午夜一区二区三区在线观看| 日本在线观看不卡视频| av爱爱亚洲一区| 久久噜噜亚洲综合| 国产精品成人网| 狠狠色丁香久久婷婷综| 欧美影院一区二区| 国产精品久久久久9999吃药| 亚洲精品v日韩精品| 国产99久久久国产精品潘金 | 国产美女久久久久| 在线观看欧美黄色| 国产精品系列在线| 国产酒店精品激情| 精品国产一区二区三区忘忧草| 亚洲精品午夜久久久| 岛国精品在线观看| 国产欧美久久久精品影院| 亚洲成va人在线观看| 91美女蜜桃在线| 亚洲免费色视频| 白白色 亚洲乱淫| 欧美激情艳妇裸体舞| 国产成人av自拍| 久久久精品国产免大香伊| 日本伊人精品一区二区三区观看方式| 在线视频欧美区| 亚洲激情网站免费观看| 成人app在线观看| 成人欧美一区二区三区小说| 另类小说欧美激情| 欧美大片国产精品| 美女被吸乳得到大胸91| 精品粉嫩aⅴ一区二区三区四区| 日韩av午夜在线观看| 日韩一级黄色大片| 极品少妇xxxx精品少妇| 欧美精品一区视频| 风间由美一区二区三区在线观看 | 欧美狂野另类xxxxoooo| 精品中文av资源站在线观看| 中文字幕精品一区二区三区精品| 91免费版pro下载短视频| 蜜桃一区二区三区四区| 国产欧美精品日韩区二区麻豆天美| 色婷婷精品大在线视频| 美腿丝袜在线亚洲一区| 中文字幕亚洲一区二区av在线| 在线观看日韩电影| 国产激情视频一区二区在线观看 | 国产欧美视频一区二区三区| 色呦呦网站一区| 精品无码三级在线观看视频 | 91在线精品一区二区三区| 蜜桃久久久久久| 亚洲欧洲美洲综合色网| 91精品国产综合久久久久久| 99国产精品视频免费观看| 蜜臀av在线播放一区二区三区| 中文字幕日韩一区| 久久免费午夜影院| 欧美精品国产精品| 一本在线高清不卡dvd| 国产一区二三区| 视频一区中文字幕| 亚洲一区在线观看免费 | 日韩精品在线一区二区| 在线亚洲一区观看| 丁香激情综合国产| 国产一区二区三区黄视频| 日日摸夜夜添夜夜添精品视频| 国产精品美女久久久久av爽李琼| 欧美一卡2卡3卡4卡| 色偷偷88欧美精品久久久| 国产suv精品一区二区三区 | 亚洲va欧美va天堂v国产综合| 国产精品系列在线| 国产区在线观看成人精品| 精品欧美久久久| 91精品蜜臀在线一区尤物| 欧美视频一区在线| 欧美日韩一区二区三区在线看| 99久久精品国产毛片| 成人av在线资源网站| 国产激情91久久精品导航| 狠狠v欧美v日韩v亚洲ⅴ| 日本欧美一区二区在线观看| 午夜电影网一区| 日本系列欧美系列| 日本免费新一区视频| 五月婷婷激情综合| 五月天精品一区二区三区| 亚洲1区2区3区4区| 日韩av一二三| 久久99久久精品| 国产一区二区三区综合| 激情五月激情综合网| 国产精品一级在线| 成人影视亚洲图片在线| 丁香一区二区三区| 99re免费视频精品全部| 色视频成人在线观看免| 欧美三级日韩在线| 在线不卡免费av| 精品成人a区在线观看| 久久综合999| 亚洲免费在线看| 日韩av一级片| 高清不卡一区二区在线| 91在线观看一区二区| 欧美无乱码久久久免费午夜一区| 欧美日韩精品欧美日韩精品一| 欧美一级黄色大片| 中文文精品字幕一区二区| 亚洲欧洲国产日韩| 五月天国产精品| 黄色精品一二区| 色婷婷久久99综合精品jk白丝| 欧美日本在线观看| 国产午夜精品一区二区三区嫩草| 国产精品美女久久久久高潮| 亚洲乱码国产乱码精品精98午夜| 亚洲18色成人| 国产99久久久久久免费看农村| 成+人+亚洲+综合天堂| av一本久道久久综合久久鬼色| 欧美性一区二区| 精品福利一二区| 中文字幕一区二区三区精华液| 亚洲成人三级小说| 成人综合婷婷国产精品久久| 欧美性色aⅴ视频一区日韩精品| 日韩一区二区三免费高清| 中文字幕久久午夜不卡| 五月激情六月综合| www.亚洲免费av| 26uuuu精品一区二区| 亚洲午夜视频在线| 国产a级毛片一区| 日韩精品中文字幕一区| 一区二区免费在线| 国产成人av电影在线| 在线综合亚洲欧美在线视频| 中文字幕高清不卡| 理论片日本一区| 欧美在线999| 中文字幕一区二区三区不卡在线 | 91麻豆视频网站| 久久午夜免费电影| 热久久久久久久| 欧洲国内综合视频| 国产精品久久久久婷婷| 激情国产一区二区| 91精品国产综合久久久久久| 亚洲欧美日韩一区二区| 国产成人午夜高潮毛片| 日韩精品一区国产麻豆| 午夜精品成人在线视频| 欧美性猛交xxxx乱大交退制版| 中文字幕国产精品一区二区| 国产综合色产在线精品| 日韩一区二区三区免费看 | 91精品久久久久久久久99蜜臂| 亚洲免费av观看| 不卡高清视频专区| 国产欧美视频在线观看| 国产精品一区一区| 久久精子c满五个校花| 精品一区二区三区不卡| 日韩欧美的一区| 美女性感视频久久| 日韩欧美激情在线| 麻豆精品一区二区三区| 91精品欧美久久久久久动漫 | 日韩一级大片在线观看| 美女一区二区视频| 精品久久国产字幕高潮| 美国三级日本三级久久99|