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

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

?? trace.c

?? 公開源代碼的嵌入式操作系統r&s!建議學習!
?? C
字號:
/*
===============================================================================
| Copyright (C) 2004 RuanHaiShen, All rights reserved.
| SUMMARY: 
|   Tracing system.
|
| DESCRIPTION:
|   See http://www.01s.org for documentation, latest information, license 
|   and contact details.
|   email:ruanhaishen@01s.org
=============================================================================*/ 
/*===========================================================================*/
#include <conio.h>
#include <stdlib.h>
#include <dos.h>
#include <setjmp.h>

#include "arch/arch.h"
#include "inc/queue.h"
#include "inc/kernel.h"
#include "inc/memory.h"
#include "inc/ipc.h"
#include "inc/kapi.h"


#define DISP_BASE               0xB800       /* Base segment of display (0xB800=VGA, 0xB000=Mono)  */
#define DISP_MAX_X                  80       /* Maximum number of columns                          */
#define DISP_MAX_Y                  25       /* Maximum number of rows                             */
#define RS_DISP_MIN_Y                2
#define RS_DISP_MAX_Y               25

#define DISP_FGND_BLACK           0x00
#define DISP_FGND_BLUE            0x01
#define DISP_FGND_GREEN           0x02
#define DISP_FGND_CYAN            0x03
#define DISP_FGND_RED             0x04
#define DISP_FGND_PURPLE          0x05
#define DISP_FGND_BROWN           0x06
#define DISP_FGND_LIGHT_GRAY      0x07
#define DISP_FGND_DARK_GRAY       0x08
#define DISP_FGND_LIGHT_BLUE      0x09
#define DISP_FGND_LIGHT_GREEN     0x0A
#define DISP_FGND_LIGHT_CYAN      0x0B
#define DISP_FGND_LIGHT_RED       0x0C
#define DISP_FGND_LIGHT_PURPLE    0x0D
#define DISP_FGND_YELLOW          0x0E
#define DISP_FGND_WHITE           0x0F

#define DISP_BGND_BLACK           0x00
#define DISP_BGND_BLUE            0x10
#define DISP_BGND_GREEN           0x20
#define DISP_BGND_CYAN            0x30
#define DISP_BGND_RED             0x40
#define DISP_BGND_PURPLE          0x50
#define DISP_BGND_BROWN           0x60
#define DISP_BGND_LIGHT_GRAY      0x70

#define DISP_BLINK                0x80

#define ICC_8254_CWR              0x43       /* 8254 PIT control word register address.            */
#define ICC_8254_CTR0             0x40       /* 8254 PIT timer 0 register address.                 */
#define ICC_8254_CTR1             0x41       /* 8254 PIT timer 1 register address.                 */
#define ICC_8254_CTR2             0x42       /* 8254 PIT timer 2 register address.                 */

#define ICC_8254_CTR0_MODE3       0x36       /* 8254 PIT binary mode 3 for counter 0 control word. */
#define ICC_8254_CTR2_MODE0       0xB0       /* 8254 PIT binary mode 0 for counter 2 control word. */
#define ICC_8254_CTR2_LATCH       0x80       /* 8254 PIT latch command control word                */

#define VECT_TICK                 0x08       /* Vector number for 82C54 timer tick                 */
#define VECT_DOS_CHAIN            0x81       /* Vector number used to chain DOS                    */

static jmp_buf _jump_flag;
static bool _exit_flag;
unsigned char _dos_tick_counter;

bool key_get(int *c)
{
    if (kbhit()) {
        *c = getch();
        return true;
    } else {
        *c = 0x00;
        return false;
    }
}

static void cursor_movenext(unsigned char* px, unsigned char* py)
{
    (*px)++;
    if (*px > DISP_MAX_X) {
        *px = 0;
        (*py)++;
    }
}

static void cursor_nextrow(unsigned char* px, unsigned char* py)
{
    (*px) = 0;
    (*py)++;
    if (*py > RS_DISP_MAX_Y) {
        *py = RS_DISP_MIN_Y;
    }
}

static void x86_vga_write_char(unsigned char x, unsigned char y, const char c, char style)
{
    unsigned short offset;
    char far* pv;
    
    offset = DISP_MAX_X * 2 * y + x * 2;
    pv = (char far *)MK_FP(DISP_BASE, offset);
    *pv++ = c;
    *pv = style;
}


void x86_vga_write(unsigned char *s, int count)
{
    unsigned char abyte;
    static unsigned char xpos = 0;
    static unsigned char ypos = 0;
   
    while (count--) {
        abyte = *s++;
        if (abyte != '\n') {
            x86_vga_write_char(xpos, ypos, abyte, DISP_FGND_WHITE);
            cursor_movenext(&xpos, &ypos);
        } else {
            cursor_nextrow(&xpos, &ypos);
        }
    }
}

