Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Brauche Hilfe bei Software-Interrupts

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Hristic



Anmeldungsdatum: 30.01.2009
Beiträge: 2

BeitragVerfasst am: 30.01.2009, 23:40    Titel: Brauche Hilfe bei Software-Interrupts Antworten mit Zitat

Kann mir jemand sagen, wie ich in QBasic einen Interrupt installiere, sodass er sich immer in bestimmten Zeitabständen ausführt?


Ich dachte da so an Zeitabstände von etwa 0,1 Millisekunden.


Ich hoffe jemand kann mir helfen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Ferdi



Anmeldungsdatum: 10.03.2007
Beiträge: 284
Wohnort: Berlin

BeitragVerfasst am: 30.01.2009, 23:57    Titel: Antworten mit Zitat

0,1 Millisekunden??
Geht das in QB überhaupt?
_________________
Dieser Post wurde cum grano salis gewürzt! Na dann: Guten Appetit!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 31.01.2009, 00:03    Titel: Antworten mit Zitat

Der DOS-Timer hat eine Genauigkeit von 55ms. KA wie das mit Interrupts geht, die ugl-lib konnte, glaube ich, sehr präzise timer bieten...
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hristic



Anmeldungsdatum: 30.01.2009
Beiträge: 2

BeitragVerfasst am: 31.01.2009, 00:18    Titel: RE Antworten mit Zitat

Also ich glaube, dass das schon möglich ist.
Ich habe ein Programm in asm geschrieben, dass mal nur das tut, was der spätere Interrupt tun soll. Er war so schnell, dass ich die Cycles (nutze DosBox) auf 50 runterregeln konnte... - da muss es doch möglich sein, einen Interrupt zu programmieren, der sich entsprechend ausführt. Aber richtig ist auch, dass die Timer nicht genau genug sind. Da muss ich wohl auch noch mal tiefgründig nachdenken, wie man d a s realisieren k ö n n t e...

Wer eine Antwort hat - nur her damit!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 31.01.2009, 13:39    Titel: Re: RE Antworten mit Zitat

Hristic hat Folgendes geschrieben:

Ich habe ein Programm in asm geschrieben, dass mal nur das tut, was der spätere Interrupt tun soll. (...)
Wer eine Antwort hat - nur her damit!

ASM ist nicht QBasic!
Du kannst natürlich eine ASM-Datei mit einem Assembler kompilieren (bzw. assemblieren) und dann die OBJ-Datei mit dem Linker in Dein QB-Projekt einbinden. Leichter ginge es aber mit FreeBasic, das hat einen Inline-Assembler.
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Ferdi



Anmeldungsdatum: 10.03.2007
Beiträge: 284
Wohnort: Berlin

BeitragVerfasst am: 31.01.2009, 14:38    Titel: Antworten mit Zitat

Wozu? Ich dachte mit FreeBasic kann man auf sämtliche Windowsfunktionen zugreifen... Es gibt doch bestimmt einen API -Befehl, der dies ausführt.
_________________
Dieser Post wurde cum grano salis gewürzt! Na dann: Guten Appetit!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 31.01.2009, 15:56    Titel: Antworten mit Zitat

Ferdi hat Folgendes geschrieben:
Wozu? Ich dachte mit FreeBasic kann man auf sämtliche Windowsfunktionen zugreifen... Es gibt doch bestimmt einen API -Befehl, der dies ausführt.


Ferdi, DOS != Windows != Linux != Mac != Solaris.
Verstanden?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
A.K.



Anmeldungsdatum: 02.05.2005
Beiträge: 467
Wohnort: HH

BeitragVerfasst am: 01.02.2009, 00:46    Titel: Antworten mit Zitat

Also einen Interrupt unter QB anlegen ist recht einfach.

Du hast in den ersten 1024 Bytes des RAM die Interrupttabelle.
256 Einträge zu je 4 Byte (2 Byte Segment, 2 Byte Offset)

Das erste was du benötigst ist natürlich das ASM-Programm welches du auf eine beliebige Art und Weise in dein QB-Programm lädst und es dann in einem String oder in einem Array ablegst.

Dann ermittelst du die Adressen des Arrays/String mit SADD, VARSEG, VARPTR etc..

Wenn du dann diese Adressen hast, kannst du sie in die Interrupttabelle per DEF SEG und POKE an die richtige Stelle schreiben.

Nach dem dies getan ist, und das QB-Programm läuft, kann man mit beliebigem anderen geladenen ASM diesen INT direkt aufrufen wie man es aus Assembler gewohnt ist.
Wenn das QB-Programm beendet wird, wird der Speicherteil in dem das ASM-Programm geladen war, als "frei" markiert. Das heißt das man ab diesem Zeitpunkt so einen INT nicht mehr aufrufen sollte.

Jetzt ist nur noch die Frage was genau du damit machen willst bei diesen Zeitabständen. Denn was ich mir vorstellen könnte wäre eine Schleife im ASM-Programm die den Timer des Mainboards ausliest und dann dementsprechend handelt. Der ist ein wenig genauer als 1/18.

MFG A.K.
_________________

http://forum.IconSoft.de
http://www.pnpbb.de - hol dir jetzt dein eigenes kostenloses Forum *NEU*
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen Yahoo Messenger MSN Messenger
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 01.02.2009, 16:32    Titel: Antworten mit Zitat

Von mir höchtenst noch die Empfehlung: Für derartige Anwendungen ausschliesslich unter reinem MS-DOS 6.22 arbeiten, Windows-Kernel im RAM mit Multitasking und NTVDM ist für so etwas absolut tabu!

Da bekanntlich die Uhrbaustein-Geschichte beim IBM-PC-Standard für solche Anwendungen wahrlich keine Meisterleistung darstellt, wirst Du sehr wahrscheinlich nicht darum herumkommen, mit Warte-Zählschleifen wie im alten 8-Bit-Zeitalter zu arbeiten, wobei Du aber immerhin die Anzahl Loops, die es für eine bestimmte Zeiteinheit braucht, zu Beginn noch ausmessen kannst.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz