beg:

; ----- graphics.library -----
text= 		-60
setfont= 	-66
closefont=	-78
move= 		-240
initbitmap= 	-390
initrastport= 	-198
clearscreen=	-48
scrollraster=	-396
; ----- exec.library     -----
openlibrary= 	-408
closelibrary= 	-414
forbid= 	-132
permit= 	-138
; ----- diskfont.library -----
openfont= 	-30
; ----- dos.library   	 -----
open=		-30
close=		-36
read=		-42
examine=	-102
; ----- absolute address -----
execbase= 	$04

movem.l 	d0-d7/a0-a6,-(a7)
; ---- open gfx.library -----
move.l		execbase,a6
lea		gfxname,a1
jsr		openlibrary(a6)
move.l		d0,gfxbase
; ---- open dos.library -----
;lea		dosname,a1
;jsr		openlibrary(a6)
;move.l		d0,dosbase
; ---- open diskfont.library -----
;lea		diskfontname,a1
;jsr		openlibrary(a6)
;beq.L		error
;move.l		d0,fontlbase
; ---- open required font ... -----
;move.l		d0,a6
;lea		textattr,a0
;jsr		openfont(a6)
;beq.L		error
;move.l		d0,fontbase

bsr		load
; ---- start it up !!! ----
move.w		$dff00c,jz
move.l		execbase,a6
;jsr		forbid(a6)
move.l		gfxbase,a0
add.l		#$32,a0
move.w		#$0080,$dff096
move.l		(a0),oldcopper
move.l		#newcopper,(a0)
move.w		#$8080,$dff096
move.l		gfxbase,a6
;lea		bitmap,a0
;move.l		#$01,d0
;move.l		#352+32,d1
;move.l		#80,d2
;jsr		initbitmap(a6)
;move.l		#$45000,plane1
;lea		rastport,a1
;jsr		initrastport(a6)
;move.l		#bitmap,r_bitmap
;lea		rastport,a1
;move.l		fontbase,a0
;jsr		setfont(a6)
;lea		rastport,a1
;jsr		clearscreen(a6)
move.w		#$4000,$dff09a
move.l		$6c,oldirq
move.l		#newirq,$6c
move.w		#$c010,$dff09a
bra.L		wait
; ---- the neq irq follows right on ----
newirq:					; Neuer IRQ
movem.l		d0-d7/a0-a6,-(sp)	; Register Retten
; Interrupt
; --------------------------------------
move.l		gfxbase,a6		; Routine in GFX-Library
lea		rastport,a1		; Rastport uebergeben
move.l		#0,d2			; linke obere koordinaten des
move.l		#0,d3			; zu verschiebenden rechteck
move.l		#382,d4			; rechte unter koordinaten
move.l		#80,d5			; des rechteck
move.l		#$02,d0			; 2 punkt in x verschieben
move.l		zz1,d1			; zz1 punkte in y verschieben
;jsr		scrollraster(a6)	; verschieben
; --------------------------------------
; --------------------------------------
n0:
movem.l		(sp)+,d0-d7/a0-a6
dc.w	$4ef9
oldirq:
dc.l	0

printchar:
; --------------------------------------
move.l		gfxbase,a6	; basis der graphics-library
lea		rastport,a1	; im zwischenspeicher grafikcursor
move.l		#350,d0		; nach x-position 320
move.l		zz2,d1		; und y-pos  	  14 
jsr		move(a6)	; bewegen
lea		rastport,a1	;
jsr		clearscreen(a6)	; Bildschirm loeschen
lea		rastport,a1     ; in zwischenspeicher
move.l		#1,d0		; 1 zeichen
jsr		text(a6)	; an position des grafikcursor printen
bne.s		return		; nein ---
return:				; ruecksprung
rts

