
; Listing5m2.s	"SCHLIESSEN"  DES VIDEOFENSTERS MIT DEN DIWSTART/STOP ($8e/$90)

	SECTION  CIPundCOP,CODE

Anfang:
	move.l	4.w,a6		; Execbase in a6
	jsr	-$78(a6)	; Disable - stoppt das Multitasking
	lea	GfxName(PC),a1	; Adresse des Namen der zu öffnenden Library
	jsr	-$198(a6)	; OpenLibrary
	move.l	d0,GfxBase	; speichere diese Adresse in GfxBase
	move.l	d0,a6
	move.l	$26(a6),OldCop	; hier speichern wir die Adresse der Copperlist
			; des Betriebssystemes (immer auf $26 nach GfxBase)

;	POINTEN AUF UNSERE BITPLANES

	MOVE.L	#PIC,d0		; in d0 kommt die Adresse unserer PIC
	LEA	BPLPOINTERS,A1	; in a1 kommt die Adresse der Bitplane-
; Pointer der Copperlist
	MOVEQ	#2,D1		; Anzahl der Bitplanes -1 (hier sind es 3)
				; für den DBRA - Zyklus

POINTBP:
	move.w	d0,6(a1)	; kopiert das niederwertige Word der Plane-
				; Adresse ins richtige Word der Copperlist
	swap	d0		; vertauscht die 2 Word in d0 (1234 > 3412)

	move.w	d0,2(a1)	; kopiert das hochwertige Word der Adresse des 
				; Plane in das richtige Word in der Copperlist
	swap	d0		; vertauscht erneut die 2 Word von d0
	ADD.L	#40*256,d0	; Zählen 10240 zu D0 dazu, -> nächstes Plane

	addq.w	#8,a1		; zu den nächsten Bplpointers in der Cop
	dbra	d1,POINTBP	; Wiederhole D1 mal POINTBP (D1=n. bitplanes)

	move.l	#COPPERLIST,$dff080	; COP1LC - "Zeiger" auf unsere COP
	move.w	d0,$dff088		; COPJMP1 - Starten unsere COP
	move.w	#0,$dff1fc		; FMODE - Deaktiviert das AGA
	move.w	#$c00,$dff106		; BPLCON3 - Deaktiviert das AGA

mouse:
	cmpi.b	#$ff,$dff006	; Sind wir auf Zeile 255?
	bne.s	mouse		; Wenn nicht, geh noch nicht weiter

	btst	#2,$dff016	; wenn die rechte Maustaste gerdückt ist, dann
	beq.s	Warte		; überspringe die Scrollroutine (blockiert)

	bsr.w	DIWHORIZONTAL	; Zeigt die Funktion des DIWSTART und DIWSTOP
	bsr.w	DIWVERTIKAL	; 

Warte:
	cmpi.b	#$ff,$dff006	; Sind wir auf Zeile 255?
	beq.s	Warte		; Wenn ja, geh nicht weiter, warte!

	btst	#6,$bfe001	; linke Maustaste gedrückt?
	bne.s	mouse		; wenn nicht, zurück zu mouse:

	move.l	OldCop(PC),$dff080	; Pointen auf die SystemCOP
	move.w	d0,$dff088		; starten die alte COP


	move.l	4.w,a6
	jsr	-$7e(a6)	; Enable - stellt Multitasking wieder her
	move.l	GfxBase(PC),a1	; Basis der Library, die es zu schließen gilt
				; (Libraries werden geöffnet UND geschlossen!)
	jsr	-$19e(a6)	; Closelibrary - schließt die Graphics lib
	rts
 
; DATEN



GfxName:
	dc.b	"graphics.library",0,0

GfxBase:		; Hier hinein kommt die Basisadresse der graphics.lib,
	dc.l	0	; ab hier werden die Offsets gemacht

OldCop:			; Hier hinein kommt die Adresse der Orginal-Copperlist
	dc.l	0	; des Betriebssystemes



