Farbverlauf in TurboBasic und Assembler und Hochsprache

Moderator: Rockford

Antworten
Benutzeravatar
LarsImNetz
Beiträge: 19
Registriert: 24.08.2021 18:27
Has thanked: 7 times
Been thanked: 6 times
Kontaktdaten:

Farbverlauf in TurboBasic und Assembler und Hochsprache

Beitrag von LarsImNetz »

Hallo,

mit folgendem Basic-Programm kann man in Turbobasic XL einen Farbverlauf sehen...
Da sieht mal erst, wie lahm dieses Basic ist.

Code: Alles auswählen

DO 
  PAUSE %0
  FOR A=0 TO 4:NEXT A
  POKE 53274,14
  FOR A=4 TO 14 STEP 2:POKE 53274,A
  NEXT A
  POKE 53274,0
LOOP 
In Assembler sieht ein Farbverlauf etwa so aus, wobei hier der Code etwas unvollständig ist.

Code: Alles auswählen

loop
  lda vcount          ; Zeile vom aktuellen Rasterstrahl
  sta wsync            ; warte auf nächste Zeile
  sta colbk             ; Hintergrundfarbe setzen
; sta colpf2           ; falls auch die Vordergrundfarbe gesetzt werden soll.
  jmp loop
Hier wird jede 2. Zeile in einer anderen Farbe dargestellt und der Prozessor eigentlich zu >90% stillgelegt.

In (m)einer Hochsprache würde der Code so aussehen:

Code: Alles auswählen

PROGRAM farblauf
LOMEM $4000,runad

byte vcount=$D40B
byte wsync=$D40A
byte colbk=$D01A

begin
  while 1!=0 do
  begin
    wsync:=0
    colbk:=vcount
  end
end
Da die Sprache kein "do-loop" kennt, behelfe ich mir mit while 1!=0, man könnte auch while 1<>0 nehmen.

Einmal durch den Compiler getrieben, sieht das Ergebnis so aus, die ersten 19 Zeilen habe ich mal entfernt. Schön an meinem Compiler, er versucht den zugrunde liegenden Source als Kommentare mit einzubinden.

Code: Alles auswählen

?WHILE1
;
; while 1!=0 do
;
 LDY #<0
 CPY #<1 ; (14)
 BNE ?THEN1 ; (26)
?FA1
 JMP ?WEND1
?THEN1
;
; wsync:=0
;
 LDY #<0
 STY WSYNC
;
; colbk:=vcount
;
 LDY VCOUNT
 STY COLBK
 JMP ?WHILE1
?WEND1
Die Kommentare: Zahl in Klammer verrät mir, das hier der Peephole-Optimizer etwas gedreht hat.
Es ist nicht das Optimum, aber verdammt nah dran und brauchbar schnell. Dafür ist der Source-Code kürzer und besser lesbar.

LG
Lars

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast