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

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

?? ppc.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * QEMU generic PowerPC hardware System Emulator * * Copyright (c) 2003-2007 Jocelyn Mayer * * 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 "ppc.h"#include "qemu-timer.h"#include "sysemu.h"#include "nvram.h"//#define PPC_DEBUG_IRQ//#define PPC_DEBUG_TBextern FILE *logfile;extern int loglevel;static void cpu_ppc_tb_stop (CPUState *env);static void cpu_ppc_tb_start (CPUState *env);static void ppc_set_irq (CPUState *env, int n_IRQ, int level){    if (level) {        env->pending_interrupts |= 1 << n_IRQ;        cpu_interrupt(env, CPU_INTERRUPT_HARD);    } else {        env->pending_interrupts &= ~(1 << n_IRQ);        if (env->pending_interrupts == 0)            cpu_reset_interrupt(env, CPU_INTERRUPT_HARD);    }#if defined(PPC_DEBUG_IRQ)    if (loglevel & CPU_LOG_INT) {        fprintf(logfile, "%s: %p n_IRQ %d level %d => pending %08" PRIx32                "req %08x\n", __func__, env, n_IRQ, level,                env->pending_interrupts, env->interrupt_request);    }#endif}/* PowerPC 6xx / 7xx internal IRQ controller */static void ppc6xx_set_irq (void *opaque, int pin, int level){    CPUState *env = opaque;    int cur_level;#if defined(PPC_DEBUG_IRQ)    if (loglevel & CPU_LOG_INT) {        fprintf(logfile, "%s: env %p pin %d level %d\n", __func__,                env, pin, level);    }#endif    cur_level = (env->irq_input_state >> pin) & 1;    /* Don't generate spurious events */    if ((cur_level == 1 && level == 0) || (cur_level == 0 && level != 0)) {        switch (pin) {        case PPC6xx_INPUT_TBEN:            /* Level sensitive - active high */#if defined(PPC_DEBUG_IRQ)            if (loglevel & CPU_LOG_INT) {                fprintf(logfile, "%s: %s the time base\n",                        __func__, level ? "start" : "stop");            }#endif            if (level) {                cpu_ppc_tb_start(env);            } else {                cpu_ppc_tb_stop(env);            }        case PPC6xx_INPUT_INT:            /* Level sensitive - active high */#if defined(PPC_DEBUG_IRQ)            if (loglevel & CPU_LOG_INT) {                fprintf(logfile, "%s: set the external IRQ state to %d\n",                        __func__, level);            }#endif            ppc_set_irq(env, PPC_INTERRUPT_EXT, level);            break;        case PPC6xx_INPUT_SMI:            /* Level sensitive - active high */#if defined(PPC_DEBUG_IRQ)            if (loglevel & CPU_LOG_INT) {                fprintf(logfile, "%s: set the SMI IRQ state to %d\n",                        __func__, level);            }#endif            ppc_set_irq(env, PPC_INTERRUPT_SMI, level);            break;        case PPC6xx_INPUT_MCP:            /* Negative edge sensitive */            /* XXX: TODO: actual reaction may depends on HID0 status             *            603/604/740/750: check HID0[EMCP]             */            if (cur_level == 1 && level == 0) {#if defined(PPC_DEBUG_IRQ)                if (loglevel & CPU_LOG_INT) {                    fprintf(logfile, "%s: raise machine check state\n",                            __func__);                }#endif                ppc_set_irq(env, PPC_INTERRUPT_MCK, 1);            }            break;        case PPC6xx_INPUT_CKSTP_IN:            /* Level sensitive - active low */            /* XXX: TODO: relay the signal to CKSTP_OUT pin */            /* XXX: Note that the only way to restart the CPU is to reset it */            if (level) {#if defined(PPC_DEBUG_IRQ)                if (loglevel & CPU_LOG_INT) {                    fprintf(logfile, "%s: stop the CPU\n", __func__);                }#endif                env->halted = 1;            }            break;        case PPC6xx_INPUT_HRESET:            /* Level sensitive - active low */            if (level) {#if defined(PPC_DEBUG_IRQ)                if (loglevel & CPU_LOG_INT) {                    fprintf(logfile, "%s: reset the CPU\n", __func__);                }#endif                env->interrupt_request |= CPU_INTERRUPT_EXITTB;                /* XXX: TOFIX */#if 0                cpu_ppc_reset(env);#else                qemu_system_reset_request();#endif            }            break;        case PPC6xx_INPUT_SRESET:#if defined(PPC_DEBUG_IRQ)            if (loglevel & CPU_LOG_INT) {                fprintf(logfile, "%s: set the RESET IRQ state to %d\n",                        __func__, level);            }#endif            ppc_set_irq(env, PPC_INTERRUPT_RESET, level);            break;        default:            /* Unknown pin - do nothing */#if defined(PPC_DEBUG_IRQ)            if (loglevel & CPU_LOG_INT) {                fprintf(logfile, "%s: unknown IRQ pin %d\n", __func__, pin);            }#endif            return;        }        if (level)            env->irq_input_state |= 1 << pin;        else            env->irq_input_state &= ~(1 << pin);    }}void ppc6xx_irq_init (CPUState *env){    env->irq_inputs = (void **)qemu_allocate_irqs(&ppc6xx_set_irq, env,                                                  PPC6xx_INPUT_NB);}#if defined(TARGET_PPC64)/* PowerPC 970 internal IRQ controller */static void ppc970_set_irq (void *opaque, int pin, int level){    CPUState *env = opaque;    int cur_level;#if defined(PPC_DEBUG_IRQ)    if (loglevel & CPU_LOG_INT) {        fprintf(logfile, "%s: env %p pin %d level %d\n", __func__,                env, pin, level);    }#endif    cur_level = (env->irq_input_state >> pin) & 1;    /* Don't generate spurious events */    if ((cur_level == 1 && level == 0) || (cur_level == 0 && level != 0)) {        switch (pin) {        case PPC970_INPUT_INT:            /* Level sensitive - active high */#if defined(PPC_DEBUG_IRQ)            if (loglevel & CPU_LOG_INT) {                fprintf(logfile, "%s: set the external IRQ state to %d\n",                        __func__, level);            }#endif            ppc_set_irq(env, PPC_INTERRUPT_EXT, level);            break;        case PPC970_INPUT_THINT:            /* Level sensitive - active high */#if defined(PPC_DEBUG_IRQ)            if (loglevel & CPU_LOG_INT) {                fprintf(logfile, "%s: set the SMI IRQ state to %d\n", __func__,                        level);            }#endif            ppc_set_irq(env, PPC_INTERRUPT_THERM, level);            break;        case PPC970_INPUT_MCP:            /* Negative edge sensitive */            /* XXX: TODO: actual reaction may depends on HID0 status             *            603/604/740/750: check HID0[EMCP]             */            if (cur_level == 1 && level == 0) {#if defined(PPC_DEBUG_IRQ)                if (loglevel & CPU_LOG_INT) {                    fprintf(logfile, "%s: raise machine check state\n",                            __func__);                }#endif                ppc_set_irq(env, PPC_INTERRUPT_MCK, 1);            }            break;        case PPC970_INPUT_CKSTP:            /* Level sensitive - active low */            /* XXX: TODO: relay the signal to CKSTP_OUT pin */            if (level) {#if defined(PPC_DEBUG_IRQ)                if (loglevel & CPU_LOG_INT) {                    fprintf(logfile, "%s: stop the CPU\n", __func__);                }#endif                env->halted = 1;            } else {#if defined(PPC_DEBUG_IRQ)                if (loglevel & CPU_LOG_INT) {                    fprintf(logfile, "%s: restart the CPU\n", __func__);                }#endif                env->halted = 0;            }            break;        case PPC970_INPUT_HRESET:            /* Level sensitive - active low */            if (level) {#if 0 // XXX: TOFIX#if defined(PPC_DEBUG_IRQ)                if (loglevel & CPU_LOG_INT) {                    fprintf(logfile, "%s: reset the CPU\n", __func__);                }#endif                cpu_reset(env);#endif            }            break;        case PPC970_INPUT_SRESET:#if defined(PPC_DEBUG_IRQ)            if (loglevel & CPU_LOG_INT) {                fprintf(logfile, "%s: set the RESET IRQ state to %d\n",                        __func__, level);            }#endif            ppc_set_irq(env, PPC_INTERRUPT_RESET, level);            break;        case PPC970_INPUT_TBEN:#if defined(PPC_DEBUG_IRQ)            if (loglevel & CPU_LOG_INT) {                fprintf(logfile, "%s: set the TBEN state to %d\n", __func__,                        level);            }#endif            /* XXX: TODO */            break;        default:            /* Unknown pin - do nothing */#if defined(PPC_DEBUG_IRQ)            if (loglevel & CPU_LOG_INT) {                fprintf(logfile, "%s: unknown IRQ pin %d\n", __func__, pin);            }#endif            return;        }        if (level)            env->irq_input_state |= 1 << pin;        else            env->irq_input_state &= ~(1 << pin);    }}void ppc970_irq_init (CPUState *env){    env->irq_inputs = (void **)qemu_allocate_irqs(&ppc970_set_irq, env,                                                  PPC970_INPUT_NB);}#endif /* defined(TARGET_PPC64) *//* PowerPC 40x internal IRQ controller */static void ppc40x_set_irq (void *opaque, int pin, int level){    CPUState *env = opaque;    int cur_level;#if defined(PPC_DEBUG_IRQ)    if (loglevel & CPU_LOG_INT) {        fprintf(logfile, "%s: env %p pin %d level %d\n", __func__,                env, pin, level);    }#endif    cur_level = (env->irq_input_state >> pin) & 1;    /* Don't generate spurious events */    if ((cur_level == 1 && level == 0) || (cur_level == 0 && level != 0)) {        switch (pin) {        case PPC40x_INPUT_RESET_SYS:            if (level) {#if defined(PPC_DEBUG_IRQ)                if (loglevel & CPU_LOG_INT) {                    fprintf(logfile, "%s: reset the PowerPC system\n",                            __func__);                }#endif                ppc40x_system_reset(env);            }            break;        case PPC40x_INPUT_RESET_CHIP:            if (level) {#if defined(PPC_DEBUG_IRQ)                if (loglevel & CPU_LOG_INT) {                    fprintf(logfile, "%s: reset the PowerPC chip\n", __func__);                }#endif                ppc40x_chip_reset(env);            }            break;        case PPC40x_INPUT_RESET_CORE:            /* XXX: TODO: update DBSR[MRR] */            if (level) {#if defined(PPC_DEBUG_IRQ)                if (loglevel & CPU_LOG_INT) {                    fprintf(logfile, "%s: reset the PowerPC core\n", __func__);                }#endif                ppc40x_core_reset(env);            }            break;        case PPC40x_INPUT_CINT:            /* Level sensitive - active high */#if defined(PPC_DEBUG_IRQ)            if (loglevel & CPU_LOG_INT) {                fprintf(logfile, "%s: set the critical IRQ state to %d\n",                        __func__, level);            }#endif            ppc_set_irq(env, PPC_INTERRUPT_CEXT, level);            break;        case PPC40x_INPUT_INT:            /* Level sensitive - active high */#if defined(PPC_DEBUG_IRQ)            if (loglevel & CPU_LOG_INT) {                fprintf(logfile, "%s: set the external IRQ state to %d\n",                        __func__, level);            }#endif            ppc_set_irq(env, PPC_INTERRUPT_EXT, level);            break;        case PPC40x_INPUT_HALT:            /* Level sensitive - active low */            if (level) {#if defined(PPC_DEBUG_IRQ)                if (loglevel & CPU_LOG_INT) {                    fprintf(logfile, "%s: stop the CPU\n", __func__);                }#endif                env->halted = 1;            } else {#if defined(PPC_DEBUG_IRQ)                if (loglevel & CPU_LOG_INT) {                    fprintf(logfile, "%s: restart the CPU\n", __func__);                }#endif                env->halted = 0;            }            break;        case PPC40x_INPUT_DEBUG:            /* Level sensitive - active high */#if defined(PPC_DEBUG_IRQ)            if (loglevel & CPU_LOG_INT) {                fprintf(logfile, "%s: set the debug pin state to %d\n",                        __func__, level);            }#endif            ppc_set_irq(env, PPC_INTERRUPT_DEBUG, level);            break;        default:            /* Unknown pin - do nothing */#if defined(PPC_DEBUG_IRQ)            if (loglevel & CPU_LOG_INT) {                fprintf(logfile, "%s: unknown IRQ pin %d\n", __func__, pin);            }#endif            return;        }        if (level)            env->irq_input_state |= 1 << pin;        else            env->irq_input_state &= ~(1 << pin);    }}void ppc40x_irq_init (CPUState *env){    env->irq_inputs = (void **)qemu_allocate_irqs(&ppc40x_set_irq,                                                  env, PPC40x_INPUT_NB);}/*****************************************************************************//* PowerPC time base and decrementer emulation */struct ppc_tb_t {    /* Time base management */    int64_t  tb_offset;    /* Compensation                    */    int64_t  atb_offset;   /* Compensation                    */    uint32_t tb_freq;      /* TB frequency                    */    /* Decrementer management */    uint64_t decr_next;    /* Tick for next decr interrupt    */    uint32_t decr_freq;    /* decrementer frequency           */    struct QEMUTimer *decr_timer;    /* Hypervisor decrementer management */    uint64_t hdecr_next;    /* Tick for next hdecr interrupt  */    struct QEMUTimer *hdecr_timer;    uint64_t purr_load;    uint64_t purr_start;    void *opaque;};static always_inline uint64_t cpu_ppc_get_tb (ppc_tb_t *tb_env, uint64_t vmclk,                                              int64_t tb_offset){    /* TB time in tb periods */    return muldiv64(vmclk, tb_env->tb_freq, ticks_per_sec) + tb_offset;}uint32_t cpu_ppc_load_tbl (CPUState *env){    ppc_tb_t *tb_env = env->tb_env;    uint64_t tb;    tb = cpu_ppc_get_tb(tb_env, qemu_get_clock(vm_clock), tb_env->tb_offset);#if defined(PPC_DEBUG_TB)    if (loglevel != 0) {        fprintf(logfile, "%s: tb %016" PRIx64 "\n", __func__, tb);    }#endif    return tb & 0xFFFFFFFF;}static always_inline uint32_t _cpu_ppc_load_tbu (CPUState *env){    ppc_tb_t *tb_env = env->tb_env;    uint64_t tb;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久一本精品| 亚洲伦在线观看| 亚洲丝袜另类动漫二区| 日韩电影一区二区三区四区| 成人国产精品免费观看动漫| 91精品国产色综合久久| 亚洲三级视频在线观看| 国产一区二区三区免费观看| 欧美日韩第一区日日骚| 一区二区在线看| 成年人网站91| 成人白浆超碰人人人人| 亚洲精品日日夜夜| 国产一区999| 欧美高清视频一二三区| 亚洲一区二区三区小说| av网站免费线看精品| 国产色91在线| 国模娜娜一区二区三区| 69堂成人精品免费视频| 亚洲国产精品久久不卡毛片| 99视频热这里只有精品免费| 日本一区二区免费在线| 国产精品18久久久久久久久 | 精品国产a毛片| 日韩黄色在线观看| 欧美日本一区二区| 一区二区免费看| 欧美色欧美亚洲另类二区| 午夜亚洲福利老司机| 91色|porny| 中文字幕日韩一区| 99精品欧美一区二区三区综合在线| 久久久亚洲精华液精华液精华液| 蜜乳av一区二区三区| 日韩一区二区三区av| 蜜桃视频在线一区| 日韩欧美国产综合在线一区二区三区| 美女任你摸久久| 日韩欧美亚洲国产精品字幕久久久| 毛片av中文字幕一区二区| 欧美xxxxxxxx| 国产麻豆精品在线| 国产精品久久久爽爽爽麻豆色哟哟 | 色美美综合视频| 亚洲自拍偷拍九九九| 欧美日本韩国一区二区三区视频| 97久久精品人人爽人人爽蜜臀 | 欧美大尺度电影在线| 国产在线日韩欧美| 国产欧美日韩不卡| 91小视频免费观看| 香蕉加勒比综合久久| 日韩一区二区三| 成人小视频免费观看| 一区二区三区美女视频| 91精品国产丝袜白色高跟鞋| 黄色精品一二区| 亚洲人精品午夜| 精品视频一区二区不卡| 麻豆国产一区二区| 国产精品美日韩| 欧美日韩国产123区| 国产一区二区三区久久久| 国产精品乱人伦中文| 欧美日韩国产首页在线观看| 狠狠色丁香九九婷婷综合五月| 欧美国产一区二区| 欧美日本一道本| 成人黄色软件下载| 婷婷中文字幕综合| 国产日韩精品一区二区三区在线| 日本道色综合久久| 国产一区在线观看麻豆| 尤物av一区二区| 久久久五月婷婷| 555夜色666亚洲国产免| 成人激情免费视频| 蜜桃精品视频在线观看| 17c精品麻豆一区二区免费| 在线播放中文字幕一区| 成人动漫一区二区三区| 久久国产尿小便嘘嘘尿| 亚洲精品一卡二卡| 国产日韩v精品一区二区| 欧美日韩国产一二三| av电影天堂一区二区在线观看| 免费成人小视频| 亚洲高清久久久| 综合亚洲深深色噜噜狠狠网站| 日韩一区二区三区观看| 欧美日韩美少妇| 色婷婷亚洲一区二区三区| 国产盗摄视频一区二区三区| 日日嗨av一区二区三区四区| 亚洲日本在线a| 欧美国产日韩a欧美在线观看| 日韩一区二区在线播放| 欧美日韩视频在线观看一区二区三区| 成人福利视频在线| 国产不卡免费视频| 美女视频一区二区三区| 日本不卡高清视频| 日韩综合一区二区| 亚洲国产裸拍裸体视频在线观看乱了 | 久久精品国产一区二区三区免费看| 尤物在线观看一区| 亚洲精品高清在线| 亚洲人成影院在线观看| 国产精品成人免费在线| 国产农村妇女毛片精品久久麻豆 | 99在线精品免费| 国产激情一区二区三区桃花岛亚洲| 美国十次综合导航| 精品一区二区三区不卡| 美女尤物国产一区| 蜜桃av噜噜一区| 国产在线国偷精品产拍免费yy | 欧美国产丝袜视频| 国产精品久久三| 亚洲色欲色欲www| 一区二区欧美国产| 亚洲va国产va欧美va观看| 五月天亚洲婷婷| 久久精品国产精品亚洲综合| 韩国视频一区二区| 国产凹凸在线观看一区二区| 粗大黑人巨茎大战欧美成人| 成人av小说网| 欧美在线播放高清精品| 91精品在线麻豆| 久久综合久久99| 亚洲欧美综合在线精品| 亚洲一区中文日韩| 日韩精品五月天| 国产激情视频一区二区在线观看| 成人白浆超碰人人人人| 欧美午夜宅男影院| 日韩无一区二区| 中文一区在线播放| 中文字幕视频一区| 日韩电影免费在线看| 国产69精品久久99不卡| 欧美亚洲图片小说| 精品成人在线观看| 亚洲柠檬福利资源导航| 日本免费新一区视频| 国产成a人亚洲| 欧美三区在线观看| 久久久久久久精| 亚洲视频狠狠干| 麻豆精品久久久| 99热精品一区二区| 日韩免费观看高清完整版 | 精品乱人伦小说| 中文字幕亚洲区| 九色综合狠狠综合久久| 91国模大尺度私拍在线视频| 日韩免费一区二区| 一区二区三区中文字幕精品精品 | 懂色中文一区二区在线播放| 中文字幕一区二区三区蜜月| 亚洲综合成人在线| 天堂成人免费av电影一区| 国产一区二区三区电影在线观看 | 欧美日韩在线播| 337p亚洲精品色噜噜狠狠| 精品国产亚洲一区二区三区在线观看| 久久久久久免费| 日韩黄色一级片| 成人一级片网址| 欧美日韩免费观看一区三区| 欧美日韩亚洲综合一区| 国产欧美一二三区| 亚洲国产日韩a在线播放性色| 麻豆91在线播放免费| 国产在线麻豆精品观看| 欧美久久久久久久久| 国产亚洲成年网址在线观看| 一区二区三区日韩在线观看| 日韩成人午夜精品| 91激情在线视频| 精品国产乱码久久| 亚洲一级在线观看| 一本一道久久a久久精品 | 日韩影院免费视频| 成人app软件下载大全免费| 在线播放/欧美激情| 国产精品成人一区二区艾草| 国产成人av电影免费在线观看| 欧美日韩免费视频| 亚洲三级理论片| 91尤物视频在线观看| 久久嫩草精品久久久精品一| 亚洲成在人线免费| 色综合婷婷久久| 亚洲欧洲综合另类在线| 国产成人精品在线看| 日韩亚洲欧美成人一区| 丝袜亚洲精品中文字幕一区|