;--------------------------------------------------------------------
;
;			DRAGONS - DEMO
;
;    Hansruedi Graf,Jonenbachstr.202,CH-8911 Rifferswil,Schweiz
;
;--------------------------------------------------------------------

DMACONR = $DFF002 ; #DEFINES
INTREQR = $DFF01E
INTENAR = $DFF01C
DIWSTRT = $DFF08E
DIWSTOP = $DFF090
DDFSTRT = $DFF092
DDFSTOP = $DFF094
DMACON  = $DFF096
INTENA  = $DFF09A
INTREQ  = $DFF09C
BPL1PT  = $DFF0E0
BPLCON0 = $DFF100
BPLCON1 = $DFF102
BPLCON2 = $DFF104
BPL1MOD = $DFF108
BPL2MOD = $DFF10A
COLOR00 = $DFF180
VHPOSR  = $DFF006
SPR0DATA= $DFF144

COP1LCH = $DFF080
COPJMP1 = $DFF088
COPCON  = $DFF02E

BLTCON0 = $DFF040
BLTCON1 = $DFF042
BLTAFWM = $DFF044
BLTCPTH = $DFF048
BLTBPTH = $DFF04C
BLTAPTH = $DFF050
BLTDPTH = $DFF054
BLTSIZE = $DFF058
BLTCMOD = $DFF060
BLTBMOD = $DFF062
BLTAMOD = $DFF064
BLTDMOD = $DFF066

CIAA_PRA = $BFE001
CIAA_SDR = $BFEC01
CIAA_ICR = $BFED01
CIAA_CRA = $BFEE01
CIAA_CRB = $BFEF01

CIAB_CRA = $BFDE00
CIAB_CRB = $BFDF00

ALLOCMEM = -$0C6
FREEMEM  = -$0D2
OPENLIBRARY  = -$228
CLOSELIBRARY = -$19E
OPEN     = -$01E
CLOSE    = -$024
READ     = -$02A
SEEK     = -$042

;--------------------------------------------------------------------

START:
	MOVEM.L D0-D7/A0-A6,-(A7) ; R->STACK

	MOVE.L 4,A6
	MOVE.L #GFX_NAME,A1
	MOVEQ #0,D0
	JSR OPENLIBRARY(A6)
	TST.L D0
	BEQ.L GOOUT
	MOVE.L D0,GFX_BASE

	MOVE.L #DOS_NAME,A1
	MOVEQ #0,D0
	JSR OPENLIBRARY(A6)
	TST.L D0
	BEQ.L CLOSEGFX
	MOVE.L D0,DOS_BASE

; BITMAPMEM HOLEN
	MOVE.L 4,A6
	MOVE.L #68096,D0 ; 5*40*64+2*44*32+2*40*256+32*1000
	MOVE.L #$10002,D1
	JSR ALLOCMEM(A6)
	TST.L D0
	BEQ.L CLOSEDOS
	MOVE.L D0,MEMORY_BASE	; JETZT DEN SPEICHER VERTEILEN...
	MOVE.L D0,BITMAP_BASE1
	MOVE.L D0,BITMAP_BASE2
	MOVE.L D0,COPPER_BASE
	ADDI.L #20480,BITMAP_BASE1
	ADDI.L #33280,BITMAP_BASE2
	ADDI.L #36096,COPPER_BASE

;--------------------- FILE LADEN ---
;FILE öFFNEN
	MOVE.L DOS_BASE,A6
	MOVE.L #DATA_NAME,D1
	MOVE.L #1005,D2
	JSR OPEN(A6)
	TST.L D0
	BEQ.L CLOSEBITMAP
	MOVE.L D0,A3 ;BILDBASE

;LäNGE FESTSTELLEN
	MOVE.L D0,D1
	MOVEQ #0,D2
	MOVEQ #1,D3
	JSR SEEK(A6)
	MOVE.L A3,D1
	MOVEQ #-1,D3
	JSR SEEK(A6)

;BUFFER HOLEN
	MOVE.L D0,D3 ; LäNGE IN D3
	MOVEQ #0,D1
	MOVE.L 4,A6
	JSR ALLOCMEM(A6)
	TST.L D0
	BEQ.L NOBUFFERMEM

;BUFFER EINLESEN
	MOVE.L D0,D4 ; ADRESSE IN D4
	MOVE.L A3,D1
	MOVE.L D0,D2
	MOVE.L DOS_BASE,A6
	JSR READ(A6)
	CMP.L D0,D3
	BNE.L READERROR
	
	; IFF-ENTSCHLüSSELN
	MOVE.L MEMORY_BASE,A0
	MOVE.L D4,A1
	MOVE.L #0,A2
	MOVE.W #320,D0
	MOVE.W #256,D1
	MOVE.B #2,D2
	BSR.L IFFLOAD
	TST.B D0
	BEQ READERROR

	MOVE.L 4,A6
	MOVE.L D4,A1
	MOVE.L D3,D0
	JSR FREEMEM(A6)

	MOVE.L A3,D1
	MOVE.L DOS_BASE,A6
	JSR CLOSE(A6)

;--------------------- FILE LADEN ---
;FILE öFFNEN
	MOVE.L DOS_BASE,A6
	MOVE.L #DRAGON_NAME,D1
	MOVE.L #1005,D2
	JSR OPEN(A6)
	TST.L D0
	BEQ.L CLOSEBITMAP
	MOVE.L D0,A3 ;BILDBASE

;LäNGE FESTSTELLEN
	MOVE.L D0,D1
	MOVEQ #0,D2
	MOVEQ #1,D3
	JSR SEEK(A6)
	MOVE.L A3,D1
	MOVEQ #-1,D3
	JSR SEEK(A6)

;BUFFER HOLEN
	MOVE.L D0,D3 ; LäNGE IN D3
	MOVEQ #0,D1
	MOVE.L 4,A6
	JSR ALLOCMEM(A6)
	TST.L D0
	BEQ.L NOBUFFERMEM

;BUFFER EINLESEN
	MOVE.L D0,D4 ; ADRESSE IN D4
	MOVE.L A3,D1
	MOVE.L D0,D2
	MOVE.L DOS_BASE,A6
	JSR READ(A6)
	CMP.L D0,D3
	BNE.L READERROR
	
	; IFF-ENTSCHLüSSELN
	MOVE.L BITMAP_BASE1,A0
	MOVE.L D4,A1
	LEA.L COLORS,A2
	MOVE.W #320,D0
	MOVE.W #64,D1
	MOVE.B #5,D2
	BSR.L IFFLOAD
	TST.B D0
	BEQ READERROR

	MOVE.L 4,A6
	MOVE.L D4,A1
	MOVE.L D3,D0
	JSR FREEMEM(A6)

	MOVE.L A3,D1
	MOVE.L DOS_BASE,A6
	JSR CLOSE(A6)

