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

⟦0e6e81c01⟧ TextFileVerbose

    Length: 16128 (0x3f00)
    Types: TextFileVerbose
    Names: »lmitxt002«

Derivation

└─⟦2c55ea56f⟧ Bits:30001844 SW-save af projekt 1000, Alarm-system
    └─⟦093e2ad1c⟧ 
        └─⟦this⟧ »lmitxt002« 

TextFileVerbose

;; begin lmitxt002
;;
;;description of the memory access procedures:
;;
;; name        base,disp data  bytes count test odd    comment
;;
;; writenextt  w2,w1++   w3    2     2     yes  odd
;; writenext   w2,w1++   w3    2     2          odd
;; writebnextt w2,w1++   w3    1     1     yes  odd
;; writebnext  w2,w1++   w3    1     1          odd
;; wr34fetcht  spb,slu++ w4,w3 4     4     yes         test stackoverflow; goto fetch
;; wr34fetch   spb,slu++ w4,w3 4     4                 test stackoverflow; goto fetch
;; wrfetcht    spb,slu++ w3    2     2     yes         test stackoverflow; goto fetch
;; wrfetch     spb,slu++ w3    2     2                 test stackoverflow; goto fetch
;; cwrite21    w6,w5     w2,w1 4
;; cwrite1     w6,w5     w1    2
;; cwrite65    w2,w1     w6,w5 4
;; cwrite6     w2,w1     w6    2
;;
;; cexch21     w6,w5     w2,w1 4                       exchanges memory words with w2,w1
;;
;; readcont    sib,sic   w3    2     2          odd    param: w7
;; readbcont   sib,sic   w4    1     1          odd    param: w7 ; s.zro(w4) set at exit
;; readcown36  sib,sic   w6,w3 4     4          odd    param: w7
;; read12t     w2,w1++   bd    2           yes
;; read12      w2,w1++   bd    2
;; readluct    spb,slu-- bd    2     -2    yes
;; readluc     spb,slu-- bd    2     -2
;; readlucq    spb,slu-- q     2     -2
;; readnextt   w6,w5++   bd    2     2     yes
;; readnext    w6,w5++   bd    2     2
;; readonext   w6,w5++   q     2     2          odd
;; reado12     w2,w1     q     2                odd
;; readb65next w6,w5++   w3    1     1          odd
;; readb21next w2,w1++   w3    1     1          odd
;; cread65     w2,w1     w6,w5 4
;; cread21     w6,w5     w2,w1 4
;; cread1      w6,w5     w1    2                       s(w1) set at exit
;; creadbyte1  w6,w5     w1    1                odd    s.zro(w1) set at exit
.p ;;
;;explanation to the above table:
;;
;; base,disp:  defines the memory address of the first byte.
;;
;; data:       defines the register to/from which the data is transferred.
;;             the register "bd" means, that the data should be fetched
;;             from the "bd" register, and the parity should thereafter
;;             be tested before the registers s, r, errb, errd, bf, bd,
;;             and "base,disp" are changed and before the back-plane bus
;;             is released (by an instruction not containing "h").
;;
;; test:       "yes" in this coloumn means that the memory procedure starts by
;;             testing the old parity.
;;
;; count:      this value is added to "disp", before the procedure returns.
;;
;; odd:        "odd" in this coloumn means that the procedure is able to
;;             read/write a word placed over two physical words. if "odd"
;;             is absent, then the data is assumed aligned at physical word
;;             boundaries, i. e. odd addresses denote the same data as
;;             the preceeding even addresses.
;;
;; bytes:      the number of bytes to be read from/written to the memory.
;;
;;
;;usage of the registers:
;;
;; beside the registers mentioned in the above table, the following
;; registers are used by the  procedures:
;;
;;             registers               used by
;;
;;             s(status), errb, errd   all memory access procedures
;;             r(am2910), q            read and exchange memory procedures
;;             c                       creadbyte1
;;             w7                      in/out parameter, set by fetch, used by
;;                                       readcont, readbcont, readcown36
.p ;;
                              ;
                              ;
;; procs for selecting the address and the data:
                              ;
mmab: ;; write address selection:
   bf:=errb,h ,crtn           ;
                              ;
mmdb: ;; write data selection:
   bf:=errb++,h ,crtn         ;
                              ;
                              ;
;; procs for parity error handling:
                              ;
rterror: ;; jump to r in case of error
   ,h ,crtn not pty           ;
                              ;
rerror: ;; parity error: jump to r
   ,h ,jrp not pty            ;
                              ;
perror= rerror                ;
terror= rterror               ;
                              ;
