
; Listing6a.s	Toon een letter 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.

TEXT:
	dc.b	'A'	; De te schrijven text. Hier is dit een "A", 
			; dus $41

	EVEN	; Zorg ervoor dat alles op even plaatsen komt.

PRINT:
	LEA	TEXT(PC),A0	; Adres van te schrijven text in a0
	LEA	BITPLANE,A3	; Adres van doel-bitplane in a3
	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

	RTS


	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 - Letter-Kleur


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

;	HET FONT (8x8)

FONT:
	incbin	"nice.fnt"	; Zonder de ALT-Karakters (ė,ö,č,é enz..)

	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


En een "A" verschijnt op de monitor!!! In de Linker-boven-hoek. U kunt
de text veranderen, maar het is niet erg fantastisch een "A" in een "B" te
veranderen.

* Verandering 1:

Probeer eens het halve karakter af te drukken door de laatste 4 regels
te verwijderen:
				; 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
	
Elke lijn is 1 byte:

	12345678

	...###.. Lijn  1 - 8 Bit, 1 Byte
	..#...#. 2
	..#...#. 3
	..#####. 4
	..#...#. 5
	..#...#. 6
	..#...#. 7
	........ 8

* Verandering 2:

Probeer de 'EVEN' instructie na de string te verwijderen:

	dc.b	"A"

Bij het assembleren geeft de assembler een fout: "Word at ODD address",
in Nederlands "Word op Oneven Adres". Dus OF Even erechter, OF een 0 
erachter.

Probeer de Positie van de "A" eens te veranderen. Men hoeft alleen het
Doel van Print te veranderen:

PRINT:
	LEA	TEXT(PC),A0
	LEA	BITPLANE+(40*120),A3 ; Doel-Adres

Daardoor komt de "A" 120 lijnen verder onder in beeld, midden op het
scherm. Om de Letter naar rechts te verplaatsen:

	LEA	BITPLANE+19+(40*120),A3 ; Doel-Adres

* Verandering 4:

Laten we het eens proberen in Hires:

				; Druk de letter lijn voor lijn af:
	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

In de Copperlist: Bit 15 in BPLCON0 zetten om HiRes te Activeren:

		    ; 5432109876543210
	dc.w	$100,%1001001000000000  ; 1 Bitplane HIRES 640x256

Dan ook niet DDFSTART/DDFSTOP voor HiRes niet vergeten:

	dc.w	$92,$003c	; DdfStart HIRES normaal
	dc.w	$94,$00d4	; DdfStop HIRES normaal

En de SECTION BSS niet vergeten: We moeten natuurlijk ook het Bitplane
vergroten!

	ds.b	80*256	; 1 Bitplane Hires 640x256


