[openfirmware] [commit] r2165 - cpu/arm dev/video/common
repository service
svn at openfirmware.info
Thu Feb 3 07:58:08 CET 2011
Author: wmb
Date: Thu Feb 3 07:58:08 2011
New Revision: 2165
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2165
Log:
ARM / graphics - added bscan, wscan, lscan primitives and used them if present in replace-color.
Modified:
cpu/arm/kerncode.fth
dev/video/common/rectangle16.fth
Modified: cpu/arm/kerncode.fth
==============================================================================
--- cpu/arm/kerncode.fth Thu Feb 3 07:57:03 2011 (r2164)
+++ cpu/arm/kerncode.fth Thu Feb 3 07:58:08 2011 (r2165)
@@ -952,6 +952,66 @@
= until
c;
+\ Find the first occurence of bvalue, returning the residual string
+code bscan ( adr len bvalue -- adr' len' )
+ ldmia sp!,{r0,r1} \ r0-len r1-adr tos-bvalue
+ mov r2,tos \ r2-bvalue
+ movs tos,r0 \ tos-len
+ psheq r1,sp
+ nxteq \ Bail out if len=0
+
+ begin
+ ldrb r0,[r1],#1
+ cmp r0,r2
+ deceq r1,#1
+ psheq r1,sp
+ nxteq
+ decs tos,1
+ = until
+ psh r1,sp
+c;
+
+\ Find the first occurrence of wvalue, returning the residual string
+code wscan ( adr len wvalue -- adr' len' )
+ ldmia sp!,{r0,r1} \ r0-len r1-adr tos-lvalue
+ mov r2,tos \ r2-lvalue
+ movs tos,r0 \ tos-len
+ psheq r1,sp
+ nxteq \ Bail out if len=0
+
+ begin
+ ldrh r0,[r1],#2
+ cmp r0,r2
+ deceq r1,#2
+ psheq r1,sp
+ nxteq
+ decs tos,2
+ <= until
+ psh r1,sp
+ mov tos,#0
+c;
+
+\ Find the first occurrence of lvalue, returning the residual string
+code lscan ( adr len lvalue -- adr' len' )
+ ldmia sp!,{r0,r1} \ r0-len r1-adr tos-lvalue
+ mov r2,tos \ r2-lvalue
+ movs tos,r0 \ tos-len
+ psheq r1,sp
+ nxteq \ Bail out if len=0
+
+ begin
+ ldr r0,[r1],#4
+ cmp r0,r2
+ deceq r1,#4
+ psheq r1,sp
+ nxteq
+ decs tos,4
+ <= until
+ psh r1,sp
+ mov tos,#0
+c;
+
+
\ code /link ( -- /link ) psh tos,sp mov tos,/link c;
code /char ( -- 1 ) psh tos,sp mov tos,#1 c;
Modified: dev/video/common/rectangle16.fth
==============================================================================
--- dev/video/common/rectangle16.fth Thu Feb 3 07:57:03 2011 (r2164)
+++ dev/video/common/rectangle16.fth Thu Feb 3 07:58:08 2011 (r2165)
@@ -234,17 +234,39 @@
: dimensions ( -- width height ) width height ;
: replace-color ( old new -- )
- depth d# 32 = if
+ depth d# 32 = if ( old new )
swap 565>argb-pixel swap 565>argb-pixel ( old' new' )
- frame-buffer-adr width height * /l* bounds do
+ frame-buffer-adr width height * /l* ( old new adr len )
+[ifdef] lscan
+ begin ( old new adr len )
+ fourth lscan ( old new adr' len' )
+ dup while ( old new adr' len' )
+ third third l! ( old new adr len )
+ /l /string ( old new adr' len' )
+ repeat ( old new adr' len' )
+ 4drop ( )
+[else]
+ bounds do ( old new )
over i l@ xor h# ffffff and 0= if dup i l! then
/l +loop
2drop
- else
- frame-buffer-adr width height * /w* bounds do
- over i w@ = if dup i w! then
- /w +loop
- 2drop
+[then]
+ else ( old new )
+ frame-buffer-adr width height * /w* ( old new adr len )
+[ifdef] wscan
+ begin ( old new adr len )
+ fourth wscan ( old new adr' len' )
+ dup while ( old new adr' len' )
+ third third w! ( old new adr len )
+ /w /string ( old new adr' len' )
+ repeat ( old new adr' len' )
+ 4drop ( )
+[else]
+ bounds do ( old new )
+ over i w@ = if dup i w! then ( old new )
+ /w +loop ( old new )
+ 2drop ( )
+[then]
then
;
\ This creates a device method from a termemu method
More information about the openfirmware
mailing list