Autor Thema: Eine ziemlich dumme Frage...  (Gelesen 6524 mal)

JG

  • Beiträge: 189
    • Profil anzeigen
Gespeichert
« am: 08. March 2005, 18:29 »
Hallo,
wie kann ichh sachen in die IDT schreiben, z.b was bei einem Fehler passiert?

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #1 am: 08. March 2005, 21:10 »
lies zuerst einmal das tutorial von tj und andere interrupt oder irq tutorials...

lies am besten gleich alle von tj... irgendwann brauchst du sie alle mal  :D

für meinen idt habe ich die tuts oder docs von osdever.net gebruacht..

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #2 am: 09. March 2005, 14:44 »
ja, die von OSDEVER.NET sind bei IDT praktisch. man klicke auf "tutorials" und dann auf "interrupts & IRQs"...
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

JG

  • Beiträge: 189
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 10. March 2005, 15:49 »
Hallo,
danke, aber dazu hab ich noch ne Frage: Wie/Wo trag ich dort ein, welche funktion aufgerufen werden soll, bzw kann ich dort überhaupt ne C funktion aufrufen?

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #4 am: 10. March 2005, 15:52 »
ich habe zum erstellen meines os quelltexte verschiedener os gelesen... und mich inspirieren lassen (dass heisst nicht abschreiben, oder copy past ;)) nur ideen sammeln..

in diesem sinne kannst sonst mal mein source downloaden und ihn anschauen, oder ander sourcecodes..

JG

  • Beiträge: 189
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 10. March 2005, 15:56 »
ne, ne abschreiben tu ich schon net, weil was hat man davon?

JG

  • Beiträge: 189
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 10. March 2005, 16:00 »
Nur eine Frage:
In welcher Datei ist das?

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #7 am: 10. March 2005, 16:05 »
du benötigst dazu pic.c isr.asm und idt.c

JG

  • Beiträge: 189
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 10. March 2005, 16:23 »
Danke! Hat mir sehr geholfen  :D
nur eine Frage hab ich noch, in der isr.asm steht doch
[global _isr_0]
[extern _interrupt_0]
_isr_0:

pusha
push ds
push es
push fs
push gs

call _interrupt_0

pop gs
pop fs
pop es
pop ds
popa
iret

In welcher Datei ist interrupt_0 und was heißt der Befehl "iret" ist das eine andere Form von "ret"?

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #9 am: 10. March 2005, 17:50 »
iret benutzt man, wenn man aus einem interrupt zurück kommt. da wird neben CS und offset auch eflags wieder geholt...
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

JG

  • Beiträge: 189
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 10. March 2005, 18:22 »
Danke und weiß das andere jemand?

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 10. March 2005, 18:44 »
Logisch wäre es, dass interrupt_0 in der c datei liegt...

JG

  • Beiträge: 189
    • Profil anzeigen
Gespeichert
« Antwort #12 am: 10. March 2005, 18:57 »
Hab ich mir auch gebacht, aber nix gefunden.
@zack: Ich glaub ich hab bei dir einen Fehler endeckt:
Ich sehe nirgendwo, dass du das EOI an die Pic's sendest...

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #13 am: 10. March 2005, 20:38 »
so, die routine ist in system.c da es eine exception ist... mann muss das eoi nur bei einem irq senden, nicht aber bei einem interrupt... soweit ich dass mitbekommen habe....

scrolle in der isr.asm ganz nach unten, dort send ich es.. ;)

JG

  • Beiträge: 189
    • Profil anzeigen
Gespeichert
« Antwort #14 am: 11. March 2005, 14:41 »
Ja, danke. Ich send das eoi über eine c Funktion. Wie teilt man der cpu mit wo die idt is?

JG

  • Beiträge: 189
    • Profil anzeigen
Gespeichert
« Antwort #15 am: 11. March 2005, 15:12 »
Ich hab trotzdem noch ein paar Fragen. ICh hab ja eine asm date, die z.b.

extern isr0
isr_0:

pusha
push ds
push es
push fs
push gs

call isr0

pop gs
pop fs
pop es
pop ds
popa
iret

enthält. Also wird ja die Funktion isr0 aufgerufen. dann noch eine c datei, die die isr0 enthält. nur was soll das "AddInterrupt" und so im Code von pirat-os?

JG

  • Beiträge: 189
    • Profil anzeigen
Gespeichert
« Antwort #16 am: 13. March 2005, 14:54 »
Kann mir keiner helfen?des mit der idt versteh ich ganz und gar nicht  :cry:

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #17 am: 14. March 2005, 08:35 »
dieser asm code von dir ist nich die idt sondern die isr.  dein pic ruft z.b bei einem tastaturevent den idt-eintrag an der 0x28 stelle auf (wenn du den pic so gemmapt hast) dann ist im idt die adresse von isr_0 gespeichert. diese routinge wiederum ruft dann isr0 im c auf.

AddInterrupt erstellt einen eintrag in der idt mit einem pointer auf einen isr-eintrag der gebraucht wird um eine c-funktion aufzurufen...

JG

  • Beiträge: 189
    • Profil anzeigen
Gespeichert
« Antwort #18 am: 15. March 2005, 18:45 »
ah, solangsam wird mir des klar  :D
Nur für was ist
unsigned short int selector = 0x08;
asm volatile ("movw %%cs, %0 " : "=g" (selector));

IDT[_number].l_offset = (offset & 0xFFFF); //Lowword of offset
IDT[_number].h_offset = (offset >> 16); //highword of offset

, das __attribute__ ((packed)) nach einer Struktur und IDTR.limit = (256*sizeof(interrupt))-1;
IDTR.base  = IDT;


idtr *IDTRptr = &IDTR;
aus der LoadIDT gut?

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #19 am: 16. March 2005, 23:25 »
1. damit kann ich den cs-selektor ausrechnen. nützlich wenn ich meinen zb mal meinen cs-selektor verschiebe (änderungen in der gdt).... anschliessend wird das doubleword in die zwei teile aufgeteillt

2. somit wird die struktur binär genau so abgelegt wie ich es will. ohne diese attribut könnte der compiler meine variablen verschieben..

3. sollte wohl selbst erklärend sein...

 

Einloggen