瀏覽代碼

Adapted inline assembly code

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@8074 8c9fc860-2736-0410-a75d-ab315db34111
negelef 7 年之前
父節點
當前提交
e5b44c88ee
共有 2 個文件被更改,包括 12 次插入6 次删除
  1. 8 4
      source/AMD64.UsbKeyboard.Mod
  2. 4 2
      source/I386.UsbKeyboard.Mod

+ 8 - 4
source/AMD64.UsbKeyboard.Mod

@@ -368,9 +368,11 @@ VAR
 (* TableUS - US keyboard translation table (dead keys: ^=1, '=2, `=3, ~=4, "=5) *)
 PROCEDURE TableUS*(): ADDRESS;
 CODE {SYSTEM.AMD64}
-	LEA RAX, [RIP + L2 - L1];
+	CALL L1
 L1:
-	LEAVE
+	POP RAX
+	ADD RAX, L2 - L1
+	POP RBP
 	RET
 L2:
 		; alphabet
@@ -456,9 +458,11 @@ END TableUS;
 (* maps USB usage ID's to Oberon character code *)
 PROCEDURE UsbScanTab*() : ADDRESS;
 CODE {SYSTEM.AMD64}
-	LEA RAX, [RIP + L2 - L1];
+	CALL L1
 L1:
-	LEAVE
+	POP EAX
+	ADD EAX, L2 - L1
+	POP EBP
 	RET
 L2:
 	; Keyboard table stolen from Linux Usb keyboard driver, and corrected for Oberon

+ 4 - 2
source/I386.UsbKeyboard.Mod

@@ -371,9 +371,10 @@ CODE {SYSTEM.i386}
 	CALL L1
 L1:
 	POP EAX
-	ADD EAX,8
+	ADD EAX, L2 - L1
 	POP EBP
 	RET
+L2:
 		; alphabet
 	DB 1EH, 'a', 'A', 4H,	30H, 'b', 'B', 4H,	2EH, 'c', 'C', 4H,	20H, 'd', 'D', 4H
 	DB 12H, 'e', 'E', 4H,	21H, 'f', 'F', 4H,	22H, 'g', 'G', 4H,	23H, 'h', 'H', 4H
@@ -460,9 +461,10 @@ CODE {SYSTEM.i386}
 	CALL L1
 L1:
 	POP EAX
-	ADD EAX,8
+	ADD EAX, L2 - L1
 	POP EBP
 	RET
+L2:
 	; Keyboard table stolen from Linux Usb keyboard driver, and corrected for Oberon
 	DB 000, 000, 000, 000, 030, 048, 046, 032, 018, 033, 034, 035, 023, 036, 037, 038
 	DB 050, 049, 024, 025, 016, 019, 031, 020, 022, 047, 017, 045, 021 ,044, 002, 003