hschumann2/TempleOS-Source-Code
0838
1 2asm {3USE324//************************************5// ASM Global vars not required for 16-bit start-up6 ALIGN 8,OC_NOP7MEM_HEAP_BASE:: DU64 0;8MEM_HEAP_LIMIT:: DU64 0;9MEM_PAGE_SIZE:: DU64 0;10MEM_MAPPED_SPACE:: DU64 0;11MEM_2MEG_NUM:: DU64 0;12MEM_1GIG_NUM:: DU64 0;13MEM_512GIG_NUM:: DU64 0;14MEM_PML2:: DU64 0;15MEM_PML3:: DU64 0;16MEM_PML4:: DU64 0;17 18#exe {19 StreamPrint(20"SYS_MEM_INIT_FLAG:: DU8 %d;"21"SYS_MEM_INIT_VAL:: DU8 %d;"22"SYS_HEAP_INIT_FLAG:: DU8 %d;"23"SYS_HEAP_INIT_VAL:: DU8 %d;"24"SYS_VAR_INIT_FLAG:: DU8 %d;"25"SYS_VAR_INIT_VAL:: DU8 %d;"26"SYS_STAFF_MODE_FLAG:: DU8 %d;",27kernel_cfg->opts[CFG_MEM_INIT], kernel_cfg->mem_init_val,28kernel_cfg->opts[CFG_HEAP_INIT],kernel_cfg->heap_init_val,29kernel_cfg->opts[CFG_VAR_INIT], kernel_cfg->var_init_val,30kernel_cfg->opts[CFG_STAFF_MODE]);31};32SYS_HEAP_DBG_FLAG:: DU8 _CFG_HEAP_DBG;33 34 ALIGN 8,035SYS_CTRL_ALT_FLAGS:: DU64 0;36SYS_EXTERN_TABLE:: DU64 0;37 38SYS_CODE_BP:: DU64 0;39SYS_DATA_BP:: DU64 0;40 41SYS_PROGRESSES::42SYS_PROGRESS1:: DU64 0;43SYS_PROGRESS1_MAX:: DU64 0;44SYS_PROGRESS1_T0:: DU64 0;45SYS_PROGRESS1_TF:: DU64 0;46SYS_PROGRESS1_DESC:: DU8 PROGRESS_DESC_LEN DUP(0);47SYS_PROGRESS2:: DU64 0;48SYS_PROGRESS2_MAX:: DU64 0;49SYS_PROGRESS2_T0:: DU64 0;50SYS_PROGRESS2_TF:: DU64 0;51SYS_PROGRESS2_DESC:: DU8 PROGRESS_DESC_LEN DUP(0);52SYS_PROGRESS3:: DU64 0;53SYS_PROGRESS3_MAX:: DU64 0;54SYS_PROGRESS3_T0:: DU64 0;55SYS_PROGRESS3_TF:: DU64 0;56SYS_PROGRESS3_DESC:: DU8 PROGRESS_DESC_LEN DUP(0);57SYS_PROGRESS4:: DU64 0;58SYS_PROGRESS4_MAX:: DU64 0;59SYS_PROGRESS4_T0:: DU64 0;60SYS_PROGRESS4_TF:: DU64 0;61SYS_PROGRESS4_DESC:: DU8 PROGRESS_DESC_LEN DUP(0);62#assert $-SYS_PROGRESSES==sizeof(CProgress)*463 64SYS_FOCUS_TASK:: DU64 0;65SYS_CPU_STRUCTS:: DU64 0;66SYS_MP_CNT:: DU64 1;67SYS_MP_CNT_INITIAL:: DU64 1;68SYS_MP_CNT_LOCK:: DU64 1;69 70 ALIGN DFT_CACHE_LINE_WIDTH,OC_NOP71SYS_CACHE_LINE_WIDTH:: DU64 DFT_CACHE_LINE_WIDTH;72 DU8 DFT_CACHE_LINE_WIDTH-sizeof(CBinFile)-8 DUP(0);73SYS_SEMAS:: DU8 SEMA_SEMAS_NUM*DFT_CACHE_LINE_WIDTH DUP(0);74//************************************75 ALIGN 16,OC_NOP76CORE0_32BIT_INIT:: //Entry point for BootRAM.77 PUSH U32 RFLAGG_START78 POPFD79 MOV EAX,SYS_START_CR080 MOV_CR0_EAX81 82 MOV AX,CGDT.boot_ds //LOAD DS SELECTOR83 MOV DS,AX84 BTS U32 [SYS_RUN_LEVEL],RLf_32BIT85 MOV ESI,U32 [SYS_BOOT_PATCH_TABLE_BASE]86 MOV EDI,U32 [MEM_BOOT_BASE]87 88 MOV AX,CGDT.ds89 MOV DS,AX90 MOV ES,AX91 MOV FS,AX92 MOV GS,AX93 MOV SS,AX94 MOV ESP,BOOT_RAM_LIMIT //Tmp Stk95 96//Patch abs addresses97 MOV ECX,U32 CPatchTableAbsAddr.abs_addres_cnt[ESI]98 LEA ESI,U32 CPatchTableAbsAddr.abs_addres[ESI]99@@05: LODSD100 ADD EAX,EDI101 ADD U32 [EAX],EDI102 LOOP @@05103 104 DU8 0xEA; //JMP CGDT.cs32:@@10105 DU32 @@10;106 DU16 CGDT.cs32;107 108@@10: BTS U32 [SYS_RUN_LEVEL],RLf_PATCHED109 110 CALL SYS_FIND_PCIBIOS_SERVICE_DIR111 CALL SYS_FIND_PCI_SERVICES112 CALL SYS_INIT_PAGE_TABLES113 CALL SYS_INIT_16MEG_SYS_CODE_BP114 PUSH U32 0 //Return from next call will be 64-bit115 CALL SYS_ENTER_LONG_MODE116 117 //We fall-thou to KStart64, next.118}119 