[openfirmware] r1329 - cpu/x86 dev dev/olpc/touchpad ofw/gui ofw/termemu

svn at openfirmware.info svn at openfirmware.info
Tue Aug 25 09:10:54 CEST 2009


Author: wmb
Date: 2009-08-25 09:10:54 +0200 (Tue, 25 Aug 2009)
New Revision: 1329

Modified:
   cpu/x86/fb8-ops.fth
   dev/olpc/touchpad/touchpad.fth
   dev/ps2mouse.fth
   ofw/gui/button.fth
   ofw/gui/graphics.fth
   ofw/gui/iconmenu.fth
   ofw/gui/mouse.fth
   ofw/termemu/fb8.fth
   ofw/termemu/framebuf.fth
Log:
Via - Made the mouse work for the selftest menu.




Modified: cpu/x86/fb8-ops.fth
===================================================================
--- cpu/x86/fb8-ops.fth	2009-08-25 04:37:54 UTC (rev 1328)
+++ cpu/x86/fb8-ops.fth	2009-08-25 07:10:54 UTC (rev 1329)
@@ -406,6 +406,64 @@
    8 /n* #  sp  add
 c;
 
+code fb8-merge  ( color bits dst-adr width -- )
+   cx pop     \ CX: width
+   dx pop     \ DX: adr
+   bx pop     \ BX: bits
+   ax pop     \ AX: color
+   di push    \ Save DI
+   dx di mov  \ DI: adr
+   ax dx mov  \ DX: color
+   begin
+      bx bx add  \ Shift out high bit
+      carry?  if
+         al stos
+      else
+         di inc
+      then
+   loopa   
+   di pop     \ Restore DI
+c;
+
+code fb16-merge  ( color bits dst-adr width -- )
+   cx pop     \ CX: width
+   dx pop     \ DX: adr
+   bx pop     \ BX: bits
+   ax pop     \ AX: color
+   di push    \ Save DI
+   dx di mov  \ DI: adr
+   ax dx mov  \ DX: color
+   begin
+      bx bx add  \ Shift out high bit
+      carry?  if
+         op: ax stos
+      else
+         2 [di] di lea
+      then
+   loopa   
+   di pop     \ Restore DI
+c;
+
+code fb32-merge  ( color bits dst-adr width -- )
+   cx pop     \ CX: width
+   dx pop     \ DX: adr
+   bx pop     \ BX: bits
+   ax pop     \ AX: color
+   di push    \ Save DI
+   dx di mov  \ DI: adr
+   ax dx mov  \ DX: color
+   begin
+      bx bx add  \ Shift out high bit
+      carry?  if
+         ax stos
+      else
+         4 [di] di lea
+      then
+   loopa   
+   di pop     \ Restore DI
+c;
+
+
 headers
 \ LICENSE_BEGIN
 \ Copyright (c) 2006 FirmWorks

Modified: dev/olpc/touchpad/touchpad.fth
===================================================================
--- dev/olpc/touchpad/touchpad.fth	2009-08-25 04:37:54 UTC (rev 1328)
+++ dev/olpc/touchpad/touchpad.fth	2009-08-25 07:10:54 UTC (rev 1329)
@@ -55,12 +55,6 @@
 \ get-data        waits for and reads a data byte
 
 
-\ The normal mouse driver uses remote mode, but this device
-\ doesn't support remote mode, so patch the mouse driver
-\ "open" routine to substitute "noop" for "remote-mode".
-
-patch noop remote-mode open
-
 variable ptr
 0 value show-raw?
 
@@ -117,6 +111,13 @@
    then
 ;
 
+\ The normal mouse driver uses remote mode, but this device
+\ doesn't support remote mode, so patch the mouse driver
+\ "open" routine to substitute "noop" for "remote-mode".
+
+patch start remote-mode open
+
+
 \ I have been unable to get this to work.  The response is always
 \ 64 0 <something>, which doesn't agree with the spec.
 \ Perhaps the touchpad version that I have doesn't implement the,

Modified: dev/ps2mouse.fth
===================================================================
--- dev/ps2mouse.fth	2009-08-25 04:37:54 UTC (rev 1328)
+++ dev/ps2mouse.fth	2009-08-25 07:10:54 UTC (rev 1329)
@@ -313,10 +313,16 @@
    dup  if  clear-out-buf  then           ( error? )
 ;
 
