cos2000v2/system/realmode/pmode.S

41 lines
652 B
ArmAsm

#include "memory.h"
#include "gdt.h"
.text
.code16
.global gotopmode
gotopmode:
jmp 1f
1:
xorl %eax,%eax
movl %ds,%ax
shl $0x4,%eax
add %eax,(2f)
movl %cr0, %eax
orb $0x01, %al
movl %eax, %cr0
.byte 0x66, 0xea
2: .long pmode
.word SEL_KERNEL_CODE
.code32
.section ".text32","ax"
.global pmode
pmode:
movw $SEL_KERNEL_DATA, %ax
movw %ax, %ds
movw %ax, %es
movw %ax, %fs
movw %ax, %gs
movl $KERNEL_CODE_ADDR, %ebx
movw $SEL_KERNEL_STACK, %ax
movw %ax, %ss
movl $KERNEL_STACK_ADDR, %esp
xor %eax,%eax
xor %ecx,%ecx
xor %edx,%edx
xor %esi,%esi
xor %edi,%edi
xor %ebp,%ebp
jmp *%ebx