Annotation of qemu/roms/SLOF/board-js2x/slof/vga-display.fs, revision 1.1.1.1

1.1       root        1: \ *****************************************************************************
                      2: \ * Copyright (c) 2004, 2008 IBM Corporation
                      3: \ * All rights reserved.
                      4: \ * This program and the accompanying materials
                      5: \ * are made available under the terms of the BSD License
                      6: \ * which accompanies this distribution, and is available at
                      7: \ * http://www.opensource.org/licenses/bsd-license.php
                      8: \ *
                      9: \ * Contributors:
                     10: \ *     IBM Corporation - initial implementation
                     11: \ ****************************************************************************/
                     12: 
                     13: \ included by pci-class_03.fs
                     14: 
                     15: ( str len display_num ) \ name prefix
                     16: 
                     17: false value is-installed?
                     18: value display_num ( str len )
                     19: 
                     20: s" ,Display-" $cat 41 display_num + char-cat \ add ", Display-A" or "-B" to name ( str len )
                     21: encode-string s" name" property \ store as name property
                     22: 
                     23: s" display" encode-string s" device_type" property \ add "device_type" propert
                     24: 
                     25: \ screen-info is set by pci-class_03.fs contains output of get_vbe_info bios-snk call
                     26: CASE screen-info c@ \ ( display-type )
                     27:    0 OF s" NONE" ENDOF \ No display
                     28:    1 OF s" Analog" ENDOF
                     29:    2 OF s" Digital" ENDOF
                     30: ENDCASE
                     31: encode-string s" display-type" property 
                     32: 
                     33: screen-info 8 + l@ value mem-adr
                     34: screen-info 1 + w@ value width
                     35: screen-info 3 + w@ value height
                     36: 
                     37: screen-info c@ IF
                     38:    \ if screen-info is not 0, we have some screen attached, add needed properties...
                     39:    width encode-int s" width" property
                     40:    height encode-int s" height" property
                     41:    screen-info 5 + w@ encode-int s" linebytes" property
                     42:    screen-info 7 + c@ encode-int s" depth" property
                     43:    mem-adr encode-int s" address" property
                     44:    \ the EDID property breaks the boot... so i leave it out for now, 
                     45:    \ maybe encode-bytes does s.th. wrong???
                     46:    \ screen-info c + 80 encode-bytes s" EDID" property
                     47:    s" ISO8859-1" encode-string s" character-set" property \ i hope this is ok...
                     48: THEN
                     49: 
                     50: \ words for installation/removal, needed by is-install/is-remove, see display.fs
                     51: : display-remove ( -- ) 
                     52: ;
                     53: : display-install ( -- ) 
                     54:    is-installed? NOT IF 
                     55:       mem-adr to frame-buffer-adr 
                     56:       default-font 
                     57:       set-font
                     58:       width height width char-width / height char-height / ( width height #lines #cols )
                     59:       fb8-install 
                     60:       true to is-installed?
                     61:    THEN
                     62: ;
                     63: 
                     64: \ as of OF 8bit Graphics Recommendation, these shall be implemented:
                     65: 
                     66: : draw-rectangle ( adr x y w h -- )
                     67:    is-installed? IF
                     68:       0 ?DO
                     69:          4dup ( adr x y w adr x y w )
                     70:          drop ( adr x y w adr x y )
                     71:          i + screen-width * + \ calculate offset into framebuffer ((y + i) * screen_width + x) 
                     72:          ( adr x y w adr offs ) 
                     73:          frame-buffer-adr + \ add to frame-buffer-adr ( adr x y w adr fb_adr ) 
                     74:          1 pick 3 pick i * + swap 3 pick ( adr x y w adr adr_offs fb_adr w )
                     75:          rmove \ copy line ( adr x y w adr )
                     76:          drop ( adr x y w )
                     77:       LOOP
                     78:       4drop
                     79:    ELSE
                     80:       4drop drop
                     81:    THEN
                     82: ;
                     83: 
                     84: : fill-rectangle ( number x y w h -- )
                     85:    is-installed? IF
                     86:       0 ?DO
                     87:          4dup ( number x y w number x y w )
                     88:          drop ( number x y w number x y )
                     89:          i + screen-width * + \ calculate offset into framebuffer ((y + i) * screen_width + x) 
                     90:          ( number x y w number offs ) 
                     91:          frame-buffer-adr + \ add to frame-buffer-adr ( number x y w number adr ) 
                     92:          2 pick 2 pick ( number x y w number adr w number )
                     93:          rfill \ draw line ( number x y w number )
                     94:          drop ( number x y w )
                     95:       LOOP
                     96:       4drop
                     97:    ELSE
                     98:       4drop drop
                     99:    THEN
                    100: ;
                    101: 
                    102: : read-rectangle ( adr x y w h -- )
                    103:    is-installed? IF
                    104:       0 ?DO
                    105:          4dup ( adr x y w adr x y w )
                    106:          drop ( adr x y w adr x y )
                    107:          i + screen-width * + \ calculate offset into framebuffer ((y + i) * screen_width + x) 
                    108:          ( adr x y w adr offs ) 
                    109:          frame-buffer-adr + \ add to frame-buffer-adr ( adr x y w adr fb_adr ) 
                    110:          1 pick 3 pick i * + 3 pick ( adr x y w adr fb_adr adr_offs w )
                    111:          rmove \ copy line ( adr x y w adr )
                    112:          drop ( adr x y w )
                    113:       LOOP
                    114:       4drop
                    115:    ELSE
                    116:       4drop drop
                    117:    THEN
                    118: ;
                    119: 
                    120: : color! ( r g b number -- ) 
                    121:    \ 3c8 is RAMDAC write mode select palette entry register
                    122:    \ 3c9 is RAMDAC write mode write palette entry register ( 3 consecutive writes set new entry )
                    123:    vga-device-node? 3c8 translate-address ( r g b number address ) 
                    124:    swap 1 pick ( r g b address number address )
                    125:    rb! \ write palette entry number ( r g b address )
                    126:    1 + \ select next register (3c9)
                    127:    dup 4 pick swap rb! \ write red ( r g b address )
                    128:    dup 3 pick swap rb! \ write green ( r g b address )
                    129:    dup 2 pick swap rb! \ write blue ( r g b address )
                    130:    4drop
                    131: ;
                    132: 
                    133: : color@ ( number -- r g b ) 
                    134:    \ 3c7 is RAMDAC read mode select palette entry register
                    135:    \ 3c9 is RAMDAC read mode read palette entry register ( 3 consecutive reads read entry )
                    136:    vga-device-node? 3c7 translate-address ( number address ) 
                    137:    swap 1 pick ( address number address )
                    138:    rb! \ write palette entry number ( address )
                    139:    2 + >r \ select next register (3c9) ( R: address )
                    140:    r@ rb@ \ read red ( r R: address )
                    141:    r@ rb@ \ read green ( r g R: address )
                    142:    r@ rb@ \ write blue ( r g b R: address )
                    143:    r> drop ( r g b )
                    144: ;
                    145: 
                    146: : set-colors ( adr number #numbers -- )
                    147:    \ 3c8 is RAMDAC write mode select palette entry register
                    148:    \ 3c9 is RAMDAC write mode write palette entry register ( 3 consecutive writes set new entry )
                    149:    \ since after writing 3 entries, the palette entry is automagically incremented, 
                    150:    \ we can just continue writing...
                    151:    vga-device-node? 3c8 translate-address ( adr number #numbers ) 
                    152:    dup 3 pick swap ( adr number #numbers address number address )
                    153:    rb! \ write palette entry number ( adr number #numbers address )
                    154:    1 + \ select next register (3c9)  
                    155:    -rot swap drop ( adr address #numbers )
                    156:    -rot swap rot  ( address adr #numbers )
                    157:    0 ?DO
                    158:       ( address adr )
                    159:       dup rb@ \ read red value from adr ( address adr r )
                    160:       2 pick rb! \ write to register ( address adr )
                    161:       1 + \ next adr 
                    162:       dup rb@ \ read green value from adr ( address adr g )
                    163:       2 pick rb! \ write to register ( address adr )
                    164:       1 + \ next adr 
                    165:       dup rb@ \ read blue value from adr ( address adr r )
                    166:       2 pick rb! \ write to register ( address adr )
                    167:       1 + \ next adr 
                    168:    LOOP
                    169:    2drop
                    170: ;
                    171: 
                    172: : get-colors ( adr number #numbers -- )
                    173:    \ 3c7 is RAMDAC read mode select palette entry register
                    174:    \ 3c9 is RAMDAC read mode read palette entry register ( 3 consecutive reads get entry )
                    175:    \ since after reading 3 entries, the palette entry is automagically incremented, 
                    176:    \ we can just continue reading...
                    177:    vga-device-node? 3c7 translate-address ( adr number #numbers ) 
                    178:    dup 3 pick swap ( adr number #numbers address number address )
                    179:    rb! \ write palette entry number ( adr number #numbers address )
                    180:    2 + \ select next register (3c9)  
                    181:    -rot swap drop ( adr address #numbers )
                    182:    -rot swap rot  ( address adr #numbers )
                    183:    0 ?DO
                    184:       ( address adr )
                    185:       1 pick rb@ \ read red value from register ( address adr r )
                    186:       1 pick rb! \ write to adr ( address adr )
                    187:       1 + \ next adr 
                    188:       1 pick rb@ \ read green value from register ( address adr g )
                    189:       1 pick rb! \ write to adr ( address adr )
                    190:       1 + \ next adr 
                    191:       1 pick rb@ \ read blue value from register ( address adr b )
                    192:       1 pick rb! \ write to adr ( address adr )
                    193:       1 + \ next adr 
                    194:    LOOP
                    195:    2drop
                    196: ;
                    197: 
                    198: : dimensions ( -- width height )
                    199: width height
                    200: ;
                    201: 
                    202: \ clear screen 
                    203: mem-adr width height * 0 rfill
                    204: 
                    205: \ call is-install and is-remove
                    206: ' display-install is-install
                    207: 
                    208: ' display-remove is-remove
                    209: 
                    210: s" screen" find-alias 0= IF
                    211:    \ no previous screen alias defined, define it...
                    212:    s" screen" get-node node>path set-alias
                    213: ELSE
                    214:    drop
                    215: THEN 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.