hschumann2/TempleOS-Source-Code
0838
1 2asm {3USE644 BTS U32 [SYS_RUN_LEVEL],RLf_64BIT5 6 FNINIT7 MOV RAX,SYS_FIXED_AREA+CSysFixedArea.init_fpu_mmx8 FXSAVE U64 [RAX]9 10//Init CPU0 Struct11 PUSH SYS_FIXED_AREA+CSysFixedArea.adam12 PUSH SYS_FIXED_AREA+CSysFixedArea.boot_cpu13 PUSH 014 CALL &CPUStructInit15 CALL SET_GS_BASE16 17//Init Adam HeapCtrl18 MOV EDI,U32 SYS_FIXED_AREA+CSysFixedArea.adam_hc19 MOV EAX,U32 SYS_FIXED_AREA+CSysFixedArea.sys_code_bp20 MOV U64 CHeapCtrl.bp[RDI],RAX21 MOV U32 CHeapCtrl.hc_signature[RDI],HEAP_CTRL_SIGNATURE_VAL22 23 LEA RAX,U64 CHeapCtrl.next_um-CMemUsed.next[RDI]24 MOV U64 CHeapCtrl.next_um[RDI],RAX25 MOV U64 CHeapCtrl.last_um[RDI],RAX26 27 MOV EAX,U32 SYS_FIXED_AREA+CSysFixedArea.adam28 MOV U64 CHeapCtrl.mem_task[RDI],RAX29 MOV U64 CTask.code_heap[RAX],RDI30 MOV U64 CTask.data_heap[RAX],RDI31 MOV U32 CTask.task_signature[RAX],TASK_SIGNATURE_VAL32 33 BTS U32 [SYS_RUN_LEVEL],RLf_16MEG_ADAM_HEAP_CTRL34 35 PUSH MEM_ADAM_STK36 PUSH U32 SYS_FIXED_AREA+CSysFixedArea.adam37 CALL &TaskInit38 CALL SET_FS_BASE39 MOV RSP,U64 CTask.rsp[RAX]40 41 JMP I32 &KMain42 43//************************************44USE3245SYS_ENTER_LONG_MODE:: //Switch to long 64-bit mode46 MOV_EAX_CR447 OR EAX,0xB048 MOV_CR4_EAX49 50 MOV EAX,[MEM_PML4]51 MOV_CR3_EAX52 53 MOV ECX,IA32_EFER54 XOR EDX,EDX55 MOV EAX,IA32F_LME56 WRMSR57 58 MOV_EAX_CR059 BTS EAX,31 //Enable paging (required for 64-bit mode)60 MOV_CR0_EAX61 62 DU8 0xEA; //JMP CGDT.cs64:@@0563 DU32 @@05;64 DU16 CGDT.cs64;65USE6466@@05: MOV AX,CGDT.ds67 MOV DS,AX68 MOV ES,AX69 MOV SS,AX70 MOV FS,AX71 MOV GS,AX72 RET73 74//************************************75SYS_RAM_REBOOT:: //This gets copied high. SYS_RAM_REBOOT76 PUSH U32 CGDT.ds //stk seg77 PUSH U32 BOOT_RAM_LIMIT //stk78 PUSH U32 0 //flags79 PUSH U32 CGDT.cs3280 LEA RAX,[@@10]81 PUSH RAX82 IRET83USE3284@@10: WBINVD85 86//Disable paging87 MOV_EAX_CR088 BTR EAX,3189 MOV_CR0_EAX90 91 MOV ECX,IA32_EFER92 XOR EDX,EDX93 XOR EAX,EAX94 WRMSR95 96 MOV EBX,BOOT_SRC_RAM97 MOV EAX,I32 CORE0_32BIT_INIT98 JMP EAX99SYS_RAM_REBOOT_END::100USE64101}102 