;- ----- graphics.library -----
initbitmap= 	-390
initrastport= 	-198
clearscreen=	-48
; ----- exec.library     -----
allocabs=	-204
openlibrary= 	-408
closelibrary= 	-414
forbid= 	-132
permit= 	-138
; ---- Anfangsadresse EXEC-Library (immer bei $04) ----
execbase= 	$04

; --------------------------------------
movem.l 	d0-d7/a0-a6,-(a7)	; Aktuelle Register retten
move.w  #$20,$dff096
; --------------------------------------
move.l		execbase,a6		; Betr.Rout. in EXEC-lib.
lea		$50000,a1		; ab Adresse $50000
move.l		#8000,d0		; 8000 byte als belegt kennz.
jsr		allocabs(a6)		; dass z.b. kein zeichensatz
					; hierhin geladen wird
; --------------------------------------
; --- benoetigte Libaries eroeffnen ----
lea		gfxname,a1		; Name GFX-Lib. 	
jsr		openlibrary(a6)		; eroeffnen
beq.L		error			; Fehler aufgetreten ???
move.l		d0,gfxbase		; Basisadresse merken
; --------------------------------------
lea		waitab,a0		; CopperListe um WAIT erganzen
move.l		#$2009,d1		; ab Zeile $df spalte $09
move.l		#200,d0	;;;60		; 14 WAIT's
coloop2:
move.w		d1,(a0)+		; WAIT in Copperliste schreibe
move.w		#$fffe,(a0)+		; Alle Bits Von WAIT Beachten
move.w		#$0180,(a0)+		; Vordergrundfarbe
move.w		#$0000,(a0)+		; Default-Wert
move.w          #$182,(a0)+
move.w          #$000,(a0)+
add.w		#$0100,d1   ; WAIT-Wert um eine Zeile erhoehen
dbra 		d0,coloop2		; schon 14 mal durchlaufen ???

; --------------------------------------
move.l		execbase,a6		; Routine in EXEC-Lib.
jsr		forbid(a6)		; MultiTasking verbieten
; --------------------------------------
move.l		gfxbase,a0		; Zur Basisadresse GFX-Lib.
add.l		#$32,a0			; $32 addieren => Anfangsadr.
					; der CopperListe
move.w		#$0080,$dff096		; Copper DMA stoppen
move.l		(a0),oldcopper		; Alte Adresse merken
move.l		#newcopper,(a0)		; Neue CopperListe aktivieren
move.w		#$8080,$dff096		; Copper DMA starten
; --------------------------------------
move.l		gfxbase,a6		; Routine in GFX-Lib.
lea		bitmap,a0		; Zeiger a.(noch leere)Tabelle
move.l		#$01,d0			; 1 BitPlane
move.l		#352,d1			; Breite 352 Punkte
move.l		#200,d2			; Hoehe 15 Zeilen
jsr		initbitmap(a6)		; Default Werte schreiben
					; noch allgemein ==>
move.l		#$50000,plane1		; Anfangs Adresse des Grafik
					; speicher ergaenzen
; --------------------------------------
lea		rastport,a1		; Zeiger a.(noch leere)Tabelle
jsr		initrastport(a6)	; Rastport DefaultWerte
move.l		#bitmap,r_bitmap	; noch allgemein ==>
					; Bitmap Struktur in Rastport
; --------------------------------------
lea		rastport,a1		; Grafikspeicher loeschen
jsr		clearscreen(a6)
; --------------------------------------; setzen
move.l		$6c,oldirq		; Alten IRQ-Vector retten
move.l		#newirq1,$6c		; IRQ-Vector a.eigene Routine
; --------------------------------------
bra.L		wait1			; Weiter zur Mausabfrage
; --------------------------------------
newirq1:					; Neuer IRQ
movem.l		d0-d7/a0-a6,-(sp)	; Register Retten
; --------------------------------------
lea		coltab1,a0		; Farbtabelle Verschieben
lea		coltab1+2,a1
move.w		#328,d0 ;;    ;;anzahl der farben-1
move.w		coltab1,d1
verloop13:
move.w		(a1)+,(a0)+
dbra		d0,verloop13
move.w		d1,coltab1+656;;;;

move.l		#199,d0		;;;;	; 14 Farben in Copperliste
lea		coltab1,a0		; schreiben
lea		waitab+6,a1
coloop40:
move.w		(a0)+,(a1)
add.l		#12,a1			; Abstand zu naechstem WAIT
					; 4 Worte 
dbra		d0,coloop40
; --------------------------------------

move.l #615,d7
lea $50000+352+44,a0
lea $50000+7920,a1
 

movem.l		(sp)+,d0-d7/a0-a6	; Register zurueckholen
dc.w		$4ef9			; Code fur JMP
oldirq:
dc.l	0				; zu altem IRQ-Vector

wait1:
; --------------------------------------
btst		#6,$bfe001	; linke maustaste gedrueckt ???
bne.s		wait1		; nein ==>
end:


