File ADVENT.LD

Directory of image this file is from
This file as a plain text file

P0H(I#+/n3.7;N? C GN K((@''U'!V.XUK5eX_UfJUQXU
_efmUt'U''U''U''U''U''U''U''U''U''UJQUX_UfmU''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U''U I4&K<&O!.]]sM.[M XQrDRbbFcbUUs_SrWGs(*zaGdG<a |GJL.1 /A10L1!b c@ed`e T U@WV`W -)Er 1@ABp
BLOCK 7 SHNDLR, VERSION /UNIT 0 ENTRYDDC"H(o,D%"(!z&(/"G"A`/G$DF'FFBB /@"Fl<$>(z6mn@G(/<E#D nGG&EEBB /9@"EDb)KHI0)~T RGS AT SHNDLR DCA SHNDLR SHND2, RAR /UNIT BIT IS IN LINC DCA SUNIT RDF X li ? ,\BfiO @y^rfi @Oy`r#fi O @|Up%d"lZb=3&UI0 b<&f |f9|RGST2(hyVG?|Kf }`  jnv 05Ux |80( PH@ D4I1&5
 )C* /("U-5h @Oy|+p/"#5h @ O3{( }nMH 5CF5d5S655CH5d5R655CT5dSsRwSNRNTFJ 5KmR&iS&SCj@.k/eS#lRSSt[ ,U?xH?
HNDLR CDF   |7M&LD i @HHd{5[OAn \I`] O2&^-&._ . lH`8@pD1HLT /ROUTINE TO LOAD DATA FROM BUFFER TAD I XPTR CIF ROMFLD JMP I GET PUT, 0 /PUT DATA INTO BUFFER TFLD2, HLT DCA I XPTR CIF ROMFLD JMP I PUT ERROR, CLA CLL /FORCE TURNAROUND AT RGO CIF ROMFLD ISZ TRYCNT /TRIED 3 TIMES? JMP I XRGO S6203, CIF CDF 0 JMP SEREX /YES..FATAL EXIT XRGO, RGO XF2SET, F2SET
/EQUIVALENCES FOR HANDLER EQUTMP=7750 BPTR=7751 XPGCT=7752 XPTR=7753 XWCNT=7754 WRQ=7724 WRQUAD, 0 /WRITE A 12 BIT TAPE WORD CIF ROMFLD JMP WRQ CIFR, CIF RO-#PAA@A"I22: RDQUAD, 0 $  A A I DATA W P# )0)0A#I#AHAMG=Z0+\2bI2G1r+#HA-\.\#Z#BN2+ 3MA DCA EQUTMP TAD EQUTMP AND SCKSUM A;$@bl '$rFn$| 0!@p@:b9O1.nnnn$.A~:;dl!02/]!OG,e!cg(-Eeh.b1*&/)&*s0 /)$'z *b* j1*&*s++b n 2h+2(*)D,"E
0 #\`pcf(/Ag"(BziH/hd" EH2d2eh&20lln /H,
mB[lj`?]j#DnlH/&jGOE <kI)S? @cp`{T G97b% $M\ &Z&E&tu.z@tb n o`sKt*Mwqpb/\b1\b6Eb4`x0ot/u.Iz@/bo/t.n/ |!/2ytE q np\&rq npZ&suu.vr@ bo@nq npE&M?0@p@o8&AN2 AIRRPU"?/ % ``P`@`0@`h 0@ \E&@&gp|,N (:%!g0--%pc `y(0o!)4$* ;*@1/\`/r :(yPC.I%A%Y$Y ]J']F'X X ?;<!:VP"Q "[bp d&g#9!\t@_ ^NoxT#a-^
[{*0.^  7tW i2%x^ P"#2 4dK;! "aP+#?'/]/",{rS9 )EK1;"!.)! (S:!.3-2p?"&
{<@p Gs^ .)!6*(.)!7'(;"5u!w@l OSQ#9q|<^ #-<$[ 3O>"Y% Gi EVG_p"ODqQw.S^  K M"<!p@L*ppm &=S>Ih 9 \?" e(.K!D5(xH"!`BL ($q9O[EJ\
?A*%1d'e"  G2 $@V *$ / / .ZAP *.R1 / / $END
>. @r I(Bpp60K60p;*MP^ EN60V9 7#/E!J-Y<!IT BIT8, TAD I BUFADD /GET THE HIGH FOUR BITS ALREADY SET AND K7400 /ONLY THOSE JMS I PXFERB /GET THE LOW EIGHT BITS JMS STASH /STASH IN BUFFER ISZ DWCNT /CHECK WORD COUNT SKP JMP I P2ENT /RETURN IF OVERFLOW JMS I PCHKSE /CHECK END OF SECTOR JMP BIT8 /NOT YET ISZ SECCTR /READ BOTH EIGHT BIT SECTORS? JMP BIT8 /NOPE. JMP READ /YUP. READ FOUR BIT NOW.
/ WRITE ROUTINE - WRITES FULL BLOCKS ONLY, PACKS /USING COS-310 SCHEME. WRITE, ISZ P2ENT /POINT TO WRITE RETURN JMS I PLOADC /SEND FILL BUFFER COMMAND WRT4, TAD BUFADD /SAVE BUFFER ADDRESS DCA BUFSAV WRT4LP, JMS GETBYT /GET A BYTE FROM THE USER'S BUFFER AND K7400 /HIGH 4 BITS ONLY RTR DCA TEMP JMS GETBYT /NEXT WORD AND K7400 BSW /INTO POSITION TAD TEMP /GET THE LAST WORD RTR JMS I PXFERB /GIVE TO RX01 JMS I PCHKSE /CHECK IF FULL JMP WRT4LP /GET ANOTHER BYTE CLA CLL CMA RAL /SET AC=-2 DCA SECCTR /DO 2 SECTORS OF 8-BIT. TAD BUFSAV DCA BUFADD WRT8, JMS GETBYT /GET A WORD JMS I PXFERB /GIVE TO RX01 K76002, 7600 /Clear the word written. ISZ DWCNT /CHECK WORD COUNT SKP JMP I P2ENT /ALL DONE JMS I PCHKSE /CHECK IF MORE JMP WRT8 /KEEP FILLING ISZ SECCTR /BOTH SECTORS DONE? JMP WRT8 /NOPE. JMP WRT4 /YEP. GO BACK TO 4 BIT.
CALENT, STASH, 0 DCA I BUFADD /STORE IN BUFFER ISZ BUFADD /RESET POINTER LNKSAV, 0 /Covers skip. JMP I STASH /RETURN SETUP, TAD PXFERB /ROUTINE TO SET UP SNA /POINTERS TO PAGE 1 DWCNT, JMP INITND /LOCS; USED ONLY ONCE BUFADD, TAD P2ENT /AFTER LOADING, TIA B@INASG"0MN@MN@@I03I13MX@MX@@A06A16 @DM"XX3ICO@SSQDSNCSTN
APHR@@HRGTPTHEF0LGp@TN@FX"IN%ICLGOHMDO1LE@N@G@L@GLEI RPWPRPPUE@ER FXYCLC@ C 0 ESNI4NB4pRA .COMPILE MOVE.R1<SRC:MOVE.RA .COMPILE PCT.R1<SRC:PCT.RA .COMPILE PSPEAK.R1<SRC:PSPEAK.RA .COMPILE PUT.R1<SRC:PUT.RA .COMPILE SMALL.R1<SRC:SMALL.RA .COMPILE RKB.R1<SRC:RKB.RA .COMPILE RND.R1<SRC:RND.FT/N/Q .COMPILE RSPEAK.R1<SRC:RSPEAK.RA .COMPILE SEED.R1<SRC:SEED.RA .COMPILE SUSPND.R1<SRC:SUSPND.RA .COMPILE TERMIN.R1<SRC:TERMIN.RA .COMPILE TRVLOC.R1<SRC:TRVLOC.RA .COMPILE VOCAB.R1<SRC:VOCAB.RA .COMPILE YES.R1<SRC:YES.RA / / / Now to load 'em up! / / .R LOAD *ADVENT<ADVENT.R1,RND.R1,GETIN.R1,DECODE.R1,BITSET.R1,PCT.R1,IO.R1 *SEED.R1,SUSPND.R1,DSTROY.R1,JUGGLE.R1,MOVE.R1,PUT.R1,CARRY.R1,DROP.R1 *TERMIN.R1,SMALL.R1,PSPEAK.R1,RSPEAK.R1,YES.R1,A5TOA1.R1,VOCAB.R1 *HERE.R1,LIQ.R1,LIQLOC.R1,DARK.R1,TRVLOC.R1,BUG.R1/O *INITAD.R1 *RKB.R1 CLA CLL IAC RTL /Set 4 into AC. AC0006= CLA CLL CML IAC RTL /Set 6 into AC. AC4000= CLA CLL CML RAR
DECIMAL SIZE=658 OCTAL *0 /BUILD Header block -3 /Three entry points DEVICE BYTE /Group name DEVICE SYS /Permanent name:SYS DEVTYP^10+4000 /Device Control Word SYSENT&177+6000 /Entry point 0 SIZE DEVICE BYTE DEVICE RXB0 /Entry point name DEVTYP^10+4000 /Two-pages long, SYSENT&177+5000 /Entry point, co-resident with SYS 0 SIZE DEVICE BYTE DEVICE RXB1 /Entry point for drive 1 DEVTYP^10+4000 DISK1&177+5000 /Location 0 SIZE
/Secondary boot /The primary (toggle-in) boot is responsible for getting /this code loaded into 7400-7577 by reading the first two /sectors of block 0. This code then reads the second half of /block 0 into 7600-7777 and reads block 66 into 17600-17777 and /27600-27777. STRTBT-ENDBT /Minus length of bootstrap. RELOC 7400 /Loads here. STRTBT, IFDEF SAVDAT < CDF 10 TAD I DATPTR DCA DATE CDF 0 > TAD CSECLS /Reset sector list pointer DCA SECPTR JMS RDSEC /Read the third sector of block 0 JMS MT8 /Read the sector to 7600-7777 TAD C7600 /Reset pointer DCA BTPTR JMS RDSEC /Read the first sector of block 66. CDF 10 /Want to read the first half to 17600 LP4, JMS BTXDR /Get a byte. CLL RTL DCA TEMPLC /Do this again TAD TEMPLC CLL RTL DCA I BTPTR /Stash the first ISZ BTPTR /Point to next TAD TEMPLC BSW DCA I BTPTR ISZ BTPTR /Done yet? JMP LP4 /Keep trying ISZ LPCTR /Read 
"F 6 N$6%FQ%J$:$ N%$c n |`(!z{| {K(Q(  ~G}&06z|0b!{if>f;<"FnziQ@ pD3&!LM.K0yK(xK(Q0zI]AyY4TMAR0 X ES3  e@BP@F/@ )W3K<_
lra&N ,[_b(ze[ ^6 ^Cx(w_e`Fnx`cVdW6Ca.^ L^0?/.E"`9z^c(:z f[&V VbJ n VbV n^d ^C`Xc'LU,~(/y]9c @0`v9= _B}]&]]6] /e|2v_b Lw v]&ef?&o}?x"""Bu(~""ts"&x0 t$k;CM(&"@"z6"bc70~"0CjMG 0r }0&@/3~"66&C|%{q)~0"~p'&@>uo %u&sr&4H/Cz)< hhC(M{<<b!;f@/zMM0yh&h<6<!.;xbwgv[{p
Yb! l !tn,E <!qzhgD}LG(*A C n |`&(?4.fnb""cac 0z"DJ"Cx$"bt" n~}'cx!"n0"{4z :
7 '"&ff" 7"D< $ & Dn "Mh/v)8d""b#Nkn&M"@T{ ?TTK>>|9>>4| bm)m`T)jG)s0<m);}&z"(:{yY? (?T}) <Gk#x
~~r b!g '}(&|+&f,f{=&A2&mzyxy(b Vz(+D'$7 .+b('zb>.bwY(/v)uy)ts)r)2}" EzqCRc IGw Kp( b n chc(Y0| {| {)co7vF *:&3
OT)08D`B7N^taFA,&d=b=fn,h==t==2D 8%=&2&0.fo =; }a 0V>bVbnVVbn`~)-J}) ff }9>J !6 j8W!|{l <}!Hzr{)d: >f!.)d>!by`)W xwdnv})>& )8j@?0 @ cY0DJ^`J n~} l <|| <{zsyxwC v@J nux# KHxStJ nsr'xq0Fnpb KJN0FB1MR0A4MY0JN5JL5AG5SP1OT0NV3DC1e h0mq;v{;< LLL $L'+L.3LDT T ?A@K@FpdP6@t?+MT @BLO5
A@P0EEI@@O@DOD$0A@P#ARL 3PTNU$U@AL SCM3O@PF0V@K G2l>n>Pp>r>t^@vNxNz|>~zoCpz oFPoFToFRoFVoFXoFZo/`^6q~&$}"H|r~H. f0!b{bl <&Jnk56g08f))f))f n;"<=&0b,dz0'y2ti%'xy0ki?Neimi?ki?mi?mi?m)?EiFf~w ?v|3H td"fuP"(ZU#8CVR1R@VR A@18IH<p+PU p>vy!fn$(/]"@zr0!f0r (z(/$X!f$"k><*]#*|y\Z*X0"r(]g#fc@n#2f~"2gr"r#r'gp'&0b*0r (<z'h9 'bfn(?<"(bz@&c##7%cn"":z]J]J 'g~'&$!"iy'c}"@Oi .F."c%#s&v{gDs~"n`:kGOt)~}|N(/{2bziz)m&Ykf+(f# "y xin$J /P("fnl < (o. ?$)x) bwc(rvs+'1Bk~i0}is"kbld{+$r dz}IzEY!.k&u$^o&Yk&on& Xb lP 6{p1
B@/|zLerP&[R(/ "q~tBFg~lif.H>(}  ..r|/r{/r@ubo./F2fzy'x & gw ' .bH/bnf g '2"2yevV$qW} !>cnFd 72 '5 '5$R;*&lui%j(Z"&"J.x"btt)#@>&&7%cn"%Zz!X(@*d0;)9#.'/~',(/0&}C< lv_|q)zvn /&{Cz |Cytx7 w'vC}2FXon~v <cGu22P3b8<zvi2t's&v <x2'2'}IdH` rB qbjbc66bJnn 6o s s tUJp6& fk4ncd&kCAn6V32=Fn x(/ .({j&h9j(&&l(# zi&~ &}y."hzvdyCxi&oD%>5f&@>/>&/&'>/&%c.>&>j &z.%'>.&)L2g02fsgrtphU#"wGR9"a>% ?^##a&cU{"%7#& U67 C (Oe6(+"+b(ekly|3xJ szr2) pv&xE |'^\8.PZtW@0?Votrqpn}ePdKr2*whgD*%xDuTd#iBpN &W ?|Ki- & C! d h?#"@~~J. n,~}28b }id@ N0b*% %%b&*kL#A RG2N VR1MDR O R0Sx;RRCx``xXOX ?U!,]+ . njj` z(j{~z ~)jv?R?y   cQ6Uot's type DCA I RX2PT JMP I C7400 /Start the secondary boot. BTREAD, RD4BT /Fake return first time thru SDN JMP .-1 /Wait for done flag to set BTRD1, AC0006 /Send read sector command LCD TAD I SECPTR /Get sector number JMS LOAD /To the RX FIXSEC, AC0001 /Assume track 1 until secondary boot. JMS LOAD /Send to RX CLA CLL TAD C102 /Empty buffer, 8-bit mode SDN /Wait for done. JMP .-1 LCD /To RX RX1SKP, SKP /Cleared if we are an RX02 JMS LOAD /If RX02, do an extra XDR JMP I BTREAD /All done. TEMP=. LOAD, 0 STR /Wait for TR flag JMP .-1 XDR /Send/get byte JMP I LOAD ENPUNCH
/ The coding for the handler /follows. The first page contains the entry point at /7607 for SYS:, some initialization code, /several subroutines, and the return. The "main line" /is in the second page, which acquires and decodes the /arguments, then executes the read or write routine, /which does the byte/word translation. Each byte is /sent or fetched by the first page routine CHKSEC /which also reads or writes a new sector when /necessary. Three sectors are used to store each /block, and every three sectors are interleaved. /The total number of blocks (658) is mapped /sequentially up the floppy. Block 0 uses track 1, sectors /1, 4, and 7. Block 1 uses track 1, sectors 10, 13, 16, etc. /Track 0 is not used. *200 /First handler page RELOC 7600 /Loads into field 0 locn. 7600-7777 ZBLOCK 7 /Actually starts at 7607. SYSENT, DISK0, VERSION /Entry point for SYS: and RBA0: K7600, 7600 /Clears the AC. JMP SETDRV /Set drive to zero and continue. IFNZRO .-7612 <?Build will bomb!> WASTE, 3 /Flag as 2-page.
/Put some constants here to pad the CIF below to 7642: KM32, -32 K32, 32 CDIF0, CIF CDF 0 /The entry point for drive one: DISK1, 0 CLA CLL TAD DISK1 /Move the user call pointer to the common location DCA DISK0 TAD K20 /Get the bit selecting drive 1 /And fall thru to the common code. /Get the user's data field for return. SETDRV, DCA FLMTCD /Set the drive bit of the command. RDF /Where was I called from? TAD CDIF0 /Create a CIF CDF for the guy's field DCA RTNDF /Stash it away where it will do the most good. TAD I DISK0 /Get the first argument (read/write) RAL /Put read/write bit in link (1 is write) SNL CLA /Skip if write, if skipping set fill buffer cmd. CLA CLL CML RTL /Put fill buffer cmd in AC, leave link 0 TAD FLMTCD /Get the drive number already set. DCA FLMTCD /Stash command. /Now, link=0 for read, 1 for write. TAD K7600 /Set byte count for write. K20, SNL /Skip if write. STA /Want an immediate read. DCA BYTCNT /Set counter: -1 for read, 7600 for write. TAD DISK0 /Get the argument pointer for the other page. IFNZRO .-7642 <?Fortran and BASIC will STB!!> CIF 20 /This must be at 7642 for BASIC and F4! JMP PAGE2 /Start the I/O on the other page.
WRTRT, JMS DSKRW /Return from write RDRT, ISZ DISK0 /Point to normal return BADRT, RTNDF, HLT /Set to user's field CIF CDF. JMP I DISK0 /Return. CHKSEC, 0 /This checks the byte count for a sector. CLA CLL /Zap out the AC ISZ BYTCNT /Done the buffer yet? JMP CHKRTN /Nope. JMS DSKRW /Read or write it. ISZ BKNO3 /Point to the next sector. TAD FLMTCD /Give the control the data transfer command - JMS LOAD0 /Read or write buffer as set earlier. ISZ CHKSEC /Skip on return to tell him it's a new sector. TAD K7600 DCA BYTCNT /Reset the counter. CHKRTN, CIF 20 JMP I CHKSEC /Finis!
/This routine is used to load registers in the RX. /If done is set, it loads a command (after setting the 8-bit /mode bit). If transfer request comes up, it will transfer a /byte to the RX. It assumes that the caller knows the state /of the flags and where the data is going. There is also a /routine in field 0 for calling this from field 2. LOAD0, HLT /Load RX registers LOADDN, SDN /Done flag up? JMP TESTTR /No - check xfer req. TAD K100 /Oh Boy! let's see...set the byte mode... LCD /Then to the RX as a command.... RXSKP, /Set at boot time to SKP (RX01) or NOP (RX02) IFZERO RXTYP-1 <SKP> /RX01 instruction for BUILD time IFNZRO RXTYP-1 <NOP> /RX02 instruction for BUILD time SKP JMP I LOAD0 /And return! Easy, huh? TESTTR, STR /Is the xfer req flag up? JMP LOADDN /Neither flag yet. Hope one will come up soon. XDR /Transfer a byte to or from RX (depends on function). JMP I LOAD0 /Back to the caller!
DSKRW, 0 /This reads/writes the sector. AC0004 /This bit makes read/write out of fill/empty TAD F|pppGw^ !
gAZ%xM!ELG^L('8Z@+ 2#,* AD"L"3"4 o -* D.$ps^ @` P-v P O*OZD"L"3A
HA@$  YBB"l,\BB")"`,Tb8\B"7"c&AT <**m*ML@ D2DL"O"P @ 7 O I*k k DD*LO*A@@@k",2 002Q0OD+L++  0@@@p  :0D+L+AHAHAHA@
  m032)222 2\2`R2K]2Ob 202?23]ROb202<20]ROb2-2E2-]ROb)2-2B *]ROb32-2?2']ROb=2-2<2$PPR:2)@E SDE+LV+W+\K1 z P 0, DCA CALENT /Save the```!-  r0r0DE+LV+A LHHHHBIFK1J)fB]A@lv `LTSF`2JiL
     D4K, <!Bj @ ,  D4&, <!$Bw @ ,4B& @<!T,   @ ,4B& @<!T$,]'.,,z+ ]Br7BB}< -H@]G&N,H,,, <! P ,B:@i@k\\2mBz2iBk@$B B'@ @!]  @4!<!]  E!Rx@P]\2R}2RR'B'KG6002 /Keep only the word count bits. CIA /Get the negative word count. DCA DWCNT /Store  -`DbLRmRnoYnt to next aet, TAD I CALEN g-  PDb-Lm-AHA@`v-'-X(` SR lIs'+ O0L5 OVR
XCL0ZR.o@. TDDLRORPkPnumber to start at. CLLP@ /Mu pI- @@@@  @ 
@@@kPDD-LO-AHAHA@ |@>. jTR<T+UQ&k-s. EDJLbUbVck number. (Go@`ords!) TAD @O. q`DJ.LU.AHA@\ *.a.
R`q.qb}o`field 0 SOB D.L$.%.or counter. BUFSAV, /Save buffer  `ere too. BUFCDF, 
0 /Change to t@```h` /o@`@`D.L$.A LHTb2
D&/`].H.A2` SLO`  ]BOr3rQbch,<R  4<-o  ,B>r{b{b|pYSDS/L^/_/ _gx 4 f the block, and /th Xpz/z_DSLr^|Ap\/z//d/?/O5 DLr!r"CxKSEC /Start the read.@ 0@ DIS 0/ =pD/L!/AHAHA@4[/ B_p -Brp4Brpnp]^ r/n/-/P]T =/  / G!E2Me by two (there are two @`rds ` -E M AHA@  A-\OP\rSO,\/-    A@FE` Ml m MS RXTRNS /Get a byte @` TL f PE`MlA
HH5B/ <  \\-\a gu%> ) gW g@ )RL )A ) )Y !P 8EV Mb c guy's buffer. TA@`/Get the \ ~PEVMbA
HH5B& <%!!\M\a \,! -]~g })gW~ g! EE>MIJesector done  SKP /Nope. Che `C! eE>!MI!AHAQHH@\/!!!e!6!DKE Mcunt done? JMP @@/Nope. Keep f `! wy.1QE MA
HH \l-p@A ,\.\!'!A$V!@, BVLY#1!'!!"DKExM"t)l something happens. FIXED, TAD B @}!  Ex!M"AHA@ YB2"
" E`HE?"MJ"K"the sector counter (fop@tsec D -2. DCA SECEV` H` h   8 f"fRE?M"JA
HHH!"R]v!"\"C21"n"_"_"_"_"_ B\ B\ Bl Bl&\"K&/*` AEE T`QUSA NS'@:
} j ]v!}"j"
} z ]v!}"z"'#uqE~M" 2 : ISZ DWCNT /Is word c  ? @# %0E~"M #AHAHAHA@I#`#n#BX62e1```#j#%':g+,)I'g*)<'g*,=)00AEu#M##ght bitter. JMP @ Pu bi z 0
/ Writ@P #SEuM2A0
HH@  < h#-V 0Tb5%[# R~0,ZC#\`-h#$#
--62A``\`-~#'#
--]2Or B2 <-#' (YO=H' )RB@ HE$M$$%$  @@TEMB$A@
H LXa$a$@@@$$ `4EfMBqBr@@ k$ @Ef$Mq$@  1_ A1|]8',$$$@IT+A"Bp@ LCCEA$ML$M$@P F @hTEAMBLA@ H |FT+
]O'%j$^$ L |Tb <]O' %m$U$ BRB) BTb <1 h$c%  E:MRERF1P<)@`|@ ?% aPE:%ME%@]$t%U!}%U 1%rQ-
P]O'% %N%%%aPa%C% UCE2MR%R&P` PC. % APE%M%%AHA@-`P]O'A%`%.%rUt5A@rP@"y]>b`@DVAi5;Vg8`Ai8d-0&AMD aD`>-*&;y%5;vy%;b`@`J&G&IbQbWa`Q&]bZ`\&gbd`f&q5bn`p&{-bx`z&HR@EB Mb`. HN::sU'+'Xg. 0 &+b-`+`E&M&AAUHH-Ub-hPR+Ub-a!+&E'C@WWA BP@Mtqt-r`ppPus&p&ECp\`OMpD 8E/'M,'IQ4&h! nz.!5bi
"4Ji (pH'HpHpE/'M,'AAHA@J5rfpA5 'A
=bJpyGHEr>Cp &qE3Ap BP5WM(G5&G-"'&'&'P@5RrpE>'C'``!lb{E+K[9MA9IE{|4&KH 4@N[9}A)IE{4AG~5&N?[MAI Fn4fAIk04O+<)NT" EMS9 )EK1;"! ( @@`@P`@@@` @`P@@ `p@@`P p`@0@`h 0@ \ PpE`,`|,N ( :!%g+-P%'c.gp,py(0o!)4$* ;*1p\.r :(yPC.X` K  R    XAE A XHI HS HS LM ON  HR G R GS MR N X  S HD O 8RT N XES& NF (P3 K K3 AA ES4 I H
3 I 8YT4 R 
C N D  `A A` hNK@ TP TD  T D (LS E HS A X/(/XEMv2P 6@Z3N' 5@ER#"'pKR7pHRB!->B <0<V*Et)AZHBREuwB.$53*B;\^91p9;Z;@9g[;-P;)YB. 3)B%E5"?!B ;qB%H5"K!B :N!B$5V*B9\BNR5q*B9yX9E`;gW:r :4T9|AB"BR>Qi) `U(4((C(
  XX`R( *`yU`"* i-Xy - gRO"O"?2<BO"O"tBBCBO"RO\"`RO"jRe&Atv M$[&j *,r\v@ L]O'v*F(a( @< BRB B4o<!B"BRB1"R]O'"+"a(%B56UCA2 q6M-6$ XX*X/+yB/1yT+yB1yTq+yBh1 :rR/+ :4B/1Uq&A.Ug&1 ;\^/+ER+\`-+a( ;r/1 :NR9X-/1 -B=\2`R=2UO&R]6vyAlvyMS6`9:I)mX*9y%t+9yX,@@2y:yP@9:-,9:2y8Py82C^-%r'\B`R'BX,#BA2yP:yU?+q-ARXAp`<S`<V`\, ,-t@ <2!rWAQC,\`-t,[(`R(]+`W`W`W`W*9};!9}g2tFR]6vvr!p9\]8'@,'7(
BFR]6AplvyMOFr BRB9:C,\B-r,('z,\`-z,g(AUry9S|9M|AB"BR#B`BC@1_` (]+`WAl`yXM M`W*UB{l"WUq&"C\R`RCRdBRB#pB1:9aB"BRBF]R8rcR1r}1rPBRNDQB:4DUJ&9AyUJ&%"9QyqpU-P]d%--%BP9|\B-B%DnPBR/B-qp9gBWQ.r@BE]]TGRFEP PU]]TWRrUQB"BR.B&PBR/B-qp9g;-]9;$UQ&9Ag4Ug&`P^]TbraB"BR.Bb,P%W`cP)B!%}GB ;\B3`91qB `91_`PB-B%G'`BR1JQBUJ&;%WB:cPB-B%JL]bs2kbfRR]s2ublRU]s2 `RX]s2 b*R[]s2bR^aQ]s# .)R(dQ]s#*.$)R(gQ]s#4.B)R(jQ]s#>. )R(mQ]s#H.)R(pQ]s#R.W)R(sQ]s#\.%)R(vQ]s#f.9)R(yQ]s#p.)R(|Q]s#z.u)R(Q]s#/H)R(Q]s#/i)R(Q]s#/Z)R(Q]s#"/')R( Q]s#,/7)R(Q]s#6/)R(Q]s#@/)R(Q-]s2MrR]s2Wr{R]s2arER ]s2kr3 R#]s2ur.R&)Q]s#/!)R(,Q]s#
/x)R(/Q]s#/4)R(2Q]s# /)R(5Q]s#*/])R(8Q]s#4/<)R(;Q]s#>/6)R(>Q]s#H/K)R(AQ]s#R/+)R(DQ]s#\/1)R(GQ]s#f/N)R(JQ]s#p/)R(MQ]s#z/)R(PQ]s# )R(SQ]s# 0)R(VQ]s#  )O(YQ]s#" r)O(\Q]s#, -)O(_Q]s#6 ~)O(bQ]s#@ Q)O(eQ]s#J ?)O(hQ]s#T ")O(?R]s#^ )U(kQ]s#h o)U(nQ]s#r ()U(qQ]s#| T)U(tQ]s# c)U(wQ0"1%QB!B UJ:m%B"BRB:Q"::$2:Q&*:(":Q*:":!OQz UJ&}Q R BR B-";ti B-
!B"BRBZ R\`R R%) RUJm UJ&!RUJm$ UJ&'RUJm*]"Or'"a:!`U(C(A2 `N2A`:):)S LOAD /If RX02, do an extra XDR JMP I BTREAD /All done. TEMP=. LOAD, 0 STR /Wait for TR flag JMP .-1 XDR /Send/get byte JMP I LOAD ENPUNCH
/ The coding for the handler /follows. The first page contains the entry point at /7607 for SYS:, some initialization code, /several subroutines, and the return. The "main line" /is in the second page, which acquires and decodes the /arguments, then executes the read or write routine, /which does the byte/word translation. Each byte is /sent or fetched by the first page routine CHKSEC /which also reads or writes a new sector when /necessary. Three sectors are used to store each /block, and every three sectors are interleaved. /The total number of blocks (658) is mapped /sequentially up the floppy. Block 0 uses track 1, sectors /1, 4, and 7. Block 1 uses track 1, sectors 10, 13, 16, etc. /Track 0 is not used. *200 /First handler page RELOC 7600 /Loads into field 0 locn. 7600-7777 ZBLOCK 7 /Actually starts at 7607. SYSENT, DISK0, VERSION /Entry po700, DOUBLE=7600 DCA I LDENSW /PLACE FOR LOOP CONTROL TAD I ZOO CLL RTR /PUT QUAD BIT TO LINK SNA CLA /SKIP IF DOUBLE OR QUAD TAD L1734 /SINGLE TAD L4110 /D&Q=4110, S=6044 SNL /SKIP ON QUAD, IT'S OK RIGHT NOW CLL CML RAR /SINGLE AND DOUBLE DIVIDE BY 2 DCA I LSIZE /S=7022, D=6044, Q=4110 TAD I LDENSW /7700 IF SINGLE, 7600 IF DOUBLE CLL CMA RTL /375 IF SINGLE, 775 IF DOUBLE AND UNIT /VOILA, 400*DOUBLE + 20*UNIT DCA I LFN /PLACE INTO FUNCTION CONTROL WORD AC7775 /BACK UP ZOO TO FETCH CALLING ADDR TAD ZOO DCA T1 /HOLD TEMPORARY TAD I T1 /HERE IS CALLING ADDR CLLFLD, HLT /PUT CDF TO CALLING FIELD HERE JMS I LENTRY /GO TO SECOND PAGE, LEAVING POINTER TO DIVSUB / / DIVSUB SUBROUTINE !!MUST!! FOLLOW IMMEDIATELY /
/ / DIVSUB / / CALL TO SET UP TRACK, SECTOR, FROM OVERALL SECTOR # / ALSO, SET UNIT WITH HEAD COMMAND IF WE ARE ON TO SECOND SIDE / / CALL WITH AC <0 IF IT IS REALLY AN ERROR RETRY / CALL WITH AC >=0 IF CALL TO DIVSUB / DIVSUB, 0 CDF 0 /AND DATA FIELD MUST BE TO HERE SPA CLA /SKIP IF REALLY A DIVIDE REQUEST JMP RSTART /NO, IT WAS AN ERROR RETRY!! DCA I LQUO /CLEAR DIVIDE QUOTIENT TAD I ZOO /IS IT A TWO HEADER RTR /PUT QUAD BIT TO LINK SNL CLA /SKIP IF YES JMP SHUNT /NO, GO DO DIVIDE TAD I LREC /WHICH RECORD ARE WE WORKING ON TAD LM3670 /NUMBER OF SECTORS ON FIRST SIDE SZL CLA /SKIP IF SECOND SIDED IT JMP SHUNT /NO, JUST REGULAR TAD I LFN /FORCE HEAD BIT ON AND L422 /KEEP DOUBLE, UNIT, READ-WRITE TAD L1000 /ADD IN SECOND SIDE DCA I LFN TAD LM3670 /BUT DECREASE RECORD NUMBER SHUNT, TAD I LREC /THIS FOR TRACK-SECTOR DIVLOO, ISZ I LQUO /MAIN DIIVIDIE LOOP TAD LM32 /DIVIDE BY 26 TO GET TRACK SMA /SKIP IF DONE JMP DIVLOO TAD L32 /REMAINDER 0-25 DCA T1 /HOLD IT IN TEMPORARY TAD I ZOO /SINGLE DENSITY SZA CLA /SKIP IF YES TAD T1 /MULTIPLY BY THREE FOR DOUBLE TAD T1 /AND BY TWO FOR SINGLE TAD T1 CLL IAC /LINK CLEAR FOR FINAL TEST; +1 TO START AT 1 NOT 0 TAD LM32 /DIVIDE BY 26 TO GET SECTOR SMA SZA /SKIP IF DONE JMP .-2 TAD L32 /RESTORE POSITIVE VALUE TO BE SECTOR DCA I LREMD /WHEW, BUT WATCH IT, A FINAL CORRECTION COMING! RAL /IF LINK=0 AND SINGLE: 2,4,6,8,10,12,14,16... SERIES TAD I ZOO /BUT WE HAVE 1,3,5,7,9,11,13,15... SO WE MUST INCREMENT! SNA CLA /SKIP IF SOME OTHER CASE ISZ I LREMD /NOW HAVE IT 2,4,6,8,10,12,14,16... JMP I DIVSUB /OUT
/ / L416, 416 /SOME LITERALS L1000, 1000 L32, 32 LM32, -32 L1734, 1734 L4110, LM3670, -3670 / / / *.&7600+167 /FORCE TO END OF PAGE / ZOO SUBROUTINE / / TO SET UP ENTRY POINT PROCESSING, AND INIT CODE / ZOO, 0 /ADDR OF 'HIT' ENTRY POINT +2 COMES HERE CLA /FOR SAFETY RDF /SAVE CALLERS FIELD SETTING TAD LCDF0 /ADD IN CDF 0 DCA CLLFLD /RESET WHEN GOING TO I/O SUB LCDF0, CDF 0 /DATA FIELD HERE FOR INDIRECTS CLOSE, TAD DOOR /CLOSE DOOR TO ONCE ONLY CODE (JMP WHICH T1, DCA CLOSE /USE ONCE-ONLY FOR TEMPORARY LOCATION JMS POINT /LEAVE ADDR OF SECOND PAGE
/ / / VARIABLES, ALSO INIT CODE LIVES HERE / / BUF, 0 /POINTER TO CALLER'S BUFFER RETRY, 0 /RETRY COUNT SIZE, 0 /SIZE OF DEVICE SYS, 0 /POINTER TO CALL QUO, 0 /DIVIDE QUOTIENT, WHICH IS TRACK NUMBER REC, 0 /SECTOR NUMBER OF FLOPPY BC, 0 /CONTROL COUNT, WORDS TO TRANSFER FN, 0 /0 FOR WRITE; 2 FOR READ; HEAD, DENSITY, UNIT DENSW, 0 /7700 IF SINGLE DENSITY, 7600 IF DOUBLE DENSITY ENTRY, 0 /ENTRY POINT, LEAVE ADDR OF DIVSUB HERE / IFNZRO .&177-10&4000 <_ERROR> /ENOUGH ROOM FOR INIT? / *.&7600 / / INIT TIME: FILL VECTOR TABLE / THERE, 0 /FILLED BY JMS, POINTS TO VECTOR ILOOP, TAD THERE /POINTER IS ALSO OFFSET! TAD I THERE /MAKING VECTOR DCA I THERE ISZ THERE /MOVE TO NEXT VECTOR ISZ LDCMD /CONTROL COUNT ON THIS PAGE JMP ILOOP JMP I THERE /BACK TO FIRST PAGE
/ / IO SUBROUTINE / / ENTRY POINT AT END OF LAST LISTING PAGE / / *ENTRY+1 /RESUME RUNTIME CODE / DCA SYS /POINTER TO ARG'S, EXIT RDF /DATA FIELD OF USER CALL TAD (CDF CIF 0 /MAKE CDF CIF TO CALLER'S FIELD DCA EXFLD /SET UP FOR CALL AC4000 /SET LINK=0, AC=4000 TAD I SYS /CARRY READ-WRITE BIT TO LINK AND (70 /KEEP FIELD FOR BUFFER TAD LLCDF0 /MAKE CDF TO BUFFER FIELD DCA BUFCDF /PLACE INTO I/O LOOP CML RTL /MAKE FUNCTION CODE, 0=WRITE, 2=READ TAD FN /START-UP CODE HAS SET HEAD, DENSITY, UNIT ETC. DCA FN TAD I SYS /MAKE LOOP CONTROL COUNT RAL AND L7600 CIA /0 FOR WHOLE FIELD DCA BC /MINUS TOTAL NUMBER OF WORDS ISZ SYS /NEXT TAD I SYS /IS BUFFER ADDRESS DCA BUF ISZ SYS /NEXT TAD (175 /CARRY WITH DENSW IF SINGLE DENSITY TAD DENSW /BLOCK # TO SECTOR # SMA CLA /SKIP IF DOUBLE, MULTIPLY BY 2 TAD I SYS /SINGLE, MULTIPLY BY FOUR SMA /NEGATIVE BLOCK # ERROR, FORCE LINK TO BE ON TAD I SYS ISZ SYS /MOVE POINTER TO ERROR EXIT CLL RAL DCA REC /SAVE SECTOR NUMBER SZL /SKIP IF LEGAL BLOCK # JMP ERREX /FORCE DISK SIZE TO BE SET UP BEFORE EXIT! JMS I ENTRY /CALL DIVISION SUBROUTINE OTHER PAGE TAD FN /SPLIT READ AND WRITE RTR /READ-WRITE BIT TO LINK SZL CLA /WRITE SKIPS JMP STREAD /READ GOES TO START IN MIDDLE OF LOOP / /WRITE FALLS THRU TO NEXT LISTING PAGE
/WRITE FALLS THRU TO THIS LOOP / / TOP OF MAIN LOOP / TOP, TAD FN /SET SILO TO LOAD-UNLOAD JMS LDCMD /COMMAND TO CONTROLLER TAD DENSW /MAKE SILO LOOP COUNT, S=7700, D=7600 DCA FLPWC /LDCMD ENTRY SAFE TEMPORARY BUFCDF, HLT /CDF TO BUFFER FIELD PLACED HERE TRLOOP, TAD I BUF /IN CASE WRITE, FETCH A WORD STR /SKIP IF READY TO PASS DATA JMP .-1 /NO XDR /TO OR FROM AC DCA I BUF /PLACE WORD FOR READ, WRITE REPLACES SAME ISZ BUF /MOVE BUFFER POINTER, (MAY SKIP) REMD, 0 /DIVIDE REMAINDER, WHICH IS SECTOR NUMBER ISZ FLPWC /DONE YET JMP TRLOOP TAD DENSW /ADDING 77 (SINGLE) 177 (DOUBLE) CMA /ONCE WE CMA, THAT IS TAD BC /LOOP CONTROL TO FINISH READ SNA JMP OKEX /OK, DONE DCA BC /REPLACE AND KEEP GOING / / MIDDLE OF MAIN LOOP / STREAD, TAD FN /READ STARTS HERE TAD (4 /TURN SILO COMMAND INTO READ-WRITE COMMAND JMS LDCMD /I/O COMMAND TO CONTROLLER TAD REMD /PRECOMPUTED SECTOR # STR JMP .-1 XDR L7600, 7600 /CLEAR AC, AND IS LITERAL TAD QUO /TRACK # STR JMP .-1 XDR /TRACK # IS ALWAYS NON0 !! ISZ REC /MOVE TO NEXT RECORD NUMBER JMS I ENTRY /DO TRACK SECTOR FOR NEXT OPERATION TAD (16 /WAIT FOR OPERATION TO COMPLETE JMS LDCMD ISZ BC /CHECK FOR WRITE EXIT JMP TOP /STILL MORE OKEX, ISZ SYS /KICK TO OK EXIT EXFLD, HLT /CDF CIF TO CALLER JMP I SYS /OUT
/ / / LDCMD SUBROUTINE / / CHECK FOR CONTROL C, LOAD A COMMAND / FLPWC=. /ENTRY POINT A TEMPORARY LDCMD, VCOUNT /INIT COUNTER DCA TRANS /SAVE COMMAND LLCDF0, CDF 0 /DATA FIELD HERE IN CASE CONTROL C TO MONITOR TSTTT, KSF /SKIP IF A TTY CHARACTER HAS HAPPENED JMP TSTSD /NOPE, GO CHECK RX CONTROLLER READY TAD L7600 /FORCE TOP BITS TO BE 1 TO ELIMINATE 3,203 KRS /AMBIGUITY ON TEST TAD (175 /IS IT A CONTROL C SNA CLA /SKIP IF NOT JMP I L7600 /EXIT TO MONITOR TSTSD, SDN /IS RX CONTROLLER READY JMP TSTTT /NOPE, GO CHECK TTY TAD TRANS /GET BACK COMMAND LCD /TO CONTROLLER SER /SKIP IF AN ERROR JMP I LDCMD AC4000 /AC CODE FOR EXIT, ALSO TO TELL DIVSUB WE'RE A RETRY! SKP ERREX, TAD SIZE /BLOCK TOO LARGE ENTRY, SET AC CODE ISZ RETRY /TRY THREE TIMES? JMS I ENTRY /NO, AC ZERO SAYS RETRY NOT DIVIDE!! JMP EXFLD /BACK TO CALLER / TRANS, 0 /TEMPORARY FOR LDCMD TO SAVE COMMAND / PAGE / /RX01 (RX02) SYSTEM HANDLER / / THIS HANDLER WAS DESIGNED TO WORK WITH RX01, RX02, RX03 / / HOWEVER, ONE SINGLE BINARY CANNOT SUCCESSFULLY BE USED IN A / VIRGIN BUILD FOR ALL THREE DEVICES. IT IS CURRENTLY SET UP / TO BUILD AN RX02. / TO GENERATE A BINARY TO BUILD AN RX01, CHANGE THE RXTYP / EQUATE TO 1. FOR AN RX03 BUILD, CHANGE RXTYP TO 3. / / / IFNDEF RXTYP <RXTYP=1> /THIS IS THE SINGLE DENSITY TWO PAGE HANDLER / set =2 for RX02; =3 for RX03 / / VERSION="M&77 / / AC1=CLL CLA IAC AC2=CLL CLA CML RTL AC6=CLL CLA CML IAC RTL /RX02'S MUST RUN ON AN OMNI-BUS !! AC4000=CLL CLA CML RAR AC3777=CLL CLA CMA RAR AC7775=CLL CLA CMA RTL / / DEVICE IOT SYMBOLIC EQUATES / LCD=6751 /LOAD COMMAND XDR=6752 /TRANSFER DATA STR=6_* for SYS: an GEE"M (00 @@prs the AC. JMP SETDR ( /ie to zero and continue. IFNZRO .-7612 <?Build will bomb!> WASTE, 3 /Flag as 2-page.
/Put some constants here to pa@`Pp@P`@@@@P@`@`@@p @`@ @P`@`@` @p`p @p`@P 0P@pP0@`P`0p@Ppp@@`h@0PHPPP@`h 0@ ( Pp \ Pp@|,N (:%!g0--%pc `E&gp,\`/y))4@*"; 1/r :(yPC.N R XETT .  8 ` PPp ipp```@@@@p XP `Ph@P`PH P@P 8Ph(PE`d ` `P@p@P @@@p@`P( Px`PP ```` 0p`@p0 `@@(@08@x8@`b@p `x`` (`08`HP`x@ `P
bXP8hPH@@ . 0@ //E(M(_0EkA H1@Z \UJ&E(et a+Ek*A)[H@ EUJ#l -XUJ&#U"QEbe baE2kA CH1@ |'UBJEbae aE2kA ]H1@ CpTbE2CwYb\ "g2(]="s2;%&pyXXm
;%+p !+y!+.B!]2v26y!%"30R&!!y[]2-2-2%[\2BR72 %[&0BRB:*%y%S:1%S1y]v[2B&"BR*B<1y*]r-2g2%*\rBRq2y %*q:%A3-*/&:*q:&%b, -B*\rHbB%*'p:Q&B\" "B&W\H.(,e(0,::QB&-B'$,&B!B ::X%H,O::Q:::*RB&-B*$;,]v!Z, (]T */!(
L&B!B ::o.&:q:gp9ygWe,]%,g'yXl5BZAy3-Z,By:*"ZA&t#,y1:ZA7tZ,y::QZ,]-+4,y(%Z,B %BE\BBRCBy %Z]BG2KBgXtZ,y9:&rWg&-g&t:yR~ApB:*1-:'t-y,&M\r "B&rW:::*R1:::3--:%%%-::X%-:*X%-%&&P:%Qo.::QB+%BEa"oa>91o.%FpW%gZMQ%Y-M9;"jQJ1;Zj-]m*h- '%6-]$p-'u-&q&rWgZJ-c&%`% Q%r Q>;% -]$-U! -U11&t/.+:*::Qo.\H..-8(o.]v!o.0)]v!<-3)/;%BK\RrKR>"\rSR/%FW%jZMQ%i-M9;"aJ1;Z.]+x-' .;-%R ]b^ br]m"br]bT r"&rWjZZ-+"::Q:*R%:%o]bv5bN\r=b>"\r"b/%
& ,B:*:%:%o `& ,-\.R\ *b.c)Z:'VHZ-o.&AB&"BR+Bi @*/&B0f
```6./`)RQ`R`lq'+A 3 T `QR`TN(`),` MCT O&niY]v!6.( *q:'%A.(: &BvR ```g./`)lq'8 MW# `TTUg8@+ W&5~.-]"vyb *//`( //z`lq'+ MQTUg@ Bk]bv%rGWj.k&:r-g%pA"Oq(|-Jp]O'N/J/"@V/g%]/:4Mg]r-2cr%~]r8Rkr~ px/\H.v/V(&b&4;gW]m*/,!
/]v! /?)Y#/g'&]r-2r&{1@%4/\H.(/D(4/%4/]v!4/(]8%:/(&K 9E&b9EV;gBRB K WXBVqXtWdQ%b/]m*`/8!&6 91r$&"6%91_SQ|/VQ%/&91q`&`PcP& ` ]' V(O(Ap91gWdQ&. d;-&R.&gW]!6 'g'B;)B"HHpW]BvKa%WW)
1mZ;%&x \B-d (=(&j Z:cP:c&:-c7 :c1^e%& Em"V$":|91 ]m* |! ]! |!(&B]"m"#B"2B 912 Z91_91_B&-BX$ ]8%@ ( A"LL%R\ *R (\C+^ g(j(m(p(]"rk-!z&zQ`&!3.B@!&M!"pb&$R'U91&t&!&@?6B:]B)5:5 1&:!]$8!U!'v'EE!-B\?BEW]?$R!(Q&Y!P]rs2agZ-B]"s2kmZ-p4Y&!p%rBu?"B&g!p%B"pBR&!!p%rjpW&!!7@:Y&4!\H.,! (4!]v!4!2(]s#<!g(Z*BR&"o]OrIB"cqBp&T+&,W{2F" "B\`Rg;@%@B!L\BHbw8{M\BHb"82 ]Bv "aP}p9@"kQ&g!kQ&'"q%t&x"2'l'l';*? ;*Y,x,l'l'E h,8.f/4/l'l'P!l'>!l'-"S#}#J#M$Y$l'l'W%_%\`-x">(~G'V(k* +?  +Y,x,,E E h,8.y/4/  E b!b!{!-"S#E E E "$%G%E E E \`-F"A(W;-U[]"BY"r0&g!&x"`(l"`#'( %U8N X`I5X'($@:]|" #g(j(C)`(#`P ''(@!uX&D1&,#)B,1,&0#hW.B>13>#eWXQ&{#Q&c#&B!B ::X&[#:'B[!B&"BR*BM]2dBi2&ru]2Bs2 &[]"?B{2r[!u&]22 2191#W["Q&.#X&.#ZR]
E ^Q&B#] :#a!B#aW["wQN#tQ&Q#[&[6g': Ng9 ET`N`li)]|"q2gj@6K9ygWyXg&$\`-$G(bQ+YQK%\QS&_Qm&Agp(/9?T]dRAB?L&BX@WX$g:y.R~ag&rgW/$]G+^$g'yX]O'h$y )WylBApyXTb(491_&8$g:yR \B`R BDg&rgWX$yXB,]Bm"B&r8Ayj|$]+($'&8$|$y8$\H.6$y(|$]%>$g'yXlB1ynY$ynM]"vSB!y1ylyXydr$%%\`-r$8(WXXyX\+&&B]Rm"RJ%1y]vR-] TRJ|A&91&&B}]R-R&%91_\/8%)!()X-\"rER"&(#9WU\rYR&WQ&XZ&(woU\rqR"o]RwR#y1&9;9g;XyX91&%&91]rm"R,]2vRE#&91q&'91]rT1R,y,Z;-](91p91rFQc&cPyB a]r-2URrZPWA%Au&q]RvoR]2RwRg|W6&l6&9yW]-+
&R(&]%&g'W&&gAgp:y.)&g&-grqPgW&6&]v!4&<)+g(/F`]d%H&F&W9ygr/A($^&]v!^&,(&-% A%9Eb1-x&]v!+n(]v! +q(1
E.B aFt&>Ba?t&Z&.
9&,B)aBt)&C&B-/`B9a0t7&6&B90`AuwEaut&GK`ANtQ&O&BSD`A5t&Z&Q ]v!`&a(+]v!h&>(A&"_q '(R-! '(S- ]"="r" "k!  &- % "m!m(%;\%;\]m*$'U!,'U%91_&YpWBR]m* 'B"P'qB%U&H&pW]T P'B"'&-Xt/'(*]rver9 &" Rm(`(v'`'' (Ng NQE"8l)]|"'g(j(=)%v6P;gl'3)&l&pBRB::&8q:'l'B&-B*$*';g}]rm"Mr&rE;Au&`q916`'\
,Q&p',91 t&p'g
VQ&',91rhpAp;-&E Q(Q&R(]$( !$(]d$ ((WN( W]m*.( !8( 91&t-" 91&tB([ ]m*H( !&E Z E  W\,.B_]v]Kug&g91&(]m*r(^!|(]v!z(G(K ]m*([!& (]v! (J(K g&91_gQ([Q&5(g91r5g[}]"^5"]^=r]dBCqu &?r?Z;\? ]m*\(a!p(^Q&p(]m*j(^!&p(aW]m*v('E gQ&c)]$)p!c)]v!
)P($'g(\Q/)p!p&91_]d$")(WW&,) W Q&:):)% \[Q&O)g91rO]TOgug&[g%91]rTKru;& ]Bo2 \Qrw;]T5]5Kug&@]2 @ 91&@)]v!$)F)\Q/*)g!g%91_p;9E;&"Kc&cPK ,Q&#*]+L)&!#*]v!T)I)\/\)&!(&X-\"ri" (#9{Y\r}){)XZ&(wZ\r""]""#&'91ruG&2!m9;Z&:*]v!8*k()G'91_]+F*m!N*G%91_G91&rZ]!^*G!*G91rZ;--Rr*
 ]s#z*g(Z*BRNB5!BO$5*BLY5*BOY5*`(*`!*'(Al "l )]|"+"gjQ&6K%Mr4R]$D*y!J*yW]$P*|!V*|W]+\*j!b*jW]+h*X!n*XWz*]$x*V!&l']$+V!+VWE yQ+|Q+jQ&+UAuj&/1j91&B/L0Au[&81XRQ&A+[AuXM1uV&P1^^& E]B[2REuVm1"va0W!&q+3& !RB Xa91}qX&91qun&1X%91qX'9 1s}rB%W|Q&)+&qd|]m*4+';+g7]Bm"A2D&H1j|nQ&P+M