; ----- Unterprogramm zum laden und ----
; -------- Anzeigen eines Bildes -------
load:
move.l		#16000,d0		; Ladebereich loeschen
lea		$70000,a0
clear1:
clr.l		(a0)+
dbra		d0,clear1
; --------------------------------------
move.l		execbase,a6
lea		dosname,a1
jsr		openlibrary(a6)
move.l		d0,dosbase
move.l		dosbase,a6		; Bild laden
move.l		#1005,d2
move.l		#picname,d1
move.w		bz,d3
mulu		#10,d3
add.l		d3,d1
jsr		open(a6)
move.l		d0,file
move.l		d0,d1
move.l		#$70000-$ba,d2
move.l		#40186,d3
jsr		read(a6)
move.l		file,d1
jsr		close(a6)
move.l		execbase,a6
move.l		dosbase,a1
jsr		closelibrary(a6)
; --------------------------------------
clr.l		d0			; Bild entpacken
move.b		$6ff64,d0
bne		unpack
move.l		#$70000-$ba,a0
move.l		#$55000-$ba,a1
move		#22000,d0
sean:
move.w		(a0)+,(a1)+
dbra		d0,sean
bra		write
unpack:
move.l		#$70000-$ba,a0
move.l		#$55000-$ba,a1
move		#$ba,d0
sea0:
move		(a0)+,(a1)+
dbra		d0,sea0
move.l		#$70000-$ba,a0		;gepacktes Bild
add.l		#8,a0
move.l		#$55000,a1		;Fertiges Bild
add.l		#4,a0
move.l		a0,bmhdchunk		;BMHD Chunk
move.l		4(a0),d0
add.l		d0,a0
add.l		#8,a0
move.l		a0,cmapchunk		;CMAP Chunk
sea1:
move.l		4(a0),d0
add.l		d0,a0
add.l		#8,a0
move.l		#'BODY',d1
cmp.l		(a0),d1
bne		sea1
move.l		a0,bodychunk		;BODY Chunk
add.l		#4,a0
move.l		(a0),anzahl		;Anzahl Bytes
add.l		#1,anzahl
and.l		#$fffffffe,anzahl
add.l		#4,a0			;First  Byte in A0
clr.l		d3
sea3:	
move.b		(a0)+,zaehler
clr.l		d5
move.b		zaehler,d5
and.b		#$80,d5
bne		sea4
clr.l		d4
move.b		zaehler,d4
sea5:	
move.b		(a0)+,(a1)+
add.l		#1,d3
dbf		d4,sea5
sub.l		#1,a0
bra		sea6
sea4:	
neg.b		zaehler
clr.l		d0
move.b		zaehler,d0
sea2:
move.b		(a0),(a1)+
dbf		d0,sea2
add.l		#2,d3
sea6:
move.l		anzahl,d1
cmp.l		d3,d1
ble		sea99
add.l		#1,a0
bra		sea3
sea99:	
move.l		cmapchunk,a0
sea98:
bra		write
even
bmhdchunk:	
dc.l	0
cmapchunk:
dc.l	0
crngchunk:
dc.l	0
bodychunk:
dc.l	0
anzahl:	dc.l	0
anzahl1:dc.l	0
zaehler:dc.b	0
even
write:
lea		pic1tab,a0
move.l		#$55000-$ba+$30,a1
move.l		#$00000180,d1
move.l		#$0000001f,d0
coloop1:
move.l		#$02,d2
clr.l		d3
coloop2:
clr.l		d4
move.b		(a1)+,d4
move.l		#$03,d5
coloop3:
roxl.b		#$01,d4
roxl.w		#$01,d3
dbra		d5,coloop3
dbra		d2,coloop2
move.w		d1,(a0)+
move.w		d3,(a0)+
add.w		#$0002,d1
dbra		d0,coloop1
rts
; --------------------------------------
aax1:					; drei vor
add		#3,bz
move.w		bz,d0
cmp		#22,d0
bcs		aax10
move.w		#21,bz
aax10:
bsr		load
bra		wait
aax2:					; drei zurueck
sub		#3,bz
move.w		bz,d0
bpl		aax20
move.w		#0,bz
aax20:
bsr		load
bra		wait
aa1:					; eine vor
add		#1,bz
move.w		bz,d0
cmp		#22,d0
bcs		aa10
move.w		#21,bz			; Seiten
bra		wait
aa10:
bsr		load
bra		wait
aa2:
sub		#1,bz
move.w		bz,d0
bpl		aa20
move.w		#0,bz
bra		wait
aa20:
bsr		load
bra		wait
wait:
; ----------- Hauptprogramm ------------
move.w		$dff00c,d3
cmp		jz,d3
beq		xxx
cmp.b		jz+1,d3
beq		aa1
bra		aa2
xxx:
cmp.b		#$33,$bfec01
beq		aa2			; zurueck
cmp.b		#$35,$bfec01
beq		aax1			; drei vor
cmp.b		#$37,$bfec01
beq		aax2			; drei zurueck
cmp.b		#$31,$bfec01
beq		aa1			; vor
cmp.b		#$39,$bfec01
beq		aaa
bra		wait
aaa:
; ---------- Programm beenden ----------
move.w		#$4010,$dff09a
move.l		oldirq,$6c
move.w		#$c000,$dff09a
move.l		gfxbase,a6
;move.l		fontbase,a1
;jsr		closefont(a6)
move.l		execbase,a6
;move.l		fontlbase,a1
;jsr		closelibrary(a6)
move.l		gfxbase,a1
jsr		closelibrary(a6)
move.l		gfxbase,a0
add.l		#$32,a0
move.w		#$0080,$dff096
move.l		oldcopper,(a0)
move.w		#$8080,$dff096
move.l		execbase,a6
;jsr		permit(a6)
movem.l		(a7)+,d0-d7/a0-a6
error:
rts

