about summary refs log tree commit diff stats
path: root/apps/bos/4.xxd
diff options
context:
space:
mode:
Diffstat (limited to 'apps/bos/4.xxd')
-rw-r--r--apps/bos/4.xxd87
1 files changed, 87 insertions, 0 deletions
diff --git a/apps/bos/4.xxd b/apps/bos/4.xxd
new file mode 100644
index 00000000..be677134
--- /dev/null
+++ b/apps/bos/4.xxd
@@ -0,0 +1,87 @@
+## 16-bit code
+
+# Entry:
+00:
+  bd 00 90  # bp <- 0x9000
+  89 ec  # sp <- bp
+
+  bb 8f 7c  # bx <- MSG_REAL_MODE
+  e8 38 00  # call print_string
+
+  e8 02 00  # call switch_to_pm
+  eb fe  # jump $  (should never get here)
+
+# switch_to_pm:
+10:
+  fa  # cli
+  0f 01 16 3d 7c  # lgdt [gdt_descriptor]
+  0f 20 c0  # eax <- cr0
+  66 83 c8 01  # eax <- or 0x1
+  0f 22 c0  # cr0 <- eax
+20:
+  ea 53 7c 08 00  # jmp CODE_SEG:init_pm
+
+# gdt_start:
+# gdt_null:  mandatory null descriptor
+  00 00 00 00 00 00 00 00
+# gdt_code:
+  ff ff 00
+30:
+  00 00 9a cf 00
+# gdt_data:
+  ff ff 00 00 00 92 cf 00
+# gdt_end:
+
+# gdt_descriptor:
+3d:
+  17 00  # limit
+  25 7c 00 00  # start
+
+# print_string:
+43:
+  60  # pusha
+  b4 0e  # ah <- 0x0e
+# loop:
+  8a 07  # al <- *bx
+  cd 10  # int 10h
+  83 c3 01  # add bx, 1
+  3c 00  # cmp al, 0
+  75 f5  # jne loop
+  61  # popa
+  c3  # ret
+
+## 32-bit code
+
+# init_pm:
+53:
+  66 b8 10 00  # ax <- DATA_SEG
+  8e d8  # ds <- ax
+  8e d0  # ss <- ax
+  8e c0  # es <- ax
+  8e e0  # fs <- ax
+  8e e8  # gs <- ax
+61:
+  bd 00 00 09 00  # ebp <- 0x90000
+  89 ec  # esp <- ebp
+  bb ab 7c 00 00  # ebx <- MSG_PROT_MODE
+  e8 02 00 00 00  # call print_string_pm
+  eb fe  # hang
+
+# print_string_pm:
+74:
+  60  # pusha
+  ba 00 80 0b 00 8a 03 b4 0f 3c 00
+80:
+  74 0b 66 89 02 83 c3 01 83 c2 02 eb ed 61 c3 53
+90:
+  74 61 72 74 65 64 20 69 6e 20 31 36 2d 62 69 74
+a0:
+  20 52 65 61 6c 20 4d 6f 64 65 00 53 75 63 63 65
+b0:
+  73 73 66 75 6c 6c 79 20 6c 61 6e 64 65 64 20 69
+c0:
+  6e 20 33 32 2d 62 69 74 20 50 72 6f 74 65 63 74
+d0:
+  65 64 20 4d 6f 64 65
+
+# vim:ft=conf