Annotation of qemu/roms/SLOF/board-js2x/slof/pci-device_1002_515e.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: my-space pci-class-name type
        !            14: 
        !            15: my-space assign-all-device-bars
        !            16: my-space pci-device-props
        !            17: my-space pci-set-irq-line
        !            18: 
        !            19: 7 4 config-w!
        !            20: 
        !            21: \ Special notice from ATI:
        !            22: \ ATI TECHNOLOGIES INC. ("ATI") HAS NOT ASSISTED IN THE CREATION OF,
        !            23: \ AND DOES NOT ENDORSE THE USE OF, THIS SOFTWARE.  ATI WILL NOT BE
        !            24: \ RESPONSIBLE OR LIABLE FOR ANY ACTUAL OR ALLEGED DAMAGE OR LOSS
        !            25: \ CAUSED BY OR IN CONNECTION WITH THE USE OF, OR RELIANCE ON,
        !            26: \ THIS SOFTWARE.
        !            27: 
        !            28: \  Description: This FCODE driver initializes the RN50 (ES1000) ATI
        !            29: \               adaptor.
        !            30: 
        !            31: -1 value mem-addr
        !            32: -1 value regs-addr
        !            33: false value is_installed
        !            34: 
        !            35: : >rn [ 18 config-l@ -10 and ] LITERAL + ;
        !            36: : rn! >rn rl!-le ;
        !            37: : rn@ >rn rl@-le ;
        !            38: : reg-rl@ rn@ ;
        !            39: : reg-rl! rn! ;
        !            40: : map-in        " map-in"       $call-parent ;
        !            41: : map-out       " map-out"      $call-parent ;
        !            42: : pc@ ( offset -- byte ) >rn rb@ ;
        !            43: : pc! ( byte offset -- ) >rn rb! ;
        !            44: 
        !            45: 0 value phys_low
        !            46: 0 value phys_mid
        !            47: 0 value phys_high
        !            48: 0 value phys_len
        !            49: 
        !            50: : MAP-CSR-BASE ( -- )
        !            51:   " assigned-addresses" get-my-property 0= if
        !            52:     begin dup 0> while  ( prop-addr len )
        !            53:      \ Get the phys-hi mid low and the low order 32 bits of the length
        !            54: 
        !            55:       decode-phys to phys_high to phys_mid to phys_low decode-int drop decode-int to phys_len
        !            56: 
        !            57:       phys_high H# FF and  \ See which BAR this refers to
        !            58:       case
        !            59:         h# 10 of phys_low phys_mid phys_high h# 1000000  map-in to mem-addr  endof
        !            60:         h# 18 of phys_low phys_mid phys_high    phys_len map-in to regs-addr endof
        !            61:       endcase
        !            62:     repeat
        !            63:     ( prop-addr 0 ) 2drop
        !            64:   then
        !            65: 
        !            66:   ;
        !            67: 
        !            68: : enable-card my-space 4 + dup config-b@ 3 or swap config-b! ;
        !            69: 
        !            70: : EARLY-MAP ( -- )
        !            71: 
        !            72:   " reg" get-my-property 0= if
        !            73:     begin dup 0> while  ( prop-addr len )
        !            74: 
        !            75:    \ Get the phys-hi mid low and the low order 32 bits of the length
        !            76: 
        !            77:       decode-phys to phys_high to phys_mid to phys_low decode-int drop decode-int to phys_len
        !            78: 
        !            79:       phys_high H# FF and  \ See which BAR this refers to
        !            80:       case
        !            81:         h# 10 of phys_low phys_mid phys_high H# 1000000  map-in to mem-addr  endof
        !            82:         h# 18 of phys_low phys_mid phys_high h#    1000  map-in to regs-addr endof
        !            83:       endcase
        !            84:     repeat
        !            85:     ( prop-addr 0 ) 2drop
        !            86:   then
        !            87:   ;
        !            88: 
        !            89: : EARLY-UNMAP ( -- )
        !            90: 
        !            91:   mem-addr -1 <> if
        !            92:     mem-addr h# 1000000 map-out
        !            93:     -1 to mem-addr
        !            94:   then
        !            95: 
        !            96:   regs-addr -1 <> if
        !            97:     regs-addr h# 1000   map-out
        !            98:     -1 to regs-addr
        !            99:   then
        !           100: 
        !           101:   ;
        !           102: 
        !           103: CREATE INIT1_ARRAY
        !           104: H# 0F8  ( CONFIG_MEMSIZE )  L,    H# 00000000 L, H# 01000000 L,
        !           105: H# 1C0  ( MPP_TB_CONFIG )   L,    H# 00FFFFFF L, H# 07000000 L,
        !           106: H# 030  ( BUS_CNTL      )   L,    H# 00000000 L, H# 5133A3B0 L,
        !           107: H# 0EC  ( RBBM_CNTL     )   L,    H# 00000000 L, h# 00004443 L,
        !           108: H# 1D0  ( DEBUG_CNTL    )   L,    H# FFFFFFFD L, H# 00000002 L,
        !           109: H# 050  ( CRTC_GEN_CNTL )   L,    H# 00000000 L, H# 04000000 L,
        !           110: H# 058  ( DAC_CNTL      )   L,    H# 00000000 L, H# FF604102 L,
        !           111: H# 168  ( PAD_CTLR_STRENGTH ) L,  H# FFFEFFFF L, H# 00001200 L,
        !           112: H# 178  ( MEM_REFRESH_CNTL  ) L,  H# 00000000 L, H# 88888888 L,
        !           113: H# 17C  ( MEM_READ_CNTL )   L,    H# 00000000 L, H# B7C20000 L,
        !           114: H# 188  ( MC_DEBUG      )   L,    H# FFFFFFFF L, H# 00000000 L,
        !           115: H# D00  ( DISP_MISC_CNTL)   L,    H# 00FFFFFF L, H# 5B000000 L,
        !           116: H# 88C  ( TV_DAC_CNTL   )   L,    H# F800FCEF L, H# 00490200 L,
        !           117: H# D04  ( DAC_MACRO_CNTL)   L,    H# 00000000 L, H# 00000905 L,
        !           118: H# 284  ( FP_GEN_CNTL   )   L,    H# FFFFFFFF L, H# 00000008 L,
        !           119: H# 030  ( BUS_CNTL      )   L,    H# FFFFFFEF L, H# 00000000 L,
        !           120: 
        !           121: here  INIT1_ARRAY  - /L / CONSTANT INIT1_LENGTH
        !           122: 
        !           123: 
        !           124: CREATE INIT2_ARRAY
        !           125: 
        !           126: H# 140  ( MEM_CNTL )           L, H#  00000000 L, H# 38001A01 L, 0 L,
        !           127: H# 158  ( MEM_SDRAM_MODE_REG ) L, H#  E0000000 L, H# 08320032 L, 0 L,
        !           128: H# 144  ( MEM_TIMING_CNTL    ) L, H#  00000000 L, H# 20123833 L, 0 L,
        !           129: H# 14C  ( MC_AGP_LOCATION    ) L, H#  00000000 L, H# 000FFFF0 L, 0 L,
        !           130: H# 148  ( MC_FB_LOCATION     ) L, H#  00000000 L, H# FFFF0000 L, 0 L,
        !           131: H# 154  ( MEM_INIT_LAT_TIMER ) L, H#  00000000 L, H# 34444444 L, 0 L,
        !           132: H# 18C  ( MC_CHP_IO_OE_CNTL  ) L, H#  00000000 L, H# 0A540002 L, 0 L,
        !           133: H# 910  ( FCP_CNTL           ) L, H#  00000000 L, H# 00000004 L, 0 L,
        !           134: H# 010  ( BIOS_0_SCRATCH     ) L, H#  FFFFFFFB L, H# 00000004 L, 0 L,
        !           135: H# D64  ( DISP_OUTPUT_CNTL   ) L, H#  FFFFFBFF L, H# 00000000 L, 0 L,
        !           136: H# 2A8  ( TMDS_PLL_CNTL      ) L, H#  00000000 L, H# 00000A1B L, 0 L,
        !           137: H# 800  ( TV_MASTER_CNTL     ) L, H#  BFFFFFFF L, H# 40000000 L, 0 L,
        !           138: H# D10  ( DISP_TEST_DBUG_CTL ) L, H#  EFFFFFFF L, H# 10000000 L, 0 L,
        !           139: H# 4DC  ( OV0_FLAG_CNTRL     ) L, H#  FFFFFEFF L, H# 00000100 L, 0 L,
        !           140: H# 034  ( BUS_CNTL1          ) L, H#  73FFFFFF L, H# 84000000 L, 0 L,
        !           141: H# 174  ( AGP_CNTL           ) L, H#  FFEFFF00 L, H# 001E0000 L, 0 L,
        !           142: H# 18C  ( MC_CHP_IO_OE_CNTL  ) L, H#  FFFFFFF9 L, H# 00000006 L, h# 000A L,
        !           143: H# 18C  ( MC_CHP_IO_OE_CNTL  ) L, H#  FFFFFFFB L, H# 00000000 L, H# 000A L,
        !           144: H# 18C  ( MC_CHP_IO_OE_CNTL  ) L, H#  FFFFFFFD L, H# 00000000 L, 0 L,
        !           145: 
        !           146: here  INIT2_ARRAY  - /L / CONSTANT INIT2_LENGTH
        !           147: 
        !           148: CREATE PLLINIT_ARRAY
        !           149: 
        !           150: H# 0D   L, H# FFFFFFFF L, H# FFFF8000 L, 0 L,
        !           151: H# 12   L, H# FFFFFFFF L, H# 00350000 L, 0 L,
        !           152: H# 08   L, H# FFFFFFFF L, H# 00000000 L, 0 L,
        !           153: H# 2D   L, H# FFFFFFFF L, H# 00000000 L, 0 L,
        !           154: H# 1F   L, H# FFFFFFFF L, H# 0000000A L, 5 L,
        !           155: H# 03   L, H# FFFFFFFF L, H# 0000003C L, 0 L,
        !           156: H# 0A   L, H# FFFFFFFF L, H# 00252504 L, 0 L,
        !           157: H# 25   L, H# FFFFFFFF L, H# 00000005 L, 0 L,
        !           158: H# 0E   L, H# FFFFFFFF L, H# 04756400 L, 0 L,
        !           159: H# 0C   L, H# FFFFFFFF L, H# 04006401 L, 0 L,
        !           160: H# 02   L, H# FFFFFFFF L, H# 0000A703 L, 0 L,
        !           161: H# 0F   L, H# FFFFFFFF L, H# 0000051C L, 0 L,
        !           162: H# 10   L, H# FFFFFFFF L, H# 04000400 L, 5 L,
        !           163: H# 0E   L, H# FFFFFFFD L, H# 00000000 L, 5 L,
        !           164: H# 0E   L, H# FFFFFFFE L, H# 00000000 L, 5 L,
        !           165: H# 12   L, H# FFFFFFFF L, H# 00350012 L, 5 L,
        !           166: H# 0F   L, H# FFFFFFFE L, H# 00000000 L, 6 L,
        !           167: H# 10   L, H# FFFFFFFE L, H# 00000000 L, 5 L,
        !           168: H# 10   L, H# FFFEFFFF L, H# 00000000 L, 6 L,
        !           169: H# 0F   L, H# FFFFFFFD L, H# 00000000 L, 5 L,
        !           170: H# 10   L, H# FFFFFFFD L, H# 00000000 L, 5 L,
        !           171: H# 10   L, H# FFFDFFFF L, H# 00000000 L, d# 10 L,
        !           172: H# 0C   L, H# FFFFFFFE L, H# 00000000 L, 6 L,
        !           173: H# 0C   L, H# FFFFFFFD L, H# 00000000 L, 5 L,
        !           174: h# 0D   L, H# FFFFFFFF L, H# FFFF8007 L, 5 L,
        !           175: H# 08   L, H# FFFFFF3C L, H# 00000000 L, 0 L,
        !           176: H# 02   L, H# FFFFFFFF L, H# 00000003 L, 0 L,
        !           177: H# 04   L, H# FFFFFFFF L, H# 000381C0 L, 0 L,
        !           178: H# 05   L, H# FFFFFFFF L, H# 000381F7 L, 0 L,
        !           179: H# 06   L, H# FFFFFFFF L, H# 000381C0 L, 0 L,
        !           180: H# 07   L, H# FFFFFFFF L, H# 000381F7 L, 0 L,
        !           181: H# 02   L, H# FFFFFFFD L, H# 00000000 L, 6 L,
        !           182: H# 02   L, H# FFFFFFFE L, H# 00000000 L, 5 L,
        !           183: h# 08   L, H# FFFFFF3C L, H# 00000003 L, 5 L,
        !           184: H# 0B   L, H# FFFFFFFF L, H# 78000800 L, 0 L,
        !           185: H# 0B   L, H# FFFFFFFF L, H# 00004000 L, 0 L,
        !           186: h# 01   L, h# FFFFFFFF L, H# 00000010 L, 0 L,
        !           187: 
        !           188: here  PLLINIT_ARRAY  - /L / CONSTANT PLLINIT_LENGTH
        !           189: 
        !           190: CREATE MEMINIT_ARRAY
        !           191: h# 6FFF0000  L, H# 00004000 L, H# 6FFF0000 L, H# 80004000 L,
        !           192: h# 6FFF0000  L, H# 00000132 L, H# 6FFF0000 L, H# 80000132 L,
        !           193: h# 6FFF0000  L, H# 00000032 L, H# 6FFF0000 L, H# 80000032 L,
        !           194: h# 6FFF0000  L, H# 10000032 L,
        !           195: here MEMINIT_ARRAY - /L / CONSTANT MEMINIT_LENGTH
        !           196: : L@+ ( addr -- value addr' )
        !           197: 
        !           198: dup l@ swap la1+
        !           199: ;
        !           200: 
        !           201: 0 VALUE _len
        !           202: 
        !           203: : ENCODE-ARRAY  ( array len -- )
        !           204:    dup to _len 0  do  l@+ swap encode-int rot  loop
        !           205:    drop _len 1 - 0  ?do  encode+  loop
        !           206: ;
        !           207: 
        !           208: : andorset  ( reg and or -- )
        !           209:    2 pick regs-addr + dup rn@
        !           210:    3 pick AND 2 pick OR swap rn! 3drop
        !           211: ;
        !           212: 
        !           213: : INIT1
        !           214: H# 0F8  ( CONFIG_MEMSIZE )      H# 00000000  H# 01000000 andorset \ Set 16Mb memory size
        !           215: H# 1C0  ( MPP_TB_CONFIG )       H# 00FFFFFF  H# 07000000 andorset
        !           216: H# 030  ( BUS_CNTL      )       H# 00000000  H# 5133A3B0 andorset
        !           217: H# 0EC  ( RBBM_CNTL     )       H# 00000000  h# 00004443 andorset
        !           218: H# 1D0  ( DEBUG_CNTL    )       H# FFFFFFFD  H# 00000002 andorset
        !           219: H# 050  ( CRTC_GEN_CNTL )       H# 00000000  H# 04000000 andorset
        !           220: H# 058  ( DAC_CNTL      )       H# 00000000  H# FF604102 andorset
        !           221: H# 168  ( PAD_CTLR_STRENGTH )   H# FFFEFFFF  H# 00001200 andorset
        !           222: H# 178  ( MEM_REFRESH_CNTL  )   H# 00000000  H# 88888888 andorset
        !           223: H# 17C  ( MEM_READ_CNTL )       H# 00000000  H# B7C20000 andorset
        !           224: H# 188  ( MC_DEBUG      )       H# FFFFFFFF  H# 00000000 andorset
        !           225: H# D00  ( DISP_MISC_CNTL)       H# 00FFFFFF  H# 5B000000 andorset
        !           226: H# 88C  ( TV_DAC_CNTL   )       H# F800FCEF  H# 00490200 andorset
        !           227: H# D04  ( DAC_MACRO_CNTL)       H# 00000000  H# 00000905 andorset
        !           228: H# 284  ( FP_GEN_CNTL   )       H# FFFFFFFF  H# 00000008 andorset
        !           229: H# 030  ( BUS_CNTL      )       H# FFFFFFEF  H# 00000000 andorset
        !           230: ;
        !           231: 
        !           232: 
        !           233: : INIT2
        !           234: H# 140  ( MEM_CNTL )            H#  00000000  H# 38001A01 andorset
        !           235: H# 158  ( MEM_SDRAM_MODE_REG )  H#  E0000000  H# 08320032 andorset
        !           236: H# 144  ( MEM_TIMING_CNTL    )  H#  00000000  H# 20123833 andorset
        !           237: H# 14C  ( MC_AGP_LOCATION    )  H#  00000000  H# 000FFFF0 andorset
        !           238: H# 148  ( MC_FB_LOCATION     )  H#  00000000  H# FFFF0000 andorset
        !           239: H# 154  ( MEM_INIT_LAT_TIMER )  H#  00000000  H# 34444444 andorset
        !           240: H# 18C  ( MC_CHP_IO_OE_CNTL  )  H#  00000000  H# 0A540002 andorset
        !           241: H# 910  ( FCP_CNTL           )  H#  00000000  H# 00000004 andorset
        !           242: H# 010  ( BIOS_0_SCRATCH     )  H#  FFFFFFFB  H# 00000004 andorset
        !           243: H# D64  ( DISP_OUTPUT_CNTL   )  H#  FFFFFBFF  H# 00000000 andorset
        !           244: H# 2A8  ( TMDS_PLL_CNTL      )  H#  00000000  H# 00000A1B andorset
        !           245: H# 800  ( TV_MASTER_CNTL     )  H#  BFFFFFFF  H# 40000000 andorset
        !           246: H# D10  ( DISP_TEST_DEBUG_CTL ) H#  EFFFFFFF  H# 10000000 andorset
        !           247: H# 4DC  ( OV0_FLAG_CNTRL     )  H#  FFFFFEFF  H# 00000100 andorset
        !           248: H# 034  ( BUS_CNTL1          )  H#  73FFFFFF  H# 84000000 andorset
        !           249: H# 174  ( AGP_CNTL           )  H#  FFEFFF00  H# 001E0000 andorset
        !           250: H# 18C  ( MC_CHP_IO_OE_CNTL  )  H#  FFFFFFF9  H# 00000006 andorset h# 000A ms
        !           251: H# 18C  ( MC_CHP_IO_OE_CNTL  )  H#  FFFFFFFB  H# 00000000 andorset H# 000A ms
        !           252: H# 18C  ( MC_CHP_IO_OE_CNTL  )  H#  FFFFFFFD  H# 00000000 andorset
        !           253: ;
        !           254: 
        !           255: : CLK-CNTL-INDEX! 8 ( CLK_CNTL_INDEX ) reg-rl! ;
        !           256: 
        !           257: : CLK-CNTL-INDEX@ 8 ( CLK_CNTL_INDEX ) reg-rl@ ;
        !           258: 
        !           259: : PLLWRITEON  clk-cntl-index@ H# 80 ( PLL_WR_ENABLE ) or clk-cntl-index! ;
        !           260: 
        !           261: : PLLWRITEOFF clk-cntl-index@ H# 80 ( PLL_WR_ENABLE ) not and clk-cntl-index! ; \ Remove PLL_WR_ENABLE
        !           262: 
        !           263: : CLKDATA! h# 0c ( CLK_CNTL_DATA ) reg-rl! ;
        !           264: 
        !           265: : CLKDATA@ h# 0c ( CLK_CNTL_DATA ) reg-rl@ ;
        !           266: 
        !           267: : PLLINDEXSET clk-cntl-index@ h# FFFFFFC0 and or clk-cntl-index! ;
        !           268: 
        !           269: : PLLSET swap pllindexset clkdata! ;
        !           270: 
        !           271: : pllandorset  ( index and or -- )
        !           272:    2 pick pllindexset clkdata@
        !           273:    2 pick AND over OR clkdata! 3drop
        !           274: ;
        !           275: 
        !           276: : PLLINIT
        !           277: pllwriteon
        !           278: H# 0D   H# FFFF8000 pllset
        !           279: H# 12   H# 00350000 pllset
        !           280: H# 08   H# 00000000 pllset
        !           281: H# 2D   H# 00000000 pllset
        !           282: H# 1F   H# 0000000A pllset 5 ms
        !           283: 
        !           284: H# 03   H# 0000003C pllset
        !           285: H# 0A   H# 00252504 pllset
        !           286: H# 25   H# 00000005 pllset
        !           287: H# 0E   H# 04756400 pllset
        !           288: H# 0C   H# 04006401 pllset
        !           289: H# 02   H# 0000A703 pllset
        !           290: H# 0F   H# 0000051C pllset
        !           291: H# 10   H# 04000400 pllset 5 ms
        !           292: 
        !           293: H# 0E   H# FFFFFFFD 00 pllandorset 5 ms
        !           294: H# 0E   H# FFFFFFFE 00 pllandorset 5 ms
        !           295: H# 12   H# 00350012 pllset 5 ms
        !           296: H# 0F   H# FFFFFFFE 00 pllandorset 6 ms
        !           297: H# 10   H# FFFFFFFE 00 pllandorset 5 ms
        !           298: H# 10   H# FFFEFFFF 00 pllandorset 6 ms
        !           299: H# 0F   H# FFFFFFFD 00 pllandorset 5 ms
        !           300: H# 10   H# FFFFFFFD 00 pllandorset 5 ms
        !           301: H# 10   H# FFFDFFFF 00 pllandorset d# 10 ms
        !           302: H# 0C   H# FFFFFFFE 00 pllandorset 6 ms
        !           303: H# 0C   H# FFFFFFFD 00 pllandorset 5 ms
        !           304: h# 0D   h# FFFF8007      pllset 5 ms
        !           305: H# 08   H# FFFFFF3C 00   pllandorset
        !           306: H# 02   h# FFFFFFFF 03   pllandorset
        !           307: H# 04   H# 000381C0      pllset
        !           308: H# 05   H# 000381F7      pllset
        !           309: H# 06   H# 000381C0      pllset
        !           310: H# 07   H# 000381F7      pllset
        !           311: H# 02   H# FFFFFFFD 00   pllandorset 6 ms
        !           312: H# 02   h# FFFFFFFE 00   pllandorset 5 ms
        !           313: h# 08   H# FFFFFF3C 03   pllandorset 5 ms
        !           314: H# 0B   h# 78000800      pllset
        !           315: H# 0B   H# FFFFFFFF h# 4000 pllandorset
        !           316: h# 01   h# FFFFFFFF h# 0010 pllandorset
        !           317: 
        !           318: pllwriteoff
        !           319: ;
        !           320: 
        !           321: : DYNCKE
        !           322: pllwriteon
        !           323: H# 14   H# FFFF3FFF H# 30 pllandorset
        !           324: H# 14   H# FF1FFFFF H# 00 pllandorset
        !           325: H# 01   h# FFFFFFFF h# 80 pllandorset
        !           326: H# 0D   H# 00000007       pllset 5 ms
        !           327: h# 2D   H# 0000F8C0       pllset
        !           328: h# 08   H# FFFFFFFF h# C0 pllandorset 5 ms
        !           329: pllwriteoff
        !           330: ;
        !           331: 
        !           332: : MEM-MODE@
        !           333:     h# 158 ( MEM_SDRAM_MODE_REG ) reg-rl@ ;
        !           334: 
        !           335: : MEM-MODE!
        !           336:     h# 158 ( MEM_SDRAM_MODE_REG ) reg-rl! ;
        !           337: 
        !           338: : MEM-STATUS@
        !           339:     H# 150 reg-rl@ ;
        !           340: 
        !           341: : WAIT-MEM-CMPLT
        !           342:     h# 8000 0 do mem-status@ 3 and 3 = if leave then loop ;
        !           343: 
        !           344: : INITMEM
        !           345: 
        !           346:   mem-mode@ h# 6FFF0000 and h# 4000     or mem-mode!
        !           347:   mem-mode@ h# 6FFF0000 and h# 80004000 or mem-mode!
        !           348:   wait-mem-cmplt
        !           349:   mem-mode@ h# 6FFF0000 and h# 0132     or mem-mode!
        !           350:   mem-mode@ h# 6FFF0000 and h# 80000132 or mem-mode!
        !           351:   wait-mem-cmplt
        !           352:   mem-mode@ h# 6FFF0000 and h# 0032     or mem-mode!
        !           353:   mem-mode@ h# 6FFF0000 and h# 80000032 or mem-mode!
        !           354:   wait-mem-cmplt
        !           355:   mem-mode@ h# 6FFF0000 and h# 10000032 or mem-mode!
        !           356: ;
        !           357: 
        !           358: 
        !           359: 
        !           360: : CLR-REG ( reg -- )
        !           361:   0 swap  reg-rl!
        !           362: 
        !           363: ;
        !           364: : SET-PALETTE  ( -- )
        !           365:   h# 0 h# b0 pc!                \ Reset PALETTE_INDEX
        !           366: 
        !           367:   d# 16 0 do
        !           368:     H# 000000 h# B4 reg-rl!     \ Write the PALETTE_DATA ( Auto increments)
        !           369:     H# aa0000 H# B4 reg-rl!
        !           370:     H# 00aa00 H# B4 reg-rl!
        !           371:     H# aa5500 H# B4 reg-rl!
        !           372:     H# 0000aa H# B4 reg-rl!
        !           373:     H# aa00aa H# B4 reg-rl!
        !           374:     H# 00aaaa H# B4 reg-rl!
        !           375:     H# aaaaaa H# B4 reg-rl!
        !           376:     H# 555555 H# B4 reg-rl!
        !           377:     H# ff5555 H# B4 reg-rl!
        !           378:     H# 55ff55 H# B4 reg-rl!
        !           379:     H# ffff55 H# B4 reg-rl!
        !           380:     H# 5555ff H# B4 reg-rl!
        !           381:     H# ff55ff H# B4 reg-rl!
        !           382:     H# 55ffff H# B4 reg-rl!
        !           383:     H# ffffff H# B4 reg-rl!
        !           384:   loop
        !           385: 
        !           386:  ;
        !           387: 
        !           388: 0 VALUE _addr
        !           389: 0 VALUE _color
        !           390: 
        !           391: : DO-COLOR  ( color-addr addr color -- )
        !           392:    to _color to _addr 0 to _color
        !           393:    3 0  do  _addr i + c@ 2 i - 8 * << _color + to _color  loop
        !           394:    _color h# B4 reg-rl!
        !           395: ;
        !           396: 
        !           397: : SET-COLORS ( addr index #indicies -- )
        !           398: 
        !           399:   swap h# B0 pc!
        !           400:   ( addr #indicies ) 0 ?do dup ( index ) i 3 * + DO-COLOR loop
        !           401:   ( addr ) drop ;
        !           402: 
        !           403: : init-card
        !           404: 
        !           405:   h# FF h# 58 3 + pc!   \
        !           406:   h# 59 pc@ h# FE and  h# 59 pc!   \
        !           407:   h# 50 reg-rl@ H# FEFFFFFF AND h# 02000200 or  \ Clear 24 set 25 and 8-11 to 2
        !           408:   h# 50 reg-rl!
        !           409:   h# 4F0063  h# 200 reg-rl!
        !           410:   H# 8C02A2  h# 204 reg-rl!
        !           411:   H# 1Df020C h# 208 reg-rl!
        !           412:   h# 8201EA  h# 20C reg-rl!
        !           413:   h# 50 reg-rl@ H# F8FFFFFF AND h# 03000000 or h# 50 reg-rl!
        !           414:   h# 50 h# 22C reg-rl!
        !           415:   set-palette
        !           416: 
        !           417:   \ at this point for some reason mem-addr does not point
        !           418:   \ to the right address and therefore the following command
        !           419:   \ which should probably clean the frame buffer just
        !           420:   \ overwrites everything starting from 0 including the
        !           421:   \ exception vectors
        !           422: 
        !           423:   \ mem-addr h# F0000 0 fill
        !           424:  ;
        !           425: 
        !           426: : DO-INIT
        !           427:   early-map
        !           428:   enable-card
        !           429:   init1
        !           430:   pllinit
        !           431:   init2
        !           432:   initmem
        !           433:   init-card
        !           434:   h# 8020 h# 54 reg-rl!
        !           435:   early-unmap
        !           436: ;
        !           437: 
        !           438: d# 640 constant /scanline
        !           439: d# 480 constant #scanlines
        !           440: /scanline #scanlines * constant /fb
        !           441: 
        !           442: " okay" encode-string " status" property
        !           443: 
        !           444: : display-install ( -- )
        !           445:   is_installed not if
        !           446:     map-csr-base
        !           447:     enable-card
        !           448:     mem-addr to frame-buffer-adr
        !           449:     h# 8020 h# 54 reg-rl!
        !           450:     default-font set-font
        !           451:     /scanline #scanlines  d# 100 d# 40 fb8-install
        !           452:     true to is_installed
        !           453:   then
        !           454: ;
        !           455: 
        !           456: : display-remove  ( -- )  ;
        !           457: 
        !           458: do-init                                                 \ Set up the card
        !           459: \ clear at least 640x480
        !           460: 10 config-l@ 8 - F0000 0 rfill
        !           461: init1_array init1_length encode-array " ibm,init1" property
        !           462: init2_array init2_length encode-array " ibm,init2" property
        !           463: pllinit_array pllinit_length   encode-array " ibm,pllinit" property
        !           464: meminit_array meminit_length   encode-array " ibm,meminit" property
        !           465: 0 0 encode-bytes " iso6429-1983-colors" property
        !           466: " display" encode-string " device_type" property
        !           467: /scanline  encode-int " width" property
        !           468:  #scanlines encode-int " height" property
        !           469: 8 encode-int " depth" property
        !           470: /scanline  encode-int " linebytes" property
        !           471: 
        !           472: ' display-install is-install
        !           473: ' display-remove is-remove
        !           474: 
        !           475: : fill-rectangle ( index x y w h -- )
        !           476:   2swap -rot /scanline * + frame-buffer-adr + ( index w h fbadr )
        !           477:   swap 0 ?do ( index w fbadr )
        !           478:     3dup swap rot fill ( index w fbadr )
        !           479:     /scanline + ( index w fbadr' )
        !           480:   loop
        !           481:   3drop
        !           482: ;
        !           483: : draw-rectangle ( addr x y w h -- )
        !           484:  2swap -rot /scanline * + frame-buffer-adr + ( addr w h fbadr )
        !           485:  swap 0 ?do ( addr w fbadr )
        !           486:    3dup swap move ( addr w fbadr )
        !           487:     >r tuck + swap r> ( addr' w fbadr )
        !           488:     /scanline + ( addr' w fbadr' )
        !           489:   loop
        !           490:   3drop
        !           491:  ;
        !           492:  : read-rectangle ( addr x y w h -- )
        !           493:   2swap -rot /scanline * + frame-buffer-adr + ( addr w h fbadr )
        !           494:   swap 0 ?do ( addr w fbadr )
        !           495:     3dup -rot move ( addr w fbadr )
        !           496:     >r tuck + swap r> ( addr' w fbadr )
        !           497:     /scanline + ( addr' w fbadr' )
        !           498:   loop
        !           499:   3drop
        !           500:  ;
        !           501: 
        !           502: : dimensions  ( -- width height )  /scanline #scanlines  ;
        !           503: 
        !           504: ."  ( rn50 )" cr

unix.superglobalmegacorp.com

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