DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400 Tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400 Tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ M T

⟦6ef382c91⟧ TextFile

    Length: 2978 (0xba2)
    Types: TextFile
    Names: »MOVE_AND_FILL_ASM«

Derivation

└─⟦afbc8121e⟧ Bits:30000532 8mm tape, Rational 1000, MC68020_OS2000 7_2_2
    └─ ⟦77aa8350c⟧ »DATA« 
        └─⟦f794ecd1d⟧ 
            └─⟦24d1ddd49⟧ 
                └─⟦this⟧ 

TextFile

;    The use of this system is subject to the software license terms and
;    conditions agreed upon between Rational and the Customer.
;
;                Copyright 1988 by Rational.
;
;                          RESTRICTED RIGHTS LEGEND
;
;    Use, duplication, or disclosure by the Government is subject to
;    restrictions as set forth in subdivision (b)(3)(ii) of the Rights in
;    Technical Data and Computer Software clause at 52.227-7013.
;
;
;                Rational
;                3320 Scott Boulevard
;                Santa Clara, California 95054-3197
;
;   PROPRIETARY AND CONFIDENTIAL INFORMATION OF RATIONAL;
;   USE OR COPYING WITHOUT EXPRESS WRITTEN AUTHORIZATION
;   IS STRICTLY PROHIBITED.  THIS MATERIAL IS PROTECTED AS
;   AN UNPUBLISHED WORK UNDER THE U.S. COPYRIGHT ACT OF
;   1976.  CREATED 1988.  ALL RIGHTS RESERVED.
;
;

        .module         "MOVE_AND_FILL"
        .include        "^standard_assembler_include_file"
        .include        "^common.runtime_definitions"
        comp_unit      runtime_compunit
        .sect           predefined_code,code,relocatable,alignment:=2

        .gbl.a  __move_bytes
        .gbl.a  __fill_bytes
;
;
;       procedure Move_Bytes (From   : Address;
;                             To     : Address;
;                             Length : Natural);
;

        subprogram sp_rt,sp.internal,linkage.simple
__move_bytes:
        .local

        $from'offset     equ 4
        $to'offset       equ 8
        $length'offset   equ 12

        movea.l ($from'offset,sp),a0    ; a0 := from'address
        movea.l ($to'offset,sp),a1      ; a1 := to'address
        move.l  ($length'offset,sp),d0  ; d0 := length
        subq.l  #1,d0                   ; adjust for DBcc

        blt.s   $done                   ; check for 0 length

        move.l  d0,d1                   ; d1 := count
        swap.w  d1                      ; d1 := high bits of count

$loop:  move.b  (a0)+,(a1)+             ; move byte from - to
        dbf.w   d0,$loop                ; do iteration
        dbf.w   d1,$loop

$done:  rtd     #12                     ; return

;
;
;       procedure Fill_Bytes (Target : Address;
;                             Length : Natural;
;                             Value  : Byte);
;

        subprogram sp_rt,sp.internal,linkage.simple
__fill_bytes:
        .local

        $target'offset   equ 4
        $length'offset   equ 8
        $value'offset    equ 12


        movea.l ($target'offset,sp),a0  ; a0 := target'address
        move.l  ($value'offset,sp),d1   ; d1 := value
        move.l  ($length'offset,sp),d0  ; d0 := length
        subq.l  #1,d0                   ; adjust for DBcc

        blt.s   $done                   ; check for 0 length

$fill:  move.b  d1,(a0)+                ; move target (i) := value
        dbf.w   d0,$fill                ; do iteration
        clr.w   d0
        subq.l  #1,d0
        bge.s   $fill

$done:  rtd     #12

        end_subprograms

        .end