;
; ------ Blitter Scrolling ------
;
; (c) 1987 By A.C.G/High Quality Crackings
;
;       All Rights reserved
beg:
scroll=		$55000		; Zwischenspeicher fuer Laufschrift

; ----- Betriebssystem Aufrufe -----

; ----- graphics.library -----
text= 		-60
setfont= 	-66
closefont=	-78
move= 		-240
initbitmap= 	-390
initrastport= 	-198
scrollraster=	-396
clearscreen=	-48
; ----- exec.library     -----
allocabs=	-204
openlibrary= 	-408
closelibrary= 	-414
forbid= 	-132
permit= 	-138
; ----- diskfont.library -----
openfont= 	-30

; ---- Anfangsadresse EXEC-Library (immer bei $04) ----
execbase= 	$04

; --------------------------------------
movem.l 	d0-d7/a0-a6,-(a7)	; Aktuelle Register retten
move.b		#$02,rows
; --------------------------------------
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		diskfontname,a1		; Name DiskFont-Lib.
jsr		openlibrary(a6)		; eroeffnen
beq.L		error			; Fehler Aufgetreten ???
move.l		d0,fontlbase		; Basisadresse merken
; --------------------------------------
move.l		fontlbase,a6		; Routine in Diskfont-Lib.
lea		textattr,a0		; Struktur d. Zeichensatz
jsr		openfont(a6)		; Zeichensatz laden
beq.L		error			; Fehler ???
move.l		d0,fontbase		; Basisadresse Zeichensatz
; --------------------------------------
lea		waitab,a0		; CopperListe um WAIT erganzen
move.l		#$df09,d1		; ab Zeile $df spalte $09
move.l		#13,d0			; 14 WAIT's
coloop2:
move.w		d1,(a0)+		; WAIT in Copperliste schreibe
move.w		#$fffe,(a0)+		; Alle Bits Von WAIT Beachten
move.w		#$0182,(a0)+		; Vordergrundfarbe
move.w		#$0fff,(a0)+		; Default-Wert
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		; Neuen Zeichensatz i.Struktur
move.l		fontbase,a0		; installieren
jsr		setfont(a6)
; --------------------------------------
lea		rastport,a1		; Grafikspeicher loeschen
jsr		clearscreen(a6)
; --------------------------------------
move.l		#scrollmsg,c_ptr	; Anfangsadresse d.ScrollText
; --------------------------------------; setzen
move.l		$6c,oldirq		; Alten IRQ-Vector retten
move.l		#newirq,$6c		; IRQ-Vector a.eigene Routine
; --------------------------------------
bra.L		wait			; Weiter zur Mausabfrage
; --------------------------------------
newirq:					; Neuer IRQ
movem.l		d0-d7/a0-a6,-(sp)	; Register Retten
; -scrolltext in GrafikSpeicher 1 Punkt nach links 
; -scrollen
; --------------------------------------
move.l		gfxbase,a6		; Routine in GFX-Library
lea		rastport,a1		; Rastport uebergeben
move.l		#0,d2			; linke obere koordinaten des
move.l		#179,d3			; zu verschiebenden rechteck
move.l		#352,d4			; rechte unter koordinaten
move.l		#198,d5			; des rechteck
move.l		#$01,d0			; 1 punkt in x verschieben
clr.l		d1			; kein punkt in y verschieben
jsr		scrollraster(a6)	; verschieben
; --------------------------------------
sub.b		#$01,rows		; schon 1 zeichen (16 punkte)
bne.s		continue1		; gescrollt ???
move.b		#16,rows		; nein
bsr.s		printchar		; neues zeichen ausgeben
continue1:
; --------------------------------------
lea		coltab,a0		; Farbtabelle Verschieben
lea		coltab+2,a1
move.w		#28,d0
move.w		coltab,d1
verloop1:
move.w		(a1)+,(a0)+
dbra		d0,verloop1
move.w		d1,coltab+56
; --------------------------------------
move.l		#13,d0			; 14 Farben in Copperliste
lea		coltab,a0		; schreiben
lea		waitab+6,a1
coloop1:
move.w		(a0)+,(a1)
add.l		#$08,a1			; Abstand zu naechstem WAIT
					; 4 Worte 
