
; Listing6c.s	Meerdere Regels op het scherm!

	SECTION	CIPenCOP,CODE

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

;	Pointen naar onze bitplanes:

	MOVE.L	#BITPLANE,d0	
	LEA	BPLPOINTERS,A1	
	move.w	d0,6(a1)	
	swap	d0		
	move.w	d0,2(a1)	

	move.l	#COPPERLIST,$dff080	; COP1LC - Pointer naar onze COP
	move.w	d0,$dff088		; COPJMP1 - Start 'm
	move.w	#0,$dff1fc		; FMODE - Deactiveert AGA
	move.w	#$c00,$dff106		; BPLCON3 - Deactiveert AGA

	bsr.w	print		; Teken de letter

mouse:
	btst	#6,$bfe001	
	bne.s	mouse		

	move.l	OldCop(PC),$dff080	; COP1LC - Pointer naar Originele 
					; Copperlist
	move.w	d0,$dff088		; COPJMP1 - Start 'm

	move.l	4.w,a6
	jsr	-$7e(a6)	; Enable - Multitasking aan
	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

;	Routine, die 8x8 Pixel grote tekens drukt.


PRINT:
	LEA	TEXT(PC),A0	; Adres van te schrijven text in a0
	LEA	BITPLANE,A3	; Adres van doel-bitplane in a3
	MOVEQ	#23-1,D3	; Aantal te printen regels in d3
PRINTREGEL:
	MOVEQ	#40-1,D0	; Aantal tekens per regel.
PRINTCHAR2:
	MOVEQ	#0,D2		; Wis d2
	MOVE.B	(A0)+,D2	; Volgend karakter in d2
	SUB.B	#$20,D2		; Trek 32 van de ascii waarde af,waardoor
				; we b.v. de spatie (=$20) in $00 krijgen,
				; het uitroepteken (=$21) in $01 enz..
	MULU.W	#8,D2		; Vermenigvuldig het verkregen getal met 8
				; omdat de karakters 8 pixels hoog zijn
	MOVE.L	D2,A2
	ADD.L	#FONT,A2	; Vindt de gewenste letter in het font.

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

	ADDQ.w	#1,A3		; A3+1, we gaan 8 bit verder voor de 
				; volgende letter

	DBRA	D0,PRINTCHAR2	; Print d0 (40) tekens
 
	ADD.W	#40*7,A3	; "Return", Nieuwe regel

	DBRA	D3,PRINTREGEL	; We printen d3 regels
	RTS


TEXT:
             ;            1111111111222222222233333333334
             ;   1234567890123456789012345678901234567890
	dc.b	'   EERSTE REGEL                         ' ; 1
	dc.b	'                TWEEDE REGEL            ' ; 2
	dc.b	'     /\  /                              ' ; 3
	dc.b	'    /  \/                               ' ; 4
	dc.b	'                                        ' ; 5
	dc.b	'        ZESDE REGEL                     ' ; 6
	dc.b	'                                        ' ; 7
	dc.b	'                                        ' ; 8
	dc.b	'  AUTEUR: ROB JANSSEN (DIGITAL MOZART)  ' ; 9
	dc.b	'                                        ' ; 10
	dc.b	'   1234567890 !@#$%^&*()_+|\=-[]{}      ' ; 11
	dc.b	'                                        ' ; 12
	dc.b	'   PRIJSVRAAG: WIE KENT DE AUTEUR?      ' ; 15
	dc.b	'                                        ' ; 25
	dc.b	'                                        ' ; 16
	dc.b	'  Dit is Listing6c.s waarin we          ' ; 17
	dc.b	'                                        ' ; 18
	dc.b	'  leren meerdere regels af te drukken.  ' ; 19
	dc.b	'                                        ' ; 20
	dc.b	'  En ZoAlS u ZiEt LuKt DaT              ' ; 21
	dc.b	'                                        ' ; 22
	dc.b	'  Al HeEl AaRdIg.                       ' ; 23
	dc.b	'                                        ' ; 24
	dc.b	'        ...                             ' ; 25
	dc.b	'                                        ' ; 26
	dc.b	'                                        ' ; 27

	EVEN



	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
	dc.w	$90,$2cc1	; DiwStop
	dc.w	$92,$0038	; DdfStart
	dc.w	$94,$00d0	; DdfStop
	dc.w	$102,0		; BplCon1
	dc.w	$104,0		; BplCon2
	dc.w	$108,0		; Bpl1Mod
	dc.w	$10a,0		; Bpl2Mod
		    ; 5432109876543210
	dc.w	$100,%0001001000000000  ; 1 Bitplane LOWRES 320x256

BPLPOINTERS:
	dc.w $e0,$0000,$e2,$0000	;1e Bitplane

	dc.w	$0180,$000	; color0 - AchterGrond
	dc.w	$0182,$19a	; color1 - TextKleur

	dc.w	$6c07,$fffe	; Kleurverloop op regel 9
	dc.w	$182,$451	; 
	dc.w	$6d07,$fffe
	dc.w	$182,$671	
	dc.w	$6e07,$fffe
	dc.w	$182,$891	
	dc.w	$6f07,$fffe
	dc.w	$182,$ab1	
	dc.w	$7007,$fffe
	dc.w	$182,$781	
	dc.w	$7107,$fffe
	dc.w	$182,$561	
	dc.w	$7207,$fffe
	dc.w	$182,$451	

	dc.w	$7307,$fffe
	dc.w	$182,$19a	

	dc.w	$8c07,$fffe	
	dc.w	$182,$516	
	dc.w	$8d07,$fffe
	dc.w	$182,$739	
	dc.w	$8e07,$fffe
	dc.w	$182,$95b	
	dc.w	$8f07,$fffe
	dc.w	$182,$c6f	
	dc.w	$9007,$fffe
	dc.w	$182,$84a	
	dc.w	$9107,$fffe
	dc.w	$182,$739	
	dc.w	$9207,$fffe
	dc.w	$182,$517	

	dc.w	$9307,$fffe
	dc.w	$182,$19a	; Normale kleur

	dc.w	$FFFF,$FFFE	; Einde van de Copperlist

;	Het FONT

FONT:
	incbin	"nice.fnt"	; Zonder de ALT-Karakters (ė,ö,č,é enz..)
;	incbin	"metal.fnt"	; U kunt ook kiezen voor een van deze
;	incbin  "normal.fnt"	; twee fonts.


	SECTION MYPLANE,BSS_C	; SECTION BSS kan alleen uit NULLEN
				; bestaan. Men gebruikt DS.B om te 
				; definieėren hoeveel nullen die section
				; moet bevatten.

BITPLANE:
	ds.b	40*256	; een Bitplane LowRes 320x256

	end

Zoals u gezien heeft, is de kleur van een Font nog geen reden om niet wat
kleur met de copper in het leven te blazen.

Om meerdere Regels te printen, moet men van regel wisselen, en dan de 
volgende weer afdrukken. Dat herhaald zich d3 maal.

	ADD.W	#40*7,A3	; "RETURN"
	DBRA	D3,PRINTREGEL	; DOE D3 Regels

OPMERKING: Om een nieuwe regel te nemen, dus "RETURN", moet men 7 Lijnen
naar beneden gaan.

Daarom hebben we een "ADD.W #40*7,A3" nodig voor een RETURN.

Het probleem zit daarin dat men de indruk kan hebben dat we met a3 als op
de onderste lijn van het karakter pointen, en dat het genoeg is om maar 1
lijn over te slaan. Niets is minder waar. In a3 staat en blijft altijd 
alleen  adres van de EERSTE lijn van het karakter, want de andere 7 worden
door een offset bepaald:

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

Maar in a3 staat altijd het adres  van de eerste lijn. Dan, iedere keer als
we een karakter drukken, begeven we ons naar het volgende als we 8 bit (dus
1 byte) bij a3 optellen. Deze point dan naar de eerste lijn van het
karakter:

	ADDQ.w	#1,A3		; A3+1, We gaan 8 bit verder (naar het 
				; volgende karakter)

Vanaf hier hoeft men om het volgende karakter alleen nog maar de routine met
de offsets te herhalen. Wat gebeurt er nu als we het laatste karakter 
helemaal rechts hebben afgedrukt? In a3 hebben we het adres van het laatste
karakter, en na het afdrukken komt de instructie die a3 8 bit verder zet.
Dan bevinden we ons al op de volgende lijn. Daarom moeten we 7 -en niet 8-
erbij optellen omdat we ons al op de tweede regel na de netgedrukte regel
bevinden.