begin process at 2012 05 24 05:34:26
  Trouver un code source :
 
dans
 

27 commentaire(s) de sajaris sur des sources sur asmfr

Déposé sur Torito loader & isoemul

bonjour,

je voulais signaler que mes erreurs ont disparu, c'etais en fait a cause d'adresse mal gerer (je mettais des [] qui donne la valeur alors que je voulais utiliser les adresses a ces emplacement).

Donc tout va bien, quand j'acrive les inteeruption apres initilaistation des PIC et IDT, aucun plantage.

Maintneant l'interruption clavier ne donne pas et l'horloge ne semble pas fonctionner.


Posté le : 17/06/2008 12:19:55

Déposé sur Torito loader & isoemul

salut,

cela fait un bail. je reviens avec un probleme que je rencontre depuis 3 semaine avec mon passage en mode protege et l'initialisation de mon IDT. franchement je bute. j'ai tester toutes les combinaison possibles.

je donne le code et je le detaille pour etre mieu compris:

***************************  LE BOOT: ****************************

jmp start:


gdt:
db 0,0,0,0,0,0,0,0

gdt_cs:
db 0xFF,0xFF,0h,0h,0h,10011011b,11011111b,0h ;type=11 pous cs

gdt_ds:
db 0xFF,0xFF,0h,0h,0h,10010011b,11011111b,0h ;type=3 pour ds

gdt_ss:
db 0xFF,0xFF,0h,0h,0h,10010111b,11011111b,0h ;type=7 pour ss

gdt_end:

gdt_ptr:
dw 0000h
dd 0


start:
PRINT_TXT kerLoadLabel ;on affiche chargement de kernel

;---------------------initialisation de la structure de la GDT(limite,base)
;----Calcul de la Limite de la GDT
mov ax,gdt_end
mov bx,gdt
sub ax,bx
mov word[gdt_ptr],ax

;-------calcul de la base de la GDT segment*16 + offs
xor eax,eax ;init reg 32 bit
xor ebx,ebx
mov ax,ds ;recuperation du seg en decimal
shl eax,4 ;seg*16
mov bx,gdt
add eax,ebx
mov dword[gdt_ptr+2],eax

;--------------FIN DE LA FABRICATION DE LA GDT---
cli

lgdt [gdt_ptr]


;passage en mode protegé. Il faut mettre le bit 1 du registre cr0 a 1
mov eax,cr0
or ax,1
mov cr0,eax

jmp 08h:2000h;saut vers la memoire ou le nouyau a ete charger


voila c'est finit pour le boot, j'espere avoir bien commenté. jusque la ca va pour le boot, je le donne au cas ou vous avez d'autres suggestion, ou si je m'y suis mal pris. au passage je dirai que j'initialisait les segment ds,es,... avec leur adresse selecteur (10h) avant le saut vers le noyau, mais ce n'est pas indispensable car ca marche apres dans le kernel meme si je ne le fait pas(ce n''est pas indispensable car dans le kernel je refais tout)

On passe au noyau(que j'appel kernel).

**************************** NOYAU 32 BITS *********************
[BITS 32] ; instruction sur 32 bit
[org 0x2000] ; offset de depart

jmp start
%define IDTBASE 0h
%define GDTBASE 800h

%define INT_FLAG 0x8E
%define TRAP_FLAG 0x8F
%define COM_FLAG 0x80

%include "utils/pic.inc" ; initilaise le PIC.
%include "utils/macro.inc" ; pour utilisit la fonction gateInit

;initiazlise les selecteur apres saut a partir du boot
start:
mov ax,10h ; la gdt_ds
mov ds,ax
mov es,ax
mov fs,ax
mov gs,ax

cli ; on desactive tout
;
;-------initialisation de la structure de la GDT(limite,base)
;----Calcul de la Limite de la nouvelle GDT
mov ax,gdtmp_end
mov bx,gdtmp
sub ax,bx
mov word[gdtmp_ptr],ax
xor ecx,ecx

;-------base de la GDT
mov ecx,dword[GDTBASE]
mov dword[gdtmp_ptr+2],ecx


;--------------TRANSFERT GDT (on copie gdtmp a GDTBASE)
xor ecx,ecx
mov cx,word[gdtmp_ptr]
xor esi,esi
xor edi,edi
lea si,[gdtmp]
lea di,[GDTBASE]
rep movsb

lgdt [gdtmp_ptr]; on charge la GDT

jmp 08h:next1 ; petit saut d'initialisation

next1:
mov ax,10h ;
mov ds,ax
mov es,ax
mov fs,ax
mov gs,ax

;---------------initialisation de la structure de la IDT(limite,base)
;----Calcul de la Limite de la IDT
mov ax,800h ; je reserve l'espace pour les 256 interruption
mov word[idt_ptr],ax ; j'ai l'impression que ca plante ici.car si je met un jmp $ avant cette instrtuction, il n'y pas plantage
xor ecx,ecx

;-------base de la IDT
mov ecx,[IDTBASE]
mov dword[idt_ptr+2],ecx

;---------------TRANSFERT IDT
xor ecx,ecx
mov cx,word[idt_ptr]
xor esi,esi
xor edi,edi
lea si,[idt]
lea di,[IDTBASE]
rep movsb

lidt [idt_ptr]; on charge l'IDT

initPIC ; appel de la fonction initPIC contenu dans le fichier pic.inc ci dessous
gateInit 8h,interrupt,INT_FLAG,0,IDTBASE+8h*112 ; appel de la fonction gateInit definti dans le fic

sti
ker:
mov byte[0xB8002],'E'
mov byte[0xB8003],57h
mov byte[0xB8004],'L'
mov byte[0xB8005],57h
mov byte[0xB8006],'L'
mov byte[0xB8007],57h
mov byte[0xB8008],'O'
mov byte[0xB8009],57h

mov byte[0xB800A],' '
mov byte[0xB800B],57h

mov byte[0xB800C],'W'
mov byte[0xB800D],57h
mov byte[0xB800E],'O'
mov byte[0xB800F],57h
mov byte[0xB8010],'R'
mov byte[0xB8011],57h
mov byte[0xB8012],'L'
mov byte[0xB8013],57h
mov byte[0xB8014],'D'
mov byte[0xB8015],57h

jmp $


;-------------LES DONNEES UTILISEES
gdtmp:
db 0,0,0,0,0,0,0,0

gdtmp_cs:
db 0xFF,0xFF,0h,0h,0h,10011011b,11011111b,0h ;type=11 pous cs

gdtmp_ds:
db 0xFF,0xFF,0h,0h,0h,10010011b,11011111b,0h ;type=3 pour ds

gdtmp_ss:
db 0xFF,0xFF,0h,0h,0h,10010111b,11011111b,0h ;type=7 pour ss

gdtmp_end:

gdtmp_ptr:
dw 0000h
dd 0

;---------------------- IDT
idt:
times 256 dw 0,0,0,0
idt_end:

idt_ptr:
dw 0000h
dd 0h


interrupt: ; utiliser pour initialiser les interruption

mov al,20h
out 20h,al
iret

************************** INITAILISATIOn DU PIC APPELELE DANS LE KERNEL ***********

%macro initPic 0
;---MAITRE
;-----Initilaise le maitre
mov al,11
out 20h,al
jmp .1
.1
;------La base des interruptions. Ici 32=20h. On laisse en fait 32 interruption exception
mov al,20h
out 21h,al
jmp .2
.2
mov al,04h
out 21h,al
jmp .3
.3
mov al,1h
out 21h,al
jmp .4
.4
mov al,0h
out 21h,al

;---SLAVE
;-----Initilaise l'esclave
mov al,11
out 0A0h,al
jmp .5
.5
;------La base des interruptions. Ici 112=70h. On laisse en fait 112 interruption exception
mov al,70h
out 0A1h,al
jmp .6
.6
mov al,02h
out 0A1h,al
jmp .7
.7
mov al,1h
out 0A1h,al
jmp .8
.8
mov al,0FFh
out 0A1h,al

;masquage des IRQ
mov al,0h
out 21h,al
%endmacro

********************GATEINIT: FONCTION D'INITIALISATION DE LA IDT ***************

%macro gateInit 5 ;selecteur(16), offset(32),type(8), wx(5/8), adresse(32)
push eax
;selecteur
mov word[%5+2],%1
;offset
mov eax,%2
mov word[%5],ax
shr eax,16
mov word[%5+6],ax
;type
mov byte[%5+5],%3
;wc
mov byte[%5+4],%4
and byte[%5+4],00011111b

pop eax
%endmacro


******************************         FIN        ********************

Bon voila ce que je n'ai pas fait ou fait:
--->je n'ai pas initilaiser toutes les interruptions
---> j'ai d'abord initlisaer la GDT apvant l'IDT


Voila, si vous pouvez me donner mes erreurs et comment bien procéder pour gerer les interruption.


MERCI
Posté le : 12/06/2008 18:45:50

Déposé sur Torito loader & isoemul

salut patatalo, cel fiat deux jours ;)

Encore une fois tu fais des merveilles, moi je pietine sur la table d'interruption apres passage en mode bios, je sais pas trop comment refaire ma table ou plutot j'en ai fait mais qui ne marche pas (alors j'ai pas su bien faire)

Mais cool pour toi. je demanderai encore de tes services, je continue de chercher d'abord(bah oui il faut d'abord soufrir pour trouver soi meme) si je n'aaarive pas alors je te pince ;)

A toute!
Posté le : 01/05/2008 20:50:15

Déposé sur Torito loader & isoemul

Edfed rien n'est impossible, mais c'est vraiment refaire plein de routines, tu sais, mais pourquoi pas! le coté intéressant de la chose c'est de se familiarisé avec la basse couche total et comprendre plein de truc actuel.

