DataMuseum.dk

Presents historical artifacts from the history of:

RC3500

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

See our Wiki for more about RC3500

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦c2ac61f68⟧ TextFileVerbose

    Length: 13824 (0x3600)
    Types: TextFileVerbose
    Names: »bblenv«

Derivation

└─⟦2c55ea56f⟧ Bits:30001844 SW-save af projekt 1000, Alarm-system
    └─⟦6b41451d2⟧ 
        └─⟦this⟧ »bblenv« 

TextFileVerbose

standard_environment;
(* version : 2           *)
(* revision 5             *)
(* date : 81.06.15  , bbl *)


const

alfalength = 12;
maxint = 32767;
minint = -32768;
mpexcfirst = 1;
rsexcfirst = mpexcfirst + 30;
cpexcfirst = rsexcfirst + 5;


maxpriority = 3;
minpriority = -3;
stdpriority = minpriority;



type

(* basic types *)
bit = 0..1;
byte = 0..255;
memno_type = 0..31;

activation = (a_interrupt, a_semaphore, a_delay);


base_type = packed record
lockbit : bit;
nill : bit;
moduletype : byte;
mem_no : memno_type;
nullbit : bit
end;
 
addr = record
base : base_type;
disp : integer
end;


boolean = (false,true);
 
char =(
(*           0    1    2    3    4    5    6    7    8    9  *)
 
(*   0 *)   nul, soh, stx, etx, eot, enq, ack, bel,  bs,  ht,
(*  10 *)    nl,  vt,  ff,  cr,  so,  si, dle, dc1, dc2, dc3,
(*  20 *)   dc4, nak, syn, etb, can,  em, sub, esc,  fs,  gs,
(*  30 *)    rs,  us,  sp,   ?,   ?,   ?,   ?,   ?,   ?,   ?,
(*  40 *)     ?,   ?,   ?,   ?,   ?,   ?,   ?,   ?,   ?,   ?,
(*  50 *)     ?,   ?,   ?,   ?,   ?,   ?,   ?,   ?,   ?,   ?,
(*  60 *)     ?,   ?,   ?,   ?,   ?,   ?,   ?,   ?,   ?,   ?,
(*  70 *)     ?,   ?,   ?,   ?,   ?,   ?,   ?,   ?,   ?,   ?,
(*  80 *)     ?,   ?,   ?,   ?,   ?,   ?,   ?,   ?,   ?,   ?,
(*  90 *)     ?,   ?,   ?,   ?,   ?,   ?,   ?,   ?,   ?,   ?,
(* 100 *)     ?,   ?,   ?,   ?,   ?,   ?,   ?,   ?,   ?,   ?,
(* 110 *)     ?,   ?,   ?,   ?,   ?,   ?,   ?,   ?,   ?,   ?,
(* 120 *)     ?,   ?,   ?,   ?,   ?,   ?,   ?, del );
 
 
alfa = array ( 1..alfalength ) of char;

semaphore = record
 chain  : addr; (* message_headers or incarnation_descriptors *)
 semchain  : ^ semaphore   (* used by exit *)
end;


message_header = record
 chain  : ^ message_header;
messagekind :  integer;
size :  integer;
 start  : addr; (* start of message data part *)
 owner  : ^ semaphore;
 answer  : ^ semaphore;
 msg_chain  : ^ message_header;
 stackchain  : ^ message_header;
u1, u2, u3, u4 : byte
end;


ext_message_header = record
 chain  : addr;
messagekind :  integer;
size :  integer;
 start  : addr; (* start of message data part *)
 owner  : addr;
 answer  : addr;
 msg_chain  : addr;
 stackchain  : addr;
u1, u2, u3, u4 : byte
end;

reference = ^ message_header;
(* nb nb nb nb : all variables of type reference are allocated *)
(*                memory space as two pointer variables        *)

shadow = record
 r  : reference;
 next  : ^ shadow  (* used by exit *)
end;


process_inf = record
entry_point : addr;
exception_point : addr;
exit_point : addr;
default_appetite : integer;
last_param_offset : integer
end;


process_descriptor = record (* the "type" of a process name *)
incarnationcount : integer;
param_descr_ref : addr; (* address of formal parameters *)
link_state : integer; (* 0: unlinked  1: internal linked  2: external linked *)
process_inf_ref : addr; (* pointer to descriptorsegment if external linked
                           pointer to process_inf       if internal linked *)
name : alfa
end;

processrec = record  (* used by create *)
processref : ^ process_descriptor;
firstparam : addr;
size_of_params : integer
end;

semtype = (deallocatorsem,linkersem,stopsem,allocsem,exceptionsem,opsem,?,?,
             ?,?,?,?,
            monitorsem,?,timersem,iotimersem,?,?,activebase,monitorstack,
             timerstack,allocatorstack,linkerstack,adamstack);

adamsemtype = (allocatorsem,adamsem,operatorsem,?,?,?,?,?,
            ?,?,?,?,?,?,?,?);

secret_vector = array(semtype) of ^ semaphore;

adamvector = array(adamsemtype) of  ^ semaphore;

