hschumann2/TempleOS-Source-Code
0838
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 