Falls du das Ganze unter TSB durchführst: warum nimmst du nicht FCHR? Das erledigt auch die Positionierung mit und du sparst dir die Konvertierung. Müsste geschwindigkeitsmäßig mit PRINT AT plus Konvertierung locker mithalten können.
Arndt
Es gibt 74 Antworten in diesem Thema, welches 8.075 mal aufgerufen wurde. Der letzte Beitrag (
Falls du das Ganze unter TSB durchführst: warum nimmst du nicht FCHR? Das erledigt auch die Positionierung mit und du sparst dir die Konvertierung. Müsste geschwindigkeitsmäßig mit PRINT AT plus Konvertierung locker mithalten können.
Arndt
Falls du das Ganze unter TSB durchführst: warum nimmst du nicht FCHR?
Ich glaube nicht das FCHR in diesem Fall schneller ist. Das ist sicher sauschnell wenn man viermal das gleiche Zeichen ausgeben will.
Aber wenn man vier unterschiedliche Zeichen braucht dann ist PRINT AT(x,y)A$(0) meiner Einschätzung nach schneller.
Und die Konvertierung findet ja schon am Programmanfang statt. Das verbraucht dann später keine Zeit mehr.
Da werden bereits beim Start alle 4er Zeichenblöcke in ein Array gefüllt und können dann schnell und elegant mit dem Index abgerufen werden.
Wenn ich mir das so recht überlege, ist die Funktion von Mr.SyS perfekt geeignet.
Es ist ja eigentlich ganz einfach: Die Bildschirmcodes 0-127 sind die normalen,- und 128-255 die inversen Zeichen.
Dann braucht man ja nur zur prüfen, ob der übergebene Bildschirmcode >127 ist. Und wenn ja dann zieht man 128 ab und merkt sich das.
Ich habe das jetzt mal so gelöst und ich denke das funktioniert in jedem Fall immer.
100 def fn ba(b)=b+64+64*(b<64 and b>31)+32*(b<96 and b>63)
110 input"bildschirmcode";bc
115 if bc>127 then bc=bc-128:rv=1
120 as=fn ba(bc)
125 b$=str$(as)
130 if rv=0 then a$=b$
150 if rv=1 then a$="18,"+b$+" ,146"
160 print"ascii-code(s):"
170 print a$
Und ja: Ich schreibe hier ASCII-Codes. Weil es im Handbuch des C64 an mehreren Stellen so genannt wird.
Die Bezeichnung PETSCII kommt im Handbuch des C64 nicht vor. Als Alternative würde ich noch vorschlagen: Choplifter-Codes. Findet man aber auch nur in spezieller, mit Epson-Druckern gedruckter, Fachliteratur. ![]()
Und ja: Ich schreibe hier ASCII-Codes. Weil es im Handbuch des C64 an mehreren Stellen so genannt wird.
Die Bezeichnung PETSCII kommt im Handbuch des C64 nicht vor. Als Alternative würde ich noch vorschlagen: Choplifter-Codes. Findet man aber auch nur in spezieller, mit Epson-Druckern gedruckter, Fachliteratur.
Leg einfach mal eine ASCII- und eine PETSCII-Code Tabelle nebeneinander. Dann ist der Unterschied nicht schwer zu erkennen.
Aber solange man sich aus der C64-Welt nicht rausbewegt und nichts anderes kennt, ist es auch egal. ![]()
Aber solange man sich aus der C64-Welt nicht rausbewegt und nichts anderes kennt, ist es auch egal.
Da wir hier über ein C64-Programm reden, ist es tatsächlich egal. Du bist also schon einen Schritt weiter gekommen.
Omega schaue dir doch mal den Post 35 an.. da habe ich das gestern abend mal probiert.. Das Programm gibt dir dann den string aus so wie du das wolltest.
Omega schaue dir doch mal den Post 35 an.. da habe ich das gestern abend mal probiert..
Äh, ja. Ich bin gestern Abend gar nicht zum Angucken gekommen weil ich da mit meinem Tablet rumgewurschtelt habe.
So eine voll ausgearbeitete Lösung wollte ich noch gar nicht. Erstmal nur wissen, wie man von Bildschirmcode nach ASCII kommt.
Das ist ja jetzt geklärt. Mit Deiner Funktionsdefinition geht das ja ganz wunderbar.
Wie es dann weitergeht, muss sich erst noch aus dem Zusammenhang ergeben.
PETSCII ist eigentlich ASCII. Aber in einer Version aus den 60er Jahren.
Überall wurde das durch eine Version aus den 70ern abgelöst und dort dann natürlich immer noch ASCII genannt.
PETSCII ist eine Wortschöpfung. Offiziell richtig ist schon auch am Commodore der Begriff ASCII. Aber halt irreführend
PETSCII ist eine Wortschöpfung.
Also ich habe eine ganz klare Vorstellung davon, was PETSCII ist. ![]()
Bitte melde dich an, um diesen Anhang zu sehen.
Aber selbst mit vorberechneten Strings ist der Geschwindigkeitsgewinn doch minimal, wenn man noch die Ausgabe der Ctrl-Codes dazunimmt. Wenn es überhaupt schneller ist.
Dann probieren wir das doch einfach mal aus. ![]()
Bitte melde dich an, um diesen Anhang zu sehen.
Bitte melde dich an, um diesen Anhang zu sehen.
Die folgende wissenschaftliche Illustration verdeutlicht dies zusätzlich
:
Bitte melde dich an, um diesen Anhang zu sehen.
Und die Konvertierung findet ja schon am Programmanfang statt.
Warum findet die Konvertierung erst am Programmanfang statt und nicht schon vorher, also beim Programmieren?
Ja, auch nicht schlecht. Die Funktionsdefinition von Mr.SyS ist aber auch nicht ohne.
def fn ba(b)=b+64+64*(b<64 and b>31)+32*(b<96 and b>63)
Warum findet die Konvertierung erst am Programmanfang statt und nicht schon vorher, also beim Programmieren?
Genau, darauf zielte auch meine Frage, ob man die Konvertierung nicht schon auf dem PC machen könnte.
Und dann das Ergebnis z.B. mit "petcat" (Teil von "vice") in das C64-Programm bringen.
Edit: Hatte hier Code gepostet, aber die Berechnungen scheinen nicht zu stimmen. Also lösche ich das erstmal wieder. Sorry ...
Was ist denn das jetzt? Wenn ich diese Tabelle zugrundelege,
Bitte melde dich an, um diesen Link zu sehen.
und ich will ich einen Screen-Wert von 96 nach PETSCII konvertieren, dann steht rechts "96-127", und da muß man "+64" rechnen, um zum Ausgsangswert links (160) zurückzukommen.
Jetzt steht aber rechts zwei Zeilen darunter auch noch "96-126", und man soll "+128" rechnen.
Das heißt, die Zuordnung ist gar nicht eindeutig?
Kommt mir komisch vor - und verwirrt natürlich mein Programm.
Diese Übersicht listet alle PETSCII-Codes von 0-255 und zeigt mit rot auch an, welche der doppelten Zeichen nicht benutzt werden sollte:
Bitte melde dich an, um diesen Link zu sehen.
Diese Übersicht listet alle PETSCII-Codes von 0-255 und zeigt mit rot auch an, welche der doppelten Zeichen nicht benutzt werden sollte:
Bitte melde dich an, um diesen Link zu sehen.
Wow, die kannte ich noch gar nicht. Hätte ich neulich gebrauchen können für die Konvertierungsfunktion im Studio-Calculator. Dann werde ich das mal abgleichen. Obwohl ich mir dabei selbst schon ausgiebig Gedanken gemacht hatte, welcher Bezug der sinnvollere ist.
Das Thread-Thema hab ich allerdings trotzdem noch nicht wirklich verstanden. Wofür sollte ich in BASIC die Umwandlung von PETSCII nach Screen-Code brauchen, wenn dies der BASIC-Interpreter bereits selbst macht? Wenn ich schreibe PRINT "DEINE MUDDA!", dann habe ich den Screen-Code doch schon im Bildschirmspeicher. Wenn überhaupt, hatte ich eine Umwandlung bislang immer nur beim Programmieren gebraucht, aber doch nicht während der Laufzeit des Programms. ![]()