system_vector = ! adamvector;

incarnation_descriptor = record
(* the incarnation descriptor appearing as the first part of global frame *)
 chain  : addr;
 pu  : byte;
 level  : byte;
 incstate  : integer;
 msg_waited  : addr;
 activequeue  : addr;
 chainhead  : addr;
 exception_mask  : integer;
 exception_point  : addr;
 exic  : addr;
 dumplm  : integer;
 dumpps  : integer;
 dumplu  : integer;
 dumpsf  : integer;
 entry_point  : addr;
timer : integer;
 maxstack  : integer;
 processref  : ^ process_descriptor;
 semchain  : ^ semaphore;
 refchain  : ^ reference;
 shadowchain  : ^ shadow;
 msg_chain  : ^ message_header;
 exit_point  : addr;
 exit_semaphore  : semaphore;
 exitref  : reference;
 secret_pointer  : ^ secret_vector;
 plinetable  : addr;
incname : alfa;
end;


ext_incarnation_descriptor = record
(* the incarnation descriptor appearing as the first part of global frame *)
 chain  : addr;
 pu  : byte;
 level  : byte;
 incstate  : integer;
 msg_waited  : addr;
 activequeue  : addr;
 chainhead  : addr;
 exception_mask  : integer;
 exception_point  : addr;
 exic  : addr;
 dumplm  : integer;
 dumpps  : integer;
 dumplu  : integer;
 dumpsf  : integer;
 entry_point  : addr;
timer : integer;
 maxstack  : integer;
 processref  : addr;
 semchain  : addr;
 refchain  : addr;
 shadowchain  : addr;
 msg_chain  : addr;
 exit_point  : addr;
 exit_semaphore  : addr;
delaychain : addr;
 exitref  : addr;
statistic : addr;
 secret_pointer  : addr;
 plinetable  : addr;
incname : alfa;
end;
 

coded_date = packed record
year_after_1900 : 0 .. 127;
month           : 0 ..  15;
day             : 0 ..  31;
end;

coded_time = packed record
compiler_version : 0..31;   (* 5 bits *)
hour             : 0..31;   (* 5 bits *)
minute           : 0..63;   (* 6 bits *)
end;

coded_secs = packed record
sec : 0..63;
msec: 0..1023;
end;
delaytype = record
prev_date : coded_date;
prev_time : coded_time;
prev_secs : coded_secs;
inc : packed record
days  : 0..63;
hours : 0..31;
mins  : 0..63;
secs  : 0..63;
msecs : 0..1023;
end;
end;

var
(* now a variable of type incarnation_descriptor must be declared
as the first variable *)

own : incarnation_descriptor;


(* now the standard routines are defined as externals *)

function abs(x : niltype) : niltype; external;

procedure alloc(var r : reference; var p : pool 100 ;
var sem : semaphore); external;

procedure break(var sh : shadow; excode : integer); external;

function chr(int : 0..127) : char; external;

function create(incarnation_name : alfa; proces : processrec; var sh : shadow;
storage : integer) : integer; external;

procedure definetimer(onoff:boolean); external;

function empty(var r : reference) : boolean; external;

function eoi : boolean; external;

procedure exception(excode : integer);
external;

procedure inbyteblock
(var next : integer;
first,last : integer;
var msg : reference;
var ch_msg : reference);
external;

procedure inwordblock
(var next : integer;
first,last : integer;
var msg : reference;
var ch_msg : reference);
external;


function link(external_name : alfa;
var proces : process_descriptor) : integer; external;

function locked(var sem : semaphore) : boolean; external;

function nil(var r : ^ niltype) : boolean; external;

function open(var sem : semaphore) : boolean; external;

function openpool(var p : pool 1) : boolean;
external;


function ord(x : niltype) : integer; external;

procedure outbyteblock
(var next : integer;
first,last : integer;
var msg : reference;
var ch_msg : reference);
external;

procedure outwordblock
(var next : integer;
first,last : integer;
var msg : reference;
var ch_msg : reference);
external;

function ownertest(var p : pool 1; var r : reference) : boolean;
external;


function passive(var sem : semaphore) : boolean; external;

procedure pop(var r1, r2 : reference); external;

function pred(x : niltype) : niltype; external;

procedure push(var r1, r2 : reference); external;

function ref(var sem : semaphore) : ^ semaphore; external;

procedure release(var r : reference); external;

procedure remove(var sh : shadow); external;

function reservech(var ch_msg : reference; level, mask : integer): integer; external;

procedure return(var r : reference); external;

procedure sendtimer(var r : reference);
external;

procedure sensesem(var r : reference; var sem : semaphore);
external;

procedure setpriority(priority : integer);
external;

procedure signal(var r : reference; var sem : semaphore); external;

procedure start(var sh : shadow; priority : integer); external;

procedure stop(var sh : shadow); external;

function succ(x : niltype) : niltype; external;
procedure trace = exception( code : integer ) ; external;

function unlink(var proces : process_descriptor) : integer; external;

procedure wait(var r : reference; var sem : semaphore); external;

procedure waiti; external;

