*
*	SCREENTYPER V1.1
*	THIS VERSION WORKS WITH A 16 * 16 SIZED FONT.
*
*	NEIL JOHNSTON. 02-03-91
*
*	WARNING! COULD GURU IF YOUR TEXT GOES OFF THE BOTTOM OF THE SCREEN!

	SECTION BASE,CODE
	OPT	C-			NO CASE SENSITIVITY

**********

	INCDIR	SYS:INCLUDE/
	INCLUDE	HARDWARE/CUSTOM.I
	INCLUDE	EXEC/EXEC_LIB.I

**********

START	MOVEM.L	A0-A6/D0-D7,-(A7)	SAVE ALL REGISTERS
	MOVE.L	A7,STPOINT		SAVE STACK POINTER
	MOVE.L	#$DFF000,A5		I USE A5 AS MY HARDWARE OFFSET REG.
	CALLEXEC FORBID			TURN OFF MULTITASKING
	LEA	GFXNAME(PC),A1
	
	CLR.L	D0
	CALLEXEC OPENLIBRARY		OPEN GFX LIBRARY
	MOVE.L	D0,GFXBASE
	MOVE.W	DMACONR(A5),DMASAVE	SAVE CLI DMA SETTINGS


WAIT1	BTST	#0,VPOSR(A5)		WAIT FOR VBL
	BNE.S	WAIT1			BEFORE TURNING
WAIT2	CMPI.B	#55,VHPOSR(A5)		SPRITE DMA OFF TO
	BNE.S	WAIT2			PREVENT CRAP APPEARING

SET_UP	MOVE.W	#$7FFF,DMACON(A5)	ALL DMA OFF
	MOVE.L	#NEWCOP,COP1LC(A5)	STICK MY NEW COPPER IN...
	MOVE.L	COPJMP1(A5),D0		...AND STROBE IT
	MOVE.W	#%1000001110000000,DMACON(a5) BPL/COP DMA ONLY

	
***********

BEGIN	MOVE.L	#SCREEN,D0		SET UP SCREEN
	MOVE.W	D0,PL1L
	SWAP	D0
	MOVE.W	D0,PL1H
	SWAP	D0
	ADD.L	#10240,D0
	MOVE.W	D0,PL2L
	SWAP	D0
	MOVE.W	D0,PL2H
	SWAP	D0
	ADD.L	#10240,D0
	MOVE.W	D0,PL3L
	SWAP	D0
	MOVE.W	D0,PL3H
	SWAP	D0

	MOVEQ.L	#0,D0
	MOVE.L	#TEXT,A0		TEXT ADDRESS --> D0

	MOVE.L	#SCREEN,A2		SCREEN ADDRESS --> A2
	ADDA	#1000,A2		POINT TO LOWER DOWN SCREEN
	MOVE.L	A2,STRTPOS		SAVE CURRENT SCREEN POINTER
	MOVE.L	A2,LINESTRT		SAVE LINE START POINTER

LOOP	MOVE.L	#FONT,A1		ADDRESS	OF FONT DATA --> A1

	MOVE.B	(A0)+,D0		READ CHAR
	CMPI.B	#120,D0			IS IT AN "x"?
	BEQ	END			YES: END!

TST_SPD	CMPI.B	#102,D0
	BNE.S	TST_SP2
	MOVE.W	#0,DELAY		FAST TYPING
	BRA	SKIP

TST_SP2	CMPi.B	#115,D0
	BNE.S	SPD_DNE
	MOVE.W	#50,DELAY		SLOW TYPING
	BRA	SKIP

SPD_DNE	CMPI.W	#20,HCOUNT		ADJUST FIRST NUMBER FOR SCREEN WIDTH
	BNE.S	NOT_EOL

	MOVE.W	#0,HCOUNT
	MOVE.L	LINESTRT,A2
	ADDA.L	#40*17,A2
	MOVE.L	A2,STRTPOS
	MOVE.L	A2,LINESTRT

NOT_EOL	CMPI.B	#59,D0
	BGT.S	ALPHA_CHAR		IT'S AN A-Z CHARACTER
	CMPI.B	#31,D0
	BGT.S	PUNC_CHAR		IT'S AN EXTRA CHARACTER
	BRA	SKIP			SKIP IF CHAR IS NOT RECOGNISED

ALPHA_CHAR
	SUBI.L	#65,D0			ASCII --> POINTER
	MULU	#2,D0
	ADD.L	D0,A1			ADD POINTER TO FONT POINTER
	BRA	READY			PRINT CHARACTER

PUNC_CHAR
	SUBI	#32,D0			GET PROPER OFFSET
	MULU	#2,D0
	ADDI.L	#52,D0			SKIP ALPHA CHARS
	ADD.L	D0,A1			AND ADD OFFSET

READY	MOVE.L	#2,D2			3 BITPLANES

STRTPLT	MOVE.L	#15,D1			8 DBRA LOOPS (8 PIXELS HIGH)