d&E\Qr[2y]Tc2|]Tk2P$Eun%Am,91&rApV91&r C@@m &E %91;}-Q,91(B'@91_'91;}-REsV91r2Aa9;Z;,v@sY&E '91]rm"IBVS]BTSBVZ;--RE]B_BUEy.EU&91]rvsB| %*/K ]$~,U!E U%91_]v!
,)]8%,(K ]v!,/(K ]m*",'&4,^Q&2,]m*0,a!&4, ^Q&E ]+@,s!E ]m*H,'E &E s&91_91_s'91_Z]!f,s!*K &B!B ::X&y,:'BQB&"BR*Bk%@BR&-B-W]$-p!-Xp]r2%R 5Q 91&5-X ]r2;R&DQXx&1W]$J-,!Z-,91&rZQXx,1WX6Blq&r]RBiRguQuq&uQ ]rB{Ry&]RBR|
XPy1WX6Blqug&;Q,$&E \Q/$-g!g%91_p;9E;&"8Qc&cPA&rBQ,yQN-|Q&Q-WAup&ZQ ,Q&c-Au&mQ$'"gu &vQ,&Q&-Au,&a,91&'&T+:Au &E 91&E ]v!$.*%} rC25bgjmpZ?.&"^]Gb  '91qS%91q 9;9g;'Tb=q XZ\/l.*Z*SX-\"ryb"\rb \rr bS&pW ;1;Z.;1g[&&.\/&.''&-Xt
.XbW{# QB.&J.]d$H.(Wl']m*T.'E  A ueau&E &91qp%;A#,]+z.!&/]+/j!E ]+ /j!&J/&Au&E91&-]"%r!91'-]"Or5r"91q11'vT+91_bW{#j%91_Q&\/j&91_j)9#1|E ]$l/!l'\Q/t/!,BEunqug/qup/quy/qu|/qu/qu /qu&/qu,&ELE &T/]?$ >/(QT/]d$H/(Q&l']$R/ !l'a/Qa/Y@YZE ]d$l/(Q&E ]$v/ !E  &91_%;\2BEuUE5,E ]m* a!. ^Q'. ]m*( ^!'. aW]m*4 'E F/BIu%7rI]2G&'|u'W]BU,'vu&V&BRB::"B&"BR*B 8,]+z !  91rG;,]+
&!'G ]$ ,! ,91r[%Wh,>\B "+ GB %:%B %::A,&-&$'G D]BvMa]TUbr{1G,]T f !(Z;--&P91_] E ,!,W{!J]BTr\r&&XZ\/!*(&(#.]T 0 )!.!)X-!&(w-F]T H!*F!] N!#!E ]="Z!;(k(k('R''m(K ]+h!''!]d$p!(W'|!]+z! !'!]?$!(W' !M&@BRB::'#:'/#!Q'#!MAB&"BR*B
$"2P,]m*8!'E : E S&@BRB,Qg!]m*P!B"g!S'"]]v]] eB"Z% AB&"BRXBD]m"u,EdBEug'X BEup!u !u&'Z!V, Q'*" 91r*!Y,&Q'3"\Aup&E$&"E]BC"gEY\BQrM"gg%91qc&cPE Q'r"]$f"!E _A:&:QE ,Q'(",91'r!V,91('B !Y,]$"!E \Q/"!&91q%;-9]1qb,E eBEuG$1r=!u &E'rI]"BG" lqh,]?$R"('W"k]BdB]"a[ @hZ&E  (r-x ]O'|"x"('Tb'891_]d$#(W]m*# !#Z;-Au&En,E >
]?$,#('1#q]B?B72E]m"?2G ]vG2|!G'91qZ;--Rc$"Ea91.E wR\'Bk1z-]"Bq2aw1}-]"vm& *Rm(%*&0`<': O`eET`UTBW O6`OUL QCRCg  ,X`U FSSI4
g ,=ni]="F#*k(k('R\!]s#R#g( (WD &u"f1"E,E R)&B?%RA ;9E;"E]m"BA A9;"E;'BA&3'$11'$&11'pW]$$$A!)$&q9;'"2%@W(#9AT\rCBAA]BKBArK, R("E]B_BeA]rBkBvtAXxv1W]$z$/!$X/]rm" B|$"A|qXt6l'l']8% $(&l']8%($ &B#Q'3$
Auv'<A,/Q'E$Au|'\'@;%r\]Bm"WB|\A,|Q&E ;%&E ]m*l$|!E $E ']="~$**k(;%WK Q' %AuG'QG91(%Q&E $E ]v!g(!*$]Bm"1RG;]RT;RGG'91qZ;--REu&E$"E]vg'Y"]v* *]"vK- (@kPbb/bAb\b\R`RRJ%:cP(7 ({-P]="%%(k(x `(.%'7 9``T%/`)`M D V`O``P # 0 TRL O0THUl9 r'8I3niI)7 ({-hP]="l%0*h%k(;%W}%?}%'7 ?1 b@%:cPx X91'r}]RB RR}]RBbgx]m"#b^xrUgRx]B5bp}]RB=bgR}Q;g'}%3g'r}P+g'r}Q\&d7%}%JZ9%1r}QMZ11_%}%X%91_s%91_&B!B %:%B %::B&"BR+B\brb&&XZ\/(&*(&(#:`\/<&)!:&)X-!& (w-R`\/T&*R&] Z&#!,91(th&\Q/h&,!V%91_%;-Q%91;}-]Rvb3!Z-& RI! ]<r '91q]<!$'!')(91_|]<3r|'91qU]<!B'U!')(91_^]<Qr^'91q]<!`'!')(91_\y]<srX*B!p]<!'p *)(91_g]<rg*91q[]<! '[!*)(91_a]</ra*91qm]<!>'m!*)(91_]<Mr'91]p;-]&B]"m"[rB"c\rQrcrB!B&"BRXBU]rvqr6& $R+]v!|'9*5&91_]m*(5!(]T (5!(<,%}I]B!UI}&I&}Q?A5;'7( B9A1&t'?(E]BvIaZ,U%91_]$T(U!I!]v!I!y)]v!b(H*&'"m]vmK% LFB!%}g!B ;\3(1qB%>' e-qB%>4WB91/r',B;(D'/(91'/('t@7AB&"BRgZw(
 R/A /(,*'2'Q()@),:[(;@;,e(;@ ,$)'s(/A%}'"|;,zZ')T,wZ')N,N,;En'" &,&@','&@BR1jZB;%r@'7B 1lB&-B%j"0*'"6a`z/`O`CTRD1lt'8TX `SDB#lt '8 S5Ng! l=`nDi&B!m!B 9B:B&"B mZ )`(&)`8)/`)O`eT$N FS YAa8o@]*B:N-pY"2Gp!&BR0*B9&Mvev/*`HE%X RHRTNl!UE' l H`OHI3l)&'B&$&&t]*`(**`(*'n*o@.*'S*'i;]*`(:*`]*/`)XHEX(X  H!RTN`l W U3``T K@go `O4S NSagHi2fRR]s2ublRU]s2b`RX]s2 b*R[]s2bR^aQ]s# .)R(dQ]s#*.$)R(gQ]s#4.B)R(jQ]s#>. )R(mQ]s#H.)R(pQ]s#R.W)R(sQ]s#\.%)R(vQ]s#f.9)R(yQ]s#p.)R(|Q]s#z.u)R(Q]s#/ Note: Lines longer than 256 characters were wrapped



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search