static void clear_screen(char color)
{
    char far *pv;
    int i;

    pv = (unsigned char far *)MK_FP(DISP_BASE, 0x0000);

    for (i = 0; i < (DISP_MAX_X * DISP_MAX_Y); i++) {
        *pv++ = ' ';
        *pv++ = color;
    }
}

static void* intr_vect_get(int vect)
{
    unsigned short *pvect;
    int off;
    int seg;

    pvect = (unsigned short *)MK_FP(0x0000, vect * 4);
    CRITICAL_ENTER;
    off = *pvect++;
    seg = *pvect;
    CRITICAL_EXIT;
    return (MK_FP(seg, off));
}

static void intr_vect_set(int vect, void* isr)
{
    unsigned short *pvect;

    pvect = (unsigned short *)MK_FP(0x0000, vect * 4);
    CRITICAL_ENTER;
    *pvect++ = (unsigned short)FP_OFF(isr);
    *pvect = (unsigned short)FP_SEG(isr);
    CRITICAL_EXIT;
}

static void tick_rate_set (int freq)
{
    int count;

    if (freq == 18) {
        count = 0;
    } else if (freq > 0) {
        count = (int)(((long)2386360L / freq + 1) >> 1);
    } else {
        count = 0;
    }
    CRITICAL_ENTER;
    outp(ICC_8254_CWR, ICC_8254_CTR0_MODE3);
    outp(ICC_8254_CTR0, count & 0xFF);
    outp(ICC_8254_CTR0, (count >> 8) & 0xFF);
    CRITICAL_EXIT;
}

static void dos_save_return(void)
{
    void* isr_old;

    _exit_flag = false;
    _dos_tick_counter = 1;

    isr_old = intr_vect_get(VECT_TICK);
    intr_vect_set(VECT_DOS_CHAIN, isr_old);

    intr_vect_set(VECT_TICK, __timer_intr_s);
    tick_rate_set(TICKS_PER_SEC); 

    setjmp(_jump_flag);
    if (_exit_flag) {
        CRITICAL_ENTER;
        tick_rate_set(18);                                 /* restore tick*/
        CRITICAL_EXIT;
        isr_old = intr_vect_get(VECT_DOS_CHAIN);
        intr_vect_set(VECT_TICK, isr_old);
        clear_screen(DISP_FGND_WHITE + DISP_BGND_BLACK);   /* clear the display*/
        exit(0);                                           /* return to DOS*/
    }
}

static void return_to_dos(void)
{
    _exit_flag = true;
    longjmp(_jump_flag, 1);
}

void hardware_init(void)
{
    disable_irq();
    dos_save_return();
    clear_screen(DISP_FGND_WHITE); 
}

void halt(void)
{
    return_to_dos();
}

