Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Hermann
Anmeldungsdatum: 28.04.2005 Beiträge: 3 Wohnort: Dielheim
|
Verfasst am: 28.04.2005, 09:02 Titel: Ein-/Ausgabe über Parallelport in FreeBasic |
|
|
Ich suche die Ersatzbefehle für die Q-Basic-Befehle "OUT 888," und "INP (889)". Zumindest funktionieren sie nicht bei mir. Kann mir jemand einen Tip geben? |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
|
Kai Bareis
Anmeldungsdatum: 10.09.2004 Beiträge: 545 Wohnort: Baden Würtemberg
|
Verfasst am: 28.04.2005, 16:43 Titel: |
|
|
http://www.logix4u.net/inpout32.htm _________________ MfG Kai Bareis
Es ist noch kein Meister vom Himmel gefallen! Warum einfach wens auch umständlich geht! |
|
Nach oben |
|
|
Dusky_Joe
Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 28.04.2005, 17:21 Titel: |
|
|
Bleibt nur noch zu sagen:
freeBASIC Befehlsreferenz hat Folgendes geschrieben: |
INP
Syntax: INP &H3C9
Typ: Funktion
Kathegorie: Gfx
Emuliert den VGA-Port.
Diese Funktion emuliert den INP-Zugriff auf den VGA-Port. Nur der Port &H3C9 funktioniert wirklich; alle anderen Ports liefern 0 zurück.
Im Normalfall benötigen Sie diese Funktion nicht; benutzen Sie stattdessen PALETTE.
Siehe also PALETTE, OUT, WAIT, SCREEN (Grafik).
Unterschiede (zu QBASIC):
INP wird nur noch dazu verwendet, um die PALLETTE-Einträge zu lesen. Er emuliert einen Zugriff auf den VGA-Port (&H3C9). Dieser Port ist der einzige, auf den Sie zugreifen können. INP wurde nur beibehalten, um die Kompatibilität zu QBASIC-Programmen zu bewahren, die INP zur Palette- Manipulation benutzten.
Ein Zugriff auf jeden anderen Port wird daher 0 zurückgeben.
Grund: Ein direkter Zugriff auf die I/O-Ports ist nicht mehr möglich.
OUT
Syntax: OUT Port, Wert AS BYTE
Typ: Anweisung
Kathegorie: Gfx
Emuliert den VGA-Grafik-Port.
OUT wird verwendet, um die Einträge der VGA-Pallette zu bearbeiten. Die einzigen funktionierenden Ports sind &H3C7, &H3C8 und &H3C9.
Sie werden diesen Befehl normalerweise nicht benötigen; zur Farbmanipulation dient der Befehl PALETTE.
Siehe auch: PALETTE, INP, WAIT.
Unterschiede (zu QBASIC):
OUT ist auf die Emulation des VGA-Ports begrenzt; nur die Ports &H3C7, &H3C8 und &H3C9 funktionieren.
Der Versuch, auf eine andere Adresse zu schreiben, hat keine Funktion
Grund: Ein direkter Zugriff auf die I/O-Ports ist nicht mehr möglich.
[/b]WAIT[/b]
Syntax: WAIT Port, AND_Ausdruck[, XOR_Ausdruck]
Typ: Anweisung
Kathegorie: Gfx
Anweisung zur Emulation des Wartens auf die Antwort eines DOS-Ports.
WAIT wurde aus Kompatibiltätsgründen beibehalten; es wird nicht empfohlen WAIT zu verwenden.
'Port' - die Nummer des DOS-Ports, auf den gewartet werden soll.
WAIT liest einen Wert vom Port, und verknüpft ihn mit über ein loigisches AND mit dem 'AND_Ausdruck'. Wenn das Ergebnis ungleich 0 ist, wird die Programmausführung fortgesetzt.
WAIT liest einen Wert vom Port, und verknüpft ihn mit über ein loigisches XOR mit dem 'XOR_Ausdruck', bevor es an den AND_Ausdruck übergeben wird. Wenn dieses Argument ausgelassen wird, nimmt freeBASIC 0 an.
WAIT funktioniert nur mit dem Port &H3DA (warten auf vertical sync.). Sie sollten WAIT nur so einsetzen:
WAIT &h3DA, 8
Jede andere Kompination von Port, AND_Ausdruck und XOR_Ausdruck wird keine Auswirkung haben.
Beispiel:
Siehe SCREENSET.
Siehe auch: INP, OUT.
Unterschiede (Zu QBASIC):
WAIT ist lediglich eine Emulation der QB-Wait-Anweisung am Port &H3DA. Auf andere Ports kann nicht zugegriffen werden, da viele andere Plattformen nicht direkt auf die Ports zugreifen können.
|
Have a nice day
Ciao _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
|
Hermann
Anmeldungsdatum: 28.04.2005 Beiträge: 3 Wohnort: Dielheim
|
Verfasst am: 28.04.2005, 19:53 Titel: |
|
|
Danke für die Informationen.
Leider kann ich dann FreeBasic nicht verwenden.
Mein Sohn muss in der Schule Q-Basic-Programme schreiben und an einem selbstgebauten Interface mit 8 Ausgängen und 4 Eingängen vom Parallelport testen.
Gruß Hermann |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
|
Hermann
Anmeldungsdatum: 28.04.2005 Beiträge: 3 Wohnort: Dielheim
|
Verfasst am: 29.04.2005, 07:27 Titel: |
|
|
Hallo Sebastian,
leider kenn ich mich mit einbinden von DLL's nicht aus. Im Programmieren kenn ich mich zumindest soweit aus, dass ich noch meinem Sohn in der Schule noch helfen kann. Wenn Du mir eine Tip geben kannst, wie ich die parallele Schnittstelle ansprechen kann wäre ich Dir dankbar. Wie kann ich z.B. die Q-Basic-Befehle:
OUT 888, 2^x
oder
a=INP(889)
in FreeBasic realisieren.
Meines Wissens müssen DLL's vorher am Programmanfang eingebunden werden?
Tausend Dank im voraus
Gruß
Hermann |
|
Nach oben |
|
|
Mr_T aka FtFanmaster
Anmeldungsdatum: 26.12.2004 Beiträge: 103 Wohnort: Speyer
|
Verfasst am: 04.05.2005, 19:35 Titel: |
|
|
Hallo.
Da ich auch andauernd auf die Ports des PC´s zugreifen muss, wäre eine "DLL und Include Anleitung" ziemlich angebracht. Zumal meine Messaufgaben (ich arbeite mit Elektronik) immer mehr Richtung PC wandern und QuickBasic langsam aber sicher verdrängt wird (oder nicht...wer weiß?). |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 04.05.2005, 22:18 Titel: |
|
|
Hallo FtFanmaster,
schau dir mal diesen Beitrag an:
http://www.vbarchiv.net/workshop/workshop76.php
Dort ist auch das Einbinden von DLL's, hier die inpout32.dll, erklärt.
Sollte in freeBasic ebenso gehen.
Gruß
Volta |
|
Nach oben |
|
|
Mr_T aka FtFanmaster
Anmeldungsdatum: 26.12.2004 Beiträge: 103 Wohnort: Speyer
|
Verfasst am: 05.05.2005, 07:35 Titel: |
|
|
Hallo.
Nein, geht leider (auch mit diversen Änderungen des Codes) nicht.
Mfg
FtFanmaster |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 05.05.2005, 16:35 Titel: |
|
|
Hallo,
stimmt, tut mir leid, das Einbinden von externen DLL's in FreeBasic hatte ich mir zu einfach vorgestellt.
Neuer Versuch;
Zitat: | ..wäre eine "DLL und Include Anleitung" ziemlich angebracht. |
bei http://sourceforge.net/forum/forum.php?thread_id=1275700&forum_id=417224
habe ich folgendes gefunden:
Zitat: | By: v1ctor - v1ctor
RE: Import lib for DLL
2005-04-30 18:10
Hi, it can be done as follow:
pexports.exe -o [add the dll path here]\zlibwapi.dll >zlibwapi.def
dlltool.exe -d zlibwapi.def -D zlibwapi.dll -l libzlibwapi.dll.a
pexports can be found here: http://www.emmestech.com/software/cygwin/pexports-0.43/download_pexports.html
The dlltool is under bin\win32 in FreeBASIC's Win32 package. |
pexports gesaugt, eine passende Batch erstelt:
Code: | pexports.exe -o C:\Freebasic\inpout32.dll >inpout32.def
C:\Freebasic\bin\win32\dlltool.exe -d C:\Freebasic\inpout32.def -D C:\Freebasic\inpout32.dll -l C:\Freebasic\libinpout32.dll.a |
(2 Zeilen, letzte Zeile ist etwas lang)
So bin ich zu einer "inpout32.def" und "libinpout32.dll.a" gekommen.
Ob das jetzt funktioniert konnte ich noch nicht testen.
Es gibt wohl unterschiedliche DLL's, dynamisch oder statisch (ich bin da Laie und kein Experte).
Wozu die inpout.dll gehört und ob sie sich so einbinden lässt???
Gruß
Volta
Diese Anleitung stellte sich als falsch heraus, siehe nachfolgende Beiträge!
Zuletzt bearbeitet von volta am 15.06.2005, 22:06, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Mr_T aka FtFanmaster
Anmeldungsdatum: 26.12.2004 Beiträge: 103 Wohnort: Speyer
|
Verfasst am: 05.05.2005, 18:16 Titel: |
|
|
Vielen Dank. Endlich mal ne funktionierende Antwort.
EDIT: Zu früh gefreut:
Fehlermeldung: "C:\Freebasic\fbidetmp.bas Duplicatet definition on line: 4"
Programm:
declare function Inp LIB "inpout32" alias "Inp32" (byval bt as integer) as integer
declare sub Out LIB "inpout32" alias "Out32" (byval pt as integer, byval bt as integer)
'
DO:
FOR b = 0 TO 255
OUT32 888, b
IF INKEY$ <> "" THEN END
NEXT b
LOOP |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 07.05.2005, 16:36 Titel: Ports lesen und schreiben in FreeBasic (ASM) |
|
|
Hallo,
nachdem es mir bisher nicht gelang die inpout32.dll in FreeBasic einzubinden (ich werkel noch daran!!), habe ich eine andere Art ausprobiert den LPT-Port anzusprechen, über ASM-Code.
Natürlich wird das in NT, W2k und XP nicht funktionieren!!
Hier ein Beispiel,
zum testen habe ich ein altes QB Programm angepasst, welches über den eingebauten Leisesprecher einen Ton erschallen läßt (unter 98 und ME lief es).
Code: | 'Test ASM in InPort, OutPort
DefInt a-z
Option Explicit
Dim Old As UByte, LSB As UByte, MSB As UByte, PPort As UByte
Dim herz As Short
Dim Divisor As Integer
Dim Zeit As Double, sec As Double
Public Function InPort ( ByVal Port As Integer) As Integer
Dim ERG As Integer
ASM
xor eax, eax
mov edx, [Port]
in al, dx
mov [ERG], eax
End ASM
InPort = ERG
END FUNCTION
Public Sub OutPort ( ByVal Port As Integer, ByVal Wert As Integer)
ASM
mov eax, [Wert]
mov edx, [Port]
out dx, al
End ASM
End Sub
sec = 2 'Tondauer
herz = 440 'Frequenz
Divisor = 1193180 / herz
LSB = Divisor MOD 256
MSB = Divisor \ 256
Old = InPort(&H61) '8255 PPI chip. Save the original.
OutPort (&H43, 182) '8253 Timer chip. 10110110b Channel 2, mode 3
PPort = InPort(&H61) 'get the 8255 port contents.
OutPort (&H61, PPort OR 3)'enable the speaker and use channel 2.
OutPort (&H42, LSB) 'Output Frequency Lo and Hi Byte
OutPort (&H42, MSB)
Zeit = TIMER 'Wait until Zeit elapsed
While Timer < Zeit + sec
Wend
OutPort (&H61, Old) 'turn it off. |
Ich hoffe es hilft auch Anderen!
Gruß
Volta _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
Mr_T aka FtFanmaster
Anmeldungsdatum: 26.12.2004 Beiträge: 103 Wohnort: Speyer
|
Verfasst am: 07.05.2005, 17:32 Titel: |
|
|
Vielen Dank! Es funktioniert bestens. Ich kann alle Ports ansprechen. Super. Unter XP werde ich es trotzdem testen (was solls). Den Bericht stelle ich eventuell hier rein.
Gruß,
FtFanmaster |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 07.05.2005, 20:36 Titel: es funktioniert eine externe DLL einzubinden! |
|
|
Hallo FtFanmaster,
es funktioniert doch mit der obigen Beschreibung die inpout32.dll zu nutzen.
Versuch mal folgende Declaration in deinem Prog:
Code: | '$inclib: 'inpout32'
declare function InPort cdecl alias "Inp32" (byval PortAddress as integer) as integer
declare sub OutPort cdecl alias "Out32" (byval PortAddress as integer, byval data as integer) |
und ändere im Prog "Out32" zu "OutPort" (bei "declare sub Out32 cdecl alias "Out32" " bekomme ich auch eine Fehlermeldung???).
Im gleichen Verzeichnis müssen die Dateien "inpout32.dll" und "libinpout32.dll.a" sein!
Bei mir hat es so geklappt
Gruß
Volta
Diese Anleitung stellte sich als falsch heraus, siehe nachfolgende Beiträge! _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Zuletzt bearbeitet von volta am 15.06.2005, 22:07, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Mecki Igel
Anmeldungsdatum: 10.09.2004 Beiträge: 985 Wohnort: Niederbayern
|
|
Nach oben |
|
|
Kai Bareis
Anmeldungsdatum: 10.09.2004 Beiträge: 545 Wohnort: Baden Würtemberg
|
Verfasst am: 05.06.2005, 17:59 Titel: |
|
|
So ich erweke diesen Thread nochmal zum Leben.
Also nun wollte ich mal mit ein bisschen mit FB experimentieren also unter anderem meine LCD-Software umschreiben. Dazu hab ich mir das von Volta durchgelesen mit der inpout32.dll die ja unter Windows 2000 funktionieren sollte blos tut es leider nicht. Hat mir also eventuell einer ein Funktionierendes Programm womit ist unter win 2K arbeiten kann wen möglich mit den nötigen Dateien. Damit ich dann meine Programme entsprechend umschreiben kann. _________________ MfG Kai Bareis
Es ist noch kein Meister vom Himmel gefallen! Warum einfach wens auch umständlich geht! |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 05.06.2005, 19:23 Titel: gerade nocheinmal unter W2k, und XP getestet |
|
|
Hallo,
ich habe das nachfolgende Prog gerade nocheinmal unter W2k, und XP getestet. Auf beiden Winversionen lief es.
Da ich keine Möglichkeit hatte am Printerport zu prüfen, habe ich nur die In/Out Befehle am Lautsprecher testen können. Ohne die inpout32.dll kann man diesen Port sonst auch nicht ansprechen.
Code: | Option Explicit
'$inclib: 'inpout32'
declare function InPort cdecl alias "Inp32" (byval PortAddress as integer) as integer
declare sub OutPort cdecl alias "Out32" (byval PortAddress as integer, byval data as integer)
Dim Old As UByte, LSB As UByte, MSB As UByte, PPort As UByte
Dim herz As Short
Dim Divisor As Integer
Dim Zeit As Double, sec As Double
sec = 2 'Tondauer
herz = 440 'Frequenz
Divisor = 1193180 / herz
LSB = Divisor MOD 256
MSB = Divisor \ 256
Old = InPort(&H61) '8255 PPI chip. Save the original.
OutPort (&H43, 182) '8253 Timer chip. 10110110b Channel 2, mode 3
PPort = InPort(&H61) 'get the 8255 port contents.
OutPort (&H61, PPort OR 3)'enable the speaker and use channel 2.
OutPort (&H42, LSB) 'Output Frequency Lo and Hi Byte
OutPort (&H42, MSB)
Zeit = TIMER 'Wait until Zeit elapsed
While Timer < Zeit + sec
Wend
OutPort (&H61, Old) 'turn it off.
sleep |
Die selbst erstellte libinpout32.dll.a und die inpout32.dll im gleichen Verzeichnis.
Bei beiden Winversionen war ich als Admin angemeldet!
Bekommst du irgend eine Fehlermeldung? oder nur keine Reaktion am LPT?
Gruß
Volta
Diese Anleitung stellte sich als falsch heraus, siehe nachfolgende Beiträge! _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Zuletzt bearbeitet von volta am 15.06.2005, 22:07, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Kai Bareis
Anmeldungsdatum: 10.09.2004 Beiträge: 545 Wohnort: Baden Würtemberg
|
Verfasst am: 05.06.2005, 19:33 Titel: |
|
|
Also habst grad getestet wen ich mich normal als Benutzer anmelde scheint es nicht zu funkionieren aber als Admin klappt es hervorragent.
Aber blöd ist das schon das die inpout32 nicht als Benutzer funktioniert.
Wen ich die Inpout32.dll in das VB von Word einbinde geht es auch als Benutzer _________________ MfG Kai Bareis
Es ist noch kein Meister vom Himmel gefallen! Warum einfach wens auch umständlich geht! |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 05.06.2005, 20:02 Titel: |
|
|
Es sollte, nach den Codern der inpout32.dll, auch als User gehen, aber wie?
Versucht habe ich schon mal die inpout32.dll ins Windowsverzeichnis zu setzen usw. aber alles ohne Erfolg.
Warum das in VBA unter Word oder Excel geht, ist mir ein Rätsel?
Gruß
Volta _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
|