Webové stránky K5
Články zobrazeny celkem: 1257057x  
Nabídka
Úvod
Přehled
K5
Masakr
Tipy
Odkazy
Vyhledávání

Reklama

Pentium Internal Cache Enable / Disable program Tisk E-mail
Hodnocení čtenářů: / 0
SlabéVynikající 
Napsal K5   
Monday, 24. December 2007
V roce 2003 jsem řešil problém, jak umožnit spouštění starých DOSových servisních programů pro ústředny ESSER na tehdy moderních noteboocích s procesory, které byly 10x rychlejší, než programy předpokládaly a tudíž nefungovaly. Firma ESSER tou dobou už zhruba 8 let slibovala, že servisní programy budou i pro Windows. Ale sliby chyby a skutek utek. Nezbylo než napsat program, který vypnul cache a procesor tím drasticky zpomalil. S vypnutou cache CPU staré DOSové programy fungovaly sice pomalu, ale za to spolehlivě.

Kdysi velmi dávno (na začátku devadesátých let minulého století), jsem s nástupem procesorů Intel 80x486 řešil stejný problém: procesor byl příliš rychlý pro některé staré programy. V DEBUGu jsem tehdy napsal kraťounký program, který vypínal write-through cache. Nic jsem v něm nekontroloval, protože write-back cache tehdy ještě neexistovala. Ovšem v roce 2003 už bylo zapotřebí typ procesoru zkontrolovat, aby program nezpůsobil vytuhnutí počítače. Program jsem tedy napsal v assembleru x86 a zkompiloval ho programem NASM (příkazem: nasm wbiced.asm -o WBICED.COM). Použití bylo prosté program se v operačním systému MS DOS 6.22 (případně DOSu 7.x) spustil buď bez parametru nebo s jakýmkoli parametrem. V jednom případě cache vypnul ve druhém pro změnu zapnul. Zapnutí keše podle všeho nefungovalo úplně dobře, záleželo na typu notebooku, někdy bylo nutné notebook rebootovat, aby se zapnutí keše "projevilo".

; Pentium Internal Cache Enable / Disable
; wbiced.asm (write back internal cache enable/disable)
; 31-Jan-2003 initial release
; 30-Jul-2003 v1.0
; (c) 2003, K5

	ORG	0100H

CMDL	EQU	0080H

START:
	PUSHF			; save the flags
	PUSH    EAX		; save eax
	MOV	DX,TXT1		; text to display
	MOV	AH,09H		; func: display text
	INT	21H		; call DOS service
	MOV	EAX,0		; id
	CPUID
	MOV	DX,TXT4		; text to display
	CMP	EAX,00000000h	; <486wb+pentium 1
	JE	EXIT
	PUSH    EAX		; save eax
	MOV	DX,TXT5		; text to display
	MOV	AH,09H		; func: display text
	INT	21H		; call DOS service
	POP	EAX		; restore eax
	MOV	DX,TXT6		; text to display
	CMP	EAX,00000001h	; 486+pentium 1
	JE	DSPLID
	MOV	DX,TXT7		; text to display
	CMP	EAX,00000002h	; pentium pro
	JE	DSPLID
	MOV	DX,TXT8		; text to display
	CMP	EAX,00000003h	; unknown cpu
	JE	DSPLID
	MOV	DX,TXT9		; text to display
DSPLID:
	MOV	AH,09H		; func: display text
	INT	21H		; call DOS service

	CLI			; disable interrupts while we do this
	MOV	EAX,CR0		; read CR0
	MOV	AH,[CMDL]	; check command-line parameter
	OR	AH,AH		; not present=disable
	JZ	DIS		; is present=enable
	OR      EAX,9FFFFFFFh	; set Cache and Write-through Enable bits of CR0
	MOV	CR0,EAX		; cache is now enabled
	MOV	DX,TXT2		; text to display
	JMP	EXIT
DIS:
	OR      EAX,40000000h	; set Cache Disable but not Write-through bit of CR0
	MOV	CR0,EAX		; cache is now disabled
	WBINVD			; flush and invalidate cache
	MOV	EAX,CR0		; read CR0
	OR	EAX,20000000h	; now set the Write-through bit
	MOV     CR0,EAX         ; turn off the cache entirely
	MOV	DX,TXT3		; text to display
EXIT:
	STI			; enable interrupts
	MOV	AH,09H		; func: display text
	INT	21H		; call DOS service
	POP	EAX		; restore eax
	POPF			; restore the flags
	MOV	AX,4C00H	; return to caller with errcode 0
	INT	21H		; DOS service
TXT1:	DB 'Enable/Disable write-back internal cache (C) 2003, K5',13,10,'$',0
TXT2:	DB 'Your Pentium class CPU is running its native speed',13,10,'$',0
TXT3:	DB 'Your Pentium class CPU does not run faster than 286',13,10,'$',0
TXT4:	DB 'Your CPU is not Pentium class, program does nothing',13,10,'$',0
TXT5:	DB 'Type of detected CPU: $',0
TXT6:	DB '2',13,10,'$',0
TXT7:	DB '2',13,10,'$',0
TXT8:	DB '3',13,10,'$',0
TXT9:	DB '>3',13,10,'$',0
 
< Předch.   Další >

Google

Reklama

Nahlédněte
Futurama
BSG
MAME
SORD M5
VMware
Total Commander
ALIX a m0n0wall
Cisco PIX
Nejnovější
Nejčtenější
Viz též
   Úvod arrow K5 arrow Taxem zase jednou něco dělal arrow Pentium Internal Cache Enable / Disable program
Powered by Joomla!