begin process at 2010 03 20 11:17:47
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Systeme

 > SAUVEGARDE DU SETUP

SAUVEGARDE DU SETUP


 Information sur la source

Note :
Aucune note
Catégorie :Systeme Classé sous :cmos, setup, bios Niveau :Initié Date de création :05/04/2007 Date de mise à jour :06/04/2007 19:41:27 Vu :5 447

Auteur : Guilou34

Ecrire un message privé
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

Ce code lit la mémoire du circuit cmos,c'est à dire la mémoire où le setup du bios range la configuration du PC.
Un programme  est créé qui réécrira   ce contenu lors de son exécution.
ligne de commande:
scmos nomfichier
où "nomdefichier" peut être précédé d'un chemin.
Syntaxe de TASM, version pour Nasm si demandee
  

Source

  • code segment
  • assume cs:code; ds:code
  • org 256
  • debut: jmp start
  • mov ax,cs
  • mov ds,ax
  • mov si,offset cram
  • mov cx,112 ; taille mémoire cmos moins les 16 premiers octets (real time clock etc)
  • mov bl,10h
  • ici:
  • mov al,bl
  • out 70h,al
  • nop
  • nop
  • nop
  • lodsb
  • out 71h,al
  • inc bl
  • loop ici
  • mov ax,4c00h
  • int 21h
  • cram db 112 dup(?)
  • ;fin
  • oui db 0
  • usage db " usage: scmos nomfichier"
  • db 10,13,'$'
  • usage2 db "nonfichier eventuellement précédé du chemin,mais sans extension, "
  • db 10,13,'$'
  • er_s db " Erreur syntaxe ligne de commande$"
  • er_exist db "Ce fichier existe deja$"
  • er_ecriture db " Erreur d'ecriture$ "
  • er_create db "Impossible de creer le fichier$"
  • nom db 32 dup (?)
  • path db 32 dup (?)
  • com db '.com',0
  • start: ; lecture de ram cmos dans cram
  • mov di,offset cram
  • mov cx,112 ; taille mémoire cmos moins les 16 premiers octets (real time clock etc)
  • mov bl,10h
  • boucle:
  • mov al,bl
  • out 70h,al
  • nop
  • nop
  • nop
  • in al,71h
  • stosb
  • inc bl
  • loop boucle
  • ; extraction du nom dans la ligne de commande
  • mov si,80h
  • lodsb
  • cmp al,2
  • ja dofile
  • mov dx,offset usage
  • mov ah,9
  • int 21h
  • mov dx,offset usage2
  • mov ah,9
  • int 21h
  • jmp exit
  • syntaxe:mov dx,offset er_s
  • jmp erreur
  • dofile:
  • mov di,offset nom
  • nom0: lodsb
  • cmp al,' '
  • jz nom0
  • stosb
  • nom1: ; on ajoute l'extension ".com",0
  • lodsb
  • cmp al, 13
  • jz nomdone
  • cmp al,' '
  • jz nomdone
  • cmp al,'.'
  • jz syntaxe
  • stosb
  • jmp nom1
  • nomdone:
  • mov si, offset com
  • mov cx,5
  • l: movsb
  • loop l
  • xor al,al
  • stosb
  • fini:
  • ; on remplace jmp start par 3 nop
  • mov al,90h
  • mov di,offset debut
  • stosb
  • mov ah,90h
  • stosw
  • mov ah,3dh ; open file
  • mov al,3
  • mov dx, offset nom
  • int 21h
  • jc create
  • mov dx,offset er_exist
  • jmp erreur
  • create:
  • mov ah,3ch
  • int 21h
  • jnc ecriture
  • mov dx,offset er_create
  • jmp erreur
  • ecriture:
  • push ax
  • mov bx,ax
  • mov dx,offset debut
  • mov cx,offset oui
  • sub cx,dx
  • mov ah ,40h ;write
  • int 21h
  • mov dx,offset er_ecriture
  • jc erreur
  • pop bx
  • mov ah,3eh ; close
  • int 21h
  • exit:
  • mov ax,4c00h
  • int 21h
  • erreur:
  • mov ah,9
  • int 21h
  • jmp exit
  • code ends
  • end debut
	code	 segment
	assume	 cs:code; ds:code
	org	 256
