[Vm-dev] [commit][3442] Get the BochsX64Plugin' s processor into 64-bit mode in resetCPU

commits at squeakvm.org commits at squeakvm.org
Mon Sep 21 17:49:53 UTC 2015


Revision: 3442
Author:   eliot
Date:     2015-09-21 10:49:53 -0700 (Mon, 21 Sep 2015)
Log Message:
-----------
Get the BochsX64Plugin's processor into 64-bit mode in resetCPU

Modified Paths:
--------------
    trunk/platforms/Cross/plugins/BochsX64Plugin/BochsX64Plugin.h
    trunk/platforms/Cross/plugins/BochsX64Plugin/sqBochsX64Plugin.cpp

Property Changed:
----------------
    trunk/platforms/Cross/plugins/sqPluginsSCCSVersion.h

Modified: trunk/platforms/Cross/plugins/BochsX64Plugin/BochsX64Plugin.h
===================================================================
--- trunk/platforms/Cross/plugins/BochsX64Plugin/BochsX64Plugin.h	2015-09-21 17:48:54 UTC (rev 3441)
+++ trunk/platforms/Cross/plugins/BochsX64Plugin/BochsX64Plugin.h	2015-09-21 17:49:53 UTC (rev 3442)
@@ -8,6 +8,7 @@
 #define PanicError 4
 #define UnsupportedOperationError 5
 #define SomethingLoggedError 6
+#define InitializationError 7
 
 #if !defined(ulong)
 typedef unsigned long ulong;

Modified: trunk/platforms/Cross/plugins/BochsX64Plugin/sqBochsX64Plugin.cpp
===================================================================
--- trunk/platforms/Cross/plugins/BochsX64Plugin/sqBochsX64Plugin.cpp	2015-09-21 17:48:54 UTC (rev 3441)
+++ trunk/platforms/Cross/plugins/BochsX64Plugin/sqBochsX64Plugin.cpp	2015-09-21 17:49:53 UTC (rev 3442)
@@ -61,7 +61,6 @@
 		blidx = 0;
 #define RESET_FROM_COG BX_RESET_HARDWARE + 1
 		bx_cpu.reset(RESET_FROM_COG);
-		bx_cpu.SetCR0(0x80000001); // Enter protected mode
 		// Origin the code, data & stack segments at 0
 		bx_cpu.parse_selector(0x0000,&bx_cpu.sregs[BX_SEG_REG_CS].selector);
 		bx_cpu.sregs[BX_SEG_REG_CS].cache.u.segment.base  = 0;
@@ -99,7 +98,11 @@
 		bx_cpu.gen_reg[BX_64BIT_REG_R14].dword.erx = 0;
 		bx_cpu.gen_reg[BX_64BIT_REG_R15].dword.erx = 0;
 		bx_cpu.gen_reg[BX_64BIT_REG_RIP].dword.erx = 0;
-		return 0;
+		bx_cpu.efer.set_LMA(1); /* Hack.  The old version we use have doesn't support set_EFER */
+		bx_cpu.SetCR0(0x80000101); // Enter protected mode
+		return bx_cpu.cpu_mode == BX_MODE_LONG_64
+				? 0
+				: InitializationError;
 	}
 
 	int


Property changes on: trunk/platforms/Cross/plugins/sqPluginsSCCSVersion.h
___________________________________________________________________
Modified: checkindate
   - Thu Sep 17 17:27:20 PDT 2015
   + Mon Sep 21 10:49:22 PDT 2015



More information about the Vm-dev mailing list