Re: Software Interrupt aufrufen

From: Bernd Walter <ticso(at)cicely12.cicely.de>
Date: Fri, 11 Feb 2005 00:41:21 +0100

On Thu, Feb 10, 2005 at 11:50:56PM +0100, Marc Santhoff wrote:
> Am Do, den 10.02.2005 schrieb Bernd Walter um 14:51:
> > On Thu, Feb 10, 2005 at 02:13:06PM +0100, Marc Santhoff wrote:
> > OK - sollte wenig Ärger machen.
> > Wobei sich die Frage stellt, ob man nicht auch anders dran kommt.
> > Letzlich ist das BIOS auch nur Software die einen Hardwarezugriff
> > macht.
>
> Versuche ich gerade rauszufinden, es gibt sonst nur noch eine Linux-lib
> mit vorkompiliern .o's ... im höchstens Fall könnte man dageben linken,
> so wie es im Treiber für die OnBoard-Netzwerkkarte des nVidia-Chipsatzes
> gemacht wird (müßte port/net/nvnet sein).
>
> Aber wo ich das hier schreibe fällt mir ein: lohnt sich ein Versuch,
> einfach ein Linux-binary gegen diese lib zu linken und im "Emulator"
> laufen zu lassen? Der Treiber ist immer noch für den kernel, das könnte
> Probleme geben ...

Keine Ahnung, ob sowas vom Linux Support unterstützt wird.

> > > > Im Kernel gibt es dafür die vm86_intcall() Funktion und im Userland
> > > > die i386_vm86().
> > >
> > > Die Userlandfunktion habe ich gefunden (reicht auch, soll so gemacht
> > > werden), die andere hat ausnahmsweise keine manpage.
> > >
> > > Aber nun ist mir natürlich erstmal unklar, wie ich die benutze. Gibt es
> > > eine beispielhafte Quelle, die ich mir anschauen kann (auch im kernel,
> > > wenn's ähnlich genug ist)?
> >
> > Leider nicht - bislang noch nicht gebraucht.
> > Das vesa Modul nutzt wohl die Kernel Variante, aber ob man das
> > übertragen kann...
>
> Das ist schade. Weißt Du, wen man danach fragen kann? Meine Kenntnisse
> den FreeBSD-kernel betreffend sind leider nicht ausreichend.
>
> Die Quelle sagt: "Copyright (c) 1998 Jonathan Lemon" und die manpage ist
> auch von ihm ... ach ja:
>
> $FreeBSD: src/lib/libc/i386/sys/i386_vm86.c,v 1.3 1999/09/02 21:03:32
> luoqi Exp $
>
> Nur 'ne E-Mail Adresse fehlt dann noch.

Einfach den commiter @freebsd.org.
Falls du nur den Realname hast hilft mitunter finger name(at)freebsd.org,
da der finger auch ins gecos Feld schaut.

doscmd scheint das benutzt zu haben.

Aber ich kann das jetzt nicht so richtig nachvollziehen wo dein Problem
liegt.
Die i386_vm86(2) Manpage ist doch ziemlich gut verständlich.
Du machst einen VM86_INIT und kannst danach VM86_INTCALL aufrufen.
VM86_INIT dürfte eine gesetzte int_map bekommen und VM86_INTCALL bekommt
die Interruptnummer, sowie die CPU Registerinhalte im vm86frame.
In letzterem bekommst du dann auch dein Ergebniss zurück.
Welche Registerwerte du brauchst ist dir ja schon bekannt.
Prüfen der Returnwerte nicht vergessen!
Im Zweifelsfall beim doscmd nachschauen.

-- 
B.Walter                   BWCT                http://www.bwct.de
bernd(at)bwct.de                                  info(at)bwct.de
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Fri 11 Feb 2005 - 00:43:08 CET

search this site