R0	RN	0
R1	RN	1
R2	RN	2
R3	RN	3
R4	RN	4
R5	RN	5
R6	RN	6
R7	RN	7
R8	RN	8
R9	RN	9
R10	RN	10
R11	RN	11
R12	RN	12
R13	RN	13
R14	RN	14
PC	RN	15

	AREA	armscreen, CODE, READONLY

	EXPORT screen_qcls

screen_qcls ; R0 -> screen, R1=length
	STMFD R13!,{R0-R12,R14}
	; Re-position cursor...
	SWI &100+31
	SWI &100
	SWI &100
	; Screens are meant to be a multiple of 256 bytes, or 64 words...
	; R2-R12,R14 are free, 12 words in total...
	MOV R2,#0
	MOV R3,#0
	MOV R4,#0
	MOV R5,#0
	MOV R6,#0
	MOV R7,#0
	MOV R8,#0
	MOV R9,#0
	MOV R10,#0
	MOV R11,#0
	MOV R12,#0
	MOV R14,#0
screen_qclsloop
	SUBS R1,R1,#256
	BLT screen_qcls_uhoh ; For dodgy screens or my bad memory
	STMIA R0!,{R2-R12,R14} ; 12
	STMIA R0!,{R2-R12,R14} ; 24
	STMIA R0!,{R2-R12,R14} ; 36
	STMIA R0!,{R2-R12,R14} ; 48
	STMIA R0!,{R2-R12,R14} ; 60
	STMIA R0!,{R2-R5} ; 64
	LDMEQFD R13!,{R0-R12,PC}^
	SUBS R1,R1,#256
	BLT screen_qcls_uhoh ; For dodgy screens or my bad memory
	STMIA R0!,{R2-R12,R14} ; 12
	STMIA R0!,{R2-R12,R14} ; 24
	STMIA R0!,{R2-R12,R14} ; 36
	STMIA R0!,{R2-R12,R14} ; 48
	STMIA R0!,{R2-R12,R14} ; 60
	STMIA R0!,{R2-R5} ; 64
	LDMEQFD R13!,{R0-R12,PC}^
	SUBS R1,R1,#256
	BLT screen_qcls_uhoh ; For dodgy screens or my bad memory
	STMIA R0!,{R2-R12,R14} ; 12
	STMIA R0!,{R2-R12,R14} ; 24
	STMIA R0!,{R2-R12,R14} ; 36
	STMIA R0!,{R2-R12,R14} ; 48
	STMIA R0!,{R2-R12,R14} ; 60
	STMIA R0!,{R2-R5} ; 64
	LDMEQFD R13!,{R0-R12,PC}^
	SUBS R1,R1,#256
	BLT screen_qcls_uhoh ; For dodgy screens or my bad memory
	STMIA R0!,{R2-R12,R14} ; 12
	STMIA R0!,{R2-R12,R14} ; 24
	STMIA R0!,{R2-R12,R14} ; 36
	STMIA R0!,{R2-R12,R14} ; 48
	STMIA R0!,{R2-R12,R14} ; 60
	STMIA R0!,{R2-R5} ; 64
	LDMEQFD R13!,{R0-R12,PC}^
	B screen_qclsloop
screen_qcls_uhoh
	ADD R1,R1,#256
screen_qcls_uhoh2
	STR R2,[R0],#4 ; Easy way out :)
	SUBS R1,R1,#4
	BGT screen_qcls_uhoh2
	LDMFD R13!,{R0-R12,PC}^
