Es gibt bei x86-basierten (und auch AMD64-Systemen), sowas, das nennt sich Protected Mode, im Gegensatz zu sowas, was sich Real Mode schimpft.
Im Protected Mode läuft deine Anwendung, im Real Mode startet z.B. DOS.
Unterschied (kurz, damit kann man nämlich ganze Regale füllen):
- Im Realmode wird der Speicher anders gehandhabt und Geräte sind i.d.R. im Speicher eingeblendet (Memory Mapped IO).
- Im Protected Mode ist nur der Speicher sichtbar, auf den ein Prozess zugreifen darf. Hardware wird hier oft verborgen (ODER kontrolliert eingeblendet z.B. für Grafikanwendungen)
Beim Protected Mode gibt es zwar noch verschiedene Schutzmodi (Ring 0 bis 3), die angeben, wieviel ein Prozess, der in diesem Modus läuft darf. Windowsanwendungen laufen typisch in Ring 3 (User-Mode), während Treiber im Ring 0 (Kernel Mode) laufen. Das sich hier auch noch mal das Memory Management ändert, steht NOCHMAL auf einem anderen Blatt.
Und zu der Anwendung von dir, die das kann: Die geht sicherlich über die WinAPI ODER holt sich über CreateFile die Treiber-Schnittstelle (z.B. \\.\LPT1) für das Gerät. Außerdem: 378h war IIRC nicht LPT, sondern COM

Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.