Mercurial > hg > Members > taiki > original_os
view head64test/head64.S @ 19:f8ef856d6691
two new test directory
author | Taiki TAIRA <e095767@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 09 Oct 2012 17:35:53 +0900 |
parents | |
children |
line wrap: on
line source
.globl bootstart .code16 bootstart: movb $0xff, %al outb %al, $0x21 movb $0xff, %al outb %al, $0xa1 cli /* open A20 */ 1: inb $0x64, %al testb $2, %al jnz 1b movb $0xd1, %al outb %al, $0x64 1: inb $0x64, %al testb $2, %al jnz 1b movb $0xdf, %al outb %al, $0x60 lidt idt32ptr lgdt gdt32ptr movl %cr0, %eax andl $0x7fffffff orl $0x00000001, %eax movl %eax, %cr0 ljmp $24, $entry32 .align 16 idt32ptr: .word 0 .long 0 .align 16 gdt32ptr: .word 4*8-1 .long gdt .align 16 gdt64ptr: .word 4*8-1 .long gdt,0 .align 16 gdt: .word 0,0,0,0 .word 0xffff,0x0000,0x9a00,0x00af /* 8: r-x D=0 L=1 */ .word 0xffff,0x0000,0x9200,0x00cf /* 16: data rw- */ .word 0xffff,0x0000,0x9a00,0x00af /* 24: code r-x D=1 L=0 */ .align 16 /* 32bit protected mode */ entry32: .code32 movw $16, %ax movw %ax, %ds movw %ax, %es movw %ax, %fs movw %ax, %gs movw %ax, %ss movl $0x01fe8ff0, %esp /* enable PAE */ movl $0x00000020, %eax movl %eax, %cr4 /* create 64bit page table */ movl $0x01fe9000, %ebx movl %ebx, %edi xorl %eax, %eax movl $(512*8*6/4), %ecx rep stosl /* level 4 page map */ leal 0x1007(%ebx), %eax movl %eax, (%ebx) /* page directory pointers */ leal 0x1000(%ebx), %edi leal 0x2007(%ebx), %eax movl $4, %ecx 1: movl %eax, (%edi) addl $8, %edi addl $0x1000, %eax loop 1b /* page directories */ leal 0x2000(%ebx), %edi movl $0x183, %eax movl $(512*4), %ecx 1: movl %eax, %(%edi) addl $8, %edi addl $0x00200000, %eax loop 1b /* set page table base register */ movl %ebx, %cr3 /* enable long mode */ movl $0xc0000080, %ecx rdmsr btsl $8, %eax wrmsr /* activate page translation and long mode */ movl $0x80000001, %eax movl %eax, %cr0 /* load code 64 descriptor */ pushl $8 pushl $entry64 lret entry64: .code64 /* clear screen */ movl $0xb8000, %edi movw %0x0f20, %ax movl $80 * 25, %ecx rep stosw /* draw 4 characters with them attributes */ movl $0xb8000, %edi movq fourchars(%rip), %r8 movq %r8, (%rdi) /* work down. loop forever. */ 2: hlt jmp 2b .align 8 fourchars: .quad 0x0f330e320d310c30