debut: 	jmp start
        mov ax,cs
        mov ds,ax
	mov si,offset cram
	mov cx,112   ; taille mémoire cmos moins les 16 premiers octets (real time clock etc) 
	mov bl,10h  
ici:
	mov al,bl
	out 70h,al
	nop
	nop
	nop
	lodsb
	out 71h,al
	inc bl
	loop ici
	mov ax,4c00h
	int 21h	

cram	 db 112 dup(?)
;fin
oui db 0

usage		db " usage: scmos  nomfichier"
		db  10,13,'$'
usage2	 	db "nonfichier eventuellement précédé du chemin,mais sans extension, "
		db 10,13,'$'
     
er_s	 	db " Erreur syntaxe ligne de commande$"
er_exist  	db "Ce fichier existe deja$"
er_ecriture	db " Erreur d'ecriture$ "
er_create 	db "Impossible de creer le fichier$"
nom 		db 32 dup (?)
path		 db 32 dup (?)
com	 	db '.com',0


start:	  ; lecture de ram cmos dans cram
	mov di,offset cram
	mov cx,112   ; taille mémoire cmos moins les 16 premiers octets (real time clock etc) 
	mov bl,10h  
boucle:
	mov al,bl
	out 70h,al
	nop
	nop
	nop
	in al,71h
	stosb
	inc bl
loop	 boucle
; extraction du nom dans la ligne de commande
	mov si,80h
	lodsb
	cmp al,2
	ja dofile
	mov dx,offset usage
	mov ah,9
	int 21h
 	 mov dx,offset usage2
	mov ah,9
	int 21h	
	jmp exit
syntaxe:mov  dx,offset er_s
	jmp erreur

 	
dofile:	
	mov di,offset nom
nom0:	lodsb
	cmp al,' '
	jz nom0 
 	stosb
nom1:	; on ajoute l'extension ".com",0
	lodsb
	cmp al, 13
	jz nomdone
  	cmp al,' '
	jz nomdone
	cmp al,'.'
	jz  syntaxe
	stosb
	jmp nom1
nomdone:
	mov si, offset com
	mov cx,5
l:	movsb
	loop l 
	
	xor al,al
	stosb
fini:		
; on remplace jmp start par 3 nop
	mov al,90h
	mov di,offset debut
	stosb
	mov ah,90h
	stosw
	mov ah,3dh ; open file
	mov al,3
	mov dx, offset nom
	int 21h
	jc create
	
	mov dx,offset er_exist
	jmp erreur 
create:
	mov ah,3ch
	int 21h
	jnc ecriture
	mov dx,offset er_create
	jmp erreur
ecriture:
	push ax
	mov bx,ax
	mov dx,offset debut
	mov cx,offset oui
	sub cx,dx
	mov ah ,40h ;write
	int 21h
	mov dx,offset er_ecriture
	jc erreur
	pop bx
	mov ah,3eh ; close 
	int 21h
exit:
mov	ax,4c00h
	int 21h
erreur:
	mov ah,9 
	int 21h
	jmp exit
	code ends
	end debut

 Conclusion

Outre son role de sauvegarde et de restitution, scmos peut aussi être utilisé pour passer d'un système à un autre. En effet c'est dans le cmos que le bios enregistre le périphérique à utiliser en premier lors du chargement du système.
Par exemple on charge msdos à partir d'une clef usb, en exécutant " scmos n=usb" le fichier usb.com est créé
Si on charge Windows Xp à partir d'un disque dur, scmos n=disque créera le fichier disque.com
Maintenant, quelque soit le système, l'exécution de usb.com ou de disque.com provoquera l'installation  du système se trouvant sur usb ou disque
C'est dans l'exécution d'uun fichier bat que réalise l'intéret de scmos: passage d'un système à un autre sans intervention de l'opérateurm


 Historique

