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:

Buchstaben einzeln erscheinen lassen

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



Anmeldungsdatum: 03.08.2013
Beiträge: 34

BeitragVerfasst am: 11.08.2013, 16:42    Titel: Buchstaben einzeln erscheinen lassen Antworten mit Zitat

Hier wieder euere Nervensäge.

Meine Frage ist heute, ob es mittels POKE möglich ist, Buchstaben
mit Verzögerung auf dem Bildschirm erscheinen zu lassen.

Ich habe natürlich auch in der Referenz zur Kenntnis genommen, das
die POKE-Befehle nicht verwendet werden sollten. (aber weshalb sollte ich etwas nicht nutzen, wenn es mir viel Arbeit erspart?)

Auf dem C64 konnte man mittels POKE (Adresse, Wert) dieses erreichen.
Somit würde ich mir die Arbeit ersparen, jeden String zu zerlegen um das
Ergebnis zu erreichen.

Als Optisches Beispiel, für die, die nicht verstehen was ich meine:

Dim Text As String
Text = "Dies ist ein Test, und wartet auf eine vielleicht moegliche Verbesserung!"
DIM AS INTEGER x
x=1

DO
CLS
LOCATE 0, 0
PRINT LEFT(Text, x)
x= x+1
SLEEP 60
LOOP
SLEEP


Bin wieder sehr gespannt auf euere Antworten!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


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

BeitragVerfasst am: 11.08.2013, 17:20    Titel: Antworten mit Zitat

PEEK und POKE tun in FreeBASIC nichts anderes, als dir ein Byte an einer bestimmten Speicheradresse zurückzugeben. Die speziellen Hardwarespezifischen Effekte, die man damit auf dem C64 erzeugen konnte, wirst du in FreeBASIC nicht mit denselben Befehlen emulieren können, das musst du schon selbst programmieren.
Du kannst aber mit MID einzelne Buchstaben aus einem String extrahieren, statt mit LEFT einen ganzen Substring.
_________________
» 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
Nullchecker



Anmeldungsdatum: 03.08.2013
Beiträge: 34

BeitragVerfasst am: 11.08.2013, 17:45    Titel: Antworten mit Zitat

Es gibt also keine Adresse, die ich Ansprechen kann, um die
Geschwindigkeit der Text- bzw. Zeichenausgabe auf dem Bildschirm zu beeinflussen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 11.08.2013, 18:44    Titel: Antworten mit Zitat

Hi,
mach keine Vergleiche mit dem C64. Der hatte eine Taktrate von 2MHz, moderne PCs sind 1000 mal schneller.
Es gibt komplizierte Möglichkeiten direkt in den Videospeicher zu schreiben, das bringt dir dann Nanosekunden.
Benutze einfach die vorgegebenen Ausgaberoutinen und die Fehlerrate bleibt klein.
In FB sind diese Ausgaberoutinen für die unterschiedlichen Platformen schon entsprechend optimiert.
Code:
Dim As String Text = "Dies ist ein Test, und wartet auf eine vielleicht moegliche Verbesserung!"
Locate 10,0,0
For x As Integer= 1 To Len(Text)
  Print Mid(Text,x,1);  'Chr(Text[x-1]);
  Sleep 60
Next
Sleep

Die Ausgabegeschwindigkeit hängt nur von 'Sleep 60' ab.
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Nullchecker



Anmeldungsdatum: 03.08.2013
Beiträge: 34

BeitragVerfasst am: 11.08.2013, 20:57    Titel: Antworten mit Zitat

Hallo volta.

Dein Beispiel ist zwar anders aufgebaut als meins, läuft aber auf dasselbe
raus. Das SLEEP 60 lediglich die Zeitverzögerung ist, ist mir klar (mein
Beispiel habe ich auch selbst geschrieben)

Es geht mir darum, nicht bei jeder PRINT-Anweisung einen String der
"Zerpflückt" werden muss, erzeugen zu müssen, sondern die
Buchstaben auf Grund einer internen Zeitverzögerung optisch eben
einzeln auf den Bildschirm bringt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4699
Wohnort: ~/

BeitragVerfasst am: 11.08.2013, 21:07    Titel: Antworten mit Zitat

Wenn du die auskommentierte Variante verwendest
Code:
  Print Chr(Text[x-1]);

dann muss der String nicht "zerpfückt" werden - stattdessen wird genau auf die Speicherstelle zugegriffen, an der sich der entsprechende Buchstabe befindet. Das müsste deiner Fragestellung ziemlich nahe kommen, nur dass der arbeitssparende direkte Speicherzugriff eben nicht bei der Ausgabe sondern bei der Ermittlung des auszugebenden Wertes stattfindet.

(Aber wie gesagt, das sind Ersparnisse im Nanosekundenbereich. happy )

Eine Zeitverzögerung bei der Ausgabe muss in FreeBASIC selbst erledigt werden, und das läuft letztendlich immer darauf hinaus, dass du mehrere (Teil-)Ausgaben nacheinander durchführst.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Nullchecker



Anmeldungsdatum: 03.08.2013
Beiträge: 34

BeitragVerfasst am: 12.08.2013, 11:46    Titel: Antworten mit Zitat

Danke für euere Antworten, werde versuchen das ganze mittels
einer SUB-Routine zu bewerkstelligen ( wobei es mir heute zum
erstenmal gelungen ist, erfolgreich mit einer SUB zu arbeiten)

