فهرست منبع

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