DIWHORIZONTAL:
	CMPI.B	#$FF,DIWXSTART	; Sind wir bei maximal DIWSTART angekommen?
	BEQ.S	ENDE		; wenn ja, dann können wir nicht weiter
	ADDQ.B	#2,DIWXSTART	; wenn nicht, dann zähl 1 dazu
ENDE:
	TST.B	DIWXSTOP	; Sind wir beim Minimum von DIWSTOP? ($00)?
	BEQ.S	ENDE2		; wenn ja können wir nicht noch mehr abziehen
	SUBQ.B	#2,DIWXSTOP	; wenn nicht, 1 wegzählen
ENDE2:
	RTS			; Ende der Routine, Ausstieg


DIWVERTIKAL:
	CMPI.B	#$95,DIWYSTOP	; Sind wir beim richtigen DIWSTOP angekommen?
	BEQ.S	ENDE3		; wenn ja, brauchen wir nicht weitergehen
	ADDQ.B	#1,DIWYSTART	; zählen 1 zum Start dazu
	SUBQ.B	#1,DIWYSTOP	; ziehen 1 vom Stop ab
ENDE3:
	RTS			; Raus aus der Routine

	SECTION	GRAPHIC,DATA_C

COPPERLIST:
	dc.w	$120,$0000,$122,$0000,$124,$0000,$126,$0000,$128,$0000 ; SPRITE
	dc.w	$12a,$0000,$12c,$0000,$12e,$0000,$130,$0000,$132,$0000
	dc.w	$134,$0000,$136,$0000,$138,$0000,$13a,$0000,$13c,$0000
	dc.w	$13e,$0000

	dc.w	$8E		; DIWSTART - Anfang Videofenster
DIWYSTART:
	dc.b	$2c		; DIWSTRT $YY
DIWXSTART:
	dc.b	$81		; DIWSTRT $XX (erhöhen es bis $ff)

	dc.w	$90		; DIWSTOP - Ende des Videofensters
DIWYSTOP:
	dc.b	$fe		; DiwStop YY
DIWXSTOP:
	dc.b	$c1		; DiwStop XX (verringern es bis $00)
	dc.w	$92,$0038	; DdfStart
	dc.w	$94,$00d0	; DdfStop
	dc.w	$102,0		; BplCon1
	dc.w	$104,0		; BplCon2
	dc.w	$108,0		; Bpl1Mod
	dc.w	$10a,0		; Bpl2Mod

		    ; 5432109876543210
	dc.w	$100,%0011001000000000	; Bits 13 und 12 an!! (3 = %011)
					; 3 Bitplanes Lowres, nicht Lace
BPLPOINTERS:
	dc.w $e0,$0000,$e2,$0000	;Erstes	 Bitplane
	dc.w $e4,$0000,$e6,$0000	;zweites Bitplane
	dc.w $e8,$0000,$ea,$0000	;drittes Bitplane

	dc.w	$0180,$000	; color0
	dc.w	$0182,$475	; color1
	dc.w	$0184,$fff	; color2
	dc.w	$0186,$ccc	; color3
	dc.w	$0188,$999	; color4
	dc.w	$018a,$232	; color5
	dc.w	$018c,$777	; color6
	dc.w	$018e,$444	; color7

	dc.w	$ca07,$fffe
	dc.w	$180,$456	; Bemerke: Die Hintergrundfarbe wird vom
				; Diwstart-Diwstop nicht beeinflußt

	dc.w	$FFFF,$FFFE	; Ende der Copperlist

;	figura

PIC:
	incbin	"amiga.320*256*3"	; Hier wird das Bild im RAW-Format
					; geladen, das wir zuvor mit dem
					; Kefcon konvertiert haben

	end

In diesem Listing wurden sowohl die XX als auch die YY der DIWSTART und
DIWSTOP verändert, um das Bild zu erwürgen.

