

	SECTION		chipmemory,data_c	

							;BY BLAINE EVANS
							;1 ERITH WAY
							;PONTYBODKIN
							;NR MOLD
							;CLWYD
							;CH7 4TR
							;TEL O352-771673
	opt	c-,d+

Height			equ		256
Width			equ		44
Depth			equ		2

ScreenSize		equ		Height*Width

NoChars			equ		1
FontSize		equ		59*8
FontDepth		equ		2

BobHeight		equ		8
BobWidth		equ		1
BobDepth		equ		1

BobSize			equ		BobHeight*(BobWidth)

	move.l	4.w,a6			;FIND EXEC BASE
	lea	gfxlib(pc),a1		;LOAD GRAPHICS LIBRARY IN A1
	moveq	#$00,d0			;VERSION 0
	jsr	-552(a6)		;OPEN LIBRARY
	move.l	d0,_gfxbase		;STORE D0 (GFX ADDRESS )
	beq	nolib_exit		;ELSE EXIT
	bsr	Foreground_addresses	;BRANCH TO FOREGROUND ADDRESSES
	bsr	Init
	lea	$dff000,a6
	move.l	_gfxbase,a0		;LOAD ADDRESS OF GRAPHICS LIB IN A0
	move.l	50(a0),Oldcop		;STORE CURRENT COPPER,ETC TO RETRIEVE LATER
S
	move.l	#Newcop,50(a0)		;POINT TO OUR COPPERLIST

wait					;WAIT LOOP
	cmp.b	#255,$dff006		;VERTICAL BLANKING GAP 
	bne.s	wait			;
;	move.w	#$fff,$180(a6)		;REMOVE TO MEASURE RASTER TIME
	bsr	Scroller
;	move.w	#$000,$180(a6)		;REMOVE TO MEASURE RASTER TIME
	btst	#$6,$bfe001		;QUIT LEFT MOUSE PRESSED
	bne.s	wait
ended					;ELSE LOOP TO WAIT
	move.l	_gfxbase,a0		;LOAD GRAPHICS LIB ADDRESS IN A0
	move.l	oldcop,50(a0)		;RESTORE OLD COPPER TO RETURN TO EDITTER
nomem_exit	
	move.l	4.w,a6			;FIND EXEC BASE
	move.l	_gfxbase,a1		;LOAD GRAPHICS BASE IN A1
	jsr	-414(a6)		;CLOSE LIBRARY
nolib_exit
	rts				;RETURN TO EDITER
Foreground_addresses				;START OF FOREGROUND DATA
	move.l	#Foreground,d0
	move.w	d0,Bpl0ptl		;LOW WORD IN BIT PLANE 0 LOW
	swap	d0				
	move.w	d0,Bpl0pth		;HIGH WORD IN BIT PLANE 0 HIGH
	swap	d0
	add.l	#ScreenSize,d0
	move.w	d0,Bpl1ptl		;LOW WORD IN BIT PLANE 1 LOW
	swap	d0				
	move.w	d0,Bpl1pth		;HIGH WORD IN BIT PLANE 1 HIGH
	swap	d0
	rts
Init					; initialise some variables
	move.l	#Foreground,d0
	add.l	#(120*Width)+44,d0
	move.l	d0,Bob_base		; store address to start text
        lea	TEXT(pc),a1		; font gfx in a1
	move.l	a1,Text_address
	rts
Scroller
	add.w	#1,Count		; do we need a char
	cmp.w	#8,Count		; font is 8*8
	beq	Char_Needed
	bsr	Scroll
	rts
Char_Needed
	move.w	#0,Count		; clear scroll count
	moveq	#0,d0			; clear d0
	move.l	Text_Address,a0		; text chars in a0
       	move.b	(a0)+,d0		; next char
	cmp.b	#$ff,d0			; are we at the end
	bne	Not_End			; yes
	lea	Text(pc),a0		; the reload text
Not_End
	move.l	a0,Text_Address		; store value
        sub.b	#32,d0		     	; take off offset
        mulu	#8,d0		   	; to find font gfx
        lea	Font(pc),a1		; font gfx in a1
        add.l	d0,a1	         	; add offset
	move.l	Bob_base,a0		; address
	move.w	#((BobSize)*BobDepth)-1,d0	; no of words
Bob
	move.b	(a1)+,(a0)+	
	add.w	#(Width-(BobWidth)),a0	; add modula to get to next byte
	dbra	d0,Bob
	bsr	Scroll
	rts
Scroll
	move.l	Bob_base,a0		; address
	add.l	#(BobHeight-1)*(Width),a0	; get to last word 
	move.w	#(BobHeight)-1,d1		; no of words down
Move_2
	move.w	#(Width/2)-1,d0			; no of words across
Move
	roxl.w	-(a0)				; rotate with transfer to z flag 
	dbra	d0,Move				; 1st loop=no across
	dbra	d1,Move_2			; 2nd loop=no down
	rts
