Annotation of qemu/roms/SLOF/board-js2x/slof/vga-display.fs, revision 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.