porting over pcboot codebase
[com32] / src / regs.asm
diff --git a/src/regs.asm b/src/regs.asm
new file mode 100644 (file)
index 0000000..5fb93d1
--- /dev/null
@@ -0,0 +1,57 @@
+       section .text
+       align 4
+
+       global get_regs
+get_regs:
+       push ebp
+       mov ebp, esp
+
+       push edx
+       mov edx, [ebp + 8]
+
+       mov [edx], eax
+       mov [edx + 4], ebx
+       mov [edx + 8], ecx
+       
+       ; juggle edx
+       mov eax, edx
+       pop edx
+       mov [eax + 12], edx
+       push edx
+       mov edx, eax
+       
+       ; those two are pointless in a function
+       mov [edx + 16], esp
+       mov [edx + 20], ebp
+
+       mov [edx + 24], esi
+       mov [edx + 28], edx
+
+       pushf
+       pop eax
+       mov [edx + 32], eax
+
+       mov [edx + 36], cs
+       mov [edx + 40], ss
+       mov [edx + 44], ds
+       mov [edx + 48], es
+       mov [edx + 52], fs
+       mov [edx + 56], gs
+
+       push ebx
+       mov ebx, cr0
+       mov [edx + 60], ebx
+       ;mov ebx, cr1
+       ;mov [edx + 64], ebx
+       mov ebx, cr2
+       mov [edx + 68], ebx
+       mov ebx, cr3
+       mov [edx + 72], ebx
+       pop ebx
+
+       pop edx
+       pop ebp
+       ret
+
+
+; vi:set ts=8 sts=8 sw=8 ft=nasm: