Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-02 - decus/20-0027/rm08.mac
There are 2 other files named rm08.mac in the archive. Click here to see a list.
TITLE	RM08 SERIAL MAGNETIC DRUM SYSTEM
SUBTTL	DON WITCRAFT	4-14-66


IFN DRM08,<PASS2
	END>

,DRUM REACHES ORIGIN WHEN REM(TIME/4*17300) IS MINIMUM.
,AT THAT TIME WORDS BEGIN TRANSFERRING AT A RATE OF 1 EVERY
,4*132 QUARTER MICROSECONDS VIA DATA BREAK.

;DRUM DATA BLOCK

ENTRY DMDATA,DICDATA,DOCDATA

DMDATA:	EXP	^D4*132
	Z
	XWD	DACTIV,0
	EXP	DRMXFR
DICDAT:	EXP	17
	SIXBIT	/DRM/
	Z
	Z
	EXP	DRMENT
	Z
	Z
	Z
	Z
	EXP	DRCOML

DOCDAT:	EXP	17
	SIXBIT	/DRM/
	Z
	Z
	EXP	DRMENT
	Z
	Z
	Z
	Z
	EXP	DRCOML

;DRUM CONTROL REGISTERS

INTERNAL DCL,DFB

DCL:	0	;A 15-BIT REGISTER WHICH ADDRESSES THE NEXT
		;CORE MEMORY LOC. TO OR FROM WHICH A WORD IS TO
		;BE TRANSFERRED.  AS A WORD IS TRANSFERRED, DCL
		;IS INCREMENTED BY ONE.
DAR:	0	;AN 11-BIT REGISTER WHICH ADDRESSES THE DRUM TRACK
		;AND SECTOR WHICH IS CURRENTLY TRANSFERRING DATA.
		;THE 8 MOST SIGNIFICANT BITS SELECT TRACK, 
		;3 LEAST SIGNIFICANT BITS SELECT SECTOR.  AT THE
		;COMPLETION OF A SUCCESSFUL SECTOR TRANSFER (ERROR
		;FLAG IS 0) DAR IS INCREMENTED BY ONE.
DFB:	0	;DRUM FINAL BUFFER - 12 BITS.
;DRUM INSTRUCTIONS

INTERNAL DRCR,DRCW,DRCF,DREF,DRTS,DRCN,DRSE,DRSC

DRCR:	TRO	FLAGS,DRRC	;LOAD DRUM CORE LOC. COUNTER AND READ
	TRZ	FLAGS,DRWC
	JRST	DRCW1

DRCW:	TRO	FLAGS,DRWC		;LOAD DRUM CORE LOC. COUNTER AND WRITE.
	TRZ	FLAGS,DRRC
DRCW1:	MOVEM	AC,DCL
	TRZ	AC,7777		;CLEAR AC
	POPJ	PDP,

DRCF:	TRZ	FLAGS,DRCFLG+DREFLG	;0=>COMPLETION FLAG
	POPJ	PDP,		;0=>ERROR FLAG

DREF:	TRZ	AC,600000	;PARITY ERROR=>AC0
	TRNE	FLAGS,DRMPER
	TRO	AC,4000
	TRNE	FLAGS,DRMDTE
	TRO 	AC,2000
	POPJ	PDP,

DRTS:	MOVE	AC0,AC		;AC1-11=>DAR
	ANDI	AC0,3777
	MOVEM	AC0,DAR
	TRZ	AC,7777		;CLEAR AC
DRCN:	TLO	FLAGS,DACTIV	;START TRANSFER
	PUSHJ	PDP,DRMSTR	;START DRUM TRANSFER.
	JRST	DRCF

DRSE:	TRNN	FLAGS,DREFLG	;IF ERROR FLAG=0,PC+1=>PC
	AOS	PC
	POPJ	PDP,

DRSC:	TRNE	FLAGS,DRCFLG	;IF COMPLETION FLAG=0,PC+1=>PC.
	AOS	PC
	POPJ	PDP,
;DRUM SIMULATION

;DRUM IS A DUMP FILE ON DECTAPE OR DISK
;SECTORS ARE VERTICALLY STORED THREE TO A BLOCK, IE THE FIRST
;SECTOR IN THE BLOCK OCCUPIES BITS 0-11, THE SECOND SECTOR
;OCCUPIES BITS 12-23 AND THE THIRD SECTOR OCCUPIES BITS 24-35.
;THE DRUM ADDRESS SPECIFIED BY DAR CORRESPONDS TO BLOCK
;DBLK+[(DAR)/3], SECTOR REM((DAR)/3), WHERE DBLK IS THE
;FIRST BLOCK NUMBER OF FILE DRUM.

DRMENT:	SIXBIT /DRUM/		;DRUM FILE ENTRY.
	SIXBIT /DMP/
	0
DRCOML:	IOWD 200,DBUF		;DUMP FILE COMMAND LIST
	0
SECTOR:	POINT 12,0,11		;SECTOR POINTERS
	POINT 12,0,23
	POINT 12,0,35
DBUF:	BLOCK	200	;DRUM BUFFER
;INITIALIZE DRUM BUFFERS

;CLEAR DRUM FILE
;CALLED FROM CONSOLE BY DRMCLR$G

DRMEND=<DSIZE+1>/3


INTERNAL DRMCLR,EFLG9,EFLG10,DMOUT0
EXTERNAL CONSOLE,ERROR,FOUT,FRELEA

DRMCLR:	MOVE AC0,[XWD DBUF,DBUF+1]	;CLEAR DRUM BUFFER
		SETZM DBUF
	BLT AC0,DBUF+177
	MOVEI	FDB,DICDAT
	JSP	SRR,FRELEA		;RELEASE DRUM TO FORCE LOOKUP
DRMCL1:	PUSHJ PDP,DMOUT
	HRRZ	AC0,CDBLOCK(FDB)
	HRRZ	AC1,DRMENT+1
	SUB	AC0,AC1
	CAIGE	AC0,DRMEND
	JRST	DRMCL1
	JSP	SRR,FRELEA
	PUSHJ	PDP,CONSOLE



;WRITE DRUM BUFFER

;CALL	PUSHJ PDP,DMOUT

EXTERNAL FCLOSE

DMOUT0:	MOVEI	FDB,DICDAT	;OUTPUT INCORE BLOCK
	HRR	AC0,CDBLOCK(FDB)
	MOVEI	FDB,DOCDAT
	HRLZM	AC0,CDBLOCK(FDB)
	MOVSI	AC0,ENTRB		;BYPASS ENTER
	ORM	AC0,CFSTAT(FDB)

DMOUT:	MOVEI	FDB,DOCDAT
	JSP	SRR,FOUT
DMCK:	HRRZ	AC0,CFSTAT(FDB)
	TRNE	AC0,-1			;SIMULATOR ERROR?
	PUSHJ	PDP,ERROR		;YES
EFLG9:	MOVE	AC0,CDSTAT(FDB)
	TRNE	AC0,ERRORS-IODERR	;SIMULATOR ERROR?
	PUSHJ 	PDP,ERROR		;YES
EFLG10:	POPJ	PDP,
;START DRUM TRANSFER

EXTERNAL TIME

DRMSTR:	MOVEI	FDB,DMDATA		;SET LATENCY.
	MOVE	AC0,TIME
	IDIVI	AC0,DRMROT*4
	MOVEM	AC0,DTIME(FDB)
	TLO	FLAGS,DACTIV+DRMLAT	;ACTIVATE DRUM
	SETZM	DFB			;CLEAR DFB
	MOVEI	FDB,DICDAT		;HAS DRUM BEEN INITED?
	MOVE	AC0,CFSTAT(FDB)
	TLNN	AC0,INITB
DRMST1:	PUSHJ	PDP,DMIN		;NO. READ FIRST BLOCK TO INITIALIZE
	MOVE	AC2,DAR			;GET DECTAPE BLOCK FOR THIS REFERENCE
	IDIVI	AC2,3
	HRRZ	AC0,DRMENT+1
	ADD	AC2,AC0			;RELATIVIZE TO START OF FILE
	HRRZ	AC0,CDBLOCK(FDB)	;BLOCK IN DBUF?
	CAMN	AC0,AC2
	POPJ	PDP,			;YES
	HRLM	AC2,CDBLOCK(FDB)	;NO. READ NEW BLOCK INTO DBUF
	JRST	DRMST1

DMIN:	JSP	SRR,FIN
	JRST	DMCK

;TRANSFER DRUM WORD

INTERNAL DRMXFR
EXTERNAL FIN,FCLOSE


DRMXFR:	MOVEI	FDB,DMDATA
	MOVE	AC0,DRATE(FDB)	;RESET TIME
	MOVEM	AC0,DTIME(FDB)
	MOVE	AC2,DAR	;AC2:=DECTAPE BLOCK ADDRESS
	IDIVI	AC2,3		;AC3:=SECTOR
	HRRZ	AC0,DRMENT+1
	ADD	AC2,AC0		;RELATIVIZE TO START OF FILE
	TLZN	FLAGS,DRMLAT	;JUST FINISHED LATENCY?
	JRST	DRMXF2		;NO
	HRRI	AC0,DBUF	;SETUP SECTOR BASE ADDRESS
	HRRM	AC0,SECTOR(AC3)
	TRNN	FLAGS,DRWC		;WRITE?
	JRST	DRMXF2		;NO. READ.
	TRO	FLAGS,BRQFLG	;YES. REQUEST BREAK.
	POPJ	PDP,
DRMXF2:	HRRZ	AC0,SECTOR(AC3)	;DONE?
	CAIL	AC0,DBUF+200
	JRST	DRMDON		;YES.
	TRNN	FLAGS,DRWC	;NO. WRITING?
	JRST	DRMXF3		;NO.
	TLZN	FLAGS,DFBCHG	;YES. IS DFB READY?
	TRO	FLAGS,DREFLG+DRMDTE	;NO. TIMING ERROR.
	MOVE	AC0,DFB
	DPB	AC0,SECTOR(AC3)	;WRITE WORD.
	AOS	DCL			;INCREMENT MEMORY ADDRESS
DRMXF4:	AOS	SECTOR(AC3)		;INCREMENT SECTOR POINTK	4>
LINES
;DISPATCH TO LTC AT END OF BAUD TIME

INTERNAL LTC
EXTERNAL SREAD,SWRITE

LTC:	MOVE AC3,LFLAG(DDB)
	SKIPN	AC2,LOASS(DDB)		;IS OUTPUT IN PROGRESS?
	JRST	LTC2			;NO
LTC1:	LSH	AC2,1		;YES, SHIFT LOASS LEFT ONE.
	TLOE	AC3,LBIT		;ASSEMBLE LBIT IN LOASS
	TRO	AC2,1
	MOVEM	AC2,LOASS(DDB)
	TLZ	AC3,LRWB+LWB
	MOVEM	AC3,LFLAG(DDB)
	CAIGE	AC2,(AC3)		;FULL CHARACTER?
	POPJ	PDP,		;NO

;OUTPUT A CHARACTER

