OSDN Git Service

projects clean up 1
[pinoc/pinoc.git] / pinoc_x86 / test / PINoC / boot / head / 32mode.hpp
diff --git a/pinoc_x86/test/PINoC/boot/head/32mode.hpp b/pinoc_x86/test/PINoC/boot/head/32mode.hpp
new file mode 100644 (file)
index 0000000..2d06a96
--- /dev/null
@@ -0,0 +1,55 @@
+#ifndef __32MODE_H_
+#define __32MODE_H_
+
+
+/* waitkeybord */
+__asm__(
+               "waitkeybord:           \n\t"
+               "in    $0x64,    %al    \n\t"
+               "and   $0x02,    %al    \n\t"
+               "jnz   waitkeybord      \n\t"
+               "ret                    \n\t"
+);
+
+
+/* io_A20GATE */
+__asm__(
+               "io_A20GATE:                              \n\t"
+               "movb    $0xff,    %al    \n\t"
+               "outb    %al,      $0x21  \n\t"
+               "nop                      \n\t"
+               "outb    %al,      $0xa1  \n\t"
+
+               "cli                      \n\t"
+
+               "call    waitkeybord    \n\t"
+               "movb    $0xd1,   %al    \n\t"
+               "outb    %al,     $0x64  \n\t"
+               "call    waitkeybord    \n\t"
+               "movb    $0xdf,   %al    \n\t"
+               "outb    %al,     $0x60  \n\t"
+               "call    waitkeybord    \n\t"
+
+               "ret                     \n\t"
+);
+
+/* io_PROTECTMODE */
+__asm__(
+               "io_PROTECTMODE:                        \n\t"
+
+               "movw   $0x6000,        %ax             \n\t"
+               "movw   %ax,            %ds             \n\t"
+               "movw   %ax,            %es             \n\t"
+               "movw   %ax,            %fs             \n\t"
+               "movw   %ax,            %gs             \n\t"
+
+               "movl    %cr0,      %eax        \n\t"
+               "orl     $0x01,     %eax        \n\t"
+               "movl    %eax,      %cr0        \n\t"
+               "jmp     _piplineflash          \n\t"
+               "_piplineflash:                         \n\t"
+
+               "ljmp   $0x00008,       $0x00000000             \n\t"
+);
+
+#endif