about summary refs log tree commit diff stats
path: root/boot.subx
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2021-03-28 08:32:15 -0700
committerKartik K. Agaram <vc@akkartik.com>2021-03-28 08:32:15 -0700
commita3a7ffe4da72a27954b25d385ceec28714719377 (patch)
tree1c9b2845e9ebead29dad35302d0f5b2cec20aa6d /boot.subx
parentdfda825e55439b6ab89e4715913ee749d4e27b80 (diff)
downloadmu-a3a7ffe4da72a27954b25d385ceec28714719377.tar.gz
.
Diffstat (limited to 'boot.subx')
-rw-r--r--boot.subx22
1 files changed, 20 insertions, 2 deletions
diff --git a/boot.subx b/boot.subx
index 21899dbc..06a9a426 100644
--- a/boot.subx
+++ b/boot.subx
@@ -258,8 +258,8 @@ idt_start:
 # By default, BIOS maps IRQ0-7 to interrupt vectors 8-15.
 # https://wiki.osdev.org/index.php?title=Interrupts&oldid=25102#Default_PC_Interrupt_Vector_Assignment
 
-# entry 8: clock
-  null-interrupt-handler/imm16  # target[0:16]
+# entry 8: https://wiki.osdev.org/Programmable_Interval_Timer
+  timer-interrupt-handler/imm16  # target[0:16]
   8/imm16  # segment selector (gdt_code)
   00  # unused
   8e  # 1/p 00/dpl 0 1110/type/32-bit-interrupt-gate
@@ -317,6 +317,24 @@ $null-interrupt-handler:epilogue:
   fb/enable-interrupts
   cf/return-from-interrupt
 
+timer-interrupt-handler:
+  # prologue
+  # Don't disable interrupts; the timer has the highest priority anyway,
+  # and this interrupt triggers extremely frequently.
+  fa/disable-interrupts
+  60/push-all-registers
+  9c/push-flags
+  # acknowledge interrupt
+  b0/copy-to-al 0x20/imm8
+  e6/write-al-into-port 0x20/imm8
+  31/xor %eax 0/r32/eax
+$timer-interrupt-handler:epilogue:
+  # epilogue
+  9d/pop-flags
+  61/pop-all-registers
+  fb/enable-interrupts
+  cf/return-from-interrupt
+
 keyboard-interrupt-handler:
   # prologue
   fa/disable-interrupts