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

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

?? c_kernel.c

?? The kernel compiled with C
?? C
?? 第 1 頁 / 共 2 頁
字號:
assembly code material of Dennis Marer- many thanks to him!

  
  "The product" is intended only for teaching and demonstration purposes
  and has no warranty.

*/

#define DPL_SYS 0       /* System privilege level */
#define DPL_USER        3       /* User privilege level */
#define PRESENT 1       /* Segment is present in memory */
#define SEG_SYS 0       /* Segment is system*/
#define SEG_DC  1       /* Segment is data or code */
#define TYPE_DATA       3       /* Descriptor type fields */
#define TYPE_CODE       0x0f    /* b?*/
#define TYPE_TSS        0x09    /* b!!*/
#define TYPE_LDT        0x02    /* a??*/
#define TYPE_INT        0x0e    /*e  */
#define TYPE_TASK_GATE  0x05
#define X_BIT_C 0       /*1   X- bit code */
#define X_BIT_D       0       /*1   X- bit data */
#define X_BIT_LDT       0
#define X_BIT_TSS       0
#define NOFINTERRUPTS     47
#define TSS_DESCR_BASE  6       /* Start of task state segment descriptors in GDT*/

#define DPL_3_STACK_OFFSET      1024
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
/*=============================================================================
;  The 386/486 Protected Mode structures and definitions.
;
;
; Description:
;  This file defines the structures and equates for use in setting up and
;  using the 386 Protected Mode.  This includes all types of descriptors,
;  Task State Segments (TSS).
;
; Portability:
;  Requires BORLAND C++ 3.1  or better to be compiled.
;  Dependent on a 386 or later microprocessor.
;  No other platform or hardware dependencies.
;
;=============================================================================*/

/* Segment descriptor definition - see Intel literature  for other information */
typedef struct {

        unsigned int limit_0    : 16;   /* segment limit, 15-0 */
        unsigned int base_0     : 16;   /* segment base, 15-0 */
        unsigned int base_16    :  8;   /* segment base, 23-16 */
        unsigned int type       :  4;   /* type */
        unsigned int segment    :  1;   /* segment */
        unsigned int DPL        :  2;   /* Descriptor Privilege Level */
        unsigned int present    :  1;   /* segment present bit */
        unsigned int limit_16   :  4;   /* segment limit, bits 19-16 */
        unsigned int avail      :  1;   /* available bit */
        unsigned int unused     :  1;   /* unused bit */
        unsigned int X          :  1;   /* X bit */
        unsigned int granul     :  1;   /* granularity bit */
        unsigned int base_24    :  8;   /* segment base, bits 31-24 */

} SEGMENT_DESCR;

/* Selector definition - see Intel literature  for other information */
typedef int SELECTOR;

typedef struct {

        unsigned int offset_0   : 16;   /* offset, 15-0 */
        unsigned int selector   : 16;   /* segment selector */
        unsigned int            :  5;   /* word count */
        unsigned int            :  3;   /* unused */
        unsigned int type       :  5;   /* descriptor type */
        unsigned int DPL        :  2;   /* Descriptor Privilege Level */
        unsigned int present    :  1;   /* segment present bit */
        unsigned int offset_16  : 16;   /* segment limit, bits 19-16 */

} GATE_DESCR;

/*-----------------------------------------------------------------------------
;  tss386 - A 386 Protected Mode Task State Segment.  Any amount of data may
;  exist between the I/O bitmap offset value and the I/O bitmap, definable
;  by the operating system.  Here, no extra memory is assumed, and the
;  I/O bitmap is fully defined (8192 bytes) for full access.
;-----------------------------------------------------------------------------*/
/*Task State Segment  definition - see Intel literature  for other information */
typedef struct {
        unsigned int    t3BackLink      : 16;   //** TSS backlink
        unsigned int    d1              : 16;   //** Reserved
        unsigned long   t3ESP0;                         //** Stack 0 pointer (CPL=0)
        unsigned int    t3SS0           : 16;   //** Stack 0 segment
        unsigned int    d2              : 16;   //** Reserved
        unsigned long   t3ESP1;                         //** Stack 1 pointer (CPL=1)
        unsigned int    t3SS1           : 16;   //** Stack 1 segment
        unsigned int    d3              : 16;   //** Reserved
        unsigned long   t3ESP2;                         //** Stack 2 pointer (CPL=2)
        unsigned int    t3SS2           : 16;   //** Stack 2 segment
        unsigned int    d4              : 16;   //** Reserved
        unsigned long   t3CR3;                          //** CR3
        unsigned long   t3EIP;                 //** Instruction pointer
        unsigned long   t3EFlags;               //** Extended flags
        unsigned long   t3EAX;                          //** Task general registers
        unsigned long   t3ECX;
        unsigned long   t3EDX;
        unsigned long   t3EBX;
        unsigned long   t3ESP;
        unsigned long   t3EBP;
        unsigned long   t3ESI;
        unsigned long   t3EDI;
        unsigned int    t3ES            : 16;   //** Task segment registers
        unsigned int    d5              : 16;   //** Reserved
        unsigned int    t3CS            : 16;
        unsigned int    d6              : 16;   //** Reserved
        unsigned int    t3SS            : 16;
        unsigned int    d7              : 16;   //** Reserved
        unsigned int    t3DS            : 16;
        unsigned int    d8              : 16;   //** Reserved
        unsigned int    t3FS            : 16;
        unsigned int    d9              : 16;   //** Reserved
        unsigned int    t3GS            : 16;
        unsigned int    d10             : 16;   //** Reserved
        unsigned int    t3LDT           : 16;   //** Task local descriptor table
        unsigned int    d11             : 16;   //** Reserved
        unsigned int    t3Trap          :  1;   //** Holds debug trap bit (T)
        unsigned int    d12             : 15;   //** Reserved
        unsigned int    t3IOOfs         : 16;   //** I/O map address offset
        unsigned int    t3IOMap[256];   //** Give full I/O access
        unsigned int    terminator      :  8;   //** Terminator 0FFh

} TSS_SEGMENT;
/* Not used */
typedef struct
 { int limit;
   long base;
 } INFO;     /* To be loaded to GDTR and IDTR */


