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);