BitPlane2=$56000	;Adresse Bitplane 1
bitplane4=$58000
bitplane6=$5a000
bitplane1=$5c000
bitplane3=$60000
bitplane5=$64000
Exec=4			;Basisadresse Execbase
Permit=-138		;Stop Multitasking
Forbid=-132		;Start Multitasking
OpenLibrary=-408	
CloseLibrary=-414
InitRastPort=-198
InitBitMap=-390
bltcon0=$dff040
bltcon1=$dff042
bltafwm=$dff044
bltalwm=$dff046
bltcpth=$dff048
bltcptl=$dff04a
bltbpth=$dff04c
bltbptl=$dff04e
bltapth=$dff050
bltaptl=$dff052
bltdpth=$dff054
bltdptl=$dff056
bltsize=$dff058
bltcmod=$dff060
bltbmod=$dff062
bltamod=$dff064
bltdmod=$dff066
bltadat=$dff074
bltbdat=$dff072
bltcdat=$dff070

start:
	jsr setup	;Initialisiert die Bitmaps und
	jsr setcopper
	move.w #10,flag
	move.w lo1,adr1
	move.w lo3,adr3
	move.w lo5,adr5
	jmp grafik
initirq:
	move.w #$4000,$dff09a 
	move.l $6c,OldVector 
	move.l #Neuirq,$6c
        move.w #$c000,$dff09a 
	rts
stop:
        move.w #$4000,$dff09a
        move.l OldVector,$6c
     	move.w #$c000,$dff09a
	rts
Neuirq: 
	movem.l d0-d2/a0-a1,-(a7)
        move SR,-(sp)
        move.w $dff01e,d0   
        btst #5,d0 
        bne.s makeirq
        bra  Endirq 

Makeirq:
	sub.w #1,delay
	cmp.w #$00ef,delay
	bne endirq

	add.w #2,lo1
	add.w #2,lo3
	add.w #2,lo5
	move.w #$00ff,delay
	sub.w #1,flag
	bne endirq
	move.w #10,flag
	move.w adr1,lo1
	move.w adr3,lo3
	move.w adr5,lo5

Endirq:
	move (sp)+,SR
        movem.l (sp)+,d0-d2/a0-a1
        DC.W $4ef9
OldVector: DC.L $0000

grafik:
	move.l #bitplane1,a0
	move.l #bitplane3,a1
	move.l #bitplane5,a2
	move #200,d0
l1:	move #20,d1
l2:	move.l #$ffffffff,(a0)+
	move.l #$ffffffff,(a1)+
	move.l #$f000000f,(a2)+
	sub #1,d1
	bne l2
	sub #1,d0
	bne l1

	jsr initirq

ok:
	jsr wait
	bra ok

wait:
	andi.b	#64,$bfe001	;Bit 7 (linke Maustaste)
	beq ende
	rts
ende:	jsr stop
	move.l copptr,a0
	move.l	oldcop,(a0)	;Alte Copperliste wieder bereit-
	move.l exec,a6
	move.l	GfxBase,a1	;stellen und Gfxlibrary
	jsr	CloseLibrary(a6);schliessen
	move.l dos_base,a1
	jsr closelibrary(a6)
	jsr	Permit(a6)	;Multitasking wieder zulassen
	ILLEGAL			;Rueckkehr zum SEKA
	rts			;ende

setup:
	move.l	Exec,a6		;Exebase-Adresse nach a6
	jsr	permit(a6)	;Stop Multitasking

	move.l exec,a6
	lea.l dosname,a1
	jsr Openlibrary(a6)
	move.l d0,dos_base

	lea	GrName,a1	;Gfxname nach a1
	jsr	OpenLibrary(a6)	;Gfxlibrary oeffnen
	move.l	d0,GfxBase	;Basisadresse buffern
	move.l	d0,a6
	add.l	#$32,d0
	move.l	d0,copptr

	lea	BitMap,a0	;Bitmapstruktur nach a0
	moveq	#6,d0		;Tiefe (5 Bitplanes)
	move.l	#320,d1		;320 Pixel nach x
	move.l	#200,d2		;200 Pixel nach y
	jsr	InitBitMap(a6)	;Bitmap Initialisieren
	lea	RastPort,a1	;erhaltenen Rastport nach a1
	jsr	InitRastPort(a6);Rastport initialisieren	
	move.l	#BitMap,R_BitMap


	move.l	#BitPlane1,d0	;Adresse Bitplane nach d0
	move.l	d0,Plane1	;Adresse auch nach Plane1
	move.l	d0,a0		;und nach Adressregister a0
	move.w	d0,lo1		;sowie in Copperliste speichern
	swap	d0		;Hi-Nibble isolieren und eben-
	move.w	d0,hi1		;falls nach Copperliste
	move.l	#16000,d0	;8000 Bytes fuer Bitplane bele-
	move.b	#$00,d1		;gen
cl1:	move.b	d1,(a0)+
	dbf	d0,cl1

	move.l	#BitPlane2,d0
	move.l d0,Plane2
	move.l d0,a0
	move.w d0,lo2
	swap d0
	move.w d0,hi2
	move.l #16000,d0
	move.b #$00,d1
cl2:	move.b d1,(a0)+
	dbf d0,cl2

	move.l	#BitPlane3,d0
	move.l	d0,Plane3
	move.l	d0,a0
	move.w	d0,lo3
	swap	d0
	move.w	d0,hi3
	move.l	#16000,d0
	move.b	#$00,d1
cl3:	move.b	d1,(a0)+
	dbf	d0,cl3

	move.l	#BitPlane4,d0
	move.l	d0,Plane4
	move.l	d0,a0
	move.w	d0,lo4
	swap	d0
	move.w	d0,hi4
	move.l	#16000,d0
	move.b	#$00,d1
cl4:	move.b	d1,(a0)+
	dbf	d0,cl4

	move.l	#BitPlane5,d0
	move.l	d0,Plane5
	move.l	d0,a0
	move.w	d0,lo5
	swap	d0
	move.w	d0,hi5
	move.l	#16000,d0
	move.b	#$00,d1
cl5:	move.b	d1,(a0)+
	dbf	d0,cl5

	move.l #bitplane6,d0
	move.l d0,plane6
	move.l d0,a0
	move.w d0,lo6
	swap d0
	move.w d0,hi6
	move.l #16000,d0
cl6:	clr.b (a0)+
	dbf d0,cl6
	rts

setcopper:
	move.l	copptr,a0	;Adresse der Copperliste nach a0
	move.l	(a0),oldcop	;Alte Liste zwischenspeichern
	move.l	#Copper,(a0)	;Neue Liste fue Copper
	rts


Copper:
	DC.W	$0180
co0:	dc.w	$0000
	DC.W	$0182
co1:	dc.w	$0fff
	DC.W	$0184
co2:	dc.w	$000f
	DC.W	$0186	
co3:	dc.w	$0f00
	DC.W    $0188
co4:	dc.w	$000f
	DC.W	$018a
co5:	dc.w	$0f0f
	DC.W	$018c
co6:	dc.w	$00ff
	DC.W	$018e
co7:	dc.w	$f0ff
	DC.W	$0190
co8:	dc.w	$0620
	DC.W	$0192
co9:	dc.w	$0e50
	DC.W	$0194
co10:	dc.w	$09f1
	DC.W	$0196	
co11:	dc.w	$0eb0
	dc.w	$0198
co12:	dc.w	$055f
	dc.w	$019a
co13:	dc.w	$092f
	dc.w	$019c
co14:	dc.w	$00f8
	dc.w	$019e
co15:	dc.w	$0ccc
	dc.w	$01a0
co16:	dc.w	$0000		
	dc.w	$01a2
co17:	dc.w	$0d22
	dc.w	$01a4
co18:	dc.w	$0000
	dc.w	$01a6
co19:	dc.w	$0fca
	dc.w	$01a8
co20:	dc.w	$0444	
	dc.w	$01aa
co21:	dc.w	$0555
	dc.w	$01ac
co22:	dc.w	$0666
	dc.w	$01ae
co23:	dc.w	$0777
	dc.w	$01b0
co24:	dc.w	$0888
	dc.w	$01b2
co25:	dc.w	$0999
	dc.w	$01b4
co26:	dc.w	$0aaa
	dc.w	$01b6
co27:	dc.w	$0bbb
	dc.w	$01b8
co28:	dc.w	$0ccc
	dc.w	$01ba
co29:	dc.w	$0ddd
	dc.w	$01bc
co30:	dc.w	$0eee
	dc.w	$01be
co31:	dc.w	$0fff
	DC.W	$00e0
hi1:	DC.W	$0002
	DC.W	$00e2
lo1:	DC.W	$1000
	DC.W	$00e4
hi2:	DC.W	$0002
	DC.W	$00e6
lo2:	DC.W    $1000
	DC.W	$00e8
hi3:	DC.W	$0002
	DC.W	$00ea
lo3:	DC.W	$1000
	DC.W	$00ec
hi4:	DC.W	$0002
	DC.W	$00ee
lo4:	DC.W	$1000
	DC.W	$00f0
hi5:	DC.W	$0002
	DC.W	$00f2
lo5:	DC.W	$1000
	dc.w	$00f4
hi6:	dc.w	$1000
	dc.w	$00f6
lo6:	dc.w	$1000
	DC.W	$0100,%0110010000000000
	DC.W	$0102
delay:	DC.W	$ff
	DC.W	$0108,38
	DC.W	$010a,38
	DC.W	$0092,$0030
	DC.W	$0094,$00d0
	DC.W	$008e,$3681
	DC.W	$0090,$fdc1
	DC.W	$ffff,$fffe



BitMap:
BytesPerRow: 	blk.w 1,0
Bytes:		blk.w 1,0
Flags: 		blk.b 1,0
Depth: 		blk.b 1,0
Pad:  		blk.w 1,0
Plane1:		blk.l 1,0
Plane2:		blk.l 1,0
Plane3:		blk.l 1,0
Plane4:		blk.l 1,0
Plane5:		blk.l 1,0
Plane6:		blk.l 1,0
Planes:		blk.l 1,0

RastPort:
		blk.l 1,0
R_BitMap:	blk.l 1,0
		blk.b 2+4+4+4+8,0
		blk.b 4,0
cp_x:		blk.w 1,0
cp_y:		blk.w 1,0
   		blk.b 8+22+[7*2]+[2*4]+8,0
		blk.w 6,0
even
GrName:		DC.B 'graphics.library',0
Dosname:	DC.B 'dos.library',0
even

copptr:		blk.l 1,0
oldcop:		blk.l 1,0
GfxBase:	blk.l 1,0
Dos_base:	blk.l 1,0
x:		blk.w 1,0
flag:		blk.w 1,0
adr1:		blk.w 1,0
adr3:		blk.w 1,0
adr5:		blk.w 1,0