newcopper:			; Neue Copperliste
dc.w 	$008e,$2771,$0090,$54d1 ; linke obere/rechte untere 
				; Koordinaten des BildschirmFenster
dc.w 	$0092,$0038,$0094,$00d0 ; DataFetch Start/Stop
dc.w 	$0108,$00a0,$010a,$00a0	; Modulos fuer Grafik
dc.w 	$0102,$0066,$0104,$0000 ; BitPlane Control Reg. #1 u. #2
				; nur wichtig bei DualPlayfield etc.
dc.w 	$0100,$b200		
	;     ;   ;   ;   ;   ; ; BitPlane Control Reg. #0
				; siehe Hardware Reference M. 
				; Anhang A-4			
dc.w    $00e0,$0005,$00e2,$5000	; Zeiger auf Start der Bitplane
dc.w	$00e4,$0005,$00e6,$5050
dc.w 	$00e8,$0005,$00ea,$50a0
dc.w 	$00ec,$0005,$00ee,$50f0
dc.w	$00f0,$0005,$00f2,$50b0
dc.w	$0120,$0000,$0122,$0000
pic1tab:
blk.b	128,10
laufen:
dc.w	$ffff,$fffe
dc.w 	$0180,$0000,$0182,$0a2e		
dc.w 	$0108,$0004,$010a,$0004	
dc.w 	$0102,$0000,$0104,$0000 
dc.w 	$0100,$1000		
dc.w    $00e0,$0004,$00e2,$5000	
; --------------------------------------
even
scrollmsg:			; Scrolltext
dc.b	"AGAIN ITS THE WORLD RULING ALPHA FLIGHT ------  "
ende:

even
gfxbase:
dc.l 	0
dosbase:
dc.l	0
bitmap:
blk.w 	4,0
plane1:
blk.l 	10,0
rastport:
blk.l 	1,0
r_bitmap:
blk.l 	26,0
oldcopper:
dc.l 	0
gfxname:
dc.b 	"graphics.library",0
diskfontname:
dc.b 	"diskfont.library",0
dosname:
dc.b	"dos.library",0
even
file:	dc.l	0
bz:	dc.w	0
picname:
dc.b	"df0:0201",0,0
dc.b	"df0:0202",0,0
dc.b	"df0:0203",0,0
dc.b	"df0:0204",0,0
dc.b	"df0:0205",0,0
dc.b	"df0:0206",0,0
dc.b	"df0:0207",0,0
dc.b	"df0:0208",0,0
dc.b	"df0:0209",0,0
dc.b	"df0:020a",0,0
dc.b	"df0:020b",0,0
dc.b	"df0:020c",0,0
dc.b	"df0:020d",0,0
dc.b	"df0:020e",0,0
dc.b	"df0:020f",0,0
dc.b	"df0:0210",0,0
dc.b	"df0:0211",0,0
dc.b	"df0:0212",0,0
dc.b	"df0:0213",0,0
dc.b	"df0:0214",0,0
dc.b	"df0:0215",0,0
even
z1:	dc.w	1
z2:	dc.w	1
z3:	dc.w	1
z4:	dc.w	1
z5:	dc.w	1
z6:	dc.w	0
jz:	dc.w	0
zz1:	dc.l	0
zz2:	dc.l	0
