亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
色综合久久久久综合体桃花网| 精品一区二区三区欧美| 国产精品久久久久久福利一牛影视 | 蜜桃久久久久久久| 久久国产精品72免费观看| 日本麻豆一区二区三区视频| 日本视频在线一区| 国产一区二区按摩在线观看| 国产成人激情av| 91污片在线观看| 欧美一区二区三区精品| 久久久综合精品| 亚洲一卡二卡三卡四卡无卡久久| 亚洲成a人v欧美综合天堂| 久久精品国产99国产精品| 9色porny自拍视频一区二区| 欧美三级视频在线播放| 久久精品一区二区| 曰韩精品一区二区| 国产精品1区二区.| 欧美日韩中文字幕一区二区| 久久综合色一综合色88| 亚洲一区二区成人在线观看| 韩国一区二区在线观看| 在线欧美日韩国产| 日韩一区有码在线| 国产成人高清在线| 日韩精品专区在线影院重磅| 日韩毛片高清在线播放| 国产九色精品成人porny| 欧美高清一级片在线| 亚洲欧美成aⅴ人在线观看| 国产一区二区在线影院| 91精品国产色综合久久ai换脸| 亚洲视频免费在线观看| 国内精品国产成人国产三级粉色| 欧美中文字幕久久| 亚洲国产精品嫩草影院| 91成人在线免费观看| 亚洲精品国产成人久久av盗摄| 高清成人免费视频| 欧美国产综合一区二区| 高清日韩电视剧大全免费| 国产日韩精品一区二区三区 | 色综合久久久久综合体| 亚洲婷婷综合久久一本伊一区| 国产一区二区伦理片| 欧美极品美女视频| 一本高清dvd不卡在线观看| 亚洲精品免费播放| 欧美精品久久99久久在免费线| 亚洲国产精品天堂| 日韩欧美国产1| www.亚洲人| 日本中文字幕一区二区有限公司| 日韩视频一区二区在线观看| 激情偷乱视频一区二区三区| 国产女同性恋一区二区| 色欧美片视频在线观看在线视频| 亚洲一二三区不卡| 久久精品视频一区二区三区| 99久久精品免费看| 蜜臀99久久精品久久久久久软件| 久久久久久久久免费| 色av成人天堂桃色av| 国产另类ts人妖一区二区| 一区二区在线看| 国产情人综合久久777777| 欧美久久一二区| 99久久伊人网影院| 国产精品一区二区久激情瑜伽 | av在线不卡观看免费观看| 视频一区视频二区中文字幕| 亚洲欧洲美洲综合色网| 精品国产伦一区二区三区观看方式| 色综合久久综合| 成人a区在线观看| 国产成人精品影院| 国产一区二区在线影院| 韩国女主播一区二区三区| 亚洲成a天堂v人片| 亚洲最大成人综合| 亚洲精品免费电影| 亚洲精品高清视频在线观看| 中文字幕亚洲欧美在线不卡| 欧美草草影院在线视频| 精品久久久久久综合日本欧美| 欧美日韩免费观看一区三区| 欧美视频三区在线播放| 欧美视频中文字幕| 色999日韩国产欧美一区二区| 色婷婷精品大在线视频| 欧美日韩一区 二区 三区 久久精品| 91丨porny丨户外露出| 欧洲精品一区二区| 日韩亚洲欧美高清| 国产天堂亚洲国产碰碰| 亚洲丝袜精品丝袜在线| 亚洲国产精品麻豆| 国产专区欧美精品| 在线视频一区二区免费| 99久久久久免费精品国产| 久久精品国产亚洲aⅴ| 国产99一区视频免费| 一本大道久久a久久精品综合| 欧美少妇xxx| 久久午夜老司机| 香蕉av福利精品导航| 国产成人自拍在线| 7777精品久久久大香线蕉| 2023国产精品| 亚洲成在人线在线播放| 成人黄色综合网站| 91精品国产福利在线观看| 国产精品传媒在线| 狠狠色综合日日| 欧美mv日韩mv国产网站app| 一级日本不卡的影视| 国产乱妇无码大片在线观看| 欧美日本高清视频在线观看| 国产精品久久久久久久浪潮网站| 理论片日本一区| 制服丝袜一区二区三区| 亚洲一区二区欧美日韩| 91丝袜呻吟高潮美腿白嫩在线观看| 日韩亚洲欧美成人一区| 性做久久久久久免费观看| 色88888久久久久久影院按摩 | 水蜜桃久久夜色精品一区的特点 | 亚洲综合色视频| 懂色av一区二区三区免费观看| 欧美第一区第二区| 另类小说图片综合网| 欧美xingq一区二区| 久久97超碰国产精品超碰| 久久久不卡网国产精品二区| 韩国女主播成人在线| 久久久久国产精品人| 国产91精品精华液一区二区三区 | 欧美一区二区二区| 久久99蜜桃精品| 国产精品每日更新在线播放网址 | 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 日韩成人一区二区| 久久精品免视看| 欧美综合久久久| 精品一区二区三区免费| 亚洲欧洲无码一区二区三区| 欧美性一级生活| 国产电影一区二区三区| 亚洲日本电影在线| 日韩你懂的电影在线观看| 不卡一区二区中文字幕| 五月天一区二区三区| 欧美激情一区二区| 欧美日韩一区二区三区不卡| 国产一区二区免费视频| 一区二区在线观看免费视频播放| 在线观看91av| 一本到高清视频免费精品| 久久se这里有精品| 视频在线在亚洲| 一区二区三区免费| 中文字幕一区av| 精品久久久久一区| 91麻豆精品国产| 在线观看成人免费视频| a在线欧美一区| 成人免费视频免费观看| 国产成人精品免费看| 黄色精品一二区| 国内成+人亚洲+欧美+综合在线| 婷婷开心久久网| 亚洲va中文字幕| 日本欧美一区二区| 亚洲成人一区在线| 日韩中文字幕区一区有砖一区 | 69精品人人人人| 这里只有精品视频在线观看| 欧美美女一区二区| 欧美一级久久久| 久久亚洲一级片| 中文乱码免费一区二区| 日韩一区在线播放| 亚洲自拍偷拍综合| 日本欧洲一区二区| 国产69精品一区二区亚洲孕妇| 国产不卡在线视频| 欧美亚洲一区二区在线观看| 欧美日本一区二区三区四区| 欧美一区二区国产| 综合在线观看色| 青青草成人在线观看| 国产一区二区三区香蕉| 色呦呦国产精品| 精品少妇一区二区三区日产乱码| 国产亚洲欧美在线| 亚洲成人精品一区| 成年人国产精品| 国产精品福利在线播放|