010
26.11.2024, 11:06 Uhr
Dresdenboy
|
Ich bekam auf anderem Wege einen Vorschlag für einen Effekt, wie im Film Matrix mit den fallenden Buchstaben ("Digital Rain"). Da es für ein neudeutsch "rapid prototyping" gut in Turbo Pascal umsetzbar war (und damit auch der Algo besser lesbar ist), habe ich es mal für den BIC mit seinen Zeichencodes im Bildspeicher umgesetzt. Da die Textausgaben über eine Prozedur erfolgen, sollte das leicht anpassbar sein. Eine Lösung mit TP-Mitteln (gotoxy und write) ist langsam, mit flackerndem Cursor und reagiert auch nicht bei "keypressed". Da wäre ein direktes Schreiben in den Bildspeicher via mem[addr] sinnvoll und erspart auch die Umrechnung in Zeilen und Spalten.
Quellcode: | program digitalrain;
const len=10; max=60; width=80; height=25;
var pos : array[0..max] of integer; c : array[0..max] of byte; j : byte;
procedure setchar(p:integer; chr,col:byte); begin if (p<0) or (p>=width*height) then exit; {Position ausserhab des Bildschirms} port[$99]:=$49; {CURS: Cursor auf Word im Speicher setzen} port[$98]:=p and 255; port[$98]:=p shr 8; port[$99]:=$20; {WDAT word: Wort schreiben} port[$98]:=chr; port[$98]:=col; end;
begin clrscr; randomize; port[$99]:=$4B; {CCHAR: Cursor ausschalten} port[$98]:=9; port[$98]:=0; port[$98]:=0; for j:=0 to max do {initiale Zeichen} begin pos[j]:=random(width*height); {Bildschirmposition} c[j]:=random(255); {Zeichencode} end; repeat for j:=0 to max do begin setchar(pos[j],c[j],15); {weiss} setchar(pos[j]-width,c[j],10); {1 Zeile darueber hellgruen} setchar(pos[j]-3*width,c[j],2); {3 Z. darueber gruen} setchar(pos[j]-len*width,0,0); {len Z. darueber loeschen} pos[j]:=pos[j]+width; {naechste Zeile} if pos[j]>=(24+len)*width then {fertig -> neues Zeichen} begin pos[j]:=random(width); {Startposition} c[j]:=random(255); {Zeichencode} end; end; until keypressed; port[$99]:=$4B; {CCHAR: Cursor wieder einschalten} port[$98]:=$89; port[$98]:=$20; port[$98]:=$70; end. |
Für die ganzen port-Ausgaben zum Abschalten des Cursors oder Setzen des Zeichens wären für andere Systeme jeweils eine Anpassung bzw, einfach Weglassen des Codes nötig.
Ausgabe:
VG, Matthias -- ___________________________________ Produktionen im Rahmen der "The Computer Art Community" (Demoszene): https://demozoo.org/sceners/64936/, YT-Kanal: https://www.youtube.com/@4lpha0ne/videos Programmierung seit '86 in BASIC: KC85/3, C64, A1200, PC | ASM: LC-80, C64, KC87, A1200, NeoGeo, PC, Mega 65, µC | Turbo Pascal: BIC, PC | C: RS/6000, Alpha, PC, µC | C++, Java, Javascript, Rust, Lua, Perl, PHP u.a. auf PC HW: LC-80, BIC A5105 komplett, KC87, KC85/2-4, KCC, C64s, C16, Plus/4s, A500s, A1200, Mega 65, ESP32s, RasPis, PCs, Laptops, MR 610, ... |