|
|
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: 112896 (0x1b900)
Types: TextFile
Names: »rc3503«
└─⟦2c55ea56f⟧ Bits:30001844 SW-save af projekt 1000, Alarm-system
└─⟦093e2ad1c⟧
└─⟦this⟧ »rc3503«
;; rc3503 microprogram, disassembled version
;;
;; this listing is produced by disassembling the original rc3503
;; microprogram listing.
;; during the process of disassembling some information (especially
;; concerning the use of the alu slice) is lost. the disassembled
;; listing specifies the same logical function as the original
;; microprogram, but the way of doing it may differ. as a consequence
;; the binary output from the disassembler may differ from the original
;; binary output, and the original binary output listing should
;; therefore be consulted whenever information about the binary
;; microinstruction word is needed.
;;
;; please note that all constants generated by the disassembler are
;; represented as hexadecimal numbers, whereas the comments in the
;; listing are unchanged and hence may contain numbers in any
;; number representation.
.p
;; rc3503 microprogram description.
;;
;; date 1980.11.11 kneh.
;; listing rcsl 52 - aa 1005
;; source tape rcsl 52 - aa 1006
;; macro source rcsl 52 - aa 1007
;;
;; des35 source rcsl 52 - aa 1008
;; def1 source rcsl 52 - aa 1009
;;
;; slice register layout.
;; w0 save current w0.
;; w1 current level number.
;; w2 save read address (m:ram).
;; w3 ea (effective address)
;; w4 op (operand).
;; w5 current i/o level.
;; w6 enable/disable flag; =4 if enable else =5.
;; w7 scratch register.
;; w8 constant 8.177000
;; w9 constant 8.400
;; w10 constant 8.2
;; w11 module select.
;; w12 constant 8.37
;; w13 current level shift logical left 3 positions.
;; w14 memory address to mem read/write routines.
;; w15 data to/from mem read/write routines.
.p!0002 m3503
;; rc3503 microprogram description.
;; the microprogram listing has the following format:
;;
;; microaddress word1 word2 word3 word4
;; xxxx xxxx xxxx xxxx xxxx
;; x means hex ciffer.
;; xxxx --> bit 0-15
;;
;; word1 :
;;--------
;; bit 0-3 next i0-3 next microinstruction.
;; 0 jz jump zero.
;; 1 cjs cond jsb pl.
;; 2 jmap jump map.
;; 3 cjp cond jump pl.
;; 4 push push/cond ld cntr
;; 5 jsrp cond jsb r/pl.
;; 6 cjv cond jump vector.
;; 7 jrp cond jump r/pl.
;; 8 rfct repeat loop,cntr<>0
;; 9 rpct repeat pl,cntr<>0.
;; a crtn cond rtn.
;; b cjpp cond jump pl&pop.
;; c ldct ld cntr&continue.
;; d loop test end loop
;; e cont continue.
;; f twb three-way branch.
;;
;; bit 4-7 cond 0-3 condition select.
;; bit 8-11 asel 0-3 a-slice register select.
;; bit 12-15 bsel 0-3 b-slice register select.
.p!0003 m3503
;; rc3503 microprogram description.
;; word2 :
;; -------
;; bit 0-2 slice 0-2 alu destination control.
;; bit 3-6 alu func 0-2,c alu function and carry.
;; bit 7-9 alu op 0-2 alu source operand.
;; bit10 enable hold
;; bit 11-12 cload 0-1 carry load control field
;; bit 13-15 wreg 0-2 w-register ram address control.
;;
;; word 3 :
;; --------
;; bit 0-3 dummy
;; bit 4 escape/polx
;; bit5 -,sup itr.
;; bit 6 test ack.
;; bit 7 -,byte en/nxt mar 0.
;; bit 8 -,update alu status.
;; bit 9 -,update carry.
;; bit 10 -,set base
;; bit 11 -,syn itr/-,sign extend.
;; bit12 -,reg load.
;; bit 13 -,ccen
;; bit14 -,forward read.
;; bit 15 -,inta.
.p!0004 m3503
;; rc3503 microprogram description.
;;
;; word 4 :
;; -------
;; bit 0-2 bus source control field.
;; bit 3-5 bus destination field.
;; bit 6-15 nxt mar 1-10.
.p!0005 m3503
;; log: rcm35 03b -- bj --
;;
;; date 1980-11-11
;;
.w0=0
.w1=1
.w2=2
.w3=3
.w4=4
.w5=5
.w6=6
.w7=7
.w8=8
.w9=9
.w10=0a
.w11=0b
.w12=0c
.w13=0d
.w14=0e
.w15=0f
nop=0
aucon= 1ff
citr= 40
cpuve= 3b
fi5= 3ff
fi4= 3fe
fi3= 3fd
fi2= 3fc
fi1= 3fb
fi0= 3fa
fia = 3ef ; save of parity error information
fib = 3ee
fic = 3ed
fid = 3ec
fie = 3eb
fif = 3ea
perro= 41
ritr= 0
sitr= 20
timer= 140
waits= 06
wctim= 08
.p!0006 m3503
;; 1980.11.04 kneh.
;; rc3503 microprogram.
;; initialization routine.
;; place the following constants in slice registers:
;; w10:= 2
;; w9:= 400
;; w06:= 4
;; w11:= 1
;; w12:= 37
;; w8:= 1000
;; enable interrupt
init:
w10:=2,, ;
w9:=100,, ;
w11:=1,, ;
w12:=1f,, ;
w8:=200,, ;
led:=4,w6:=4,, ;
ra:=80,w13:=80,, ;
ba:=w1:=,,cjp uptab ;
;; debug initialization routine.
debug:
w0,,cjv 6 map45 ;
dupdat:
w0,,cjp cr dupdat ;
w0,,cjp not c7 debug ;
ccr,w0,, ;
ir:=w0,,cjp fetch ;
;; exec one instruction.
fetcd:
w6 and w11,s,cjp cr fetcd ;
int,w0,,cjp fetca ;
nop
.p!0007 m3503
;; rc3503 microprogram. 1979.10.07 kneh.
;; shift rotate-instructions with ir(7:8)=00.
;; the number of shifts of shifts is specified by ir(12:15).
shiti:
w15:=0f and q,s, ;
;b01:= w(current level).
shlop:
w0,,cjp zro nupdat ;
rc:=w15--,,ldct ;
; q and a13 -----> a17. a17-1 ----> n-counter (am2910).
w7:=zdw,s,cjp not st7 shrop;
,,cjv 0d rleft ;
; if ir11=1 then jump vector "rleft" else continue.
shrop:
w0,,cjv 0d rright ;
nop
nop
nop
;; shift rotate-instructions with ir(7:8) <> 00.
;; the number of shifts is specified by x(12:15).
shitx:
w7:=0f,, ;
w15:=zdx and w7,s,cjp shlop;
; (x) and a07 -----> a17.
nop
.p!0008 m3503
;; rc3503 microprogram.
;; main loop.fetch routine.
yfetch:
w1:=int,,cjp not cr debug ;
ra:=w1,,cjs gint1 ;
xfetca:
c:=rd,w0:=rd,, ;
bf:=0c0,w0,h , ;
bd:=w14:=w0,h r , ;
led:=5,w0,h , ;
ir:=bd,q:=bd,h w s, ;
led:=w6,w2:=,,cjv 3 sparf ;
fetrd:
rm:=w0:=w10+w0,,jmap 0 ;
nop
.p!0009 m3503
;; rc 3503 microprogram
;; jump to address calculation map.
;; ir jump to routine:
;; 78901234
;; 00xxxxxx ir(0:4)<24 format a, x=0 fax0
;; 01xxxxxx ir(0:4)<24 format a, x<>0 faxn
;; 10xxxxxx ir(0:4)<24 format a ,x<>0 faxn
;; 11xxxxxx ir(0:4)<24 format a, x<>0 faxn
;; 00011110 format b,x=0,i=0 bx001
;; 00111110 format b,x=0,i=1 bx0i1
;; 01011110 format b,x<>0,i=0 bxn01
;; 10011110 format b,x<>0,i=0 bxn01
;; 11011110 format b,x<>0,i=0 bxn01
;; 01111110 format b,x<>0,i=1 bxni1
;; 10111110 format b,x<>0,i=1 bxni1
;; 11111110 format b,x<>0,i=1 bxni1
;; 00011111 format c,x=0,i=0 cx001
;; 00111111 format c,x=0,i=1 cx0i1
;; 01011111 format c,x<>0,i=0 cxn01
;; 10011111 format c,x<>0,i=0 cxn01
;; 11011111 format c,x<>0,i=0 cxn01
;; 01111111 format c,x<>0,i=1 cxni1
;; 10111111 format c,x<>0,i=1 cxni1
;; 11111111 format c,x<>0,i=1 cxni1
;; xx011000 read status/word rxc
;; xx111000 read block of bytes/word rbx
;; 00011001 write control/word,x=0 wxcx0
;; 01011001 write control/word,x<>0 wxcxn
;; 10011001 write control/word,x<>0 wxcxn
;; 11011001 write control/word,x<>0 wxcxn
;; xx111001 write block of bytes/word wbx
;; 00x11100 shift/rotate,x=0 shiti
;; 01x11100 shift/rotate,x<>0 shitx
;; 10x11100 shift/rotate,x<>0 shitx
;; 11x11100 shift/rotate,x<>0 shitx
;; xxx11010 interlevel load ild
;; xxx11011 interlevel store ist
;; xxx11101 not used update
;; xxx01110 not used update
.p!0010 m3503
;; rc3503 microprogram.
;; address calculation. format a. x=0.
;; when called:
;; w0=w0(current);
;; q=d(sign extended);
;; return:
;; w3=ea; w4=operand
fax0:
w3:=q,, ;
w4:=q,,jmap not 0 ;
;; address calculation. format a. x<>0.
;; call: w0=w0(current); q=d(displacement sign extended);
;; return: w3=ea; w4=operand;
faxn:
w3:=zdx+q,, ;
bd:=w14:=w3,h r ,cjs ywread;
w4:=w15,,jmap not 0 ;
.p!0011 m3503
;; rc3503 microprogram.
;; address calculation. format c.(ir(0:4))=31. x<>0.i=0.
;; call: w0=w0(current); q=d(displacement sign extended);
;; return: w3=ea; w4=operand;
cxn01:
bd:=w14:=w0,h r ,cjs ywread;
; w15:= a( next word);
w3:=zdx+w15,, ;
; w3:= ea;
bd:=w14:=w3,h r ,cjs ywread;
rm:=w0:=w10+w0,, ;
; w15:= st( xn+a);
w4:=w15,,jmap not 8 ;
;; address calculation. format c. ir(0:4)=31. x<>0. i=1.
;; call: w0=w0(current); q=d(displacement sign extended);
;; return: w3= ea; w4= operand = ea;
cxni1:
bd:=w14:=w0,h r ,cjs ywread;
w3:=zdx+w15,, ;
rm:=w0:=w10+w0,, ;
w4:=w3,,jmap 8 ;
.p!0012 m3503
;; rc3503 microprogram.
;; address calculation. format c. ir(0:4)=31. x=0. i=0.
;; call: w0=w0(current); q=d(displacement sign extended);
;; return: w3=ea; w4=operand= st(ea);
cx001:
bd:=w14:=w0,h r ,cjs ywread;
w3:=w15,, ;
bd:=w14:=w15,h r ,cjs ywread;
rm:=w0:=w10+w0,, ;
w4:=w15,,jmap not 8 ;
;; address calculation .format c. ir(0:4)=31. x=0. i=1.
;; call: w0=w0(current); q=d(displacement sign extended);
;; return: w3=ea; w4=operand;
cx0i1:
bd:=w14:=w0,h r ,cjs ywread;
w3:=w15,, ;
rm:=w0:=w10+w0,, ;
w4:=w15,,jmap not 8 ;
.p!0013 m3503
;; rc3503 microprogram.
;; address calculation. format b. ir(0:4)=30. x<>0. i=0.
;; call: w0=w0(current);
;; return: w3=ea ; w4=operand;
bxn01:
w3:=zdx,, ;
bd:=w14:=w3,h r ,cjs ywread;
w4:=w15,,jmap not 8 ;
;; address calculation. format b. ir(0:4)=30. x<>0. i=1.
;; call: w0=w0(current);
;; return: w3=ea; w4=operand;
bxni1:
w3:=zdx,, ;
w4:=w3,,jmap 8 ;
;; rc3503 microprogram.
;; address calculation. format b. ir(0:4)=30. x=0. i=1.
bx0i1:
w3:=,, ;
w4:=w3,,jmap not 8 ;
;; address calculation. format b. ir(0:4)=30. x=0. i=1.
;; call: w0=w0(current);
;; return: w3=ea; w4=operand.
bx001:
w3:=,, ;
bd:=w14:=,h r ,cjs ywread ;
w4:=w15,,jmap not 8 ;
nop
nop
nop
nop
nop
nop
nop
nop
.p!0014 m3503
;; interlevel store (ist).
;; store the w-register into the working register specified by x
;; from interruption level n. the contents of w remain unchanged.
;; control the status of the interruption system as follows:
;; x(nth level):= w(current level).
;; if code= d then enable:=0.
;; if code= e then enable:=1.
;; if code= s then interrupt(n):=1.
ist:
w7:=zdw,, ;
; b07:= w(current level).
ra:=w3:=w12 and q,, ;
; q and a14 ---> wadd register.
istx:
w14:=rd,, ;
ra:=w14,, ;
zdx:=w7,, ;
; b07 ---> x(nth level).
ra:=w13,,cjv 0d upitr ;
; b15 ---> wadd register (set cur level).
nop
nop
;; interlevel load (ild).
;; load the w-register with the working register specified by x from
;; interruption level n.control the status of the interruption system as
;; follows:
;; w(current level):= x(nth level).
;; if code= d then enable:= 0.
;; if code= e then enable:= 1.
;; if code= s then interrupt(n):=1.
ild:
ra:=w3:=w12 and q,, ;
; q and a14 --> wadd,b16.
ildx:
w14:=rd,, ;
ra:=w14:=w14,, ;
w7:=zdx,, ;
; b02:= (x).
ra:=w13,, ;
; b15 --> wadd.
zdw:=w7,,cjv 0d upitr ;
; b02---> w(current level).
nop
nop
.p!0015 m3503
;; rc3503 microprogram.
;; subroutines.
;; routine to set the interrupt level specified in a16(9:15).
sitrn:
bf:=w14+w8,,200 ;
; a17:= a16+(-, iors0=1,-,iors1=0).
w15:=sitr,, ;
; load set condition in reg 17 (bus 10= 1).
bd:=w15 ior w14,h w ,crtn ;
; set intr. and return.
nop
;; routine to reset the interrupt level specified in a16(9:15).
citrn:
bf:=w14+w8,,200 ;
; a17:= a16 +(-,iors0=1,-,iors1=0).
; modul select + set/clear condition
bd:=w12 and w14,h w ,crtn ;
; clear interrupt and return.
nop
nop
nop
nop
.p!0016 m3503
;; rc3503 microprogram.
;; arithmetic and logical instructions.
;; ldr. load register. format a.
ldr1:
zdw:=w4,,cjp cupdat ;
nop
nop
nop
nop
;; arithmetic and logical instructions.
;; ldr. load register. format b&c.
ldr23:
zdw:=w4,,cjp not i10 cupdat;
w4:=zdx+w10,, ;
zdx:=w4,,cjp cupdat ;
nop
nop
nop
nop
.p!0017 m3503
;; rc3503 microprogram.
;; arithmetic and logical instructions.
;; ldc. load complement. format a.
;; w:= -operand (w4); carry:= alu carry.
ldc1:
zdw:=-w4,s, ;
c:-w4,,cjp nupdat ;
nop
nop
nop
;; arithmetic and logical instructions.
;; ldc. load complement. format b&c.
ldc23:
zdw:=-w4,s, ;
c:-w4,,cjp not i10 nupdat ;
w4:=zdx+w10,, ;
zdx:=w4,,cjp nupdat ;
nop
;; rc3503 microprogram.
;; arithmetic and logical instructions.
;; ldi. load indirect.
ldi1:
bd:=w14:=w4,h r ,cjs ywread;
zdw:=w4:=w15,,cjp nupdat ;
w0,,cjp fetch ;
nop
;; arithmetic and logical instructions.
;; ldi. load indirect. format b&c.
ldi23:
bd:=w14:=w4,h r ,cjs ywread;
zdw:=w15,,cjp not i10 nupdat;
w4:=zdx+w10,, ;
zdx:=w4,,cjp nupdat ;
nop
nop
.p!0018 m3503
;; rc3503 microprogram.
;; arithmetic and logical instructions.
;; str.store register. format a.
;; st(ea):= w.
str1:
w14:=w3,, ;
w15:=zdw,,cjs wwrite ;
w0:=rd,,cjp qupdat ;
nop
nop
;; arithmetic and logical instructions.
;; str. store register. format b&c.
;; if i=0 then st(ea):= w;
;; if i=1 and x<>0 then x:=w;
;; if i=1 and x=0 then st(ea):=w;
;; if n=1 then x:=x+2;
stri0:
w14:=w3,, ;
w15:=zdw,,cjs wwrite ;
w4:=zdx+w10,,cjp not i10 nupdat;
zdx:=w4,,cjp nupdat ;
strix:
w4:=zdw,, ;
zdx:=w4,,cjp not i10 nupdat;
zdx:=w10+w4,,cjp nupdat ;
nop
nop
;; rc3503 microprogram.
;; arithmetic and logical instructions.
;; store indirect. format a.
;; st(operand):= w;
sti1:
w14:=w4,, ;
w15:=zdw,,cjs wwrite ;
w0:=rd,,cjp qupdat ;
nop
nop
;; arithmetic and logical instructions.
;; store indirect. format b&c.
sti23:
w14:=w4,, ;
w15:=zdw,,cjs wwrite ;
w4:=zdx+w10,,cjp not i10 nupdat;
zdx:=w4,,cjp nupdat ;
nop
nop
.p!0019 m3503
;; rc3503 microprogram.
;; arithmetic and logical instructions.
;; xsr. exchange register and store. format a.
;; i=1(x=0); st(ea):=w; w:=ea;
;; i=0(x<>0); a:=st(ea);st(ea):=w;w:=a;
xsrai:
w14:=w3,, ;
w15:=zdw,,cjs wwrite ;
zdw:=w4,,cjp nupdat ;
nop
nop
;; arithmetic and logical instructions.
;; xsr.exchange register and store. format b&c.
;; if i=0 then a:=st(ea);st(ea):=w;w:=a;
;; if i=1 and x=0 then st(ea):=w;w:=ea.
;; if i=1 and x<>0 then a:=x;x:=w;w:=a;
xsrb0:
w14:=w3,, ;
w15:=zdw,,cjs wwrite ;
zdw:=w4,,cjp not i10 nupdat;
w4:=zdx+w10,, ;
zdx:=w4,,cjp nupdat ;
xsrbx:
w3:=zdw,, ;
zdw:=w4,, ;
zdx:=w3,,cjp not i10 nupdat;
zdx:=w10+w3,,cjp nupdat ;
nop
nop
.p!0020 m3503
;; rc3503 microprogram.
;; arithmetic and logical instructions.
;;ldb. load byte. format a.
lba:
1 and w3,s, ;
w4,,cjp zro ldbal ;
w4:=0ff and w4,, ;
zdw:=w4,,cjp nupdat ;
ldbal:
w4:=swp,, ;
w4:=0ff and w4,, ;
zdw:=w4,,cjp nupdat ;
nop
nop
;; ldb. load byte. format b&c.
ldbb:
1 and w3,s, ;
w4,,cjp zro ldbbl ;
ldbl:
w4:=0ff and w4,, ;
zdw:=w4,,cjp not i10 nupdat;
w4:=zdx++,, ;
zdx:=w4,,cjp nupdat ;
ldbbl:
w4:=swp,,cjp ldbl ;
nop
nop
.p!0021 m3503
;; rc3503 microprogram.
;; arithmetic and logical instruction.
;; stb. store byte. format a.
stba:
w14:=w3,, ;
w15:=zdw,,cjs bwrite ;
w0:=rd,,cjp qupdat ;
nop
nop
;; stb. store byte. format b&c.
;; if n=1 then x:=x+1
stbb:
w14:=w3,, ;
w15:=zdw,,cjs bwrite ;
w4:=zdx++,,cjp not i10 nupdat;
zdx:=w4,,cjp nupdat ;
nop
nop
;; rc3503 microprogram.
;; arithmetic and logical instruction.
;; add. add integer word. format a.
;; w:= w+operand.
adda:
w4:=c:zdw+w4,, ;
zdw:=w4,,cjp nupdat ;
nop
nop
;; add. add integer word. format b&c.
;; w:= w+operand;
;; if n=1 then x:=x+2;
addb:
w4:=c:zdw+w4,, ;
logll:
zdw:=w4,,cjp not i10 nupdat;
w4:=zdx+w10,, ;
zdx:=w4,,cjp nupdat ;
nop
nop
.p!0022 m3503
;; rc3503 microprogram.
;; arithmetic and logical instruction.
;; sub. subtract integer word. format a.
;; w:=w-operand; carry:=alu carry.
suba:
w4:=c:zdw-w4,, ;
zdw:=w4,,cjp nupdat ;
nop
nop
;; sub.subtract integer word. format b&c.
;; w:=w-operand;
;; if n=1 then x:=x+2;
subb:
w4:=c:zdw-w4,,cjp logll ;
nop
nop
.p!0023 m3503
;; rc3503 microprogram.
;; arithmetic and logical instruction.
;; and. logic and. format a.
;; w:=w and operand.
anda:
w4:=zdw and w4,, ;
zdw:=w4,,cjp cupdat ;
nop
nop
;; logic and . format b&c.
andb:
w4:=zdw and w4,,cjp cogll ;
nop
nop
;; lor. logic or. format a.
;; w:= w or operand.
lora:
w4:=zdw ior w4,, ;
zdw:=w4,,cjp cupdat ;
nop
nop
;; lor. logic or . format b&c.
lorb:
w4:=zdw ior w4,,cjp cogll ;
nop
nop
;; xor. logical exclusive or. format a.
xora:
w4:=w4 xor zdw,, ;
zdw:=w4,,cjp cupdat ;
nop
nop
;; xor. logical exclusive or. format b&c.
xorb:
w4:=w4 xor zdw,,cjp cogll ;
nop
nop
.p!0024 m3503
;; rc3503 microprogram.
;; arithmetic and logical instructions.
;; lce. load clear enable. format a.
lce1:
zdw:=w4,, ;
lcec:
bf:=w1+w8,, ;
bd:=w12 and w1,h w ,cjp eupdat;
nop
nop
nop
nop
nop
;; lce. load clear enable. format b&c.
lce23:
zdw:=w4,,cjp not i10 lcec ;
w4:=zdx+w10,, ;
zdx:=w4,,cjp lcec ;
nop
nop
;; rc3503 microprogram.
;; arithmetic and logical instructions.
;; rsw. read switches. format a.
rsw1:
ra:=0d4,w0,, ;
rd,w0,, ;
w5:=swp,, ;
ra:=0dc,w0,, ;
w5:=rd+w5,, ;
ra:=w13,, ;
zdw:=w5,,cjp nupdat ;
nop
nop
;; rsw. read switches. format b&c.
rsw23:
w4:=zdx+w10,,cjp not i10 rsw1;
zdx:=w4,,cjp rsw1 ;
nop
nop
.p!0025 m3503
;; rc3503 microprogram.
;; branch and continue instructions.
;; bgw. branch if greater. format b&c.
;; w0:= if w>operand then b else w0+2;
bgwb:
w7:=w4 xor zdw,s, ;
w7,s, ;
zdw+w4,s,cjp not b0 blp10 ;
zdw--w4,s,cjp not b0 carg1 ;
w0,,cjp blp01 ;
blp03:
w10+w0,,cjp acy carg1 ;
blp01:
w14:=w0,,cjp not i10 vupdat;
w15,,cjs xwread ;
rm:=w0:=w15,,cjp nupdat ;
carg1:
w14:=w0,,cjp i10 vupdat ;
w15,,cjs xwread ;
rm:=w0:=w15,,cjp nupdat ;
blp10:
zdw--w4,s,cjp blp03 ;
nop
;; bgw. branch if greater. format a.
bgwa:
w7:=w4 xor zdw,, ;
w7,s, ;
zdw,w4,s,cjp not b0 blp11 ;
zdw--w4,s,cjp not b0 blp15 ;
w0,,cjp vupdat ;
blp02:
w10+w0,,cjp not acy vupdat ;
blp15:
w14:=w0,,cjs xwread ;
rm:=w0:=w15,,cjp nupdat ;
blp11:
zdw--w4,s,cjp blp02 ;
nop
.p!0026 m3503
;; rc3503 microprogram.
;; branch and continue instruction.
;; bew. branch if equal. format a.
;; w0:= if w=operand then b else w0+2
bewa:
zdw-w4,s, ;
blp04:
w10+w0,,cjp not zro vupdat ;
bd:=w14:=w0,h r ,cjs ywread;
rm:=w0:=w15,,cjp nupdat ;
nop
nop
;; bew. branch if equal. format b&c.
bewb:
zdw-w4,s, ;
blp05:
w10+w0,,cjp zro carg1 ;
w14:=w0,,cjp not i10 vupdat;
bd:=w14,h r ,cjs ywread ;
rm:=w0:=w15,,cjp nupdat ;
nop
nop
.p!0027 m3503
;; rc3503 microprogram.
;; branch and continue instructions.
;; branch if less. blw. format a.
;; w0:= if w<operand then b else w0+2.
blwa:
w7:=w4 xor zdw,, ;
w7,s, ;
zdw,w4,s,cjp not b0 blp13 ;
w4--zdw,s,cjp b0 blp15 ;
w0,,cjp vupdat ;
w4,,cjp blp02 ;
blp13:
w4--zdw,s,cjp blp02 ;
nop
;; blw. branch if less. format b&c.
blwb:
w7:=w4 xor zdw,, ;
w7,s, ;
zdw,w4,s,cjp not b0 blp12 ;
w4--zdw,s,cjp b0 carg1 ;
w4,,cjp blp01 ;
blp12:
w4--zdw,s,cjp blp03 ;
nop
nop
;; bgb. branch if greater than byte. format a.
;; a(0:7):=0;
;; a(8:15):= if ea(15)=0 then operand(0:7) else operand(8:15);
bgba:
w0,,cjs boper ;
zdw-w4,s,cjp bgwa ;
nop
nop
;; bgb. branch if greater than byte. format b&c.
bgbb:
w0,,cjs boper ;
zdw-w4,s,cjp bgwb ;
nop
nop
;; subroutine to get the byte operand.
;; call: w4=operand.
;; rtn: w4(8:15):= if ea(15)=0 then w4(0:7) else w4(8:15);
;; w4(0:7):= 0;
boper:
1 and w3,s, ;
w4,,cjp not zro bopbl ;
bopal:
w4:=swp,, ;
bopbl:
w4:=0ff and w4,,crtn ;
nop
nop
.p!0028 m3503
;; rc3503 microprogram.
;; branch and continue instruction.
;; branch if equal to byte. beb. format a.
;; a(0:7):=0;
;; a(8:15):= if ea(15)=0 then operand(0:7) else operand(8:15);
;; w0:= if w=a then b else w0+2.
beba:
w0,,cjs boper ;
zdw-w4,s,cjp blp04 ;
nop
nop
;; beb. branch if equal to byte. format b&c.
bebb:
w0,,cjs boper ;
zdw-w4,s,cjp blp05 ;
nop
nop
;; blb. branch if less than byte. format a.
;; a(0:7):=0;
;; a(8:15):= if ea(15)=0 then operand(0:7) else operand(8:15);
;; w0:= if w<a then belse w0+2;
blba:
w0,,cjs boper ;
w4-zdw,s,cjp blwa ;
nop
nop
;; blb. branch if less than byte. format b&c.
blbb:
w0,,cjs boper ;
zdw-w4,s,cjp blwb ;
nop
nop
.p!0029 m3503
;; rc3503 microprogram.
;; branch and continue instructions.
;; bsz. branch if all selected bits are zero. format a.
;; a:=w and operand;
;; w0:= if a=0 then b else w0+2;
bsza:
zdw and w4,s,cjp blp04 ;
; bsz. branch if all selected bits are zero. format b&c.
nop
nop
bszb:
zdw and w4,s,cjp blp05 ;
nop
nop
;; bop. branch if odd parity. format a.
;; a:= w and operand;
;; w0:= if odd a then b else w0+2;
bopa:
w4:=zdw and w4,, ;
w4,s, ;
w10+w0,,cjv 3 xpeven ;
xbopa:
bd:=w14:=w0,h r ,cjs ywread;
rm:=w0:=w15,,cjp nupdat ;
nop
nop
;; bop. branch if odd parity. format b&c
bopb:
w4:=zdw and w4,, ;
w4,s, ;
w10+w0,,cjv 3 peven ;
bopc:
w14:=w0,,cjp not i10 vupdat;
bd:=w14,h r ,cjs ywread ;
rm:=w0:=w15,,cjp nupdat ;
nop
nop
.p!0030 m3503
;; routine to write into memory (word).
;; w14=address. w15=data. (w14-17 bitslice registers).
wwrite:
bf:=0c0,w0+q,, ;
; 8.306 --> modul select register.
bd:=w14,h , ;
; load address(w14) out on the back plane bus.
bfm:=0c1,w0+q,h , ;
; set modul select to data mode.
bd:=w15,h w ,crtn ;
; return from subroutine.
;; routine to write into memory (byte).
bwrite:
bf:=0c0,w0+q,, ;
; load 8.306 into modul select register.
bd:=w14,h , ;
; load address(w14) out onto the back plane bus.
bf:=0c1,w0+q,h b , ;
; set modul select to data mode.
bd:=w15,h w b ,crtn ;
nop
nop
nop
nop
;; return from subroutine.
.p!0031 m3503
;; rc3503 microprogram.
;; write control/word. x=0.
wxcx0:
w5:=1f and q,s, ;
; test if ir(11:15)=0.
w3:=w12,,cjp not zro wxcx1 ;
w5:=w1,, ;
wxcx1:
bf:=w5,w3:=w5 and w3,,cjp not i10 wwc;
w0,,cjp wcc0 ;
nop
nop
;; write control/word. x<>0.
wxcxn:
w5:=1f and q,s, ;
w3:=w12,,cjp not zro wxcx2 ;
w5:=w1,, ;
wxcx2:
bf:=w5,w3:=w5 and w3,,cjp not i10 wwc;
w0,,cjp wccx ;
nop
nop
;; rc3503 microprogram.
;; write block of bytes/words.
wbxx:
w5:=1f and q,s, ;
; test if ir(11:15)=0.
w3:=w12,,cjp not zro wbx1 ;
w5:=w1,, ;
wbx1:
w3:=w5 and w3,,cjp not i10 wbb;
w0,,cjp wbww ;
nop
nop
;; read status/word.
rxc:
w5:=1f and q,s, ;
w3:=w12,,cjp not zro rxc1 ;
w5:=w1,, ;
rxc1:
bf:=w5,w3:=w5 and w3,,cjp not i10 rwc;
w0,,cjp rsc ;
nop
nop
.p!0032 m3503
;; rc3503 microprogram.
;; read block of bytes/word.
rbx:
w5:=1f and q,s, ;
; test if ir(11:15)=0.
w3:=w12,,cjp not zro rbx1 ;
w5:=w1,, ;
rbx1:
bf:=w5,w3:=w5 and w3,,cjp not i10 rbb;
w0,,cjp rbw ;
nop
nop
nop
nop
;; rc3503 microprogram.
;; routine to set devno/head bits(w3+devno) and
;; transmit the contents of w4 to the device.
;; call: w3= 0 read data.
;; 100 write data.
;; 200 read status.
;; 300 write control.
;; w4= transmit data.
;; w5= device number.
xhead:
bf:=w9+w5,,cjp not st2 xhead;
; set modul selext:= 400+device number.
bd:=w3,h w , ;
xwait:
bf:=w5,, ;
bd:=w4,h w ,crtn ;
;; rc3503 microprogram.
;; routine to set timer and wait upon
;; timeout or data in ready.
;; if eoi or timeout then zero flag=0
w0,i ,push timer ;
w0,i ,twb st5 timot ;
wdal:
,i s,crtn st3 ;
timot:
0++,i s,crtn ;
.p!0033 m3503
;; read word and compare.
;; w7:=x;
;; w1:= data in;
;; if w<>a and eoi=0 then begin ir(current level):=0; w0:=w0-2 end;
;; enable:=1;
rwc:
w3:=0+w3,, ;
w4:=zd1,,1 ;
w7:=zdx,,cjs xhead ;
,s,cjs wdair ;
zdw-w7,s,cjp not zro eupdat;
w0,,cjp rbbl ;
nop
nop
nop
;; read block of bytes.
;; if x(15)=0 then st(x)(0:7):=data in(8:15);
;; else st(x):=data in(8:15);
;; x:=x+1;
;; if w<>x and eoi=0 then begin ir(current level):=0; w0:=w0-2 end;
;; enable:=1;
rbb:
w3:=0+w3,, ;
; "read data" frame to reg 3
w4:=zd1,,1 ;
; read w1 to reg 4
w7:=zdx,,cjs xhead ;
; read x-reg to reg 7, jump xhead
w14:=w7,,cjs wdain ;
; wait data in ready, jump wdain
bf:=w8+w1,, ;
bd:=w12 and w1,h w , ;
w15:=bd,h w ,cjs bwrite ;
; write byte into mem, incr x-reg
zdx:=w7:=++w7,,cjp xrbb ;
; jump if eoi to eupdat
rbbl:
bf:=w8+w1,,cjp zro eupdat ;
; prepare iors signals for clear itr
bd:=w12 and w1,h w ,cjp bupdat;
; clear itr-f/f, jump bupdat
.p!0034 m3503
;; rc3503 microprogram.
;; read block of words.
;; st(x):=data in;
;; x:=x+2;
;; if w<>x and eoi=0 then begin ir(current level):=0; w0:=w0-2 end;
;; enable:=1;
rbw:
w3:=0+w3,, ;
w4:=zd1,,1 ;
w7:=zdx,,cjs xhead ;
w14:=w7,,cjs wdain ;
bf:=w8+w1,, ;
bd:=w12 and w1,h w , ;
w15:=bd,w ,cjs wwrite ;
zdx:=w7:=w10+w7,,cjp xrbb ;
;; write word and compare.
;; data out:= w1;
;; w<>x then begin ir(current level):=0; w0:=w0-2 end;
;; enable:=1;
wwc:
w3:=40+w3,, ;
w4:=zd1,,1 ;
w7:=zdx,,cjs xhead ;
wwcl:
w7-zdw,s,cjp rbbl ;
; compare x and w reg
.p!0035 m3503
;; rc3503 microprogram.
;; write block of bytes.
;; data out(8:15):= if x(15)=0 then st(x)(0:7) else st(x)(8:15);
;; x:=x+1;
;; if w<>x then begin ir(current level):=0; w0:=w0-2 end;
;; enable:= 1;
wbb:
w3:=40+w3,, ;
; "write data" frame to reg 3
w14:=zdx,,cjs xbread ;
; read byte from mem
w4:=w15,,cjs xhead ;
; move byte to reg 17, jump xhead
zdx:=w7:=++w14,,cjp wwcl ;
; incr. x reg, jump to wwcl
;; write block of words.
;; data out:= st(x);
;; x:=x+2;
;; if w<>x then begin ir(current level):=0; w0:=w0-2 end;
;; enable:=1.
wbww:
w3:=40+w3,, ;
w14:=zdx,,cjs xwread ;
w4:=w15,,cjs xhead ;
zdx:=w14:=w10+w14,, ;
w14-zdw,s,cjp rbbl ;
.p!0036 m3503
;; rc3503 microprogram.
;; write control. x<>0.
;; control:= w1;
;; enable:=1;
wccx:
w3:=0c0+w3,, ;
w4:=zd1,,1 ;
w0,,cjs xhead ;
wccl:
led:=4,w6:=4,, ;
ir:=w0,,cjp fetch ;
;; write control. x=0.
;; control:=w1;
;; enable:=1; ir(current level):=0;
wcc0:
w3:=0c0+w3,, ;
w4:=zd1,,1 ;
w0,,cjs lhead ;
bf:=w8+w1,, ;
bd:=w12 and w1,h w ,cjp wccl;
;; rc3503 microprogram.
;; read status and compare.
;; w6:=x
;; w1:=status.
;; if w<>w6 and eoi=0 then begin ir(current):=0;w0:=w0-2 end;
;; enable:=1;
rsc:
w3:=80+w3,, ;
w4:=zd1,,1 ;
w7:=zdx,,cjs xhead ;
,s,cjs wdair ;
rscl:
,,cjp not zro eupdat ;
w7-zdw,s, ;
bf:=w8+w1,,cjp zro eupdat ;
bd:=w12 and w1,h w ,cjp bupdat;
nop
.p!0037 m3503
;; rc3503 microprogram.
;; update w0 routine.
;; sync interrupt.
update:
ir:=w10+w0,,cjp fetch ;
fetch,w0,,cjp ;
nupdat:
w0:=zd0,, ;
qupdat:
ir:=zm0:=w0,,cjp fetch ;
fetch,w0,,cjp ;
;; bupdat. w0:=w0-2; enable;
bupdat:
led:=4,w6:=4,, ;
; set enable in reg 6, enable, sync-itr
ir:=rm:=w0:=w0-w10,,cjp fetch;
; decr w0 (-2), jump fetch
eupdat:
led:=4,w6:=4,, ;
ir:=w0,,cjp fetch ;
;; subroutine to update w13 with highest priority level number.
ginta:
ra:=w1,, ;
gint1:
w13:=rd,, ;
ra:=w13,,crtn ;
cupdat:
ir:=w0,,cjp fetch ;
w0,,cjp fetch ;
cogll:
zdw:=w4,,cjp not i10 cupdat;
w4:=zdx+w10,, ;
zdx:=w4,,cjp cupdat ;
wdain:
w15:=waits,, ;
rc:=w15,,ldct ;
wdasp:
w0,,rpct wdasp ;
w0,i ,push timer ;
w0,i ,twb st5 timot ;
w0,i ,cjp wdal ;
vupdat:
ir:=zm0:=w0:=w10+w0,,cjp fetch;
w0,,cjp fetch ;
.p!0038 m3503
;; rc3503 microprogram.
;; interlevel store (ist). format c.
istc:
w7:=zdw,, ;
w14:=w0,, ;
w14:=w14-w10,,cjs wread ;
ra:=w3:=w15,,cjp istx ;
;; interlevel load (ild). format c.
ildc:
w14:=w0,, ;
w14:=w14-w10,,cjs wread ;
ra:=w3:=w15,,cjp ildx ;
;; instruction to set the module select.
mseta:
w4,,cjp msetc ;
msetb:
w4,,cjp msetc ;
.p!0039 m3503
;; routine to read from memory(word).
;; w14=address.w15:=data.
wread:
bf:=0c0,w14,, ;
; load 8.300 into modul select.
xwread:
bd:=w14,h r , ;
; load address register.
ywread:
w15:=bd,h w s, ;
; read answer,v-jump on lpe/rpe status
w15,h ,crtn not pty ;
w15:=bd,h w , ;
w2:=,,cjv 3 sparw ;
;; routine to read from memory (byte).
bread:
bf:=0c0,w0+q,, ;
; load 8.300 into modul select register.
xbread:
bd:=w14,h r , ;
; load address register.
bf:=0c1,w15+q,h b , ;
; select data mode.
w15:=bd,h w b s, ;
; read answer, v-jump on lpe/rpe status
w2:=,,cjv 3 bypar ;
wdair:
w15:=waits,, ;
rc:=w15,,ldct ;
wdai1:
w0,,rpct wdai1 ;
w0,i ,push timer ;
w0,i ,twb st5 timxx ;
w15:=bd,h i ,1 ;
zd1:=w15,i ,crtn st3 1 ;
zz1:=,i ,1 ;
timxx:
0++,i s,crtn ;
;; write control timer loop.
lhead:
w15:=wctim,, ;
w0,,cjs xhead ;
rc:=w15,,ldct ;
wdao1:
w0,,rpct wdao1 ;
w0,,crtn ;
.p!0040 m3503
;; routine to write into the w-register.
;; w14=address.w15=data.
wwreg:
ra:=w14,, ;
; load working register address register.
rd:=w15,h , ;
; write into working register.
ra:=w13,,crtn ;
; restore current level and return.
;; routine to read from the w-register.
;; w14=address. w15:=data.
rwreg:
ra:=w14,, ;
; load working register address.
w15:=rd,h , ;
; read from working register.
ra:=w13,,crtn ;
; restore current level and return.
;; routine to read from memory module. the module number is send
;; from the debug'er.
;; call: w14=offset address,w07=module number.
;; ret : w15=data.
dbread:
ba:=w7,, ;
bfm:=0c0,w14,, ;
bd:=w14,h r , ;
bwrd:
,h ,cjp not st2 bwrd ;
w15:=bd,h w s, ;
; read answer, v-jump on lpe/rpe status
ba:=w2:=,,cjv 3 sparw ;
;; routine to write into memory module.
;; call: w14=offset addr.,w07=module no,w15=data.
dbwrit:
ba:=w7,, ;
bfm:=0c0,w14,, ;
bd:=w14,h , ;
bfm:=0c1,w14,h , ;
bd:=w15,h w , ;
ba:=,,crtn ;
.p!0041 m3503
;; rc3503 microprogram.
;; procedure to receive one byte from the debug microprocessor.
;; w3(8:15):= cdi;
;; w3(0:7) := 0;
;; w4(0:7):= cdi;
;; w4(8:15):= 0;
gbyte:
w3:=,, ;
glp1:
w3,,cjp cr glp1 ;
w3:=cd,, ;
w3:=0ff and w3,, ;
w3,, ;
w4:=swp,, ;
w0,,crtn ;
;; routine to send w3(8:15) to the debug microprocessor(m).
prbyt:
w14:=fi5,, ;
w15:=w3,,cjp wwreg ;
;; rtn cs00,ar00,br00,nonf,addz,rsoa,cb,waw,bs5,bd0,doxx,0
;; routine to send w3(0:7) to the debug microprocessor.
plbyt:
w14:=fi4,, ;
w3,, ;
w15:=swp,,cjp wwreg ;
;; rtn cs00,ar00,br00,nonf,addz,rsoa,cb,waw,bs5,bd0,doxx,0
;; routine to get word from fifo.
;; call: w14= fix.
;; return: w14(0:7)=fix-1 and w14(8:15)=fix.
gword:
w14,,cjs rwreg ;
w3:=0ff and w15,, ;
w14:=w14--,,cjs rwreg ;
w15:=0ff and w15,, ;
w15,, ;
w14:=swp+w3,,crtn ;
.p!0042 m3503
;; rc3503 microprogram.
;; debug routine. get mem.
;; transfer a word from l-mem to m.
getm:
w14:=fi3,, ;
w14,,cjs gword ;
; fetch module no from fi3-fi2
w7:=w14,, ;
; save module no in reg 7
w14:=fi1,, ;
w14,,cjs gword ;
; fetch offset addr from fi1-fi0
w0,,cjs dbread ;
; read word from mem
w3:=w15,,cjs prbyt ;
; put right byte into fifo fi5
w0,,cjp plbyt ;
; put left byte into fifo fi4
;; rtn cs00,ar00,br00,nonf,addz,rsoa,cb,waw,bs5,bd0,doxx,0
; return
;; debug routine. put mem.
;; transfer a word from m to l-mem.
putm:
w14:=fi5,, ;
w14,,cjs gword ;
; fetch module no from fifo fi5-fi4
w7:=w14,, ;
; module to reg 7
w14:=fi3,, ;
w14,,cjs gword ;
; fetch offset addr from fifo fi3-fi2
w4:=w14,, ;
; save addr in reg 4
w14:=fi1,, ;
w14,,cjs gword ;
; fetch data from fifo fi1-fi0
w15:=w14,, ;
; move data to reg 17
w14:=w4,,cjp dbwrit ;
; move addr to reg 16
;; rtn cs00,ar00,br00,nonf,addz,rsoa,cb,waw,bs5,bd0,doxx,0
; return
.p!0043 m3503
;; rc3503 microprogram.
;; debug routine. get reg.
;; transfer a word from l-reg to m.
getr:
w14:=fi1,, ;
w14,,cjs gword ;
; fetch w-reg addr from fifo fi1-fi0
w4+w14,,cjs rwreg ;
; read w-reg
w3:=w15,,cjs prbyt ;
; put right byte into fifo fi5
w0,,cjp plbyt ;
; put left byte into fifo fi4
;; rtn cs00,ar00,br00,nonf,addz,rsoa,cb,waw,bs5,bd0,doxx,0
; return
;; debug routine. put reg.
;; transfer a word from m to l-reg.
putr:
w14:=fi3,, ;
w14,,cjs gword ;
; fetch w-reg addr from fifo fi3-fi2
w4:=w14,, ;
; save w-reg addr in reg 4
w14:=fi1,, ;
w14,,cjs gword ;
; fetch write data from fifo fi1-fi0
w15:=w14,, ;
; move write data to reg 17
w14:=w4,,cjp wwreg ;
; w-reg addr to reg 16, write into w-reg
;; rtn cs00,ar00,br00,nonf,addz,rsoa,cb,waw,bs5,bd0,doxx,0
; return
rdat:
w0,,cjs fifos ;
; circulate fifo
ccr,w0,,cjp tsrun ;
; clear cr f/f, jump tsrun
.p!0044 m3503
;; rc3503 microprogram.
;; debug routine. read data.
;; w((w2)+copy):= w3; received byte.
;; copy means start of the image of the microprocessor ram
;; in the w-register array.
rdadr:
w14:=fi1,, ;
w14,,cjs rwreg ;
; fetch lsb addr from fifo
w2:=<w15,, ;
; shift addr one step left
w2:=<w2+w2,, ;
; one step more
w14:=w14--,,cjs rwreg ;
; fetch data from fifo
w3:=0ff and w15,, ;
; mask and save in reg 3
w14:=1f8 and w2,, ;
; mask for max cells 3f
w14:=84+w14,, ;
; add base+offset
w15:=w3,,cjp wwreg ;
; reg 3 to reg 17, write data into image
;; rtn cs00,ar00,br00,ldbf,addz,rsoa,cb,waw,bs5,bd0,doxx,0
.p!0045 m3503
;; rc3503 microprogram
;; debug routine. get level.
;; transfer current level to m.
getl:
cd:=w3:=w1,, ;
; current level to cdo-reg
w0,,crtn ;
; return
;; test the state of run/stop.
tsrun:
w0,,cjp not c7 dupdat ;
w0,,cjp fetch ;
;; routine to
;; input level number and
;; output register offset.
gloff:
w0,,cjs gbyte ;
; read wanted level from cdo-reg
w14:=w3,,cjs rwreg ;
; fetch offset from table
w3:=w15,,cjs prbyt ;
; put right byte into fifo fi5
w0,,cjs plbyt ;
; put left byte into fifo fi4
ccr,w0,,cjp tsrun ;
; clear cr f/f, jump tsrun
.p!0046 m3503
;; rc3503 microprogram.
;; debug fifo administration.
;; fi5 (top of fifo) - fi4 - fi3 - fi2 - fi1 - fi0 (input to fifo)
;; when called:
;; cdi->fi0->fi1->fi2->fi3->fi4->fi5->cdo
fifos:
w14:=fi5,, ;
; fi5 addr to reg 16
w14,,cjs rwreg ;
; "read fifo" result in reg 17
cd:=w15,, ;
; reg 17 to cdo-reg
w14:=fi4,, ;
; fi4 addr to reg 16
w14,,cjs rwreg ;
; "read fifo" (fi4)
w14:=++w14,,cjs wwreg ;
; "write fifo" in fi5
w14:=w14-w10,,cjs rwreg ;
; "read fifo" (fi3)
w14:=++w14,,cjs wwreg ;
; "write fifo" in fi4
w14:=w14-w10,,cjs rwreg ;
; "read fifo" (fi2)
w14:=++w14,,cjs wwreg ;
; "write fifo" in fi3
w14:=w14-w10,,cjs rwreg ;
; "read fifo" (fi1)
w14:=++w14,,cjs wwreg ;
; "write fifo" in fi2
w14:=w14-w10,,cjs rwreg ;
; "read fifo" (fi0)
w14:=++w14,,cjs wwreg ;
; "write fifo" in fi1
w14:=fi0,, ;
; fi0 addr to reg 16
w15:=cd,,cjp wwreg ;
; "write fifo" cdi to fi0
;; rtn cs00,ar00,br00,nonf,addz,rsoa,cb,waw,bs5,bd0,doxx,0
; return
.p!0047 m3503
;; rc3503 microprogram.
;; debug routine. set timer level.
;; itr(w(copy)):=1;
sett:
w14:=84,, ;
; addr to rtc level (image)
setl:
w0,,cjs rwreg ;
; read from image
w14:=7f and w15,, ;
; mask for max 127 levels
w14,,cjs sitrn ;
; set level (reg 16)
ccr,w4,,cjp tsrun ;
; clear cr f/f , jump tsrun
seto:
w14:=8c,, ;
; addr to tto level (image)
w0,,cjp setl ;
; jump setl
seti:
w14:=94,, ;
; addr to tti level (image)
w0,,cjp setl ;
; jump setl
;; set version number and cpu no.
setver:
w14:=fi5,, ;
; fi5 addr to reg 16
w15:=cpuve,, ;
; cpu-type and m-prog. ver to reg 17
w0,,cjs wwreg ;
; write number to fi5
w0,,cjp lclear ;
; jump lclear
.p!0048 m3503
;; rc3503 microprogram.
;; routine to move autoload from prom mem to ram
;; starting from h.fe00.
;; w5=prom addr.; w7=ram addr.
auctl:
w5:=4,, ;
; 4 to reg 5 (rom start addr)
w7:=aucon,, ;
; 8.777 to reg 7
w7:=--w7,, ;
; 8.177000 to reg 7
aurep:
ba:=10,w14:=w5,, ;
; reg 5 to reg 16, sel prom
w14,,cjs wread ;
; read word (byte) from prom
ba:=0,w14:=w7,, ;
; reg 7 to reg 16, sel ram
w14,,cjs bwrite ;
; write byte into ram
w5:=w10+w5,, ;
; incr. prom addr +2 - to reg 5
w7:=++w7,s, ;
; incr. ram addr +1 - to reg 7
w0,,cjp not zro aurep ;
; jump to aurep if not finish with move
ir:=w0,,cjp pfetch ;
; jump to fetch
lclear:
w14:=80,, ;
; 1f (level 31) to reg 16
; set interrupt level 31
lcrep:
w14:=w14--,s, ;
; decr. level (reg 16)
w14,,cjp zro set32 ;
; jump to set31 if level decremented to zero
w14,,cjs citrn ;
; clear level (level no in reg 16)
int,w0,,cjp lcrep ;
; jump lcrep
set32:
w14:=fie,, ;
w15:=,,cjs wwreg ;
w14:=1f,, ;
,,cjs sitrn ;
.p!0049 m3503
;; rc3503 micro program
;; prepare level 1f to start in autoload code
;; placed in area fe00 to ffff.
set31:
w15:=aucon,, ;
; 8.777 to reg 17
w15:=--w15,, ;
; 8.177000 to reg 17
w14:=17a,, ;
; 8.572 to reg 16
w0,,cjs wwreg ;
; write hex fe00 into w2 level 1f
w15:=33,, ;
; 8.63 to reg 17
w15:=--w15,, ;
; 8.177714 to reg 17
w14:=178,, ;
; 8.570 to reg 16
w0,,cjs wwreg ;
; write hex ffcc into w0 on level 1f
w15:=,, ;
; zero to reg 17
w14:=17b,, ;
; 8.573 to reg 16
w0,,cjs wwreg ;
; write zero into w3 on level 1f
w0,,cjp auctl ;
; jump to auctl
.p!0050 m3503
;; rc3503 microprogram
;; generation of w-reg offset table
uptab:
w4:=0,, ;
; zero to reg 4
w7:=80,, ;
; hex 80 to reg 7 (last addr)
w5:=0,, ;
; zero to reg 5
up20:
w14:=w4,, ;
; reg 4 to reg 16 (addr)
w15:=w7,,cjs wwreg ;
; reg 7 to reg 17 (data) , write offset
w4:=++w4,, ;
; incr reg 4
w5:=++w5,, ;
; incr reg 5
w7:=8+w7,, ;
; incr. reg 7 with 8 (to next level)
w5-80,s, ;
; is it last level ?
w0,,cjp not zro up20 ;
; no jump to up20
w0,,cjp setver ;
; jump to setver
.p!0051 m3503
;; rc3503 microprogram.
;; decoder for test command.
;; =01 xmt 7.5 intr to 8085.
;; =02 working register address test.
;; =03 working register data test.
;; =04 memory address test.
;; =05 memory data test.
tscom:
w14:=fi0,, ;
; addr fi0 to reg 16
w0,,cjs rwreg ;
; read fi0 result in reg 17
w15:=7 and w15,, ;
; and read value (test number) with 7
w15 xor 1,s, ;
; exor with 1 - is it test 1 ?
w0,,cjp zro tes01 ;
; yes - jump to tes01
w15 xor 2,s, ;
; exor with 2 - is it test 2 ?
w0,,cjp zro tes02 ;
; yes - jump to tes02
w15 xor 3,s, ;
; exor with 3 - is it test 3 ?
w0,,cjp zro tes03 ;
; yes - jump to tes03
w15 xor 4,s, ;
; exor with 4 - is it test 4 ?
w0,,cjp zro tes04 ;
; yes - jump to test 4
w15 xor 5,s, ;
; exor with 5 - is it test 5 ?
w0,,cjp zro tes05 ;
; yes - jump to tes05
w0,,cjp dupdat ;
; not used test number - jump to dupdat
.p!0052 m3503
;; rc3503 microprogram.
;; tes01.xmit 7.5 intr to 8085.
tes01:
led:=6,w0,, ;
; send itr to 8085 (rst 7.5)
ccr,w0,,cjp tsrun ;
; clear cr f/f, jump to tsrun
;; working address register test.
;; (addr):=addr.
;; if test=ok then (fi5)=0 else (fi5)<>0 and (fi3,fi4)=addr a
tes02:
w14:=fi5,, ;
; fi5 addr to reg 16
ts020:
w15:=w14,,cjs wwreg ;
; write addr on addr
w14:=w14--,s, ;
; decr. addr
w14,,cjp not zro ts020 ;
; jump if addr<>0 to ts020
w15:=w14,,cjs wwreg ;
; write in addr 0
ts021:
w14,,cjs rwreg ;
; start check-read from addr 0
w14-w15,s, ;
; sub addr- read
w14,,cjp not zro te02 ;
; jump if result <>0 to te02
w14:=++w14,, ;
; incr addr
fi5-w14,s, ;
; is it last addr ?
w14,,cjp not zro ts021 ;
; jump if it isen't to ts021
w14:=fi5,, ;
; fi5 addr to reg 16
w15:=,,cjs wwreg ;
; zero to fi5
ccr,w0,,cjp tsrun ;
; clear cr f/f, jump to tsrun
.p!0053 m3503
;; rc3503 microprogram.
;; working address register test. (cont.)
;; (addr):=addr.
;; if test=ok then (fi5)=0 else (fi5)<>0 and (fi3,fi4)=addr a
te02:
w3:=w14,, ;
; save addr in reg 3
w4:=w15,, ;
; save read data in reg 4
w14:=fi5,, ;
; fi5 addr to reg 16
w15:=w14,,cjs wwreg ;
; write "addr" into fi5 a value <>0
w14:=w14--,, ;
; fi4 addr to reg 16
w15:=w3,,cjs wwreg ;
; write addr 8:15 into fi4
w14:=w14--,, ;
; fi3 addr to reg 16
w3,, ;
; load swap reg
w15:=swp,,cjs wwreg ;
; write addr 0:7 into fi3
w14:=w14--,, ;
; fi2 addr to reg 16
w15:=w4,,cjs wwreg ;
; write read 8:15 into fi2
w14:=w14--,, ;
; fi1 addr to reg 16
w4,, ;
; load swap
w15:=swp,,cjs wwreg ;
; write read 0:7 into fi1
ccr,w0,,cjp tsrun ;
; clear cr f/f, jump tsrun
.p!0054 m3503
;; rc3503 microprogram.
;; working register data test.
;; when called: (fi1,fi2)= data constant.
;; return:
;; if test=ok then (fi5)=0 else (fi5)<>0
;; and (fi3,fi4)=addr. and (fi1,fi2)=wanted data.
tes03:
w14:=fi2,, ;
; fi2 addr to reg 16
w14,,cjs gword ;
; read fi1 and fi2, result in reg 16 (testpat)
w7:=w14,, ;
; save pattern in reg 7
w14:=,, ;
; zero to reg 16 (addr)
w15:=w7,, ;
; pattern to reg 17
ts031:
w14,,cjs wwreg ;
; write pattern
w15:=--w15,, ;
; complement test pattern
w14:=++w14,, ;
; incr. addr
bf:=fi5,fi5-w14,s, ;
; compare with max addr
w14,,cjp not zro ts031 ;
; jump if not max to ts031
w14:=,, ;
; zero to reg 16
.p!0055 m3503
;; rc3503 microprogram.
;; working register data test. (cont.)
;; when called: (fi1,fi2)= data constant.
;; return:
;; if test=ok then (fi5)=0 else (fi5)<>0
;; and (fi3,fi4)=addr. and (fi1,fi2)=wanted data.
ts032:
w14,,cjs rwreg ;
; read value
w7-w15,s, ;
; is read = wanted ?
w15:=w7,,cjp not zro te02 ;
; jump if it isen't to te02
w7:=--w7,, ;
; complement wanted value
w14:=++w14,, ;
; incr. addr
bf:=fi5,fi5-w14,s, ;
; compare with max addr
w14,,cjp not zro ts032 ;
; jump if not max to ts032
w14:=fi5,, ;
; fi5 addr to reg 16
w15:=,,cjs wwreg ;
; zero to fi5 (test ok)
ccr,w0,,cjp tsrun ;
; clear cr f/f, jump tsrun
.p!0056 m3503
;; rc3503 microprogram.
;; memory address register test.
;; call: (fi1,fi2)= modul no.
;; if test=ok then (fi5)=0 else (fi5)<>0
;; and (fi3,fi4)=addr and (fi1,fi2)=wanted data.
tes04:
w14:=fi2,, ;
; fi2 addr to reg 16
w14,,cjs gword ;
; read fi1 and fi2, result in reg17 (modul number)
w7:=w14,, ;
; save modul number in reg 7
w14:=,, ;
; zero to reg 16 (addr)
ts041:
w15:=w14,,cjs dbwrit ;
; write addr on addr
w14:=w10+w14,, ;
; incr. addr
w14,s, ;
; is offset = 0 (finish with module)
w0,,cjp not zro ts041 ;
; if not jump to ts041
ts042:
w14,,cjs dbread ;
; read from mem. starting in cell 0
w14-w15,s, ;
; is read = wanted ?
w14,,cjp not zro te02 ;
; if not jump to te02 (error)
w14:=w10+w14,s, ;
; incr. addr
w14,,cjp not zro ts042 ;
; is offset = 0 (finish with module) if not jump to ts042
w14:=fi5,, ;
; fi5 addr to reg 16
w15:=,,cjs wwreg ;
; write zero into fi5 (test ok)
ccr,w14,,cjp tsrun ;
; clear cr f/f, jump to tsrun
.p!0057 m3503
;; rc3503 microprogram.
;; memory data test.
;; call: (fi1,fi2)=modul no. and (fi3,fi4)=data constant.
;; if test=ok then (fi5)=0 else (fi5)<>0
;; and (fi3,fi4)=addr and (fi1,fi2)=wanted data.
tes05:
w14:=fi2,, ;
; fi2 addr to reg 16
w14,,cjs gword ;
; read fi1 and fi2, result in reg 16,(modul no.)
w7:=w14,, ;
; save modul number in reg 7
w14:=fi4,, ;
; fi4 addr to reg 16
w14,,cjs gword ;
; read fi3 and fi4, result in reg 16, (testpattern)
w13:=w14,, ;
; save test pattern in reg 15
w14:=,, ;
; zero to reg 16 (addr)
w15:=w13,, ;
; test pattern to reg 17
ts051:
w14,,cjs dbwrit ;
; write pattern. (starting in cell 0)
w14:=w10+w14,s, ;
; incr. addr
w15:=--w15,, ;
; complement test pattern
w14,,cjp not zro ts051 ;
; is offset =0, if not jump to ts051
w14:=,, ;
; zero to reg 16 (addr)
.p!0058 m3503
;; rc3503 microprogram.
;; memory data test. (cont.)
;; call: (fi1,fi2)=modul no. and (fi3,fi4)=data constant.
;; if test=ok then (fi5)=0 else (fi5)<>0
;; and (fi3,fi4)=addr and (fi1,fi2)=wanted data.
ts052:
w14,,cjs dbread ;
; read mem
w15-w13,s, ;
; is read = wanted ?
w15:=w13,,cjp not zro te02 ;
; if not move wanted to reg 17 and jump to te02
w13:=--w13,, ;
; complement test pattern
w14:=w10+w14,s, ;
; is offset = 0?
w14,,cjp not zro ts052 ;
; if not jump ts052
w14:=fi5,, ;
; fi5 addr to reg 16
w15:=,,cjs wwreg ;
; zero to fi5 (test ok)
ccr,w14,,cjp tsrun ;
; clear cr f/f, jump tsrun
.p!0059 m3503
;; rc3503 microprogram.
;; routine to test that the level in cdi exist.
;; if level(cdi) exist then cdo<>0 else cdo=0
tslev:
w14:=cd,, ;
; level under test to reg 16
w14:=7f and w14,, ;
; mask for max 127 levels
w3:=w14,,cjs sitrn ;
; set level, save level no in reg 3
tsl03:
ir:=w0,, ;
; send sync-itr puls
int,w0,, ;
; dummy (delay)
w14:=int,, ;
; read inta answer to reg 16
w4:= equ w14,, ;
; >:reg16 to reg4
w14-w3,s, ;
; exist level ? (reg 16 = reg 3)
w0,,cjp not zro tsl02 ;
; if not jump to tsl02
cd:=0ff,w0,, ;
; load cdo reg with *ff (level exist)
ccr,w0,,cjp tsrun ;
;clear cr f/f, jump to tsrun
tsl02:
w4+w3,s, ;
;is it a higher level ?
w0,,cjp not acy tsl01 ;
;if yes jump to tsl01
cd:=0,w0,, ;
; load cdo-reg with zero (level exist not)
ccr,w0,,cjp tsrun ;
; clear cr f/f, jump to tsrun
tsl01:
w14,,cjs citrn ;
; clear the higher level
w14,,cjp tsl03 ;
; jump tsl03
.p!0060 m3503
;; rc3503 microprogram.
;; parity error routine.
;; (fi4,5)= module no.
;; (fi2,3)=address.
pxer1:
w4:=w14,,crtn not pty ;
w14:=fif,, ;
w14,,cjs wwreg ;
w14:=fie,, ;
w14,,cjs rwreg ;
w15 and w15,s, ;
w0,,cjp not zro pxer2 ;
w14:=fib,, ;
; addr fi5 to reg 16
w15:=,,cjs wwreg ;
; zero to reg 17, write zero into fi5
w14:=fia,, ;
; addr fi4 to reg 16
w15:=,,cjs wwreg ;
; zero to reg 17, write zero into fi4
w14:=fid,, ;
; addr fi3 to reg 16
w15:=w4,,cjs wwreg ;
; mem addr 8:15 to reg 17, write it into fi3
w14:=fic,, ;
; addr fi2 to reg 16
w15:=w4,, ;
; mem addr 0:7 to reg 17
w15:=swp,,cjs wwreg ;
; swap reg 17, mem addr 0:7 into fi2
w14:=fie,, ;
w15:=w2,,cjs wwreg ;
led:=6,w0,, ;
; send itr to 8085
pxer2:
w14:=fif,, ;
w14,,cjs rwreg ;
w14:=w4,,crtn ;
.p!0061 m3503
;; rc3503 microprogram.
;; parity error routine.
;; (fi4,5)= module no.
;; (fi2,3)= address.
wrreq:
w14:=fia,, ;
w14,,cjs rwreg ;
w14:=fi4,, ;
w14,,cjs wwreg ;
w14:=fib,, ;
w14,,cjs rwreg ;
w14:=fi5,, ;
w14,,cjs wwreg ;
w14:=fic,, ;
w14,,cjs rwreg ;
w14:=fi2,, ;
w14,,cjs wwreg ;
w14:=fid,, ;
w14,,cjs rwreg ;
w14:=fi3,, ;
w14,,cjs wwreg ;
w14:=fie,, ;
w14,,cjs rwreg ;
w2:=w15,, ;
w15:=,,cjs wwreg ;
w2:=<w2,, ;
; shift reg 2 < 1 parity error info
w2:=6 and w2,, ;
; mask with 6
w2:=perro+w2,, ;
; add parity base command
cd:=w2,, ;
; load cdo reg with parity information
ccr,w0,, ;
; clear cr f/f
w0,,cjp dupdat ;
; jump dupdat
.p!0062 m3503
xrbb:
++w7,,cjp not zro pupdat ;
w7-zdw,s, ;
w0,,cjp not zro bupdat ;
pupdat:
w14:=w1,,cjs sitrn ;
w0,,cjp eupdat ;
pxerf:
w0,,cjs pxer1 ;
w0,,cjp fetrd ;
;; instruction to transfer a word
;; from memory with module select m(s) to memory module select m(d)
;; before execution of this instruction the following working
;; registers had to be set.
;; w1(0:7) source module select;w1(8:15) destinatin module select.
;; w2 source address.
;; w3 destination address.
msetc:
w7:=zd1,,1 ;
w7:=swp,, ;
w14:=zd2,,2 ;
w14,,cjs dbread ;
w7:=zd1,,1 ;
w14:=zd3,,3 ;
w14,,cjs dbwrit ;
w0,,cjp nupdat ;
.p!0063 m3503
;; rc3503 microprogram.
;; fetch routine .
pfetch:
ra:=178,w13:=178,, ;
w1:=1f,, ;
led:=4,w6:=4,, ;
ir:=w0,,cjp fetch ;
.p!0064 m3503
;; rc3503 micro program
;; condition vector map.
.k=380
vec30:
w0,w0:=++w0,,cjp nupdat ;
led:=cd,w0+q,, ;
vec31:
led:=4,w6:=4,, ;
w0:=rd,,cjp qupdat ;
vec32:
led:=5,w6:=5,, ;
w0:=rd,,cjp qupdat ;
vec33:
w14:=w3,,cjs sitrn ;
w0:=rd,,cjp qupdat ;
vec40:
w7:=>c>w7,,rpct vec40 ;
zdw:=w4:=w7,,cjp nupdat ;
rr01:
w7:=>c>w7,,rpct rr01 ;
zdw:=w4:=w7,,cjp nupdat ;
rr02:
w7:=>w7,,rpct rr02 ;
zdw:=w4:=w7,,cjp nupdat ;
rr03:
w7:=>c>w7,,rpct rr03 ;
zdw:=w4:=w7,,cjp nupdat ;
.p!0065 m3503
;; rc3503 microprogram
;; this routine controls the enable/disable interrupt
;; flag in accordance to the value of ir(9:10).
;; ir(9:10)= 00 do nothing
;; ir(9:10)= 01 enable interrupt system
;; ir(9:10)= 10 disable interrupt system
;; ir(9:10)= 11 set level specified by q(11:15).
upitr:
w0:=rd,,cjp qupdat ;
; jump vec30
w0,,cjp vec31 ;
; jump vec31
w0,,cjp vec32 ;
; jump vec32
w0,,cjp vec33 ;
; jump vec 33
;; routine to shift right b01 the number of times
;; specified in the n-counter (am2910).
;; the specified operation is controlled by ir(9:10)
;; ir(9:10)= 00 rotate right
;; ir(9:10)= 01 logical shift right
;; ir(9:10)= 10 no carry shift right
;; ir(9:10)= 11 arithmetic shift right
rright:
w0,,cjp vec40 ;
; jump vec 40
w0,,cjp rr01 ;
; jump rr01
w0,,cjp rr02 ;
; jump rr02
w0,,cjp rr03 ;
; jump rr03
.p!0066 m3503
;; rc3503 microprogram
;; routine to shift left b01 the number of times
;; specified in the n-counter.
;; called by jump vector "rleft".
;; the specified operation is controlled by ir(9:10).
;; ir(9:10)= 00 rotate left.
;; ir(9:10)= 01 logical shift left.
;; ir(9:10)= 10 no carry shift left.
;; ir(9:10)= 11 dummy.
vec21:
w7:=<c<w7,,rpct vec21 ;
; ir(9:10)=00. b07:=b07 shift left n-times.
zdw:=w4:=w7,,cjp nupdat ;
; b07---> w(current level).
rl01:
w7:=<c<w7,,rpct rl01 ;
; ir(9:10)=01. b07:=b07 shift left n-times.
zdw:=w4:=w7,,cjp nupdat ;
; b07---> w(current level).
rl02:
w7:=<w7,,rpct rl02 ;
; ir(9:10)=10. b07:=b07 shift left n-times.
zdw:=w4:=w7,,cjp nupdat ;
; b07---> w(current level).
updw0:
w0,,cjp vupdat ;
; ir(9:10)=11. b0---> w0(current level).
nop
rleft:
w0,,cjp vec21 ;
; jump vec21
w0,,cjp rl01 ;
; jump rl01
w0,,cjp rl02 ;
; jump rl02
w0,,cjp updw0 ;
; jump updw0
.p!0067 m3503
;; rc3503 microprogram.
;; debug routine.
;; condition vector map,depending upon cs(0:1).
;; cs(0:1)= 11 goto grup3
;; cs(0:1)= 10 goto grup2
;; cs(0:1)= 01 goto grup1
;; cs(0:1)= 00 goto grup0.
dmap:
w0,,cjv 5 grup0 ;
; jump grup0
w0,,cjv 5 grup1 ;
; jump grup1
w0,,cjv 5 grup2 ;
; jump grup2
w0,,cjv 5 grup3 ;
; jump grup3
.p!0068 m3503
;; rc3503 microprogram.
vec13:
ccr,w0,,cjp tsrun ;
; clear cr f/f, jump tsrun
nop
vec14:
w0,,cjs getm ;
; load fifo with wanted word
ccr,w0,,cjp tsrun ;
; clear cr f/f, jump tsrun
vec15:
w0,,cjs getl ;
; load current level into cdo reg
ccr,w0,,cjp tsrun ;
; clear cr f/f, jump tsrun
vec16:
w0,,cjs getr ;
; load fifo with wanted w-reg contents
ccr,w0,,cjp tsrun ;
; clear cr f/f, jump tsrun
vec17:
ccr,w0,,cjs rdadr ;
w0,,cjp tsrun ;
vec18:
w0,,cjs putm ;
; write into mem cell in question
ccr,w0,,cjp dupdat ;
; clear cr f/f, jump dupdat
vec19:
ccr,w0,,cjp ;
; clear cr f/f, jump init
nop
vec20:
w0,,cjs putr ;
; write into w-reg in question
ccr,w0,,cjp dupdat ;
; clear cr f/f, jump dupdat
.p!0069 m3503
;; rc3503 microprogram
;; grup3 vector jump (test af cs(2:3))
;; cs(2:3)= 00
;; cs(2:3)= 01 get memory (getm).
;; cs(2:3)= 10 get level (getl).
;; cs(2:3)= 11 get register (getr).
grup3:
w0,,cjp wrreq ;
; jump vec13
w0,,cjp vec14 ;
; jump vec14
w0,,cjp vec15 ;
; jump vec15
w0,,cjp vec16 ;
; jump vec16
;; grup2 vector jump (test af cs(2:3)).
;; cs(2:3)= 00 read address (rdadr).
;; cs(2:3)= 01 put memory (putm).
;; cs(2:3)= 10 autoload (init).
;; cs(2:3)= 11 put register (putr).
grup2:
w0,,cjp vec17 ;
; jump vec17
w0,,cjp vec18 ;
; jump vec18
w0,,cjp vec19 ;
; jump vec19
w0,,cjp vec20 ;
; jump vec20
.p!0070 m3503
;; rc3503 microprogram.
vec05:
w0,,cjp rdat ;
; jump rdat
nop
vec06:
ccr,w0,,cjp fetcd ;
; clear cr f/f, jump fetcd
nop
vec07:
w0,,cjp gloff ;
; jump gloff
nop
vec08:
ccr,w0,,cjp dupdat ;
; clear cr f/f, jump dupdat
nop
;; grup0. vector jump (test af cs(2:3)).
;; cs(2:3)= 00 read data (rdat).
;; cs(2:3)= 01 exec next instruction (fetcd).
;; cs(2:3)= 10 dummy
;; cs(2:3)= 11 dummy
grup0:
w0,,cjp vec05 ;
; jump vec05
w0,,cjp vec06 ;
; jump vec06
w0,,cjp vec07 ;
; jump vec07
w0,,cjp vec08 ;
; jump vec08
.p!0071 m3503
;; rc3503 microprogram
;; map45. jump vector cs(4:5).
;; cs(4:5)= 00 set timer and console level (settc).
;; cs(4:5)= 01 set timer level (sett).
;; cs(4:5)= 10 set console level (setc).
;; cs(4:5)= 11 jump vector dmap.
map45:
w0,,cjp seti ;
; jump seti
w0,,cjp sett ;
; jump sett
w0,,cjp seto ;
; jump seto
w0,,cjv 4 dmap ;
; jump dmap (debug map)
;; parity error test for read byte.
;; left parity is don't care
;; 00 parity ok
;; 01 error
;; 10 parity ok
;; 11 error
bypar:
w0,,crtn ;
; return no error
w0,,cjp pxer1 ;
; jump to error routine
w0,,crtn ;
; return no error
w0,,cjp pxer1 ;
; jump to error routine
.p!0072 m3503
;; rc3503 microprogram.
;; vector table to test parity for bop format a.
;; 00 odd+odd continue
;; 01 even+odd branch
;; 10 odd+even branch
;; 11 even+even continue
xpeven:
ir:=zm0:=w0:=w10+w0,,cjp fetch;
w0,,cjp xbopa ;
w0,,cjp xbopa ;
ir:=zm0:=w0:=w10+w0,,cjp fetch;
;; rc3503 microprogram.
;; vector table to test parity.
;; 00 odd+odd --> even; continue.
;; 01 even+odd --> odd ; branch.
;; 10 odd+even --> odd ; branch.
;; 11 even+even--> even; continue.
peven:
w0,,cjp bopc ;
; jump bopc
w0,,cjp carg1 ;
; jump carg1
w0,,cjp carg1 ;
; jump carg1
w0,,cjp bopc ;
; jump bopc
;; vector table to test cs(0:1).
;; 00 jump gloff
;; 01 jump tsrun
;; 10 jump init
;; 11 jump tsrun
xgl00:
w0,,cjp gloff ;
; jump gloff
w0,,cjp tsrun ;
; jump tsrun
w0,,cjp ;
; jump init
w0,,cjp tsrun ;
; jump tsrun
.p!0073 m3503
;; rc3503 microprogram
;; vector table grup1. test of cs(2:3).
;; cs(2:3)= 00 dummy (return to test run f/f)
;; 01 dummy (return to test run f/f)
;; 10 level exist test
;; 11 tscom
grup1:
ccr,w0,,cjp tsrun ;
; clear cr f/f , jump tsrun
ccr,w0,,cjp tsrun ;
; clear cr f/f , jump tsrun
w0,,cjp tslev ;
; jump tslev
w0,,cjp tscom ;
; jump tscom
;; vector table to test parity.
;; 00 w2=w2 no parity error
;; 01 w2=1 right parity error
;; 10 w2=2 left parity error
;; 11 w2=0 left/right parity error
sparf:
rm:=w0:=w10+w0,,jmap 0 ;
; return no parity error
w2:=++w2,,cjp pxerf ;
; 1 to reg 2
w2:=w10,,cjp pxerf ;
; 2 to reg 2
w2:=w10++w2,,cjp pxerf ;
; 3 to reg 2
sparw:
w2,,crtn ;
w2:=++w2,,cjp pxer1 ;
w2:=w10,,cjp pxer1 ;
w2:=w10++w2,,cjp pxer1 ;
.p!0074 m3503
;; rc3503 microprogram.
fetch:
int,w6 and w11,s,cjp not cr debug;
fetca:
int-w1,s,cjp not zro disab ;
int,w0,,cjp zro disab ;
ra:=int,w1:=int,, ;
w13:=rd,, ;
ra:=w13,, ;
disab:
c:=rd,w0:=rd,, ;
bf:=0c0,w0,h , ;
bd:=w14:=w0,h r , ;
ir:=bd,q:=bd,h w s, ;
led:=w6,w2:=,,cjv 3 sparf ;
.p!0075 m3503
.mapk 200
;; table pro layout.
;; ic23,25.
;; address calculation jump table.escape=0.
.addr fax0,18
.addr rxc ; read status/word.
.addr wxcx0 ; write control/word.
.addr ild ; interlevel load.
.addr ist ; interlevel store.
.addr shiti ; shift/rotate,x=0.
.addr update ; dummy.
.addr bx001 ; format b,x=0,i=0.
.addr cx001 ; format c,x=0,i=0.
.addr fax0,18 ; format a,x=0.
.addr rbx ; read block of bytes/word.
.addr wbxx ; write block of bytes/word.
.addr ild ; interlevel load.
.addr ist ; interlevel store.
.addr shiti ; shift/rotate,x=0.
.addr update ; dummy.
.addr bx0i1 ; format b,x=0,i=1.
.addr cx0i1 ; format c,x=0,i=1.
.addr faxn,18 ; format a,x<>0.
.addr rxc ; read status/word.
.addr wxcxn ; write control/word,x<>0.
.addr ild ; interlevel load.
.addr ist ; interlevel store.
.addr shitx ; shift/rotate,x<>0.
.addr update ; dummy.
.addr bxn01 ; format b,x<>0,i=0.
.addr cxn01 ; format c,x<>0,i=0.
.addr faxn,18 ; format a,x<>0.
.addr rbx ; read block of bytes/word.
.addr wbxx ; write block of bytes/word.
.addr ild ; interlevel load.
.addr ist ; interlevel store.
.addr shitx ; shift/rotate,x<>0.
.addr update ; dummy.
.addr bxni1 ; format b,x<>0,i=1.
.addr cxni1 ; format c,x<>0,i=1.
.p!0076 m3503
;; address calculation map cont'd.
.addr faxn,18 ; format a,x<>0.
.addr rxc ; read status/word.
.addr wxcxn ; write control/word,x<>0.
.addr ild ; interlevel load.
.addr ist ; interlevel store.
.addr shitx ; shift/rotate,x<>0.
.addr update ; dummy.
.addr bxn01 ; format b,x<>0,i=0.
.addr cxn01 ; format c,x<>0,i=0.
.addr faxn,18 ; format a,x<>0.
.addr rbx ; read block of bytes/word.
.addr wbxx ; write block of bytes/word.
.addr ild ; interlevel load.
.addr ist ; interlevel store.
.addr shitx ; shift/rotate,x<>0.
.addr update ; dummy.
.addr bxni1 ; format b,x<>0,i=1.
.addr cxni1 ; format c,x<>0,i=1.
.addr faxn,18 ; format a,x<>0.
.addr rxc ; read status/word.
.addr wxcxn ; write control/word,x<>0.
.addr ild ; interlevel load.
.addr ist ; interlevel store.
.addr shitx ; shift/rotate,x<>0.
.addr update ; dummy.
.addr bxn01 ; format b,x<>0,i=0.
.addr cxn01 ; format c,x<>0,i=0.
.addr faxn,18 ; format a,x<>0.
.addr rbx ; read block of bytes/word.
.addr wbxx ; write block of bytes/word.
.addr ild ; interlevel load.
.addr ist ; interlevel store.
.addr shitx ; shift/rotate,x<>0.
.addr update ; dummy.
.addr bxni1 ; format b,x<>0,i=1.
.addr cxni1 ; format c,x<>0,i=1.
.p!0077 m3503
;; format a instruction jump map. escape=1.
;; ic 23,25.
.addr ldr1 ; ldr. load register.
.addr ldc1 ; ldc. load complement.
.addr ldi1 ; ldi. load indirect.
.addr str1 ; str. store register.
.addr sti1 ; sti. store indirect.
.addr xsrai ; xsr. exchange store and register.
.addr lba ; ldb. load byte.
.addr stba ; stb. store byte.
.addr adda ; add. add integer word.
.addr suba ; sub. subtract.
.addr anda ; and. logical and.
.addr lora ; logical or.
.addr xora ; xor. exlusive or.
.addr lce1 ; lce. load clear enable.
.addr mseta ; dummy.
.addr rsw1 ; rsw. read switches.
.addr bgwa ; bgw. branch if greater.
.addr bewa ; bew. branch if equal.
.addr blwa ; blw. branch if less.
.addr bgba ; bgb. branch if greater byte.
.addr beba ; beb. branch if equal byte.
.addr blba ; blb. branch if less byte.
.addr bsza ; bsz. branch if selected bits are zero.
.addr bopa ; bop. branch if selected bits has odd parity.
.addr update,8
.p!0078 m3503
;; format a instruction jump map. escape=1.
;; ic 23,25.
.addr ldr1 ; ldr. load register.
.addr ldc1 ; ldc. load complement.
.addr ldi1 ; ldi. load indirect.
.addr str1 ; str. store register.
.addr sti1 ; sti. store indirect.
.addr xsrai ; xsr. exchange store and register.
.addr lba ; ldb. load byte.
.addr stba ; stb. store byte.
.addr adda ; add. add integer word.
.addr suba ; sub. subtract.
.addr anda ; and. logical and.
.addr lora ; logical or.
.addr xora ; xor. exlusive or.
.addr lce1 ; lce. load clear enable.
.addr mseta ; dummy.
.addr rsw1 ; rsw. read switches.
.addr bgwa ; bgw. branch if greater.
.addr bewa ; bew. branch if equal.
.addr blwa ; blw. branch if less.
.addr bgba ; bgb. branch if greater byte.
.addr beba ; beb. branch if equal byte.
.addr blba ; blb. branch if less byte.
.addr bsza ; bsz. branch if selected bits are zero.
.addr bopa ; bop. branch if selected bits has odd parity.
.addr update,8
.p!0079 m3503
;; format a instruction jump map. escape=1.
;; ic 23,25.
.addr ldr1 ; ldr. load register.
.addr ldc1 ; ldc. load complement.
.addr ldi1 ; ldi. load indirect.
.addr str1 ; str. store register.
.addr sti1 ; sti. store indirect.
.addr xsrai ; xsr. exchange store and register.
.addr lba ; ldb. load byte.
.addr stba ; stb. store byte.
.addr adda ; add. add integer word.
.addr suba ; sub. subtract.
.addr anda ; and. logical and.
.addr lora ; logical or.
.addr xora ; xor. exlusive or.
.addr lce1 ; lce. load clear enable.
.addr mseta ; dummy.
.addr rsw1 ; rsw. read switches.
.addr bgwa ; bgw. branch if greater.
.addr bewa ; bew. branch if equal.
.addr blwa ; blw. branch if less.
.addr bgba ; bgb. branch if greater byte.
.addr beba ; beb. branch if equal byte.
.addr blba ; blb. branch if less byte.
.addr bsza ; bsz. branch if selected bits are zero.
.addr bopa ; bop. branch if selected bits has odd parity.
.addr update,8
.p!0080 m3503
;; format a instruction jump map. escape=1.
;; ic 23,25.
.addr ldr1 ; ldr. load register.
.addr ldc1 ; ldc. load complement.
.addr ldi1 ; ldi. load indirect.
.addr str1 ; str. store register.
.addr sti1 ; sti. store indirect.
.addr xsrai ; xsr. exchange store and register.
.addr lba ; ldb. load byte.
.addr stba ; stb. store byte.
.addr adda ; add. add integer word.
.addr suba ; sub. subtract.
.addr anda ; and. logical and.
.addr lora ; logical or.
.addr xora ; xor. exlusive or.
.addr lce1 ; lce. load clear enable.
.addr mseta ; dummy.
.addr rsw1 ; rsw. read switches.
.addr bgwa ; bgw. branch if greater.
.addr bewa ; bew. branch if equal.
.addr blwa ; blw. branch if less.
.addr bgba ; bgb. branch if greater byte.
.addr beba ; beb. branch if equal byte.
.addr blba ; blb. branch if less byte.
.addr bsza ; bsz. branch if selected bits are zero.
.addr bopa ; bop. branch if selected bits has odd parity.
.addr update,8
.p!0081 m3503
;; format a instruction jump map. escape=1.
;; ic 23,25.
.addr ldr1 ; ldr. load register.
.addr ldc1 ; ldc. load complement.
.addr ldi1 ; ldi. load indirect.
.addr str1 ; str. store register.
.addr sti1 ; sti. store indirect.
.addr xsrai ; xsr. exchange store and register.
.addr lba ; ldb. load byte.
.addr stba ; stb. store byte.
.addr adda ; add. add integer word.
.addr suba ; sub. subtract.
.addr anda ; and. logical and.
.addr lora ; logical or.
.addr xora ; xor. exlusive or.
.addr lce1 ; lce. load clear enable.
.addr mseta ; dummy.
.addr rsw1 ; rsw. read switches.
.addr bgwa ; bgw. branch if greater.
.addr bewa ; bew. branch if equal.
.addr blwa ; blw. branch if less.
.addr bgba ; bgb. branch if greater byte.
.addr beba ; beb. branch if equal byte.
.addr blba ; blb. branch if less byte.
.addr bsza ; bsz. branch if selected bits are zero.
.addr bopa ; bop. branch if selected bits has odd parity.
.addr update,8
.p!0082 m3503
;; format a instruction jump map. escape=1.
;; ic 23,25.
.addr ldr1 ; ldr. load register.
.addr ldc1 ; ldc. load complement.
.addr ldi1 ; ldi. load indirect.
.addr str1 ; str. store register.
.addr sti1 ; sti. store indirect.
.addr xsrai ; xsr. exchange store and register.
.addr lba ; ldb. load byte.
.addr stba ; stb. store byte.
.addr adda ; add. add integer word.
.addr suba ; sub. subtract.
.addr anda ; and. logical and.
.addr lora ; logical or.
.addr xora ; xor. exlusive or.
.addr lce1 ; lce. load clear enable.
.addr mseta ; dummy.
.addr rsw1 ; rsw. read switches.
.addr bgwa ; bgw. branch if greater.
.addr bewa ; bew. branch if equal.
.addr blwa ; blw. branch if less.
.addr bgba ; bgb. branch if greater byte.
.addr beba ; beb. branch if equal byte.
.addr blba ; blb. branch if less byte.
.addr bsza ; bsz. branch if selected bits are zero.
.addr bopa ; bop. branch if selected bits has odd parity.
.addr update,8
.p!0083 m3503
;; format a instruction jump map. escape=1.
;; ic 23,25.
.addr ldr1 ; ldr. load register.
.addr ldc1 ; ldc. load complement.
.addr ldi1 ; ldi. load indirect.
.addr str1 ; str. store register.
.addr sti1 ; sti. store indirect.
.addr xsrai ; xsr. exchange store and register.
.addr lba ; ldb. load byte.
.addr stba ; stb. store byte.
.addr adda ; add. add integer word.
.addr suba ; sub. subtract.
.addr anda ; and. logical and.
.addr lora ; logical or.
.addr xora ; xor. exlusive or.
.addr lce1 ; lce. load clear enable.
.addr mseta ; dummy.
.addr rsw1 ; rsw. read switches.
.addr bgwa ; bgw. branch if greater.
.addr bewa ; bew. branch if equal.
.addr blwa ; blw. branch if less.
.addr bgba ; bgb. branch if greater byte.
.addr beba ; beb. branch if equal byte.
.addr blba ; blb. branch if less byte.
.addr bsza ; bsz. branch if selected bits are zero.
.addr bopa ; bop. branch if selected bits has odd parity.
.addr update,8
.p!0084 m3503
;; format a instruction jump map. escape=1.
;; ic 23,25.
.addr ldr1 ; ldr. load register.
.addr ldc1 ; ldc. load complement.
.addr ldi1 ; ldi. load indirect.
.addr str1 ; str. store register.
.addr sti1 ; sti. store indirect.
.addr xsrai ; xsr. exchange store and register.
.addr lba ; ldb. load byte.
.addr stba ; stb. store byte.
.addr adda ; add. add integer word.
.addr suba ; sub. subtract.
.addr anda ; and. logical and.
.addr lora ; logical or.
.addr xora ; xor. exlusive or.
.addr lce1 ; lce. load clear enable.
.addr mseta ; dummy.
.addr rsw1 ; rsw. read switches.
.addr bgwa ; bgw. branch if greater.
.addr bewa ; bew. branch if equal.
.addr blwa ; blw. branch if less.
.addr bgba ; bgb. branch if greater byte.
.addr beba ; beb. branch if equal byte.
.addr blba ; blb. branch if less byte.
.addr bsza ; bsz. branch if selected bits are zero.
.addr bopa ; bop. branch if selected bits has odd parity.
.addr update,8
.p!0085 m3503
;; format b instruction jump map. escape=0.
;; ic 22,18
.addr ldr23 ; ldr. load register.
.addr ldc23 ; ldc. load complement.
.addr ldi23 ; ldi. load indirect.
.addr strix ; str. store register.
.addr sti23 ; sti. store indirect.
.addr xsrbx ; xsr. exchange store and register.
.addr ldbb ; ldb. load byte.
.addr stbb ; stb. store byte.
.addr addb ; add. add integer word.
.addr subb ; sub. subtract.
.addr andb ; and. logical and.
.addr lorb ; logical or.
.addr xorb ; xor. exlusive or.
.addr lce23 ; lce. load clear enable.
.addr msetb ; dummy.
.addr rsw23 ; rsw. read switches.
.addr bgwb ; bgw. branch if greater.
.addr bewb ; bew. branch if equal.
.addr blwb ; blw. branch if less.
.addr bgbb ; bgb. branch if greater byte.
.addr bebb ; beb. branch if equal byte.
.addr blbb ; blb. branch if less byte.
.addr bszb ; bsz. branch if selected bits are zero.
.addr bopb ; bop. branch if selected bits has odd parity.
.addr update
.addr update
.addr ildc
.addr istc
.addr update,4
.p!0086 m3503
;; format b instruction jump map. escape=0.
;; ic 22,18
.addr ldr23 ; ldr. load register.
.addr ldc23 ; ldc. load complement.
.addr ldi23 ; ldi. load indirect.
.addr strix ; str. store register.
.addr sti23 ; sti. store indirect.
.addr xsrbx ; xsr. exchange store and register.
.addr ldbb ; ldb. load byte.
.addr stbb ; stb. store byte.
.addr addb ; add. add integer word.
.addr subb ; sub. subtract.
.addr andb ; and. logical and.
.addr lorb ; logical or.
.addr xorb ; xor. exlusive or.
.addr lce23 ; lce. load clear enable.
.addr msetb ; dummy.
.addr rsw23 ; rsw. read switches.
.addr bgwb ; bgw. branch if greater.
.addr bewb ; bew. branch if equal.
.addr blwb ; blw. branch if less.
.addr bgbb ; bgb. branch if greater byte.
.addr bebb ; beb. branch if equal byte.
.addr blbb ; blb. branch if less byte.
.addr bszb ; bsz. branch if selected bits are zero.
.addr bopb ; bop. branch if selected bits has odd parity.
.addr update
.addr update
.addr ildc
.addr istc
.addr update,4
.p!0087 m3503
;; format b instruction jump map. escape=0.
;; ic 22,18
.addr ldr23 ; ldr. load register.
.addr ldc23 ; ldc. load complement.
.addr ldi23 ; ldi. load indirect.
.addr strix ; str. store register.
.addr sti23 ; sti. store indirect.
.addr xsrbx ; xsr. exchange store and register.
.addr ldbb ; ldb. load byte.
.addr stbb ; stb. store byte.
.addr addb ; add. add integer word.
.addr subb ; sub. subtract.
.addr andb ; and. logical and.
.addr lorb ; logical or.
.addr xorb ; xor. exlusive or.
.addr lce23 ; lce. load clear enable.
.addr msetb ; dummy.
.addr rsw23 ; rsw. read switches.
.addr bgwb ; bgw. branch if greater.
.addr bewb ; bew. branch if equal.
.addr blwb ; blw. branch if less.
.addr bgbb ; bgb. branch if greater byte.
.addr bebb ; beb. branch if equal byte.
.addr blbb ; blb. branch if less byte.
.addr bszb ; bsz. branch if selected bits are zero.
.addr bopb ; bop. branch if selected bits has odd parity.
.addr update
.addr update
.addr ildc
.addr istc
.addr update,4
.p!0088 m3503
;; format b instruction jump map. escape=0.
;; ic 22,18
.addr ldr23 ; ldr. load register.
.addr ldc23 ; ldc. load complement.
.addr ldi23 ; ldi. load indirect.
.addr strix ; str. store register.
.addr sti23 ; sti. store indirect.
.addr xsrbx ; xsr. exchange store and register.
.addr ldbb ; ldb. load byte.
.addr stbb ; stb. store byte.
.addr addb ; add. add integer word.
.addr subb ; sub. subtract.
.addr andb ; and. logical and.
.addr lorb ; logical or.
.addr xorb ; xor. exlusive or.
.addr lce23 ; lce. load clear enable.
.addr msetb ; dummy.
.addr rsw23 ; rsw. read switches.
.addr bgwb ; bgw. branch if greater.
.addr bewb ; bew. branch if equal.
.addr blwb ; blw. branch if less.
.addr bgbb ; bgb. branch if greater byte.
.addr bebb ; beb. branch if equal byte.
.addr blbb ; blb. branch if less byte.
.addr bszb ; bsz. branch if selected bits are zero.
.addr bopb ; bop. branch if selected bits has odd parity.
.addr update
.addr update
.addr ildc
.addr istc
.addr update,4
.p!0089 m3503
;; format b instruction jump map. escape=0.
;; ic 22,18
.addr ldr23 ; ldr. load register.
.addr ldc23 ; ldc. load complement.
.addr ldi23 ; ldi. load indirect.
.addr strix ; str. store register.
.addr sti23 ; sti. store indirect.
.addr xsrbx ; xsr. exchange store and register.
.addr ldbb ; ldb. load byte.
.addr stbb ; stb. store byte.
.addr addb ; add. add integer word.
.addr subb ; sub. subtract.
.addr andb ; and. logical and.
.addr lorb ; logical or.
.addr xorb ; xor. exlusive or.
.addr lce23 ; lce. load clear enable.
.addr msetb ; dummy.
.addr rsw23 ; rsw. read switches.
.addr bgwb ; bgw. branch if greater.
.addr bewb ; bew. branch if equal.
.addr blwb ; blw. branch if less.
.addr bgbb ; bgb. branch if greater byte.
.addr bebb ; beb. branch if equal byte.
.addr blbb ; blb. branch if less byte.
.addr bszb ; bsz. branch if selected bits are zero.
.addr bopb ; bop. branch if selected bits has odd parity.
.addr update
.addr update
.addr ildc
.addr istc
.addr update,4
.p!0090 m3503
;; format b instruction jump map. escape=0.
;; ic 22,18
.addr ldr23 ; ldr. load register.
.addr ldc23 ; ldc. load complement.
.addr ldi23 ; ldi. load indirect.
.addr strix ; str. store register.
.addr sti23 ; sti. store indirect.
.addr xsrbx ; xsr. exchange store and register.
.addr ldbb ; ldb. load byte.
.addr stbb ; stb. store byte.
.addr addb ; add. add integer word.
.addr subb ; sub. subtract.
.addr andb ; and. logical and.
.addr lorb ; logical or.
.addr xorb ; xor. exlusive or.
.addr lce23 ; lce. load clear enable.
.addr msetb ; dummy.
.addr rsw23 ; rsw. read switches.
.addr bgwb ; bgw. branch if greater.
.addr bewb ; bew. branch if equal.
.addr blwb ; blw. branch if less.
.addr bgbb ; bgb. branch if greater byte.
.addr bebb ; beb. branch if equal byte.
.addr blbb ; blb. branch if less byte.
.addr bszb ; bsz. branch if selected bits are zero.
.addr bopb ; bop. branch if selected bits has odd parity.
.addr update
.addr update
.addr ildc
.addr istc
.addr update,4
.p!0091 m3503
;; format b instruction jump map. escape=0.
;; ic 22,18
.addr ldr23 ; ldr. load register.
.addr ldc23 ; ldc. load complement.
.addr ldi23 ; ldi. load indirect.
.addr strix ; str. store register.
.addr sti23 ; sti. store indirect.
.addr xsrbx ; xsr. exchange store and register.
.addr ldbb ; ldb. load byte.
.addr stbb ; stb. store byte.
.addr addb ; add. add integer word.
.addr subb ; sub. subtract.
.addr andb ; and. logical and.
.addr lorb ; logical or.
.addr xorb ; xor. exlusive or.
.addr lce23 ; lce. load clear enable.
.addr msetb ; dummy.
.addr rsw23 ; rsw. read switches.
.addr bgwb ; bgw. branch if greater.
.addr bewb ; bew. branch if equal.
.addr blwb ; blw. branch if less.
.addr bgbb ; bgb. branch if greater byte.
.addr bebb ; beb. branch if equal byte.
.addr blbb ; blb. branch if less byte.
.addr bszb ; bsz. branch if selected bits are zero.
.addr bopb ; bop. branch if selected bits has odd parity.
.addr update
.addr update
.addr ildc
.addr istc
.addr update,4
.p!0092 m3503
;; format b instruction jump map. escape=0.
;; ic 22,18
.addr ldr23 ; ldr. load register.
.addr ldc23 ; ldc. load complement.
.addr ldi23 ; ldi. load indirect.
.addr strix ; str. store register.
.addr sti23 ; sti. store indirect.
.addr xsrbx ; xsr. exchange store and register.
.addr ldbb ; ldb. load byte.
.addr stbb ; stb. store byte.
.addr addb ; add. add integer word.
.addr subb ; sub. subtract.
.addr andb ; and. logical and.
.addr lorb ; logical or.
.addr xorb ; xor. exlusive or.
.addr lce23 ; lce. load clear enable.
.addr msetb ; dummy.
.addr rsw23 ; rsw. read switches.
.addr bgwb ; bgw. branch if greater.
.addr bewb ; bew. branch if equal.
.addr blwb ; blw. branch if less.
.addr bgbb ; bgb. branch if greater byte.
.addr bebb ; beb. branch if equal byte.
.addr blbb ; blb. branch if less byte.
.addr bszb ; bsz. branch if selected bits are zero.
.addr bopb ; bop. branch if selected bits has odd parity.
.addr update
.addr update
.addr ildc
.addr istc
.addr update,4
.p!0093 m3503
;; format b instruction jump map. escape=1.
;; ic 22,18
.addr ldr23 ; ldr. load register.
.addr ldc23 ; ldc. load complement.
.addr ldi23 ; ldi. load indirect.
.addr stri0 ; str. store register.
.addr sti23 ; sti. store indirect.
.addr xsrb0 ; xsr. exchange store and register.
.addr ldbb ; ldb. load byte.
.addr stbb ; stb. store byte.
.addr addb ; add. add integer word.
.addr subb ; sub. subtract.
.addr andb ; and. logical and.
.addr lorb ; logical or.
.addr xorb ; xor. exlusive or.
.addr lce23 ; lce. load clear enable.
.addr msetb ; dummy.
.addr rsw23 ; rsw. read switches.
.addr bgwb ; bgw. branch if greater.
.addr bewb ; bew. branch if equal.
.addr blwb ; blw. branch if less.
.addr bgbb ; bgb. branch if greater byte.
.addr bebb ; beb. branch if equal byte.
.addr blbb ; blb. branch if less byte.
.addr bszb ; bsz. branch if selected bits are zero.
.addr bopb ; bop. branch if selected bits has odd parity.
.addr update
.addr update
.addr ildc
.addr istc
.addr update,4
.p!0094 m3503
;; format b instruction jump map. escape=1.
;; ic 22,18
.addr ldr23 ; ldr. load register.
.addr ldc23 ; ldc. load complement.
.addr ldi23 ; ldi. load indirect.
.addr stri0 ; str. store register.
.addr sti23 ; sti. store indirect.
.addr xsrb0 ; xsr. exchange store and register.
.addr ldbb ; ldb. load byte.
.addr stbb ; stb. store byte.
.addr addb ; add. add integer word.
.addr subb ; sub. subtract.
.addr andb ; and. logical and.
.addr lorb ; logical or.
.addr xorb ; xor. exlusive or.
.addr lce23 ; lce. load clear enable.
.addr msetb ; dummy.
.addr rsw23 ; rsw. read switches.
.addr bgwb ; bgw. branch if greater.
.addr bewb ; bew. branch if equal.
.addr blwb ; blw. branch if less.
.addr bgbb ; bgb. branch if greater byte.
.addr bebb ; beb. branch if equal byte.
.addr blbb ; blb. branch if less byte.
.addr bszb ; bsz. branch if selected bits are zero.
.addr bopb ; bop. branch if selected bits has odd parity.
.addr update
.addr update
.addr ildc
.addr istc
.addr update,4
.p!0095 m3503
;; format b instruction jump map. escape=1.
;; ic 22,18
.addr ldr23 ; ldr. load register.
.addr ldc23 ; ldc. load complement.
.addr ldi23 ; ldi. load indirect.
.addr stri0 ; str. store register.
.addr sti23 ; sti. store indirect.
.addr xsrb0 ; xsr. exchange store and register.
.addr ldbb ; ldb. load byte.
.addr stbb ; stb. store byte.
.addr addb ; add. add integer word.
.addr subb ; sub. subtract.
.addr andb ; and. logical and.
.addr lorb ; logical or.
.addr xorb ; xor. exlusive or.
.addr lce23 ; lce. load clear enable.
.addr msetb ; dummy.
.addr rsw23 ; rsw. read switches.
.addr bgwb ; bgw. branch if greater.
.addr bewb ; bew. branch if equal.
.addr blwb ; blw. branch if less.
.addr bgbb ; bgb. branch if greater byte.
.addr bebb ; beb. branch if equal byte.
.addr blbb ; blb. branch if less byte.
.addr bszb ; bsz. branch if selected bits are zero.
.addr bopb ; bop. branch if selected bits has odd parity.
.addr update
.addr update
.addr ildc
.addr istc
.addr update,4
.p!0096 m3503
;; format b instruction jump map. escape=1.
;; ic 22,18
.addr ldr23 ; ldr. load register.
.addr ldc23 ; ldc. load complement.
.addr ldi23 ; ldi. load indirect.
.addr stri0 ; str. store register.
.addr sti23 ; sti. store indirect.
.addr xsrb0 ; xsr. exchange store and register.
.addr ldbb ; ldb. load byte.
.addr stbb ; stb. store byte.
.addr addb ; add. add integer word.
.addr subb ; sub. subtract.
.addr andb ; and. logical and.
.addr lorb ; logical or.
.addr xorb ; xor. exlusive or.
.addr lce23 ; lce. load clear enable.
.addr msetb ; dummy.
.addr rsw23 ; rsw. read switches.
.addr bgwb ; bgw. branch if greater.
.addr bewb ; bew. branch if equal.
.addr blwb ; blw. branch if less.
.addr bgbb ; bgb. branch if greater byte.
.addr bebb ; beb. branch if equal byte.
.addr blbb ; blb. branch if less byte.
.addr bszb ; bsz. branch if selected bits are zero.
.addr bopb ; bop. branch if selected bits has odd parity.
.addr update
.addr update
.addr ildc
.addr istc
.addr update,4
.p!0097 m3503
;; format b instruction jump map. escape=1.
;; ic 22,18
.addr ldr23 ; ldr. load register.
.addr ldc23 ; ldc. load complement.
.addr ldi23 ; ldi. load indirect.
.addr stri0 ; str. store register.
.addr sti23 ; sti. store indirect.
.addr xsrb0 ; xsr. exchange store and register.
.addr ldbb ; ldb. load byte.
.addr stbb ; stb. store byte.
.addr addb ; add. add integer word.
.addr subb ; sub. subtract.
.addr andb ; and. logical and.
.addr lorb ; logical or.
.addr xorb ; xor. exlusive or.
.addr lce23 ; lce. load clear enable.
.addr msetb ; dummy.
.addr rsw23 ; rsw. read switches.
.addr bgwb ; bgw. branch if greater.
.addr bewb ; bew. branch if equal.
.addr blwb ; blw. branch if less.
.addr bgbb ; bgb. branch if greater byte.
.addr bebb ; beb. branch if equal byte.
.addr blbb ; blb. branch if less byte.
.addr bszb ; bsz. branch if selected bits are zero.
.addr bopb ; bop. branch if selected bits has odd parity.
.addr update
.addr update
.addr ildc
.addr istc
.addr update,4
.p!0098 m3503
;; format b instruction jump map. escape=1.
;; ic 22,18
.addr ldr23 ; ldr. load register.
.addr ldc23 ; ldc. load complement.
.addr ldi23 ; ldi. load indirect.
.addr stri0 ; str. store register.
.addr sti23 ; sti. store indirect.
.addr xsrb0 ; xsr. exchange store and register.
.addr ldbb ; ldb. load byte.
.addr stbb ; stb. store byte.
.addr addb ; add. add integer word.
.addr subb ; sub. subtract.
.addr andb ; and. logical and.
.addr lorb ; logical or.
.addr xorb ; xor. exlusive or.
.addr lce23 ; lce. load clear enable.
.addr msetb ; dummy.
.addr rsw23 ; rsw. read switches.
.addr bgwb ; bgw. branch if greater.
.addr bewb ; bew. branch if equal.
.addr blwb ; blw. branch if less.
.addr bgbb ; bgb. branch if greater byte.
.addr bebb ; beb. branch if equal byte.
.addr blbb ; blb. branch if less byte.
.addr bszb ; bsz. branch if selected bits are zero.
.addr bopb ; bop. branch if selected bits has odd parity.
.addr update
.addr update
.addr ildc
.addr istc
.addr update,4
.p!0099 m3503
;; format b instruction jump map. escape=1.
;; ic 22,18
.addr ldr23 ; ldr. load register.
.addr ldc23 ; ldc. load complement.
.addr ldi23 ; ldi. load indirect.
.addr stri0 ; str. store register.
.addr sti23 ; sti. store indirect.
.addr xsrb0 ; xsr. exchange store and register.
.addr ldbb ; ldb. load byte.
.addr stbb ; stb. store byte.
.addr addb ; add. add integer word.
.addr subb ; sub. subtract.
.addr andb ; and. logical and.
.addr lorb ; logical or.
.addr xorb ; xor. exlusive or.
.addr lce23 ; lce. load clear enable.
.addr msetb ; dummy.
.addr rsw23 ; rsw. read switches.
.addr bgwb ; bgw. branch if greater.
.addr bewb ; bew. branch if equal.
.addr blwb ; blw. branch if less.
.addr bgbb ; bgb. branch if greater byte.
.addr bebb ; beb. branch if equal byte.
.addr blbb ; blb. branch if less byte.
.addr bszb ; bsz. branch if selected bits are zero.
.addr bopb ; bop. branch if selected bits has odd parity.
.addr update
.addr update
.addr ildc
.addr istc
.addr update,4
.p!0100 m3503
;; format b instruction jump map. escape=1.
;; ic 23,25.
.addr ldr23 ; ldr. load register.
.addr ldc23 ; ldc. load complement.
.addr ldi23 ; ldi. load indirect.
.addr stri0 ; str. store register.
.addr sti23 ; sti. store indirect.
.addr xsrb0 ; xsr. exchange store and register.
.addr ldbb ; ldb. load byte.
.addr stbb ; stb. store byte.
.addr addb ; add. add integer word.
.addr subb ; sub. subtract.
.addr andb ; and. logical and.
.addr lorb ; logical or.
.addr xorb ; xor. exlusive or.
.addr lce23 ; lce. load clear enable.
.addr msetb ; dummy.
.addr rsw23 ; rsw. read switches.
.addr bgwb ; bgw. branch if greater.
.addr bewb ; bew. branch if equal.
.addr blwb ; blw. branch if less.
.addr bgbb ; bgb. branch if greater byte.
.addr bebb ; beb. branch if equal byte.
.addr blbb ; blb. branch if less byte.
.addr bszb ; bsz. branch if selected bits are zero.
.addr bopb ; bop. branch if selected bits has odd parity.
.addr update
.addr update
.addr ildc
.addr istc
.addr update,4
!\f
!rc35mass 81 06 09 15 49 13 page 1
!
! 76 blocksread
▶EOF◀