Hey, cool, dass du dich mit sowas auf dem ST ganz neu befasst! Gefällt mir! Bin gespannt, wohin es führen wird!
Ansonsten: man kann die Schleife vereinfachen, indem man das Bild anders einliest - und zwar so, daß zunächstmal aller Zeilen des ersten Buchstabens hintereinander im Speicher liegen, dann nachfolgend alle Zeilen des zweiten Buchstabens usf. (dann klappt natürlich der Blitter nicht mehr, aber man spart ein paar Additionen für Wechsel in der Grafik).
Wie ich das Bild anders reinladen kann, weiß ich nicht. Natürlich hört sich das plausibel an. Aber bedenke, dann müsste ich das Bild nochmal zwischen kopieren...
Der "Trick" ist, das nicht erst beim Reinladen im Assembler-Code zu machen, sondern eher einen kleinen Converter zu basteln, der einem die Daten "offline" aus dem PI1 Bild einfach in eine andere Reihenfolge umformatiert und in einem eigenen Format abspeichert. Also das Format hat dann natürlich nichts mehr direkt mit PI1 zu tun, sondern ist was "eigenes". Aber das eigene Format kann dann eben optimal auf das jeweilige Problem zugeschnitten sein.
Früher hab ich solche Daten-Umformatierungs-Dinge direkt auf dem ST mit nem 20-Zeiler in Omikron Basic gemacht. Einfach die *.PI1-Datei in einen mem-block 1:1 reinladen, dann per peeks/pokes in einen zweiten mem-block umformatieren und dann den zweiten als eine *.DAT Datei auf Disk/Platte schreiben. Leider hab ich Omikron inzwischen komplett verlernt.
Im Assembler-Code liest man dann nur das *.DAT file ein und weiß ja, in welcher Reihenfolge die Daten da drin stehen. Für so einen Font - oder generell für "Tilesets" ist es am einfachsten, wenn die kompletten Daten des einzelnen Buchstaben direkt nacheinander im Speicher liegen. Und dann einfach ein Buchstabe nach dem anderen im Speicher liegt. Dann wird der Assembler-Code etwas einfacher & performanter. Man braucht nur die Adresse des Anfangs des ersten Zeichens und berechnet dann den Offset zu dem Start des gesuchten Zeichens per left-shifts des Ascii Codes. Die Longword-Tabelle kann man sich so komplett sparen.
Und auch das abziehen der $20 vom Ascii-Wert ist nicht nötig, wenn man als Startadresse der gesamten Daten-Tabelle nicht die nimmt wo die sichtbaren Zeichen im Speicher anfangen, sondern einfach einmalig $20 Zeichen-Größen (also $20*16*32 Bytes) im Speicher von der Startadresse abzieht und dann immer diese "korrigierte" Startadresse nimmt.
Achja - in dem Bilder-Lade-Thread hatte ich ja schon geschrieben, dass mein Ziel beim PNG-zu-Atari Konvertieren nicht nur ein *.PI1 File als Ergebnis-Format ist, sondern "eigene Formate". Was ich damit meinte war genau sowas wie hier beschrieben: eine beliebig große PNG-Datei mit einem "Tileset" entsprechend so umformatieren, dass die einzelnen Tiles einfach nacheinander im Speicher liegen...
(Mit meinem Konverter bin ich aber auch noch nicht fertig. Ich kann inzwischen aber schon mal beliebige PNGs per libpng einlesen. Aber das eigentliche konvertieren in die Bitplanes und Umsortieren im Speicher fehlt noch...)