Ist zwar kein Schritt in der Geschichte der Menschheit, aber ein
gewaltiger in der von Nullchecker lächeln

Bleibt mir weiter wohlgesonnen, mit euerer Hilfe werde selbst ich
vielleicht mal den Olymp der Programmierung erklimmen.

FB macht Spass dank euerer Unterstützung!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 12.08.2013, 13:31    Titel: Antworten mit Zitat

Hi Nullchecker,
ich ahne was du mit PEEK und POKE auf dem C64 meinst.
Da gab es ja ein ganzes Buch voll damit. Diese PEEK und POKE griffen in das Betriebssystem des C64 ein.
Für den PC mit mehreren Betriebssystemen gibt es das nicht.
Unter DOS gibt es zwar die Interrupts und mit allen Windowsversionen die APIs aber das sind Unterprogramme die einige Grundfunktionen erledigen.
Also vergiss diese PEEK und POKE unter FB.
Was sie bewirken kann man unter FB nachproggen wie du wohl gemerkt hast.
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Nullchecker



Anmeldungsdatum: 03.08.2013
Beiträge: 34

BeitragVerfasst am: 13.08.2013, 08:31    Titel: Antworten mit Zitat

Zitat:
Diese PEEK und POKE griffen in das Betriebssystem des C64 ein.
Für den PC mit mehreren Betriebssystemen gibt es das nicht.

Damit ist meine Frage beantwortet (es war mir halt nicht klar).

Zitat:

Also vergiss diese PEEK und POKE unter FB.


Erledigt! lachen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Haubitze



Anmeldungsdatum: 14.10.2009
Beiträge: 132

BeitragVerfasst am: 14.08.2013, 17:57    Titel: Antworten mit Zitat

zuerst einmal,

der C64 lief mit ~1MHz! nicht mit zwein.

zweitens haben peek und poke nicht in das betriebssystem eingegriffen das war wenn dann der user der die anwendet. ein poke an die falsche stelle und man konnte sich den c64 abschiesen. ein poke/peek an die richtige stelle und man konnte geile effekte erreichen.

meist wurden sie aber in zusammenhang mit sys eingesetz. man pokte meinst eine assembler routine in den freihen speicher und rief sie mit sys auf.

auf der andern seite find ich poke und peek auch bei FB manchmal sehr hilfreich lächeln


Salute
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Nullchecker



Anmeldungsdatum: 03.08.2013
Beiträge: 34

BeitragVerfasst am: 15.08.2013, 11:06    Titel: Antworten mit Zitat

Zitat:
zweitens haben peek und poke nicht in das betriebssystem eingegriffen

Das sehe ich allerdings wie volta. Mit PEEK hast du die Speicherstelle ausgelesen, mit POKE konntest du einen neuen Wert übermitteln, und somit auch eine Betriebsroutine des Betriebsystems ändern.
Z.B. die Geschwindigkeit des Cursorblinkens.

Zitat:
das war wenn dann der user der die anwendet. ein poke an die falsche stelle und man konnte sich den c64 abschiesen. ein poke/peek an die richtige stelle und man konnte geile effekte erreichen.

Da hast du Recht. lächeln

Zitat:
meist wurden sie aber in zusammenhang mit sys eingesetz. man pokte meinst eine assembler routine in den freihen speicher und rief sie mit sys auf
.
Richtig, nur in diesem Fall war es ja eine selbst geschriebene Assemblerroutine, z.B. ein Rahmen aus blinkenden Sternen bei gleichzeitiger Tastaturabfrage, um dem doch recht lahmen C64 Basic auf die Sprünge zu helfen.

Ansonsten auch dir ein Danke für deinen Beitrag, schön zu Wissen das es noch Leute gibt, die sich an den C64 erinnern können.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Haubitze



Anmeldungsdatum: 14.10.2009
Beiträge: 132

BeitragVerfasst am: 15.08.2013, 15:40    Titel: Antworten mit Zitat

hm ja gut in der zeropage hatte man wirklich viel BS-speicherzellen die in "echtzeit" veraendert wurden und man per peek/poke drinrumfuschen konnte. aber das BS direkt ueberschreiebn war so nicht moeglich. da ROMs,
man musste erst das BS in den ram kopieren, das ROM abschalten, dann erst konnte man das BS direkt aendern.

naja trozallem was ich hier erzaehle gehoert das ja mal garnich zum thema und ist somit irrelevant. zwinkern

und der c64 ist nicht LAHM ;D er ist nut etwas betagt grinsen

Salute
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Flo
aka kleiner_hacker


Anmeldungsdatum: 23.06.2006
Beiträge: 1210

BeitragVerfasst am: 16.08.2013, 05:01    Titel: Antworten mit Zitat

Haubitze hat Folgendes geschrieben:


und der c64 ist nicht LAHM ;D er ist nut etwas betagt grinsen

Salute


PAH, 1MHz ist ja SOOOO lame. Mein HP200LX ist 8x so schnell grinsen
_________________
MFG
Flo

Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.

zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Haubitze



Anmeldungsdatum: 14.10.2009
Beiträge: 132

BeitragVerfasst am: 16.08.2013, 11:33    Titel: Antworten mit Zitat

man sollte nicht immer nur auf die MHZ schaun sondern auch mal guggn wieviele takte ein befehl braucht um abgearbeitet zu sein Zunge rausstrecken
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 FreeBASIC. 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