/*===========================================================================*/


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩和欧美的一区| 亚洲人成小说网站色在线| 久久66热re国产| 亚洲精品免费在线观看| 国产精品午夜久久| 久久综合色一综合色88| 91精品欧美一区二区三区综合在| 色综合色综合色综合| 丁香激情综合五月| 国产激情视频一区二区三区欧美 | 另类调教123区| 亚洲综合在线五月| 亚洲第一主播视频| 午夜精品福利在线| 精品影视av免费| 欧美视频精品在线| 欧美日韩一区二区在线观看| 欧美日韩国产美女| 日韩欧美国产一区二区在线播放| 欧美一级欧美三级| 国产欧美一区二区三区鸳鸯浴| 国产日韩欧美精品一区| 日韩精品一级二级| 欧美日韩成人一区| 亚洲综合色丁香婷婷六月图片| 亚洲成a人片综合在线| 99在线视频精品| 欧美日韩在线电影| 亚洲欧美在线高清| 亚洲一区二区三区国产| 成人av免费观看| 91精品国产一区二区三区蜜臀| 亚洲永久精品大片| 欧美午夜影院一区| 亚洲最大成人综合| 欧美日本在线一区| 日韩一区欧美二区| 欧美一级艳片视频免费观看| 日韩激情中文字幕| 日韩欧美成人午夜| 久久国产日韩欧美精品| 久久久精品国产免费观看同学| 亚洲成人激情社区| 欧美狂野另类xxxxoooo| 国产欧美一区二区精品忘忧草| 国产在线精品一区二区| 99久久婷婷国产综合精品电影| 欧美乱妇15p| 精彩视频一区二区三区| 国产亚洲成av人在线观看导航| 亚洲另类色综合网站| 一本大道久久a久久综合婷婷| 一区在线观看视频| 欧美自拍丝袜亚洲| 欧美日产在线观看| 国产在线一区观看| 欧美精品一卡两卡| 久久se这里有精品| 中文字幕精品三区| 亚洲婷婷在线视频| 国产福利精品一区| 亚洲日本va午夜在线电影| 色偷偷一区二区三区| 全国精品久久少妇| 免费黄网站欧美| 久久久国产精华| 日本电影欧美片| 欧美在线视频全部完| 蜜臀av性久久久久蜜臀aⅴ| 蜜桃视频免费观看一区| 国产精品久久久久久亚洲伦| 国产精品一线二线三线| 欧美一区二区三区小说| 国产一区二区免费视频| 亚洲手机成人高清视频| 制服丝袜日韩国产| 99这里都是精品| 狠狠色综合日日| 亚洲精品一卡二卡| 久久久久久影视| 欧美色老头old∨ideo| 国产一区二区精品久久91| 亚洲精品美国一| 久久婷婷国产综合精品青草| 欧美日韩极品在线观看一区| 成人永久aaa| 精品在线一区二区三区| 亚洲一区影音先锋| 中文字幕免费在线观看视频一区| 91精品久久久久久久99蜜桃| 91蜜桃免费观看视频| 国产精品二区一区二区aⅴ污介绍| 制服.丝袜.亚洲.中文.综合| 91网上在线视频| 国产aⅴ综合色| 一区二区三区高清不卡| 国产精品人妖ts系列视频| 欧美成va人片在线观看| 粉嫩欧美一区二区三区高清影视| 午夜精品久久久久久| 亚洲欧美激情插 | 久久国产视频网| 亚洲成人激情社区| 亚洲国产日日夜夜| 在线播放/欧美激情| 欧美自拍丝袜亚洲| 日本道色综合久久| 91丝袜美女网| 91原创在线视频| www.色综合.com| www..com久久爱| 成+人+亚洲+综合天堂| 成人午夜视频福利| 风间由美一区二区av101| 国产精品一区二区久久精品爱涩| 久久精品国产一区二区三| 日本午夜精品一区二区三区电影| 国产精品久久久久一区 | 日韩理论片中文av| 亚洲欧洲av一区二区三区久久| 国产精品美女久久久久久久| 中文字幕不卡三区| 国产精品人妖ts系列视频| 亚洲视频在线观看三级| 亚洲精品五月天| 亚洲午夜日本在线观看| 五月婷婷激情综合| 日本午夜一本久久久综合| 狠狠色狠狠色合久久伊人| 国产伦精品一区二区三区视频青涩 | 亚洲综合激情网| 亚洲不卡一区二区三区| 婷婷综合另类小说色区| 久久99日本精品| 国产suv精品一区二区6| 91色在线porny| 欧美精品自拍偷拍动漫精品| 日韩精品专区在线影院观看| 久久久99久久| 中文字幕在线一区| 亚洲午夜影视影院在线观看| 麻豆国产精品一区二区三区| 国产成人精品综合在线观看| 97久久精品人人爽人人爽蜜臀| 欧洲在线/亚洲| 制服丝袜日韩国产| 亚洲国产激情av| 亚洲成人在线网站| 精彩视频一区二区| 在线影院国内精品| 精品国产一区二区三区不卡 | 成人免费av网站| 欧美天堂亚洲电影院在线播放| 精品剧情v国产在线观看在线| 国产精品久久久久久妇女6080 | 亚洲欧美在线视频| 日韩高清不卡在线| 波多野洁衣一区| 7777精品伊人久久久大香线蕉最新版| 久久无码av三级| 亚洲一区在线观看网站| 国产精品影视在线| 欧美精品一二三区| 中文字幕av一区二区三区免费看 | 一区二区视频免费在线观看| 麻豆国产欧美日韩综合精品二区| 91免费版在线| 精品99一区二区| 亚洲18影院在线观看| zzijzzij亚洲日本少妇熟睡| 日韩一区二区视频在线观看| 欧美妇女性影城| 亚洲青青青在线视频| 国产最新精品免费| 欧美一级xxx| 亚洲精品中文字幕乱码三区| 国内一区二区在线| 91精品在线观看入口| 亚洲精选免费视频| av电影天堂一区二区在线观看| 欧美成人a∨高清免费观看| 婷婷综合五月天| 欧美日精品一区视频| 亚洲品质自拍视频| 成人丝袜18视频在线观看| 玉足女爽爽91| 成人综合婷婷国产精品久久免费| 欧美一级欧美一级在线播放| 天天免费综合色| 欧美日韩视频在线第一区| 亚洲靠逼com| 91老师片黄在线观看| 中文字幕一区二区三区精华液| 国产凹凸在线观看一区二区| 久久综合九色欧美综合狠狠| 久久99国产精品久久99| 日韩精品一区二区三区老鸭窝| 奇米888四色在线精品| 欧美一区二区三区小说| 麻豆一区二区在线|