AmiBlitz³

Normale Version: BlitzMode Interlace
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Es scheint immer mal wieder die Frage aufzutauchen, wie man ein Interlace-Display aufbaut. Dabei steht es doch in der Anleitung.

Ok, die Anleitung ist nicht immer fehlerfrei und AGA macht gelegentlich einen Strich durch die Rechnung, aber was soll's.

Interlace erfordert normalerweise eine besondere Behandlung der Copperliste, aus der das Display aufgebaut ist.

Da das Display nur noch halb so schnell aufgebaut wird (immer erst ein Halbbild, gerade, dann das andere, ungerade), und der Vblank Interrupt dies auch bei jedem Wechsel anzeigt, können wir dies benutzen, um das jeweilige Halbbild anzuzeigen. Damit das funktioniert, muß aber das angezeigte Halbbild natürlich jede zweite Zeile überspringen.
Das erreichen wir, indem wir die Zeilenbreite (Modulo, was übersprungen wird, um die nächste Zeile anzusteuern), die das Display (Slice) erwartet, verdoppeln. Die unnütze nächste Zeile verschwindet quasi rechts von der aktuellen im Nichts. Wink

Slice 0,44,`1,`2 / 2,$fff8,`3,8,32,`1+`1,`1+`1

Außerdem müssen wir das LACE Bit setzen in einem Spezialregister.
Dafür hat Blitz2 eine Abkürzung eingebaut: SetBplcon0.

Hier ist der Sourcecode im Beispiel. Macro benutzt, einfach mal so.

Code:
Macro laceblitz  ;w, h, d

 BitMap0,`1,`2,`3

 VWait50

 SetBPLCON0 4   ;set lace bit!

 BLITZ
                    ;$fff9 for HiRes
 Slice0,44,`1,`2 / 2,$fff8,`3,8,32,`1+`1,`1+`1


 SetInt5   ;VBI

   ;If Peek.w($dff004)<0 Show 0,0,0 Else Show 0,0,1  ;doesn't work on AGA??
   lfr.b=1-lfr     ;swap lace frame#
   Show 0,0,lfr    ;lace frame# becomes y offset to show

 End SetInt

Use BitMap0:BitMapOutput0


End Macro


!laceblitz {320,400,2}

RGB 0,1,2,5
RGB 1,15,14,13

NPrint""
NPrint "hello world!"


Circle 160,200,90,180,1

Line   70,380,250,20,1


MouseWait


ClrInt5    ;kill VBI

SetBPLCON0 0

VWait 50

End


Beispiel Screenshot:
[attachment=110]
Mal sehen, wie das mit der 'neuen' displaylib funktioniert...