Archiv verlassen und diese Seite im Standarddesign anzeigen : interrupt
weis vieleicht jemat wie man eigene interrupts schreibt,
unzwar nur mit bios-funktionen?
mfg
Felix Kaiser
06.06.2003, 13:16
Welche Art Interrupt? Ein Interrupt ist nichts weiter wie eine Prozedur, deren Speicheradresse in der Interrupttabelle eingetragen ist und die entweder über den INT-Opcode (0xCD) aufgerufen wird (Software-Interrupt) oder durch einen Hardwareevent (Hardware-Interrupt).
Der einzige Unterschied zwischen einem Interruptaufruf und einem FAR-Call ist der, dass beim Interruptaufruf zusätzlich das Flagsregister auf dem Stack 'gerettet' wird.
einen software interrupt, den man mit den befehl 'int' aufruft
Felix Kaiser
06.06.2003, 22:19
Und wo genau liegt da nun dein Problem? Im RealMode ists ganz einfach, du trägst die 32-Bit Speicheradresse deines Interrupts einfach bei 0000:(Interrupt*4) ein und fertig. Dann kannst du den mit INT aufrufen. Deine muss lediglich mit einem IRET zurückspringen. Ansonsten kannst du die Routine wie eine übliche Prozedur gestalten.
das hilft mit noch nicht (ganz) weiter, irgend wo mus ja auch
noch das programm hin, dafür gibt es bestimmt auch ein
vorgeschreibener platz.
Felix Kaiser
08.06.2003, 02:37
Nein.
Wenn es dir um DOS geht, willst du wahrscheinlich ein "Terminate and Stay Resident" Programm schreiben. Also eins, das nach dem Beenden im Speicher liegen bleibt, TSR nennt man das. Dazu benutzt man int 21h/ah=31h.
Und hier was tolles, falls es dir um linux/x86 gehen sollte. (ich glaub nciht wirklich dran...)
http://www.phrack.org/phrack/59/p59-0x04.txt
Ne, denke nicht, er hat ja von BIOS Interrupts gesprochen. @manlay: Die kann man unter Linux nicht so ohne weiteres aufrufen, weil sie nur im Real Mode funktionieren. Allgemein isses sinnvoll, wenn man dazuschreibt welches OS man benutzt. :)
Jan Krüger
09.06.2003, 19:24
"Nur mit BIOS-Funktionen" deutet auf gar kein OS und Real Mode hin. Wer würde schließlich auf OS-Funktionen verzichten wollen, wenn welche da wären. :)
Bleibt die Frage, was hast du vor?
Da kein Betriebssystem da ist, ist es wirklich absolut egal, wo du deinen Interrupt-Handler hinpackst, solange du damit nicht irgendwelche Standard-Systemsachen des Real Modes überschreibst. Ich empfehle dir zum Nachschlagen ein Buch für Real Mode Assembler (z.B. Sven Letzel, Rene Meyer, MASM - der Makro-Assembler von Microsoft, ITP, 3-929821-78-8) oder eine PC-Referenz (die meistens auch etwas betriebssystemlastig ist...), wie etwa PC intern (hat's aber schon länger keine Neuauflage mehr von gegeben). Oder gleich ein Buch zum Thema "Betriebssysteme schreiben". Und vielleicht ein bisschen aus dem Quellcode eines freien Betriebssystems lernen...
Viel Spaß. ;)
Die BIOS Interrupts sind grösstenteils obsolete. Ich weiss ja nicht ob ihr das wusstet, aber die Hardwarespezifischen Sachen werden alle von neueren Betriebssystemen selbst übernommen. Interessant in der Hinsicht ist vielleicht www.linuxbios.org und www.openbios.info . Die sind auch in der Lage andere Betriebssysteme zu booten.. also nicht vom Namen fehlleiten lassen. Und dank dieser netten Projekte kann man den Bootvorgang, also bis das OS selbst am Anfang seiner Arbeit steht, auf weniger als 2sek verkürzen. Sorry aber wozu die alten BIOS Interrupts?
Original geschrieben von Baegsch
Die BIOS Interrupts sind grösstenteils obsolete. Ich weiss ja nicht ob ihr das wusstet, aber die Hardwarespezifischen Sachen werden alle von neueren Betriebssystemen selbst übernommen.
Ach was. Ich glaube das nennt man dann 'Treiber'.
Interessant in der Hinsicht ist vielleicht www.linuxbios.org und www.openbios.info . Die sind auch in der Lage andere Betriebssysteme zu booten.. also nicht vom Namen fehlleiten lassen. Und dank dieser netten Projekte kann man den Bootvorgang, also bis das OS selbst am Anfang seiner Arbeit steht, auf weniger als 2sek verkürzen. Sorry aber wozu die alten BIOS Interrupts?
Die von LinuxBIOS versuchen einen Linux Kernel im BIOS unterzubringen (und schaffen das anscheinend auch). Die BIOS-Funktionen wie int 13 müssen immer noch vorhanden sein, sonst könnte ein anderes OS gar nicht booten.
Wozu die BIOS Interrupts? Damit du erst mal erkennen kannst, welche Hardware da ist; Damit du im Real Mode den Bootloader laden kannst, usw. Der Platz im Bootsektor (512 Byte) reicht nicht, um auch nur einen primitivsten IDE-HD-Treiber unterzubringen.
Jan Krüger
20.06.2003, 19:50
Ich glaube, Baegsch meinte eher, dass die Bedeutung von BIOS-Interrupts während der Laufzeit des Betriebssystems an sich kaum noch eine Rolle spielen, womit er durchaus recht hat (abgesehen von so Späßen wie Laptop-APM und so...).
Ansonsten versteht es sich meines Erachtens von selbst, dass ein Computer mit Intel-Architektur (damit schließe ich andere Architekturen nicht explizit aus, aber ich kenne mich hauptsächlich mit der Intel-Architektur aus) ohne BIOS nicht viel ausrichten kann.
Liest sich aber irgendwie so, als ob er meint, es gibt jetzt LinuxBIOS, dadurch wird die Bootzeit von Betriebsystemen auf 2 Sekunden reduziert, und deshalb sind die alten BIOS-Funktionen jetzt überflüssig. :)
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.