PLOTLP	MOVE.B	(A1)+,(A2)+		MOVE 8 BITS FROM FONT TO SCREEN
	MOVE.B	(A1),(A2)
	SUB.L	#1,A1
	SUB.L	#1,A2
	ADDA.L	#104,A1			NEXT FONT LINE
	ADDA.L	#40,A2			NEXT SCREEN LINE

	DBRA	D1,PLOTLP		DO REST OF CHARACTER

	SUBA.L	#104*16,A1
	SUBA.L	#40*16,A2

	ADDA.L	#10240,A2
	ADDA.L	#1664,A1		NEXT PLANE

	DBRA	D2,STRTPLT

SKIP	ADDI.L	#2,STRTPOS		NEXT HORIZONTAL POSITION
	MOVE.L	STRTPOS,A2		RELOAD (NEW) SCREEN POINTER

	MOVE.W	DELAY,D7		ADJUST FIRST NUMBER FOR DELAY

WTVBL	CMPI.B	#255,$DFF006
	BNE.S	WTVBL

	DBRA	D7,WTVBL

	ADDI.W	#1,HCOUNT

	BTST	#6,$BFE001		WANT TO QUIT EARLY?
	BEQ.S	QUIT
	
	BRA	LOOP			KEEP ON GOING!

END	BTST	#6,$BFE001		JUST WAIT.....
	BNE.S	END

**********

QUIT	MOVE.W	DMASAVE,D7
	BSET	#$F,D7
	MOVE.W	D7,DMACON(A5)

	
	MOVE.L	GFXBASE,A0
	MOVE.L	$26(A0),COP1LC(A5)	FIND/REPLACE SYSTEM COPPER
	CLR.L	D0
	MOVE.L	GFXBASE,A1
	CALLEXEC CLOSELIBRARY		CLOSE GRAPHICS LIBRARY
	CALLEXEC PERMIT			TURN ON MULTITASKING
	MOVE.L	STPOINT,A7		RESTORE STACK...
	MOVEM.L	(A7)+,A0-A6/D0-D7	...AND REGISTERS
	RTS				GOODBYE CRUEL WORLD (SOB!)

**********				


GFXNAME		DC.B	'graphics.library'
		EVEN

DELAY		DC.W	0
HCOUNT		DC.W	0
STRTPOS		DC.L	0
GFXBASE		DC.L	0
STPOINT		DC.L	0
DMASAVE		DC.W	0
LINESTRT	DC.L	0


**********

*	REMEMBER: SMALL FUNCTION CHARS WILL APPEAR AS SPACES ON SCREEN.

*	COMMANDS: 	'f' --> FAST
*			's' --> SLOW
*			'x' --> END TEXT
*	ENTER ALL TEXT IN CAPITALS!
**********

* TEXT WIDTH:	'12345678901234567890'

TEXT	DC.B	'sTECH ARE PROUD TOf '
	DC.B	'     sPRESENTf      '
	DC.B	'                    '
	DC.B	'////////////////////' 
	DC.B	'/ SCREENTYPER V1.2 /'
	DC.B	'////////////////////' 
	DC.B	'                    '
	DC.B	'  NOW WORKS WITH A  '
	DC.B	' 16 X 16, 8 COLOUR  '
	DC.B	'       FONT         '
	DC.B	'                    '
	DC.B	'   sPRESS YOUR      '
	DC.B	'    LEFT MOUSE     x'
	EVEN


**********

	SECTION	SCREENDATA,CODE_C

FONT	
	INCBIN	source:bitmaps/F3.RAW
	EVEN

SCREEN	DCB.B	30720,0				SPACE FOR 3BPL SCREEN
	EVEN

**********

NEWCOP	DC.W	BPLCON0,$3200		
	DC.W	BPLCON1,$0000
	DC.W	DIWSTRT,$2281		
	DC.W	DIWSTOP,$22C1
	DC.W	DDFSTRT,$0038		
	DC.W	DDFSTOP,$00D0
	DC.W	BPL1MOD,$0000		
	DC.W	BPL2MOD,$0000

cop1:	dc.w	$0180,$0000
	dc.w	$0182,$0FFF
	dc.w	$0184,$0DDD
	dc.w	$0186,$0BBB
	dc.w	$0188,$0999
	dc.w	$018A,$0777
	dc.w	$018C,$0666
	dc.w	$018E,$0555
	;Generated by IFFMaster v1.0 by JUNIX / ARCANE!


	DC.W	BPLPT+$00		SET UP COPPER BPLANE POINTERS
PL1H	DC.W	0,BPLPT+$02
PL1L	DC.W	0,BPLPT+$04
PL2H	DC.W	0,BPLPT+$06
PL2L	DC.W	0,BPLPT+$08
PL3H	DC.W	0,BPLPT+$0A
PL3L	DC.W	0,BPLPT+$0C

	DC.W	$FFFF,$FFFE		AND WAIT FOR THE IMPOSSIBLE!


