Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » schnelles kopieren im BWS beim KC85/3 » Themenansicht

Autor Thread - Seiten: -1-
000
10.11.2016, 10:17 Uhr
Hobi



Wie kann man beim KC85/3 schnell ein 8x8 Zeichen kopieren? Es gibt zwar die Routine UP34, die jeweils eine Adresse liefert, aber die muesste im ungünstigsten Fall 8 mal aufgerufen werden.

Hat jemand eine schnellere Variante? eventuell mit Lookuptables?
--
-------------------------------------------
Corontäne
-------------------------------------------
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
10.11.2016, 17:04 Uhr
Mobby5



Wenn Du nur das 8x8 Zeichen kopierst, steht es nicht wirklich an dieser Stelle, sondern steht nur virtuell da. Die Farbe wird vom Originalzeichen auch nicht mit übernommen. Und so einfach ist das Kopieren auch nicht, da der Speicher ab der 33. Bildschirmspalte (von 1 angefangen) anders organisiert ist. Es müsste also zusätzlich geprüft werden, wo es herkommt und wo es hin soll.

Warum willst Du es eigentlich kopieren und schreibt es nicht einfach nochmal an die neue Stelle.
--
und ausserdem muss in Zeile 20 der Doppelpunkt durch ein Semikolon ersetzt werden
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
10.11.2016, 21:43 Uhr
Hobi



Die krude Aufteilung ist mir schon bewusst. Wie kann ich also effizient kleine Animationen anzeigen?


Zitat:
Warum willst Du es eigentlich kopieren und schreibt es nicht einfach nochmal an die neue Stelle.


Das ist ja auch ein Kopiervorgang, etwas neu zu schreiben. Um das Problem nochmal zu besser dazustellen. Ich habe also Grafiken, die aus Performancegründen jeweils im 8x8 Bits groß sind (15x15 oder 25x25 machen da wohl etwas mehr Probleme). Und diese Grafiken sollen vom Programm dargestellt werden.
--
-------------------------------------------
Corontäne
-------------------------------------------
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
11.11.2016, 09:15 Uhr
P.S.



@hobi
Dein Problem könnte evtl. mit der C&P-Funktion in einem Textverarbeitung-Programm vergleichbar sein. Die Character-Darstellung ist beim KC85/3_CAOS4.0 (80Zeichen/Zeile-Routine) auch in 8x8 organisiert. Wie das alles funktioniert und programmtechnisch (in Assembler) realisiert wurde, kannst Du in der Schlenzig-Bibel: "Tips und Tricks für kleine Computer" nachlesen - incl. dem vollständigen Quellcode von "WORDPRO'86" ...
Vielleicht hilft's.

Da ich o.g. Buch doppelt habe, könnte ich ein Exemplar abgeben ...

Das Wissen der Menschheit gehört allen Menschen! -
Wissen ist Macht - wer nur glaubt, der weis nichts! -
Jedoch - Unwissenheit schützt vor Strafe nicht! -
Gegen die Ausgrenzung von Unwissenden und für ein liberalisiertes Urheberrecht!
PS
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
11.11.2016, 14:08 Uhr
Mobby5




Zitat:
Hobi schrieb


Zitat:
Warum willst Du es eigentlich kopieren und schreibt es nicht einfach nochmal an die neue Stelle.


Das ist ja auch ein Kopiervorgang, etwas neu zu schreiben.



Ist es nicht, da ich ja das vorhandene Zeichen nicht Pixelweise auslese wollte um es Pixelweise woanders hin zu kopieren.

Wie sollen denn Deine Grafiken versetzt werden? Pixel oder Zeichenweise.
Wenn Du Grafiken hast, die 8x8 sind und diese Zeichenweise versetzt werden sollen, definiert man für die Zeichen mit ASCII-Code >127 einen extra Zeichensatz. Bedeutet: z.Bsp. ASCII-Code 128 ist Deine 8x8 Pixelgrafik. Wenn es größer sein soll, z.Bsp 16x16 Pixel oder was anderes mit Faktor 8 x Faktor 8, wird vor dem Zeichensetzen ein kleines Window (mit PageModus) an der entsprechenden Stelle auf dem Bildschirm definiert und dann die entsprechenden Zeichen (mit Deinem Zeichensatz) dort reingemalt.
--
und ausserdem muss in Zeile 20 der Doppelpunkt durch ein Semikolon ersetzt werden
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
11.11.2016, 23:13 Uhr
Hobi



Das Problem ist jetzt teilweise gelöst. Mein erster Versuch mit einer Lookup Tabelle war vertane Liebesmüh'.

Die Routine beim KC85-3 braucht in etwa 200 Taktzyklen (ohne den ganzen Call-overhead), die Lookuptabelle etwa 180. Die Original-Implementierung ist relativ schnell. Optimieren kann man aber dennoch, wenn man annimmt, dass die Bits 0..1 der jeweiligen Zeile 0 sind, dann wird der Algorithmus einfacher.

Da jeweils 8 Byte "hintereinander" im Speicher liegen, reicht es die Routine innerhalb eines ein 64x4 Feld nur einmal aufzurufen.

Also Bonus gibt es noch einen superschnelles Bildschirm löschen. Die Idee ist zwar geklaut, aber dennoch cool. Der Push HL Befehl braucht nur 11 Zyklen um ein 16 Bit Wort zu schreiben! Selbst beim KC85-4
Quellcode:
ld (hl),a
inc hl
...

brauchen sie noch 22.
--
-------------------------------------------
Corontäne
-------------------------------------------

Dieser Beitrag wurde am 11.11.2016 um 23:15 Uhr von Hobi editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek