Untertitel: ... heute so programmiert (würde jedenfalls auch in diese Rubrik passen).
Hier gibt es die originale Version für den C128. Ich hatte die Routine auch schon seinerzeit, um 1991, auf den Archimedes portiert; allerdings noch mit einem "65xx-Mindset" und darum war die dann nicht ganz so schnell wie sie hätte sein können. Aber jetzt:
- DIM code 1023
- :
- FOR pass=0 TO 3 STEP 3
- P%=code
- [OPT pass
- .Munch
- MOV R0,#0
- ADR R1,Munch_03
- LDR R2,[R1]
- MOV R3,#32
- .Munch_00
- MOV R4,#40
- .Munch_01
- LDR R1,[R2] :EOR R0,R0,R1:STR R0,[R2]
- LDR R1,[R2,#160] :EOR R0,R0,R1:STR R0,[R2,#160]
- LDR R1,[R2,#320] :EOR R0,R0,R1:STR R0,[R2,#320]
- LDR R1,[R2,#480] :EOR R0,R0,R1:STR R0,[R2,#480]
- LDR R1,[R2,#640] :EOR R0,R0,R1:STR R0,[R2,#640]
- LDR R1,[R2,#800] :EOR R0,R0,R1:STR R0,[R2,#800]
- LDR R1,[R2,#960] :EOR R0,R0,R1:STR R0,[R2,#960]
- LDR R1,[R2,#1120]:EOR R0,R0,R1:STR R0,[R2,#1120]
- ADD R2,R2,#4
- SUBS R4,R4,#1:BNE Munch_01
- ADD R2,R2,#1120
- SUBS R3,R3,#1:BNE Munch_00
- MOV R0,#19:SWI "OS_Byte"
- B Munch
- .Munch_02
- EQUD 149
- EQUD -1
- .Munch_03
- EQUD 0
- ]
- NEXT
- :
- MODE 9:OFF
- :
- FOR y%=0 TO 1023 STEP 256
- FOR x%=0 TO 1279 STEP 256
- LINE x%,y%,x%+255,y%+255
- LINE x%,y%+255,x%+255,y%
- NEXT
- NEXT
- :
- SYS "OS_ReadVduVariables",Munch_02,Munch_03:CALL Munch
Selbst auf den langsamsten Archimedes Rechnern mit 'nur' 8 MHz ARM2 Prozessoren läuft die Animation mit 50 Hz im Frame. Durch die Befehle 'MOV R0,#19:SWI "OS_Byte"' wird gewartet, daß der Rasterstrahl in den unteren Rahmen eintritt und das synchronisiert so die Routine mit dem Bildschirmaufbau.
Der verwendete Bildschirmmodus (MODE 9) hat 320x256 Punkte in 16 Farben, genutzt werden allerdings nur die Farben Schwarz und Weiß - aus Hardwaregründen gibt es die gleiche Auflösung nur mit 1 Bit/Pixel nicht auf dem VIDC - dann hätte ich auch LDRB/STRB in der Hauptschleife nutzen können. Es hätte aber geschwindigkeitstechnisch auch keinen Unterschied gemacht.
Die innere Schleife ist 8-fach ausgerollt und vollzieht gleichzeitig den Aufbau der Bitmap beim VIC-II am C64 nach, was schon für den Effekt wesentlich ist. Mit dem Aufruf SYS "OS_ReadVduVariables" holt sich das Programm ganz OS-konform die Startadresse des Bildschirmspeichers.
Geht, funktioniert, und es gilt nach wie vor: Der Effekt ist nichts für Leute, bei denen flackernde Muster epileptische Anfälle auslösen können!
Viele Grüße,
Michael