NetBSD/sys/arch/arm32/vidc/console/vidc_mc.S

150 lines
3.6 KiB
ArmAsm

/* $NetBSD: vidc_mc.S,v 1.6 1997/10/17 05:46:16 mark Exp $ */
/*
* Copyright (c) 1994-1995 Melvyn Tang-Richardson
* Copyright (c) 1994-1995 RiscBSD kernel team
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the RiscBSD kernel team
* 4. The name of the company nor the name of the author may be used to
* endorse or promote products derived from this software without specific
* prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE RISCBSD TEAM ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
* RiscBSD kernel project
*
* vidc_mc.S
*
* Console assembly functions
*
* Created : 17/09/94
*/
#include <machine/asm.h>
/*
* On entry:
* r0 = addr
* r1 = font
* r2 = col
* r3 = xres
*/
/* Optimised for 8x16 font at the moment */
ENTRY(vidcconsolemc_render)
stmfd sp!, {r0-r9, lr}
/* Generate colour mask */
mov r9, r2, lsr #16
mov r4, r2, lsr #8
and r9, r9, #0xff
and r4, r4, #0xff
and r2, r2, #0xff
/* For each row (8 pixels) */
Lvidcconsolemc_render_loop:
ldrb r5, [r1], #1
mov r7, #0
mov r8, #0
/* This loop will get *SO* much faster with the new algorithmn */
tst r5, #8
orrne r7, r2, r7, lsl #8
orreq r7, r4, r7, lsl #8
tst r5, #4
orrne r7, r2, r7, lsl #8
orreq r7, r4, r7, lsl #8
tst r5, #2
orrne r7, r2, r7, lsl #8
orreq r7, r4, r7, lsl #8
tst r5, #1
orrne r7, r2, r7, lsl #8
orreq r7, r4, r7, lsl #8
tst r5, #0x80
orrne r8, r2, r8, lsl #8
orreq r8, r4, r8, lsl #8
tst r5, #0x40
orrne r8, r2, r8, lsl #8
orreq r8, r4, r8, lsl #8
tst r5, #0x20
orrne r8, r2, r8, lsl #8
orreq r8, r4, r8, lsl #8
tst r5, #0x10
orrne r8, r2, r8, lsl #8
orreq r8, r4, r8, lsl #8
stmia r0, {r7, r8}
add r0, r0, r3
subs r9, r9, #1
bne Lvidcconsolemc_render_loop
ldmfd sp!, {r0-r9, pc}
/*
* On entry:
* r0 = start
* r1 = end
* r2 = col
*/
ENTRY(vidcconsolemc_cls)
stmfd sp!, {r0-r9, lr}
mov r3, r2
mov r4, r2
mov r5, r2
mov r6, r2
mov r7, r2
mov r8, r2
mov r9, r2
Lvidcconsolemc_cls_loop:
stmia r0!, {r2-r9}
stmia r0!, {r2-r9}
stmia r0!, {r2-r9}
stmia r0!, {r2-r9}
stmia r0!, {r2-r9}
stmia r0!, {r2-r9}
stmia r0!, {r2-r9}
stmia r0!, {r2-r9}
stmia r0!, {r2-r9}
stmia r0!, {r2-r9}
stmia r0!, {r2-r9}
stmia r0!, {r2-r9}
stmia r0!, {r2-r9}
stmia r0!, {r2-r9}
stmia r0!, {r2-r9}
stmia r0!, {r2-r9}
cmp r0, r1
ble Lvidcconsolemc_cls_loop
ldmfd sp!, {r0-r9, pc}