/********************************************************************/
/*                                                                                                                                      */
/* FUNCTION PROTOTYPES                                                                                          */
/*                                                                                                                                      */
/********************************************************************/


#define  SelKernel             0x08     /* Kernel task state segment selector */
#define  SelDebug              0x0b0
#define  SelKCS        0x010    /* Kernel code segment selector */
#define  SelKDS        0x018    /* Kernel data and stack segment selector */
#define  SelScreen        0x020    /* Display memory segment selector */
#define  SelShm        0x028    /* Shared memory segment selector */
/*
  A simple protected mode priority based multitasking kernel for
  Intel 386/486/Pentium processors

  Written by Tuomo Kortesmaa 1995
  Copyright (c) 1995 Tuomo Kortesmaa (Email: tk@evitech.fi)
  Some constants (and also some ideas) to set up devices are found
  from an assembly code material of Dennis Marer- many thanks to him!

  Any license is not needed: If You find this material useful in any purpose,
  please send a short email notice to the author.
  All comments and corrections are appreciated.
  "The product" is intended only for teaching and demonstration purposes
  and has no warranty.


*/
#include "kernel.h"
/**************************************************************************/

void main ( )
{
        KERNELBASE   = (long)(16)*(long)(_CS);
        disable();     /* Interrupts are not allowed */
        asm pushfd;    /* Push 32- bit flag register */
        asm pop         eax;
        asm and         eax,0x0fff;
        asm push        eax;
        asm popfd;     /* Flags back */
        Setup_GDT();   /* Set up Global Descriptor Table */

        Setup_IDT();   /* Set up Interrupt Descriptor Table */
        Setup_SP ();   /* Set up Slave Processor 8042 */
        Setup_PIC();   /* Set up programmable interrupt controller */
        Setup_PIT();   /* Set up programmable interrupt timer */
        init_serial(); /* Set initialisation of the serial line */
        asm push SelKCS;      /* Set protected mode start point into stack*/
        _AX=(int)MainKernel;  /* Selector and offset*/
        asm push ax;
        DispInit();

        asm     {
                cli;
                lgdt    fword ptr GDTInfo;   /* Load GDT linear address into lgdt */
                lidt    fword ptr IDTInfo;   /* Load IDT linear address into lidt */
                mov     eax,cr0;
                or      al,0x01;             /* Protected mode bit into c0- register */
                mov     cr0,eax;             /* We are in protected mode */
                retf;                        /* Jump to the protected mode start address set earlier */
        }
}