+0 value open-count
+
 headers
 : open  ( -- flag )
    1 set-port
 
+   open-count  1+ to open-count
+
+   open-count 1 <>  if  true exit  then
+
    \ The "force" argument causes the open to succeed even if no mouse
    \ is present
    my-args  [char] , left-parse-string  2swap 2drop  " force"  $=  if
@@ -331,7 +337,10 @@
    remote-mode
    true
 ;
-: close  ( -- )  stream-off  ;
+: close  ( -- )
+   open-count 1 =  if  stream-off  then
+   open-count 1- 0 max  to open-count
+;
 
 headerless
 \ Filter out large negative motions; they're probably spurious

Modified: ofw/gui/button.fth
===================================================================
--- ofw/gui/button.fth	2009-08-25 04:37:54 UTC (rev 1328)
+++ ofw/gui/button.fth	2009-08-25 07:10:54 UTC (rev 1329)
@@ -218,7 +218,7 @@
    def-alert-col-row alert-text-box  center-text  key drop  restore-rectangle
 ;
 : setup  ( -- )
-   screen-ih 0= if  open-devices set-menu-colors  then
+   ?open-screen  set-menu-colors  ?open-mouse
    clear-menu install-menu cursor-off  refresh
 ;
 [then]

Modified: ofw/gui/graphics.fth
===================================================================
--- ofw/gui/graphics.fth	2009-08-25 04:37:54 UTC (rev 1328)
+++ ofw/gui/graphics.fth	2009-08-25 07:10:54 UTC (rev 1329)
@@ -40,6 +40,7 @@
 ;
 
 : $call-screen  ( ??? adr len -- ??? )  screen-ih $call-method  ;
+: screen-execute  ( ?? xt -- ?? )  screen-ih package( execute )package  ;
 
 \ : screen-wh  ( -- x y )
 \    screen-ih package( screen-width screen-height )package
@@ -68,9 +69,8 @@
    " set-colors" $call-screen
 ;
 