;--------------------- SOUNDTRACKER-MUSIK LADEN

;FILE öFFNEN
	MOVE.L DOS_BASE,A6
	MOVE.L #SOUND_NAME,D1
	MOVE.L #1005,D2
	JSR OPEN(A6)
	TST.L D0
	BEQ CLOSEBITMAP
	MOVE.L D0,A3 ;BASE

;LäNGE FESTSTELLEN
	MOVE.L D0,D1
	MOVEQ #0,D2
	MOVEQ #1,D3
	JSR SEEK(A6)
	MOVE.L A3,D1
	MOVEQ #-1,D3
	JSR SEEK(A6)

;BUFFER HOLEN
	MOVE.L D0,SOUND_LEN ; LäNGE
	MOVE.L D0,D3
	MOVE.L #$10002,D1
	MOVE.L 4,A6
	JSR ALLOCMEM(A6)
	TST.L D0
	BEQ.L CLOSESOUND

;BUFFER EINLESEN
	MOVE.L D0,mt_data ; ADRESSE SOUNDMODUL
	MOVE.L A3,D1
	MOVE.L D0,D2
	MOVE.L DOS_BASE,A6
	JSR READ(A6)
	CMP.L D0,D3
	BNE.L CLOSESOUNDMEM

	jsr mt_init ; music soundtracker !!

;------------------------------------------------
; BETRIEBSSYSTEM AUSSCHALTEN

	MOVEQ #61,D0 ; SCHLEIFE 62
	LEA.L PAGE0,A0 ; ZWISCHENSPEICHERBASIS->A0
	LEA.L 8,A1 ; BASIS VEKTORTABELLE
LOOP1:
	MOVE.L (A1)+,(A0)+ ; VEKTOR KOPIEREN
	DBRA D0,LOOP1 ; SCHLEIFE ?

MAIN:
	MOVE.L #MAIN,$0020 ; MAIN->PRIV.VIOL.VEKTOR
	MOVE.W #$2700,SR ; SUPERVISOR=1,INTERRUPTLEVEL=7
	ADDA.L #6,A7 ; A7 ALTER INHALT
 
	MOVE.L A7,ADR7 ; A7 ZWISCHENSPEICHERN
	LEA.L STACK,A7 ; SUPERVISOR-STACKPTR NEU

	MOVE.W INTENAR,INTENA_BUF ;INTERRUPTREGISTER SPEICHERN
	MOVE.W DMACONR,DMACON_BUF ;INTERRUPTREGISTER SPEICHERN

;------------------------------------------------

START_OVER:
	MOVE.W #$7FFF,INTENA ; ALLE INTERRUPTS AUS
	MOVE.L #INTERRUPT,$6C ; INTERRUPT 3 VERBIEGEN
	MOVE.W #$C040,INTENA ; INTERRUPTLEVEL 3 ERLAUBEN

	MOVE.L #0,SPR0DATA ; MAUSZEIGER-DATA LöSCHEN
	MOVE.W #$7FFF,DMACON ; ALLE DMA AUS
	MOVE.W #$87C0,DMACON ; DISPLAY ETC. ERLAUBEN
	MOVE.W #$FFFF,COPCON ; COPPER DANGER BIT SET

	MOVE.W #$2000,SR ; SUPERVISOR=1,INTERRUPTLEVEL=0
;--------------------------------------------------------------------
; VORBEREITEN

	MOVE.L #TEXT,POINTER

;--------------------------------------------------------------------
; SELBSTAUFRUFENDE COPPERLISTEN ERSTELLEN !

	MOVE.L COPPER_BASE,D3 ; COPPERLIST LADEN
	MOVEQ #31,D4 ; ANZAHL COPPERLISTEN-1
	MOVEQ #0,D5

SET_NEW_COPPERLIST:

	MOVE.L D3,A1 	; SETZEN DER PLANES IN DER COPPERLIST
	ADDI.L #1000,D3 ; COPPERLISTEN-ABSTAND
	ADDQ #2,D5 ; SINUS-CODE-TABELLEN-START

	; TITEL EINFüGEN
	MOVE.W #$0100,(A1)+ ; BPLCON0
	MOVE.W #$2200,(A1)+
	MOVE.W #$008E,(A1)+ ; DIWSTRT
	MOVE.W #$4C81,(A1)+
	MOVE.W #$0090,(A1)+ ; DIWSTOP
	MOVE.W #$A0C1,(A1)+

	MOVE.L MEMORY_BASE,D1
	MOVE.L #$00E0,D2
	MOVEQ #1,D0
SET_1_PLANES:
	MOVE.W D2,(A1)+ ; BPLXPTH	
	SWAP D1
	MOVE.W D1,(A1)+ ; PLANES SETZEN
	SWAP D1
	ADDI.L #2,D2
	MOVE.W D2,(A1)+ ; BPLXPTL
	MOVE.W D1,(A1)+ ; PLANES SETZEN
	ADDI.L #2,D2
	ADDI.L #40*256,D1
	DBRA D0,SET_1_PLANES

	MOVE.W #$0108,(A1)+ ; BPL1MOD
	MOVE.W #0,(A1)+
	MOVE.W #$0108,(A1)+ ; BPL2MOD
	MOVE.W #0,(A1)+

	MOVE.W #$184,(A1)+ ; COLOR
	MOVE.W #$FFA,(A1)+
	MOVE.W #$186,(A1)+
	MOVE.W #$AFF,(A1)+

	MOVE.L #SINUS_CODE,A0
	ADDA.L D5,A0
	MOVE.L #SINUS_COLOR+64,A2
	SUBA.L D5,A2

	MOVEQ #31,D0
	MOVE.W #$4C01,D1
SET_SCROLL1:
	MOVE.W D1,(A1)+ ; WAIT
	MOVE.W #$FF00,(A1)+
	MOVE.W #$182,(A1)+ ; MOVE COLOR
	MOVE.W (A2)+,(A1)+
	MOVE.W #$102,(A1)+ ; MOVE SCROLLWERT
	MOVE.W (A0)+,(A1)+
	ADD.W #$100,D1
	DBRA D0,SET_SCROLL1

	MOVE.W #$6C01,(A1)+ ; WAIT
	MOVE.W #$FF00,(A1)+
	MOVE.W #$182,(A1)+ ; MOVE COLOR
	MOVE.W #$FFF,(A1)+

	MOVE.W #$102,(A1)+ ; MOVE SCROLLWERT
	MOVE.W #0,(A1)+
	MOVE.W #$0100,(A1)+ ; BPLCON0
	MOVE.W #$0200,(A1)+

	MOVE.W #$8C01,(A1)+ ; WAIT
	MOVE.W #$FF00,(A1)+

	; BITMAP2 EINFüGEN
	MOVE.W #$008E,(A1)+ ; DIWSTRT
	MOVE.W #$8C81,(A1)+
	MOVE.W #$0090,(A1)+ ; DIWSTOP
	MOVE.W #$ACC1,(A1)+
	MOVE.W #$0100,(A1)+ ; BPLCON0
	MOVE.W #$2200,(A1)+
	MOVE.W #$184,(A1)+ ; COLOR
	MOVE.W #$00D,(A1)+
	MOVE.W #$186,(A1)+
	MOVE.W #$F00,(A1)+

	MOVE.L BITMAP_BASE2,D1
	ADDQ #2,D1
	MOVE.L #$00E0,D2
	MOVEQ #1,D0
SET_2_PLANES:
	MOVE.W D2,(A1)+ ; BPLXPTH	
	SWAP D1
	MOVE.W D1,(A1)+ ; PLANES SETZEN
	SWAP D1
	ADDI.L #2,D2
	MOVE.W D2,(A1)+ ; BPLXPTL
	MOVE.W D1,(A1)+ ; PLANES SETZEN
	ADDI.L #2,D2
	ADDI.L #32*44,D1
	DBRA D0,SET_2_PLANES

	MOVE.W #$0108,(A1)+ ; BPL1MOD
	MOVE.W #4,(A1)+
	MOVE.W #$010A,(A1)+ ; BPL2MOD
	MOVE.W #4,(A1)+
	MOVE.W #$102,(A1)+ ; MOVE SCROLLWERT
	MOVE.W #$88,(A1)+

	MOVE.L #NONUS_CODE+64,A0
	SUBA.L D5,A0
	MOVE.L #NONUS_COLOR,A2

	MOVEQ #15,D0
	MOVE.W #$8C01,D1
SET_SCROLL2:
	MOVE.W D1,(A1)+ ; WAIT
	MOVE.W #$FF00,(A1)+
	MOVE.W #$182,(A1)+ ; MOVE COLOR
	MOVE.W (A2)+,(A1)+
	ADD.W #$100,D1
	DBRA D0,SET_SCROLL2

	MOVEQ #15,D0
	MOVE.W #$9C01,D1
SET_SCROLL3:
	MOVE.W D1,(A1)+ ; WAIT
	MOVE.W #$FF00,(A1)+
	MOVE.W #$182,(A1)+ ; MOVE COLOR
	MOVE.W (A2)+,(A1)+
	MOVE.W #$102,(A1)+ ; MOVE SCROLLWERT
	MOVE.W (A0)+,(A1)+
	ADD.W #$100,D1
	DBRA D0,SET_SCROLL3

	MOVE.W #$D001,(A1)+ ;WAIT
	MOVE.W #$FF00,(A1)+
	MOVE.W #$102,(A1)+ ; MOVE SCROLLWERT
	MOVE.W #0,(A1)+
	MOVE.W #$182,(A1)+ ; COLOR
	MOVE.W #$FFF,(A1)+
	MOVE.W #$0100,(A1)+ ; BPLCON0
	MOVE.W #$5200,(A1)+

	; BITMAP1 EINFüGEN
	MOVE.W #$008E,(A1)+ ; DIWSTRT
	MOVE.W #$D081,(A1)+
	MOVE.W #$0090,(A1)+ ; DIWSTOP
	MOVE.W #$10C1,(A1)+
	MOVE.L BITMAP_BASE1,D1
	MOVE.L #$00E0,D2
	MOVEQ #4,D0
SET_DRAGON_PLANES:
	MOVE.W D2,(A1)+ ; BPLXPTH	
	SWAP D1
	MOVE.W D1,(A1)+ ; PLANES SETZEN
	SWAP D1
	ADDI.L #2,D2
	MOVE.W D2,(A1)+ ; BPLXPTL
	MOVE.W D1,(A1)+ ; PLANES SETZEN
	ADDI.L #64*40,D1
	ADDQ #2,D2
	DBRA D0,SET_DRAGON_PLANES

	MOVE.W #$0108,(A1)+ ; BPL1MOD
	MOVE.W #0,(A1)+
	MOVE.W #$010A,(A1)+ ; BPL2MOD
	MOVE.W #0,(A1)+

	MOVE.W #$184,(A1)+ ; COLOR
	MOVE.W #$0A6,(A1)+
	MOVE.W #$186,(A1)+
	MOVE.W #$0C4,(A1)+

	MOVE.W #$FFE1,(A1)+ ; WAIT 255
	MOVE.W #$FFE2,(A1)+
	MOVE.W #$3201,(A1)+ ; WAIT BOTTOM
	MOVE.W #$FF00,(A1)+

	MOVE.W #$0040,(A1)+ ; BLTCON0 BLITTER (SHIFT=TEMPO)
	MOVE.W #$C9F0,(A1)+
	MOVE.W #$0042,(A1)+ ; BLTCON1
	MOVE.W #$0000,(A1)+
	MOVE.W #$0064,(A1)+ ; BLTAMOD
	MOVE.W #0,(A1)+
	MOVE.W #$0066,(A1)+ ; BLTDMOD
	MOVE.W #0,(A1)+
	MOVE.W #$0044,(A1)+ ; BLTAFWM
	MOVE.W #$FFFF,(A1)+
	MOVE.W #$0046,(A1)+ ; BLTALWM
	MOVE.W #$FF00,(A1)+

	MOVE.L BITMAP_BASE2,D0
	ADDQ #2,D0
	MOVE.W #$0050,(A1)+ ; BLTAPTH
	SWAP D0
	MOVE.W D0,(A1)+
	SWAP D0
	MOVE.W #$0052,(A1)+ ; BLTAPTL
	MOVE.W D0,(A1)+

	SUBQ #2,D0
	MOVE.W #$0054,(A1)+ ; BLTDPTH
	SWAP D0
	MOVE.W D0,(A1)+
	SWAP D0
	MOVE.W #$0056,(A1)+ ; BLTDPTL
	MOVE.W D0,(A1)+

	MOVE.W #$0058,(A1)+ ; BLTSIZE
	MOVE.W #$1016,(A1)+	

	MOVE.W #$080,(A1)+ ; MOVE NäCHSTE COPPERLISTE-ADRESSE
	SWAP D3
	MOVE.W D3,(A1)+
	SWAP D3
	MOVE.W #$082,(A1)+
	MOVE.W D3,(A1)+

	MOVE.W #$088,(A1)+ ; COP1JMP
	MOVE.W #0,(A1)+

	DBRA D4,SET_NEW_COPPERLIST

	SUBI.L #12,A1
	MOVE.L COPPER_BASE,D3

	MOVE.W #$080,(A1)+ ; MOVE ERSTE COPPERLIST-ADRESSE
	SWAP D3
	MOVE.W D3,(A1)+
	SWAP D3
	MOVE.W #$082,(A1)+
	MOVE.W D3,(A1)+

;--------------------------------------------------------------------
; BILDWERTE IN COPPER / DMA SETZEN

	MOVE.L #COLORS,A0
	MOVE.L #COLOR00,A1
	MOVEQ #31,D0
COPY_COLORS:
	MOVE.W (A0)+,(A1)+
	DBRA D0,COPY_COLORS

	MOVE.W #$0000,BPLCON2

	MOVE.W #$0038,DDFSTRT
	MOVE.W #$00D0,DDFSTOP

	MOVE.L COPPER_BASE,COP1LCH ; COPPERLISTE SETZEN !!!
	MOVE.W COPJMP1,D0

;--------------------------------------------------------------------

MAIN_LOOP:
	BTST #6,CIAA_PRA
	BNE MAIN_LOOP

;--------------------------------------------------------------------

ENDING:
	MOVE.W #$7FFF,INTENA ; ALLE INTERRUPTS AUS
	MOVE.W #$7FFF,DMACON ; ALLE DMA AUS

	MOVE.W #$2700,SR ; SUPERVISOR=1,INTERRUPTLEVEL=7
	ORI.W #$8000,INTENA_BUF ; SET-BIT IM ZWISCHENSPEICHER
	MOVE.W INTENA_BUF,INTENA ; ALTE INTERRUPTS HOLEN
	ORI.W #$8000,DMACON_BUF ; SET-BIT IM ZWISCHENSPEICHER
	MOVE.W DMACON_BUF,DMACON ; ALTE DMA HOLEN
	MOVE.W #0,COPCON ; COPPER DANGER BIT CLEAR
	MOVE.L GFX_BASE,A1
	MOVE.L 38(A1),COP1LCH ; ALTE COPPERLISTE
	MOVE.W COPJMP1,D0 ; ...STARTEN
 
	MOVEQ #61,D0 ; SCHLEIFE 62
	LEA.L PAGE0,A0 ; ZWISCHENSPEICHERBASIS->A0
	LEA.L 8,A1 ; BASIS VEKTORTABELLE
LOOP2:
	MOVE.L (A0)+,(A1)+ ; VEKTOR KOPIEREN
	DBRA D0,LOOP2 ; SCHLEIFE ?

	MOVE.L ADR7,A7 ; ALTER STACKPOINTER
	MOVE.W #$0000,SR ; SUPERVISOR=0,INTERRUPTLEVEL=0

	JSR mt_end ; NO MUSIC !!

CLOSESOUNDMEM:
	MOVE.L 4,A6
	MOVE.L mt_data,A1
	MOVE.L SOUND_LEN,D0
	JSR FREEMEM(A6)
CLOSESOUND:
	MOVE.L A3,D1
	MOVE.L DOS_BASE,A6
	JSR CLOSE(A6)
CLOSEBITMAP:
	MOVE.L 4,A6
	MOVE.L MEMORY_BASE,A1
	MOVE.L #68096,D0
	JSR FREEMEM(A6)
CLOSEDOS:
	MOVE.L 4,A6
	MOVE.L DOS_BASE,A1
	JSR CLOSELIBRARY(A6)
CLOSEGFX:
	MOVE.L 4,A6
	MOVE.L GFX_BASE,A1
	JSR CLOSELIBRARY(A6)
GOOUT:
	MOVEM.L (A7)+,D0-D7/A0-A6 ; STACK->R
	RTS

;--------------------------------------------------------------------
; FILE-ERRORS

READERROR:
	MOVE.L 4,A6
	MOVE.L D4,A1
	MOVE.L D3,D0
	JSR FREEMEM(A6)
NOBUFFERMEM:	
	MOVE.L A3,D1
	MOVE.L DOS_BASE,A6
	JSR CLOSE(A6)
	JMP CLOSEBITMAP

;--------------------------------------------------------------------
; NäCHSTE PIXEL DER LAUFSCHRIFT KOPIEREN

INTERRUPT:
	MOVEM.L D0-D7/A0-A6,-(A7) ; R->S

	JSR mt_music ; PLAY MUSIC !!

	ADDI.B #1,ANZ_PIXEL ; ALLE 4 MAL KOPIEREN
	CMPI.B #4,ANZ_PIXEL
	BEQ DO_BLIT

	ADDI.B #1,NEXT_CYCLE ; COLOR-CYCLING ?
	CMPI.B #2,NEXT_CYCLE
	BNE NOTHING_TO_BLIT
	MOVE.B #0,NEXT_CYCLE

	SUBI.L #1,NEXT_COLOR ; 1.FARBE ?
	CMPI.L #-1,NEXT_COLOR
	BNE NOT_COLOR_END
	MOVE.L #23,NEXT_COLOR

NOT_COLOR_END:
	MOVE.L #FIRE_COLOR,A0 ; FARBLISTE
	ADDA.L NEXT_COLOR,A0
	ADDA.L NEXT_COLOR,A0

	MOVEQ #23,D0 ; FARBEN äNDERN
	MOVE.L #$DFF190,A1
COPY_FIRE_COLORS:
	MOVE.W (A0)+,(A1)+
	DBRA D0,COPY_FIRE_COLORS

	JMP NOTHING_TO_BLIT

DO_BLIT:
	MOVE.B #0,ANZ_PIXEL

	MOVE.L BITMAP_BASE2,D0
	ADDI.L #42,D0

	MOVE.L MEMORY_BASE,D1
	ADDI.L #1280,D1

	MOVEQ #0,D2
	MOVE.L POINTER,A0 ; BUCHSTABE ERMITTELN
	ADD.B (A0)+,D2
	MOVE.L A0,POINTER

	CMP.B #0,D2 ; TEXTENDE ?
	BNE GO_ON_TEXTING
	MOVE.L #TEXT,POINTER
	JMP NOTHING_TO_BLIT
	
GO_ON_TEXTING:
	ADD.L D2,D2
	DIVU #40,D2

	SWAP D2
	ADD.W D2,D1
	SWAP D2

	MULU #40*32,D2
	ADD.W D2,D1

	MOVE.W #$09F0,BLTCON0 ; NäCHSTEN BUCHSTABEN BLITTEN
	MOVE.W #0,BLTCON1
	MOVE.L #-1,BLTAFWM
	MOVE.W #38,BLTAMOD
	MOVE.W #42,BLTDMOD
	MOVE.L D1,BLTAPTH
	MOVE.L D0,BLTDPTH
	MOVE.W #$0801,BLTSIZE
	ADDI.L #44*32,D0
	ADDI.L #40*256,D1
	MOVE.L D1,BLTAPTH
	MOVE.L D0,BLTDPTH
	MOVE.W #$0801,BLTSIZE

NOTHING_TO_BLIT:
	MOVE.W #$0040,INTREQ ; INTERRUPT LöSCHEN
	MOVEM.L (A7)+,D0-D7/A0-A6 ; S->R
	RTE

;--------------------------------------------------------------------
; IFF-LOADER		BY DRAGON
;
; A0 : BITMAP ZUM FüLLEN
; A1 : MEMORY DER BILDDATEN
; A2 : COLORMAP ODER NULL
; D0 : WIDTH
; D1 : HEIGHT
; D2 : DEPTH
;
; RESULT.B TRUE OR FALSE IN D0
;--------------------------------------------------------------------
IFFLOAD:
	MOVEM.L D3-D6/A3-A5,-(A7)

	CMPI.L #"FORM",(A1) ;FORM ?
	BNE.L IFF_NOIFF
	ADDA.L #8,A1

	CMPI.L #"ILBM",(A1)+ ;ILBM ?
	BNE.L IFF_NOIFF

	CMPI.L #"BMHD",(A1) ;BMHD ?
	BNE.L IFF_NOIFF
	
	ADDA.L #8,A1
	MOVE.W (A1)+,D6	; X
	MOVE.W (A1),D5		; Y
	ADDA.L #6,A1
	MOVE.B (A1),D4		; DEPTH
	ADDA.L #2,A1
	MOVE.B (A1),D3		; COMPRESSED ?
	ADDA.L #10,A1

	CMP.W D0,D6
	BNE.L IFF_NOIFF
	CMP.W D1,D5
	BNE.L IFF_NOIFF
	CMP.B D2,D4
	BNE.L IFF_NOIFF

	ADD.W #15,D0 ;->X IN BYTES
	LSR.W #4,D0
	LSL.W #1,D0

	CLR.L D4			; MODULOS BERECHNEN
	MOVE.W D1,D4
	SUBQ #1,D4
	MULU D0,D4
	MOVE.L D4,A4
	CLR.L D4
	MOVE.B D2,D4
	SUBQ.W #1,D4
	MULU D0,D4
	CLR.L D5
	MOVE.W D1,D5
	MULU D4,D5
	MOVE.L D5,A5
	ADDA.L A4,A5

IFF_NEXTCHUNK:	
	CMPI.L #"CMAP",(A1) ;CMAP ?
	BEQ.S IFF_CMAP
	CMPI.L #"BODY",(A1)+ ;BODY ?
	BEQ.S IFF_BODY
	MOVE.L (A1),D4
	ADDA.L D4,A1
	ADDA.L #4,A1
	JMP IFF_NEXTCHUNK

IFF_CMAP:
	ADDA.L #4,A1
	MOVE.L A1,A3 
	ADDA.L (A1),A1
	ADDA.L #4,A1
	CMPA.L #0,A2	; COLORS LADEN ?
	BEQ.S IFF_ENDCOLORS
	ADDA.L #4,A3
	MOVEQ #1,D4
	LSL.W D2,D4	; ANZAHL COLORS
	SUBQ #1,D4
IFF_COLORSET:
	CLR.W D6
	CLR.W D5
	MOVE.B (A3)+,D5
	LSL #4,D5
	OR.W D5,D6
	CLR.W D5 
	MOVE.B (A3)+,D5
	OR.W D5,D6
	CLR.W D5
	MOVE.B (A3)+,D5
	LSR #4,D5
	OR.W D5,D6 
	MOVE.W D6,(A2)+
	DBRA D4,IFF_COLORSET
IFF_ENDCOLORS:
	JMP IFF_NEXTCHUNK

IFF_BODY:
	ADDA.L #4,A1 ;COMPACT ?
	TST.B D3
	BEQ IFF_NOIFF
	MOVEQ #0,D6
	MOVEQ #0,D5
	MOVEQ #0,D4
;---------------
IFF_CODE:
	MOVEQ #0,D3
	CMPI.B #0,(A1)
	BMI IFF_SAMEBYTE
	
	MOVE.B (A1)+,D3
	ADD.W D3,D4
IFF_HIGHBYTE:
	MOVE.B (A1)+,(A0)+
	DBRA D3,IFF_HIGHBYTE
	JMP IFF_NEXTCODE
	
IFF_SAMEBYTE:
	MOVE.B (A1)+,D3
	NEG.B D3
	ADD.W D3,D4
IFF_LOWBYTE:
	MOVE.B (A1),(A0)+
	DBRA D3,IFF_LOWBYTE
	ADDA.L #1,A1
;---------------
IFF_NEXTCODE:
	ADDQ.W #1,D4
	CMP.W D0,D4
	BNE.S IFF_CODE

IFF_NEXTPLANE:
	ADDA.L A4,A0
	ADDQ.B #1,D5
	MOVEQ #0,D4
	CMP.B D2,D5
	BNE.S IFF_CODE

IFF_NEXTZEILE:
	SUBA.L A5,A0
	ADDQ.W #1,D6
	MOVEQ #0,D5
	CMP.W D1,D6
	BNE.S IFF_CODE
	MOVEQ #1,D0
IFF_ENDE:
	MOVEM.L (A7)+,D3-D6/A3-A5 ; STACK->R
	RTS

IFF_NOIFF:
	CLR.B D0
	JMP IFF_ENDE

;--------------------------------------------------------------------
; -----------------------------------------------
; ------- Soundtracker V2.4 - playroutine -------
; -----------------------------------------------

; call 'mt_init' to initialize the playroutine
; call  mt_end   to end
; set vertical blank-interrupt to mt_music

mt_init:MOVE.L	mt_data,a0
	add.l	#$03b8,a0
	moveq	#$7f,d0
	moveq	#0,d1
mt_init1:
	move.l	d1,d2
	subq.w	#1,d0
mt_init2:
	move.b	(a0)+,d1
	cmp.b	d2,d1
	bgt.s	mt_init1
	dbf	d0,mt_init2
	addq.b	#1,d2

mt_init3:
	MOVE.L	mt_data,a0
	lea	mt_sample1(pc),a1
	asl.l	#8,d2
	asl.l	#2,d2
	add.l	#$438,d2
	add.l	a0,d2
	moveq	#$1e,d0
mt_init4:
	move.l	d2,(a1)+
	moveq	#0,d1
	move.w	42(a0),d1
	asl.l	#1,d1
	add.l	d1,d2
	add.l	#$1e,a0
	dbf	d0,mt_init4

	lea	mt_sample1(PC),a0
	moveq	#0,d0
mt_clear:
	move.l	(a0,d0.w),a1
	clr.l	(a1)
	addq.w	#4,d0
	cmp.w	#$7c,d0
	bne.s	mt_clear

	clr.w	$dff0a8
	clr.w	$dff0b8
	clr.w	$dff0c8
	clr.w	$dff0d8
	clr.l	mt_partnrplay
	clr.l	mt_partnote
	clr.l	mt_partpoint

	MOVE.L mt_data,A0
	MOVE.B $3B6(A0),mt_maxpart+1
	
;	move.b	mt_data+$3b6,mt_maxpart+1

	rts

; call 'mt_end' to switch the sound off

mt_end:	clr.w	$dff0a8
	clr.w	$dff0b8
	clr.w	$dff0c8
	clr.w	$dff0d8
	move.w	#$f,$dff096
	rts

; the playroutine - call this every frame

mt_music:
	addq.w	#1,mt_counter
mt_cool:cmp.w	#6,mt_counter
	bne.s	mt_notsix
	clr.w	mt_counter
	bra	mt_rout2

mt_notsix:
	lea	mt_aud1temp(PC),a6
	tst.b	3(a6)
	beq.s	mt_arp1
	lea	$dff0a0,a5		
	bsr.s	mt_arprout
mt_arp1:lea	mt_aud2temp(PC),a6
	tst.b	3(a6)
	beq.s	mt_arp2
	lea	$dff0b0,a5
	bsr.s	mt_arprout
mt_arp2:lea	mt_aud3temp(PC),a6
	tst.b	3(a6)
	beq.s	mt_arp3
	lea	$dff0c0,a5
	bsr.s	mt_arprout
mt_arp3:lea	mt_aud4temp(PC),a6
	tst.b	3(a6)
	beq.s	mt_arp4
	lea	$dff0d0,a5
	bra.s	mt_arprout
mt_arp4:rts

mt_arprout:
	move.b	2(a6),d0
	and.b	#$0f,d0
	tst.b	d0
	beq	mt_arpegrt
	cmp.b	#$01,d0
	beq.s	mt_portup
	cmp.b	#$02,d0
	beq.s	mt_portdwn
	cmp.b	#$0a,d0
	beq.s	mt_volslide
	rts

mt_portup:
	moveq	#0,d0
	move.b	3(a6),d0
	sub.w	d0,22(a6)
	cmp.w	#$71,22(a6)
	bpl.s	mt_ok1
	move.w	#$71,22(a6)
mt_ok1:	move.w	22(a6),6(a5)
	rts

mt_portdwn:
	moveq	#0,d0
	move.b	3(a6),d0
	add.w	d0,22(a6)
	cmp.w	#$538,22(a6)
	bmi.s	mt_ok2
	move.w	#$538,22(a6)
mt_ok2:	move.w	22(a6),6(a5)
	rts

mt_volslide:
	moveq	#0,d0
	move.b	3(a6),d0
	lsr.b	#4,d0
	tst.b	d0
	beq.s	mt_voldwn
	add.w	d0,18(a6)
	cmp.w	#64,18(a6)
	bmi.s	mt_ok3
	move.w	#64,18(a6)
mt_ok3:	move.w	18(a6),8(a5)
	rts
mt_voldwn:
	moveq	#0,d0
	move.b	3(a6),d0
	and.b	#$0f,d0
	sub.w	d0,18(a6)
	bpl.s	mt_ok4
	clr.w	18(a6)
mt_ok4:	move.w	18(a6),8(a5)
	rts

mt_arpegrt:
	move.w	mt_counter(PC),d0
	cmp.w	#1,d0
	beq.s	mt_loop2
	cmp.w	#2,d0
	beq.s	mt_loop3
	cmp.w	#3,d0
	beq.s	mt_loop4
	cmp.w	#4,d0
	beq.s	mt_loop2
	cmp.w	#5,d0
	beq.s	mt_loop3
	rts

mt_loop2:
	moveq	#0,d0
	move.b	3(a6),d0
	lsr.b	#4,d0
	bra.s	mt_cont
mt_loop3:
	moveq	#$00,d0
	move.b	3(a6),d0
	and.b	#$0f,d0
	bra.s	mt_cont
mt_loop4:
	move.w	16(a6),d2
	bra.s	mt_endpart
mt_cont:
	add.w	d0,d0
	moveq	#0,d1
	move.w	16(a6),d1
	and.w	#$fff,d1
	lea	mt_arpeggio(PC),a0
mt_loop5:
	move.w	(a0,d0),d2
	cmp.w	(a0),d1
	beq.s	mt_endpart
	addq.l	#2,a0
	bra.s	mt_loop5
mt_endpart:
	move.w	d2,6(a5)
	rts

mt_rout2:
	MOVE.L	mt_data,a0
	move.l	a0,a3
	add.l	#$0c,a3
	move.l	a0,a2
	add.l	#$3b8,a2
	add.l	#$43c,a0
	move.l	mt_partnrplay(PC),d0
	moveq	#0,d1
	move.b	(a2,d0),d1
	asl.l	#8,d1
	asl.l	#2,d1
	add.l	mt_partnote(PC),d1
	move.l	d1,mt_partpoint
	clr.w	mt_dmacon

	lea	$dff0a0,a5
	lea	mt_aud1temp(PC),a6
	bsr	mt_playit
	lea	$dff0b0,a5
	lea	mt_aud2temp(PC),a6
	bsr	mt_playit
	lea	$dff0c0,a5
	lea	mt_aud3temp(PC),a6
	bsr	mt_playit
	lea	$dff0d0,a5
	lea	mt_aud4temp(PC),a6
	bsr	mt_playit
	move.w	#$01f4,d0
mt_rls:	dbf	d0,mt_rls

	move.w	#$8000,d0
	or.w	mt_dmacon,d0
	move.w	d0,$dff096

	lea	mt_aud4temp(PC),a6
	cmp.w	#1,14(a6)
	bne.s	mt_voice3
	move.l	10(a6),$dff0d0
	move.w	#1,$dff0d4
mt_voice3:
	lea	mt_aud3temp(PC),a6
	cmp.w	#1,14(a6)
	bne.s	mt_voice2
	move.l	10(a6),$dff0c0
	move.w	#1,$dff0c4
mt_voice2:
	lea	mt_aud2temp(PC),a6
	cmp.w	#1,14(a6)
	bne.s	mt_voice1
	move.l	10(a6),$dff0b0
	move.w	#1,$dff0b4
mt_voice1:
	lea	mt_aud1temp(PC),a6
	cmp.w	#1,14(a6)
	bne.s	mt_voice0
	move.l	10(a6),$dff0a0
	move.w	#1,$dff0a4
mt_voice0:
	move.l	mt_partnote(PC),d0
	add.l	#$10,d0
	move.l	d0,mt_partnote
	cmp.l	#$400,d0
	bne.s	mt_stop
mt_higher:
	clr.l	mt_partnote
	addq.l	#1,mt_partnrplay
	moveq	#0,d0
	move.w	mt_maxpart(PC),d0
	move.l	mt_partnrplay(PC),d1
	cmp.l	d0,d1
	bne.s	mt_stop
	clr.l	mt_partnrplay
;	st	Pflag
mt_stop:tst.w	mt_status
	beq.s	mt_stop2
	clr.w	mt_status
	bra.s	mt_higher
mt_stop2:
	rts

mt_playit:
	move.l	(a0,d1.l),(a6)
	addq.l	#4,d1
	moveq	#0,d2
	move.b	2(a6),d2
	and.b	#$f0,d2
	lsr.b	#4,d2

	move.b	(a6),d0
	and.b	#$f0,d0
	or.b	d0,d2
	tst.b	d2
	beq.s	mt_nosamplechange

	moveq	#0,d3
	lea	mt_samples(PC),a1
	move.l	d2,d4
	asl.l	#2,d2
	mulu	#$1e,d4
	move.l	(a1,d2),4(a6)
	move.w	(a3,d4.l),8(a6)
	move.w	2(a3,d4.l),18(a6)
	move.w	4(a3,d4.l),d3
	tst.w	d3
	beq.s	mt_displace
	move.l	4(a6),d2
	add.l	d3,d2
	move.l	d2,4(a6)
	move.l	d2,10(a6)
	move.w	6(a3,d4.l),8(a6)
	move.w	6(a3,d4.l),14(a6)
	move.w	18(a6),8(a5)
	bra.s	mt_nosamplechange

mt_displace:
	move.l	4(a6),d2
	add.l	d3,d2
	move.l	d2,10(a6)
	move.w	6(a3,d4.l),14(a6)
	move.w	18(a6),8(a5)
mt_nosamplechange:
	move.w	(a6),d0
	and.w	#$fff,d0
	tst.w	d0
	beq.s	mt_retrout
	move.w	(a6),16(a6)
	move.w	20(a6),$dff096
	move.l	4(a6),(a5)
	move.w	8(a6),4(a5)
	move.w	(a6),d0
	and.w	#$fff,d0
	move.w	d0,6(a5)
	move.w	20(a6),d0
	or.w	d0,mt_dmacon

mt_retrout:
	tst.w	(a6)
	beq.s	mt_nonewper
	move.w	(a6),22(a6)

mt_nonewper:
	move.b	2(a6),d0
	and.b	#$0f,d0
	cmp.b	#$0b,d0
	beq.s	mt_posjmp
	cmp.b	#$0c,d0
	beq.s	mt_setvol
	cmp.b	#$0d,d0
	beq.s	mt_break
	cmp.b	#$0e,d0
	beq.s	mt_setfil
	cmp.b	#$0f,d0
	beq.s	mt_setspeed
	rts

mt_posjmp:
	not.w	mt_status
	moveq	#0,d0
	move.b	3(a6),d0
	subq.b	#1,d0
	move.l	d0,mt_partnrplay
	rts

mt_setvol:
	move.b	3(a6),8(a5)
	rts

mt_break:
	not.w	mt_status
	rts

mt_setfil:
	moveq	#0,d0
	move.b	3(a6),d0
	and.b	#1,d0
	rol.b	#1,d0
	and.b	#$fd,$bfe001
	or.b	d0,$bfe001
	rts

mt_setspeed:
	move.b	3(a6),d0
	and.b	#$0f,d0
	beq.s	mt_back
	clr.w	mt_counter
	move.b	d0,mt_cool+3
mt_back:rts

mt_aud1temp:
	blk.w	10,0
	dc.w	1
	blk.w	2,0
mt_aud2temp:
	blk.w	10,0
	dc.w	2
	blk.w	2,0
mt_aud3temp:
	blk.w	10,0
	dc.w	4
	blk.w	2,0
mt_aud4temp:
	blk.w	10,0
	dc.w	8
	blk.w	2,0

mt_partnote:	dc.l	0
mt_partnrplay:	dc.l	0
mt_counter:	dc.w	0
mt_partpoint:	dc.l	0
mt_samples:	dc.l	0
mt_sample1:	blk.l	31,0
mt_maxpart:	dc.w	0
mt_dmacon:	dc.w	0
mt_status:	dc.w	0

mt_arpeggio:
	dc.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c
	dc.w $023a,$021a,$01fc,$01e0,$01c5,$01ac,$0194,$017d
	dc.w $0168,$0153,$0140,$012e,$011d,$010d,$00fe,$00f0
	dc.w $00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097
	dc.w $008f,$0087,$007f,$0078,$0071,$0000,$0000,$0000

;--------------------------------------------------------------------

STACK_END: BLK.W 4096 ; NEUER STACKSPEICHER
STACK: DC.W 0 ; OBERES STACKENDE
ADR7: DC.L 0 ; ZWISCHENSPEICHER A7
PAGE0: BLK.L 62 ; ZWISCHENSPEICHER ZERO
INTENA_BUF: DC.W 0 ;  ZWISCHENSPEICHER INTERRUPTREGISTER
DMACON_BUF: DC.W 0 ;  ZWISCHENSPEICHER DMAREGISTER
COLORS: BLK.W 32,0 ;  COLORTABLE
MEMORY_BASE: DC.L 0 ; ALLOKIERTER SPEICHER
BITMAP_BASE1: DC.L 0 ; BILDADRESSE
BITMAP_BASE2: DC.L 0 ; BILDADRESSE
COPPER_BASE: DC.L 0 ; COPPERLISTEN
DOS_BASE: DC.L 0
GFX_BASE: DC.L 0

DATA_NAME: DC.B "DemoPic",0 ; BILDNAME
DRAGON_NAME: DC.B "DemoDrache",0; BILDNAME
DOS_NAME: DC.B "dos.library",0
GFX_NAME: DC.B "graphics.library",0

	EVEN
SINUS_CODE:
	DC.W $88,$AA,$CC,$DD,$EE,$EE,$FF,$FF,$FF
	DC.W $FF,$FF,$EE,$EE,$DD,$CC,$AA	
	DC.W $88,$66,$44,$22,$11,$11,0,0,0
	DC.W 0,0,$11,$11,$22,$44,$66

	DC.W $88,$AA,$CC,$DD,$EE,$EE,$FF,$FF,$FF
	DC.W $FF,$FF,$EE,$EE,$DD,$CC,$AA	
	DC.W $88,$66,$44,$22,$11,$11,0,0,0
	DC.W 0,0,$11,$11,$22,$44,$66

SINUS_COLOR:
	DC.W $F00,$F10,$F20,$F30,$F40,$F50,$F60,$F70
	DC.W $F80,$F90,$FA0,$FB0,$FC0,$FD0,$FE0,$FF0
	DC.W $FF0,$FE0,$FD0,$FC0,$FB0,$FA0,$F90,$F80
	DC.W $F70,$F60,$F50,$F40,$F30,$F20,$F10,$F00

	DC.W $F00,$F10,$F20,$F30,$F40,$F50,$F60,$F70
	DC.W $F80,$F90,$FA0,$FB0,$FC0,$FD0,$FE0,$FF0
	DC.W $FF0,$FE0,$FD0,$FC0,$FB0,$FA0,$F90,$F80
	DC.W $F70,$F60,$F50,$F40,$F30,$F20,$F10,$F00

NONUS_CODE:
	DC.W $88,$AA,$BB,$CC,$CC,$CC,$BB,$AA
	DC.W $88,$66,$55,$44,$44,$44,$55,$66

	DC.W $88,$AA,$BB,$CC,$CC,$CC,$BB,$AA
	DC.W $88,$66,$55,$44,$44,$44,$55,$66
	DC.W $88,$AA,$BB,$CC,$CC,$CC,$BB,$AA
	DC.W $88,$66,$55,$44,$44,$44,$55,$66
	DC.W $88,$AA,$BB,$CC,$CC,$CC,$BB,$AA
	DC.W $88,$66,$55,$44,$44,$44,$55,$66

NONUS_COLOR:
	DC.W $08F,$09F,$0AF,$0BF,$0CF,$0DF,$0EF,$0FF
	DC.W $0FF,$0EF,$0DF,$0CF,$0BF,$0AF,$09F,$08F
	DC.W $678,$789,$89A,$9AB,$ABC,$BCD,$CDE,$DEF
	DC.W $DEF,$CDE,$BCD,$ABC,$9AB,$89A,$789,$678

POINTER:
	DC.L 0

TEXT:	DC.B "Hallo ",2," Leute vor euerm ",1,"    "
	DC.B "Dies ist mein erstes Intro und "
	DC.B "ich hoffe, dass ihr es gut findet...  "
	DC.B "Sieht doch ganz fein aus, oder ??  "
	DC.B "Ich gebe zu, die Grafik ist nicht Spitze und "
	DC.B "die Musik klingt etwas fade, doch dies war mir "
	DC.B "nicht das wichtigste.  Und als erstes Intro ist es "
	DC.B "entschuldigbar, dass ich keinen Grafiker und "
	DC.B "keinen Musikvirtuisten beigezogen habe !!  "
	DC.B "So war ich zu faul, mit DPaint einen wunderbaren "
	DC.B "Schriftzug zu entwerfen und kopierte kurzerhand "
	DC.B "den ROM-Topaz-Font verdoppelt in meine Bitmap und "
	DC.B "colorierte diesen auch nicht mit den beiden andern "
	DC.B "Farben.  Doch vielleicht findet sich mal einer, welche "
	DC.B "diese Arbeit nachholen wird...  "
	DC.B "Die Musik erstellte ich mit Soundtracker 2.4 und "
	DC.B "speicherte als Modul ab.  Das Intro ist so intelligent"
	DC.B ", dass es einen anders langen Soundtrack auch richtig "
	DC.B "spielt. ( => Aufruf zum komponieren !! )  "
	DC.B "Anstoss zum schreiben des Intros gab, nachdem ich von "
	DC.B "C auf Assembler umgestiegen bin, die Tatsache, dass "
	DC.B "ich mehr Hardware-Tuning erreichen wollte, und darum "
	DC.B "beim Hardware studieren auf das Scrollregister im "
	DC.B "BPLCON1 gestossen bin.  Da ich sowieso mit dem Copper "
	DC.B "etwas spielen wollte entstand daraus dieses Intro.  " 
 	DC.B "So seht ihr 32 verschiedene Copperlisten vorbeihuschen"
	DC.B ", welche sich selber nacheinander aufrufen !!  "
	DC.B "Darin wird das BPLCON1-Register fortlaufend manipuliert"
	DC.B ", damit der Betrachter meint, die Schrift verforme "
	DC.B "sich.  Am Ende wird vom Copper der Blitter aktiviert "
	DC.B "und der Text-Bereich um 4 (!) Pixel gescrollt "
	DC.B "( da ich das Scrollregister ja schon vergeben hab )  "
	DC.B "Der Prozessor achtet als nur auf den linken Mausknopf "
	DC.B "und ist damit riesig ausgelastet... naja beinahe !!  "
	DC.B "Zudem muss er in einem Interrupt vom Copper den "
	DC.B "folgenden Buchstaben hinblitten und die Musikroutine, "
	DC.B "welche von der Replay-Routine des Soundtrackers stammt "
	DC.B "( vielen Dank an den Verfasser ), leicht modifiziert "
	DC.B "aufrufen.  "
	DC.B "Das Color-Cycling der Feuerflamme des Drachens kann "
	DC.B "ebenfalls mit DPaint verbessert werden.  ",1,"  "
	DC.B "Der Source-Code ( Seka-Assembler) des Intros liegt "
	DC.B "bei und darf auch zu eigenen Versuchen missbraucht "
	DC.B "werden !!  Falls ",3," du ",3," auch leidenschaftlich "
	DC.B "programmierst in Assembler, C oder vergleichbarem "
	DC.B "und Lust hast, eigenes Wissen weiterzugeben, Source "
	DC.B "zu tauschen oder gemeinsam etwas ( = Spiel ) zu "
	DC.B "programmieren, dann setz dich mit mir in Verbindung : "
	DC.B "Hansruedi Graf , ( Dragon ) , Jonenbachstr.202 , "
	DC.B "CH - 8911 Rifferswil , Schweiz   "
	DC.B "Also, bis bald !!     Bye bye "
	DC.B "                             ",0 

ANZ_PIXEL:
	DC.B 0

	EVEN
NEXT_COLOR:
	DC.L 0

NEXT_CYCLE:
	DC.B 0

	EVEN
FIRE_COLOR:
	DC.W $FB0,$F90,$F80,$F00
	DC.W 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	
	DC.W $FB0,$F90,$F80,$F00
	DC.W 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	

SOUND_NAME: DC.B "DemoSong",0
	EVEN
SOUND_LEN: DC.L 0
mt_data: DC.L ; ADRESSE DES SOUNDTRACKMODULES