//********************************************************//
//** Setup_GDT              1993                        **//
//**                                                    **//
//********************************************************//
//**                                                    **//
//** Luodaan Global Descriptors Table                   **//
//**                                                    **//
//********************************************************//
void Setup_GDT(void)
{
int                     loop;//,seg;
long int                diff;
SEGMENT_DESCR           *p_gdt = GDT;
SELECTOR                nullSel,SEL;
        _ES= 0x0b800;
        GDTInfo.limit= sizeof(GDT);                     /* Set linear addresses*/
        GDTInfo.base = (long)16*(long)_DS + (int)GDT;
        IDTInfo.limit= sizeof(IDT);
        IDTInfo.base = (long)16*(long)_DS + (int)IDT;
        nullSel      =  0;
        set_descriptor(p_gdt++,0L,0L,0,0,0,0,0);        /* First entry is null descriptor */
        Kernel_descr =p_gdt;
                                                         /* Second entry is kernel TSS descriptor*/
        set_tss_descriptor(p_gdt++,sizeof(TSS_SEGMENT)-1,
                    ( long)16*(long)_DS+(int)&TSS_Kernel,DPL_SYS);
        KCS_descr    = p_gdt;                            /* Kernel Code segment descriptor*/
        set_code_descriptor(p_gdt++,(long)SEGSIZE-1,KERNELBASE,DPL_SYS);
                                                        //** Kernel code & data descriptor
        KDS_descr = p_gdt;
        diff      = KERNELBASE - (long)(16)*(long)(_DS);
        set_data_descriptor(p_gdt++,(long)(SEGSIZE-1)-diff,(long)(16)*(long)(_DS),DPL_SYS);
                                                        /* Set kernel TSS */
        set_tss(&TSS_Kernel,SelKCS,SelKDS,
                           (long)(SEGSIZE-1)/*ERROR*/, nullSel);
        TSS_Kernel.t3EFlags     =       0x002;          /* Set tss is tailored for user we must correct */
        TSS_Kernel.t3ESP        =       0L;
        Screen_descr            =       p_gdt;
        set_data_descriptor(p_gdt++,0xffff,0x0B8000L,DPL_USER);
        Shm_descr = p_gdt;
        set_data_descriptor(p_gdt++,0xffff,0x0B8000L,DPL_USER);

        for (loop=0;loop < _MAXPROCESS;loop++)
        {
         TSS_descr[loop]=p_gdt;
         set_tss_descriptor(p_gdt++,sizeof(TSS_SEGMENT)-1,
                      (long)(16)*(long)_DS+(int)&TSS[loop], DPL_SYS);
         SEL          =  (SELBASE +0x20 *loop);  /* Selectors and descriptors for user processes */
         Sel_TSS[loop]=  (SEL-0x8);
         CODESEL      =  (SEL) | DPL_USER;
         DATASEL      =  (SEL +0x08) | DPL_USER;
         SelData[loop+1]=  DATASEL;
         set_tss(&TSS[loop],CODESEL, DATASEL,(long)(SEGSIZE-1)-OFF[loop],0);
         TSS[loop].t3GS  =  DATASEL+0x08;
         set_code_descriptor(p_gdt++,SEGSIZE-1,
                              KERNELBASE+(loop+1)*SEGSIZE,DPL_USER);

         set_data_descriptor(p_gdt++,SEGSIZE-1-OFF[loop],
                             KERNELBASE+(loop+1)*SEGSIZE+OFF[loop],DPL_USER);
         set_data_descriptor(p_gdt++,15,
                                  (long)(16)*(long)_DS+(int)&PCB[loop].CommData,DPL_USER);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区色| 久久女同互慰一区二区三区| 1024成人网| www.欧美精品一二区| 亚洲欧洲成人自拍| 欧美在线制服丝袜| 日韩高清电影一区| 26uuu国产在线精品一区二区| 国产一区二区剧情av在线| 久久久久99精品国产片| 波多野结衣一区二区三区| 1区2区3区国产精品| 欧美色中文字幕| 狂野欧美性猛交blacked| 国产午夜亚洲精品不卡| 国产99久久久国产精品免费看| 最好看的中文字幕久久| 精品视频1区2区| 精品亚洲成av人在线观看| 国产精品国产三级国产三级人妇| 色偷偷一区二区三区| 日韩电影在线看| 国产三级欧美三级日产三级99 | 亚洲制服欧美中文字幕中文字幕| 欧美色男人天堂| 极品美女销魂一区二区三区| 国产精品福利一区| 91精品国产一区二区三区香蕉| 国产一区视频导航| 一区二区久久久久久| 日韩精品一区二区三区视频在线观看 | 18成人在线视频| 欧美一区二区三区在线观看| 盗摄精品av一区二区三区| 一区二区高清在线| 久久久久久久电影| 欧美三级一区二区| 国产91综合网| 青青草一区二区三区| 136国产福利精品导航| 日韩一区二区三区观看| 91在线国内视频| 免费成人在线观看| 亚洲乱码国产乱码精品精小说 | 日韩一级二级三级精品视频| 99久久99久久精品免费看蜜桃| 日本欧美一区二区| 亚洲乱码国产乱码精品精小说 | 亚洲bt欧美bt精品777| 国产精品无码永久免费888| 欧美二区在线观看| 色噜噜狠狠成人网p站| 国产999精品久久| 精品亚洲国产成人av制服丝袜| 亚洲一区视频在线观看视频| 国产精品久久久久久久久免费樱桃| 欧美一级片在线观看| 欧美在线看片a免费观看| 成人91在线观看| 国产不卡免费视频| 国产精品综合视频| 久久机这里只有精品| 免费一级片91| 视频一区二区中文字幕| 亚洲一区二区精品视频| 亚洲乱码国产乱码精品精可以看| 欧美国产精品v| 国产午夜精品一区二区三区视频| 精品国产污污免费网站入口 | 精品国产一二三区| 日韩欧美一级片| 日韩欧美国产不卡| 91精品国产色综合久久ai换脸| 欧美日韩视频在线一区二区| 91福利社在线观看| 在线欧美日韩精品| 欧洲一区在线观看| 欧美亚洲综合网| 欧美日韩一区二区三区四区五区| 91福利视频网站| 欧美美女网站色| 欧美一区二区三区免费大片 | 精品三级在线观看| 精品久久久久久无| 久久久国产精品午夜一区ai换脸| 久久综合av免费| 欧美极品少妇xxxxⅹ高跟鞋| 中文文精品字幕一区二区| 日本一区二区三区久久久久久久久不| 国产视频911| 日韩一区欧美小说| 亚洲国产精品一区二区www| 午夜国产不卡在线观看视频| 免费观看久久久4p| 国产精品一二一区| 91亚洲午夜精品久久久久久| 2020国产精品| 欧美精品一区二区三区在线| 久久精品视频网| 国产精品伦理一区二区| 一区二区欧美国产| 麻豆成人综合网| 大美女一区二区三区| 在线观看日韩毛片| 日韩欧美一级二级| 国产精品麻豆一区二区| 一区二区日韩电影| 麻豆中文一区二区| 99久久伊人网影院| 51精品秘密在线观看| 国产丝袜在线精品| 亚洲综合在线视频| 久久99精品久久久久久动态图| 丁香另类激情小说| 91.com视频| 国产精品无遮挡| 日韩 欧美一区二区三区| 国产综合成人久久大片91| 91啪亚洲精品| 精品美女被调教视频大全网站| 亚洲三级电影网站| 精彩视频一区二区三区| 色欧美片视频在线观看在线视频| 欧美精品123区| 中文字幕一区二区在线播放| 日本美女一区二区三区| 91美女视频网站| 欧美成人在线直播| 一二三四区精品视频| 国产xxx精品视频大全| 欧美高清dvd| 亚洲欧美一区二区三区久本道91 | 欧美精品一区二区高清在线观看| 亚洲欧洲国产日本综合| 国产一区二区在线看| 欧美喷潮久久久xxxxx| 国产精品久久久久久一区二区三区| 热久久一区二区| 在线观看国产一区二区| 日本一区二区三级电影在线观看| 日本中文字幕一区二区视频| 91网上在线视频| 国产欧美一区二区精品仙草咪 | 亚洲欧美视频在线观看| 国产乱码精品一区二区三区忘忧草| 精品视频在线看| 亚洲精品视频一区二区| 高清av一区二区| 精品国偷自产国产一区| 日本伊人午夜精品| 欧美这里有精品| 樱桃视频在线观看一区| 99久久免费精品高清特色大片| 久久久久九九视频| 韩国毛片一区二区三区| 日韩免费观看高清完整版| 亚洲成人777| 欧美日韩一区二区三区免费看| 亚洲男人的天堂在线aⅴ视频| av爱爱亚洲一区| 国产精品丝袜在线| 成人深夜福利app| 国产女主播在线一区二区| 国产精品一区在线| 国产亚洲一本大道中文在线| 精品无人区卡一卡二卡三乱码免费卡 | 欧美一二三四在线| 日韩av网站在线观看| 国产精品久99| 国产精品亚洲第一区在线暖暖韩国| 精品国产乱码久久久久久久久| 麻豆成人在线观看| 精品精品国产高清一毛片一天堂| 国内精品久久久久影院一蜜桃| 久久久一区二区| 成人国产一区二区三区精品| 国产精品欧美一区二区三区| 99久久夜色精品国产网站| 亚洲精品国产品国语在线app| 日本道精品一区二区三区| 亚洲国产精品综合小说图片区| 欧美日韩电影一区| 美女任你摸久久| 国产欧美1区2区3区| 91同城在线观看| 亚洲一区二区四区蜜桃| 这里只有精品99re| 久久69国产一区二区蜜臀| 国产三级三级三级精品8ⅰ区| 91丨porny丨蝌蚪视频| 亚洲网友自拍偷拍| 欧美成人一区二区| 成人午夜私人影院| 亚洲一区在线观看免费观看电影高清| 欧美精品一卡两卡| 国产精品一区二区久久精品爱涩| 国产精品久久久久精k8| 欧美另类久久久品| 国产不卡高清在线观看视频| 亚洲精品高清在线观看|