CoolFace
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes838downloads
KMain.txt239 linesDownload Raw Back to Kernel
1 2U0 SysGlblsInit()3{4  I64 i,j;5  CRAXRBCRCXRDX ee;6 7  CPUId(0x1,&ee);8  sys_cache_line_width=ee.rbx.u8[1]*8;9 10  sys_focus_task=Fs;11  QueInit(&sys_macro_head);12 13  blkdev.dft_iso_filename       =AStrNew(DFT_ISO_FILENAME);14  blkdev.dft_iso_c_filename     =AStrNew(DFT_ISO_C_FILENAME);15  blkdev.tmp_filename           =AStrNew("~/Tmp.DD.Z");16  blkdev.dvd_boot_is_good=TRUE;17  #exe {18    if (!kernel_cfg->mount_ide_auto_hd_let)19      kernel_cfg->mount_ide_auto_hd_let='C';20    if (!kernel_cfg->mount_ide_auto_cd_let)21      kernel_cfg->mount_ide_auto_cd_let='T';22    StreamPrint("blkdev.first_hd_drv_let=%d;",23          kernel_cfg->mount_ide_auto_hd_let);24    StreamPrint("blkdev.first_dvd_drv_let=%d;",25          kernel_cfg->mount_ide_auto_cd_let);26  }27 28  DbgMode(ON);29  rev_bits_table=CAlloc(256);30  set_bits_table=CAlloc(256);31  for (i=0;i<256;i++)32    for (j=0;j<8;j++) {33      if (Bt(&i,7-j))   LBts(rev_bits_table+i,j);34      if (Bt(&i,j))     set_bits_table[i]++;35    }36 37  ext=CAlloc(EXT_EXTS_NUM*sizeof(U8 *));38  fp_getstr2=&SysGetStr2;39  KeyDevInit;40 41  #exe {42    StreamPrint("blkdev.boot_drv_let='%C';",kernel_cfg->boot_drv_let);43    StreamPrint("#exe{Option(OPTf_WARN_PAREN,OFF);}");44    StreamPrint("DskCacheInit(%s);",kernel_cfg->dsk_cache_size_exp);45    StreamPrint("#exe{Option(OPTf_WARN_PAREN,ON);}");46  };47 48  pow10_I64=CAlloc(sizeof(F64)*(308+308+1));49  for (i=-308;i<309;i++)50    pow10_I64[i+309]=Pow10(i);51 52  snd.ona=ONA_REST;53  QueInit(&snd.record_head);54  snd.record_head.time=tS;55 56  ProgressBarsRst;57 58  QueInit(&dev.pci_head);59  dev.mem64_ptr=mem_mapped_space;60 61  dbg.fun_seg_cache=CAlloc(FUN_SEG_CACHE_SIZE*sizeof(CFunSegCache));62  dbg.int_fault_code=IntFaultHndlrsNew;63}64 65U0 SysGrInit()66{67  text.font=sys_font_std;68  text.aux_font=sys_font_cyrillic;69  text.vga_alias        =dev.uncached_alias+VGAM_GRAPHICS;70  text.vga_text_alias   =dev.uncached_alias+VGAM_TEXT;71  if (!Bt(&sys_run_level,RLf_VGA)) { //if text mode72    text.cols=80;73    text.rows=25;74    MemSet(text.vga_text_alias,0,text.rows*text.cols<<1);75    text.border_chars[2] (I64)='........';76    text.border_chars[10](U32)='....';77  } else { //if 640x480 16 color78    text.cols=GR_WIDTH/FONT_WIDTH;79    text.rows=GR_HEIGHT/FONT_HEIGHT;80    OutU8(VGAP_IDX,VGAR_MAP_MASK);81    OutU8(VGAP_DATA,0x0F);82    MemSet(text.vga_alias,0,GR_WIDTH*GR_HEIGHT>>3);83    text.raw_scrn_image=CAlloc(GR_WIDTH*GR_HEIGHT/8);84    text.border_chars[2] (I64)=0x0908070605040302;85    text.border_chars[10](U32)=0x0D0C0B0A;86  }87}88 89U0 TimersInit()90{91  I64 i,*_q;92  U32 *_d;93 94  OutU8(0x43,0x34);95  OutU8(0x40,SYS_TIMER0_PERIOD);96  OutU8(0x40,SYS_TIMER0_PERIOD>>8);97 98  //High Precision Event Timer99  if (PCIReadU16(0,31,0,0)==0x8086) {//Intel?100//D31 F0, cfg 0xF0=RCBA of PCI-LPC Bridge101    _d=PCIReadU32(0,31,0,0xF0)(U8 *)&~0x3FFF+0x3404; //HPET cfg102//7     enable103    //1:0 HPET is at 0xFED00000,0xFED01000, 0xFED02000 or 0xFED03000.104    *_d=*_d&3|0x80;105  }106 107  _q=dev.uncached_alias+HPET_GCAP_ID;108  i=*_q; //i.u32[1]= period in femtoS (10e-15)109  if (100000<i.u32[1]<1000000000) {110    cnts.HPET_freq    =1000000000000000/i.u32[1];111    cnts.HPET_kHz_freq=1000000000000/i.u32[1];112    _q=dev.uncached_alias+HPET_GEN_CONF;113    *_q|=1; //Enable counting114    cnts.HPET_initial=HPET;115  } else {116    cnts.HPET_freq=0;117    cnts.HPET_kHz_freq=0;118    cnts.HPET_initial=0;119  }120}121 122U0 Reboot()123{//Hardware reset.124  CLI125  if (mp_cnt>1)126    MPHalt;127  *0x472(U16 *)=0;128  OutU8(0x70,0x8F);129  OutU8(0x71,0x00);130  OutU8(0x70,0x00);131  OutU8(0x92,InU8(0x92)|1);132  SysHlt;133}134 135U0 KMain()136{//Continued from KStart64.HC137  CBlkDev *bd;138  OutU8(0x61,InU8(0x61)&~3); //Snd;139  adam_task=Fs;140  BlkPoolsInit;141  SysGlblsInit;142  Mem32DevInit;143  UncachedAliasAlloc;144  LoadKernel;145  SysGrInit;146  StrCpy(Fs->task_name,"Adam Task CPU00");147  StrCpy(Fs->task_title,Fs->task_name);148  Fs->title_src=TTS_TASK_NAME;149  Fs->win_right=text.cols-2;150  Fs->win_top++;151  TaskDerivedValsUpdate;152 153  SysDefinesLoad;154  Core0Init;155  IntInit1;156 157  //Before this point use Snd() and Busy()158  //to debug.  After this point, use RawPrint()159  LBts(&sys_run_level,RLf_RAW);160  "TempleOS V%5.3f\t%D %T\n\n",161        sys_os_version,sys_compile_time,sys_compile_time;162 163  TimersInit;164  if (BIOSTotalMem<ToI64(0.95*MEM_MIN_MEG*0x100000))165    RawPrint(4000,"!!! Requires 512Meg of RAM Memory !!!");166 167  IntsInit;168  "Enable IRQ's\n";169  SetRFlags(RFLAGG_NORMAL);170  Busy(2000);171  IntInit2;172  LBts(&sys_run_level,RLf_INTERRUPTS);173 174  TimeStampFreqCal;175  BlkDevsInitAll;176  "DskChg(':');\n";177  DskChg(':');178  #exe {179    StreamPrint("HomeSet(\"%s\");\n"180          "blkdev.ins_base0=%d;blkdev.ins_base1=%d;blkdev.ins_unit =%d;\n",181          kernel_cfg->home_dir,182          blkdev.ins_base0,blkdev.ins_base1,blkdev.ins_unit);183  }184  Gs->idle_task->cur_dv=blkdev.let_to_drv[*blkdev.home_dir-'A'];185  DrvRep;186  if (blkdev.dvd_boot_is_good) {187    bd=Let2BlkDev(':');188    if (bd->type==BDT_ATAPI) {189      blkdev.ins_base0=bd->base0;190      blkdev.ins_base1=bd->base1;191      blkdev.ins_unit =bd->unit;192    }193  }194  LBts(&sys_run_level,RLf_BLKDEV);195 196  #exe {197    if (!kernel_cfg->opts[CFG_NO_MP])198      StreamPrint("\"MultiCore Start\\n\\n\";"199            "Core0StartMP;"200            "LBts(&sys_run_level,RLf_MP);");201  };202 203  KbdMsInit;204  MsInit;205  KbdInit;206  Spawn(&MsHardDrvrInstall);207 208  "Loading Compiler\n";209  Cd("/Compiler");210  Load("Compiler",LDF_SILENT);211  LBts(&sys_run_level,RLf_COMPILER);212 213  DbgMode(OFF);214  cnts.time_stamp_freq_initial=TimeStampFreqCal;215  Cd("/");216  try ExeFile("StartOS"); //Continues /StartOS.HC217  catch {218    Raw(ON);219    Silent(OFF);220    GetOutOfDollar;221    PutExcept;222    Dbg;223  }224 225  LBts(&sys_run_level,RLf_ADAM_SERVER);226  SrvTaskCont; //Never to return227}228 229asm {   ALIGN   16,OC_NOP230SYS_KERNEL_END::231#exe {232  if (kernel_cfg->opts[CFG_DBG_DISTRO])233    StreamPrint("DU8 0x%X-(SYS_KERNEL_END-SYS_KERNEL+"234        "BOOT_RAM_BASE+sizeof(CBinFile)) DUP (0);"235        "BINFILE \"%s\";",kernel_cfg->dbg_distro_start,236                          kernel_cfg->dbg_distro_file);237};238}239