Text	     	
	DC.B	"ANOTHER 68000 ROUTINE FOR DISPLAYING "
	DC.B	"AND SCROLLING AN EIGHT PIXEL FONT. "
	dc.b	"IF ANYONE NEW TO ACC NEEDS ANY CODING "
	dc.b	"HELP DON'T HESITATE TO WRITE TO ME. "
	dc.b	"MY ADDRESS IS IN THE SOURCE !!!!"
	DC.B	"..............WRAP............."
	dc.b	$ff
	even

Font	 
	 DC.B      $00,$00,$00,$00,$00,$00,$00,$00      ;SPACE
         DC.B      $18,$18,$18,$18,$00,$18,$18,$00	;!
         DC.B      $6C,$6C,$00,$00,$00,$00,$00,$00	;"
         DC.B      $1C,$36,$7C,$78,$7C,$3E,$1C,$00	;#
         DC.B      $1C,$36,$1F,$0F,$1F,$3E,$1C,$00	;$
         DC.B      $00,$00,$00,$00,$00,$00,$00,$00      ;%
         DC.B      $00,$00,$00,$00,$00,$00,$00,$00	;&
         DC.B      $0C,$0C,$18,$00,$00,$00,$00,$00	;'
         DC.B      $18,$30,$30,$30,$30,$30,$18,$00	;(
         DC.B      $18,$0C,$0C,$0C,$0C,$0C,$18,$00	;)
         DC.B      $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF	;*
         DC.B      $00,$18,$18,$7E,$7E,$18,$18,$00	;+
         DC.B      $00,$00,$00,$00,$0C,$0C,$18,$00	;,
         DC.B      $00,$00,$00,$7E,$7E,$00,$00,$00	;-
         DC.B      $00,$00,$00,$00,$00,$18,$18,$00	;.
         DC.B      $02,$06,$0C,$18,$30,$60,$C0,$00	;/
         DC.B      $7C,$C6,$CE,$DE,$F6,$E6,$7C,$00	;0
         DC.B      $38,$78,$18,$18,$18,$18,$7E,$00	;1
         DC.B      $7C,$C6,$06,$7C,$C0,$C0,$FE,$00	;2
         DC.B      $FC,$06,$06,$7C,$06,$06,$FC,$00	;3
         DC.B      $1C,$3C,$6C,$CC,$FE,$0C,$0C,$00	;4
         DC.B      $FE,$C0,$C0,$FC,$06,$06,$FC,$00	;5
         DC.B      $7E,$C0,$C0,$FC,$C6,$C6,$7C,$00	;6
         DC.B      $FE,$06,$06,$0C,$0C,$18,$18,$00	;7
         DC.B      $7C,$C6,$C6,$7C,$C6,$C6,$7C,$00	;8
         DC.B      $7C,$C6,$C6,$7E,$06,$06,$06,$00	;9
         DC.B      $00,$18,$18,$00,$00,$18,$18,$00	;:
         DC.B      $00,$18,$18,$00,$18,$18,$30,$00	;;
         DC.B      $06,$1C,$70,$E0,$70,$1C,$06,$00	;<
         DC.B      $00,$00,$00,$00,$00,$00,$00,$00	;=
         DC.B      $60,$38,$0E,$07,$0E,$38,$60,$00	;>
         DC.B      $7C,$C6,$C6,$0C,$18,$00,$18,$00	;?
         DC.B      $00,$00,$00,$00,$00,$00,$00,$00	;@
         DC.B      $7C,$C6,$C6,$FE,$C6,$C6,$C6,$00	;A
         DC.B      $FC,$C6,$C6,$FC,$C6,$C6,$FC,$00	;B
         DC.B      $7E,$C0,$C0,$C0,$C0,$C0,$7E,$00	;C
         DC.B      $FC,$C6,$C6,$C6,$C6,$C6,$FC,$00	;D
         DC.B      $7E,$C0,$C0,$FE,$C0,$C0,$7E,$00	;E
         DC.B      $7E,$C0,$C0,$FE,$C0,$C0,$C0,$00	;F
         DC.B      $7E,$C0,$C0,$DE,$C6,$C6,$7C,$00	;G
         DC.B      $C6,$C6,$C6,$FE,$C6,$C6,$C6,$00	;H
         DC.B      $7E,$18,$18,$18,$18,$18,$7E,$00	;I
         DC.B      $FE,$06,$06,$C6,$C6,$C6,$7C,$00	;J
         DC.B      $C6,$CC,$D8,$F0,$D8,$CC,$C6,$00	;K
         DC.B      $C0,$C0,$C0,$C0,$C0,$C0,$FE,$00	;L
         DC.B      $C6,$EE,$FE,$D6,$C6,$C6,$C6,$00	;M
         DC.B      $E6,$F6,$DE,$CE,$C6,$C6,$C6,$00	;N
         DC.B      $7C,$C6,$C6,$C6,$C6,$C6,$7C,$00	;O
         DC.B      $FC,$C6,$C6,$FC,$C0,$C0,$C0,$00	;P
         DC.B      $7C,$C6,$C6,$C6,$C6,$DA,$C6,$00	;Q
         DC.B      $FC,$C6,$C6,$FE,$CC,$C6,$C6,$00	;R
         DC.B      $7E,$C0,$C0,$7C,$06,$06,$FC,$00	;S
         DC.B      $7E,$18,$18,$18,$18,$18,$18,$00	;T
         DC.B      $C6,$C6,$C6,$C6,$C6,$C6,$7C,$00	;U
         DC.B      $C6,$C6,$C6,$C6,$C6,$38,$38,$00	;V
         DC.B      $C6,$C6,$C6,$D6,$FE,$EE,$C6,$00	;W
         DC.B      $C6,$6C,$38,$10,$38,$6C,$C6,$00	;X
         DC.B      $C6,$C6,$C6,$7E,$06,$06,$FC,$00	;Y
         DC.B      $FE,$0E,$1C,$38,$70,$E0,$FE,$00	;Z
	even	
