void writecmos(u8 reg,u8 val) { u8 ifstate=((getcpuflags()&CPU_FLAGS_IF)!=0); if(ifstate)disable_int(); int org=inb(0x70); outb(0x70,(org&0b10000000)|(reg&0b01111111)); outb(0x71,val); if(ifstate)enable_int(); }
u8 readcmos(u8 reg) { u8 ifstate=((getcpuflags()&CPU_FLAGS_IF)!=0); if(ifstate)disable_int(); int org=inb(0x70); outb(0x70,(org&0b10000000)|(reg&0b01111111)); u8 ret=inb(0x71); if(ifstate)enable_int(); return ret; }
int main() { int family; struct cpuflags flags; if(!getcpuflags(&flags)){ printf("CPU won't do cpuid (some old i386 or i486)\n"); return 0; } family = (flags.id & 0xf00)>>8; printf("family: %i\n", family); printf("stdcpuflags: 0x%08x\n", flags.std); printf("std2cpuflags: 0x%08x\n", flags.std2); printf("extcpuflags: 0x%08x\n", flags.ext); if(cpu_i586(flags)) { printf("A i586 or better cpu with:"); if(cpu_mmx(flags)) printf(" mmx"); if(cpu_3dnow(flags)) printf(" 3dnow"); if(cpu_3dnowext(flags)) printf(" 3dnowext"); if(cpu_sse(flags)) printf(" sse"); if(cpu_sse2(flags)) printf(" sse2"); if(cpu_sse3(flags)) printf(" sse3"); printf("\n"); } else printf("I guess you have some i486\n"); return 0; }