2
0
Эх сурвалжийг харах

Adapted inline assembly code

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@8074 8c9fc860-2736-0410-a75d-ab315db34111
negelef 7 жил өмнө
parent
commit
e5b44c88ee

+ 8 - 4
source/AMD64.UsbKeyboard.Mod

@@ -368,9 +368,11 @@ VAR
 (* TableUS - US keyboard translation table (dead keys: ^=1, '=2, `=3, ~=4, "=5) *)
 (* TableUS - US keyboard translation table (dead keys: ^=1, '=2, `=3, ~=4, "=5) *)
 PROCEDURE TableUS*(): ADDRESS;
 PROCEDURE TableUS*(): ADDRESS;
 CODE {SYSTEM.AMD64}
 CODE {SYSTEM.AMD64}
-	LEA RAX, [RIP + L2 - L1];
+	CALL L1
 L1:
 L1:
-	LEAVE
+	POP RAX
+	ADD RAX, L2 - L1
+	POP RBP
 	RET
 	RET
 L2:
 L2:
 		; alphabet
 		; alphabet
@@ -456,9 +458,11 @@ END TableUS;
 (* maps USB usage ID's to Oberon character code *)
 (* maps USB usage ID's to Oberon character code *)
 PROCEDURE UsbScanTab*() : ADDRESS;
 PROCEDURE UsbScanTab*() : ADDRESS;
 CODE {SYSTEM.AMD64}
 CODE {SYSTEM.AMD64}
-	LEA RAX, [RIP + L2 - L1];
+	CALL L1
 L1:
 L1:
-	LEAVE
+	POP EAX
+	ADD EAX, L2 - L1
+	POP EBP
 	RET
 	RET
 L2:
 L2:
 	; Keyboard table stolen from Linux Usb keyboard driver, and corrected for Oberon
 	; 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
 	CALL L1
 L1:
 L1:
 	POP EAX
 	POP EAX
-	ADD EAX,8
+	ADD EAX, L2 - L1
 	POP EBP
 	POP EBP
 	RET
 	RET
+L2:
 		; alphabet
 		; alphabet
 	DB 1EH, 'a', 'A', 4H,	30H, 'b', 'B', 4H,	2EH, 'c', 'C', 4H,	20H, 'd', 'D', 4H
 	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
 	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
 	CALL L1
 L1:
 L1:
 	POP EAX
 	POP EAX
-	ADD EAX,8
+	ADD EAX, L2 - L1
 	POP EBP
 	POP EBP
 	RET
 	RET
+L2:
 	; Keyboard table stolen from Linux Usb keyboard driver, and corrected for Oberon
 	; 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 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
 	DB 050, 049, 024, 025, 016, 019, 031, 020, 022, 047, 017, 045, 021 ,044, 002, 003