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

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

?? spitz.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * PXA270-based Clamshell PDA platforms. * * Copyright (c) 2006 Openedhand Ltd. * Written by Andrzej Zaborowski <balrog@zabor.org> * * This code is licensed under the GNU GPL v2. */#include "hw.h"#include "pxa.h"#include "arm-misc.h"#include "sysemu.h"#include "pcmcia.h"#include "i2c.h"#include "flash.h"#include "qemu-timer.h"#include "devices.h"#include "console.h"#include "block.h"#include "audio/audio.h"#include "boards.h"#define spitz_printf(format, ...)	\    fprintf(stderr, "%s: " format, __FUNCTION__, ##__VA_ARGS__)#undef REG_FMT#if TARGET_PHYS_ADDR_BITS == 32#define REG_FMT			"0x%02x"#else#define REG_FMT			"0x%02lx"#endif/* Spitz Flash */#define FLASH_BASE		0x0c000000#define FLASH_ECCLPLB		0x00	/* Line parity 7 - 0 bit */#define FLASH_ECCLPUB		0x04	/* Line parity 15 - 8 bit */#define FLASH_ECCCP		0x08	/* Column parity 5 - 0 bit */#define FLASH_ECCCNTR		0x0c	/* ECC byte counter */#define FLASH_ECCCLRR		0x10	/* Clear ECC */#define FLASH_FLASHIO		0x14	/* Flash I/O */#define FLASH_FLASHCTL		0x18	/* Flash Control */#define FLASHCTL_CE0		(1 << 0)#define FLASHCTL_CLE		(1 << 1)#define FLASHCTL_ALE		(1 << 2)#define FLASHCTL_WP		(1 << 3)#define FLASHCTL_CE1		(1 << 4)#define FLASHCTL_RYBY		(1 << 5)#define FLASHCTL_NCE		(FLASHCTL_CE0 | FLASHCTL_CE1)struct sl_nand_s {    target_phys_addr_t target_base;    struct nand_flash_s *nand;    uint8_t ctl;    struct ecc_state_s ecc;};static uint32_t sl_readb(void *opaque, target_phys_addr_t addr){    struct sl_nand_s *s = (struct sl_nand_s *) opaque;    int ryby;    addr -= s->target_base;    switch (addr) {#define BSHR(byte, from, to)	((s->ecc.lp[byte] >> (from - to)) & (1 << to))    case FLASH_ECCLPLB:        return BSHR(0, 4, 0) | BSHR(0, 5, 2) | BSHR(0, 6, 4) | BSHR(0, 7, 6) |                BSHR(1, 4, 1) | BSHR(1, 5, 3) | BSHR(1, 6, 5) | BSHR(1, 7, 7);#define BSHL(byte, from, to)	((s->ecc.lp[byte] << (to - from)) & (1 << to))    case FLASH_ECCLPUB:        return BSHL(0, 0, 0) | BSHL(0, 1, 2) | BSHL(0, 2, 4) | BSHL(0, 3, 6) |                BSHL(1, 0, 1) | BSHL(1, 1, 3) | BSHL(1, 2, 5) | BSHL(1, 3, 7);    case FLASH_ECCCP:        return s->ecc.cp;    case FLASH_ECCCNTR:        return s->ecc.count & 0xff;    case FLASH_FLASHCTL:        nand_getpins(s->nand, &ryby);        if (ryby)            return s->ctl | FLASHCTL_RYBY;        else            return s->ctl;    case FLASH_FLASHIO:        return ecc_digest(&s->ecc, nand_getio(s->nand));    default:        spitz_printf("Bad register offset " REG_FMT "\n", addr);    }    return 0;}static uint32_t sl_readl(void *opaque, target_phys_addr_t addr){    struct sl_nand_s *s = (struct sl_nand_s *) opaque;    addr -= s->target_base;    if (addr == FLASH_FLASHIO)        return ecc_digest(&s->ecc, nand_getio(s->nand)) |                (ecc_digest(&s->ecc, nand_getio(s->nand)) << 16);    return sl_readb(opaque, addr);}static void sl_writeb(void *opaque, target_phys_addr_t addr,                uint32_t value){    struct sl_nand_s *s = (struct sl_nand_s *) opaque;    addr -= s->target_base;    switch (addr) {    case FLASH_ECCCLRR:        /* Value is ignored.  */        ecc_reset(&s->ecc);        break;    case FLASH_FLASHCTL:        s->ctl = value & 0xff & ~FLASHCTL_RYBY;        nand_setpins(s->nand,                        s->ctl & FLASHCTL_CLE,                        s->ctl & FLASHCTL_ALE,                        s->ctl & FLASHCTL_NCE,                        s->ctl & FLASHCTL_WP,                        0);        break;    case FLASH_FLASHIO:        nand_setio(s->nand, ecc_digest(&s->ecc, value & 0xff));        break;    default:        spitz_printf("Bad register offset " REG_FMT "\n", addr);    }}static void sl_save(QEMUFile *f, void *opaque){    struct sl_nand_s *s = (struct sl_nand_s *) opaque;    qemu_put_8s(f, &s->ctl);    ecc_put(f, &s->ecc);}static int sl_load(QEMUFile *f, void *opaque, int version_id){    struct sl_nand_s *s = (struct sl_nand_s *) opaque;    qemu_get_8s(f, &s->ctl);    ecc_get(f, &s->ecc);    return 0;}enum {    FLASH_128M,    FLASH_1024M,};static void sl_flash_register(struct pxa2xx_state_s *cpu, int size){    int iomemtype;    struct sl_nand_s *s;    CPUReadMemoryFunc *sl_readfn[] = {        sl_readb,        sl_readb,        sl_readl,    };    CPUWriteMemoryFunc *sl_writefn[] = {        sl_writeb,        sl_writeb,        sl_writeb,    };    s = (struct sl_nand_s *) qemu_mallocz(sizeof(struct sl_nand_s));    s->target_base = FLASH_BASE;    s->ctl = 0;    if (size == FLASH_128M)        s->nand = nand_init(NAND_MFR_SAMSUNG, 0x73);    else if (size == FLASH_1024M)        s->nand = nand_init(NAND_MFR_SAMSUNG, 0xf1);    iomemtype = cpu_register_io_memory(0, sl_readfn,                    sl_writefn, s);    cpu_register_physical_memory(s->target_base, 0x40, iomemtype);    register_savevm("sl_flash", 0, 0, sl_save, sl_load, s);}/* Spitz Keyboard */#define SPITZ_KEY_STROBE_NUM	11#define SPITZ_KEY_SENSE_NUM	7static const int spitz_gpio_key_sense[SPITZ_KEY_SENSE_NUM] = {    12, 17, 91, 34, 36, 38, 39};static const int spitz_gpio_key_strobe[SPITZ_KEY_STROBE_NUM] = {    88, 23, 24, 25, 26, 27, 52, 103, 107, 108, 114};/* Eighth additional row maps the special keys */static int spitz_keymap[SPITZ_KEY_SENSE_NUM + 1][SPITZ_KEY_STROBE_NUM] = {    { 0x1d, 0x02, 0x04, 0x06, 0x07, 0x08, 0x0a, 0x0b, 0x0e, 0x3f, 0x40 },    {  -1 , 0x03, 0x05, 0x13, 0x15, 0x09, 0x17, 0x18, 0x19, 0x41, 0x42 },    { 0x0f, 0x10, 0x12, 0x14, 0x22, 0x16, 0x24, 0x25,  -1 ,  -1 ,  -1  },    { 0x3c, 0x11, 0x1f, 0x21, 0x2f, 0x23, 0x32, 0x26,  -1 , 0x36,  -1  },    { 0x3b, 0x1e, 0x20, 0x2e, 0x30, 0x31, 0x34,  -1 , 0x1c, 0x2a,  -1  },    { 0x44, 0x2c, 0x2d, 0x0c, 0x39, 0x33,  -1 , 0x48,  -1 ,  -1 , 0x38 },    { 0x37, 0x3d,  -1 , 0x45, 0x57, 0x58, 0x4b, 0x50, 0x4d,  -1 ,  -1  },    { 0x52, 0x43, 0x01, 0x47, 0x49,  -1 ,  -1 ,  -1 ,  -1 ,  -1 ,  -1  },};#define SPITZ_GPIO_AK_INT	13	/* Remote control */#define SPITZ_GPIO_SYNC		16	/* Sync button */#define SPITZ_GPIO_ON_KEY	95	/* Power button */#define SPITZ_GPIO_SWA		97	/* Lid */#define SPITZ_GPIO_SWB		96	/* Tablet mode *//* The special buttons are mapped to unused keys */static const int spitz_gpiomap[5] = {    SPITZ_GPIO_AK_INT, SPITZ_GPIO_SYNC, SPITZ_GPIO_ON_KEY,    SPITZ_GPIO_SWA, SPITZ_GPIO_SWB,};static int spitz_gpio_invert[5] = { 0, 0, 0, 0, 0, };struct spitz_keyboard_s {    qemu_irq sense[SPITZ_KEY_SENSE_NUM];    qemu_irq *strobe;    qemu_irq gpiomap[5];    int keymap[0x80];    uint16_t keyrow[SPITZ_KEY_SENSE_NUM];    uint16_t strobe_state;    uint16_t sense_state;    uint16_t pre_map[0x100];    uint16_t modifiers;    uint16_t imodifiers;    uint8_t fifo[16];    int fifopos, fifolen;    QEMUTimer *kbdtimer;};static void spitz_keyboard_sense_update(struct spitz_keyboard_s *s){    int i;    uint16_t strobe, sense = 0;    for (i = 0; i < SPITZ_KEY_SENSE_NUM; i ++) {        strobe = s->keyrow[i] & s->strobe_state;        if (strobe) {            sense |= 1 << i;            if (!(s->sense_state & (1 << i)))                qemu_irq_raise(s->sense[i]);        } else if (s->sense_state & (1 << i))            qemu_irq_lower(s->sense[i]);    }    s->sense_state = sense;}static void spitz_keyboard_strobe(void *opaque, int line, int level){    struct spitz_keyboard_s *s = (struct spitz_keyboard_s *) opaque;    if (level)        s->strobe_state |= 1 << line;    else        s->strobe_state &= ~(1 << line);    spitz_keyboard_sense_update(s);}static void spitz_keyboard_keydown(struct spitz_keyboard_s *s, int keycode){    int spitz_keycode = s->keymap[keycode & 0x7f];    if (spitz_keycode == -1)        return;    /* Handle the additional keys */    if ((spitz_keycode >> 4) == SPITZ_KEY_SENSE_NUM) {        qemu_set_irq(s->gpiomap[spitz_keycode & 0xf], (keycode < 0x80) ^                        spitz_gpio_invert[spitz_keycode & 0xf]);        return;    }    if (keycode & 0x80)        s->keyrow[spitz_keycode >> 4] &= ~(1 << (spitz_keycode & 0xf));    else        s->keyrow[spitz_keycode >> 4] |= 1 << (spitz_keycode & 0xf);    spitz_keyboard_sense_update(s);}#define SHIFT	(1 << 7)#define CTRL	(1 << 8)#define FN	(1 << 9)#define QUEUE_KEY(c)	s->fifo[(s->fifopos + s->fifolen ++) & 0xf] = cstatic void spitz_keyboard_handler(struct spitz_keyboard_s *s, int keycode){    uint16_t code;    int mapcode;    switch (keycode) {    case 0x2a:	/* Left Shift */        s->modifiers |= 1;        break;    case 0xaa:        s->modifiers &= ~1;        break;    case 0x36:	/* Right Shift */        s->modifiers |= 2;        break;    case 0xb6:        s->modifiers &= ~2;        break;    case 0x1d:	/* Control */        s->modifiers |= 4;        break;    case 0x9d:        s->modifiers &= ~4;        break;    case 0x38:	/* Alt */        s->modifiers |= 8;        break;    case 0xb8:        s->modifiers &= ~8;        break;    }    code = s->pre_map[mapcode = ((s->modifiers & 3) ?            (keycode | SHIFT) :            (keycode & ~SHIFT))];    if (code != mapcode) {#if 0        if ((code & SHIFT) && !(s->modifiers & 1))            QUEUE_KEY(0x2a | (keycode & 0x80));        if ((code & CTRL ) && !(s->modifiers & 4))            QUEUE_KEY(0x1d | (keycode & 0x80));        if ((code & FN   ) && !(s->modifiers & 8))            QUEUE_KEY(0x38 | (keycode & 0x80));        if ((code & FN   ) && (s->modifiers & 1))            QUEUE_KEY(0x2a | (~keycode & 0x80));        if ((code & FN   ) && (s->modifiers & 2))            QUEUE_KEY(0x36 | (~keycode & 0x80));#else        if (keycode & 0x80) {            if ((s->imodifiers & 1   ) && !(s->modifiers & 1))                QUEUE_KEY(0x2a | 0x80);            if ((s->imodifiers & 4   ) && !(s->modifiers & 4))                QUEUE_KEY(0x1d | 0x80);            if ((s->imodifiers & 8   ) && !(s->modifiers & 8))                QUEUE_KEY(0x38 | 0x80);            if ((s->imodifiers & 0x10) && (s->modifiers & 1))                QUEUE_KEY(0x2a);            if ((s->imodifiers & 0x20) && (s->modifiers & 2))                QUEUE_KEY(0x36);            s->imodifiers = 0;        } else {            if ((code & SHIFT) && !((s->modifiers | s->imodifiers) & 1)) {                QUEUE_KEY(0x2a);                s->imodifiers |= 1;            }            if ((code & CTRL ) && !((s->modifiers | s->imodifiers) & 4)) {                QUEUE_KEY(0x1d);                s->imodifiers |= 4;            }            if ((code & FN   ) && !((s->modifiers | s->imodifiers) & 8)) {                QUEUE_KEY(0x38);                s->imodifiers |= 8;            }            if ((code & FN   ) && (s->modifiers & 1) &&                            !(s->imodifiers & 0x10)) {                QUEUE_KEY(0x2a | 0x80);                s->imodifiers |= 0x10;            }            if ((code & FN   ) && (s->modifiers & 2) &&                            !(s->imodifiers & 0x20)) {                QUEUE_KEY(0x36 | 0x80);                s->imodifiers |= 0x20;            }        }#endif    }    QUEUE_KEY((code & 0x7f) | (keycode & 0x80));}static void spitz_keyboard_tick(void *opaque){    struct spitz_keyboard_s *s = (struct spitz_keyboard_s *) opaque;    if (s->fifolen) {        spitz_keyboard_keydown(s, s->fifo[s->fifopos ++]);        s->fifolen --;        if (s->fifopos >= 16)            s->fifopos = 0;    }    qemu_mod_timer(s->kbdtimer, qemu_get_clock(vm_clock) + ticks_per_sec / 32);}static void spitz_keyboard_pre_map(struct spitz_keyboard_s *s){    int i;    for (i = 0; i < 0x100; i ++)        s->pre_map[i] = i;    s->pre_map[0x02 | SHIFT	] = 0x02 | SHIFT;	/* exclam */    s->pre_map[0x28 | SHIFT	] = 0x03 | SHIFT;	/* quotedbl */    s->pre_map[0x04 | SHIFT	] = 0x04 | SHIFT;	/* numbersign */    s->pre_map[0x05 | SHIFT	] = 0x05 | SHIFT;	/* dollar */    s->pre_map[0x06 | SHIFT	] = 0x06 | SHIFT;	/* percent */    s->pre_map[0x08 | SHIFT	] = 0x07 | SHIFT;	/* ampersand */    s->pre_map[0x28		] = 0x08 | SHIFT;	/* apostrophe */    s->pre_map[0x0a | SHIFT	] = 0x09 | SHIFT;	/* parenleft */    s->pre_map[0x0b | SHIFT	] = 0x0a | SHIFT;	/* parenright */    s->pre_map[0x29 | SHIFT	] = 0x0b | SHIFT;	/* asciitilde */    s->pre_map[0x03 | SHIFT	] = 0x0c | SHIFT;	/* at */    s->pre_map[0xd3		] = 0x0e | FN;		/* Delete */    s->pre_map[0x3a		] = 0x0f | FN;		/* Caps_Lock */    s->pre_map[0x07 | SHIFT	] = 0x11 | FN;		/* asciicircum */    s->pre_map[0x0d		] = 0x12 | FN;		/* equal */    s->pre_map[0x0d | SHIFT	] = 0x13 | FN;		/* plus */    s->pre_map[0x1a		] = 0x14 | FN;		/* bracketleft */    s->pre_map[0x1b		] = 0x15 | FN;		/* bracketright */    s->pre_map[0x1a | SHIFT	] = 0x16 | FN;		/* braceleft */    s->pre_map[0x1b | SHIFT	] = 0x17 | FN;		/* braceright */    s->pre_map[0x27		] = 0x22 | FN;		/* semicolon */    s->pre_map[0x27 | SHIFT	] = 0x23 | FN;		/* colon */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合夜色一区| 亚洲电影你懂得| 久久一区二区三区国产精品| 日韩视频一区二区三区在线播放| 在线视频国内一区二区| 欧美日韩一本到| 69堂成人精品免费视频| 久久精品综合网| 亚洲影院免费观看| 国产成人av影院| 日韩美女视频一区二区在线观看| 国产女人18水真多18精品一级做| 亚洲国产精品激情在线观看| 亚洲高清中文字幕| 国产99久久久久| 欧美一区二区三区在线观看视频| 亚洲天堂中文字幕| 国产一区二区精品在线观看| 欧美日韩大陆一区二区| 国产欧美一区二区三区在线老狼| 亚洲一区二区免费视频| 国产不卡视频在线播放| 欧美一级日韩一级| 亚洲精品国产精华液| 丁香五精品蜜臀久久久久99网站 | 91一区一区三区| 国产亚洲精品aa午夜观看| 日本美女一区二区三区| 欧美亚洲国产bt| 亚洲午夜一区二区| 97se亚洲国产综合自在线观| 国产欧美日韩不卡免费| 日本成人中文字幕在线视频| 欧美精品日韩精品| 午夜视频在线观看一区二区| 欧美亚洲动漫精品| 亚洲成av人片在www色猫咪| 91成人免费网站| 亚洲一区二三区| 日韩一级精品视频在线观看| 久草在线在线精品观看| 欧美电影免费观看高清完整版在线| 91久久精品网| 国产欧美视频在线观看| www.欧美日韩| 视频一区二区三区入口| 日韩欧美在线不卡| 波多野结衣中文字幕一区 | 日本午夜精品视频在线观看 | 国产.精品.日韩.另类.中文.在线.播放 | 波多野结衣的一区二区三区| 亚洲视频在线观看一区| 在线欧美一区二区| 国产一级精品在线| 亚洲一区二区视频| 337p日本欧洲亚洲大胆精品| 成人午夜大片免费观看| 污片在线观看一区二区| 国产精品家庭影院| 欧美一级黄色录像| 91免费版pro下载短视频| 蜜臀va亚洲va欧美va天堂| 中文字幕电影一区| 欧美一级在线观看| 91福利国产精品| 成人国产精品免费观看视频| 日韩av不卡在线观看| 一区二区视频在线| 国产精品乱人伦一区二区| 欧美mv日韩mv国产| 欧美一区二区人人喊爽| www.色综合.com| 成人av影视在线观看| 国内精品国产成人国产三级粉色| 亚洲chinese男男1069| 亚洲男人天堂一区| 亚洲一区在线播放| 一区二区久久久久| 亚洲综合丝袜美腿| 亚洲高清中文字幕| 日本不卡视频在线| 精品亚洲免费视频| 国产乱码精品一品二品| 国产成人免费在线观看不卡| www.欧美精品一二区| 91国偷自产一区二区使用方法| 91网站在线观看视频| 久久精品国产99| 国产乱码精品一区二区三区忘忧草| 狠狠色综合日日| 国产大陆亚洲精品国产| 91视频com| 91精品国产美女浴室洗澡无遮挡| 欧美一区二区性放荡片| 国产三区在线成人av| 日韩伦理免费电影| 免费成人av资源网| 福利一区二区在线观看| 在线视频中文字幕一区二区| 精品日韩在线观看| 国产精品乱码一区二三区小蝌蚪| 亚洲高清中文字幕| 国产成人午夜99999| 国产一区二区不卡在线| 日韩精品中文字幕在线不卡尤物| 久久影院午夜论| 日韩精品一级二级| 日本韩国精品在线| 国产日韩v精品一区二区| 亚洲高清免费视频| 成人午夜av电影| 精品美女一区二区| 秋霞午夜鲁丝一区二区老狼| 在线观看亚洲成人| 一区二区三区资源| 色94色欧美sute亚洲13| 中文字幕日韩一区| 丁香婷婷综合五月| 国产丝袜美腿一区二区三区| 久久精品久久99精品久久| 337p亚洲精品色噜噜噜| 亚洲国产你懂的| 欧美日韩精品是欧美日韩精品| 亚洲另类一区二区| 欧美日韩你懂得| 亚洲图片自拍偷拍| 在线电影一区二区三区| 日韩精品午夜视频| 精品国产一区二区在线观看| 成人午夜免费av| 一区二区三区欧美视频| 欧美日韩激情在线| 激情亚洲综合在线| 国产精品乱码人人做人人爱 | 欧美成人一区二区三区片免费| 亚洲成av人**亚洲成av**| 欧美mv和日韩mv的网站| 成人免费的视频| 视频一区二区三区中文字幕| 欧美日韩精品一区二区三区四区| 蜜桃视频在线观看一区二区| 国产精品毛片高清在线完整版| 在线视频一区二区三| 韩国三级在线一区| 亚洲欧美日韩国产综合| 欧美一区二区日韩| 色先锋aa成人| 久久成人久久爱| 亚洲欧美偷拍三级| 久久九九全国免费| 欧洲精品中文字幕| 国产美女久久久久| 亚洲国产欧美在线| 国产欧美一区二区三区沐欲| 日韩一区二区电影网| 暴力调教一区二区三区| 精品一区二区三区在线播放视频| 亚洲少妇30p| 婷婷开心久久网| 亚洲综合一区在线| 亚洲人成在线观看一区二区| 久久婷婷一区二区三区| 欧美一区二区三区电影| 在线观看网站黄不卡| 色综合天天综合狠狠| 国产成人午夜片在线观看高清观看| 石原莉奈在线亚洲二区| 夜色激情一区二区| 亚洲综合在线观看视频| 综合欧美亚洲日本| 久久91精品久久久久久秒播| 蜜桃av一区二区三区电影| 日韩专区一卡二卡| 免费成人深夜小野草| 韩国在线一区二区| 国产盗摄精品一区二区三区在线 | 国产亚洲一区二区三区| 精品少妇一区二区三区视频免付费 | 国产乱子伦一区二区三区国色天香| 日韩av在线免费观看不卡| 加勒比av一区二区| 成人久久视频在线观看| 在线观看国产日韩| 精品伦理精品一区| 1区2区3区精品视频| 亚洲成人黄色影院| 国产一区二区三区四区五区入口 | 亚洲女爱视频在线| 亚洲成人免费视频| 波多野结衣中文字幕一区| 91精品欧美久久久久久动漫 | 中文在线免费一区三区高中清不卡| 日韩欧美一级特黄在线播放| 久久精品亚洲一区二区三区浴池| 国产日韩v精品一区二区| 亚洲免费观看高清在线观看| 懂色中文一区二区在线播放| 91美女精品福利| 久久日韩粉嫩一区二区三区| 一区二区三区中文字幕精品精品|