gfxlib	dc.b	"graphics.library",0	
	even
_gfxbase	dc.l	0		;LONG WORD TO STORE GFX ADDRESS
oldcop		dc.l	0			;OLD COPPERLIST ADDRESS
Bob_base	dc.l	0
Text_address	dc.l	0
Count		dc.w	0
	even


Newcop
	dc.w	$0100,%0010001000000000		;1 PLANES 
	dc.w	$0102
Scroll1	dc.w	$0000			;	SCROLL VALUE
	dc.w	$0104,%0000000000000001		;NO PRIORITIES
	dc.w	$0108,$0000,$010a,$0000		;MODULAS
	dc.w	$0092,$0028,$0094,$00d0		;256*40 SCREEN
	dc.w	$008e,$2c71,$0090,$2cc1		;VISIBLE AREA
						
Planes
	dc.w	$00e0
Bpl0pth	dc.w	$0000,$00e2
Bpl0ptl	dc.w	$0000,$00e4
Bpl1pth	dc.w	$0000,$00e6
Bpl1ptl	dc.w	$0000,$00e8
Bpl2pth	dc.w	$0000,$00ea
Bpl2ptl	dc.w	$0000,$00ec
Bpl3pth	dc.w	$0000,$00ee
Bpl3ptl	dc.w	$0000,$00f0
Bpl4pth	dc.w	$0000,$00f2
Bpl4ptl	dc.w	$0000,$00f4
Bpl5pth	dc.w	$0000,$00f6
Bpl5ptl	dc.w	$0000

Sprites						;SPRITES
	dc.w	$0120
Spl0pth	dc.w	$0000,$0122
Spl0ptl	dc.w	$0000,$0124
Spl1pth	dc.w	$0000,$0126
Spl1ptl	dc.w	$0000
	dc.w	$0128,$0000,$012a,$0000
	dc.w	$012c,$0000,$012e,$0000
	dc.w	$0130,$0000,$0132,$0000
	dc.w	$0134,$0000,$0136,$0000
	dc.w	$0138,$0000,$013a,$0000
	dc.w	$013c,$0000,$013e,$0000

	dc.w	$0180,$0000,$0182,$0fff		;COLORS PLAY 1
	dc.w	$0184,$0d00,$0186,$0ff0
	dc.w	$0188,$0ff0,$018a,$00ff
	dc.w	$018c,$008f,$018e,$0095

	dc.w	$0190,$0000,$0192,$0283		;COLORS PLAY 2
	dc.w	$0194,$08f4,$0196,$0095
	dc.w	$0198,$0243,$019a,$00ff
	dc.w	$019c,$0ff0,$019e,$0fa0

	dc.w	$01a0,$0000,$01a2,$0fff		;SPRITE COLORS
	dc.w	$01a4,$0f00,$01a6,$0b00
	dc.w	$01a8,$0600,$01aa,$0F40
	dc.w	$01ac,$0F80,$01ae,$0Fa0
	dc.w	$01b0,$0Ff0,$01b2,$000f
	dc.w	$01b4,$004f,$01b6,$008f
	dc.w	$01b8,$00ff,$01ba,$00f0
	dc.w	$01bc,$0283,$01be,$0f0f

	dc.w	$a001,$fffe,$0180,$00ff
	dc.w	$a201,$fffe,$0180,$000f
	dc.w	$ac01,$fffe,$0180,$00ff
	dc.w	$ae01,$fffe,$0180,$0000

	dc.w	$ffff,$fffe			;END OF COPPERLIST

Foreground		dcb.b	(ScreenSize*Depth),$00

Graphics		;INCBIN	DF1:GFX/Board.raw
			dcb.b	(ScreenSize*Depth),$00

BobGraphics		;dcb.b	(BobSize*BobDepth),$ff
	         DC.B      $FC,$C6,$C6,$FC,$C6,$C6,$FC,$00	;B

Buffer			dcb.b	(BobSize*BobDepth),$00

