begin process at 2008 07 20 23:35:39
1 213 521 membres
422 nouveaux aujourd'hui
14 167 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

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

Le : 17/06/2008 12:19:55
Source : 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.




Le : 12/06/2008 18:45:50
Source : 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


Le : 01/05/2008 20:50:15
Source : 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!


Le : 15/03/2008 16:20:25
Source : 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


Le : 13/03/2008 13:24:01
Source : 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.


Le : 13/03/2008 09:33:46
Source : 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. ;)


Le : 12/03/2008 09:38:49
Source : 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 !


Le : 11/03/2008 09:07:02
Source : 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


Le : 08/03/2008 13:15:21
Source : 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)



Le : 08/03/2008 12:45:10
Source : 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.



[ Page 1 Page 2 Page 3 ]

Pub



Appels d'offres

Dessins techniques
Budget : 60€
Animation Flash - Doma...
Budget : 370€
Application flash medi...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Boutique

Boutique de goodies CodeS-SourceS