
; Listing6p.s	Printen van 1 letter per frame op het scherm

	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	#BITPLANE,d0
	LEA	BPLPOINTERS,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

mouse:
	cmpi.b	#$ff,$dff006	
	bne.s	mouse

	bsr.w	PRINTCharakter	; De routine...

Wacht:
	cmpi.b	#$ff,$dff006	
	beq.s	Wacht		

	btst	#6,$bfe001	
	bne.s	mouse

	move.l	OldCop(PC),$dff080	; COP1LC - Pointer naar oude COP
	move.w	d0,$dff088		; COPJMP1 - 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

; Deze routine is een soort mix tussen de normale Print-routine en de tabel
; routine, want we gebruiken de text als een soort tabel; de ene waarde na
; de andere, en 1 per frame. We moeten ook opslaan waar we gebleven zijn
; (dus de laatste letter-positie). Om dit te onthouden gebruiken we twee
; longwords als pointers:
;
; PointoText:
;	dc.l	TEXT
;
; PointoBitplane:
;	dc.l	BITPLANE
;
; Iedere keer als de routine wordt uitgevoerd, wordt een letter geprint,
; en wordt de pointer naar text "ge-updated" (met een addq.l #1,...), en ook
; de pointer naar het bitplane, want iedere letter heeft zijn eigen plek
; in zijn bitplane.
; Het eerste probleem zit daarin dat om de 40 tekens een nieuwe regel
; genomen moet worden, dus 40*7 bytes bij de bitplanepointer optellen.
; Om dit op te lossen wordt er aan het eind van de regel een 0 gezet, die
; de routine vertelt dat we 40*7 bij de bitplanepointers moeten optellen,
; en 1 bij de textpointer.
; Het tweede probleem is dat we moeten stoppen met letters printen als we
; aan het einde van de text zijn. Daarvoor sluiten we de text af met een
; $ff. Hierdoor wordt er niets meer afgedrukt.
; U kunt zelf ook nog meer inbouwen voor effecten dieop een bepaalde tijd
; moeten verschijnen. U kunt geen $20 t/m $80 gebruiken, want daartussen
; liggen de letters. De rest is vrij naar keuze...

PRINTCharakter:
	MOVE.L	PointoText(PC),A0 ; Adres van de te printen Text in a0
	MOVEQ	#0,D2		; Wis d2
	MOVE.B	(A0)+,D2	; Volgende letter in d2
	CMP.B	#$ff,d2		; Einde-Text Signaal? ($FF)
	beq.s	EindeTEXT	; Zo ja, stop zonder iets te doen
	TST.B	d2		; Einde-Regel Signaal? ($00)
	bne.s	NietEindeRegel	; Zo niet, neem geen nieuwe regel

	ADD.L	#40*7,PointoBitplane	; Nieuwe regel
	ADDQ.L	#1,PointoText		; eerste letter in de regel
					; (de 0 overslaan)
	move.b	(a0)+,d2		
					

NietEindeRegel:
	SUB.B	#$20,D2		; Tel 32 van de ASCII waarde af
	MULU.W	#8,D2		; ...
				
	MOVE.L	D2,A2
	ADD.L	#FONT,A2	; Vind de letter in het font...

	MOVE.L	PointoBitplane(PC),A3 ; Adres van doel-Bitplane in a3

; Teken de letter lijn voor lijn...

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

	ADDQ.L	#1,PointoBitplane ; 8 Bit verder voor volgende letter
	ADDQ.L	#1,PointoText	

EindeTEXT:
	RTS


PointoText:
	dc.l	TEXT

PointoBitplane:
	dc.l	BITPLANE

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

	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 (Registers met Normaalwaarden)
	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  ; Bit 12 aan - 1 Bitplane Lowres

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

	dc.w	$0180,$000	; Color0 - Achtergrond
	dc.w	$0182,$19a	; Color1 - Textkleur
	
	dc.w	$FFFF,$FFFE	; Einde van de Copperlist

;	Het font (8x8)

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

	SECTION MIJNPLANE,BSS_C	

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

	end
	
U kunt natuurlijk nog altijd wat effectjes toepassen. Voeg deze (oude)
aangepaste copperlist nog maar eens in voor het einde:

	dc.w	$4907,$FFFE	; WAIT - Wacht op lijn $49 (73)
	dc.w	$180,$001	; COLOR0 - Donker blauw
	dc.w	$4a07,$FFFE	; WAIT - Lijn 74 ($4a)
	dc.w	$180,$002	; COLOR0 - Beetje lichter blauw
	dc.w	$4b07,$FFFE	; WAIT - Lijn 75 ($4b)
	dc.w	$180,$003	; COLOR0 - Nòg iets lichter blauw
	dc.w	$4c07,$FFFE	; WAIT - Volgende lijn
	dc.w	$180,$004	; COLOR0 - Nòg lichter blauw
	dc.w	$4d07,$FFFE	; WAIT - Volgende lijn
	dc.w	$180,$005	; COLOR0 - Nòglichter blauw
	dc.w	$4e07,$FFFE	; WAIT - Volgende lijn
	dc.w	$180,$006	; COLOR0 - Blauw op 6
	dc.w	$5007,$FFFE	; WAIT - Sla 2 lijnen over:
						; van $4e tot $50, dus van 78 tot 80
	dc.w	$180,$007	; COLOR0 - Blauw op 7
	dc.w	$5207,$FFFE	; WAIT - sla 2 lijnen over
	dc.w	$180,$008	; COLOR0 - Blauw op 8
	dc.w	$5507,$FFFE	; WAIT - Sla 3 lijnen over
	dc.w	$180,$009	; COLOR0 - Blauw op 9
	dc.w	$5807,$FFFE	; WAIT - Sla 3 lijnen over
	dc.w	$180,$00a	; COLOR0 - Blauw op 10
	dc.w	$5b07,$FFFE	; WAIT - Sla 3 lijnen over
	dc.w	$180,$00b	; COLOR0 - Blauw op 11
	dc.w	$5e07,$FFFE	; WAIT - Sla 3 lijnen over
	dc.w	$180,$00c	; COLOR0 - Blauw op 12
	dc.w	$6207,$FFFE	; WAIT - Sla 4 lijnen over
	dc.w	$180,$00d	; COLOR0 - Blauw op 13
	dc.w	$6707,$FFFE	; WAIT - Sla 5 lijnen over
	dc.w	$180,$00e	; COLOR0 - Blauw op 14
	dc.w	$6d07,$FFFE	; WAIT - Sla 6 lijnen over
	dc.w	$180,$000	; COLOR0 - Zwart
	dc.w	$6e07,$FFFE	; WAIT - Wacht lijn $6e af
	dc.w	$182,$19a	; COLOR2 - Begin rode Balk: Rood op 3
	dc.w	$7a07,$FFFE	; WAIT - Volgende regel
	dc.w	$182,$600	; COLOR2 - Rood op 6
	dc.w	$7c07,$FFFE	; WAIT - 
	dc.w	$182,$900	; COLOR2 - Rood op 9
	dc.w	$7f07,$FFFE	; WAIT - 
	dc.w	$182,$c00	; COLOR2 - Rood op 12
	dc.w	$8107,$FFFE
	dc.w	$182,$f00	; Rood op 15 (Maximum)
	dc.w	$8307,$FFFE
	dc.w	$182,$c00	; Rood op 12
	dc.w	$8507,$FFFE
	dc.w	$182,$900	; Rood op 9
	dc.w	$8707,$FFFE
	dc.w	$182,$600	; Rood op 6
	dc.w	$8907,$FFFE
	dc.w	$182,$300	; Rood op 3
	dc.w	$8b07,$FFFE
	dc.w	$182,$19a	; Kleur Zwart
	dc.w	$fd07,$FFFE	; Wacht op lijn $FD
	dc.w	$180,$00a	; Blauw 10
	dc.w	$fe07,$FFFE	; Volgende lijn
	dc.w	$180,$00f	; Blauw maximale Intensiteit (15)