OSDN Git Service

[VM][GENERAL][I386_NP21] Merge upstream 2020-04-06.
authorK.Ohta <whatisthis.sowhat@gmail.com>
Fri, 26 Jun 2020 09:53:53 +0000 (18:53 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Fri, 26 Jun 2020 09:53:53 +0000 (18:53 +0900)
source/history.txt
source/revision.txt
source/src/res/credits.html
source/src/vm/common_vm/CMakeLists.txt
source/src/vm/i386_np21.cpp
source/src/vm/np21/i386c/ia32/cpu.cpp
source/src/vm/np21/i386c/ia32/cpu.h
source/src/vm/np21/i386c/ia32/ia32.cpp
source/src/vm/np21/i386c/ia32/instructions/misc_inst.cpp

index a2193fd..4e19bcc 100644 (file)
@@ -1,3 +1,8 @@
+4/6/2020
+
+[VM/I386_NP21] update to Neko Project 21/W ver0.86 rev72
+
+
 2/21/2020
 
 [VM/I386_NP21] update to Neko Project 21/W ver0.86 rev71 beta4
index b348c77..f43c1d3 100644 (file)
@@ -1,3 +1,3 @@
-<B><FONT SIZE=-1>Upstream 2020-02-21<BR>
-Qt Port and FM7 series 2020-03-03<BR>
+<B><FONT SIZE=-1>Upstream 2020-04-06<BR>
+Qt Port and FM7 series 2020-06-26<BR>
 </FONT></B>
index 70ac645..3614a97 100644 (file)
@@ -18,8 +18,8 @@
 </FONT>
 
 <DIV ALIGN=RIGHT><FONT SIZE=4>
-Upstream Version: 2020-02-21<BR>
-Qt Port and FM7 series 2020-03-03<BR>
+Upstream Version: 2020-04-06<BR>
+Qt Port and FM7 series 2020-06-26<BR>
 FFMPEG 4.2 + liblame 3.100 + libx264-158<BR>
 @@RevisionString@@
 </FONT></DIV>
index d9ddc76..d0c78c8 100644 (file)
@@ -1,6 +1,6 @@
 message("* vm/common_vm")
 
-SET(THIS_LIB_VERSION 2.29.1)
+SET(THIS_LIB_VERSION 2.29.2)
 
 #include(cotire)
 set(s_vm_common_vm_srcs
index 3a856eb..6385ecb 100644 (file)
@@ -66,6 +66,7 @@ void I386::reset()
 //             i386cpuid.cpu_feature = CPU_FEATURES_80386 | CPU_FEATURE_FPU; // 20200501 TMP K.O
                i386cpuid.cpu_feature_ex = CPU_FEATURES_EX_80386;
                i386cpuid.cpu_feature_ecx = CPU_FEATURES_ECX_80386;
+               i386cpuid.cpu_eflags_mask = CPU_EFLAGS_MASK_80386;
                i386cpuid.cpu_brandid = CPU_BRAND_ID_80386;
                strcpy(i386cpuid.cpu_vendor, CPU_VENDOR_INTEL);
                strcpy(i386cpuid.cpu_brandstring, CPU_BRAND_STRING_80386);
@@ -79,6 +80,7 @@ void I386::reset()
                i386cpuid.cpu_feature = CPU_FEATURES_I486SX | CPU_FEATURE_FPU;
                i386cpuid.cpu_feature_ex = CPU_FEATURES_EX_I486SX;
                i386cpuid.cpu_feature_ecx = CPU_FEATURES_ECX_I486SX;
+               i386cpuid.cpu_eflags_mask = CPU_EFLAGS_MASK_I486SX;
                i386cpuid.cpu_brandid = CPU_BRAND_ID_I486SX;
                strcpy(i386cpuid.cpu_vendor, CPU_VENDOR_INTEL);
                strcpy(i386cpuid.cpu_brandstring, CPU_BRAND_STRING_I486SX);
@@ -91,6 +93,7 @@ void I386::reset()
                i386cpuid.cpu_feature = CPU_FEATURES_I486DX;
                i386cpuid.cpu_feature_ex = CPU_FEATURES_EX_I486DX;
                i386cpuid.cpu_feature_ecx = CPU_FEATURES_ECX_I486DX;
+               i386cpuid.cpu_eflags_mask = CPU_EFLAGS_MASK_I486DX;
                i386cpuid.cpu_brandid = CPU_BRAND_ID_I486DX;
                strcpy(i386cpuid.cpu_vendor, CPU_VENDOR_INTEL);
                strcpy(i386cpuid.cpu_brandstring, CPU_BRAND_STRING_I486DX);
@@ -103,6 +106,7 @@ void I386::reset()
                i386cpuid.cpu_feature = CPU_FEATURES_PENTIUM;
                i386cpuid.cpu_feature_ex = CPU_FEATURES_EX_PENTIUM;
                i386cpuid.cpu_feature_ecx = CPU_FEATURES_ECX_PENTIUM;
+               i386cpuid.cpu_eflags_mask = CPU_EFLAGS_MASK_PENTIUM;
                i386cpuid.cpu_brandid = CPU_BRAND_ID_PENTIUM;
                strcpy(i386cpuid.cpu_vendor, CPU_VENDOR_INTEL);
                strcpy(i386cpuid.cpu_brandstring, CPU_BRAND_STRING_PENTIUM);
@@ -115,6 +119,7 @@ void I386::reset()
                i386cpuid.cpu_feature = CPU_FEATURES_MMX_PENTIUM;
                i386cpuid.cpu_feature_ex = CPU_FEATURES_EX_MMX_PENTIUM;
                i386cpuid.cpu_feature_ecx = CPU_FEATURES_ECX_MMX_PENTIUM;
+               i386cpuid.cpu_eflags_mask = CPU_EFLAGS_MASK_MMX_PENTIUM;
                i386cpuid.cpu_brandid = CPU_BRAND_ID_MMX_PENTIUM;
                strcpy(i386cpuid.cpu_vendor, CPU_VENDOR_INTEL);
                strcpy(i386cpuid.cpu_brandstring, CPU_BRAND_STRING_MMX_PENTIUM);
@@ -127,6 +132,7 @@ void I386::reset()
                i386cpuid.cpu_feature = CPU_FEATURES_PENTIUM_PRO;
                i386cpuid.cpu_feature_ex = CPU_FEATURES_EX_PENTIUM_PRO;
                i386cpuid.cpu_feature_ecx = CPU_FEATURES_ECX_PENTIUM_PRO;
+               i386cpuid.cpu_eflags_mask = CPU_EFLAGS_MASK_PENTIUM_PRO;
                i386cpuid.cpu_brandid = CPU_BRAND_ID_PENTIUM_PRO;
                strcpy(i386cpuid.cpu_vendor, CPU_VENDOR_INTEL);
                strcpy(i386cpuid.cpu_brandstring, CPU_BRAND_STRING_PENTIUM_PRO);
@@ -139,6 +145,7 @@ void I386::reset()
                i386cpuid.cpu_feature = CPU_FEATURES_PENTIUM_II;
                i386cpuid.cpu_feature_ex = CPU_FEATURES_EX_PENTIUM_II;
                i386cpuid.cpu_feature_ecx = CPU_FEATURES_ECX_PENTIUM_II;
+               i386cpuid.cpu_eflags_mask = CPU_EFLAGS_MASK_PENTIUM_II;
                i386cpuid.cpu_brandid = CPU_BRAND_ID_PENTIUM_II;
                strcpy(i386cpuid.cpu_vendor, CPU_VENDOR_INTEL);
                strcpy(i386cpuid.cpu_brandstring, CPU_BRAND_STRING_PENTIUM_II);
@@ -151,6 +158,7 @@ void I386::reset()
                i386cpuid.cpu_feature = CPU_FEATURES_PENTIUM_III;
                i386cpuid.cpu_feature_ex = CPU_FEATURES_EX_PENTIUM_III;
                i386cpuid.cpu_feature_ecx = CPU_FEATURES_ECX_PENTIUM_III;
+               i386cpuid.cpu_eflags_mask = CPU_EFLAGS_MASK_PENTIUM_III;
                i386cpuid.cpu_brandid = CPU_BRAND_ID_PENTIUM_III;
                strcpy(i386cpuid.cpu_vendor, CPU_VENDOR_INTEL);
                strcpy(i386cpuid.cpu_brandstring, CPU_BRAND_STRING_PENTIUM_III);
@@ -163,6 +171,7 @@ void I386::reset()
                i386cpuid.cpu_feature = CPU_FEATURES_PENTIUM_M;
                i386cpuid.cpu_feature_ex = CPU_FEATURES_EX_PENTIUM_M;
                i386cpuid.cpu_feature_ecx = CPU_FEATURES_ECX_PENTIUM_M;
+               i386cpuid.cpu_eflags_mask = CPU_EFLAGS_MASK_PENTIUM_M;
                i386cpuid.cpu_brandid = CPU_BRAND_ID_PENTIUM_M;
                strcpy(i386cpuid.cpu_vendor, CPU_VENDOR_INTEL);
                strcpy(i386cpuid.cpu_brandstring, CPU_BRAND_STRING_PENTIUM_M);
@@ -175,6 +184,7 @@ void I386::reset()
                i386cpuid.cpu_feature = CPU_FEATURES_PENTIUM_4;
                i386cpuid.cpu_feature_ex = CPU_FEATURES_EX_PENTIUM_4;
                i386cpuid.cpu_feature_ecx = CPU_FEATURES_ECX_PENTIUM_4;
+               i386cpuid.cpu_eflags_mask = CPU_EFLAGS_MASK_PENTIUM_4;
                i386cpuid.cpu_brandid = CPU_BRAND_ID_PENTIUM_4;
                strcpy(i386cpuid.cpu_vendor, CPU_VENDOR_INTEL);
                strcpy(i386cpuid.cpu_brandstring, CPU_BRAND_STRING_PENTIUM_4);
@@ -187,6 +197,7 @@ void I386::reset()
                i386cpuid.cpu_feature = CPU_FEATURES_AMD_K6_2;
                i386cpuid.cpu_feature_ex = CPU_FEATURES_EX_AMD_K6_2;
                i386cpuid.cpu_feature_ecx = CPU_FEATURES_ECX_AMD_K6_2;
+               i386cpuid.cpu_eflags_mask = CPU_EFLAGS_MASK_AMD_K6_2;
                i386cpuid.cpu_brandid = CPU_BRAND_ID_AMD_K6_2;
                strcpy(i386cpuid.cpu_vendor, CPU_VENDOR_AMD);
                strcpy(i386cpuid.cpu_brandstring, CPU_BRAND_STRING_AMD_K6_2);
@@ -199,6 +210,7 @@ void I386::reset()
                i386cpuid.cpu_feature = CPU_FEATURES_AMD_K6_III;
                i386cpuid.cpu_feature_ex = CPU_FEATURES_EX_AMD_K6_III;
                i386cpuid.cpu_feature_ecx = CPU_FEATURES_ECX_AMD_K6_III;
+               i386cpuid.cpu_eflags_mask = CPU_EFLAGS_MASK_AMD_K6_III;
                i386cpuid.cpu_brandid = CPU_BRAND_ID_AMD_K6_III;
                strcpy(i386cpuid.cpu_vendor, CPU_VENDOR_AMD);
                strcpy(i386cpuid.cpu_brandstring, CPU_BRAND_STRING_AMD_K6_III);
@@ -211,6 +223,7 @@ void I386::reset()
                i386cpuid.cpu_feature = CPU_FEATURES_AMD_K7_ATHLON;
                i386cpuid.cpu_feature_ex = CPU_FEATURES_EX_AMD_K7_ATHLON;
                i386cpuid.cpu_feature_ecx = CPU_FEATURES_ECX_AMD_K7_ATHLON;
+               i386cpuid.cpu_eflags_mask = CPU_EFLAGS_MASK_AMD_K7_ATHLON;
                i386cpuid.cpu_brandid = CPU_BRAND_ID_AMD_K7_ATHLON;
                strcpy(i386cpuid.cpu_vendor, CPU_VENDOR_AMD);
                strcpy(i386cpuid.cpu_brandstring, CPU_BRAND_STRING_AMD_K7_ATHLON);
@@ -223,6 +236,7 @@ void I386::reset()
                i386cpuid.cpu_feature = CPU_FEATURES_AMD_K7_ATHLON_XP;
                i386cpuid.cpu_feature_ex = CPU_FEATURES_EX_AMD_K7_ATHLON_XP;
                i386cpuid.cpu_feature_ecx = CPU_FEATURES_ECX_AMD_K7_ATHLON_XP;
+               i386cpuid.cpu_eflags_mask = CPU_EFLAGS_MASK_AMD_K7_ATHLON_XP;
                i386cpuid.cpu_brandid = CPU_BRAND_ID_AMD_K7_ATHLON_XP;
                strcpy(i386cpuid.cpu_vendor, CPU_VENDOR_AMD);
                strcpy(i386cpuid.cpu_brandstring, CPU_BRAND_STRING_AMD_K7_ATHLON_XP);
@@ -235,6 +249,7 @@ void I386::reset()
                i386cpuid.cpu_feature = CPU_FEATURES_ALL;
                i386cpuid.cpu_feature_ex = CPU_FEATURES_EX_ALL;
                i386cpuid.cpu_feature_ecx = CPU_FEATURES_ECX_ALL;
+               i386cpuid.cpu_eflags_mask = CPU_EFLAGS_MASK;
                i386cpuid.cpu_brandid = CPU_BRAND_ID_NEKOPRO2;
                strcpy(i386cpuid.cpu_vendor, CPU_VENDOR_NEKOPRO);
                strcpy(i386cpuid.cpu_brandstring, CPU_BRAND_STRING_NEKOPRO2);
index 726c1da..657596a 100644 (file)
@@ -833,7 +833,8 @@ cpucontinue:
                                                if(remclock_mul < 100000) {
                                                        latecount++;
                                                        if(latecount > +LATECOUNTER_THRESHOLD){
-                                                               if(pccore.multiple > 2){
+                                                               if(pccore.multiple > 4){
+                                                                       UINT32 oldmultiple = pccore.multiple;
                                                                        if(pccore.multiple > 40){
                                                                                pccore.multiple-=3;
                                                                        }else if(pccore.multiple > 20){
@@ -842,6 +843,7 @@ cpucontinue:
                                                                                pccore.multiple-=1;
                                                                        }
                                                                        pccore.realclock = pccore.baseclock * pccore.multiple;
+                                                                       nevent_changeclock(oldmultiple, pccore.multiple);
                
                                                                        sound_changeclock();
                                                                        beep_changeclock();
@@ -858,9 +860,10 @@ cpucontinue:
                                                        }
                                                }
                                                asynccpu_lateflag = 1;
+
+                                               CPU_REMCLOCK = 0;
+                                               break;
                                        }
-                                       CPU_REMCLOCK = 0;
-                                       break;
                                }else{
                                        if(!hltflag && !asynccpu_lateflag && g_nevent.item[NEVENT_FLAMES].proc==screendisp && g_nevent.item[NEVENT_FLAMES].clock <= CPU_BASECLOCK){
                                                //CPU_REMCLOCK = 10000;
@@ -869,8 +872,10 @@ cpucontinue:
                                                        latecount--;
                                                        if(latecount < -LATECOUNTER_THRESHOLDM){
                                                                if(pccore.multiple < pccore.maxmultiple){
+                                                                       UINT32 oldmultiple = pccore.multiple;
                                                                        pccore.multiple+=1;
                                                                        pccore.realclock = pccore.baseclock * pccore.multiple;
+                                                                       nevent_changeclock(oldmultiple, pccore.multiple);
                
                                                                        sound_changeclock();
                                                                        beep_changeclock();
index 0d0e36a..3c615ef 100644 (file)
@@ -532,7 +532,8 @@ typedef struct {
        char cpu_brandstring[64]; // ブランド名(48byte)
        UINT32 cpu_brandid; // ブランドID
        UINT32 cpu_feature_ecx; // ECX機能フラグ
-       UINT32 reserved[32]; // 将来の拡張のためにとりあえず32bit*32個用意しておく
+       UINT32 cpu_eflags_mask; // EFLAGSマスク(1のところがマスク状態)
+       UINT32 reserved[31]; // 将来の拡張のためにとりあえず32bit*31個用意しておく
        
        UINT8 fpu_type; // FPU種類
 } I386CPUID;
@@ -871,6 +872,25 @@ extern UINT32              codefetch_address;
 #define        CPU_FEATURES_ECX_AMD_K7_ATHLON_XP       (0)
 
 
+/* EFLAGS MASK */
+#define        CPU_EFLAGS_MASK_PENTIUM_4               (0)
+#define        CPU_EFLAGS_MASK_PENTIUM_M               (0)
+#define        CPU_EFLAGS_MASK_PENTIUM_III             (0)
+#define        CPU_EFLAGS_MASK_PENTIUM_II              (0)
+#define        CPU_EFLAGS_MASK_PENTIUM_PRO             (0)
+#define        CPU_EFLAGS_MASK_MMX_PENTIUM             (0)
+#define        CPU_EFLAGS_MASK_PENTIUM                 (0)
+#define        CPU_EFLAGS_MASK_I486DX                  (0)
+#define        CPU_EFLAGS_MASK_I486SX                  (0)
+#define        CPU_EFLAGS_MASK_80386                   ((1 << 18))
+#define        CPU_EFLAGS_MASK_80286                   ((1 << 18))
+
+#define        CPU_EFLAGS_MASK_AMD_K6_2                        (0)
+#define        CPU_EFLAGS_MASK_AMD_K6_III                      (0)
+#define        CPU_EFLAGS_MASK_AMD_K7_ATHLON           (0)
+#define        CPU_EFLAGS_MASK_AMD_K7_ATHLON_XP        (0)
+
+
 /* brand string */
 #define        CPU_BRAND_STRING_PENTIUM_4                      "Intel(R) Pentium(R) 4 CPU "
 #define        CPU_BRAND_STRING_PENTIUM_M                      "Intel(R) Pentium(R) M processor "
@@ -923,6 +943,7 @@ extern UINT32               codefetch_address;
 #define        CPU_FEATURES_ECX        CPU_FEATURES_ECX_PENTIUM_III
 #define        CPU_BRAND_STRING        CPU_BRAND_STRING_PENTIUM_III
 #define        CPU_BRAND_ID            CPU_BRAND_ID_PENTIUM_III
+#define        CPU_EFLAGS_MASK         CPU_EFLAGS_MASK_PENTIUM_III
 //#define      CPU_FAMILY                      CPU_PENTIUM_4_FAMILY
 //#define      CPU_MODEL                       CPU_PENTIUM_4_MODEL     /* Pentium 4 */
 //#define      CPU_STEPPING            CPU_PENTIUM_4_STEPPING
@@ -931,6 +952,7 @@ extern UINT32               codefetch_address;
 //#define      CPU_FEATURES_ECX        CPU_FEATURES_ECX_PENTIUM_4
 //#define      CPU_BRAND_STRING        CPU_BRAND_STRING_PENTIUM_4
 //#define      CPU_BRAND_ID            CPU_BRAND_ID_PENTIUM_4
+//#define      CPU_EFLAGS_MASK         CPU_EFLAGS_MASK_PENTIUM_4
 #elif defined(USE_SSE2)
 #define        CPU_FAMILY                      CPU_PENTIUM_III_FAMILY
 #define        CPU_MODEL                       CPU_PENTIUM_III_MODEL   /* Pentium III */
@@ -940,6 +962,7 @@ extern UINT32               codefetch_address;
 #define        CPU_FEATURES_ECX        CPU_FEATURES_ECX_PENTIUM_III
 #define        CPU_BRAND_STRING        CPU_BRAND_STRING_PENTIUM_III
 #define        CPU_BRAND_ID            CPU_BRAND_ID_PENTIUM_III
+#define        CPU_EFLAGS_MASK         CPU_EFLAGS_MASK_PENTIUM_III
 //#define      CPU_FAMILY                      CPU_PENTIUM_M_FAMILY
 //#define      CPU_MODEL                       CPU_PENTIUM_M_MODEL     /* Pentium M */
 //#define      CPU_STEPPING            CPU_PENTIUM_M_STEPPING
@@ -948,6 +971,7 @@ extern UINT32               codefetch_address;
 //#define      CPU_FEATURES_ECX        CPU_FEATURES_ECX_PENTIUM_M
 //#define      CPU_BRAND_STRING        CPU_BRAND_STRING_PENTIUM_M
 //#define      CPU_BRAND_ID            CPU_BRAND_ID_PENTIUM_M
+//#define      CPU_EFLAGS_MASK         CPU_EFLAGS_MASK_PENTIUM_M
 #elif defined(USE_SSE)
 #define        CPU_FAMILY                      CPU_PENTIUM_III_FAMILY
 #define        CPU_MODEL                       CPU_PENTIUM_III_MODEL   /* Pentium III */
@@ -957,6 +981,7 @@ extern UINT32               codefetch_address;
 #define        CPU_FEATURES_ECX        CPU_FEATURES_ECX_PENTIUM_III
 #define        CPU_BRAND_STRING        CPU_BRAND_STRING_PENTIUM_III
 #define        CPU_BRAND_ID            CPU_BRAND_ID_PENTIUM_III
+#define        CPU_EFLAGS_MASK         CPU_EFLAGS_MASK_PENTIUM_III
 #elif defined(USE_MMX)
 #define        CPU_FAMILY                      CPU_PENTIUM_II_FAMILY
 #define        CPU_MODEL                       CPU_PENTIUM_II_MODEL    /* Pentium II */
@@ -966,6 +991,7 @@ extern UINT32               codefetch_address;
 #define        CPU_FEATURES_ECX        CPU_FEATURES_ECX_PENTIUM_II
 #define        CPU_BRAND_STRING        CPU_BRAND_STRING_PENTIUM_II
 #define        CPU_BRAND_ID            CPU_BRAND_ID_PENTIUM_II
+#define        CPU_EFLAGS_MASK         CPU_EFLAGS_MASK_PENTIUM_II
 #else
 #define        CPU_FAMILY                      CPU_PENTIUM_FAMILY
 #define        CPU_MODEL                       CPU_PENTIUM_MODEL       /* Pentium */
@@ -975,6 +1001,7 @@ extern UINT32              codefetch_address;
 #define        CPU_FEATURES_ECX        CPU_FEATURES_ECX_PENTIUM
 #define        CPU_BRAND_STRING        CPU_BRAND_STRING_PENTIUM
 #define        CPU_BRAND_ID            CPU_BRAND_ID_PENTIUM
+#define        CPU_EFLAGS_MASK         CPU_EFLAGS_MASK_PENTIUM
 #endif
 #else
 #define        CPU_FAMILY                      CPU_I486SX_FAMILY
@@ -985,6 +1012,7 @@ extern UINT32              codefetch_address;
 #define        CPU_FEATURES_ECX        CPU_FEATURES_ECX_I486SX
 #define        CPU_BRAND_STRING        CPU_BRAND_STRING_I486SX
 #define        CPU_BRAND_ID            CPU_BRAND_ID_I486SX
+#define        CPU_EFLAGS_MASK         CPU_EFLAGS_MASK_I486SX
 #endif
 
 
index 114fcce..3983dc4 100644 (file)
@@ -33,7 +33,7 @@
 #endif
 
 I386CORE       i386core;
-I386CPUID      i386cpuid = {I386CPUID_VERSION, CPU_VENDOR, CPU_FAMILY, CPU_MODEL, CPU_STEPPING, CPU_FEATURES, CPU_FEATURES_EX, CPU_BRAND_STRING, CPU_BRAND_ID, CPU_FEATURES_ECX};
+I386CPUID      i386cpuid = {I386CPUID_VERSION, CPU_VENDOR, CPU_FAMILY, CPU_MODEL, CPU_STEPPING, CPU_FEATURES, CPU_FEATURES_EX, CPU_BRAND_STRING, CPU_BRAND_ID, CPU_FEATURES_ECX, CPU_EFLAGS_MASK};
 I386MSR                i386msr = {0};
 
 UINT8  *reg8_b20[0x100];
@@ -279,6 +279,7 @@ void CPUCALL set_eflags(UINT32 new_flags, UINT32 mask)
        mask &= I_FLAG|IOPL_FLAG|RF_FLAG|VM_FLAG|VIF_FLAG|VIP_FLAG;
        mask |= SZAPC_FLAG|T_FLAG|D_FLAG|O_FLAG|NT_FLAG;
        mask |= AC_FLAG|ID_FLAG;
+       mask &= ~i386cpuid.cpu_eflags_mask;
        modify_eflags(new_flags, mask);
 }
 
index 89fd04f..f6e0894 100644 (file)
@@ -122,10 +122,17 @@ _CPUID(void)
                break;
 
        case 2:
-               CPU_EAX = 0;
-               CPU_EBX = 0;
-               CPU_ECX = 0;
-               CPU_EDX = 0;
+               if(i386cpuid.cpu_family >= 6){
+                       CPU_EAX = 0x1;
+                       CPU_EBX = 0;
+                       CPU_ECX = 0;
+                       CPU_EDX = 0x43; // 512KB L2 Cache \82Ì\82Ó\82è
+               }else{
+                       CPU_EAX = 0;
+                       CPU_EBX = 0;
+                       CPU_ECX = 0;
+                       CPU_EDX = 0;
+               }
                break;
                
        case 0x80000000: