U0 DateTimeFmtMapsRst() { I64 i; for (i=0;iacct_name) StreamPrintF("sys_acct=StrNew(\"%C:/SparrowOS/Accts/%s\");",osmain_cfg->dft_drv,osmain_cfg->acct_name); else StreamPrintF("sys_acct=StrNew(\"%C:/SparrowOS/Accts\");",osmain_cfg->dft_drv); StreamPutS("#exe{OptOff(OPTf_WARN_PAREN);}"); StreamPrintF("DskCacheInit(%s);",osmain_cfg->dsk_cache_size_exp); StreamPutS("#exe{OptOn(OPTf_WARN_PAREN);}"); }; pow10_I64=CAlloc(sizeof(F64)*(308+308+1)); for (i=-308;i<309;i++) pow10_I64[i+309]=Pow10(i); //$AN,"Independent Heap Ctrl Example","Independent Heap Ctrl Example"$ i=1; //Rqst 1 blk, we might get more. m=MemBlksUncachedAlloc(&i,sys_code_bp); sys_uncached_heap=HeapCtrlIndependentInit(m,i*0x200000/0x200); ProgressBarsRst; date_fmt_map=MAlloc(NUM_DATE_FMTS); time_fmt_map=MAlloc(NUM_TIME_FMTS); DateTimeFmtMapsRst; sys_fault_handlers_code=IntFaultHandlersNew; } U0 SysGrInit() { //See $LK,"SYS_BIOS_GR_MODE","FF:D:/SparrowOS/OSMain/OSStart.CPP.Z,SYS_BIOS_GR_MODE:2"$ //See $LK,"::/SparrowOS/Adam/Gr/GrCfg.CPP.Z","FI:::/SparrowOS/Adam/Gr/GrCfg.CPP.Z"$ gr_font=sys_font_8x8; if (bios_gr_mode==0x12 || bios_gr_mode==0x6A) { text_mode=FALSE; /* Mode must be multiple of 32 wide $LK,"GrUpdateLine32","MN:GrUpdateLine32"$(). */ if (bios_gr_mode==0x6A) { gr_width =800; gr_height=600; } else { gr_width =640; gr_height=480; } text_cols=gr_width/FONT_WIDTH; text_rows=gr_height/FONT_HEIGHT; OutU8(VGA_SC_INDEX,VGA_MAP_MASK); OutU8(VGA_SC_DATA,0x0F); MemSet(VGA_GRAPHIC_MEM_BASE,0,gr_width*gr_height>>3); sys_dc_screen_image=CAlloc(gr_width*gr_height/8); } else { text_mode=TRUE; gr_width =640; gr_height=480; text_cols=80; text_rows=25; MemSet(VGA_TEXT_MEM_BASE,0,text_rows*text_cols<<1); } } U0 TimersInit() { I64 i,*qq; U32 *_d; OutU8(0x43,0x34); OutU8(0x40,SYS_TIMER0_PERIOD); OutU8(0x40,SYS_TIMER0_PERIOD>>8); // High Precision Event Timer if (PCIReadU16(0,31,0,0)==0x8086) { //Intel? //D31 F0, cfg 0xF0=RCBA of PCI-LPC Bridge _d=PCIReadU32(0,31,0,0xF0)(U8 *)&~0x3FFF+0x3404; //HPET cfg //7 enable //1:0 HPET is at 0xFED00000,0xFED01000, 0xFED02000 or 0xFED03000. *_d=*_d&3|0x80; } qq=HPET_GCAP_ID; i=*qq; //i.u32[1]= period in femtoS (10e-15) if (1000001) MPHalt; MemPagePresentMark(d,TRUE); *d=0; OutU8(0x70,0x8F); OutU8(0x71,0x00); OutU8(0x70,0x00); OutU8(0x92,InU8(0x92)|1); SysHlt; } U0 OSMain() { //Continued from $LK,"OSMain","FF:::/SparrowOS/OSMain/OSStart.CPP.Z,I32 &OSMain"$ adam_task=Fs; HeapsInit; LBts(&sys_run_level,RLf_FULL_HEAP); Fs->hash_table=HashTableNew(ADAM_HASH_SIZE,Fs); #exe {StreamPrintF("SysDeterministic(%d);",osmain_cfg->opts[CFG_DETERMINISTIC]);}; SysGlblsInit; Mem32DevInit; MemPagesNotPresentMark; LoadOSMain; SysGrInit; StrCpy(Fs->task_name,"Adam Task CPU#0"); StrCpy(Fs->task_title,Fs->task_name); Fs->text_attr=WHITE<<4+PURPLE; Fs->border_attr=WHITE<<4+LTPURPLE; Fs->win_right=text_cols-2; Fs->win_top++; TaskDerivedValsUpdate; LoadSysStrs; MPInit; IntInit1; //Before this point use $LK,"Snd","MN:Snd"$() and $LK,"BusyWait","MN:BusyWait"$() //to debug. After this point, use $LK,"DbgNum","MN:DbgNum"$() LBts(&sys_run_level,RLf_RAW); if (BIOSTotalMem<250*0x100000) Dbg("Requires 256 Meg of RAM Memory"); TimersInit; IntsInit; "Enable IRQ's\n"; SetFlags(SYS_NORMAL_RFLAGS); BusyWait(2000); IntInit2; LBts(&sys_run_level,RLf_INTERRUPTS); TimeStampFreqCal; if (!IsSysDeterministic) Preempt(ON); #exe { if (!osmain_cfg->opts[CFG_NO_MP]) StreamPutS("\"MultiCore Start\\n\\n\";" "MPStart;"); }; LBts(&sys_run_level,RLf_MP); KbdMouseVarsInit; IPVarsInit; KbdInit; if (IsSysDeterministic) MouseDriverInstall; else if (mp_cnt<2) Spawn(&MouseDriverInstall); else MPSpawn(&MouseDriverInstall); "BlkDevsInitAll\n"; BlkDevsInitAll; "BlkDevsInitAll Done\n"; #exe { if (osmain_cfg->cdrom_ports_pmt) StreamPutS("if (boot_drv_pmt) PutDefine(\"ST_CDROM_PORTS_PMT\");"); }; DrvDftSelect; LBts(&sys_run_level,RLf_DSK); "Loading Compiler\n"; Cd("/SparrowOS/Compiler"); Load("Compiler",LDF_SILENT); time_stamp_freq_initial=TimeStampFreqCal; InDbg(OFF); LBts(&sys_run_level,RLf_COMPILER); Cd("/SparrowOS/OSMain"); try ExeFile("Adam1.CPP.Z"); //Continues $LK,"/SparrowOS/OSMain/Adam1.CPP.Z","FL:/SparrowOS/OSMain/Adam1.CPP.Z,1"$ catch { CatchAll; Dbg; } LBts(&sys_run_level,RLf_ADAM_SERVER); ServantTaskCont; //Never to return } asm { ALIGN 16,OC_NOP SYS_OSMAIN_END::}