[openfirmware] [commit] r2623 - cpu/arm/mmp2
repository service
svn at openfirmware.info
Sun Oct 16 03:21:47 CEST 2011
Author: wmb
Date: Sun Oct 16 03:21:46 2011
New Revision: 2623
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2623
Log:
Checked in fast scrolling patch for MMP2 in case we need it later.
Added:
cpu/arm/mmp2/fast-scroll.patch
Added: cpu/arm/mmp2/fast-scroll.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ cpu/arm/mmp2/fast-scroll.patch Sun Oct 16 03:21:46 2011 (r2623)
@@ -0,0 +1,72 @@
+Index: cpu/arm/fb8-ops.fth
+===================================================================
+--- cpu/arm/fb8-ops.fth (revision 2605)
++++ cpu/arm/fb8-ops.fth (working copy)
+@@ -324,7 +324,67 @@
+ add r3,r3,r1
+ repeat
+ c;
++0 [if]
++\ This is a (perhaps) faster version of fb-window-move that operates
++\ on 16 bytes in the inner loop, instead of 8.
++code fbx-window-move ( src-start dst-start size bytes/line width -- )
++ mov r0,tos
++ ldmia sp!,{r1,r2,r3,r4,tos}
++ psh r9,sp
++ \ r0:width r1: bytes/line r2:size r3:dst-start r4:src-start
++ sub r1,r1,r0 \ r1:bytes/line - width
++ add r2,r2,r4 \ r2:end-of-src-copy-region
++ begin
++ cmp r4,r2
++ < while
++ mov r9,r0 \ r9:loop-width
++ begin
++ decs r9,#16
++ ldmgeia r4!,{r5,r6,r7,r8}
++ stmgeia r3!,{r5,r6,r7,r8}
++ < until
+
++ add r4,r4,r1
++ add r3,r3,r1
++ repeat
++ pop r9,sp
++c;
++[then]
++0 [if]
++: foo-dli ( break-hi src-start dst-start size bytes/line width -- break-hi' )
++ 3drop over h# f4 lcd! over to frame-buffer-adr ( break-hi src dst )
++ \ Since we have moved the frame buffer address, we have to adjust break-hi,
++ \ which is the address where fb8-delete-lines will begin erasing, by the
++ \ difference
++ - + ( break-hi' )
++;
++\ XXX this only works for scrolling
++: screen-size ( -- n ) #lines char-height * bytes/line * ;
++: fb-limit ( -- adr ) fb-pa fb-size + ;
++
++: bytes/row ( -- #bytes ) char-height bytes/line * ;
++: excess-lines ( -- #lines ) fb-size bytes/row / #lines - 1+ ;
++: excess-bytes ( -- #bytes ) excess-lines bytes/row * ;
++: mmp2-delete-lines ( delta-#lines -- )
++ line# 0<> if fb8-delete-lines exit then
++ dup break-high dup excess-bytes - dup fb-pa >= if ( delta src dst )
++ bytes/row bytes/line emu-bytes/line fb-window-move ( delta-#lines )
++ else ( delta src dst )
++ 2drop ( delta-#lines )
++ then ( delta-#lines )
++
++ window-bottom bytes/row + fb-limit > if ( delta-#lines )
++ fb-pa ( delta-#lines new-base )
++ else ( delta-#lines )
++ dup break-low ( delta-#lines new-base )
++ then ( delta-#lines )
++ dup h# f4 lcd! to frame-buffer-adr ( delta-#lines )
++ window-bottom swap break-high erase-lines ( )
++;
++' mmp2-delete-lines to delete-lines
++[then]
++
++
+ \ LICENSE_BEGIN
+ \ Copyright (c) 1997 FirmWorks
+ \
More information about the openfirmware
mailing list