; --------------------------------------
move.l		oldirq,$6c	; alten irq-vector zurueckschreiben
move.l		gfxbase,a1	; gfx-libary basisadresse
jsr		closelibrary(a6); library schliessen
; --------------------------------------
move.l		gfxbase,a0	; zur Basisadresse GFX-library $32
add.l		#$32,a0		; addieren => adresse der copperliste
move.w		#$0080,$dff096	; Copper DMA stoppen
move.l		oldcopper,(a0)	; Standard CopperListe aktivieren
move.w		#$8080,$dff096	; Copper DMA starten
; --------------------------------------
move.l		execbase,a6	; basisadresse exec-library
jsr		permit(a6)	; MultiTasking wieder zulassen
; --------------------------------------
move.w  #$8020,$dff096
movem.l		(a7)+,d0-d7/a0-a6;Register zurueckholen
error:
rts				; Ruecksprung in SEKA/CLI
; --------------------------------------
newcopper:			; Neue Copperliste
dc.w 	$0180,$0000,$0182,$0ddd	; Hinter/Vorderg.Farben setzen	
dc.w 	$008e,$28c1,$0090,$f4c1 ; linke obere/rechte untere 
				; Koordinaten des BildschirmFenster
dc.w 	$0092,$0038,$0094,$00d0 ; DataFetch Start/Stop
dc.w 	$0108,$0004,$010a,$0004	; Modulos fuer Grafik
dc.w 	$0102,$0000,$0104,$0000 ; BitPlane Control Reg. #1 u. #2
				; nur wichtig bei DualPlayfield etc.
dc.w 	$0100,$1200		; BitPlane Control Reg. #0
				; 1 Bitplane/Farbe
				; siehe Hardware Reference M. 
				; Anhang A-4			
dc.w    $00e0,$0005,$00e2,$0000	; Zeiger auf Start der Bitplane

waitab:
blk.b  2412,0		; Speicher fuer WAIT Befehle

				; (Farben im Scroll)
dc.w $ffff,$fffe		; Ende Der CopperListe
; --------------------------------------
ende:
dc.w	0
; --------------------------------------
even				; jetzt folgen diverse labels
gfxbase:
dc.l 	0			; Basisadresse Fuer GFX-Library
; --------------------------------------
bitmap:
blk.w 	4,0			; Bitmapstruktur
plane1:
blk.l 	10,0
; --------------------------------------
rastport:			; RastPort Struktur
blk.l 	1,0
r_bitmap:
blk.l 	26,0
; --------------------------------------
oldcopper:			; Alte Copperlistenadresse merken
dc.l 	0
; --------------------------------------
gfxname:			; Name der GFX-Library
dc.b 	"graphics.library",0
; --------------------------------------
even
coltab1:
dc.w 273,546,819,1092,1365,1638,1911,2184,2457,2730
dc.w 3003,3276,3549,3822,4095,4095,3822,3549,3276,3003
dc.w 2730,2457,2184,1911,1638,1365,1092,819,546,273

dc.w 272,544,816,1088,1360,1632,1904,2176,2448,2720
dc.w 2992,3264,3536,3808,4080,4080,3808,3536,3264,2992
dc.w 2720,2448,2176,1904,1632,1360,1088,816,544,272

dc.w 256,512,768,1024,1280,1536,1792,2048,2304,2560
dc.w 2816,3072,3328,3584,3840,3840,3584,3328,3072,2816
dc.w 2560,2304,2048,1792,1536,1280,1024,768,512,256

dc.w 257,514,771,1028,1285,1542,1799,2056,2313,2570
dc.w 2827,3084,3341,3598,3855,3855,3598,3341,3084,2827
dc.w 2570,2313,2056,1799,1542,1285,1028,771,514,257

dc.w $010,$020,$030,$140,$150,$160,$170,$180,$190,$1a0
dc.w $2b0,$2c0,$2d0,$2e0,$2f0,$2f0,$2e0,$2d0,$2c0,$2b0
dc.w $1a0,$190,$180,$170,$160,$150,$140,$030,$020,$020

dc.w $001,$002,$003,$004,$005,$006,$007,$008,$009,$00a
dc.w $00b,$00c,$00d,$00e,$00f,$00f,$00e,$00d,$00c,$00b
dc.w $00a,$009,$008,$007,$006,$005,$004,$003,$002,$001

dc.w $011,$022,$033,$044,$055,$066,$076,$087,$098,$0a9
dc.w $0ba,$0cb,$0dc,$0ed,$0fe,$0fe,$0ed,$0dc,$0cb,$0ba
dc.w $0a9,$098,$087,$076,$066,$055,$044,$033,$022,$011

dc.w $111,$221,$232,$343,$454,$564,$675,$686,$797,$8a7
dc.w $9b8,$ac9,$ad9,$bea,$cfb,$cfb,$bea,$ad9,$ac9,$9b8
dc.w $8a7,$797,$686,$675,$564,$454,$343,$232,$221,$111

dc.w $010,$120,$130,$140,$250,$260,$270,$380,$390,$3a0
dc.w $4b0,$4c0,$4d0,$5e0,$5f0,$5f0,$5e0,$4d0,$4c0,$4b0
dc.w $3a0,$390,$380,$270,$260,$250,$140,$130,$120,$010

dc.w $110,$221,$321,$431,$541,$652,$752,$862,$972,$a83
dc.w $b93,$c93,$da3,$eb4,$fc4,$fc4,$eb4,$da3,$c93,$b93
dc.w $a83,$972,$862,$752,$652,$541,$431,$321,$221,$110

dc.w $011,$021,$032,$042,$053,$063,$074,$084,$095,$0a5
dc.w $0b6,$0c6,$0d7,$0e7,$0f8,$0f8,$0e7,$0d7,$0c6,$0b6
dc.w $0a5,$095,$084,$074,$063,$053,$042,$032,$021,$011


