anchor.diff:  : fb8-background inverse-screen? ;
   : fb8-foreground inverse? invert ;
   
  -: fb8-lines2bytes ( #lines -- #bytes ) char-height * screen-width * ;
  -: fb8-columns2bytes ( #columns -- #bytes ) char-width * ;
  +: fb8-lines2bytes ( #lines -- #bytes ) char-height * screen-width * screen-depth * ;
  +: fb8-columns2bytes ( #columns -- #bytes ) char-width * screen-depth * ;
   : fb8-line2addr ( line# -- addr )
  -	char-height * window-top + screen-width *
  -	frame-buffer-adr + window-left +
  +	char-height * window-top + screen-width * screen-depth *
  +	frame-buffer-adr + window-left screen-depth * +
   ;
   
   : fb8-erase-block ( addr len ) fb8-background rfill ;
   
   
   0 VALUE .ab
  -CREATE bitmap-buffer 400 allot
  +CREATE bitmap-buffer 400 4 * allot
   
   : active-bits ( -- new ) .ab dup 8 > IF 8 - to .ab 8 ELSE
   		char-width to .ab ?dup 0= IF recurse THEN
  
positive.code: : fb8-blink-screen ( -- ) fb8-invert-screen fb8-invert-screen ;
  
  : fb8-install ( width height #columns #lines -- )
  	screen-#rows min to #lines
  	screen-#columns min to #columns
  	dup to screen-height char-height #lines * - 2/ to window-top
  	dup to screen-width char-width #columns * - 2/ to window-left
  	['] fb8-toggle-cursor to toggle-cursor
  	['] fb8-draw-character to draw-character
  	['] fb8-insert-lines to insert-lines
  
negative.code: 0 VALUE frame-buffer-adr
  0 VALUE screen-height
  0 VALUE screen-width
  0 VALUE screen-depth
  0 VALUE window-top
  0 VALUE window-left
  
  0 VALUE .sc
  
  : screen-#rows  ( -- rows )
     .sc IF
        screen-height char-height /
      ELSE
        true to .sc
        s" screen-#rows" eval
        false to .sc
      THEN
  ;
  
  : screen-#columns ( -- columns )
     .sc IF
        screen-width char-width /
     ELSE
        true to .sc
        s" screen-#columns" eval
        false to .sc
     THEN
  ;
  
  \ \\\\\\\\\\\\\\ Structure/Implementation Dependent Methods
  
  