Au fait patatalo, j'ai compris les macros que tu as envoyé, et c'est bon j'arrive à reperer mes données sur le CD-rom, en fait j'interprétais mal la constitution des répertoires. Je sais pas que la déclaration d'un enregistrement de répertoire se faisait dans son repertoire parent et AUSSI que chaque répertoire n'est jamais vide mais avait au moins un repertoire parent et courant
Posté le : 15/03/2008 16:20:25

Déposé sur Torito loader & isoemul

PATALTALO:"<ici, http://www.singlix.com/trdos/specs.html tu trouveras plein de trucs interessant et notement le fichier IntroductionToIso9660.pdf>"

je l'ai parcouru, juste une chose, c'est un MUST, merci vraiment PATATALO. sans blague, j'ai vraiment appris en moins d'un mois beaucoup avec toi.

Courage et continue dans cette lancée.

j'espere pouvoir construire quelque LIVE CD  plus tard avec toi, pour l'instant j'avance bien.
Posté le : 13/03/2008 13:24:01

Déposé sur Torito loader & isoemul

SAlut, bah je sais pas quoi dire de plus sinon merci humblement a toi.  

Au fait une précision. J'avais dit dans un un post plus haut, que le chargement de mon noyau ne marchait pas, et avec une erreur. et en changeant la memoire de chargement (segment et offset) tout etait rentré dans l'ordre. Hé bien en fait je gravais mon image produit sur cd-rom, et la gravure se faisait mal en fait (mon graveur etait HS mais le gravage marquait avec succes!!), en fait tout marchait depuis longtemps pour le chargement du noyau. j'utilise maintenant VMWare.

Je sais pas comment tu trouve des infos sur tout ceci, mais tu les trouve en tout cas.
voici un autre site (que tu connais déjà je crois) sur les spécifications usb,plug n play et autres. le site de phoenix:http://www.phoenix.com/en/Customer+Services/White+Papers-Specs/PC+Industry+Specifications.htm

Merci en tout cas, j'ai de quoi ne pas m'ennuyer pendant plusieurs temps.

J'ai telecharger et utiliser ton image ca marche parfaitement ,je vais essayer de comprendre maintenant. ;)
Posté le : 13/03/2008 09:33:46

Déposé sur Torito loader & isoemul

Content de ton retour!!!
je me demandais effectivment ou t'etais passé !!!

DOMMAGE QUE TU ES OUBLIE TA CLE USB !!   j'attends impatiemment ces scripts, impatiemment !!!!

Merci pour cette précision pour les accès mémoires !
Posté le : 12/03/2008 09:38:49

Déposé sur Torito loader & isoemul

re:
salut,

bon maintenant ca va , tout marche bien.en fait j'ai juste changer l'adresse memoire de chargement dans le dap, avant j'utilisait 0100:0 et lorsque j'ai changer a 0:1000 (en rensignant les bon champ de mon DAP) tout a marcher, le kernel est charger en memoire. je pensais que 0100h:0h et 0:1000h pointait sur la meme zone, donc il ne devait pas y avoir de probleme, bah je comprend pas trop, mais avec la perseverance on arrive a tout, jamais baiiser les bras.

En tout cas merci PATATALO, tu a ete une source d'inspiration et j'ai reussi a faire un mini-os bootable sur CD avec 5 commandes test (reboot,clrscr,..) et tout ceci a base de ton tuto.merci bien
Posté le : 11/03/2008 09:07:02

Déposé sur Torito loader & isoemul

j'ai finalement capturé la sortie de l'erreur qui se trouve dans AH en cas d'erreur de lecture.

Losrque j'affiche le numero de l'erreur et je me referre a sa signification (sur google) voici ce que je trouve, que ce soit avec ton projet ou avec ma fonction de lecture:

incorrect drive type stored in CMOS (Compaq)

Posté le : 08/03/2008 13:15:21

Déposé sur Torito loader & isoemul

Re:
j'ai regardé de plus pres ta fonction.  je crois avoir compris, mais le mien ne marche toujours pas.
En somme:
avant l'appel de ta fonction: tu tu sauvegarde les parametres nbrsec,seg,lbahi,lbalo,lecteur dans la pile.
puis tu prepare la zone pous la strucutre dap dans la pile (sub sp,16)

Ensuite tu lie le un secteur a partir du secteur 16 (sur le disque ca corresponde au primary volume).
tu essai la lecture au moins 5 fois (push byte 5). si ca marchhe toujours pas tu sort avec un message d'erreur. sinon tu continue la lecture en verifiant de ne pas depasser la taille d'un segment.

Si j'essai de comprendre ton xint13, c'etait en fait pour voir ou MOI j'ai cloché, le eprom fait au moins 9k0 (environs 5 secteur de cd). Mon kernel ne fait que 86octet(un test). alors je charge juste un secteur.

bah merci d'avoir essayé en tout cas.
Posté le : 08/03/2008 12:45:10

1 2 3


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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,796 sec (4)

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