dbra		d0,coloop1
; --------------------------------------
movem.l		(sp)+,d0-d7/a0-a6	; Register zurueckholen
dc.w		$4ef9			; Code fur JMP
oldirq:
dc.l	0				; zu altem IRQ-Vector

printchar:
; --------------------------------------
move.l		gfxbase,a6	; basis der graphics-library
lea		rastport,a1	; => vorhandenes bitmuster im scroll-
jsr		clearscreen(a6)	; => zwischenspeicher loeschen
lea		rastport,a1	; im zwischenspeicher grafikcursor
move.l		#320,d0		; nach x-position 320
move.l		#193,d1		; und y-pos  	  14 
jsr		move(a6)	; bewegen
lea		rastport,a1     ; in zwischenspeicher
move.l		c_ptr,a0	; zeichen ab adresse (c_ptr)
move.l		#1,d0		; 1 zeichen
jsr		text(a6)	; an position des grafikcursor printen
add.l		#$01,c_ptr	; 1 zum textzeiger addieren
cmp.l		#ende,c_ptr	; ende des textes erreicht ???
bne.s		return		; nein ---
move.l		#scrollmsg,c_ptr; anfang neu setzen
return:				; ruecksprung
rts

wait:
; --------------------------------------
btst		#6,$bfe001	; linke maustaste gedrueckt ???
bne.s		wait		; nein ==>
; --------------------------------------
move.l		oldirq,$6c	; alten irq-vector zurueckschreiben
; --------------------------------------
move.l		gfxbase,a6	; basisadresse gfx-library
move.l		fontbase,a1	; basisadresse des zeichensatz
jsr		closefont(a6)	; speicher wieder freigeben
; --------------------------------------
move.l		execbase,a6	; basisadresse exec-libary
move.l		fontlbase,a1	; diskfont-library basisadresse
jsr		closelibrary(a6); library schliessen (speicher freig.)
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
; --------------------------------------
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,$2c81,$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.w	56,0			; Speicher fuer WAIT Befehle
				; (Farben im Scroll)
dc.w $ffff,$fffe		; Ende Der CopperListe
; --------------------------------------
even
scrollmsg:			; Scrolltext
dc.b "HIGH QUALITY CRACKINGS PROUDLY PRESENT A NEW INTRO ",0
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
; --------------------------------------
diskfontname:			; Name der DISKFONT-Libary
dc.b 	"diskfont.library",0
even
; --------------------------------------
fontname:			; Name des Zeichensates
dc.b 	"tempfont.font",0
even
textattr:			; Stuktur des Zeichensatzes
				; wird bei OPENFONT uebergeben
dc.l	fontname		; Adresse des namens
dc.w	14			; Hoehe in Punkten
dc.w	0			; diverse Flags
; --------------------------------------
fontlbase:			; Anfangsadresse DiskfontLib
dc.l	0			; merken		
; --------------------------------------
fontbase:			; Anfangsadresse Zeichensatz merken
dc.w	0
; --------------------------------------
rows:				; Anzahl der Gescrollten Bildpunkte
dc.b	0
even
; --------------------------------------
c_ptr:				; Zeiger auf Scrollmessage
dc.l	0
even
; --------------------------------------
coltab:				; Farben fuer Laufschrift
dc.w $0ff0,$0cf0,$09f0,$06f0,$03f0,$00f0,$00f3,$00f6,$00f9
dc.w $00fc,$00ff,$00cf,$009f,$006f,$003f,$000f
dc.w $030f,$060f,$090f,$0c0f,$0f0f,$0f0c,$0f09
dc.w $0f06,$0f03,$0f00,$0f30,$0f60,$0f90,$0fc0