LTC4:	ANDCAM	AC3,AC2		;YES. REMOVE STOP/START BITS
	SETZM	LOASS(DDB)		;CLEAR LOASS
	LSH	AC2,-1			;RIGHT JUSTIFY CHARACTER
	ADDI	DDB,LOCDAT		;OUTPUT FILE DATA BLOCK ADR
	MOVE	AC3,CBUFH(DDB)		;OUTPUT BUFFEX&lP2e2e0H'w++h-0H+*:p	`P@/U6 V#a!6| X&!par`*v156@3,p+<d2`!lP p.tp6Zpez+:l2`34#a T#a4Z3,h+3 p38#a X#a+3ar,#g.l#a2,#a+0@@dr+G`RSOaR+Gd@t#/*#0 T#0 #. T#.@@+ydBp,#g  G#. X+ (F{.,0&+X A$?aH@+P A4@G$PaH+X., G#. X+1d1$+V:X+dHp@@X+1fl2 :+@Y+>+d+i+n+s+y+},!, `rG#0erG#. X+,p `rG#0erG#. HX+,p., `rG#0erG#. X+A* +>., `rG#0erG#. X+.
A*+>.,`rG#0erG#.:X+aT+>@@X+9>., A(A* `rG#0erG#. HX++>., #/ T#. G#. BX+ 9> #/ T#. +>`H+`H@A*`H A*`HF*`HF*`H,`H+	`H+
,p(*dJG*dH+
*
,
,#g`H+!@@`JlaJl`Jl A`H+`T89+aT8:`H@d
`HG
#C`Hd2,p,#g.,+'u#,#g"#$""""""%3%5"%)"%6""%N%P"%G"%F""%%"%"%""%%"%"%""""""""""""""""""""""""""#+#,"#-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#1#3""""""#1#3"#6"""""""#9"""""""#<"""""""#@""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""&&"&""""&&	&
&&
"""&""""""""""""""""""""""""""""""""""""""""""""&#"&%"&'"""&;&<""&@&F""&P&Q"""&S"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""mRl2,pdd2,p%"%?%$%}&*)%$%A%&H"rE~8"vEX`t
OE
KEP
LF^p$KtKFWWE
L
@|x#

Y
FFX

\

Z`qF


FWEB`uuXK
eFEoFXvK
^q
oGvF
f
@GG@
m@##vq
Y#"


w
#$
~

{

wX#*
`:,p,p,p}X#0/,A((H H#0,p/,A((H H#/,p/,A* #0(TzG
,p/,A* #.(T{G
,p/,A* #.(T{G
 #0(TzG
,p/, #. T#/ #0 T#0,p|0#C@j@@&"@@&"@@%@f@l#aS2@t	t T#i #b
&#bO@
,l4
.l2@@+> #C #- T#. T#/ #/ T#0,#gG
#C & d2+WA* & +#Rd2+?	` #b,#X,#g!4~ =P)@@p@@p@@p@@pZ`p6Vp@@X*t#Y!2,p!4~6\P)->$M*t#_,#gp#a@#c
x#c#gh#g,PZ#i+xy#i,0->#} p`Z,#g p`Z@,#gaZ +#q->$M p`Z@,#g>G,P:@,p->#{,0 peZ+#x :XZp,P->$M+#s`Z,#g p`Z@,#g,P,p-$Yl. +#~-$Yd. a@,$	an,$ 6*@`n  6U`nX+$an`,$"6$|06+$an@,$*,$/,$n
@,|l,| :!8~ `)[X2V*x$
58$=z$	l,\,|XZ,| $i`$} 
	j4J$aj+$8$| 6(V`A4V$08+$`n SDP
$i+$l.08,|!6an@!6G,|ml+$ml@+$+$L9$1`j`j+$C["v(V.2x!+$JP!X`n +$@,$n
@,|-$Ya@+$W,$n R`@n@j,|~x$Y @$b $}* $iS`*< $~!`+$Y!`Z$i.<X\$`Z$i*<!>$b*>+xx$i$]}P$n`$~,|,<QX8$ *8$!,\,|,<Z.8XX$uQ8$ X*8$u,\,|-$Y,$U:  $5T${l5V$|l,|$.$$b@$j.pe<t
@
@@@%}P%`R:,p@@d,pG
%+% 
%+%@@
$+%1X/+%lG8@ X%+%
dlr+%
 1X/+%	,(+%/8 +%	1X/+%@@*)+% 8+%	
@x%~h%`R:,pd A4 T%l2  #a.% V%36#a V#a A4
",pd,px%!4
x%"h%#aS%=x%%%<}H%)d@@%)?`%>,%7%>A46%T0v+%/ %>`V+%* T%)l2 #a.%" T%"34#a T#a,p`R:,pG
%)d,p,0%U+%5 <%$,#j7,p,P[%<1T*6,#g,paSe&hx%>vRx%?h%@aS%Qx%B%S~P%Fd@@%F <%A?`%R,#s A4Gt%FT%Rl2 #a.%? T%?24#a T#a,p`R:,pd@@%F,pp%RaSW h%T%'%)x%V@@p%WYC %{x%Y%y %t,p?`%|,%wV%|,p ^%} <%W,#s %},pW&
x%~p%a3 &x&&}H&`R:,pd,p 6+& 6+& 6+& 6+& 6+& 6+& 6+& 6+& 6+& 6+&l2?`&+&V& #a.%}36#a V#a,p <%,#s+&a2~L`_W x&x&h&'INXsx'x&'!x&!g~pP&" 4pAT&"d@,p*& d.  'n+&)*& l.  'n+&) T& A*A4 &"A6pG T&"d@,&U`R+&:l2@,&{ #a.6 3t.4j T&34#a T#aan +&: 4	.T#a:: `Vp@@ G&" X+H' `T,'
*& ,p@@&",pA*ar@,p #a.4 3t&,p:,p A4(T T&" A4`04l(T T&",pA* &"(T}A4`G
 &"(T{G
 #a.&4j06Zl
 &!6'o 8(XX`t`l
+&<aR:,p`R@:,p &"A4A*G
,pln +&] &	t T&at+''
&,#g,'#B+&\,#gb+&],#g`n +&n,&a X' Z':',p &"&4@ T'm:'m0tW+&p'mB',+&f,#g 'o :@`r@+&j<6&i`=&h,p X' Z' X'  Z' ,p#'mb',+&n,#g,&a X'  Z' ,pd2@l,p" & 4 @&!4~
&,#g^&b'!,#g&6?`'j+&yV'9&waV.4AA6$6.,p 4	.T#a:&"aX>&:aX,'?`' ,&l:`Tp@@: dVp@@ G&" X+H' aT,p 6' V&@@#'mb',,p,#gl@,p 4	.T#a:&"aX>&aX,'?`',&b':`Tp@@: dVp@@ G&" HX+aTp,pd2@l@,p,&{.4j T&,pp' I M&`~`'" &at,pB'!+&rb'!,#g,pat ,#g
&'p &,(G
&'u
 0T,,#g
&'v+&Yx'-'m@'@'
&"H0'-

MAY I DESTROY THE PDP-10 FILE STRUCTURE ON  (Y or N) Wp'vYES

 4'y T#i+#V
&*9
&*<
&*<
&*>
&*A
&*E
&*F 4)A T#i
2O@
,d4
.
&*G@@*8,(K[`!:u[h*,0Vx*z( :hZh*,1:+(+P *80X
( X*808 :@0x->@,p *80X
(X*808:@0x>@,p@:,(+((8~)6=:(+*+0X1X+*+1Xh
&*H %",(' V%"
&*I %?,(' V%?
&*J $,(' V$
&*K %,(' V%
&*L %},(' V%}+*+
&*M *O& 8<X*+(Vav+(),*
&*O@@*8,(1v+(0 *O& 1v:@,P+(
&*H <%$-4(9
&*I <%A-4(9
&*Q <%W-4(9
&*L <%-4(9
&*R <&-4(9+*+
"*S p,(G
"*S p,(G pRX
"*T,(G
&*T@@*8,(K,00X+(B Vp,(K0V Wp,(K p0VRV`,P2V->$M+( *V >4Z(K.:
"=~(H,p}:,(+(M+(N,((P1XhC,0A6p V#-,PA6(V~ V#/+*+,( A",0A6p V#. V#/,PA6(V~ V#0 4#D+(,),(A6 dpd V#.,(1Z+) 1X+(b A( ,a:d+(e,0 &6
7@,(w 6A85X(p,%u,%u,%u,P(4z 8X6)4,%u=x(r,p 6,%u 6,%u,p,(ta^,(t6V#.G6G6(Vz,%u ,(q &4
A$4&6(X. 6<4),%u+),p G#.(4~G#0(4z T*8,p@@#.!>|Yx)	Xx)	,a*~) 6@+([
@B @~@?~H?  8,(r 8,(r 6,%u #0(TG4#.G 8,(r 6,%u  8,(r,(t@@,),)'+),(t:&6
0V,(w>,)0 ,(k2>*7+),)0+)4^)% <%W->$M,)!+*+ *8t*W(4t*W[(B},pO@ 4 T*7+)@@*7,(1Z,pA6> VA6p V#.0X+)/,(A606  6 V*7:@,p:$*X6*X(V V#.,],p,),)'+) ,)06V#.G6G6(Vz
" ,* ,*2>*7+)4+)5,(,0 A"A6p V#. V#/,PA6(V~ V#0+*+
&*AP4!6y[X*0T`*v)C X*
&`+X*
&*Y)Tx 8,*
&*Z ,*
&*[ #0(Vl6
& #.(VzG6
" ,*
&*\`J
"*] ,*
&*] ,*
&*^ ,*
&*^S&" 8,*
&*_
&*` ,*
&*` ,*
&*a #/(Vl6
& #-(VzG6
" #C,*7@#a+'},)n
&*a@t	t/#i 8&4G(:~=x)c 6`z@+)i(Z>0V+)f 8)8
"1V
"*T1V
"*c=v)i
&*c+'}
&*e #a&4 V*8 8@&4G(:~=x)q 6`z@+)w(Z>`z@+)w(Z> 8)8
"1V
"*T1V
"*c=v)w *81V
&*g1V
&*h1V
&*h
&*c,p
"*S,*
&*_,p(6
 8 4)4
"=x*,p	*i*k0*mP*o=H*r=`*s>*t?*u?(*vW8*w<*y;*yp*z*|
"*S ,*
&*~ G#.(6x/6 8,*
&*_,P+'}'}*
*
'}*****'}'}'}'})F
&*~+*
&* ,*+'} 8,*
"+ 8+*@,(0X+*" #a+* (V. T*)34#a T#a+*+,PU4 T*)l2
&+@@+)Hz	?*%
&+34'}+(E&p(F#II (J#SI')HI@#QKbH#^M&`(1X#Me&h(f#DgL#Uu'(H(aIVh)
);gP([gH(U*+~H*8You have aN 8K simulated PDP8I(inline version) with an unpacked memory.

stop on illegal instructions
8*D1 DF32 disk
PLOTTER

*READERPUNCH*IKEYBOARDTELEPRINTERPLOTTER speed was z	cps, change to |P*QPRINTERDF32 modify this with H
#0
#.0
	SOURCE 
FLAGS	
PC  AC    MAMBDMA   
MQIRSR  RUNNING TIME  SECONDS


	SIMULATED RUNTIME   ,25,5,75CYCLING IN MEMORYEAE INSTRUCTION(*lUNRECOGNIZABLE IOTROTATE BOTH RIGHT AND LEFT?EFLG3x*rEFLG4x*sEFLG5x*tEFLG6x*uEFLG7P*vEND OF FILE ON PTREXITIOINI*zPDP8 HALTEDUNRECOGNIZABLE EXIT	PC 	CFSTAT 	CDSTAT 

BREAK POINTx+EH?
+'w