DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: ┃ O T ┃
Length: 17227 (0x434b) Types: TextFile Names: »OS2000_IO_ASM«
└─⟦afbc8121e⟧ Bits:30000532 8mm tape, Rational 1000, MC68020_OS2000 7_2_2 └─ ⟦77aa8350c⟧ »DATA« └─⟦f794ecd1d⟧ └─⟦24d1ddd49⟧ └─⟦this⟧
; 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 "OS2000_IO" ; ; Implements the body of the Ada package Os2000_Io which ; provides the services needed for Os_Dependent_Io. ; .include "^standard_assembler_include_file" .include "^common.runtime_definitions" .include "^common.os2000_definitions" comp_unit runtime_compunit .sect predefined_code,relocatable,code,readonly,alignment:=2 ; .ext.l __Process_Descriptor_Pointer .gbl.l __OS9_I$Create .gbl.l __OS9_I$Open .gbl.l __OS9_I$Close .gbl.l __OS9_I$Delete .gbl.l __OS9_I$Read .gbl.l __OS9_I$Readln .gbl.l __OS9_I$Write .gbl.l __OS9_I$Seek .gbl.l __OS9_I$GetStt_Pos .gbl.l __OS9_I$GetStt_EOF .gbl.l __OS9_I$GetStt_Size .gbl.l __OS9_I$GetStt_Opt .gbl.l __OS9_I$GetStt_DevNm .gbl.l __OS9_I$SetStt_Opt .gbl.l __OS9_I$SetStt_Size .gbl.l __Get_Unique_Task_Key .gbl.l _ART_F$Time .gbl.l __Get_Time_Of_Day ; ; procedure Create (Name : System.Address; ; Mode : Natural; ; Attributes : Natural; ; New_Path : out Path_Number; ; Result : out Stratus); ; subprogram sp_rt,sp.internal,linkage.simple __os9_i$create: .local $name'offset equ 4 $mode'offset equ 8 $attrs'offset equ 12 $new_path'offset equ 16 $result'offset equ 20 movea.l ($name'offset,sp),a0 ; pathname pointer move.l ($mode'offset,sp),d0 ; file access mode move.l ($attrs'offset,sp),d1 ; file attributes clr.l ($new_path'offset,sp) clr.l ($result'offset,sp) trap #os9_call .dc.w i$create ; make create call bcc.b $exit $error: move.w d1,($result'offset+2,sp) moveq.l #0,d0 $exit: move.w d0,($new_path'offset+2,sp) ; store path number rts ; ; procedure Open (Name : System.Address; ; Mode : Natural; ; New_Path : out Path_Number; ; Result : out Stratus); ; subprogram sp_rt,sp.internal,linkage.simple __OS9_I$Open: .local $name'offset equ 4 $mode'offset equ 8 $new_path'offset equ 12 $result'offset equ 16 movea.l ($name'offset,sp),a0 ; pathname pointer move.l ($mode'offset,sp),d0 ; file access mode clr.l ($new_path'offset,SP) ; New_Path := null clr.l ($result'offset,sp) ; result := successful trap #os9_call .dc.w i$open ; make open call bcc.b $exit $error: move.w d1,($result'offset+2,sp) ; store statue moveq.l #0,d0 ; new_path := 0 $exit: move.w d0,($new_path'offset+2,sp) ; store path number rts ; ; procedure Close (Path : Path_Number; Result : out Stratus); ; subprogram sp_rt,sp.internal,linkage.simple __os9_i$close: .local $path'offset equ 4 $result'offset equ 8 move.l ($path'offset,sp),d0 ; path number clr.l ($result'offset,sp) ; result := successful trap #os9_call .dc.w i$close ; make close call bcc.b $exit $error: move.w d1,($result'offset+2,sp) $exit: rts ; ; procedure Delete (Name : System.Address; Result : out Stratus); ; subprogram sp_rt,sp.internal,linkage.simple __os9_i$delete: .local $name'offset equ 4 $result'offset equ 8 clr.l ($result'offset,sp) ; result := successful moveq.l #3,d0 ; use data directory movea.l ($name'offset,sp),a0 ; pathname pointer trap #os9_call .dc.w i$delete bcc.b $exit $error: move.w d1,($result'offset+2,sp) $exit: rts ; ; procedure Read (Path : Path_Number; ; Count : Natural; ; Buffer : System.Address; ; Bytes_Read : out Natural; ; Result : out Stratus); ; subprogram sp_rt,sp.internal,linkage.simple __os9_i$read: .local $path'offset equ 4 $count'offset equ 8 $buffer'offset equ 12 $bytes_read'offset equ 16 $result'offset equ 20 move.l ($path'offset,sp),d0 ; path number move.l ($count'offset,sp),d1 ; max byte count movea.l ($buffer'offset,sp),a0 ; buffer address clr.l ($result'offset,sp) ; result := successful trap #os9_call .dc.w i$read ; make read call bcc.b $exit move.w d1,($result'offset+2,sp) moveq.l #0,d1 $exit: move.l d1,($bytes_read'offset,sp) ; store bytes_read rts ; ; procedure Readln (Path : Path_Number; ; Count : Natural; ; Buffer : System.Address; ; Bytes_Read : out Natural; ; Result : out Stratus); ; subprogram sp_rt,sp.internal,linkage.simple __os9_i$readln: .local $path'offset equ 4 $count'offset equ 8 $buffer'offset equ 12 $bytes_read'offset equ 16 $result'offset equ 20 move.l ($path'offset,sp),d0 ; path number move.l ($count'offset,sp),d1 ; max byte count movea.l ($buffer'offset,sp),a0 ; buffer address clr.l ($result'offset,sp) ; result := successful trap #os9_call .dc.w i$readln bcc.b $exit $error: move.w d1,($result'offset+2,sp) moveq.l #0,d1 $exit: move.l d1,($bytes_read'offset,sp) ; store bytes_read rts ; ; procedure Write (Path : Path_Number; ; Count : Natural; ; Buffer : System.Address; ; Bytes_Written : out Natural; ; Result : out Stratus); ; subprogram sp_rt,sp.internal,linkage.simple __OS9_I$Write: .local $path'offset equ 4 $count'offset equ 8 $buffer'offset equ 12 $bytes_written'offset equ 16 $result'offset equ 20 move.l ($path'offset,sp),d0 ; path number move.l ($count'offset,sp),d1 ; byte count movea.l ($buffer'offset,sp),a0 ; buffer address clr.l ($result'offset,sp) ; result := successful trap #os9_call .dc.w i$write bcc.b $exit $error: move.w d1,($result'offset+2,sp) ; result := error code moveq.l #0,d1 $exit: move.l d1,($bytes_written'offset,sp) ; store Bytes_Written rts ; ; procedure Seek (Path : Path_Number; ; Position : Natural; ; Result : out Stratus); ; subprogram sp_rt,sp.internal,linkage.simple __os9_i$seek: .local $path'offset equ 4 $position'offset equ 8 $result'offset equ 12 move.l ($path'offset,sp),d0 ; path number move.l ($position'offset,sp),d1 ; new position clr.l ($result'offset,sp) ; result := successful trap #os9_call .dc.w i$seek ; make seek call bcc.b $exit $error: move.w d1,($result'offset+2,sp) $exit: rts ; ; procedure Current_Position (Path : Path_Number; ; Position : out File_Position; ; Result : out Stratus); ; subprogram sp_rt,sp.internal,linkage.simple __os9_i$getstt_pos: .local $path'offset equ 4+4 $position'offset equ 8+4 $result'offset equ 12+4 move.l d2,-(sp) statement 0,0,1 move.l ($path'offset,sp),d0 ; path number clr.l ($result'offset,sp) ; result := successful move.l #ss_pos,d1 ; Pos function code trap #os9_call .dc.w i$getstt bcc.b $exit $error: move.w d1,($result'offset+2,sp) ; result := error code moveq.l #0,d2 $exit: move.l d2,($position'offset,sp) ; Position := Current_Position move.l (sp)+,d2 statement 0,0,0 rts ; ; procedure End_Of_File (Path : Path_Number; ; At_End : out Boolean; ; Result : out Stratus); ; subprogram sp_rt,sp.internal,linkage.simple __os9_i$getstt_eof: .local $path'offset equ 4 $at_end'offset equ 8 $result'offset equ 12 move.l ($path'offset,sp),d0 ; path number clr.l ($result'offset,sp) ; result := successful move.l #ss_eof,d1 ; EOF function code trap #OS9_Call .dc.w I$GetStt ; make status call bcs.b $error clr.l ($at_end'offset,sp) ; not End_Of_File rts $error: moveq.l #1,d0 ; d0 := true move.l d0,($at_end'offset,sp) ; set End_Of_File move.w d1,($result'offset+2,sp) ; result := error code rts ; ; procedure File_Size (Path : Path_Number; ; Size : out Natural; ; Result : out Stratus); ; subprogram sp_rt,sp.internal,linkage.simple __os9_i$getstt_size: .local $path'offset equ 4+4 $size'offset equ 8+4 $result'offset equ 12+4 move.l d2,-(sp) statement 0,0,1 move.l ($path'offset,sp),d0 ; path number clr.l ($result'offset,sp) ; result := successful move.l #SS_Size,d1 ; Size function code trap #OS9_Call .dc.w I$GetStt ; make status call bcc.b $exit $error: move.w d1,($result'offset+2,sp) ; result := error code moveq.l #0,d2 $exit: move.l d2,($size'offset,sp) ; size := current file size move.l (sp)+,d2 statement 0,0,0 rts ; ; ; procedure Set_File_Size (Path : Path_Number; ; To_Size : Natural; ; Result : out Stratus); ; subprogram sp_rt,sp.internal,linkage.simple __os9_i$setstt_size: .local $path'offset equ 4+4 $to_size'offset equ 8+4 $result'offset equ 12+4 move.l d2,-(sp) statement 0,0,1 move.l ($path'offset,sp),d0 ; path number clr.l ($result'offset,sp) ; result := successful move.l #ss_size,d1 ; Size function code move.l ($to_size'offset,sp),d2 ; get new size trap #os9_call .dc.w i$setstt ; make status call bcc.b $exit $error: move.w d1,($result'offset+2,sp) ; result := error code $exit: move.l (sp)+,d2 statement 0,0,0 rts ; ; procedure Get_Options (Path : Path_Number; ; Option_Buffer : System.Address; ; Result : out Stratus); ; subprogram sp_rt,sp.internal,linkage.simple __os9_i$setstt_opt: .local $path'offset equ 4 $option'offset equ 8 $result'offset equ 12 move.l ($path'offset,sp),d0 ; path number movea.l ($option'offset,sp),a0 ; buffer address clr.l ($result'offset,sp) move.l #ss_opt,d1 ; Read_Option function code trap #os9_call .dc.w i$setstt bcc.b $exit move.w d1,($result'offset+2,sp) $exit: rts ; ; procedure Set_Options (Path : Path_Number; ; Option_Buffer : System.Address; ; Result : out Stratus); ; subprogram sp_rt,sp.internal,linkage.simple __OS9_I$GetStt_Opt: .local $path'offset equ 4 $option'offset equ 8 $result'offset equ 12 move.l ($path'offset,sp),d0 ; path number movea.l ($option'offset,sp),a0 ; buffer address clr.l ($result'offset,sp) ; status := successful move.l #ss_opt,d1 ; Read_Option function code trap #os9_call .dc.w i$getstt bcc.b $exit move.w d1,($result'offset+2,sp) ; result := error code $exit: rts ; ; procedure Get_Device_Name (Path : Path_Number; ; Name_Buffer : System.Address; ; Result : out Status); ; subprogram sp_rt,sp.internal,linkage.simple __os9_i$getstt_devnm: .local $path'offset equ 4 $name'offset equ 8 $result'offset equ 12 move.l ($path'offset,sp),d0 ; path number movea.l ($name'offset,sp),a0 ; buffer address clr.l ($result'offset,sp) ; result := successful move.l #ss_devnm,d1 ; Device Name function code trap #os9_call .dc.w i$getstt bcc.b $done move.w d1,($result'offset+2,sp) ; return status $done: rts ; ; procedure Get_Time (Day : out Integer; ; Second : out Integer; ; Tick : out Integer; ; Status : out Integer); ; subprogram sp_rt,sp.internal,linkage.simple _art_f$time: __get_time_of_day: .local $day'offset equ 12 $sec'offset equ 16 $tick'offset equ 20 $status'offset equ 24 Julian$With$Ticks equ 3 movem.l d2-d3,-(sp) ; save the nonvolatile statement 0,0,2 move.l #julian$with$ticks,d0 ; set the format code trap #os9_call ; trap to get time .dc.w f$time bcc.b $store $error: move.l d1,($status'offset,sp) bra.s $return $store: move.l d1,($day'offset,sp) ; store Julian day move.l d0,($sec'offset,sp) ; store seconds since midnight swap.w d3 ; get current tick into D0 high word clr.w d3 ; clear D0 low word swap.w d3 ; restore current tick into D0 low word move.l d3,($tick'offset,sp) ; store current tick clr.l ($status'offset,sp) ; successful status $return:movem.l (sp)+,d2-d3 statement 0,0,0 rts ; ; procedure Get_Unique_Task_Key (Value1 : out Integer; ; Value2 : out Integer; ; Value3 : out Integer); ; subprogram sp_rt,sp.internal,linkage.simple __get_unique_task_key: .local $v1'offset equ 4 $v2'offset equ 8 $v3'offset equ 12 movea.l (__process_descriptor_pointer,a5),a0 movea.l (a0),a0 move.l (art$tsk_id,a0),($v1'offset,sp) move.l (p$datbeg,a0),($v2'offset,sp) move.l (p$timbeg,a0),($v3'offset,sp) rts end_subprograms .end