Annotation of qemu/roms/SLOF/board-js2x/slof/citrine-disk.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: 
        !            14: ( max-#blocks rsrc id -- )
        !            15: 
        !            16: new-device   
        !            17: 
        !            18: lwsplit swap wbsplit rot set-unit
        !            19: 
        !            20: s" disk" device-name  s" block" device-type
        !            21: 
        !            22: CONSTANT resource-id
        !            23: CONSTANT max-#blocks
        !            24: get-parent CONSTANT ppack
        !            25: 
        !            26: 
        !            27: : our-disk-read ( lba count addr -- )
        !            28:   >r >r >r resource-id r> r> r> s" do-read" ppack $call-static ;
        !            29: 
        !            30: 0 pci-alias-disk
        !            31: 
        !            32: \ Requiered interface for deblocker
        !            33: 
        !            34: 200   CONSTANT block-size
        !            35: 40000 CONSTANT max-transfer 
        !            36: 
        !            37: : read-blocks ( addr block# #blocks -- #read )
        !            38: \   my-unit s" dev-read-blocks" $call-parent
        !            39:    \ check if the read is within max-#blocks
        !            40:    2dup + max-#blocks 1 + > IF 
        !            41:      \ 2drop drop 0 \ return 0 
        !            42:      \ returning 0 would be correct (maybe?) but it confuses the deblocker...
        !            43:      \ so i erase whatever would have been read and return the "expected" #read
        !            44:      dup >r 
        !            45:      swap drop \ drop block# (not needed)
        !            46:      block-size * erase \ erase at addr #blocks * block-size
        !            47:      r>   \ return #read 
        !            48:    ELSE
        !            49:      dup >r rot our-disk-read r>
        !            50:    THEN
        !            51: ;    
        !            52: 
        !            53: INSTANCE VARIABLE deblocker
        !            54: 
        !            55: : open ( -- okay? )
        !            56:    0 0 s" deblocker" $open-package dup deblocker ! dup IF 
        !            57:       s" disk-label" find-package IF
        !            58:         my-args rot interpose
        !            59:       THEN
        !            60:    THEN 0<> ;
        !            61: 
        !            62: : close ( -- )
        !            63:    deblocker @ close-package ;
        !            64: 
        !            65: : seek ( pos.lo pos.hi -- status )
        !            66:    2dup lxjoin max-#blocks 1 + block-size *  > IF 
        !            67:      \ illegal seek, return -1
        !            68:      2drop -1
        !            69:    ELSE
        !            70:      s" seek" deblocker @ $call-method
        !            71:    THEN
        !            72: ;
        !            73: 
        !            74: : read ( addr len -- actual )
        !            75:    s" read" deblocker @ $call-method ;
        !            76: 
        !            77: 
        !            78: finish-device
        !            79: 

unix.superglobalmegacorp.com

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