errw65m1:                     ;
   errd:=w5--,h ,             ; errb,errd := w6,w5-1
                              ;
errw6:                        ;
   errb:=w6,h ,cjp herror     ; errb := w6; goto herror
                              ;
errw2:                        ;
   errb:=w2,h ,cjp herror     ; errb:=w2; goto herror
                              ;
errlu:                        ;
   errd:=slu++,h ,            ; errb,errd := slb,slu+1
   errb:=slb,h ,cjp herror    ; goto herror
                              ;
errib:                        ;
   errd:=sic--,h ,            ; errb,errd := sib,sic-1
   errb:=sib,h ,cjp herror    ; goto herror
                              ;
errm1:                        ;
   errd:=errd--,h ,cjp herror ; errd:=errd-1; goto herror
                              ;
testbyte:                     ;
   ,,cjv 3 testbyte1          ;
.loc                          ;
testbyte1:                    ;
   w3:=w3 and 0ff,,crtn       ; parity ok
   ,,cjp testbyte2            ; goto testbyte2
   w3:=w3 and 0ff,,crtn       ; parity ok
testbyte2:
   w3:=w3 and 0ff,,crtn not pty ; return if parity ok
   q:=54,,jrp not pty         ; q:=54; goto r;
                              ;
errw6b:                       ;
   errb:=w6,,cjp debugmess    ; errb:=w6; goto debugmess
                              ;
errw2b:                       ;
   errb:=w2,,cjp debugmess    ; errb:=w2; goto debugmess
.p                            ;
;; memory read procs:
                              ;
readcont:                     ;
   bf:=sib,sic:=sic++,h ,ldct errib;
   bd:=sic,sic:=sic++,h r s,  ;
   q:=w7 and 0ff,h ,          ; q:=lastbyte of w7
   w3:=bd,h w s,cjp b15 rterror; w3:=readword; goto rterror if even
   w7:=w3,h ,cjp pty rerror   ; w7:=w3; jump if parity error
   w3:=w3 and 700,,           ; w3:=firstbyte of w3
   bus:=w3+q,,                ;
   w3:=swp,s,crtn             ; w3:=word; define status
                              ;
readbcont:                    ;
   bus:=sic,sic:=sic++,s,     ;
   w4:=w7 and 0ff,s,crtn b15  ; w4:=lastbyte; define zro; return if odd
   bf:=errb:=sib,h ,          ;
   bd:=errd:=sic--,h r ,      ;
   w4:=0ff,h ,                ;
   w7:=bd,h w s,              ; w7:=readword; w4:=firstbyte; define zro
   w4:=w4 and swp,h s,crtn not pty ; return if no error
   ,h ,cjp herror             ; goto herror
                              ;
readcown36:                   ;
   ,,cjs readcont             ;
   w6:=w3,,cjp readcont       ;
                              ;
read12t:                      ;
   ,h ,cjp pty rerror         ;
read12:                       ;
   bf:=errb:=w2,h ,ldct herror;
   bd:=errd:=w1++,h r ,crtn   ;
                              ;
readluct:                     ;
   ,h ,cjp pty rerror         ;
readluc:                      ;
   bf:=slb,slu:=slu--,h ,ldct errlu;
   bd:=slu,slu:=slu--,h r s,crtn ;
                              ;
readlucq:                     ;
   bf:=slb,slu:=slu--,h ,ldct errlu;
   bd:=slu,slu:=slu--,h r s,  ;
   q:=bd,h w s,cjp rterror    ;
                              ;
readnextt:                    ;
   ,h ,cjp pty rerror         ;
readnext:                     ;
   bf:=w6,w5:=w5++,h ,ldct errw65m1;
   bd:=w5,w5:=w5++,h r s,crtn ;
                              ;
readonext:                    ;
   bf:=w6,h ,ldct errw6       ;
   bd:=errd:=w5++,h r s,      ;
   w5:=errd++,h ,cjp b15 readodd; jump if odd
   q:=bd,h w s,cjp rterror    ;
                              ;
readodd: ;; r def, module selected, errd=disp+1
   q:=bd,h w s,               ; q:=first word
readodd0: ;; r def, module selected, errd=disp+1, q=firstword
   q:=q and 0ff,h ,           ;
   errb:=swp,h ,jrp not pty readodd1; jump to r if error
readodd1:                     ;
   bd:=errd:=errd++,h r ,     ;
   errb:=bd and errb,h w s,   ; errb:=second byte
   bus:=errb ior q,h ,jrp not pty readodd2; jump to r if error
readodd2:                     ;
   q:=swp,,crtn               ; q:=word; return
                              ;
reado12:                      ;
   bf:=w2,h ,ldct errw2       ;
   bd:=errd:=w1,h r s,        ;
   q:=bd,h w s,cjp b15 readodd0; jump if odd
   ,h ,crtn not pty           ;
   ,h ,cjp rerror             ;
                              ;
readb65n1: ;; from mrq7, mrq19, and readb
   bf:=w6,w5:=w5++,h ,        ;
   bd:=errd:=w5,h r ,         ;
   0,,h ,                     ; force ones out to the backplane bus
   w3:=bd,h w b s,cjp testbyte; goto test right parity ok and mask w3
                              ;
readb65next:                  ;
   bf:=w6,w5:=w5++,h ,ldct errw6b;
   bd:=errd:=w5,h r ,         ;
   w3:=bd,h w b s,cjp testbyte; goto test right parity ok and mask w3
                              ;
readb21next:                  ;
   bf:=w2,w1:=w1++,h ,ldct errw2b;
   bd:=errd:=w1,h r ,         ;
   w3:=bd,h w b s,cjp testbyte;
                              ;
cread65:                      ;
   bf:=errb:=w2,h ,           ;
   bd:=w1,errd:=w1++,h r ,ldct errm1;
   w6:=bd,h w s,cjs rterror   ;
   bd:=errd:=errd++,h r ,ldct herror;
   w5:=bd,h w s,cjp rterror   ;
                              ;
cread21:                      ;
   bf:=errb:=w6,h ,           ;
   bd:=w5,errd:=w5++,h r ,ldct errm1;
                              ;
   w2:=bd,h w s,cjs rterror   ;
   bd:=errd:=errd++,h r ,ldct herror;
   w1:=bd,h w s,cjp rterror   ;
                              ;
cread1:                       ;
   bf:=errb:=w6,h ,           ;
   bd:=errd:=w5,h r ,ldct herror;
   w1:=bd,h w s,cjp rterror   ;
                              ;
creadbyte1:                   ;
   c:=w5,,cjs cread1          ;
   q:=0ff,,                   ;
   w1,w1:=w1 and q,s,crtn cry ; return if odd
   w1:=swp and q,s,crtn       ; swap; return
                              ;
writenextt:                   ;
   bf:=errb:=w2,h ,jrp not pty writenext1; jump to r or writenext1
writenext:                    ;
   bf:=errb:=w2,h ,           ;
writenext1:                   ;
   bd:=w1:=w1++,h s,          ;
   bf:=w2++,h ,cjp b15 writenxt10; jump if odd
   bd:=w3,w1:=w1++,h w ,crtn  ;
writenxt10: ;; odd
   bus:=w3,h ,                ;
   bd:=swp,,h w b ,cjs mmab   ;
   bd:=w1:=w1++,h ,cjs mmdb   ;
   bd:=w3,h w b ,crtn         ;
                              ;
writebnextt:                  ;
   bf:=errb:=w2,h ,jrp not pty writebnext1; jump to r or writebnext1
writebnext:                   ;
   bf:=errb:=w2,h ,           ;
writebnext1:                  ;
   bd:=w1:=w1++,h ,cjs mmdb   ;
   bd:=w3,h w b ,crtn         ;
                              ;
wr34fetcht:                   ;
   ,h ,cjp pty rerror         ;
wr34fetch:                    ;
   slu-zd0,s,                 ;
   bf:=errb:=slb,h ,cjp acy stackerror; if slu>=maxstack then goto stackerror
   bd:=slu:=slu++,h ,cjs mmdb ;
   bd:=w4,slu:=slu++,h w ,cjp wrfetch;
                              ;
wrfetcht:                     ;
   ,h ,cjp pty rerror         ;
wrfetch:                      ;
   slu-zd0,s,                 ;
   bf:=errb:=slb,h ,cjp acy stackerror; if slu>=maxstack then goto stackerror;
   bd:=slu:=slu++,h ,cjs mmdb ;
   bd:=w3,slu:=slu++,h w ,cjp fetch;
                              ;
cwrite21:                     ;
   bf:=errb:=w6,h ,           ;
   bd:=w5,errd:=w5++,h ,cjs mmdb;
   bd:=w2,h w ,cjs mmab       ;
   bd:=errd++,h ,cjs mmdb     ;
   bd:=w1,h w ,crtn           ;
                              ;
cwrite1:                      ;
   bf:=errb:=w6,h ,           ;
   bd:=w5,h ,cjs mmdb         ;
   bd:=w1,h w ,crtn           ;
                              ;
cwrite65:                     ;
   bf:=errb:=w2,h ,           ;
   bd:=w1,errd:=w1++,h ,cjs mmdb;
   bd:=w6,h w ,cjs mmab       ;
   bd:=errd++,h ,cjs mmdb     ;
   bd:=w5,h w ,crtn           ;
                              ;
cwrite6:                      ;
   bf:=errb:=w2,h ,           ;
   bd:=w1,h ,cjs mmdb         ;
   bd:=w6,h w ,crtn           ;
                              ;
cexch21:                      ;
   bf:=errb:=w6,h ,           ;
   bd:=w5,errd:=w5++,h r ,cjs qthmm6;
   bd:=w2,w2:=q,h w ,         ;
   bf:=w6,errd:=errd++,h ,    ;
   bd:=errd,errd:=errd++,h r ,cjs qthmm6;
   bd:=w1,w1:=q,h w ,crtn     ;
                              ;
qthmm6:                       ;
   q:=bd,h w s,               ;
   ,h ,cjp pty errm1          ;
   bd:=errd--,h ,             ;
   bf:=w6++,h ,crtn           ;
.p                            ;
;;
;; procedure getsa   (* 23x = 5,0us *)
;; procedure getsat  (* 24x = 5,2us *)
;;
;; entry: -
;; exit : w1= mem(lu) + rel - 1; w2= mem(lu-2); w3= rel; q= w6= undf;
;;        read(mem(lu-2)) started;
;;
getsat:                       ;proc getsat;
   ,h ,cjs pty perror         ; if pty then perror;
getsa:                        ;proc getsa;
   ,,cjs readcont             ; rel:= readcont;
getsa1:                       ;proc getsa1;
   w1:=w3--,,cjs readluc      ; readluc;
   w1:=w1+bd,h w s,cjs readluct; d:= rel-1+waitmem; readluct;
   w2:=bd,h w s,cjp terror    ; b:= waitmem; testpty; return;
.p                            ;
;;
;; procedure clearbits(mask);  (* 2x = 0,43us *)
;;
;; entry: w0= mask;
;; exit : w0= unch, q= old ps;
;;
clearbits:                    ;proc clearbits;
   q:=zd1,,                   ; ra.ps:= ra.ps and -,mask;
   zd1:=q clr w0,,crtn        ; return;
;;
;; procedure testint1;  (* 1x = 0,22us *)
;;
;; entry: -
;; exit : stat(zro)= (int=lev);
;;
testint1:                     ;proc testint1;
   int xor lev,h s,crtn       ; stat:= (int=lev); return;
;;
;; procedure nill  (* 1x = 0,22us *)
;;
nill:                         ;proc nill;
   bus:=40,,,crtn             ; swap:= nill; return;
.p                            ;
;; procedure clear  (* ext: 7x = 1,52us, int: 13x = 2,82us *)
;;
;; entry: lev;
;; exit : w0= level, q= undf, ra= unch, ir= 300, stat= undf;
;;
clear:                        ;proc clear;
   w0:=lev and 0ff,,          ; bplevel:= lev(8:15);
   q:=w0 ior 200,,            ; 
   bf:=q,,                    ; msel:= bplevel + interrupt;
   q:=w0 and 7,h ,            ; chan:= bplevel(13:15);
   bd:=q,h w ,                ; xbus:= chan + clear interrupt;
   reg--sregmax,s,            ; if reg > sregmax then
   ir:=300,,,crtn acy         ; begin sync-intrp; return; end;
   ir:=c:=2,w0:=reg,,push 2   ;
   w0:=>w0,,rfct              ; ilevel:= reg shift (-3);
   bf:=w0,,                   ; msel:= ilevel;
   ir:=300,,h u ,crtn         ; setsoft; sync-intrp; return;
;;
;; procedure setlocalint(level)  (* 10x = 2,17us *)
;;
;; entry: w0= level; (* setlint only *)
;; exit : w0= level, q= undf, stat= undf, ir:= 320;
;;
setlint:                      ;proc setlint;
   q:=w0 ior 200,,            ; q:= level ior -,iors0;
   bf:=q,,                    ; msel:= q;
   q:=q and 7,,               ; q:= lev and dev-mask
   q:=q ior 20,h ,            ;     + setint;
   bd:=q,h w ,                ; xbus:= q;
   w0--sintmax,s,             ; if level<=softintmax then
   ir:=320,,,crtn acy         ;
   q:=q xor 28,,              ;  msel:= level(13:15) ior setsoft;
   bf:=q,,                    ;
   ir:=320,,h u ,crtn         ; sync-intrp; return;
;;
;; end of lmitxt002
;;
.p                            ;
«eof»