Forum: PC-Programmierung UART unter DOS


von Andreas (Gast)


Lesenswert?

Hallo Leute wisst Ihr vielleicht wie ich unter DOS eine Serielle
Schnittstelle in C anprechen kann ?
Wie das mit Interrupts gehandelt wird usw. ich habe bereits im Internet
gesucht aber mir ist das noch nicht so ganz klar...

von A.K. (Gast)


Lesenswert?

Such dir einen sogenannten FOSSIL Driver. Wurden damals für Modems unter
BBS Software benutzt und erledigte den ganze hässlichen Interrupt-Kram.
Sieht dem entsprechenden aber untauglichen BIOS-Interrupt recht
ähnlich.

von Wolfram (Gast)


Lesenswert?

>Hallo Leute wisst Ihr vielleicht wie ich unter DOS eine Serielle
>Schnittstelle in C anprechen kann

1. fopen
funktioniert auch unter windows/unix
nimm es wenn du einfach etwas übertragen willst

2. outp, inp
als Adresse die Adresse der seriellen Schnittstelle
dazu sollte man die Portbeschreibung des 16550 haben
funktioniert mit Sicherheit nicht in einem Programm unter Windows

3. int 14
zur Verwendung ist eine Interruptliste recht nützlich
verwendung unter windows fraglich

4. Falls dein "Dos" eine Windowsumgebung unter sich hat Createfile;
üblicher Weg in Windows seit mehr als 10 Jahren

Möglichkeit 2 und 3 kann man hervorragend dazu verwenden, um seine
Lernresistenz und totale Ablehnung neuerer Betriebssysteme zu
demonstrieren...

von Andreas (Gast)


Lesenswert?

Also ich habe einen kleinen embedded Rechner (ETX Board).
Darauf wollte ich MSDOS installieren und beim Start eine C-Routine
aufrufen,welche über die Serielle Schnittstelle Dateinamen von Bitmaps
empfängt und diese dann auf dem VGA (Monitor) ausgibt...

von Andreas (Gast)


Lesenswert?

Habe mir den FOSSIL Treiber angeschaut iss ganz cool das Teil... Damit
kann ich die Einstellungen unsw. machen damit dass Ding grundsätzlich
läuft, aber wie bekomm ich dann den Zugriff auf die Schnittstelle mit
einem C Progr.

von A.K. (Gast)


Lesenswert?

INT13.

von A.K. (Gast)


Lesenswert?

Sorry, 0x14 natürlich.

von Andreas (Gast)


Lesenswert?

kannst du mir das vllt. in ein kleines Beispiel verpacken ????
Ich habe bis jetzt nur Mikrocontroller programmiert.

sollte das etwa so aussehen:

_interrupt(0x14)
{

  DATEN ABHOLEN ;)

}

von A.K. (Gast)


Lesenswert?

Andersrum. Ein BIOS-Interrupt ist sowas ähnliches wie ein
Betriebssystem-Aufruf. Sieht also je nach Compiler sinngemäss ungefähr
so aus:

int
get_char(void)
{
    union REGS r;
    r.a.xx = 1;      // Parameter für den BIOS-Aufruf
    r.b.yy = 2;
    int(0x14, &r);   // hier wird das BIOS aufgerufen
    return r.c.zz;
}

Das sich der FOSSIL-Treiber als BIOS-Erweiterung tarnt, funktioniert
einfacher serieller Code sowohl mit als auch ohne FOSSIL.

von Andreas (Gast)


Lesenswert?

union REGS sind dann wohl die einstellungen für den UART und dass
Ergebniss steht dann in r.c.zz und hier jetzt ein Byte....? Welche
Headers braucht man hierzu ?

von Wolfram (Gast)


Lesenswert?

REGS sind die Maschinenregister (x86) und Parameter für den
Interruptaufruf. Da brauchst du keine Header sondern die
Interruptliste.

von A.K. (Gast)


Lesenswert?

Sorry, aber ein Tutorial für deinen Compiler schreib ich hier nicht
rein. Ein C Compiler für DOS hat sowas üblichweise in der Doku.

von Andreas (Gast)


Lesenswert?

nee iss j auch klar ;)  Ich habe gerade mal im Datenblatt meines
Rechners geschaut... COM 1 Hat IRQ 3... Wie die Parameter des Bios
Aufrufes aussehen steht dann wohl auch in der Compiler Beschreibung
oder ?

von A.K. (Gast)


Lesenswert?

Wie BIOS-Aufrufe generell aussehen, siehe Compiler-Doku.
Wie so ein FOSSIL-Aufruf genau aussieht, siehe FOSSIL Doku.
Das musst du dann nur noch zusammenbringen.

von Andreas (Gast)


Lesenswert?

Hast du einen Tipp für mich ... Compilermäßig

von A.K. (Gast)


Lesenswert?


von Alfred Penninger (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Andreas,

ich habe mal einige Progrmme in C, C++ unter DOS geschrieben.
Vielleicht kannst du was damit anfangen. Die Programme funktionieren
seit Jahren einwandfrei mit dieser Art der Interruptgetriebenen
Schnittstelle. Falls du mehrere Schnittstellen hast, hab ich auch noch
was. Damals hatte ich 2 RS232 mit Interrupt und 2 mit polling. Das ist
mit DOS kein Problem. Wer weiß, wie das mit Windows geht ;-).

Hab da auch noch Code zur Interruptgetriebenen Erfassung der Tastatur.

mfg Alfred

von Peter (Gast)


Lesenswert?

Ich hätte da noch einen Tip:

Öffne doch einfach ein File mit dem Dateinamen "COM1" oder "COM2"
oder "LPT1"! Lese- und Schreibzugriffe gehen dann direkt auf die
entsprechende Schnittstelle, das ganze funktioniert sogar unter Windows
3.0 bis WinXP...

Gruss Peter

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.