
; Listing11i5.s - ein Wechsel zu einer gewöhnlichen Bar....
; rechte Taste zum Absenken der Bar; Sie könnten eine Tabelle machen
; um auf und ab zu bewegen

	SECTION	COPPERADVANCED,CODE

;	include	"DaWorkBench.s"	; entferne das; vor dem Speichern mit "wo"

*****************************************************************************
	include	"/Sources/startup2.s" ; speichern Copperlist etc.
*****************************************************************************

			;5432109876543210
DMASET	equ	%1000001010000000	; nur Copper DMA

WAITDISK	equ	30				; 50-150 zur Rettung (je nach Fall)

Start:
	lea	$dff000,a5
	move.w	#DMASET,$96(a5)		; DMACON - aktivieren Copper
	move.l	#Copperlist,$80(a5)	; Zeiger Copperlist
	move.w	d0,$88(a5)			; Start Copperlist
	move.w	#0,$1fc(a5)			; AGA "deaktivieren"
	move.w	#$c00,$106(a5)		; AGA "deaktivieren"
	move.w	#$11,$10c(a5)		; AGA "deaktivieren"

Mouse:
	move.l	#$1ff00,d1			; Bit zur Auswahl durch UND
	move.l	#$12c00,d2			; warte auf Zeile $12c
WarteY1:
	move.l	4(a5),d0			; VPOSR und VHPOSR - $dff004/$dff006
	and.l   d1,d0				; wählen Sie nur die Bits der vertikalen Pos.
	cmp.l   d2,d0				; warte auf Zeile $12c
	bne.s	WarteY1
WarteY2:
	move.l	4(a5),d0			; VPOSR und VHPOSR - $dff004/$dff006
	and.l   d1,d0				; wählen Sie nur die Bits der vertikalen Pos.
	cmp.l   d2,d0				; warte auf Zeile $12c
	beq.s	WarteY2

	btst	#2,$dff016			; rechte Maustaste?
	bne.s	DontDown
	cmp.b	#$c0,WaitCoord		; Bar schon niedrig genug?
	bhi.s	DontDown
	addq.b	#1,WaitCoord

DontDown:
	bsr.s	CoolRaster

	btst	#6,$bfe001			; Maus gedrückt?
	bne.s	Mouse
	rts

*****************************************************************************
;	Hauptroutine
*****************************************************************************

CoolRaster:
	addq.w	#2,WaitCoord
	bsr.s	CoolEffect
	bsr.s	ScrollColor			; schieben Sie die Farben der Tabelle
	rts


*****************************************************************************
; Bildlaufroutine für die Farben des roten Teils des Effekts
; Die Farben werden direkt in das ColorTab1 gerollt
*****************************************************************************

ScrollColor:
	lea	ColorTab1(pc),a0
	move.w	(a0),30*2(a0)		; speichern Sie die erste Farbe unten
	lea	ColorTab1+2(pc),a1		; Adresse zweite Farbe
	moveq	#31-1,d1			; 30 Farben zum "Bewegen"
ScrollTab:
	move.w	(a1)+,(a0)+			; Farbe 2 in Farbe 1, Farbe 3 in
	dbra	d1,ScrollTab		; Farbe 2 etc.
	rts

*****************************************************************************

;	       _ ____   ____ _
;	             \ /
;	   .:::::::::: ::::::::::.
;	( :::        + +        ::: )
;	   `:::::::::: ::::::::::'
;	       /__  /  \\  __\
;	       \_\ (_____) /_/ 
;	    _/    \_ ___ _/    \_
;	    |       V   V       |
;	   /|\                 /|\
;	   |||                 |||
;

CoolEffect:
	lea	CopperBuffer1,a0
	lea	ColorTab1(pc),a1		; Farbtabelle 1
	lea	ColorTab2(pc),a2		; Farbtabelle 2

	moveq	#29-1,d0			; 29 Zeilen für den Effekt
	move.w	WaitCoord(pc),d1	; aktuelle Wartezeit horizontal und vertikal in d1
WriteBothLines:
	move.w	d1,(a0)+			; pack es in die Copperlist
	move.w	#$fffe,(a0)+		; gefolgt von $fffe
	move.w	#$0180,(a0)+		; COLOR00
	move.w	(a1)+,(a0)+			; setzen Sie die Farbe aus Tabelle1
	add.w	#$0020,d1			; bewegen Sie die Wartezeit 20 Schritte voraus
	move.w	d1,(a0)+			; und lege es in die Copperlist
	move.w	#$fffe,(a0)+		; gefolgt von $fffe
	move.w	#$0180,(a0)+		; COLOR00
	move.w	(a2)+,(a0)+			; setzen Sie die Farbe aus Tabelle2
	add.w	#$0020,d1			; bewegen Sie die Wartezeit 20 Schritte voraus
	dbra	d0,WriteBothLines
	rts


;	Tabelle des roten Schattens

ColorTab1:	; 30 Werte .w RGB für COLOR00 in Copperlist
	dc.w	$100,$200,$300
	dc.w	$400,$500,$600,$700,$800,$900,$a00,$b00,$c00,$d00,$e00,$f00
	dc.w 	$e00,$d00,$c00,$b00,$a00,$900,$800,$700,$600,$500,$400,$300
	dc.w	$200,$100,$101
	
;	Tabelle des grauen Schattens

ColorTab2:	; 30  Werte .w RGB für COLOR00 in Copperlist
	dc.w	$000
	dc.w	$111,$222,$333,$444,$555,$666,$777,$888,$999,$aaa,$bbb,$ccc
	dc.w	$ddd,$eee,$ddd,$ccc,$bbb
	dc.w	$aaa,$999,$888,$777,$666,$555,$444,$333,$222,$111,$000
	dc.w	$000

;	Dies ist die erste Wartezeit

WaitCoord:
 	dc.w $3a07


*****************************************************************************
;	Copperlist
*****************************************************************************

	SECTION	GRAPHIC,DATA_C

Copperlist:
	dc.w	$100,$200			; BPLCON0 - keine Bitplanes
	dc.w	$0180,$0000			; COLOR00 schwarz
	dc.w	$2b07,$fffe			; warte auf Zeile $2b

CopperBuffer1:
 	dcb.w	29*8,0

	dc.w	$0180,$000			; COLOR00 schwarz
	dc.w	$d007,$fffe			; warte auf Zeile $d0
	dc.w	$180,$035
	dc.w	$d207,$fffe			; warte auf Zeile $d0
	dc.w	$180,$047
	dc.w	$d607,$fffe			; warte auf Zeile $d0
	dc.w	$180,$059

	dc.w	$ffff,$fffe			; Ende Copperlist

	end
