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

Improved register restoring in cooperative case

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@8312 8c9fc860-2736-0410-a75d-ab315db34111
negelef 7 жил өмнө
parent
commit
b82aaf24c6
1 өөрчлөгдсөн 97 нэмэгдсэн , 45 устгасан
  1. 97 45
      source/VMWareTools.Mod

+ 97 - 45
source/VMWareTools.Mod

@@ -34,18 +34,20 @@ PROCEDURE -ReadMouse() : LONGINT;
 CODE
 #IF I386 THEN
 	MOV EAX, 564D5868H
-	PUSH ECX
+	#IF COOP THEN
+		MOV ESI, ECX
+	#END
 	MOV ECX, 4
 	MOV DX, 5658H
 	IN EAX, DX;
-	POP ECX
+	#IF COOP THEN
+		MOV ECX, ESI
+	#END
 #ELSIF AMD64 THEN
 	MOV EAX, 564D5868H
-	PUSH RCX
 	MOV ECX, 4
 	MOV DX, 5658H
 	IN EAX, DX;
-	POP RCX
 #ELSE
 	unimplemented
 #END
@@ -56,19 +58,27 @@ CODE
 #IF I386 THEN
 	MOV EAX, 564D5868H
 	POP EBX
-	PUSH ECX
+	#IF COOP THEN
+		MOV ESI, ECX
+	#END
 	MOV ECX, 5
 	MOV DX, 5658H
 	OUT DX, EAX;
-	POP ECX
+	#IF COOP THEN
+		MOV ECX, ESI
+	#END
 #ELSIF AMD64 THEN
 	MOV EAX, 564D5868H
+	#IF COOP THEN
+		MOV RSI, RBX
+	#END
 	POP EBX
-	PUSH RCX
 	MOV ECX, 5
 	MOV DX, 5658H
 	OUT DX, EAX;
-	POP RCX
+	#IF COOP THEN
+		MOV RBX, RSI
+	#END
 #ELSE
 	unimplemented
 #END
@@ -79,19 +89,27 @@ CODE
 #IF I386 THEN
 	MOV EAX, 564D5868H
 	POP EBX
-	PUSH ECX
+	#IF COOP THEN
+		MOV ESI, ECX
+	#END
 	MOV ECX, 8
 	MOV DX, 5658H
 	OUT DX, EAX;
-	POP ECX
+	#IF COOP THEN
+		MOV ECX, ESI
+	#END
 #ELSIF AMD64 THEN
 	MOV EAX, 564D5868H
+	#IF COOP THEN
+		MOV RSI, RBX
+	#END
 	POP EBX
-	PUSH RCX
 	MOV ECX, 8
 	MOV DX, 5658H
 	OUT DX, EAX;
-	POP RCX
+	#IF COOP THEN
+		MOV RBX, RSI
+	#END
 #ELSE
 	unimplemented
 #END
@@ -102,19 +120,27 @@ CODE
 #IF I386 THEN
 	MOV EAX, 564D5868H
 	POP EBX
-	PUSH ECX
+	#IF COOP THEN
+		MOV ESI, ECX
+	#END
 	MOV ECX, 9
 	MOV DX, 5658H
 	OUT DX, EAX;
-	POP ECX
+	#IF COOP THEN
+		MOV ECX, ESI
+	#END
 #ELSIF AMD64 THEN
 	MOV EAX, 564D5868H
+	#IF COOP THEN
+		MOV RSI, RBX
+	#END
 	POP EBX
-	PUSH RCX
 	MOV ECX, 9
 	MOV DX, 5658H
 	OUT DX, EAX;
-	POP RCX
+	#IF COOP THEN
+		MOV RBX, RSI
+	#END
 #ELSE
 	unimplemented
 #END
@@ -124,18 +150,20 @@ PROCEDURE -ReceiveLength() : LONGINT;
 CODE
 #IF I386 THEN
 	MOV EAX, 564D5868H
-	PUSH ECX
+	#IF COOP THEN
+		MOV ESI, ECX
+	#END
 	MOV ECX, 6
 	MOV DX, 5658H
 	IN EAX, DX;
-	POP ECX
+	#IF COOP THEN
+		MOV ECX, ESI
+	#END
 #ELSIF AMD64 THEN
 	MOV EAX, 564D5868H
-	PUSH RCX
 	MOV ECX, 6
 	MOV DX, 5658H
 	IN EAX, DX;
-	POP RCX
 #ELSE
 	unimplemented
 #END
@@ -145,18 +173,20 @@ PROCEDURE -Receive4Chars() : LONGINT;
 CODE
 #IF I386 THEN
 	MOV EAX, 564D5868H
-	PUSH ECX
+	#IF COOP THEN
+		MOV ESI, ECX
+	#END
 	MOV ECX, 7
 	MOV DX, 5658H
 	IN EAX, DX
-	POP ECX
+	#IF COOP THEN
+		MOV ECX, ESI
+	#END
 #ELSIF AMD64 THEN
 	MOV EAX, 564D5868H
-	PUSH RCX
 	MOV ECX, 7
 	MOV DX, 5658H
 	IN EAX, DX
-	POP RCX
 #ELSE
 	unimplemented
 #END
@@ -166,18 +196,20 @@ PROCEDURE -GetVirtualHWVersion() : LONGINT;
 CODE
 #IF I386 THEN
 	MOV EAX, 564D5868H
-	PUSH ECX
+	#IF COOP THEN
+		MOV ESI, ECX
+	#END
 	MOV ECX, 11H
 	MOV DX, 5658H
 	IN EAX, DX
-	POP ECX
+	#IF COOP THEN
+		MOV ECX, ESI
+	#END
 #ELSIF AMD64 THEN
 	MOV EAX, 564D5868H
-	PUSH RCX
 	MOV ECX, 11H
 	MOV DX, 5658H
 	IN EAX, DX
-	POP RCX
 #ELSE
 	unimplemented
 #END
@@ -187,20 +219,22 @@ PROCEDURE -GetVMWareVersion() : LONGINT;
 CODE
 #IF I386 THEN
 	MOV EAX, 564D5868H
-	PUSH ECX
+	#IF COOP THEN
+		MOV ESI, ECX
+	#END
 	MOV ECX, 0AH
 	MOV DX, 5658H
 	IN EAX, DX
 	MOV EAX, ECX
-	POP ECX
+	#IF COOP THEN
+		MOV ECX, ESI
+	#END
 #ELSIF AMD64 THEN
 	MOV EAX, 564D5868H
-	PUSH RCX
 	MOV ECX, 0AH
 	MOV DX, 5658H
 	IN EAX, DX
 	MOV EAX, ECX
-	POP RCX
 #ELSE
 	unimplemented
 #END
@@ -212,21 +246,29 @@ CODE
 #IF I386 THEN
 	MOV EAX, 564D5868H
 	POP EBX
-	PUSH ECX
+	#IF COOP THEN
+		MOV ESI, ECX
+	#END
 	MOV ECX, 0BH
 	MOV DX, 5658H
 	IN EAX, DX
 	MOV EAX, EBX
-	POP ECX
+	#IF COOP THEN
+		MOV ECX, ESI
+	#END
 #ELSIF AMD64 THEN
 	MOV EAX, 564D5868H
+	#IF COOP THEN
+		MOV RSI, RBX
+	#END
 	POP EBX
-	PUSH RCX
 	MOV ECX, 0BH
 	MOV DX, 5658H
 	IN EAX, DX
 	MOV EAX, EBX
-	POP RCX
+	#IF COOP THEN
+		MOV RBX, RSI
+	#END
 #ELSE
 	unimplemented
 #END
@@ -238,20 +280,28 @@ CODE
 #IF I386 THEN
 	MOV EAX, 564D5868H
 	POP EBX
-	PUSH ECX
+	#IF COOP THEN
+		MOV ESI, ECX
+	#END
 	MOV ECX, 0EX
 	MOV DX, 5658H
 	OUT DX, EAX;
-	POP ECX
+	#IF COOP THEN
+		MOV ECX, ESI
+	#END
 #ELSIF AMD64 THEN
 	MOV EAX, 564D5868H
+	#IF COOP THEN
+		MOV RSI, RBX
+	#END
 	POP EBX
-	PUSH RCX
 	MOV ECX, 0EX
 	MOV DX, 5658H
 	OUT DX, EAX;
-	POP RCX
-#ELSE
+	#IF COOP THEN
+		MOV RBX, RSI
+	#END
+##ELSE
 	unimplemented
 #END
 END SetGUIOptions;
@@ -260,18 +310,20 @@ PROCEDURE -GetGUIOptions(): SET;
 CODE
 #IF I386 THEN
 	MOV EAX, 564D5868H
-	PUSH ECX
+	#IF COOP THEN
+		MOV ESI, ECX
+	#END
 	MOV ECX, 0DX
 	MOV DX, 5658H
 	IN EAX, DX;
-	POP ECX
+	#IF COOP THEN
+		MOV ECX, ESI
+	#END
 #ELSIF AMD64 THEN
 	MOV EAX, 564D5868H
-	PUSH RCX
 	MOV ECX, 0DX
 	MOV DX, 5658H
 	IN EAX, DX;
-	POP RCX
 #ELSE
 	unimplemented
 #END