about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--boot.subx54
1 files changed, 27 insertions, 27 deletions
diff --git a/boot.subx b/boot.subx
index 4e651910..3e428f0f 100644
--- a/boot.subx
+++ b/boot.subx
@@ -369,41 +369,41 @@ keyboard-interrupt-handler:
     # return
     eb/jump $keyboard-interrupt-handler:epilogue/disp8
   }
-== data
   # - convert key to character
   # if (shift) use keyboard shift map
-  81  # operate on rm32 and imm32
-    3d  # 00/mod/indirect 111/subop/compare 101/rm32/use-disp32
-    10 80 00 00  # disp32 = shift [label]
-    00 00 00 00  # imm32
-  74 08  # jump to $7 if = [label]
-  # al <- *(keyboard shift map + eax)
-  8a  # copy m8 at rm32 to r8
-    80  # 10/mod/*+disp32 000/r8/al 000/rm32/eax
-    00 87 00 00  # disp32 [label]
-  eb 1a  # jump to $8 [label]
-# 2a8:
-# $7:
+  {
+    81 7/subop/compare *Keyboard-shift-pressed? 0/imm32
+    74/jump-if-= break/disp8
+== data
+    # al <- *(keyboard shift map + eax)
+#?       8a/byte-> *(eax+Keyboard-shift-map) 0/r32/al
+    8a  # copy m8 at rm32 to r8
+      80  # 10/mod/*+disp32 000/r8/al 000/rm32/eax
+      00 87 00 00  # disp32 [label]
+== code
+    eb/jump $keyboard-interrupt-handler:select-map-done/disp8
+  }
   # if (ctrl) use keyboard ctrl map
-  81  # operate on rm32 and imm32
-    3d  # 00/mod/indirect 111/subop/compare 101/rm32/use-disp32
-    14 80 00 00  # disp32 = ctrl [label]
-    00 00 00 00  # imm32
-  74 08  # jump to $8 if = [label]
-  # al <- *(keyboard ctrl map + eax)
-  8a  # copy m8 at rm32 to r8
-    80  # 10/mod/*+disp32 000/r8/al 000/rm32/eax
-    00 88 00 00  # disp32 [label]
-  eb 06  # jump to $9 [label]
-# 2bc:
-# $8:
+  {
+    81 7/subop/compare *Keyboard-ctrl-pressed? 0/imm32
+    74/jump-if-= break/disp8
+== data
+    # al <- *(keyboard ctrl map + eax)
+#?     8a/byte-> *(eax+Keyboard-shift-map) 0/r32/al
+    8a  # copy m8 at rm32 to r8
+      80  # 10/mod/*+disp32 000/r8/al 000/rm32/eax
+      00 88 00 00  # disp32 [label]
+== code
+    eb/jump $keyboard-interrupt-handler:select-map-done/disp8
+  }
+== data
   # otherwise use keyboard normal map
   # al <- *(keyboard normal map + eax)
+#?   8a/byte-> *(eax+Keyboard-normal-map) 0/r32/al
   8a  # copy m8 at rm32 to r8
     80  # 10/mod/*+disp32 000/r8/al 000/rm32/eax
     00 86 00 00  # disp32 [label]
-# 2c2:
-# $9:
+$keyboard-interrupt-handler:select-map-done:
   # - if there's no character mapping, return
   3c 00  # compare al, 0
   74 13  # jump to epilogue if = [label]