PCem

view src/cpu.h @ 150:871b132c6158

Implemented CR4 register for Winchip. Currently only Time Stamp Disable (TSD) has an effect. Fixed stupid bug in WRMSR - MSRs can now be written with values other than zero.
author TomW
date Sat Aug 23 16:28:16 2014 +0100
parents 923b243eba54
children
line source
1 extern int cpu, cpu_manufacturer;
3 /*808x class CPUs*/
4 #define CPU_8088 0
5 #define CPU_8086 1
7 /*286 class CPUs*/
8 #define CPU_286 2
10 /*386 class CPUs*/
11 #define CPU_386SX 3
12 #define CPU_386DX 4
13 #define CPU_486SLC 5
14 #define CPU_486DLC 6
16 /*486 class CPUs*/
17 #define CPU_i486SX 7
18 #define CPU_Am486SX 8
19 #define CPU_Cx486S 9
20 #define CPU_i486DX 10
21 #define CPU_Am486DX 11
22 #define CPU_Cx486DX 12
23 #define CPU_Cx5x86 13
25 /*586 class CPUs*/
26 #define CPU_WINCHIP 14
28 #define MANU_INTEL 0
29 #define MANU_AMD 1
30 #define MANU_CYRIX 2
31 #define MANU_IDT 3
33 extern int timing_rr;
34 extern int timing_mr, timing_mrl;
35 extern int timing_rm, timing_rml;
36 extern int timing_mm, timing_mml;
37 extern int timing_bt, timing_bnt;
41 typedef struct
42 {
43 char name[16];
44 int cpu_type;
45 int speed;
46 int rspeed;
47 int multi;
48 uint32_t edx_reset;
49 uint32_t cpuid_model;
50 uint16_t cyrix_id;
51 } CPU;
53 extern CPU cpus_8088[];
54 extern CPU cpus_8086[];
55 extern CPU cpus_286[];
56 extern CPU cpus_i386[];
57 extern CPU cpus_Am386[];
58 extern CPU cpus_486SDLC[];
59 extern CPU cpus_i486[];
60 extern CPU cpus_Am486[];
61 extern CPU cpus_Cx486[];
62 extern CPU cpus_WinChip[];
64 extern CPU cpus_pcjr[];
65 extern CPU cpus_pc1512[];
66 extern CPU cpus_ibmat[];
67 extern CPU cpus_acer[];
69 extern int cpu_iscyrix;
70 extern int cpu_16bitbus;
71 extern int cpu_busspeed;
72 extern int cpu_multi;
74 extern int cpu_hasrdtsc;
75 extern int cpu_hasMSR;
76 extern int cpu_hasMMX;
77 extern int cpu_hasCR4;
79 #define CR4_TSD (1 << 2)
80 #define CR4_DE (1 << 3)
81 #define CR4_MCE (1 << 6)
82 #define CR4_PCE (1 << 8)
84 extern uint64_t cpu_CR4_mask;
86 extern uint64_t tsc;
88 void cyrix_write(uint16_t addr, uint8_t val, void *priv);
89 uint8_t cyrix_read(uint16_t addr, void *priv);
91 extern int is8086;
93 void cpu_RDMSR();
94 void cpu_WRMSR();