15.10.2021, 23:57
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.
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.
Beispiel Screenshot:
[attachment=110]
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.
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]