-: bytes/pixel  ( -- n )  " depth" $call-screen 8 /  ;
-: alloc-pixels  ( #pixels -- adr )  bytes/pixel *  alloc-mem  ;
-: free-pixels  ( adr #pixels -- )  bytes/pixel *  free-mem  ;
+: alloc-pixels  ( #pixels -- adr )  ['] pix* screen-execute  alloc-mem  ;
+: free-pixels   ( adr #pixels -- )  ['] pix* screen-execute  free-mem   ;
 
 : fill-rectangle  ( color x y w h - )
    ?inset " fill-rectangle" $call-screen

Modified: ofw/gui/iconmenu.fth
===================================================================
--- ofw/gui/iconmenu.fth	2009-08-25 04:37:54 UTC (rev 1328)
+++ ofw/gui/iconmenu.fth	2009-08-25 07:10:54 UTC (rev 1329)
@@ -416,17 +416,21 @@
    bb bb bb  15 set-color  \ Bright gray for CD-ROM icon
 ;
 
-: open-devices  ( -- )
-   " screen" open-dev is screen-ih
+: ?open-screen  ( -- )
+   screen-ih  0=  if
+      " screen" open-dev is screen-ih
+   then
+;
+: ?open-mouse  ( -- )
    mouse-ih  0=  if
-      " mouse"  open-dev to mouse-ih    \ Try alias first
+      " mouse" open-dev is mouse-ih
       mouse-ih  0=  if
          " /mouse" open-dev to mouse-ih
       then
-      alloc-mouse-cursor
+      mouse-ih  if  alloc-mouse-cursor  then
    then
 ;
-
+ 
 true config-flag menu?
 0 value default-selection
 
@@ -468,7 +472,7 @@
 ;
 
 : setup-graphics  ( -- )
-   screen-ih  0=  if  open-devices set-menu-colors  then
+   ?open-screen  set-menu-colors  ?open-mouse
 ;
 : setup-menu  ( -- )
    setup-graphics

Modified: ofw/gui/mouse.fth
===================================================================
--- ofw/gui/mouse.fth	2009-08-25 04:37:54 UTC (rev 1328)
+++ ofw/gui/mouse.fth	2009-08-25 07:10:54 UTC (rev 1329)
@@ -18,6 +18,7 @@
 \ ' move-cursor is handle-movement
 \ mouse position is kept in values x and y
 
+0 [if]
 d# 16 constant cursor-w
 d# 16 constant cursor-h
 
@@ -36,34 +37,93 @@
    78000000 ,  58000000 ,  0c000000 ,  0c000000 ,
 \  04000000 ,  06000000 ,  02000000 ,  00000000 ,
    06000000 ,  06000000 ,  00000000 ,  00000000 ,
+[else]
+d# 17 constant cursor-w
+d# 31 constant cursor-h
 
-: merge-line  ( color mask adr -- )
-   cursor-w bounds  ?do                         ( color mask )
-     dup h# 80000000 and  if  over i c!  then   ( color mask )
-     2*                                         ( color mask' )
-   loop
-   2drop
-;
-: merge-rect  ( color mask-adr rect-adr -- )
-   cursor-h  0  do  ( color mask-adr rect-adr )
-      3dup swap @ swap  merge-line
-      swap na1+  swap cursor-w +
-   loop
-   3drop
-;
+create white-bits
+binary
+   11000000000000000000000000000000 ,
+   11100000000000000000000000000000 ,
+   11011000000000000000000000000000 ,
+   11001100000000000000000000000000 ,
+   11000110000000000000000000000000 ,
+   11000011000000000000000000000000 ,
+   11000001100000000000000000000000 ,
+   11000000110000000000000000000000 ,
+   11000000011000000000000000000000 ,
+   11000000001100000000000000000000 ,
+   11000000000110000000000000000000 ,
+   11000000000011000000000000000000 ,
+   11000000000001100000000000000000 ,
+   11000000000000110000000000000000 ,
+   11000000000000011000000000000000 ,
+   11000000000000001100000000000000 ,
+   11000000000111111000000000000000 ,
+   11000000000011000000000000000000 ,
+   11000110000011000000000000000000 ,
+   11001110000001100000000000000000 ,
+   11010011000001100000000000000000 ,
+   11100011000000110000000000000000 ,
+   00000001100000110000000000000000 ,
+   00000001100000011000000000000000 ,
+   00000000110000011000000000000000 ,
+   00000000110000001100000000000000 ,
+   00000000011000001100000000000000 ,
+   00000000011000000110000000000000 ,
+   00000000001100011000000000000000 ,
+   00000000000111110000000000000000 ,   
+   00000000000111110000000000000000 ,
 
+create black-bits
+   00000000000000000000000000000000 ,
+   00000000000000000000000000000000 ,
+   00100000000000000000000000000000 ,
+   00110000000000000000000000000000 ,
+   00111000000000000000000000000000 ,
+   00111100000000000000000000000000 ,
+   00111110000000000000000000000000 ,
+   00111111000000000000000000000000 ,
+   00111111100000000000000000000000 ,
+   00111111110000000000000000000000 ,
+   00111111111000000000000000000000 ,
+   00111111111100000000000000000000 ,
+   00111111111110000000000000000000 ,
+   00111111111111000000000000000000 ,
+   00111111111111100000000000000000 ,
+   00111111111111110000000000000000 ,
+   00111111111000000000000000000000 ,
+   00111111111100000000000000000000 ,
+   00111001111100000000000000000000 ,
+   00110001111110000000000000000000 ,
+   00100000111110000000000000000000 ,
+   00000000111111000000000000000000 ,
+   00000000011111000000000000000000 ,
+   00000000011111100000000000000000 ,
+   00000000001111100000000000000000 ,
+   00000000001111110000000000000000 ,
+   00000000000111110000000000000000 ,
+   00000000000111110000000000000000 ,
+   00000000000011100000000000000000 ,
+   00000000000000000000000000000000 ,
+   00000000000000000000000000000000 ,
+hex
+[then]
+
+
+
 0 value /rect
 0 value old-rect
 0 value new-rect
 : alloc-mouse-cursor  ( -- )
-   cursor-w cursor-h *  bytes/pixel *  to /rect
+   cursor-w cursor-h *  ['] pix* screen-execute  to /rect
    cursor-w cursor-h *  alloc-pixels to old-rect
    cursor-w cursor-h *  alloc-pixels to new-rect
 ;
 
 : merge-cursor  ( -- )
-   0f white-bits new-rect merge-rect
-   00 black-bits new-rect merge-rect
+   background  white-bits new-rect cursor-w cursor-h ['] merge-rect screen-execute
+   black       black-bits new-rect cursor-w cursor-h ['] merge-rect screen-execute
 ;
 
 : put-cursor  ( x y adr -- )
@@ -88,7 +148,7 @@
 : update-position  ( x y -- )
    2dup or 0=  if  2drop exit  then  \ Avoid flicker if there is no movement
 
-   \ Minimize the time the cursor is down by doing computation in advance
+   \ Minimize the time the cursor is down by doing computa1000000000000000000 ,tion in advance
    \ Considering the amount of code that is executed to put up the cursor,
    \ this optimization is probable unnoticeable, but it doesn't cost much.
    negate  ypos +  0  max-y cursor-h -  clamp      ( x y' )

Modified: ofw/termemu/fb8.fth
===================================================================
--- ofw/termemu/fb8.fth	2009-08-25 04:37:54 UTC (rev 1328)
+++ ofw/termemu/fb8.fth	2009-08-25 07:10:54 UTC (rev 1329)
@@ -240,6 +240,48 @@
         bytes/line +                        ( #bytes adr' )
     loop  2drop                             ( )
 ;
+
+[ifndef] fb8-merge
+: fb8-merge  ( color bits dst-adr width -- )
+   bounds  ?do                   ( color mask )
+      dup h# 80000000 and  if    ( color mask )
+         over i c!               ( color mask )
+      then                       ( color mask )
+      2*                         ( color mask' )
+   loop                          ( color mask )
+   2drop                         ( )
+;
+: fb16-merge  ( color bits dst-adr width -- )
+   cursor-w /w*  bounds  ?do     ( color mask )
+      dup h# 80000000 and  if    ( color mask )
+         over i w!               ( color mask )
+      then                       ( color mask )
+      2*                         ( color mask' )
+   /w +loop                      ( color mask )
+   2drop                         ( )
+;
+: fb32-merge  ( color bits dst-adr width -- )
+   cursor-w /l*  bounds  ?do     ( color mask )
+      dup h# 80000000 and  if    ( color mask )
+         over i l!               ( color mask )
+      then                       ( color mask )
+      2*                         ( color mask' )
+   /l +loop                      ( color mask )
+   2drop                         ( )
+;
+[then]
+
+\ This is used for cursor painting.  Call it via screen-execute
+
+: merge-rect  ( color mask-adr dst-adr width height -- )
+   0  ?do                        ( color mask-adr rect-adr width )
+      2over @  2over  fb-merge   ( color mask-adr rect-adr width )
+      rot na1+ -rot              ( color mask-adr' rect-adr width )
+      tuck pix* +  swap          ( color mask-adr rect-adr' width )
+   loop
+   4drop
+;
+
 headers
 : fb8-insert-characters  ( #chars -- )
     #columns column# - min  dup
@@ -251,6 +293,7 @@
     column# +  column#           ( #chars' cursor+count-col#  cursor-col# )
     move-chars  ( #chars' )  #columns over -  erase-chars
 ;
+
 headerless
 
 : center-display  ( -- )
@@ -266,6 +309,7 @@
          ['] fb8-invert to fb-invert
          ['] fill       to fb-fill
          ['] fb8-paint  to fb-paint
+         ['] fb8-merge  to fb-merge
          ['] colors-8bpp  to fb-16map
       endof
 
@@ -274,6 +318,7 @@
          ['] fb16-invert to fb-invert
          ['] wfill       to fb-fill
          ['] fb16-paint  to fb-paint
+         ['] fb16-merge  to fb-merge
          ['] colors-565  to fb-16map
       endof
 
@@ -282,6 +327,7 @@
          ['] fb32-invert to fb-invert
          ['] lfill       to fb-fill
          ['] fb32-paint  to fb-paint
+         ['] fb32-merge  to fb-merge
          ['] colors-32bpp to fb-16map
       endof
    endcase

Modified: ofw/termemu/framebuf.fth
===================================================================
--- ofw/termemu/framebuf.fth	2009-08-25 04:37:54 UTC (rev 1328)
+++ ofw/termemu/framebuf.fth	2009-08-25 07:10:54 UTC (rev 1329)
@@ -76,6 +76,7 @@
 termemu-defer fb-fill
 termemu-defer fb-paint
 termemu-defer fb-16map
+termemu-defer fb-merge
 
 termemu-defer draw-character
 termemu-defer insert-characters




More information about the openfirmware mailing list