procedure waits = wait(var r : reference; var sem : semaphore); external;

procedure waitd(delay : integer); external;
procedure waitt; external;

function waitid(delay : integer) : activation; external;
function waitit: activation; external;

function waitis( var r: reference; var s : semaphore) : activation; 
external;

function waitsd ( var r : reference; var s : semaphore; delay : integer ) :
activation; external;
function waitst (var r: reference; var s: semaphore): activation; external;

function waitisd( var r : reference; var s : semaphore; delay : integer ) :
activation; external;
function waitist (var r: reference; var s: semaphore): activation; external;

function ctrwaitid ( c : integer; delay : integer ) : activation; external;
function ctrwaitit (c: integer): activation; external;

function ctrwaitis ( c: integer; var r:reference; var s : semaphore) :
activation ; external;

function ctrwaitisd ( c: integer; var r : reference; var s : semaphore; delay : integer) :
activation; external;
function ctrwaitist (c: integer; var r: reference; var s: semaphore): activation; external;

procedure ___exit___rc;
external;

procedure _initpool_rc(var s : semaphore; number , size : integer);
external;

(* now follows type definitions used in runtime processes and routines *)

const

fpabuffersize = 768; (* defines size of fpainputbuffer in boot *)
ptrbuffersize = 32; (* defines size of ptr inputbuffer in boot *)

break_appetite    = 14;
create_appetite   = 28;
initpool_appetite = 21;
link_appetite     = 13;
remove_appetite   = 16;
reservech_appetite= 13;
start_appetite    = 11;
stop_appetite     = 10;
unlink_appetite   = 14;



type
switch_type = packed record
kind : 0..15;
module: 0..15;
address : byte
end;

regbase = integer;
  
mem_map_type = packed array (0..15) of bit;

descriptor_segment = record
descriptor_length : integer;
no_of_pages : integer;
pagesize : integer;
last_page_length : integer;
kind : integer;
name : alfa;
entry_point : addr;
exception_point : addr;
exit_point : addr;
default_appetite : integer;
last_param_offset : integer;
no_of_params : integer
end;
 
range_descriptor = record
lower_limit : integer;
upper_limit : integer
end;

dope_vector = record
r : range_descriptor;
elem_size : integer
end;


pat32 = set of 0..31;

pat16 = set of 0..15;

corearray = array(1..fpabuffersize) of byte;

(* now the routines used by the runtime processes are declared as externals *)

function addrptr(p : ^niltype) : addr;
external;

function addr_of(var a : addr) : addr;
external;

function addr_of_core(var a : corearray) : addr;
external;

function addr_of_proc(var pr : process_descriptor) : addr;
external;

procedure asgnaddrpref(var a : addr; p : ^ process_descriptor);
external;

procedure asgnaddrref(var a : addr; var r : reference);
external;

procedure asgnaddrsec(var a : addr; p : ^ secret_vector);
external;

procedure asgnrefaddr(var r : reference; a : addr);
external;

procedure asgnsemp(var p : ^ semaphore; q : ^ semaphore);
external;

procedure asgnsempaddr(var p : ^ semaphore; var address : addr);
external;


procedure assign2(var map : mem_map_type; mask : integer); external;

procedure balloc;
external;

procedure bcheck;
external;

procedure bownertest;
external;

procedure excptcall(excode : integer);
external;

procedure checkstack(appetite : integer);
external;

procedure clearlevel;
external;

procedure copywords(destination , source : addr; count : integer);
external;

procedure counttime(level : integer); external;

procedure defineptr(var pointer : addr;
start : addr;
index : integer;
var dope : dope_vector); external;

function equalref(var a , b : reference) : boolean;
external;

procedure getbyte(var result: byte; pointer : addr); external;

procedure getinteger(var result : integer; pointer : addr); external;

procedure getlfgf(var lf , gf : addr);
external;

procedure initextref(var r : reference ; var msg_header : ext_message_header);
external;

procedure initref(var r : reference; var msg_header : message_header);
external;

procedure initscrtref(var secretref : ^ secret_vector; address : addr);
external;

procedure jumpto(address : addr); external;

procedure linkmessage(var r : reference);
external;

procedure nextrefp(var p : ^ reference);
external;

function ptraddr(a : addr) : ^niltype;
external;

procedure putaddr(pointer , walue : addr); external;

procedure readram(var result : byte; index : integer);
external;

function refpool(var p : pool 1) : ^ pool 1;
external;

function refshadow(var sh : shadow) : ^shadow;
external;


procedure selectlevel(level : integer);
external;

procedure setregister(walue,index : integer); external;

procedure startdriver(var p : ext_incarnation_descriptor);
external;

function uadd (i,j: integer): integer; external;
function udiv (i,j: integer): integer; external;
function ult  (i,j: integer): boolean; external;
function umod (i,j: integer): integer; external;
function umul (i,j: integer): integer; external;
function usub (i,j: integer): integer; external;

procedure writeram(index , walue : integer);
external;

procedure writeramclr(index, walue : integer);
external;


procedure exchange(var r: reference; var p: ^message_header); external;



. (* end of standard environment *)
«eof»