7 jmp short start_trampoline
23 ; memastikan tidak ada corrupt
34 ; biar bisa pakai ram > 1mb
41 ; Enable protected mode (32bit)
59 ; pakai area di bawah 0x8000 yang aman
67 or eax, (1 << 5) ; PAE enable
73 or eax, (1 << 8) ; LME enable
74 or eax, (1 << 11) ; NXE - No-Execute Enable
79 or eax, (1 << 31) ; PG enable
85 shr ebx, 24 ; APIC ID ada di EBX[31:24]
86 mov [real_apic_id], ebx ; simpan dulu sebelum GDT setup
89 lgdt [gdt64_descriptor]
93; extern cpu_trampoline_phase_2
103 lea rbx, [rel signature]
104 mov r12, [rbx + 16] ; load data (signature+16)
107 mov rax, [rbx + 8] ; load pml4_addr (signature+8)
111 mov rax, [r12 + 8] ; load stack_top
116 mov qword [r12 + 16], 1 ; set handshake[2] = 1
118 mov rax, [r12] ; load cpuTrampolinePhase2
119 mov rdi, qword [rel real_apic_id] ; load real_apic_id (32-bit)
124 dq 0x0000000000000000 ; Null
125 dq 0x00CF9A000000FFFF ; Code32
126 dq 0x00CF92000000FFFF ; Data32
130 dw gdt_end - gdt_start - 1
135 dq 0x0000000000000000 ; Null
136 dq 0x00209A0000000000 ; Code64
137 dq 0x0000920000000000 ; Data64
141 dw gdt64_end - gdt64_start - 1