|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.