Browse Source

Adapted inline assembly code

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@8074 8c9fc860-2736-0410-a75d-ab315db34111
negelef 7 năm trước cách đây
mục cha
commit
e5b44c88ee
2 tập tin đã thay đổi với 12 bổ sung6 xóa
  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