Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Nullchecker
Anmeldungsdatum: 03.08.2013 Beiträge: 34
|
Verfasst am: 11.08.2013, 16:42 Titel: Buchstaben einzeln erscheinen lassen |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 11.08.2013, 17:20 Titel: |
|
|
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 |
|
 |
Nullchecker
Anmeldungsdatum: 03.08.2013 Beiträge: 34
|
Verfasst am: 11.08.2013, 17:45 Titel: |
|
|
Es gibt also keine Adresse, die ich Ansprechen kann, um die
Geschwindigkeit der Text- bzw. Zeichenausgabe auf dem Bildschirm zu beeinflussen? |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 11.08.2013, 18:44 Titel: |
|
|
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 |
|
 |
Nullchecker
Anmeldungsdatum: 03.08.2013 Beiträge: 34
|
Verfasst am: 11.08.2013, 20:57 Titel: |
|
|
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 |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 11.08.2013, 21:07 Titel: |
|
|
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. )
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 |
|
 |
Nullchecker
Anmeldungsdatum: 03.08.2013 Beiträge: 34
|
Verfasst am: 12.08.2013, 11:46 Titel: |
|
|
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
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 |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 12.08.2013, 13:31 Titel: |
|
|
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 |
|
 |
Nullchecker
Anmeldungsdatum: 03.08.2013 Beiträge: 34
|
Verfasst am: 13.08.2013, 08:31 Titel: |
|
|
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!  |
|
Nach oben |
|
 |
Haubitze
Anmeldungsdatum: 14.10.2009 Beiträge: 132
|
Verfasst am: 14.08.2013, 17:57 Titel: |
|
|
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
Salute |
|
Nach oben |
|
 |
Nullchecker
Anmeldungsdatum: 03.08.2013 Beiträge: 34
|
Verfasst am: 15.08.2013, 11:06 Titel: |
|
|
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.
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 |
|
 |
Haubitze
Anmeldungsdatum: 14.10.2009 Beiträge: 132
|
Verfasst am: 15.08.2013, 15:40 Titel: |
|
|
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.
und der c64 ist nicht LAHM ;D er ist nut etwas betagt
Salute |
|
Nach oben |
|
 |
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 16.08.2013, 05:01 Titel: |
|
|
Haubitze hat Folgendes geschrieben: |
und der c64 ist nicht LAHM ;D er ist nut etwas betagt
Salute |
PAH, 1MHz ist ja SOOOO lame. Mein HP200LX ist 8x so schnell  _________________ 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 |
|
 |
Haubitze
Anmeldungsdatum: 14.10.2009 Beiträge: 132
|
Verfasst am: 16.08.2013, 11:33 Titel: |
|
|
man sollte nicht immer nur auf die MHZ schaun sondern auch mal guggn wieviele takte ein befehl braucht um abgearbeitet zu sein  |
|
Nach oben |
|
 |
|