Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / SLOF / board-js2x / slof / vga-display.fs
diff --git a/qemu/roms/SLOF/board-js2x/slof/vga-display.fs b/qemu/roms/SLOF/board-js2x/slof/vga-display.fs
new file mode 100644 (file)
index 0000000..96417e2
--- /dev/null
@@ -0,0 +1,157 @@
+\ *****************************************************************************
+\ * Copyright (c) 2004, 2008 IBM Corporation
+\ * All rights reserved.
+\ * This program and the accompanying materials
+\ * are made available under the terms of the BSD License
+\ * which accompanies this distribution, and is available at
+\ * http://www.opensource.org/licenses/bsd-license.php
+\ *
+\ * Contributors:
+\ *     IBM Corporation - initial implementation
+\ ****************************************************************************/
+
+\ included by pci-class_03.fs
+
+( str len display_num ) \ name prefix
+
+false value is-installed?
+value display_num ( str len )
+
+s" ,Display-" $cat 41 display_num + char-cat \ add ", Display-A" or "-B" to name ( str len )
+encode-string s" name" property \ store as name property
+
+s" display" device-type
+
+\ screen-info is set by pci-class_03.fs contains output of get_vbe_info bios-snk call
+CASE screen-info c@ \ ( display-type )
+   0 OF s" NONE" ENDOF \ No display
+   1 OF s" Analog" ENDOF
+   2 OF s" Digital" ENDOF
+ENDCASE
+encode-string s" display-type" property 
+
+screen-info 8 + l@ value mem-adr
+screen-info 1 + w@ value width
+screen-info 3 + w@ value height
+
+screen-info c@ IF
+   \ if screen-info is not 0, we have some screen attached, add needed properties...
+   width encode-int s" width" property
+   height encode-int s" height" property
+   screen-info 5 + w@ encode-int s" linebytes" property
+   screen-info 7 + c@ encode-int s" depth" property
+   mem-adr encode-int s" address" property
+   \ the EDID property breaks the boot... so i leave it out for now, 
+   \ maybe encode-bytes does s.th. wrong???
+   \ screen-info c + 80 encode-bytes s" EDID" property
+   s" ISO8859-1" encode-string s" character-set" property \ i hope this is ok...
+THEN
+
+\ words for installation/removal, needed by is-install/is-remove, see display.fs
+: display-remove ( -- ) 
+;
+: display-install ( -- ) 
+   is-installed? NOT IF 
+      mem-adr to frame-buffer-adr 
+      default-font 
+      set-font
+      width height width char-width / height char-height / ( width height #lines #cols )
+      fb8-install 
+      true to is-installed?
+   THEN
+;
+
+: color! ( r g b number -- ) 
+   \ 3c8 is RAMDAC write mode select palette entry register
+   \ 3c9 is RAMDAC write mode write palette entry register ( 3 consecutive writes set new entry )
+   vga-device-node? 3c8 translate-address ( r g b number address ) 
+   swap 1 pick ( r g b address number address )
+   rb! \ write palette entry number ( r g b address )
+   1 + \ select next register (3c9)
+   dup 4 pick swap rb! \ write red ( r g b address )
+   dup 3 pick swap rb! \ write green ( r g b address )
+   dup 2 pick swap rb! \ write blue ( r g b address )
+   4drop
+;
+
+: color@ ( number -- r g b ) 
+   \ 3c7 is RAMDAC read mode select palette entry register
+   \ 3c9 is RAMDAC read mode read palette entry register ( 3 consecutive reads read entry )
+   vga-device-node? 3c7 translate-address ( number address ) 
+   swap 1 pick ( address number address )
+   rb! \ write palette entry number ( address )
+   2 + >r \ select next register (3c9) ( R: address )
+   r@ rb@ \ read red ( r R: address )
+   r@ rb@ \ read green ( r g R: address )
+   r@ rb@ \ write blue ( r g b R: address )
+   r> drop ( r g b )
+;
+
+: set-colors ( adr number #numbers -- )
+   \ 3c8 is RAMDAC write mode select palette entry register
+   \ 3c9 is RAMDAC write mode write palette entry register ( 3 consecutive writes set new entry )
+   \ since after writing 3 entries, the palette entry is automagically incremented, 
+   \ we can just continue writing...
+   vga-device-node? 3c8 translate-address ( adr number #numbers ) 
+   dup 3 pick swap ( adr number #numbers address number address )
+   rb! \ write palette entry number ( adr number #numbers address )
+   1 + \ select next register (3c9)  
+   -rot swap drop ( adr address #numbers )
+   -rot swap rot  ( address adr #numbers )
+   0 ?DO
+      ( address adr )
+      dup rb@ \ read red value from adr ( address adr r )
+      2 pick rb! \ write to register ( address adr )
+      1 + \ next adr 
+      dup rb@ \ read green value from adr ( address adr g )
+      2 pick rb! \ write to register ( address adr )
+      1 + \ next adr 
+      dup rb@ \ read blue value from adr ( address adr r )
+      2 pick rb! \ write to register ( address adr )
+      1 + \ next adr 
+   LOOP
+   2drop
+;
+
+: get-colors ( adr number #numbers -- )
+   \ 3c7 is RAMDAC read mode select palette entry register
+   \ 3c9 is RAMDAC read mode read palette entry register ( 3 consecutive reads get entry )
+   \ since after reading 3 entries, the palette entry is automagically incremented, 
+   \ we can just continue reading...
+   vga-device-node? 3c7 translate-address ( adr number #numbers ) 
+   dup 3 pick swap ( adr number #numbers address number address )
+   rb! \ write palette entry number ( adr number #numbers address )
+   2 + \ select next register (3c9)  
+   -rot swap drop ( adr address #numbers )
+   -rot swap rot  ( address adr #numbers )
+   0 ?DO
+      ( address adr )
+      1 pick rb@ \ read red value from register ( address adr r )
+      1 pick rb! \ write to adr ( address adr )
+      1 + \ next adr 
+      1 pick rb@ \ read green value from register ( address adr g )
+      1 pick rb! \ write to adr ( address adr )
+      1 + \ next adr 
+      1 pick rb@ \ read blue value from register ( address adr b )
+      1 pick rb! \ write to adr ( address adr )
+      1 + \ next adr 
+   LOOP
+   2drop
+;
+
+include graphics.fs
+
+\ clear screen 
+mem-adr width height * 0 rfill
+
+\ call is-install and is-remove
+' display-install is-install
+
+' display-remove is-remove
+
+s" screen" find-alias 0= IF
+   \ no previous screen alias defined, define it...
+   s" screen" get-node node>path set-alias
+ELSE
+   drop
+THEN