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

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

?? pckbd.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
字號:
/* * QEMU PC keyboard emulation * * 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 "isa.h"#include "pc.h"#include "ps2.h"#include "sysemu.h"/* debug PC keyboard *///#define DEBUG_KBD/* debug PC keyboard : only mouse *///#define DEBUG_MOUSE/*	Keyboard Controller Commands */#define KBD_CCMD_READ_MODE	0x20	/* Read mode bits */#define KBD_CCMD_WRITE_MODE	0x60	/* Write mode bits */#define KBD_CCMD_GET_VERSION	0xA1	/* Get controller version */#define KBD_CCMD_MOUSE_DISABLE	0xA7	/* Disable mouse interface */#define KBD_CCMD_MOUSE_ENABLE	0xA8	/* Enable mouse interface */#define KBD_CCMD_TEST_MOUSE	0xA9	/* Mouse interface test */#define KBD_CCMD_SELF_TEST	0xAA	/* Controller self test */#define KBD_CCMD_KBD_TEST	0xAB	/* Keyboard interface test */#define KBD_CCMD_KBD_DISABLE	0xAD	/* Keyboard interface disable */#define KBD_CCMD_KBD_ENABLE	0xAE	/* Keyboard interface enable */#define KBD_CCMD_READ_INPORT    0xC0    /* read input port */#define KBD_CCMD_READ_OUTPORT	0xD0    /* read output port */#define KBD_CCMD_WRITE_OUTPORT	0xD1    /* write output port */#define KBD_CCMD_WRITE_OBUF	0xD2#define KBD_CCMD_WRITE_AUX_OBUF	0xD3    /* Write to output buffer as if					   initiated by the auxiliary device */#define KBD_CCMD_WRITE_MOUSE	0xD4	/* Write the following byte to the mouse */#define KBD_CCMD_DISABLE_A20    0xDD    /* HP vectra only ? */#define KBD_CCMD_ENABLE_A20     0xDF    /* HP vectra only ? */#define KBD_CCMD_RESET	        0xFE/* Keyboard Commands */#define KBD_CMD_SET_LEDS	0xED	/* Set keyboard leds */#define KBD_CMD_ECHO     	0xEE#define KBD_CMD_GET_ID 	        0xF2	/* get keyboard ID */#define KBD_CMD_SET_RATE	0xF3	/* Set typematic rate */#define KBD_CMD_ENABLE		0xF4	/* Enable scanning */#define KBD_CMD_RESET_DISABLE	0xF5	/* reset and disable scanning */#define KBD_CMD_RESET_ENABLE   	0xF6    /* reset and enable scanning */#define KBD_CMD_RESET		0xFF	/* Reset *//* Keyboard Replies */#define KBD_REPLY_POR		0xAA	/* Power on reset */#define KBD_REPLY_ACK		0xFA	/* Command ACK */#define KBD_REPLY_RESEND	0xFE	/* Command NACK, send the cmd again *//* Status Register Bits */#define KBD_STAT_OBF 		0x01	/* Keyboard output buffer full */#define KBD_STAT_IBF 		0x02	/* Keyboard input buffer full */#define KBD_STAT_SELFTEST	0x04	/* Self test successful */#define KBD_STAT_CMD		0x08	/* Last write was a command write (0=data) */#define KBD_STAT_UNLOCKED	0x10	/* Zero if keyboard locked */#define KBD_STAT_MOUSE_OBF	0x20	/* Mouse output buffer full */#define KBD_STAT_GTO 		0x40	/* General receive/xmit timeout */#define KBD_STAT_PERR 		0x80	/* Parity error *//* Controller Mode Register Bits */#define KBD_MODE_KBD_INT	0x01	/* Keyboard data generate IRQ1 */#define KBD_MODE_MOUSE_INT	0x02	/* Mouse data generate IRQ12 */#define KBD_MODE_SYS 		0x04	/* The system flag (?) */#define KBD_MODE_NO_KEYLOCK	0x08	/* The keylock doesn't affect the keyboard if set */#define KBD_MODE_DISABLE_KBD	0x10	/* Disable keyboard interface */#define KBD_MODE_DISABLE_MOUSE	0x20	/* Disable mouse interface */#define KBD_MODE_KCC 		0x40	/* Scan code conversion to PC format */#define KBD_MODE_RFU		0x80/* Mouse Commands */#define AUX_SET_SCALE11		0xE6	/* Set 1:1 scaling */#define AUX_SET_SCALE21		0xE7	/* Set 2:1 scaling */#define AUX_SET_RES		0xE8	/* Set resolution */#define AUX_GET_SCALE		0xE9	/* Get scaling factor */#define AUX_SET_STREAM		0xEA	/* Set stream mode */#define AUX_POLL		0xEB	/* Poll */#define AUX_RESET_WRAP		0xEC	/* Reset wrap mode */#define AUX_SET_WRAP		0xEE	/* Set wrap mode */#define AUX_SET_REMOTE		0xF0	/* Set remote mode */#define AUX_GET_TYPE		0xF2	/* Get type */#define AUX_SET_SAMPLE		0xF3	/* Set sample rate */#define AUX_ENABLE_DEV		0xF4	/* Enable aux device */#define AUX_DISABLE_DEV		0xF5	/* Disable aux device */#define AUX_SET_DEFAULT		0xF6#define AUX_RESET		0xFF	/* Reset aux device */#define AUX_ACK			0xFA	/* Command byte ACK. */#define MOUSE_STATUS_REMOTE     0x40#define MOUSE_STATUS_ENABLED    0x20#define MOUSE_STATUS_SCALE21    0x10#define KBD_QUEUE_SIZE 256#define KBD_PENDING_KBD         1#define KBD_PENDING_AUX         2typedef struct KBDState {    uint8_t write_cmd; /* if non zero, write data to port 60 is expected */    uint8_t status;    uint8_t mode;    /* Bitmask of devices with data available.  */    uint8_t pending;    void *kbd;    void *mouse;    qemu_irq irq_kbd;    qemu_irq irq_mouse;    target_phys_addr_t base;    int it_shift;} KBDState;KBDState kbd_state;/* update irq and KBD_STAT_[MOUSE_]OBF *//* XXX: not generating the irqs if KBD_MODE_DISABLE_KBD is set may be   incorrect, but it avoids having to simulate exact delays */static void kbd_update_irq(KBDState *s){    int irq_kbd_level, irq_mouse_level;    irq_kbd_level = 0;    irq_mouse_level = 0;    s->status &= ~(KBD_STAT_OBF | KBD_STAT_MOUSE_OBF);    if (s->pending) {        s->status |= KBD_STAT_OBF;        /* kbd data takes priority over aux data.  */        if (s->pending == KBD_PENDING_AUX) {            s->status |= KBD_STAT_MOUSE_OBF;            if (s->mode & KBD_MODE_MOUSE_INT)                irq_mouse_level = 1;        } else {            if ((s->mode & KBD_MODE_KBD_INT) &&                !(s->mode & KBD_MODE_DISABLE_KBD))                irq_kbd_level = 1;        }    }    qemu_set_irq(s->irq_kbd, irq_kbd_level);    qemu_set_irq(s->irq_mouse, irq_mouse_level);}static void kbd_update_kbd_irq(void *opaque, int level){    KBDState *s = (KBDState *)opaque;    if (level)        s->pending |= KBD_PENDING_KBD;    else        s->pending &= ~KBD_PENDING_KBD;    kbd_update_irq(s);}static void kbd_update_aux_irq(void *opaque, int level){    KBDState *s = (KBDState *)opaque;    if (level)        s->pending |= KBD_PENDING_AUX;    else        s->pending &= ~KBD_PENDING_AUX;    kbd_update_irq(s);}static uint32_t kbd_read_status(void *opaque, uint32_t addr){    KBDState *s = opaque;    int val;    val = s->status;#if defined(DEBUG_KBD)    printf("kbd: read status=0x%02x\n", val);#endif    return val;}static void kbd_queue(KBDState *s, int b, int aux){    if (aux)        ps2_queue(s->mouse, b);    else        ps2_queue(s->kbd, b);}static void kbd_write_command(void *opaque, uint32_t addr, uint32_t val){    KBDState *s = opaque;#ifdef DEBUG_KBD    printf("kbd: write cmd=0x%02x\n", val);#endif    switch(val) {    case KBD_CCMD_READ_MODE:        kbd_queue(s, s->mode, 1);        break;    case KBD_CCMD_WRITE_MODE:    case KBD_CCMD_WRITE_OBUF:    case KBD_CCMD_WRITE_AUX_OBUF:    case KBD_CCMD_WRITE_MOUSE:    case KBD_CCMD_WRITE_OUTPORT:        s->write_cmd = val;        break;    case KBD_CCMD_MOUSE_DISABLE:        s->mode |= KBD_MODE_DISABLE_MOUSE;        break;    case KBD_CCMD_MOUSE_ENABLE:        s->mode &= ~KBD_MODE_DISABLE_MOUSE;        break;    case KBD_CCMD_TEST_MOUSE:        kbd_queue(s, 0x00, 0);        break;    case KBD_CCMD_SELF_TEST:        s->status |= KBD_STAT_SELFTEST;        kbd_queue(s, 0x55, 0);        break;    case KBD_CCMD_KBD_TEST:        kbd_queue(s, 0x00, 0);        break;    case KBD_CCMD_KBD_DISABLE:        s->mode |= KBD_MODE_DISABLE_KBD;        kbd_update_irq(s);        break;    case KBD_CCMD_KBD_ENABLE:        s->mode &= ~KBD_MODE_DISABLE_KBD;        kbd_update_irq(s);        break;    case KBD_CCMD_READ_INPORT:        kbd_queue(s, 0x00, 0);        break;    case KBD_CCMD_READ_OUTPORT:        /* XXX: check that */#ifdef TARGET_I386        val = 0x01 | (ioport_get_a20() << 1);#else        val = 0x01;#endif        if (s->status & KBD_STAT_OBF)            val |= 0x10;        if (s->status & KBD_STAT_MOUSE_OBF)            val |= 0x20;        kbd_queue(s, val, 0);        break;#ifdef TARGET_I386    case KBD_CCMD_ENABLE_A20:        ioport_set_a20(1);        break;    case KBD_CCMD_DISABLE_A20:        ioport_set_a20(0);        break;#endif    case KBD_CCMD_RESET:        qemu_system_reset_request();        break;    case 0xff:        /* ignore that - I don't know what is its use */        break;    default:        fprintf(stderr, "qemu: unsupported keyboard cmd=0x%02x\n", val);        break;    }}static uint32_t kbd_read_data(void *opaque, uint32_t addr){    KBDState *s = opaque;    if (s->pending == KBD_PENDING_AUX)        return ps2_read_data(s->mouse);    return ps2_read_data(s->kbd);}static void kbd_write_data(void *opaque, uint32_t addr, uint32_t val){    KBDState *s = opaque;#ifdef DEBUG_KBD    printf("kbd: write data=0x%02x\n", val);#endif    switch(s->write_cmd) {    case 0:        ps2_write_keyboard(s->kbd, val);        break;    case KBD_CCMD_WRITE_MODE:        s->mode = val;        ps2_keyboard_set_translation(s->kbd, (s->mode & KBD_MODE_KCC) != 0);        /* ??? */        kbd_update_irq(s);        break;    case KBD_CCMD_WRITE_OBUF:        kbd_queue(s, val, 0);        break;    case KBD_CCMD_WRITE_AUX_OBUF:        kbd_queue(s, val, 1);        break;    case KBD_CCMD_WRITE_OUTPORT:#ifdef TARGET_I386        ioport_set_a20((val >> 1) & 1);#endif        if (!(val & 1)) {            qemu_system_reset_request();        }        break;    case KBD_CCMD_WRITE_MOUSE:        ps2_write_mouse(s->mouse, val);        break;    default:        break;    }    s->write_cmd = 0;}static void kbd_reset(void *opaque){    KBDState *s = opaque;    s->mode = KBD_MODE_KBD_INT | KBD_MODE_MOUSE_INT;    s->status = KBD_STAT_CMD | KBD_STAT_UNLOCKED;}static void kbd_save(QEMUFile* f, void* opaque){    KBDState *s = (KBDState*)opaque;    qemu_put_8s(f, &s->write_cmd);    qemu_put_8s(f, &s->status);    qemu_put_8s(f, &s->mode);    qemu_put_8s(f, &s->pending);}static int kbd_load(QEMUFile* f, void* opaque, int version_id){    KBDState *s = (KBDState*)opaque;    if (version_id != 3)        return -EINVAL;    qemu_get_8s(f, &s->write_cmd);    qemu_get_8s(f, &s->status);    qemu_get_8s(f, &s->mode);    qemu_get_8s(f, &s->pending);    return 0;}void i8042_init(qemu_irq kbd_irq, qemu_irq mouse_irq, uint32_t io_base){    KBDState *s = &kbd_state;    s->irq_kbd = kbd_irq;    s->irq_mouse = mouse_irq;    kbd_reset(s);    register_savevm("pckbd", 0, 3, kbd_save, kbd_load, s);    register_ioport_read(io_base, 1, 1, kbd_read_data, s);    register_ioport_write(io_base, 1, 1, kbd_write_data, s);    register_ioport_read(io_base + 4, 1, 1, kbd_read_status, s);    register_ioport_write(io_base + 4, 1, 1, kbd_write_command, s);    s->kbd = ps2_kbd_init(kbd_update_kbd_irq, s);    s->mouse = ps2_mouse_init(kbd_update_aux_irq, s);#ifdef TARGET_I386    vmmouse_init(s->mouse);#endif    qemu_register_reset(kbd_reset, s);}/* Memory mapped interface */static uint32_t kbd_mm_readb (void *opaque, target_phys_addr_t addr){    KBDState *s = opaque;    switch ((addr - s->base) >> s->it_shift) {    case 0:        return kbd_read_data(s, 0) & 0xff;    case 1:        return kbd_read_status(s, 0) & 0xff;    default:        return 0xff;    }}static void kbd_mm_writeb (void *opaque, target_phys_addr_t addr, uint32_t value){    KBDState *s = opaque;    switch ((addr - s->base) >> s->it_shift) {    case 0:        kbd_write_data(s, 0, value & 0xff);        break;    case 1:        kbd_write_command(s, 0, value & 0xff);        break;    }}static CPUReadMemoryFunc *kbd_mm_read[] = {    &kbd_mm_readb,    &kbd_mm_readb,    &kbd_mm_readb,};static CPUWriteMemoryFunc *kbd_mm_write[] = {    &kbd_mm_writeb,    &kbd_mm_writeb,    &kbd_mm_writeb,};void i8042_mm_init(qemu_irq kbd_irq, qemu_irq mouse_irq,                   target_phys_addr_t base, int it_shift){    KBDState *s = &kbd_state;    int s_io_memory;    s->irq_kbd = kbd_irq;    s->irq_mouse = mouse_irq;    s->base = base;    s->it_shift = it_shift;    kbd_reset(s);    register_savevm("pckbd", 0, 3, kbd_save, kbd_load, s);    s_io_memory = cpu_register_io_memory(0, kbd_mm_read, kbd_mm_write, s);    cpu_register_physical_memory(base, 8 << it_shift, s_io_memory);    s->kbd = ps2_kbd_init(kbd_update_kbd_irq, s);    s->mouse = ps2_mouse_init(kbd_update_aux_irq, s);#ifdef TARGET_I386    vmmouse_init(s->mouse);#endif    qemu_register_reset(kbd_reset, s);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产乱码精品一区二区三区忘忧草| 国内精品久久久久影院一蜜桃| 337p亚洲精品色噜噜| 国产精品69久久久久水密桃 | 最新日韩av在线| 欧美三级一区二区| 丰满白嫩尤物一区二区| 免费人成网站在线观看欧美高清| 亚洲男同性视频| 国产欧美精品一区aⅴ影院 | 精品久久一区二区三区| 91久久人澡人人添人人爽欧美| 久久电影网站中文字幕| 亚洲福利国产精品| 亚洲三级在线播放| 国产精品美女www爽爽爽| 亚洲精品一区二区三区蜜桃下载| 欧美在线高清视频| 99精品视频在线观看免费| 国产黑丝在线一区二区三区| 麻豆精品在线看| 天天综合天天做天天综合| 一区二区在线免费观看| 国产精品看片你懂得| 久久久国产精品麻豆| 欧美大片免费久久精品三p| 欧美日韩国产中文| 欧美亚洲日本国产| 欧美亚州韩日在线看免费版国语版| 成人免费高清在线| www.久久精品| 成人av先锋影音| 成人免费av在线| 成人国产视频在线观看| 国产成人午夜精品影院观看视频| 国产在线日韩欧美| 国产河南妇女毛片精品久久久 | 亚洲自拍欧美精品| 一区二区三区欧美视频| 亚洲女与黑人做爰| 亚洲精品乱码久久久久久久久| 亚洲免费三区一区二区| 亚洲日本在线a| 亚洲精品国产一区二区精华液| 亚洲视频免费看| 一区二区三区日韩精品| 亚洲一二三四久久| 爽爽淫人综合网网站| 日本在线播放一区二区三区| 琪琪久久久久日韩精品| 九九热在线视频观看这里只有精品 | 精品日韩99亚洲| 久久久不卡影院| 亚洲丝袜制服诱惑| 亚洲国产一区二区视频| 日本网站在线观看一区二区三区| 日韩精品一二三四| 国产精品亚洲一区二区三区在线 | av欧美精品.com| 一本色道久久综合狠狠躁的推荐 | 日本aⅴ精品一区二区三区| 琪琪久久久久日韩精品| 国模娜娜一区二区三区| 国产成人av影院| 色呦呦一区二区三区| 欧美日韩视频专区在线播放| 日韩一区二区三区av| 国产欧美一区二区精品忘忧草| 日韩毛片一二三区| 亚洲不卡av一区二区三区| 美女看a上一区| 岛国一区二区在线观看| 色噜噜狠狠成人中文综合| 制服丝袜激情欧洲亚洲| 国产亚洲欧美色| 亚洲综合激情小说| 久久99热国产| 91一区二区在线观看| 欧美丰满一区二区免费视频| 久久亚洲精精品中文字幕早川悠里| 欧美在线色视频| 69成人精品免费视频| 3d动漫精品啪啪一区二区竹菊| 欧美视频精品在线观看| 久久亚洲精精品中文字幕早川悠里 | 亚洲va国产va欧美va观看| 国产福利91精品一区| 狠狠色狠狠色综合| 成人久久久精品乱码一区二区三区| 91精品国产一区二区三区蜜臀| 美日韩黄色大片| 26uuu亚洲综合色欧美| 国产乱淫av一区二区三区| 日本道色综合久久| 91看片淫黄大片一级| 欧洲一区二区三区在线| 9色porny自拍视频一区二区| 9l国产精品久久久久麻豆| 久久久av毛片精品| 中文字幕一区二区三区精华液| 一个色在线综合| 欧美日韩一级视频| 久久美女艺术照精彩视频福利播放| 午夜久久福利影院| 99久久免费精品高清特色大片| 精品伦理精品一区| 亚洲一卡二卡三卡四卡| 欧美巨大另类极品videosbest| 国产日产精品一区| 日韩国产在线观看| 一本久久精品一区二区| 一区在线播放视频| 一本色道久久综合亚洲91| 日韩欧美你懂的| 日韩精品一级二级| 日韩精品专区在线影院观看 | 国产日韩欧美精品电影三级在线| 2020国产精品久久精品美国| 亚洲成av人**亚洲成av**| 岛国一区二区三区| 欧美一区二区日韩| 日韩电影在线一区二区| 欧美色中文字幕| 亚洲图片欧美激情| 狠狠色综合色综合网络| 91免费观看在线| 亚洲黄色性网站| 欧美一区二区国产| a级精品国产片在线观看| 亚洲一区二区三区精品在线| 91久久久免费一区二区| 亚洲精品一区二区在线观看| 不卡的av在线| 免费成人小视频| 精品福利一二区| 欧美日韩精品福利| 色8久久精品久久久久久蜜| 国产精品久久久久永久免费观看| 日韩欧美三级在线| 欧美性猛交xxxx黑人交| 国产制服丝袜一区| 欧美一区二区二区| 亚洲一区二区高清| 欧美日韩一区在线观看| 一区二区三区欧美久久| 欧美丝袜丝nylons| 三级在线观看一区二区| 91精品一区二区三区在线观看| 天天爽夜夜爽夜夜爽精品视频| 欧美日韩精品一区视频| 婷婷成人激情在线网| 日韩亚洲欧美成人一区| 美女视频黄久久| 国产欧美视频一区二区| av电影一区二区| 亚洲国产一区二区在线播放| 8x8x8国产精品| 久久99热99| 中文字幕精品三区| 色激情天天射综合网| 日本一区中文字幕| 久久精品在线免费观看| 99热精品一区二区| 亚洲国产成人av好男人在线观看| 337p亚洲精品色噜噜噜| 国产精品综合在线视频| 国产精品灌醉下药二区| 欧美亚洲综合在线| 激情av综合网| 亚洲欧洲av色图| 欧美日韩黄色一区二区| 国产真实乱子伦精品视频| 日本aⅴ亚洲精品中文乱码| 精品精品欲导航| heyzo一本久久综合| 亚洲成人综合视频| 久久久久国产免费免费| 色婷婷激情久久| 国模无码大尺度一区二区三区| 亚洲日本青草视频在线怡红院| 91.com视频| 97精品视频在线观看自产线路二| 日韩专区在线视频| 国产日韩av一区| 6080国产精品一区二区| 福利一区在线观看| 丝袜美腿成人在线| 1024成人网| 精品久久久久久久久久久久久久久久久| 丰满少妇久久久久久久| 青青草伊人久久| 亚洲视频小说图片| 久久久久久久久久美女| 欧美视频自拍偷拍| 懂色av中文一区二区三区| 肉色丝袜一区二区| 一区二区三区资源| 国产色一区二区| 精品国产乱码91久久久久久网站| 在线看日本不卡|