Software > Coding

Omikron Compiler bitblt

<< < (2/7) > >>

mcknopf:
Hallo,
bin jetzt, dank Hatari selber etwas schlauer. In der Hatari STE Emulation funktioniert das Scrolling per Blitter, wenn dieser im Desktop aktiviert ist, sowohl im Interpreter als auch im kompilierten Code. Beim Falcon scheint er den Blitter im Interpreter zu nutzen, im kompilierten Programm nicht. Hatari hängt sich im Falcon Modus sogar auf, während der echte Falcon extrem langsam scrollt, sogar noch langsamer wie der emulierte STE bei deaktiviertem Blitter.

Das eigentliche Programm scrollt in alle Richtungen, wunderbar unkompliziert mit dem bitblt Befehl

Ich hänge mal ein vereinfachtes Programm mit horizontalem Scrolling von unten nach oben, das ein Karomuster scrollt, an.
Ich befürchte ich muss für den Falcon die Scrollroutine durch Direktprogrammierung des Blitters machen, deutlich komplizierter als die bitblt Routine. Oder kann das mal jemand mit Omikron Basic 5.x testen? Vielleicht funktioniert es damit?!

czietz:
Ich hab's mir angesehen - in Hatari, denn an meinen echten Falcon komme ich z.Zt. nicht ran. Das Problem liegt nicht an BITBLT, sondern am Befehl WVBL ("wait for VBL"), den Du davor aufrufst. Im Interpreter nutzt WVBL artig die dafür vorgesehene XBIOS-Funktion Vsync(). In der compilierten Version nutzt die BASIC-Bibliothek (BASLIB_4, im Fall Deines Testprogramms) stattdessen dreckige Tricks. Genauer gesagt: Sie beobachtet den Videoadresszähler direkt und schaut, wann dieser seinen Endwert erreicht. Das funktioniert im Falcon nicht zuverlässig (und im Hatari-emulierten Falcon offenbar gar nicht). Es war mir schon vorher aufgefallen, dass Omikron Basic nicht immer sauber programmiert ist.

Zum Glück gibt es eine Lösung. Du rufst direkt Vsync() auf. Probiere mal die angehängten Änderungen Deines Beispiels - auch auf dem echten Falcon.

Arthur:
Wenn's nicht sein muß finde ich  *.LST besser als *.BAS dann kann man sich das  intressehalber auch im Editor anschauen... nur so als Tipp.

czietz:
Also manchmal ist dieses Forum echt unglaublich! Ich löse hier ein komplexes Debugging-Problem und der Kommentar dazu ist "also ein anderes Dateiformat hätte ich besser gefunden".  >:(

Ich bin mir sicher, @mcknopf kann mit den Dateianhängen etwas anfangen - und das ist letztlich, was zählt.

Thorsten Otto:

--- Zitat von: czietz am Fr 24.12.2021, 10:08:31 ---In der compilierten Version nutzt die BASIC-Bibliothek (BASLIB_4, im Fall Deines Testprogramms) stattdessen dreckige Tricks. Genauer gesagt: Sie beobachtet den Videoadresszähler direkt und schaut, wann dieser seinen Endwert erreicht.

--- Ende Zitat ---

Das hätten sie sich besser mal aus dem TOS abschauen sollen: https://github.com/th-otto/tos1x/blob/1b85d6fc1c6fe43ad1228cde3b3a51050272928b/bios/startup.S#L1968

Die Routine dort wird nur während des bootens benutzt, nicht bei Vsync(). Aber sie benutzen den Timer-B als event-counter, das müsste denke ich selbst beim Falcon funktionieren.

PS: hammerhart, wie schnell du das Problem mal wieder gefunden hast.

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln