
; Listing6r.s	SAMENVATTING VAN LES 6 + MUZIEK-ROUTINE.


	SECTION	CIPenCOP,CODE

Begin:
	move.l	4.w,a6		; Execbase
	jsr	-$78(a6)	; Disable
	lea	GfxName(PC),a1	
	jsr	-$198(a6)	; OpenLibrary
	move.l	d0,GfxBase	;
	move.l	d0,a6
	move.l	$26(a6),OldCop	; Opslaan oude COP

;	POINTEN NAAR ONZE BITPLANES

	MOVE.L	#BITPLANETEXT-2,d0	; Adres doel-Bitplane in d0
	LEA	BPLPOINTERS,A1		; COP - Pointer
	move.w	d0,6(a1)
	swap	d0
	move.w	d0,2(a1)

	MOVE.L	#BITPLANEMATRIX-2,d0	; Adres doel-Bitplane in d0,
	LEA	BPLPOINTERS2,A1		; COP - Pointer
	move.w	d0,6(a1)
	swap	d0
	move.w	d0,2(a1)

	move.l	#COPPERLIST,$dff080	; COP1LC - onze COP
	move.w	d0,$dff088		; COPJMP1 - Starten onze COP
	move.w	#0,$dff1fc		; FMODE - Deactiveert AGA
	move.w	#$c00,$dff106		; BPLCON3 - Deactiveert AGA
 
	bsr.w	Matrix3	 ; Maak een patroon

	bsr.w	mt_init	 ; Initialiseert de Muziekroutine

mouse:
	cmpi.b	#$ff,$dff006	; Zijn we op lijn 255?
	bne.s	mouse

	bsr.w	PrintCharakter	; Letter voor letter
	bsr.w	MEGAScroll	; Scoll van een 640 Pixel breed beeld
				; op een LowRes-Screen van 320 Pixels
	bsr.w	BOING		; Laat het Text-Bitplane "springen"
	bsr.w	mt_music	; Speelt een modje.

Wacht:
	cmpi.b	#$ff,$dff006	; Zijn we op lijn 255?
	beq.s	Wacht		

	btst	#6,$bfe001	; linker Muisknop gedruckt?
	bne.s	mouse

	bsr.w	mt_end

	move.l	OldCop(PC),$dff080	; COP1LC - Pointer naar oude COP
	move.w	d0,$dff088		; COPJMP1 - en start 'm

	move.l	4.w,a6
	jsr	-$7e(a6)	; Enable
	move.l	GfxBase(PC),a1
	jsr	-$19e(a6)	; Closelibrary 
	rts

; DATA

GfxName:
	dc.b	"graphics.library",0,0
GfxBase:
	dc.l	0
OldCop:
	dc.l	0

;************************************************************************
;*	Drukt 1 letter per FRAME op een SCREEN van 640 pixels breed     *
;************************************************************************

PRINTCharakter:
	MOVE.L	PointoText(PC),A0 
	MOVEQ	#0,D2		
	MOVE.B	(A0)+,D2	
	CMP.B	#$ff,d2		
	beq.s	EindeTEXT	
	TST.B	d2		; Einde-Regel Signaal? ($00)
	bne.s	NietEindeRegel	

	ADD.L	#80*7,PointoBitplane	
	ADDQ.L	#1,PointoText		
					
	move.b	(a0)+,d2		

NietEindeRegel:
	SUB.B	#$20,D2		
	MULU.W	#8,D2		
				
	MOVE.L	D2,A2
	ADD.L	#FONT,A2	

	MOVE.L	PointoBitplane(PC),A3 

; Teken de letter lijn voor lijn

	MOVE.B	(A2)+,(A3)	; Teken lijn 1 van de letter
	MOVE.B	(A2)+,80(A3)	; Teken lijn 2 van de letter
	MOVE.B	(A2)+,80*2(A3)	; Teken lijn 3 van de letter
	MOVE.B	(A2)+,80*3(A3)	; Teken lijn 4 van de letter
	MOVE.B	(A2)+,80*4(A3)	; Teken lijn 5 van de letter
	MOVE.B	(A2)+,80*5(A3)	; Teken lijn 6 van de letter
	MOVE.B	(A2)+,80*6(A3)	; Teken lijn 7 van de letter
	MOVE.B	(A2)+,80*7(A3)	; Teken lijn 8 van de letter

	ADDQ.L	#1,PointoBitplane 
	ADDQ.L	#1,PointoText	

EindeTEXT:
	RTS

PointoText:
	dc.l	TEXT

PointoBitplane:
	dc.l	BITPLANETEXT

TEXT:
        dc.b    "          DEZE DEMO VAT LES 6 SAMEN, EN "
        dc.b    "BEVAT ONDER ANDERE DEZE:                ",0
        dc.b    "                                        "
        dc.b    "                                        ",0
        dc.b    "          DE PRINTROUTINE VOOR 8X8 PIXEL"
        dc.b    "GROTE KARAKTERS, ALS OOK                ",0
        dc.b    "                                        "
        dc.b    "                                        ",0
        dc.b    "          DE HORIZONTALE SCROLL MET DE B"
        dc.b    "PLCON1 ($dff102) EN MET DE              ",0
        dc.b    "                                        "
        dc.b    "                                        ",0
        dc.b    "          PLANEPOINTERS EN HET GEBRUIK V"
        dc.b    "AN DE VOORGEDEFINIEERDE TABEL           ",0
        dc.b    "                                        "
        dc.b    "                                        ",0
        dc.b    "          VOOR DE VERTICALE SCROLL VAN D"
        dc.b    "EZE TEXT.                               ",0
        dc.b    "                                        "
        dc.b    "                                        ",0
        dc.b    "          HET PLAYFIELD, WAAROP DEZE TEX"
        dc.b    "T GEPRINT IS, IS ZO GROOT ALS EEN       ",0
        dc.b    "                                        "
        dc.b    "                                        ",0
        dc.b    "          HIRES-SCREEN, DUS HET IS 640 P"
        dc.b    "IXELS IN DE BREEDTE EN 256 IN DE        ",0
        dc.b    "                                        "
        dc.b    "                                        ",0
        dc.b    "          HOOGTE, EN WORD ZOWEL VERTICAA"
        dc.b    "L ALS HORIZONTAAL GESCROLLT!!!          ",0
        dc.b    "                                        "
        dc.b    "                                        ",0
        dc.b    "          HET BITPLANE MET DE HOKJES WOR"
        dc.b    "DT ECHTER ALEEN HEEN EN WEER            ",0
        dc.b    "                                        "
        dc.b    "                                        ",0
        dc.b    "          GESCROLLD !!! DE VERTICALE SCR"
        dc.b    "OLL HEEFT EEN VARIABEL TEMPO,           ",0
        dc.b    "                                        "
        dc.b    "                                        ",0
        dc.b    "          OMDAT DEZE DOOR EEN TABEL WORD"
        dc.b    " BEPAALD. DE HORIZONTALE IS             ",0
        dc.b    "                                        "
        dc.b    "                                        ",0
        dc.b    "          ALTIJD 2 PIXELS PER FRAME... T"
        dc.b    "OT ZIENS IN LES7.TXT!!!                 ",$FF

	EVEN

;************************************************************************
;*	Scroll van 320 Pixels naar Links en Rechts  (Listing6o.s)       *
;************************************************************************

; OPMERKING: Deze is zo aangepast dat we alleen het bitplane van de Matrix
; 	     scrollen!


MEGAScroll:
	addq.w	#1,HoeVaak	
	cmp.w	#160,HoeVaak	
	bne.S	BeweegNogEens	
	BCHG.B	#1,RechtsLinks	
	CLR.w	HoeVaak		
	rts

BeweegNogEens:
	BTST	#1,RechtsLinks	
	BEQ.S	GaLinks
	bsr.s	Rechts	    ; Scrollt 1 Pixel naar Rechts
	bsr.s	Rechts	    ; Scrollt 1 Pixel naar Rechts
			    ; 2 Pixels per Frame, dus dubbele snelheid
	rts

GaLinks:
	bsr.s	Links		; Scrollt 1 Pixel naar Links
	bsr.s	Links		; Scrollt 1 Pixel naar Links
				; Ook hier dubbele snelheid
	rts

HoeVaak:
	DC.W	0

RechtsLinks:
	DC.W	0

Rechts:
	CMP.B	#$ff,MIJNBPCON1
	BNE.s	CON1ADDA
	LEA	BPLPOINTERS,A1
	move.w	2(a1),d0
	swap	d0	
	move.w	6(a1),d0

	LEA	BPLPOINTERS2,A2 
	move.w	2(a2),d1
	swap	d1
	move.w	6(a2),d1

	subq.l	#2,d0		
	subq.l	#2,d1		

	clr.b	MIJNBPCON1 

	move.w	d0,6(a1)  
	swap	d0	  
	move.w	d0,2(a1)  

;	Pointen naar MATRIX-Bitplane

	move.w	d1,6(a2)  
	swap	d1	  
	move.w	d1,2(a2)  

	rts

CON1ADDA:
	add.b	#$11,MIJNBPCON1 ; scroll 1 Pixel naar voren
	rts

;	Routine, die naar Links scrollt, identiek aan de vorige:

LINKS:
	TST.B	MIJNBPCON1	
	BNE.s	CON1SUBBA	

	LEA	BPLPOINTERS,A1	
	move.w	2(a1),d0	
	swap	d0		
	move.w	6(a1),d0	

	LEA	BPLPOINTERS2,A2 
	move.w	2(a2),d1	
	swap	d1		
	move.w	6(a2),d1	
	
	addq.l	#2,d0		
	addq.l	#2,d1		
				
	move.b	#$FF,MIJNBPCON1	

; Pointen naar het Text-Bitplane

	move.w	d0,6(a1) 
	swap	d0	 
	move.w	d0,2(a1) 

; Pointen naar het MATRIX-Bitplane

	move.w	d1,6(a2) 
	swap	d1	 
	move.w	d1,2(a2) 

	rts

CON1SUBBA:
	sub.b	#$11,MIJNBPCON1 ; scroll 1 Pixel naar achteren
	rts

;************************************************************************
;*              Scrollt OP/NEER d.m.v. een Tabel (Listing6m.s)          *
;************************************************************************


BOING:
	LEA	BPLPOINTERS,A1	
	move.w	2(a1),d0	
	swap	d0		
	move.w	6(a1),d0	

	ADDQ.L	#4,BOINGTABPOINT
	MOVE.L	BOINGTABPOINT(PC),A0 
				     
	CMP.L	#EindeBOINGTAB-4,A0 
	BNE.S	NOBSTART2	   
	MOVE.L	#BOINGTAB-4,BOINGTABPOINT 
NOBSTART2:
	MOVE.l	(A0),d1	

	sub.l	d1,d0	

	LEA	BPLPOINTERS,A1
	MOVEQ	#1,D1	

POINTBP2:
	move.w	d0,6(a1)  
	swap	d0	  
	move.w	d0,2(a1)  
	swap	d0	  
	ADD.L	#80*256,d0
	addq.w	#8,a1	  
	rts

BOINGTABPOINT:		   
	dc.l	BOINGTAB-4 

;	De Tabel...

BOINGTAB:
	dc.l	0,0,80,80,80,80,80,80,80,80,80		
	dc.l	80,80,2*80,2*80
	dc.l	2*80,2*80,2*80,2*80,2*80		
	dc.l	3*80,3*80,3*80,3*80,3*80
	dc.l	3*80,3*80,3*80,3*80,3*80
	dc.l	2*80,2*80,2*80,2*80,2*80		
	dc.l	2*80,2*80,80,80
	dc.l	80,80,80,80,80,80,80,80,80,0,0,0,0,0,0,0
	dc.l	-80,-80,-80,-80,-80,-80,-80,-80,-80
	dc.l	-80,-80,-2*80,-2*80
	dc.l	-2*80,-2*80,-2*80,-2*80,-2*80
	dc.l	-3*80,-3*80,-3*80,-3*80,-3*80		
	dc.l	-3*80,-3*80,-3*80,-3*80,-3*80
	dc.l	-2*80,-2*80,-2*80,-2*80,-2*80		
	dc.l	-2*80,-2*80,-80,-80
	dc.l	-80,-80,-80,-80,-80,-80,-80,-80,-80,0,0,0,0,0
EindeBOINGTAB:

;************************************************************************
;*    Teken het patroon met 16 Pixel grote Quadraten (Listing6q.s)      *
;************************************************************************

MATRIX3:
	LEA	BITPLANEMATRIX,a0	; Adres doel-Bitplane

	MOVEQ	#8-1,d0		
				
MaakPaar3:
	move.l	#(20*16)-1,d1	
				
MaakEen3:
	move.l	#%11111111111111110000000000000000,(a0)+
					
	dbra	d1,MaakEen3		

	move.l	#(20*16)-1,d1	
				
MaakAnder3:

	move.l	#%00000000000000001111111111111111,(a0)+
				
	dbra	d1,MaakAnder3	

	DBRA	d0,MaakPaar3	
				
	rts			; .#.#.#.#.#.#.#.#.#.

; **************************************************************************
; *		ROUTINE DIE DE MUZIEK SPEELT (SOUNDTRACKER/PROTRACKER)	   *
; **************************************************************************

	include "music.s"	; Routine 100% Amiga-compatible


	SECTION GRAPHIC,DATA_C

COPPERLIST:
	; Sprites uit...
	dc.w	$120,$0000,$122,$0000,$124,$0000,$126,$0000,$128,$0000 
	dc.w	$12a,$0000,$12c,$0000,$12e,$0000,$130,$0000,$132,$0000
	dc.w	$134,$0000,$136,$0000,$138,$0000,$13a,$0000,$13c,$0000
	dc.w	$13e,$0000

	dc.w	$8E,$2c81	; DiwStrt (Registers met Normaalwaarden)
	dc.w	$90,$2cc1	; DiwStop
	dc.w	$92,$0030	; DdfStart (wegens Scroll aangepast)
	dc.w	$94,$00d0	; DdfStop
	dc.w	$102		; BplCon1
	dc.b	0		
MIJNBPCON1:
	dc.b	0		; Laagwaardig Byte van $dff102, dat we
				; veranderen
	dc.w	$104,0		; BplCon2
	dc.w	$108,40-2	; Bpl1Mod 
	dc.w	$10a,40-2	; Bpl2Mod 

		    ; 5432109876543210
	dc.w	$100,%0010001000000000  ; Bit 13 aan 
 
BPLPOINTERS:
	dc.w $e0,$0000,$e2,$0000	;1e Bitplane
BPLPOINTERS2:
	dc.w $e4,0,$e6,0		;2e Bitplane

	dc.w	$180,$113	; color0 - DONKERE QUADRAAT
	dc.w	$182,$995	; color1 - TEXT + DONKER QUADRAAT
	dc.w	$184,$225	; color2 - LICHT QUADRAAT
	dc.w	$186,$ee5	; color3 - TEXT + LICHT QUADRAAT
	
	dc.w	$FFFF,$FFFE	; Einde van de Copperlist

;	Het font...

FONT:
;	incbin	"metal.fnt"	
;	incbin	"normal.fnt"	
	incbin	"nice.fnt"	

; **************************************************************************
; *				PROTRACKER-MUZIEKSTUK			   *
; **************************************************************************

mt_data:
	incbin	"mod.robozap"

	SECTION MIJNPLANE,BSS_C

BITPLANEMATRIX:
	ds.b	80*256	; 1 Bitplane, 640x256 breed (als Hires)

	ds.b	80*100

BITPLANETEXT:
	ds.b	80*256	; 1 Bitplane 640x256


	end

Vaak krijgen we uit enkele 'simpele' routines een aardig resultaatje...Toch?
Ik zie u weer in les 7!