06 avril 2007 19:41:27 :
CORRECTION: scmos a été conçu en mode tiny, il doit donc être relié avec l'option t tlink /t scmos , mais par précaution j'ai modifie la source en ajoutant ds=cs de sorte que l'exe est maintanant correct (j'utilise des fichiers bach et make et j'avais perdu de vue ce point,désolé.

 Sources de la même categorie

DÉPLACEMENT D'UN RÉCTANGLE ROUGE A L'AIDE DE LA SOURIS par KIMI1632
Source avec Zip SCHEDULEUR TEST par patatalo
Source avec Zip Source avec une capture LIVE CD OMF par patatalo
Source avec Zip "MORTIMER": UN HOBBY OS par bofur
Source avec Zip Source avec une capture LE SYSTÈME D'EXPLOITATION LOGRAM par steckdenis

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture LISTING DES PÉRIPHÉRIQUES PCI par _dune2_
Source avec Zip V86 HOOK BIOS/DOS par patatalo

Commentaires et avis

Commentaire de patatalo le 07/04/2007 00:55:55 administrateur CS

salut,



les cmos peuvent aller jusqu'a une taille de 1024 depuis au moins 2 ou 3 ans il me semble.

@++

Commentaire de Guilou34 le 16/04/2007 18:18:06

Exact, mais comment y accéder? L'instruction "out 70,al" masque les nmi si al >127. Pour accéder aux emplacements >127, certains bios demandent de modifier un bit dans un emplacement déterminé.
Et que dire à propos du ESCD?
Amicalement      

Commentaire de ToutEnMasm le 08/05/2007 09:17:24

Salut,
le dessablemblage d'un programme constructeur pour flasher le bios doit apporter la solution.
                 ToutEnMasm

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Interruption Bios ou Dos ? [ par Valmont ] Quand choisir d'utiliser une int Dos plutot que Bios et inversement qd il y a + ou - doublon, comme par ex. pour la lecture/ecriture de secteur sur un interruption du bios et du dos sous windows [ par eedy31 ] eedy31Salut a tous est ce que quelqu'un pourait m'aider car je ne sais pascomment faire pour utiliser les interruption du dos et du bios sous windows! interruption BIOS [ par project0 ] est ce quelqu un connais les interruptions BIOS qui arrete le systeme ( avec mise sous tension ) et celle qui permet un reboot ( redemarrage propre pa Probléme d'Affichage pour les chaines de caractères [ par HwW_Mb ] Salut les petits :-)A L'AIDE !!!!!!!!!!!!!j'ai programmé un Mini Os avec un secteur de démarrage et un noyau de 5 secteursmais je n'arrive pas à affic lire information du BIOS [ par Sogec ] J'ai un PC DellLorsque j'utilise :debug -d F000:b662je tombe sur le debut du n° de serie (sur 6 octets) du Pccomment faire pour creer un programme en le bios fonctionnement (prog) [ par chercheur de connaisance ] bonjour je voudrais savoir comment le bios traite les interruption l'idee est de pouvoir ou en cree moi meme ou encore m'en passer les sites ou les Lecture du code du bios [ par KATMAI666 ] Salut!! J'aimerais faire un programme pour lire le code du bios et le sauvegarder par la suite, le problème c'est que je ne sais pas de qu'elle manièr Serai t'il possible de faire démarer un systeme d'exploitation sans bios [ par nico20011caus ] Je voudrai faire un systeme d'exploitation sans prendre les interruption du bios sa serai tu possible? bios [ par Hardouz ] Salutestquil est possible de controller le BIOS a partir d'un prog assembleur ou bien le flasher ???merci BIOS [ par Hardouz ] Salut a tous lmondeestquil est possible de modifier le BIOS ? ( les parametres) si oui comment svp :) merci d'avance a tous ceux qui maide


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales