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:

WAIT &H3DA, 8

 
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
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 16.03.2005, 17:46    Titel: WAIT &H3DA, 8 Antworten mit Zitat

Hallo Leute!

Mit
Code:

WAIT &H3DA, 8
WAIT &h3DA, 8, 8

wartet man auf den Bildschirmstrahlrücklauf.
Schon klar.

Wenn ich aber nun mit
Code:

status = INP(&H3DA)

den Status von Hand auslese, weiß ich nicht, wie ich das
auswerten soll.

Was ich schon weiß ist, dass man mit den 8ern hinter WAIT &H3DA
eine AND/XOR Option angibt.
Was das genau ist, weiß ich aber nicht.

Kann mir das jemand erklären?

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 16.03.2005, 19:09    Titel: Antworten mit Zitat

Dazu müsstest du erst einmal wissen, wie AND, OR, XOR, usw arbeiten.
Und dazu musst du wissen, wie man dezimal in binär umwandelt:
Unser Zählsystem - das dezimalsystem - besteht aus den ziffern 0 bis 9, hat also 10 Ziffern.
Dementsprechend kann eine dezimalzahl 1234 zerlegt werden in:
1 * 10 ^ 3 + 2 * 10 ^ 2 + 3 * 10 ^ 1 + 4 * 10 ^ 0
Und was bringt das jetzt?
Wenn mans ausrechnet, kommt ja wieder 1234 raus.
Klar, war auch nur ein beispiel, damit du kapierst, wie's in binär geht.
da hat man nämlcih nur 2 ziffern - 1 und 0.
Eine Binärzahl 1010 ließe sich also zerlegen in
1 * 2 ^ 3 + 0 * 2 ^ 2 + 1 * 2 ^ 1 + 0 * 2 ^ 2
Und das ist 10.
Und jetzt zurück:
Wir nehmen die Zahl 13, und zerlegen sie in lauter 2er-Potenzen.
Als da wären...
8 (=2^3)
4 (=2^2)
1 (=2^0)
Und die Stellen, die hier im Exponenten stehen, werden nun befüllt:
1101

So, soweit dazu.
Jetzt zu den Operatoren:


Generell:
Diese Operatoren vergleichen Bit für Bit zwei Zahlen, und liefern als ergebnis eine 3. Zahl aus.


Fangen wir mal mit dem leichtesten Operator an:
NOT

Der braucht nämlich nur eine Zahl. NOT dreht einfach alle Bits um, macht also aus 0 1 und umgekehrt.

beispiel:
NOT 1
Ergebnis: -2

Sehen wir uns das mal auf Binärer Ebene an:

1 = 00000001
-2 = 11111110

Man erkennts hier sehr gut, oder?
Übrigens:
11111110 könnte genau so gut auch 254 sein. Das hängt ganz davon ab, ob man nun mit seiner Binärzahl eine Vorzeichenlose oder Vorzeichenbehaftete Zahl darstellen möchte. QB kennt aber nur vorzeichenbehaftete Zahlen. Deswegen wird eine Zahl sofort als negativ betrachtet, sobald ihr letztes bit gesetzt wird.
(von hinten herein gezählt.)


Jetzt die Etwas schwierigeren Operatoren:
AND...
... braucht - wie gesagt - schon zwei zahlen. Diese Beiden Zahlen werden dann Bit für Bit verglichen. In das Ergebnis wird nur dann ein bit gesetzt, wenn beide Zahlen an der entsprechenden Stelle eine 1 hatten.
Beispiel:

5 AND 3 = 1

Oder in Binär:
101
011
---AND
001

Verstanden?

Dann gäbs noch OR.
Der liefert 1, wenn einer der Werte 1 ist, und/oder der andere.

10 OR 6 = 16

1010
0110
---OR
1110

XOR funktioniert fast genau so, nur mit dem unterschied, dass nur 1 Stelle 1 sein darf:

10 OR 6 = 14

1010
0110
---XOR
1100





Der Befehl WAIT liest also - genau wie du in deinem Prog - eine Zahl vom Port ein, und vergleicht sie mit einem angegebenen wert.

wenn du also status eingelesen hast, kannst du mit
IF status AND 8 THEN...
Prüfen, ob etwa das 3. Bit gesetzt wurde.
(8 = 2 ^ 3)
und mit status XOR 8 kannst du nachprüfen, ob das dritte Byte NICHT gesetzt wurde.

WAIT &H3DA macht eigentlich nix anderes als:

Code:

DO
 status = INP (&H3DA)
LOOP UNTIL status AND 8



Alles klar?
Dann viel Spaß damit - es ist ein wichtiger schritt richtung assembler!
wenn du noch fragen hast, die Community ist ja da *g*
_________________
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
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 16.03.2005, 19:14    Titel: Antworten mit Zitat

Suuper, vielen Dank!

Jetzt verstehe ich auch endlich das bitweise Verknüpfen!
Ich meine, AND, OR, XOR-Gatter und Konsorten kenn ich zwar aus der
Elektronik, aber wie man diese auf Zahlen anwendet, wusste ich noch
nicht.

Vielen Dank!!

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 16.03.2005, 19:25    Titel: Antworten mit Zitat

und wieder ein FAQ-Reifer Beitrag *g*

Wenn ich mit dem FB-Handbuch fertig bin, werd ich vllt mal n eigenes Tut zusammenstellen, für das ich das Forum ein bisschen durchschaun werd *g*

Naja.

Was du noch wissen solltest:
Ich habe hier für die darstellung einer Zahl unterschiedlich viele Bits verwendet.
Der Prozessor muss aber immer genau wissen, wann der erste wert aufhört, und wann der nächste anfängt.
deswegen sind die Zahl der Bits genormt.

Du wirst sicher schon gelesen haben, dass....
INTEGER eine 16-Bit-Zahl ist....
LONG 32bit hat
SINGLE auch 32bit und
DOUBLE 64bit hat
Und bei einem STRING werden pro Zeichen 8bit verwendet - genau 1 Byte.
Übrigens ergibt sich daraus auch die Zahl der verfügbaren Zeichen: 256, genau so viele verschiedene Kombinationen gibt es bei einer achtstelligen binärzahl nämlich.


Dann gibt es natürlich noch weitere Operatoren: EQV und IMP (und vermutl noch mehr.)
Allerdings wirst du die recht selten brauchen.
wenn doch, lies einfach in der QB-Hilfe nach, da is recht gut erklärt, wie die arbeiten.

so c ya!

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
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 16.03.2005, 19:31    Titel: Antworten mit Zitat

Dusky_Joe hat Folgendes geschrieben:

Wenn ich mit dem FB-Handbuch fertig bin, werd ich vllt mal n eigenes Tut zusammenstellen, für das ich das Forum ein bisschen durchschaun werd *g*

Was denn für ein Tutorial?
Meinst du jetzt QB oder ASM?

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 16.03.2005, 19:41    Titel: Antworten mit Zitat

@DuskeyJoe: Korrigier ma deinen Beitrag, du hast dich dauernd verzählt lächeln

zB 1100 ist nicht 14 sondern 12 und 1110 ist nicht 16 sonder 14 grinsen
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 16.03.2005, 19:42    Titel: Antworten mit Zitat

FB steht für freeBASIC. Du wirst sicher schon das FB-Forum gesehen haben.
Bis jetzt gibt es da eigentlich nur englische Tuts.
Noch nicht mal die Referenz is übersetzt worden.
Bis vor kurzem hat das mipooh gemacht, aber inzwischen hab ich seine aufgabe übernommen *g*

Ich komme einigermaßen voran (bin grade beim S), aber es wird noch etwas dauern, bis ich endlich fertig bin.

naja, auf jeden fall, ich will ein deutsches FB-Tut schreiben.


Eigenwerbung ende.
_________________
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
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 16.03.2005, 20:31    Titel: Antworten mit Zitat

Hallo

Wo wir gerade beim Thema Eigenwerbung sind. Ich habe mich auch schon an kleinen Einsteigertutorials zum Binärsystem und zu logischen Verknüpfungen versucht. Zwar mehr auf Elektronik zugeschnitten aber das Prinzip ist ja das gleiche. Beide gibt es unter "Digitales" auf meiner Seite - Adresse siehe unten.

Du hast das Thema schon im Zusammenhang mit Zeitmessungen erwähnt. Wenn es dir nur darum geht, würde ich die Methode mit den Timerregistern empfehlen, die ich hier früher schon beschrieben habe. Unter DOS erreiche ich damit auf meinem 1GHz-PC eine Genaugkeit von wenigen µs. Unter Windows sind die Ergebnisse aber auch nicht schlecht.

Gruss
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 16.03.2005, 21:16    Titel: Antworten mit Zitat

Dusky_Joe hat Folgendes geschrieben:

naja, auf jeden fall, ich will ein deutsches FB-Tut schreiben.

Find' ich klasse.
Poste dann unbedingt den Link!!

Skilltronic hat Folgendes geschrieben:

Du hast das Thema schon im Zusammenhang mit Zeitmessungen erwähnt. Wenn es dir nur darum geht, würde ich die Methode mit den Timerregistern empfehlen, die ich hier früher schon beschrieben habe. Unter DOS erreiche ich damit auf meinem 1GHz-PC eine Genaugkeit von wenigen µs. Unter Windows sind die Ergebnisse aber auch nicht schlecht.


Eigentlich ging es mir nur ums Verständnis des WAIT &H3DA, 8 Befehls,
aber wenn wir schonmal dabei sind...
Wo hast du denn das schon mal hier im Forum erwähnt?

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 16.03.2005, 21:58    Titel: Antworten mit Zitat

Hallo

Hier: http://forum.qbasic.at/viewtopic.php?t=555

Im alten Forum hatte mich dazu schonmal etwas ausführlicher ausgelassen, das finde ich jetzt aber nicht mehr bzw. bin zu faul danach zu suchen...

Gruss
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 16.03.2005, 22:04    Titel: Antworten mit Zitat

Vielen Dank.
Müsste ich mal ausprobieren.
Was ist eigentlich der Unterschied zwischen PEEK und INP, bzw. POKE und OUT, fallt mir gerade so auf.
Kann es sein, dass man Bei PEEK/POKE erst das Segment setzen muss, und bei INP/OUT nicht?

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dreael
Administrator


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

BeitragVerfasst am: 16.03.2005, 22:23    Titel: Antworten mit Zitat

jb hat Folgendes geschrieben:
Was ist eigentlich der Unterschied zwischen PEEK und INP, bzw. POKE und OUT?

Dies kommt von der von Intel seinerzeit 1980 gewählten Architektur des 8088/8086-Prozessors, wo man beim Adress-/Datenbus separat zwischen einem Adressraum für ROM/RAM (Memory) und Chips (I/O-Register) unterscheidet. => Über PEEK() und POKE adressierst Du (konventioneller) Arbeitsspeicher sowie das BIOS-ROM, aber auch das RAM der Videokarte, während Du mit INP() und OUT die Controller-Chips (z.B. DAC bei der VGA-Karte, Seriell- und Parallelportbaustein auf dem Motherboard, Festplatten-Controller usw.) ansteuern kannst.

Weil der Adressbus 20 Bit breit war, in den CPU-Registern aber nur 16-Bit-Zahlen verwendet werden konnte, mussten die Intel-Ingenieure das berühmte Konzept mit der Segmentierung einführen, welches in QB seine Spuren 1:1 mit DEF SEG hinterlassen hat.

Segmentierung kannst Du Dir noch am ehesten wie ein Roll-Archivschrank vorstellen, wo es eine Million Karteikarten drin hat, aber mit Deiner Hand vom Bürostuhl aus kannst Du nur auf 65'536 Karten direkt zugreifen. Also hat es noch zwei Fusspedale, mit denen man die auf Ketten mit Motorantrieb aufgehängten Karteikasten-Reihen rundherumrotieren lassen kann, um an die gewünschte Karteikarte ranzukommen. => PEEK() und POKE ist gewissermassen der Griff ins Gestell mit der Hand, während DEF SEG der Bedienung dieser Fusspedalen entspricht. (Früher während meiner Azubi-Zeit als Maschinenzeichner hatte es in der Lehrfirma für die Mikrofilme tatsächlich ein solcher Archivschrank.)

Hinweis: Die Commodore-Rechner früher machten diesen Unterschied nicht, d.h. man konnte über denselben Adressraum sowohl aufs RAM zugreifen als auch die Custom-Chips ansteuern, auch Bank-Switching war damals unbekannt, weil immer genügend Adressraum vorhanden war.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Quark48



Anmeldungsdatum: 16.10.2004
Beiträge: 559
Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern

BeitragVerfasst am: 22.03.2005, 12:27    Titel: Antworten mit Zitat

Hallo!

PEEK/POKE: Speicher lesen & schreiben
INP/OUT: Geräte & Periperie (richtig geschriegen? *g*)

Du kannst maximal Zahlen von 0 bis 65535 (&H0-&HFFFF) für das erste Argument der Anweisung verwenden. Bei OUT kannst du ein Byte an das Gerät senden; Beispiel: OUT &H378, 255
_________________
Grüßle, Stefan lächeln
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht! happy
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 22.03.2005, 14:22    Titel: Antworten mit Zitat

OK, dreael hat's ja schon erklärt...

Übrigens: Peripherie zwinkern

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Stephan



Anmeldungsdatum: 05.10.2004
Beiträge: 358
Wohnort: Hessen - 20km Nördlich von Frankfurt am Main

BeitragVerfasst am: 22.03.2005, 17:27    Titel: Antworten mit Zitat

@Quark48 , ich will dich ja nicht beleidigen, aber liest du dir eigentlich auch durch,was andere schreiben ???

Hab schon öfters gesehen, das du nach tagen antworten auf Threads schreibst, die schon lange gegeben wurden.
_________________
'Wir schätzen die Zeit erst, wenn uns nicht mehr viel davon geblieben ist.'
Leo Tolstoi
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
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