C Befehle für die SS Programmierung.

INPORT, INPORTB, OUTPORT, OUTPORTB,
inport liest ein Wort von einer Hardware-Schnittstelle
inportb liest ein Byte von einer Hardware-Schnittstelle
outport schreibt ein WORD in eine Hardware-Schnittstelle
outportb schreibt ein Byte in eine Hardware-Schnittstelle
Definition:
int inport(int portid);
unsigned char inportb(int portid);
void outport(int portid, int value);
void outportb(int portid, unsigned char value);

Hinweis:

inport
arbeitet wie der 80x86-Befehl IN. Es liest das niederwertige
Byte eines WORDs aus portid, das höherwertige Byte aus portid+ 2.
inportb ist ein Makro, das ein Byte liest.
outport
arbeitet wie der 80x86-Befehl OUT. Es schreibt das niederwertige
Byte eines Werts in portid, das höherwertige Byte in portid + 2.
outportb ist ein Makro, das ei Byte schreibt.

 

Argument Funktion/Auswirkung
portid


value
I/O-Adresse, aus der inport und inportb lesen I/O-Adresse, in die outport und outportb schreiben

WORD, das outport schreibt
Byte, das outportb schreibt

Bei Verwendung eines dieser Makros, wenn DOS.H mit include in den Quellcode
integriert ist, werden die Makros als echte inline-Makros behandelt.
Wenn DOS.H nicht mit include in den Quellcode integriert ist, oder das Makro wegen #undef nicht mehr definert ist, wird eine Funktion mit diesem Namen erzeugt.
Rückgabewert:
inport und inportb geben den gelesenen Wert zurück
outport und outportb liefern nichts zurück

PEEK, PEEKB,
peek liefert das 16Bit-Wort an der durch segment:offset angegebenen Speicherstelle
peekb liefert das Byte an der durch segment:offset angegebenen Speicherstelle

Definition:
int peek(unsigned segment, unsigned offset);
char peekb(unsigned segment, unsigned offset);

Hinweis:
peek liefert das 16Bit-Wort an der durch segment:offset angegebenen Speicherstelle

peekb liefert das Byte an der durch segment:offset angegebenen Speicherstelle

peek und peekb sind in DOS.H als inline-Makro definiert.

Wenn DOS.H nicht mit include in den Quellcode eingeschlossen ist, werden echte Funktionsaufrufe erzeugt.

Rückgabewert:
peek liefert das Datenwort an der Speicheradresse segment:offset
peekb liefert das Datenbyte an der Speicheradresse segment:offset

 

#include <stdio.h>
#include <dos.h>

int main()
{
unsigned char resultat;
int port = 0;  /* serial port 1 */

resultat = inport(port);
printf("Byte read from port %d = 0x%X\n", port, resultat);
return 0;
}

 

#include <stdio.h>
#include <dos.h>

int main()
{
int port = 0; /* serial port 1 */
int value = 'C';

outport(port, value);
printf("Value %d sent to port number %d\n", value, port);
return 0;
}

 

#include <stdio.h>
#include <conio.h>
#include <dos.h>

int main(void)
{
int value = 0;

printf("Zustand Ihrer Tastatur ist:\n");
value = peek(0x0040, 0x0017); /* Tastatur Port */
if (value & 1)
printf("Rechte shift an\n");
else
printf("Rechte shift aus\n");

if (value & 2)
printf("Linke shift an\n");
else
printf("Linke shift aus\n");

if (value & 4)
printf("Control Taste an\n");
else
printf("Control Taste aus\n");

if (value & 8)
printf("Alt Taste on\n");
else
printf("Alt Taste off\n");

if (value & 16)
printf("Rollen an\n");
else
printf("Rollen aus\n");

if (value & 32)
printf("Num Block an\n");
else
printf("Num Block aus\n");

if (value & 64)
printf("Caps lock an\n");
else
printf("Caps lock aus\n");

return 0;
}

Zusammenfassung

Die wichtigsten Header-Dateien sind
#include <stdio.h>
#include <conio.h>
#include <dos.h>

Einlesen der Basisportadresse mit (peek)
int port_variable = peek(segment:offset);

Senden mit (outport)
outport(port_variable+ basisport , sende_inhalt_variable);

Empfangen mit (inport)
int inhalt_variable = inport(port_variable + basisport);