|
|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 3840 (0xf00)
Types: TextFile
Names: »chop«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt.
└─⟦0364f57e3⟧
└─⟦this⟧ »chop«
; elementary link-procedures:
; procedure remove(elem);
; comment: removes a given element from its queue and leaves the element linked to itself.
; call: w2=elem, w3=link
; exit: w0, w1, w2=unchanged, w3=next(elem)
; return address: link
b. i1 w.
e5: rs. w3 i0. ; save return;
rl w3 x2 ; w3 := next(elem);
rx w2 x2+2 ; w2 := prev(elem); prev(elem) := elem;
rs w3 x2 ; next(w2) := next(elem);
rx w2 x3+2 ; w2 := elem; prev(next(elem)) := old prev(elem);
rs w2 x2 ; next(elem) := elem;
jl. (i0.) ; return;
; procedure link(head, elem);
; comment: links the element to the end of the queue
; call: w1=head, w2=elem, w3=link
; exit: w0, w1, w2=unchanged, w3=old last(head);
e6: rs. w3 i0. ; save return;
rl w3 x1+2 ; old last:=last(head);
rs w2 x1+2 ; last(head):=elem;
rs w2 x3+0 ; next(old last):=elem;
rs w1 x2+0 ; next(elem):=head;
rs w3 x2+2 ; last(elem):=old last;
jl. (i0.) ; return;
i0: 0 ; saved return: remove, link
e.
; procedure check reservation
; comment: checks whether an external process is reserved
; by the current internal process.
; call: return:
; w0 reserved
; w1 cur cur
; w2 buf buf
; w3 link link
b.i24 ; begin
w.
i0: 0 ; return
e15: ; check reserver;
jl x3 ; normal return else
rl. w0 b1. ; w0:=reserver
se w0 0 ;
jl. i0.
rs. w0 b1. ;
jl. r2. ; result 2;
e. ; end
; procedure check operation(oper mask, mode mask)
; comment: checks whether the operation and mode are
; within the repertoire of the receiver. the legal values are
; defined by two bitpatterns in which bit i=1 indicates
; that operation (or mode) number i is allowed. if the
; operation is odd, it is checked whether the input/output
; area is within the internal process.
; call: return:
; w0 oper mask destroyed
; w1 mode mask destroyed
; w2 buf buf
; w3 link destroyed
b.i24 ; begin
w.e16:rs. w3 i0. ;
bz w3 x2+9 ;
ls w1 x3+0 ;
bz w3 x2+8 ;
ls w0 x3+0 ;
sh w0 -1 ; if mode mask(mode(buf))=0
sl w1 0 ; or oper mask (operation(buf))=0
jl. r3. ; then goto result 3;
so w3 1 ;
jl. (i0.) ;
rl w1 x2+6 ;
dl w0 x2+12 ; if odd(operation(buf))
la. w3 g50. ; make first and
la. w0 g50. ; last address in buf even;
; sl w3 (x1+a17) ; and (first addr(buf)<first addr(sender)
; sl w0 (x1+a18) ; or last addr(buf)>=top addr(sender)
; jl. r3. ;
sh w0 x3-2+510; or first addr(buf)>last addr(buf))-510
jl. r3. ; then goto result 3;
; ds w0 x2+12 ; message even;
jl. (i0.) ;
i0: 0 ;
e. ; end
;procedure deliver simple result(result);
;
; calll return
; w0 result destroyed
; w1 destroyed
; w2 buf destroyed
; w3 link destroyed
b.w.
r4: am 1 ; result 4
r3: am 1 ; result 3
r2: am 1 ; result 2
r1: al w0 1 ; result 1
r0: jd 1<11+26 ; get event
al. w1 b20. ; w1:=answer
jd 1<11+22 ; send answer
jl. e0. ; goto wait event(0)
e.
▶EOF◀