--- /dev/null
+#ifndef KVM__CPU_H
+#define KVM__CPU_H
+
+#include <stdint.h>
+
+enum eflag_bits {
+ EFLAGS_CF = (1UL << 0), /* Carry Flag */
+ EFLAGS_PF = (1UL << 2), /* Parity Flag */
+ EFLAGS_AF = (1UL << 4), /* Auxiliary Carry Flag */
+ EFLAGS_ZF = (1UL << 6), /* Zero Flag */
+ EFLAGS_SF = (1UL << 7), /* Sign Flag */
+ EFLAGS_TF = (1UL << 8), /* Trap Flag */
+ EFLAGS_IF = (1UL << 9), /* Interrupt Enable Flag */
+ EFLAGS_DF = (1UL << 10), /* Direction Flag */
+ EFLAGS_OF = (1UL << 11), /* Overflow Flag */
+ EFLAGS_NT = (1UL << 14), /* Nested Task */
+ EFLAGS_RF = (1UL << 16), /* Resume Flag */
+ EFLAGS_VM = (1UL << 17), /* Virtual-8086 Mode */
+ EFLAGS_AC = (1UL << 18), /* Alignment Check */
+ EFLAGS_VIF = (1UL << 19), /* Virtual Interrupt Flag */
+ EFLAGS_VIP = (1UL << 20), /* Virtual Interrupt Pending */
+ EFLAGS_ID = (1UL << 21), /* ID Flag */
+};
+
+struct cpu_registers {
+ uint32_t eax;
+ uint32_t ebx;
+ uint32_t ecx;
+ uint32_t edx;
+ uint32_t esp;
+ uint32_t ebp;
+ uint32_t esi;
+ uint32_t edi;
+ uint32_t eip;
+ uint32_t eflags;
+};
+
+struct cpu {
+ struct cpu_registers regs;
+};
+
+#endif /* KVM__CPU_H */
--- /dev/null
+#include "kvm/cpu.h"
+
+#include <stdlib.h>
+#include <fcntl.h>
+
+static void die(const char *s)
+{
+ perror(s);
+ exit(1);
+}
+
+static void cpu__reset(struct cpu *self)
+{
+ self->regs.eip = 0x000fff0UL;
+ self->regs.eflags = 0x0000002UL;
+}
+
+static struct cpu *cpu__new(void)
+{
+ return calloc(1, sizeof(struct cpu));
+}
+
+int main(int argc, char *argv[])
+{
+ struct cpu *cpu;
+ int fd;
+
+ fd = open("/dev/kvm", O_RDWR);
+ if (fd < 0)
+ die("open");
+
+ cpu = cpu__new();
+
+ cpu__reset(cpu);
+
+ return 0;
+}