IMD 1.16: 2/09/2008 10:40:24 84-93814-04-b200 (f81404) pat 495 source product diskette  ž ªªž @0‚|†ø)®wÂwЀЀÎtQº®q¦l) ˆ " ž}‚gÿA ¢`œžúž¼žöšèì Mˆ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’IOS4 €MÁúF081091410535500811109174635 8111091746350F81404 VOLPAT495 DIAGNOSTIC 84-93814-04-B200   ’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’Ižúž¼žöšèì Mˆ@†jæjg€ÿígÿèÂg@ †o G€ÿò`úkžŽ¾ôž¾¢_„C# b# ž}€BŸ€ žuÒ[¾æ žþž]e‡ †JÂR¾­æði¾òÀˆÆCÆCp@€„†<€…†;€††:€ƒ †FÂ8P@ G€ÿÁÆ;à‰¾•NÆêP¾éâ×èCHùC €ˆC ˜GÈTºà€qEžç‚â¢'ŸÉž¦ *¦Ã C¦¦ÏŸxÆžì @0DAJ÷LÆ )®ê‘ЀЀΎQBžxªâ" ¦† i¾¦€„œªª+⟠fžE¾ùžB)3žß `jmBˆB¾ I,Ÿv ¾ °¾€B¾ I,ŸmžÊ ž @¬E°E¨F¤F)¤D¾^ÄE‚‚„Fž% †ÊæjHÿÆÄÆÄ@pÆO¾ÄŸv g€ÿ7gÿ4ò]X¾] P¢hâV+ì„s=è„胾cžÆ_†N‚£ ž‡žôŠGŠF¾Öž†›¾ÁžØ¾ø ¦•“@AúLèSÃ)"$ C ž‰žkžøª1žïŠ/žjŠ-ž žhÿöÿÿ ‚p ž…âv¾R†Ÿw ÞpÞpžwâ‚p¾ Þkâižº† ’ŸÂ¢œ€15 !¦^æ\žd ²X‚ žˆò %€À'+ò²NŸs愾Qâ‚)žs ‡EÞDŸ|Ÿ{ @ž$ ož¶ Ož¯ mž­ Jž« Kž© iž¸ gž¶†. žV tž²žì„sFè„n`" FàEžD)ž ¾E`¾CnrgŸy ¾w"¾NÞž{žR¾q1¾HÞ ž}žL¾2`¾0t¾žG¾- ²B¾c ¾(Þ>Þ=Þ<žy¦:ž;¾!ž9¾ü¾/ž5OS:: SYSž¦ž"ªªiüþŒþ‹Âwþ‹þŠÂvc Bc A@6<# þIc B# ÞgIþjHÀc r‡Ÿc ·œ‡›Þš# @0‚X†ß)P ®VÂVЀЀÎSQº®P¦‹pI þN@6 CHECK SUM XOR CKSUM,A AND =:FF,A KEEP LOW 8 BITS EXCH A,CKSUM RTN CKSM ***** * * -- LDR -- * Q = LEADER LENGTH ****** LDR ENT LDR1  COPY VERFY,A VERIFY? JEQ A,$+3 NO - PUNCH LEADER COPY Q,LFLG SET LEADER FLAG ADD =1,Q COPY =0,A JST PUNCH CLSN =:FF,A COPY =1,Q SUB =1,Q JNE Q,LDR1 PUNCH NO. OF BLANKS IN QREG COPY Q,LFLG RTN LDR BACK TO CAL LER **** * * --- PCHERR --- * PRINT MISCOMPARE ADD DURING VERIFY ****** PCHERR ENT JST *TCRLF(X,Y) COPY ='%',A JST *TTYP(X,Y) PRINT % COPY SPNCH1,A SUB =1,A JST *THEX(X,Y)  PRINT MIS-COMPARE ADD RTN PCHERR ENDC IFT XDBUG TITL  BM ****** BM *  BM * --- M--- M COMMAND HEADER. BM *  BM ****** BM  SPACE 2 BM MCMD EQU $  BM JST *TRKB(X,Y) GET THE SECOND COMMAND CHARACTER. BM CLSN ='M',A  BM JMP MMCMD IF 'M'... BM CLSN ='L',A  BM JMP MLCMD IF 'L'... BM CLSN ='C',A BM JMP MCCMD IF 'C'... BM  JMP *TERROR(X,Y) ELSE ERROR... BM SPACE 2  BM C3BIT EQU 6 =C3 ENABLE BIT. BM C2BIT EQU 5 =C2 ENABLE BIT.  BM C1BIT EQU 4 =C1 ENABLE BIT. BM ANDBIT EQU 7 C1<=X<=C2 ENABLE BIT. BM ORBIT EQU 8 XC2 ENABLE. BM MDMASK EQU :0008 . BM MEMASK EQU :0200 . BM MIMASK EQU :0400 . BM MRMASK EQU :0002 .  BM MWMASK EQU :0001 . BM MDBIT EQU 3 MONITOR ALL DMA ENABLE BIT. BM MEBIT EQU 9 RESET WHEN MATCH ENABLE BIT. BM MIBIT EQU 10 INTERRUPT WHEN MATCH ENABLE BIT. BM MRBIT EQU 1 MONITOR NON-DMA READS ENABLE BIT. BM MWBIT EQU 0  MONITOR NON-WORD WRITES ENABLE BIT. BM BMADDR EQU :16 BUS MONITOR INTERRUPT ADDRESS. BM FBIT  EQU 7 INSTRUCTION FETCH INDICATOR. BM IBIT EQU 4 INTERRUPT REQUEST INDICATOR.  BM DBIT EQU 0 DMA ACCESS INDICATOR. BM RWBIT EQU 3 READ/WRITE INDICATOR. BM X1OP WORD 0 BM X1 WORD 0  BM X2OP WORD 0 BM X2 WORD :FFFF BM X3OP WORD 0 BM X3   WORD 0 BM TITL  BM MLSKIP WORD 77 . BM MLXLOC WORD 0 X LOCATION.  BM MLYLOC WORD 0 Y LOCATION. BM MLCSKP WORD 0 SKIP COUNT. BM MLCENT WORD 0 ENTRIES. BM MLCTMS WORD 0 TIMES TO DISPLAY ENTRIES. BM ****** BM *  BM * --- ML --- LIST BUS MONITOR FIFO.  BM * BM ******  BM SPACE 1 BM MLCMD COPY =1,A . BM COPY A,MLXLOC . BM COPY =80,Q COMPUTE THE BM COPY Q,MLSKIP BOTTOM FENCE BM  COPY Q,MLYLOC AND THE TOP FENCE. BM MLC51 IN BMADDR%3+0,A .  BM JNE A,$+2 . BM COPY Q,MLSKIP THE BOTTOM FENCE. BM SUB =INLINE,A . BM SUB =1,Q SCAN FOR BM JNE A,$+2 . COPY Q,MLYLOC TOP FENCE.  BM ADD =INLINE,A . BM JGT Q,MLC51 AND TRY IT AGAIN. BM COPY BMMRBS,A . BM TBIT 14,A  . BM JF OV,$+2 COPY Q,MLSKIP IF ENTRY THROUGH BUS MONITOR.  BM COPY MLYLOC,Q NORMALIZE BM SUB MLSKIP,Q THE TOP  BM JEQ Q,MLC52+1 COPY Q,MLYLOC LOCATION. BM COPY =80,Q . BM TBIT 14,A NORMALIZE  BM JT OV,MLC52 THE BM SUB MLSKIP,Q BOTTOM LOCATION.  BM MLC52 COPY Q,MLSKIP BM SPACE 1  BM * BM * PARSE THE USER'S COMMAND LINE. BM * BM JST *TINP(X,Y) GET A COMMAND CHARACTER. BM CLSN =CR,A .  BM JMP MLC20 IF 'CR', THEN DEFAULT... BM COPY Q,MLXLOC SET THE LOWER LIMIT.   BM JST *TINP(X,Y) GET THE SECOND PARAMETER. BM CLSN =CR,A .  BM JMP MLC21 BM MLC22 JMP *TERROR(X,Y) IF NOT TERMINATED WITH A 'CR'... BM MLC20 CLSN =:F8,Q . BM JMP MLC27 IF 'ML*' COMMAND... BM JNE Q,MLC21 IF TWO OPERANDS... BM COPY MLSKIP,Q IF ONE OPERAND THEN SET DEFAULT. BM MLC21 COPY Q,MLYLOC SET THE TOP LOCATION.  BM MLC27 EQU $ . BM SPACE 1  BM * BM * CALCULATE FIFO MOVEMENT FOR THE START. BM * BM COPY MLSKIP,A CALCULATE THE BM SUB MLYLOC,A NUMBER OF FIFO ENTRIES BM JLT A,MLC22 TO SKIP. BM MLC23 COPY A,MLCSKP  BM COPY MLYLOC,A CALCULATE BM SUB MLXLOC,A THE NUMBER  BM ADD =1,A OF ENTRIES TO BM JLE A,MLC22  PROCESS. BM COPY A,MLCENT . BM SPACE 1 BM * BM * SKIP THE APPROPRIATE NUMBER OF ENTRIES. BM *  BM COPY MLCSKP,Q BM MLC25 JLE Q,MLC24 IF DONE SKIPPING... BM IN BMADDR%3+1,A SKIP AN ENTRY. BM SUB =1,Q  BM JMP MLC25 BM SPACE 1 BM * BM * OUTPUT TRANSLATED FIFO ENTRIES. BM *  BM COPY *TDIOFG(X,Y),A GET DESIRED OUTPUT MEDIA FLAGG BM JMP $+2 .  BM JMP MLC24 . BM CLSN ='P',A  IS IT LP OUTPUT BM COPY *TLPCNT(X,Y),A LINES/PAGE BM COPY A,LNCNT . BM COPY =TOF,A .  BM JST *TTYPLP(X,Y) DO TOP OF FORM BM MLC24 COPY MLCENT,A .  BM NEG A,A . BM COPY A,MLCT MS . BM JST *TCRLF(X,Y) DO A CARRIAGE RETURN TO START. BM MLC26  IN BMADDR%3+2,A . BM JEQ A,MLC290 IF FROM LOCATION 0...  BM SUB =STDIOD,A . BM JLT A,MLC291 IF BELOW DEBUG...  BM SUB =TAIL-STDIOD,A BM JGT A,MLC291 IF ABOVE DEBUG... BM MLC290 JMP MLC38 . BM MLC291 IN BMADDR%3+3,A . BM TBIT FBIT,A BM JT OV,MLC30 IF INSTRUCTION FETCH... BM TBIT IBIT,A  BM JT OV,MLC31 IF INTERRUPT... BM TBIT DBIT,A  BM JT OV,MLC32 IF DMA ACCESS... BM JMP MLC36 IF ANYTHING ELSE... BM MLC292 WORD -5 . BM LPOOL *  BM MLC30 COPY ='F',A FOR AN INSTRUCTION FETCH.  BM JMP MLC33 BM MLC31 COPY ='I',A  BM JMP MLC33 BM MLC32 COPY ='D',A  BM MLC33 JST *TCRLF(X,Y) . BM JST *TTYP(X,Y) . BM COPY =-5,A . BM COPY A,MLC292 BM *  BM MLC36 IMS MLC292 . BM JMP MLC360 .  BM JST *TCRLF(X,Y) . BM COPY =BLANK,A .  JST *TTYP(X,Y) . JMP MLC33+2 . BM MLC360 COPY =BLANK,A PAD WITH JST *TTYP(X,Y) A BLANK. BM IN BMADDR%3+2,A .  BM JST *TPADDR(X,Y) . BM IN BMADDR%3+3,A GET THE STATUS BM COPY A,Q BM SHIFT A,RO,4 BM JST CONV OUTPUT FIRST CHARACTER... BM  COPY Q,A . BM JST CONV ...AND THEN THE SECOND.  BM * BM TBIT RWBIT,Q  BM COPY ='R',A . BM JT OV,MLC35 .   BM COPY ='W',A OTHERWISE ITS A WRITE. BM MLC35 JST *TTYP(X,Y) . BM COPY =BLANK,A AND A BM JST *TTYP(X,Y) FINAL BLANK. BM MLC38 IN BMADDR%3+1,A BUMP FIFO.  BM IMS MLCTMS . BM JMP MLC26 DO ANOTHER ENTRY.  BM * BM * RE-ALLIGN THE FIFO AND EXIT.  BM * BM COPY MLCENT,Q BM ADD MLCSKP,Q BM SUB =80,Q BM JGT Q,$-1  BM SUB =1,Q BM MLC41 ADD =1,Q RECIRCULATE THE  BM JGE Q,MLC40 FIFO TO ITS BM IN BMADDR%3+1,A ORIGINAL POSITION. JMP MLC41 MLC40 JST *TCRLF(X,Y) DO ANOTHER CRLF SPACE 1 JMP *TDBG(X,Y) GO AWAY SPACE 2 BM LPOOL TITL  BM MMC70 WORD 0 TEMP STORAGE. BM MMC71 WORD  0 TEMP. BM ****** BM * BM * --- MM --- SET BUS MONITOR MODE BITS.  BM * BM ******  BM SPACE 1 BM MMCMD COPY BMMRBS,A CLEAR THE BM AND =:79F0,A MONITOR BITS BM COPY  A,MMC70 AND PUT INTO TEMP STORAGE. BM JST *TRKB(X,Y) . BM  CLSN =CR,A . BM JMP MMC23 .  BM JMP MMC24 . BM MMC20 JST *TRKB(X,Y) GET A CHARACTER BM MMC24 COPY A,MMC71 HOLD CHARACTER IN TEMP. BM JST *TRKB(X,Y)  GET THE TERMINATOR. BM COPY MMC71,Q RESTORE THE CHARACTER. BM EXCH  MMC70,A SAVE THE TERMINATOR. BM CLSN ='D',Q . BM  OR =MDMASK+:8000,A IF MONITOR ALL DMA... BM CLSN ='E',Q .  BM OR =MEMASK+:8000,A IF RESET WHEN MATCH... BM CLSN ='I',Q .   BM OR =MIMASK+:8000,A IF MONITOR INTERRUPTS... BM CLSN ='R',Q . BM OR =MRMASK+:8000,A IF MONITOR NON-DMA READS... BM CLSN ='W',Q . BM OR =MWMASK+:8000,A IF MONITOR NON-DMA WRITES... BM  JLT A,$+2 . BM JMP *TERROR(X,Y) .  BM AND =:7FFF,A . BM *  BM EXCH MMC70,A BM CLSN =',',A  . BM JMP MMC20 TRY FOR ANOTHER PARAMETER... BM *  BM MMC23 COPY MMC70,A . BM  COPY A,BMMRBS BM OUT A,BMADDR%3+4 OUTPUT MODE CONTROL.  BM MMC22 COPY BMMRBS,A SET THE 'ON' BM SBIT 15,A BUS MONITOR  BM COPY A,BMMRBS FLAG. BM *  BM JMP *TDBG(X,Y) BY ! BM SPACE 4 * BM * PERMANENT STORAGE FOR THE MONITOR REGISTERS.  BM * BM SPACE 1  BM X1OPP WORD 0 . BM X2OPP WORD 0  . BM X3OPP WORD 0 . BM X1P WORD  0 . BM X2P WORD 0 . BM X3P WORD 0 . BM TITL  BM ****** BM *  BM * --- MC --- SET BUS MONITOR CONTROL PARAMETERS. BM *  BM ****** BM MCCMD JST MPARSE PARSE A USER COMMAND. BM JMP MCC42 .  BM * BM * SET THE PERMANENT MODE BITS.  BM * BM COPY X1,A .  BM COPY A,X1P . BM COPY X2,A  . BM COPY A,X2P . BM CO  PY X3,A . BM COPY A,X3P . BM * BM * CALCULATE A COMMAND WORD.  BM * BM COPY BMMRBS,A CLEAR COMPARE BITS. BM AND =:FE0F,A . BM COPY X3OP,Q  PROCESS THE C3 PARAMETER. BM COPY Q,X3OPP SET THE PERMANENT X3OP. BM JEQ Q,$+2 IF NO C3 PARAMETER... BM SBIT C3BIT,A . BM COPY X2OP,Q PROCESS THE C2 PARAMETER. BM COPY Q,X2OPP SET THE PERMANEMT X2OP.  BM CLSN ='=',Q . BM SBIT C2BIT,A .  BM CLSN ='>',Q . BM SBIT ORBIT,A  . BM CLSN =':',Q . BM SBIT ANDBIT,A . BM COPY X1OP,Q PROCESS THE C1 PARAMETER. BM COPY Q,X1OPP SET THE PERMANENT X3OP. BM CLSN ='<',Q .  BM SBIT ORBIT,A . BM CLSN ='=',Q .  BM SBIT C1BIT,A . BM COPY A,BMMRBS  . BM OUT A,BMADDR%3+4 OUTPUT THE CONDITION CODES. BM MCC42 EQU  $ . BM COPY X1P,A OUTPUT BM  OUT A,BMADDR%3+1 THE BM COPY X2P,A CX  BM OUT A,BMADDR%3+2 PARAMETERS. BM COPY X3P,A .  BM OUT A,BMADDR%3+3 . BM JMP MMC22  GO SET THE 'ON' BUS MONITOR BIT. BM TITL BM MPRS20 WORD 0 TEMP BM MPRS70 WORD 0 ZERO.  BM MPRS74 WORD -4 . BM *  BM * PARSE THE 'MC' COMMAND USER LINE. BM *  BM SPACE 1 BM MPARSE ENT  . BM COPY =:FFFF,Q . BM COPY Q,X2 . BM JST *TINPP(X,Y) .  BM CLSN =CR,A COMPARE FOR NO PARAMETERS. BM MPRS23 JMP MPRS26 .  BM * BM EXCH MPRS70,A .  BM COPY A,X1 ZERO BM COPY A,X1OP  THE BM COPY A,X2OP LOCATIONS. BM COPY A,X3 . BM COPY A,X3OP . BM EXCH MPRS70,A . BM *  BM EXCH MPRS74,A . BM COPY A,MPRS20 SET LIMIT COUNT TO -4. BM EXCH MPRS74,A . BM JMP MPRS22  . BM * BM MPRS21 CLSN =CR,A . BM JMP MPRS24 . BM JST *TINPP(X,Y) . BM MPRS22 CLSN ='=',A IF '='...  BM JMP MPRS30 . BM CLSN ='<',A IF '<'...  BM JMP MPRS40 . BM CLSN ='>',A  IF '>'... BM JMP MPRS50 . BM CLSN  =':',A IF ':'... BM JMP MPRS60 . BM  JMP *TERROR(X,Y) . BM MPRS24 IMS MPARSE .  BM RTN MPARSE . BM JMP *TERROR(X,Y) OTHERWISE... BM LPOOL MPRS26 JST *TCRLF(X,Y) . BM COPY  ='C',A . BM JST *TTYP(X,Y) . BM  COPY ='1',A . BM JST *TTYP(X,Y) .  BM COPY ='=',A . BM JST *TTYP(X,Y) .  BM COPY X1P,A . BM JST *TSHEX(X,Y)  PRINT THE C1 REGISTER. BM COPY ='C',A . BM JST  *TTYP(X,Y) . BM COPY ='2',A . BM  JST *TTYP(X,Y) . BM COPY ='=',A .  BM JST *TTYP(X,Y) . BM COPY X2P,A .   BM JST *TSHEX(X,Y) PRINT THE C2 REGISTER. BM COPY ='C',A . BM JST *TTYP(X,Y) . BM COPY ='3',A . BM JST *TTYP(X,Y) . BM  COPY ='=',A . BM JST *TTYP(X,Y) .  BM COPY X3P,A . BM JST *TSHEX(X,Y) PRINT THE C3 REGISTER. BM COPY ='M',A . BM JST *TTYP(X,Y) . BM COPY ='=',A . BM JST *TTYP(X,Y) . BM COPY BMMRBS,A . BM  AND =:3FFF,A AND OUT THE FLAG BITS. BM JST *TSHEX(X,Y) PRINT THE MODE REGISTER.  BM JST *TCRLF(X,Y) . BM JMP MPRS24+1 .  BM TITL BM *  BM * MC - PROCESS A '='. BM *  BM SPACE 1 BM MPRS30 IMS MPRS20 BM JMP $+2  BM JMP *TERROR(X,Y) IF TOO MANY PARAMETERS... BM JST *TINP(X,Y) GET THE PARAMETER. BM COPY A,MPRS35 SAVE THE TERMINATOR. BM COPY ='=',A  . BM EXCH X3OP,A BM JEQ  A,MPRS31 IF X3OP WAS BLANK... BM EXCH X2OP,A . BM  JEQ A,MPRS32 IF X2OP WAS BLANK... BM EXCH X2OP,A  BM EXCH X1OP,A BM JEQ A,MPRS33 IF X1OP WAS BLANK... BM JMP *TERROR(X,Y) WHAT, ALL ARE FULL ! ERROR. BM MPRS31 COPY Q,X3  BM JMP MPRS34 BM MPRS32 COPY  Q,X2 BM JMP MPRS34 BM MPRS33 COPY Q,X1 BM MPRS34 COPY MPRS35,A RESTORE THE TERMINATOR.  BM JMP MPRS21 BY ! BM MPRS35 WORD 0 TEMPORARY TERMINATOR STORAGE. BM SPACE 2 BM *   BM * MC - PROCESS A '<'. BM *  BM SPACE 1 BM MPRS40 IMS MPRS20 BM JMP $+2  BM MPRS42 JMP *TERROR(X,Y) ERROR. BM EXCH X1OP,A .  BM JNE A,MPRS42 IF X2OP WAS NOT BLANK... BM MPRS41 JST *TINP(X,Y) GET THE PARAMETER. BM COPY Q,X1 . BM JMP MPRS21 BY ! BM SPACE 2 BM *  BM * MC - PROCESS A '>'.  BM * BM SPACE 1  BM MPRS50 IMS MPRS20 BM JMP $+2  BM JMP *TERROR(X,Y) IF TOO MANY PARAMETERS... BM EXCH X2OP,A . BM JNE A,MPRS42 IF X1OP WAS NOT BLANK... BM MPRSO0SEGMENTBLANK oFx>>] ^~>B&\c>qE{IfnYd, & T_w>()*]?=@>J (=S :=SP =T -=S :=S "  =T )=S =S gF~F ?HFH&HfHpGPF0E @0BB  >"%` h !}>cEhF B+"+b+.-'p&P%0/o =Q M=S D=S B=S U=S G=S 4=S =S C=S 0=S =Si >7} =Q =Sz=S>6>5 P>+g=Z A>'C=[ Q>#@=[ X>==[ Y>:=T=Q>>> K>3=[ L>0=[ S> -=[ D’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I TITL PAT495 DIAGNOSTIC MACROS (PAT495.MAC) TITL MACRO TABLE OF CONTENTS *  PAGE * **** ERROR: --ERROR INDICATION TO USER...........9 * **** PATCHX --LOOP PATCHING MACRO (SHORT FORM)...9 * **** TRLD: --LOAD AND TEST REGISTERS...........10 * **** GLPOL: --GENERATE LPOOL MACRO..............11 * **** CKSTD: --TEST REGS FOR STANDARD VALUES.....12 * **** LDSTD: --LOAD REGS WITH STANDARD VALUES....12 * **** LDREG: --LOAD REGISTERS....................13 * **** LODREG --LOAD SINGLE REGISTER..............14 * **** TREGS: --TEST REGISTERS....................15 * **** TSTREG --TEST SINGLE REG. AGAINST VALUE....16 * **** TMEM: --TEST MEMORY AGAINST VALUES........50 * **** LDMEM: --LOAD MEMO  RY WITH SPECIFIED VALUES.17 * **** OPTEST --FLOATING POINT INSTR TEST MACRO...18 * **** FLTEST --FLOATING POINT PRETEST MACRO......24 * TITL TABLE OF CONTENTS--INSTRUCTION TEST MACROS **** DLOAD: --TEST DLOADS INSTRUCTION...........25 * ****  DSTOR: --TEST DSTORS INSTRUCTION...........26 * **** DPREC --TEST DBLADD & DBLSUB INSTRUCTIONS.27 * **** CVDP: --TEST CVTDBL INSTRUCTION...........29 * **** SGWT: --TEST SIGNAL & WAIT INSTRUCTIONS...30 * **** SPUSH: --TEST SINGLE REGISTER PUSH INSTR...31 * **** SPOP: --TEST SINGLE REGISTER POP INSTR....32 * **** XTR: --TEST XTR & XTRS INSTRUCTIONS......33 * **** INSR: --TEST INSR INSTRUCTION.............34 * **** PROC: --TEST ENTER & RETURN INSTRUCTIONS..35 * **** ENQUE: --TEST ENQUEB INSTRUCTION...........36 * **** DEQUE: --TEST DEQUEN INSTRUCTION...........37 * **** DELQ: --TEST DELQUE INSTRUCTION...........39 * **** NEXTQ: --TEST NEXTQUE INSTRUCTION..........40 * **** ENQA: --TEST ENQUEA INSTRUCTION...........41 * **** BLKMOV --TEST MOVE INSTRUCTION.............42 * **** COPYU --TEST LODU & STRU INSTRUCTIONS.....43 * **** CSKS: --TEST CSKS INSTRUCTION.............44 * **** S:ECC --TEST STRECC INSTRUCTION...........45 * **** L:ECC --TEST LODECC INSTRUCTION...........46 * **** G:ECC --TEST GENECC INSTRUCTION...........47 * **** STOR:K --TEST K-RELATIVE STORE INSTRUCTION.48 * **** LOAD:K --TEST K-RELATIVE LOAD INSTRUCTION..49 * TITL MACRO DEFINITIONS * * U S E R D E F I N E D O P---C O D E S * BITS MACRO S1 SYMATT #(1) IFT S1&:800 S1 SET S1++:400 ENDC S1 SET S1&:700%-4 R1 SET R1++S1 WORD R1 S1 SYMVAL #(1) WORD S1 ENDM TITL STRU MACRO :5C15 STORE AREG IN USER SPACE LODU MACENT :5C25 LOAD AREG FROM USER SPACE LCNTX MACENT :5C45 LOAD CONTEXT CVTDBL MACENT :260D CONVERT TO DOUBLE PRECISION DEQUEN MACENT :264D REMOVE QUEUE ELEMENT FOLLOWING REFERENCE ELEMENT ENQUEB MACENT :263D INSERT QUEUE ELEMENT BEFORE REFERENCE ELEMENT MOVE MACENT :267D BLOCK MOVE WORD RETURN MACENT :266D RETURN FROM PROCEDURE STRECC MACENT :26AD STORE ERROR CORRECTION CODE LODECC MACENT :26BD LOAD ERROR CORRECTION CODE GENECC MACENT :26CD GENERATE ERROR CORRECTION CODE ENQUEA MACENT :26DD INSERT QUEUE ELEMENT AFTER REFERENCE ELEMENT DELQUE MACENT :26ED DELETE QUEUE ELEMENT REFERENCED NEXTQUE MACENT :26FD POINT TO NEXT QUEUE ELEMENT WORD #(0) ENDM SPACE 1 PUSH: MACRO :0F05 PUSH SINGLE REGISTER ONTO STACK POP: MACENT :0F07 POP SINGLE REGISTER FROM STACK R1 SYMVAL #(1) R1 SET R1&6%12++#(0) WORD R1 ENDM ENTER MACRO :265D ENTER PROCEDURE SCNTX MACENT :5C35 SAVE CONTEXT WORD #(0) S1 SYMVAL #(1) WORD #(1) ENDM TITL MULS MACRO :1F80 MULTIPLY -- STACK RELATIVE DIVS MACENT :1F81 DIVIDE -- STACK RELATIVE CEAS MACENT :1F84 COMPUTE EFFECTIVE ADDRESS -- STACK RELATIVE DLOADS MACENT :1F86 LOAD DOUBLE REGISTER -- STACK RELATIVE LOADS MACENT :1F88 LOAD SINGLE REGISTER -- STACK RELATIVE ADDS MACENT :1F8A ADD TO REGISTER -- STACK RELATIVE SUBS MACENT :1F8B SUBTRACT FROM REGISTER -- STACK RELATIVE EXCHS MACENT :1F8C EXCHANGE WITH REG ISTER -- STACK RELATIVE R1 SYMVAL #(2) R1 SET R1&6%12++#(0) BITS #(1) ENDM SPACE 2  SPACE 2 CSMS MACRO :1F85 COMPARE MAG. & SKIP 3 WAY -- STACK RELATIVE DSTORS MACENT :1F87 STORE DOUBLE REGISTERS -- STACK RELATIVE STORS MACENT :1F89 STORE SINGLE REGISTER -- STACK RELATIVE R1 SYMVAL #(1) R1 SET R1&6%12++#(0) BITS #(2) ENDM SPACE 2 SPACE 2 ADDCS MACRO :1F82 ADD WITH CARRY -- STACK RELATIVE SUBCS MACENT :3F82 SUBTRACT WITH CARRY -- STACK RELATIVE ANDS MACENT :1F8E 'AND' TO REGISTER -- STACK RELATIVE ORS MACENT :3F8E 'OR' TO REGISTER -- STACK RELATIVE XORS MACENT :1F8F 'EXCLUSIVE OR' TO REGISTER -- STACK RELATIVE R1 SYMVAL #(2) R1 SET R1&4%12++#(0) BITS #(1) ENDM TITL CSKS MACRO :3F8F COMPARE & SKIP 3 WAY -- STACK RELATIVE R1  SYMVAL #(1) R1 SET R1&4%12++#(0) BITS #(2) ENDM SPACE 2 JSKS MACRO :1F83 JUMP & STACK -- STACK RELATIVE JMPS MACENT :1F8D JUMP -- STACK RELATIVE JSTS MACENT :3F8D JUMP & STORE -- STACK RELATIVE IMSS MACENT :5F8D INCREMENT & SKIP IF ZERO -- STACK RELATIVE DMSS MACENT :7F8D DECREMENT & SKIP IF ZERO -- STACK RELATIVE DBLADDS MACENT :268B ADD TO DOUBLE REGISTER -- STAK RELATIVE DBLSUBS MACENT :268A SUBTRACT FROM DOUBLE REGISTERS -- STACK RELATIVE R1 SET #(0) BITS #(1) ENDM SPACE 2 INSR MACRO :030B INSERT BIT FIELD TO MEMORY XTR MACENT :030E EXTRACT BIT FIELD FROM MEMORY XTRS MACENT :030F EXTRACT BIT FIELD AND EXTEND SIGN R1 SYMVAL #(1) R1 SET R1&6%12++#(0) S1 SYMVAL #(2) S1 SET S1-1&15%4++R1 WORD S1 ENDM TITL STORK MACRO :1E80 STORE REGISTER -- STACK RELATIVE R1 SYMVAL #(1) GET REGISTER R1 SET R1&6%12++#(0) OR IN SKELETON AFTER SHIFTING S1 SYMATT #(2) GET ATTRIBUTES IFT S1&:800 ONLY INDIRECT OR NONE ALLOWED R1 SET R1++:40 SET INDIRECT BIT ENDC S1 SYMVAL #(2) GET D6 FIELD R1 SET R1++S1 OR D6 FIELD IN WORD R1 ENDM SPACE 2 LOADK MACRO :1E00 LOAD REGISTER -- STACK RELATIVE R1 SYMVAL #(2) R1 SET R1&6%12++#(0) S1 SYMATT #(1) IFT S1&:800 R1 SET R1++:40 ENDC S1 SYMVAL #(1) R1 SET R1++S1 WORD R1 ENDM TITL TEST MACRO DEFINITIONS * BREAK EQU 1 ****** * E R R O R M A C R O * * THIS MACRO IS USED TO INDICATE AN ERROR ****** XMACRO ERROR: HLT #(1) #(2) #(3) #(4) #(5) #(6) #(7) #(8) #(9) #(10) #(11) #(12)  ENDM SPACE 10 ****** * * P A T C H X M A C R O * ****** XMACRO PATCHX JMP #(1) PATCH FOR LOOPING ORG $-1 NOP OVERLAY WITH NOP IMS PCOUNT ENDM TITL ****** * T E S T L O A D  R E G M A C R O * * THIS MACRO COPIES THE REGISTER SPECIFIED * BY PARAMETER #(1) TO THE REGISTER SPECIFIED * BY PARAMETER #(3). IT THEN CHECKS THAT * THE VALUE MOVED TO THE REGISTER SPECIFIED * BY PARAMETER #(3) CONTAINS THE EXPECTED * VALUE BY MOVING THAT VALUE TO EITHER A OR Q * THEN COMPARING IT TO THE VALUE SPECIFIED * BY PARAMETER #(4) (MUST BE LABEL-CANNOT BE * A VALUE). * * A SAMPLE CALL FORMAT FOLLOWS: * * TRLD: REG,A OR Q,REG,LABEL NAME OF VALUE * * PARAMETER #(2) MUST BE EITHER A OR Q * PARAMETERS #(1) AND #(3) CAN BE ANY * REGISTER. VALUE MUST BE A BINARY *   NUMBER (0-:FFFF) ****** XMACRO TRLD: SPACE BREAK * TRLD: #(1),#(2),#(3),#(4) COPY #(1),#(3) COPY #(3),#(2) CSK #(2),#(4) TEST THAT #(3) = EXPECTED VALUE NOP ERROR: COPY,-#(1)-,TO,-#(3)-,FAILED COPY =0,#(2) CLEAR -#(2)- ENDM TITL ****** * G E N E R A T E L P O O L M A C R O * * THIS MACRO EXECUTES A JUMP AROUND AN LPOOL. * * SAMPLE CALL: * * GLPOL: ****** XMACRO GLPOL: LP::L SET $ SET UP LABEL TO REPLACE NOP WITH JMP INST. NOP RESERVE SPACE FOR JMP INSTRUCTION LPOOL LP::L1 SET $ SET UP LABEL AT END OF LPOOL ORG LP::L GO BACK TO OVERLAY NOP WITH JMP INST. JMP LP::L1 JUMP TO LABEL AT END OF LPOOL ORG LP::L1 CONTINUE AT END OF LPOOL ENDM TITL ****** * CKSTD: -- CHECK REGISTERS FOR STANDARD VALUES ****** * THIS MACRO TESTS 'A', 'Q', 'X', 'Y', 'K', AND 'L' WITH * :FFFF, :F0F0, 00FF, :5555, :6666 AND 0 RESPECTIVELY. * ****** XMACRO CKSTD: TREGS: A,:FFFF,Q,:F0F0,X,:00FF,Y,:5555 TREGS: K,:6666,L,0 ENDM SPACE 10 ****** * LDSTD: -- LOAD REGISTERS WITH STANDARD VALUES * * THIS MACRO LOADS 'A', 'Q', 'X', 'Y', 'K', AND 'L' BY * :FFFF, :F0F0, :00FF, :5555, :6666, AND 0 RESPECTIVELY. * ****** XMACRO LDSTD: LDREG: A,:FFFF,Q,:F0F0,X,:00FF,Y,:5555,K,:6666,L,0 ENDM TITL ****** * L O A D R E G I S T E R M A C R O * * THIS MACRO IS USED TO SET VALUES INTO * ANY OF 7 REGISTERS. THE MACRO WILL * LOAD THE REGISTER SPECIFIED BY PARAMETER #(1) * WITH THE VALUE SPECIFIED BY PARAMETER #(2) * REGISTER (PARAMETER #(3)) LOADED WITH VALUE * (PARAMETER #(4)) AND SO ON. SEVEN OF THE *  EIGHT REGISTERS MAY BE LOADED. THE P REG * IS NOT ALLOWED TO BE LOADED. * * A SAMPLE CALL FOLLOWS: * * LDREG: A,AVAL,X,XVAL,Y,YVAL,Q,QVAL,ETC * * IF THE -A- REGISTER IS USED IN THE CALL IT * MUST BE THE FIRST PARAMETER, THERE IS NOT * ANY RESTRICTIONS ON THE OTHER REGISTERS * ****** LDREG: XMACRO IFT #?>=2 IFF #(1,'A') LODREG #(1),#(2) ENDC ENDC IFT #?>=4 LODREG #(3),#(4) ENDC IFT #?>=6 LODREG #(5),#(6) ENDC IFT #?>=8 LODREG #(7),#(8) ENDC IFT #?>=10 LODREG #(9),#(10) ENDC IFT #?>=12 LODREG #(11),#(12) ENDC IFT #?>=14 LODREG #(13),#(14) ENDC  IFT #(1,'A') COPY =#(2),A ENDC IFT #?>=10 ENDC ENDM LODREG XMACRO IFF #(1,'S')  IFF #(1,'K') IFF #(1,'L') COPY =#(2),#(1) ENDC ENDC ENDC IFF #(1,'Q') IFF #(1,'X') IFF #(1,'Y') COPY =#(2),A COPY A,#(1) ENDC ENDC ENDC ENDM TITL ****** * T E S T R E G I S T E R S M A C R O * * THE PURPOSE FOR THIS MACRO IS TO ALLOW * THE ABILITY TO TEST SPECIFIED REGISTERS * FOR SPECIFIED VALUES. UP TO 4 REGISTERS * MAY BE SPECIFIED, ALONG WITH THE VALUES THE * REGISTERS ARE EXPECTED TO CONTAIN, IN ANY * ONE MACRO CALL. IF THE REGISTER DOES NOT * CONTAIN THE EXPECTED VALUE, THE ERROR * MACRO WILL BE INVOKED. ALL REGIST ERS WILL * REMAIN UNCHANGED. * * A SAMPLE FORMAT OF A MACRO CALL FOLLOWS: * * TREGS: REG,VALUE,REG,VALUE,(ETC UP TO 4) * * WHERE: REG=REGISTER DESIGNATION * (A,Q,X,Y,P,L,S,K) * VALUE= LITERAL VALUE (0-:FFFF) ****** XMACRO TREGS: COPY A,ATEMP SAVE A DURING THE NEXT REGISTER TESTS. IFT #?>=2 TSTREG #(1),#(2) ENDC IFT #?>=4 TSTREG #(3),#(4) ENDC IFT #?>=6 TSTREG #(5),#(6) ENDC  IFT #?>=8 TSTREG #(7),#(8) ENDC COPY ATEMP,A RESTORE A REGISTER TO ORIGINAL VALUE. GLPOL: ENDM TSTREG XMACRO IFF #(1,'A') COPY #(1),A ENDC CSK A,=#(2) NOP ERROR:  -#(1)-,SHOULD,BE,=#(2) ENDM TITL TITL * * LDMEM: MACRO * * THIS MACRO LOADS FOUR CONSECUTIVE MEMORY LOCATIONS * WITH THE VALUES SPECIFIED..... * THE PARAMETERS ARE: * #(1) - ADDRESS OF THE FIRST LOCATION * #(2) THRU #(5) - VALUES TO BE LOADED. * LDMEM: XMACRO COPY =#(1),Y COPY =#(2),A  COPY A,0(Y) COPY =#(3),A COPY A,1(Y) COPY =#(4),A COPY A,2(Y) COPY =#(5),A COPY A,3(Y) GLPOL: ENDM TITL * #(1),#(2) = AQ REGISTER PAIR * #(3) = OPERATION * #(4),#(5) = OPERAND * #(6) = STATUS * OK = NORMAL * OV = OVERFLOW * UF = UNDERFLOW * DP = DOUBLE PRECISION RESULT (FIX) * SP = SINGLE PRECISION RESULT (FIX) * LT = LESS THAN (CSKF) * GT = GREATER THAN (CSKF) * EQ = EQUAL (CSKF) * #(7),#(8) = EXPECTED RESULT * #(9) = CARRY FLAG * #(10) = OVERFLOW FLAG * #(11) = X REGISTER * #(12) = Y REGISTER * #(13) = BYTE MODE B=BYTE W=WORD OPTEST XMACRO * CY=#(9) OV=#(10) A=#(1) Q=#(2) #(3) #(4) #(5)=#(7) #(8) #(6) FLOAT1 SET $ JST INITRP INITIALIZE TRAP LOCATIONS COPY =#(1),A #(1) ==> 'A' COPY =#(2),Q #(2) ==> 'Q' COPY =#(11),X #(11) ==> 'X' COPY =#(12),Y #(12) ==> 'Y' #(9)BIT CY,S #(9) ==> CARRY FLAG #(10)BIT OV,S #(10) ==> OVERFLOW FLAG  IFT #(13,'B') SBIT BY,S CHECK FOR BYTE MODE INDEPENDENCE ENDC IFT #(3,'ADDF');#(3,'SUBF');#(3,'MULF');#(3,'DIVF');#(3,'CSKF') JMP $+3 JUMP AROUND WORD FLOAT2 SET $ WORD #(4) INSTRUCTION OPERAND WORD #(5) FLOAT3 SET $ IFT #(6,'OK');#(3,'CSKF') #(3) FLOAT2 DO THE OPERATION ENDC IFT #(6,'OV') IFF #(3,'FIX') #(3) FLOAT2 SHOULD OVERFLOW AND T R A P ENDC ENDC IFT #(6,'UF') #(3) FLOAT2 SHOULD UNDERFLOW ENDC ENDC IFT #(3,'FIX');#(3,'FLOAT') FLOAT3 SET $ IFT #(3,'FLOAT') #(3) -- DO THE OPERATION ENDC IFT #(6,'OV') #(3) -- SHOULD OVERFLOW ENDC IFT #(6,'DP') #(3) -- EXPECT DOUBLE PRECISION RESULT ENDC IFT #(6,'SP') #(3) -- EXPECT SINGLE PRECISION RESULT ENDC ENDC   IFT #(3,'CSKF') IFT #(6,'LT') JMP $+3 OK-- AQ IS LESS THAN OPERAND NOP ERROR: INCORRECT,COMPARE ENDC IFT #(6,'GT') ERROR: INCORRECT,COMPARE JMP $+2 OK-- AQ IS GREATER THAN OPERAND ERROR: INCORRECT,COMPARE ENDC IFT #(6,'EQ') NOP ERROR: INCORRECT,COMPARE NOP OK-- AQ IS EQUAL TO OPERAND ENDC ENDC IFT #(13,'B') RBIT BY,S ENDC IFF #(3,'CSKF') CSK A,=#(7) CHECK -A- NOP ERROR: -A-,SHOULD,CONTAIN,#(7) CSK Q,=#(8)  CHECK -Q- NOP ERROR: -Q-,SHOULD,CONTAIN,#(8) ENDC IFT #(3,'CSKF') CSK A,=#(1) CHECK -A- NOP ERROR: #(3),MODIFIED,-A- CSK Q,=#(2) CHECK -Q- NOP ERROR: #(3),MODIFIED,-Q-  ENDC COPY X,A FOR TESTING CSK A,=#(11) CHECK -X- NOP ERROR: #(3),MODIFIED,-X-  COPY Y,A FOR TESTING CSK A,=#(12) CHECK -Y- NOP ERROR: #(3),MODIFIED,-Y- IFT #(3,'ADDF');#(3,'SUBF');#(3,'MULF');#(3,'DIVF');#(3,'CSKF') COPY FLOAT2,A CSK A,=#(4) CHECK OPERAND WORD 1  NOP ERROR: #(3),MODIFIED,OPERAND COPY FLOAT2+1,A CSK A,=#(5) CHECK OPERAND WORD 2 NOP ERROR: #(3),MODIFIED,OPERAND ENDC IFT #(6,'OK');#(3,'CSKF') IFT #(10,'R') JF OV,$+2 OVERFLOW STILL RESET? ERROR: NO--,#(3),CHANGED,OVERFLOW ENDC IFT #(10,'S') JT OV,$+2 OVERFLOW STILL SET? ERROR: NO--,#(3),CHANGED,OVERFLOW ENDC IFT #(9,'R') JF CY,$+2 CARRY STILL RESET? ERROR: NO--,#(3),CHANGED,CARRY ENDC IFT #(9,'S') JT CY,$+2 CARRY STILL SET?  ERROR: NO--,#(3),CHANGED,CARRY ENDC ENDC IFT #(6,'OV') IFF #(3,'FIX') IFT #(9,'R') JF CY,$+2 CARRY STILL RESET? ERROR: NO--,#(3),WITH,OVERFLOW,CHANGED,CARRY ENDC IFT #(9,'S') JT CY,$+2 CARRY STILL SET? ERROR: NO--,#(3),WITH,OVERFLOW,CHANGED,CARRY ENDC ENDC  IFT #(3,'FIX') JT CY,$+2 CARRY SET? ERROR: NO--,EXPECTED,OVERFLOW,WITH,CY,SET ENDC JT  OV,$+2 OVERFLOW SET? ERROR: NO--,EXPECTED,OVERFLOW,WITH,OV,SET ENDC IFT #(6,'UF') JT CY,$+2 CARRY SET? ERROR: NO--,EXPECTED,UNDERFLOW,WITH,CY,SET JT OV,$+2 OVERFLOW SET? ERROR: NO--,EXPECTED,UNDERFLOW,WITH,OV,SET ENDC IFT #(6,'DP') JT CY,$+2 CARRY SET? ERROR: NO--,SHOULD,BE,SET,WHEN,DOUBLE,PRECISION JF OV,$+2 OVERFLOW RESET? ERROR: NO--,SHOULD,BE,RESET,WHEN,DOUBLE,PRECISION  ENDC IFT #(6,'SP') JF CY,$+2 CARRY RESET? ERROR: NO--,SHOULD,BE,RESET,WHEN,SINGLE,PRECISION  JF OV,$+2 OVERFLOW RESET? ERROR: NO--,SHOULD,BE,RESET,WHEN,SINGLE,PRECISION ENDC IFT #(6,'OK');#(6,'UF');#(3,'CSKF');#(3,'FIX');#(3,'FLOAT') COPY ATRAP,A 1ST WORD OF TRAP VECTOR JEQ A,$+2 STILL ZER O? ERROR: NO--,#(3),ALTERED,TRAP,VECTOR COPY ATRAP+1,A 2ND WORD OF TRAP VECTOR JEQ A,$+2 STILL ZERO? ERROR: NO--,#(3),ALTERED,TRAP,VECTOR COPY QTEMP,A CHECK TRAP FLAG TO SEE IF TRAP WAS TAKEN JEQ A,$+2 STILL ZERO? ERROR: NO--,#(3),EXECUTED,TRAP ENDC IFT #(6,'OV') IFF #(3,'FIX') COPY QTEMP,A CHECK TRAP FLAG TO SEE IF TRAP WAS TAKEN CSK A,=1 NOP ERROR: #(3),DID,NOT,EXECUTE,TRAP COPY ATRAP,A 1ST WORD OF TRAP VECTOR CSK A,=FLOAT3+2 CHECK 'P' NOP ERROR: #(3),TRAP,STORED,WRONG,'P' COPY ATRAP+1,A 2ND WORD OF TRAP VECTOR CSK A,FLOAT3 CHECK 'I' NOP ERROR: #(3),TRAP,STORED,WRONG,'I' ENDC ENDC JMP FLOAT1 PATCH FOR LOOPING ORG $-1 NOP GLPOL:  ENDM TITL SPACE 5 ****** * * #(1),#(2) = AQ REGISTER PAIR * #(3) = OPERATION * #(4),#(5) = OPERAND * #(6) = STATUS * #(7),#(8) = EXPECTED RESULT * #(9) = CY AND OV INITIAL VALUE * ****** FLTEST XMACRO IFF #(3,'CSKF') OPTEST #(1),#(2),#(3),#(4),#(5),#(6),#(7),#(8),#(9),#(9),:3333,:0F0F,W ENDC IFT #(3,'CSKF') OPTEST #(1),#(2),#(3),#(4),#(5),#(6),#(1),#(2),#(9),#(9),:FF00,:5555,W ENDC ENDM TITL * * DOUBLE LOAD MACRO * * THE DOUBLE LOAD MACRO ALLOWS A DOUBLE PRECISION NUMBER TO * BE LOADED INTO THE REGISTER PAIR SPECIFIED (AQ,AX,AY). * THE PARAMETERS ARE: * #(1) - ADDRESS TO BE LOADED FROM (STACK RELATIVE) * #(2) - LOW ORDER REGISTER (Q, X OR Y) * DLOAD: XMACRO * DLOAD: #(1),#(2) DLOADS #(1),A#(2) IFF #(2,'X') LOADS #(1),X CSK A,X NOP ERROR: AREG,DID,NOT,LOAD,CORRECTLY LOADS #(1)+1,X CSK #(2),X NOP ERROR: #(2)REG,DID,NOT,LOAD,CORRECTLY ENDC IFT #(2,'X') LOADS #(1),Q LOADS #(1)+1,Y CSK A,Q NOP ERROR: AREG,DID,NOT,LOAD,CORRECTLY CSK X,Y NOP ERROR: XREG,DID,NOT,LOAD,CORRECTLY ENDC ENDM TITL * * DOUBLE STORE MACRO * * THE DOUBLE STORE MACRO ALLOWS THE REGISTER PAIR SPECIFIED * (AQ,AX,AY) TO BE STORED AS A DOUBLE PRECISION NUMBER. * THE PARAMETERS ARE: * #(1) - LOW ORDER REGISTER (Q, X OR Y) * #(2) - ADDRESS TO BE STORED TO (STACK RELATIVE) * DSTOR: XMACRO * DSTOR: #(1),#(2) DSTORS A#(1),#(2) COPY #(1),Q CSKS A,#(2) NOP ERROR: AREG,DID,NOT,STORE,CORRECTLY CSKS Q,#(2)+1 NOP ERROR: #(1)REG,DID,NOT,STORE,CORRECTLY ENDM TITL * * DOUBLE PRECISION ARITHMETIC MACRO * * THE DOUBLE PRECISION ARITHMETIC MACRO ALLOWS A DOUBLE PRECISION * ADD OR SUBTRACT OF A STACK RELATIVE MEMORY LOCATION WITH THE * AQ REGISTER PAIR. * THE PARAMETERS ARE: * #(1) - ADD OR SUBTRACT (ADD OR SUB) * #(2) - AREG VALUE * #(3) - QREG VALUE * #(4) - ADDRESS OF DOUBLE PRECISION WORD (STACK RELAT * #(5) - HIGH ORDER WORD VALUE * #(6) - LOW ORDER WORD VALUE * #(7) - HIGH ORDER (AREG) RESULT * #(8) - LOW ORDER (QREG) RESULT *  #(9) - 'OV' IF OVERFLOW EXPECTED; ELSE '' * DPREC XMACRO TITL * DPREC #(1),#(2),#(3),#(4),#(5),#(6),#(7),#(8),#(9),#(10) COPY =#(6),Q COPY =#(5),A DSTOR: Q,#(4) COPY =#(2),A COPY =#(3),Q DBL#(1) #(4) CSK A,=#(7) NOP ERROR: AREG,RE SULT,IN,ERROR CSK Q,=#(8) NOP ERROR: QREG,RESULT,IN,ERROR IFT '##(9,1,2)'='OV' JT OV,$+2 ENDC IFF '##(9,1,2)'='OV' JF OV,$+2 ENDC ERROR: OVERFLOW,BIT,SET,INCORRECTLY JMP !OVPOL LPOOL !OVPOL EQU $ ENDM TITL * * CONVERT TO DOUBLE PRECISION MACRO * * THE CONVERT TO DOUBLE PRECISION MACRO ALLOWS THE VALUE * IN THE QREG TO BE CONVERTED TO A 32 BIT PRECISION VALUE * BY EXTENDING THE SIGN BIT(15) THROUGH THE AREG. * THE PARAMETERS ARE: * #(1) - ORIGINAL VALUE IN AREG * #(2) - VALUE IN QREG TO BE EXTENDED * #(3) - NEW VALUE IN AREG (:0000 OR :FFFF) * CVDP: XMACRO * CVDP: #(1),#(2),#(3) LDREG: A,#(1),Q,#(2) CVTDBL TREGS: A,#(3),Q,#(2) ENDM TITL * * SIGNAL AND WAIT MACRO * * THE SIGNAL AND WAIT MACRO CHECKS FOR PROPER INCREMENT/ * DECREMENT OF THE SEMAPHORE AND CHECKS THE COUNT FOR * THE NUMBER OF TIMES THE MACRO HAS PREVIOUSLY CAUSED * A SEMAPHORE TRAP. * THE PARAMETERS ARE: * #(1) - SIGNAL OR WAIT (SIGNAL OR WAIT) * #(2) - SEMAPHORE COUNT * #(3) - TRAP COUNT (NUMBER OF TRAPS WHICH HAVE OCCURED) * SGWT: XMACRO TITL * SGWT: #(1),#(2),#(3) #(1) COPY 0(X),A TREGS: A,#(2) TMEM: TRAPFLG,#(3) ENDM TITL * * SINGLE REGISTER PUSH MACRO * * THE PARAMETER IS: * #(1) - THE REGISTER TO BE PUSHED (Q, X OR Y) *  WILL NOT TEST AREG CORRECTLY * SPUSH: XMACRO PUSH: #(1) LOADS 0,A CSK #(1),A NOP ERROR: #(1)REG,SHOULD,BE,SAME,AS,AREG ENDM TITL * * SINGLE REGISTER POP MACRO * * THE PARAMETER IS: * #(1) - THE REGISTER TO BE POPPED (Q, X OR Y) * THE AREG WILL NOT TEST CORRECTLY * SPOP: XMACRO LOADS 0,A POP: #(1) CSK #(1),A NOP ERROR: #(1)REG,SHOULD,BE,SAME,AS,AREG ENDM TITL * * EXTRACT BIT FIELD FROM MEMORY MACRO * * THE EXTRACT MACRO ALLOWS A SELECTED BIT FIELD TO BE * EXTRACTED FROM MEMORY AND PUT INTO A, Q, X OR YREGS. * THE HIGH ORDER BIT MAY BE EXTENDED AS A SIGN BIT. * THE PARAMETERS ARE: * #(1) - INSTRUCTION WITH OR WITHOUT SIGN EXTEND *  (XTR OR XTRS) * #(2) - DISPLACEMENT FROM BASE ADDRESS IN BITS * #(3) - BASE ADDRESS IN WORDS * #(4) - LENGTH OF FIELD TO BE EXTRACTED * #(5) - REG TO BE USED FOR RESULT (A, Q, X OR Y) * #(6) - REG VALUE AFTER EXTRACT * XTR: XMACRO TITL * XTR: #(1),#(2),#(3),#(4),#(5),#(6) LDMEM: #(3),:5555,:AAAA,:6666,:9999 COPY =#(2),X COPY =#(3),Y #(1) #(5),#(4) TREGS: #(5),#(6) ENDM TITL * * INSERT BIT FIELD TO MEMORY MACRO * * THE INSERT MACRO ALLOWS A SELECTED BIT FIELD TO BE * INSERTED INTO MEMORY FROM THE A OR QREG. * THE PARAMETERS ARE: * #(1) - VALUE IN REGISTER TO BE INSERTED FROM * #(2) - DISPLACEMENT FROM BASE ADDRESS IN BITS * #(3) - BASE ADDRESS IN WORDS * #(4) - LENGTH OF BIT FIELD TO BE INSERTED *  #(5) - REGISTER FOR INSERT (A OR Q) * #(6) THRU #(9) VALUES EXPECTED IN MEMORY * INSR: XMACRO TITL * INSR: #(1),#(2),#(3),#(4),#(5),#(6),#(7),#(8),#(9) COPY =#(2),X COPY =#(3),Y COPY =#(1),#(5) INS R #(5),#(4) TMEM: #(3),#(6),#(3)+1,#(7),#(3)+2,#(8),#(3)+3,#(9) JMP !INSR LPOOL !INSR EQU $ ENDM TITL *  PROCEDURE ENTER AND RETURN MACRO * * THE PROCEDURE ENTER AND RETURN MACRO ALLOWS TESTING OF * THE INSTRUCTIONS ENTER AND RETURN. IT CHECKS THAT THE * STACK IS UPDATED CORRECTLY AND THAT THE RSK IS PERFORMED * BY THE RETURN INSTRUCTION. * THE PARAMETER IS: * #(1) - THE NUMBER OF SCRATCH ELEMENTS TO BE ALLOCATED * ON THE STACK PROC: XMACRO TITL * PROC: #(1) JSK !PROC1 !PROC0 JMP !PROC2 !PROC1 ENTER #(1) COPY K,A ADD =#(1)+2,A CSKS A,0 NOP ERROR: KREG,DOES,NOT,POINT,AT,OLD,K COPY =!PROC0,A CSKS A,*0 NOP ERROR: OLD,K,DOES,NOT,CONTAIN,OLD,P COPY Y,A CSKS A,1 NOP ERROR: YREG,DID,NOT,GET,SAVED,CORRECTLY RETURN ERROR: RETURN,DID,NOT,DO,RSK !PROC2 EQU $ ENDM TITL * * ENQUE MACRO * * THE ENQUE MACRO ALLOWS AN ELEMENT TO BE INSERTED * BEFORE THE REFERENCED ELEMENT. * THE PARAMETERS ARE: * #(1) - THE ADDRESS OF THE ELEMENT TO BE ENQUED * #(2) - THE ADDRESS OF THE REFERENCE ELEMENT * ENQUE: XMACRO TITL * ENQUE: #(1),#(2) COPY #(1),Q GET ADDRESS OF ELEMENT TO BE ENQUED COPY =#(2),X GET ADDRESS OF REFERENCE ELEMENT COPY Q,Y COPY 1(X),A GET OLD BACK POINTER ENQUEB CSK A,1(Y) NOP ERROR: BACK,POINTER,IN,NEW,ELEMENT,INCORRECT COPY *1(Y),A GET FORWARD POINTER TO NEW ELEMENT CSK A,Q NOP ERROR: FORWARD,POINTER,TO,NEW,ELEMENT,INCORRECT COPY 0(Y),A GET FORWARD POINTER IN NEW ELEMENT CSK A,X NOP ERROR: FORWARD,POINTER,IN,NEW,ELEMENT,INCORRECT COPY 1(X),A GET BACK POINTER TO NEW ELEMENT CSK A,Q NOP ERROR: BACK,POINTER,TO,NEW,ELEMENT,INCORRECT ENDM TITL * * DEQUE: MACRO * * THE DEQUE MACRO ALLOWS THE ELEMENT FOLLOWING * THE REFERENCE ELEMENT TO BE DELETED. * THE PARAMETER IS: * #(1) - ADDRESS OF REFERENCE ELEMENT * DEQUE: XMACRO TITL * DEQUE: #(1) COPY =#(1),X GET ADDRESS OF REFERENCE ELEMENT COPY X,Y COPY 0(Y),A GET FORWARD POINTER CSK A,Y IS QUEUE EMPTY? NOP JMP !DQ0 NO DEQUEN YES CSK X,=0 NOP ERROR: XREG,SHOULD,BE,ZERO CSK A,Y NOP ERROR: FORWARD,POINTER,CHANGED,-,SHOULD,NOT,HAVE,BEEN COPY 1(Y),A GET BACK POINTER CSK A,Y NOP ERROR: BACK,POINTER,CHANGED,-,SHOULD,NOT,HAVE,BEEN JMP !DQ1 TITL !DQ0 EQU $ COPY A,YTEMP SAVE OLD FORWARD POINTER COPY *0(Y),A GET NEW FORWARD POINTER DEQUEN CSK A,0(Y) NOP ERROR: NEW,FORWARD,POINTER,NOT,SET,CORRECTLY COPY YTEMP,A GET OLD FORWARD POINTER CSK A,X NOP ERROR: XREG,NOT,SET,TO,ELEMENT,REMOVED COPY =1,X COPY *0(X,Y),A GET BACK POINTER CSK A,Y NOP ERROR: BACK,POINTER,SET,INCORRECTLY !DQ1 EQU $ ENDM TITL * * DELQ: MACRO * * THE DELQ: MACRO ALLOWS THE REFERENCED *  ELEMENT TO BE DELETED. * THE PARAMETER IS: * #(1) - ADDRESS OF REFERENCED ELEMENT. * DELQ: XMACRO TITL *  DELQ: #(1) COPY =#(1),X GET ADDRESS OF REFERENCED ELEMENT COPY X,Y DELQUE  CSK X,Y NOP ERROR: XREG,SHOULD,NOT,HAVE,BEEN,CHANGED COPY 0(Y),A CSK X,A NOP JMP !DQE COPY =1,X COPY 0(Y),A COPY 1(Y),Q CSK   A,*1(Y) NOP ERROR: FORWARD,POINTER,UPDATED,INCORRECTLY CSK Q,*0(X,Y) NOP  ERROR: BACKWARD,POINTER,UPDATED,INCORRECTLY !DQE EQU $ ENDM TITL * * NEXTQ: MACRO * *  THE NEXTQ: MACRO POINTS TO THE NEXT QUEUE ELEMENT * IF THE QUEUE IS NOT EMPTY, OR TO ZERO IF THE * QUEUE IS EMPTY. * * THE PARAMETER IS: * #(1) - THE REFERENCED QUEUE ELEMENT * NEXTQ: XMACRO TITL * NEXTQ: #(1)  COPY =#(1),X GET ADDRESS OF REFERENCED ELEMENT COPY X,Y COPY 0(Y),A CSK X,A  NOP JMP !NXQ0 NEXTQUE JNE X,!NXQ2 JMP !NXQ1 !NXQ2 ERROR: QUEUE,EMPTY,-,XREG,NOT,ZERO JMP !NXQ1 !NXQ0 NEXTQUE COPY 0(Y),A CSK X,A NOP  ERROR: XREG,DID,NOT,MOVE,TO,NEXT,QUEUE,ELEMENT !NXQ1 EQU $ ENDM TITL * * ENQA: MACRO * * THE ENQA: MACRO TESTS THE FUNCTION OF THE * ENQUEA INSTRUCTION (INSERT AFTER QUEUE ELEMENT). * THE PARAMETERS ARE: * #(1) - ADDRESS OF ELEMENT TO BE INSERTED. * #(2) - ADDRESS OF REFERENCED QUEUE ELEMENT. * ENQA:  XMACRO TITL * ENQA: #(1),#(2) COPY #(1),Q GET ADDRESS OF ELEMENT TO BE INSERTED COPY =#(2),X GET ADDRESS OF REFERENCED ELEMENT COPY Q,Y COPY 0(X),A ENQUEA CSK Q,0(X) NOP ERROR: OLD,FORWARD,POINTER,UPDATED,INCORRECTLY CSK A,0(Y) NOP ERROR: NEW,FORWARD,POINTER,INCORRECT COPY A,Y CSK Q,1(Y) NOP ERROR: OLD,BACKWARD,POINTER,UPDATED,INCORRECTLY COPY Q,Y COPY X,A CSK A,1(Y) NOP ERROR: NEW,BACKWARD,POINTER,INCORRECT ENDM TITL * * BLOCK MOVE WORD MACRO * * THE BLOCK MOVE WORD MACRO ALLOWS BLOCKS * COPIED TO A NEW LOCATION. * THE PARAMETERS ARE: * #(1) - NUMBER OF WORDS TO BE MOVED * #(2) - ADDRESS OF FIRST WORD OF SOURCE * #(3) - ADDRESS OF FIRST WORD OF DESTINATION * BLKMOV XMACRO * * BLKMOV #(1),#(2),#(3) * LDREG: A,#(1),Q,#(2),X,#(3) MOVE TREGS: A,0,Q,#(2)+#(1),X,#(3)+#(1) LDREG: A,#(1),Y,#(2),X,#(3) JEQD A,$+8 COPY 0(X),Q CSK Q,0(Y) NOP ERROR: BUFFERS,DO,NOT,COMPARE,CORRECTLY ADD =1,X ADD =1,Y JMP $-7 ENDM TITL * * COPY TO/FROM USER SPACE MACRO * * THE COPY TO/FROM USER SPACE ALLOWS A SINGLE WORD TO * BE COPIED FROM THE AREG TO THE USER ADDRESS IN THE * XREG AND VICE VERSA. IT ASSUMES THAT THE USER ADDRESS * BLOCK WILL CORRESPOND TO THE SYSTEM ADDRESS BLOCK * OFFSET 1K WORD * USER NUMBER. * THE PARAMETERS ARE: * #(1) - INSTRUCTION TO BE EXECUTED (LODU OR STRU) * #(2) - VALUE TO BE COPIED * #(3) - USER ADDRESS FOR XREG * #(4) - USER NUMBER * COPYU XMACRO TITL * COPYU #(1),#(2),#(3),#(4) LDREG: A,#(2),X,#(3),Q,#(4) OUT Q,6 SET USER NUMBER SHIFT Q,L,10 SET USER * 1000 #(1) ADD Q,X GET OFFSET FOR USER MAP CSK A,0(X) NOP ERROR: #(1),DID,NOT,WORK,CORRECTLY ENDM TITL * *   CSKS: MACRO * * THIS MACRO TESTS THE INTEGRITY OF THE CSKS INSTRUCTION. * * THE PARAMETERS ARE: * #(1) - ADDRESS OF THE STACK POINTER * #(2) - COMPARISON VALUE * #(3) - REGISTER FOR COMPARISON (A OR Q) *  #(4) - POSITION IN STACK * CSKS: XMACRO TITL ***** CSKS: #(1),#(2),#(3),#(4) COPY =#(1),Y LOAD STACK LOCATION WITH #(1) COPY =#(2),Q COPY Q,#(4)(Y) COPY =#(1),A SET UP STACK POINTER COPY A,K COPY =#(2),#(3) LOAD TEST REGISTER CSKS #(3),#(4) NOP ERROR: CSKS,FAILED,ON,EQUALITY ADD =10,#(3) CSKS #(3),#(4) JMP $+2 JMP $+2 ERROR: CSKS,FAILED,ON,GREATER,THAN SUB =20,#(3) CSKS #(3),#(4) JMP $+3  NOP ERROR: CSKS,FAILED,ON,LESS,THAN GLPOL: ENDM TITL * * S:ECC MACRO * * THE S:ECC MACRO IS USED TO TEST THE STRECC * (STORE ERROR CORRECTION CODE) INSTRUCTION. * * THE PARAMETERS ARE: *  #(1) - ADDRESS OF REFERENCED LOCATION * #(2) - CONTENTS OF REFERENCED LOCATION * #(3) - ECC FOR CONTENTS DISPLACED BY ONE BIT * #(4) - DISPLACED CONTENTS (OFF BY ONE BIT) * S:ECC XMACRO ***** S:ECC #(1),#(2),#(3),#(4) COPY =#(1),X LOAD ADDRESS COPY =#(2),Q LOAD CONTENTS COPY =#(3),A LOAD ECC FOR #(4) COPY Q,#(1) STORE CONTENTS,MEMORY PRODUCES ECC SPACE 1 STRECC SPACE 1 COPY #(1),A CSK A,=#(4) CHECK AREG AGAINST VALUE NOP ERROR: STRECC,INSTRUCTION,DID,NOT,WORK ENDM TITL * * L:ECC MACRO * * THE L:ECC MACRO IS USED TO TEST THE LODECC * (LOAD ERROR CORECTION CODE) INSTRUCTION... * * THE PARAMETERS ARE: *  #(1) - ADDRESS OF REFERENCED LOCATION * #(2) - CONTENTS OF REFERENCED LOCATION * #(3) - EXPECTED ECC VALUE AFTER LOAD * L:ECC XMACRO ***** L:ECC #(1),#(2),#(3) COPY =#(1),X LOAD ADDRESS COPY =#(2),A LOAD CONTENTS COPY =#(3),Q LOAD CHECKING ECC COPY A,#(1) STORE CONTENTS,MEMORY PRODUCES ECC SPACE 1 LODECC SPACE 1 CSK A,Q CHECK THE LOAD NOP ERROR: LODECC,INSTRUCTION,DID,NOT,WORK ENDM TITL * * G:ECC MACRO * *  THE G:ECC MACRO IS USED TO TEST THE GENECC * (GENERATE ERROR CORRECTION CODE) INSTRUCTION. * * THE PARAMETERS ARE: * #(1) - ADDRESS OF REFERINCED LOCATION * #(2) - CONTENTS OF REFERENCED LOCATION *  #(3) - EXPECTED ECC VALUE AFTER GENERATION * G:ECC XMACRO ***** G:ECC #(1),#(2),#(3) COPY =#(1),X LOAD ADDRESS COPY =#(2),Q LOAD CONTENTS COPY Q,#(1) STORE CONTENTS COPY =0,A CLEAR AREG SPACE 1 GENECC SPACE 1 CSK A,=#(3) CHECK GENERATION NOP ERROR: GENECC,INSTRUCTION,DID,NOT,WORK ENDM TITL * * STOR:K MACRO * * THE STOR:K MACRO IS USED TO TEST THE STORK * (STORE K-RELATIVE) INSTRUCTION. * * THE PARAMETERS ARE: *  #(1) - REGISTER USED * #(2) - D6 FIELD USED * #(3) - DATA STORED (AN INDIRECT ADDRESS) * STOR:K XMACRO C OPY =#(3),#(1) STORK #(1),#(2) TRY DIRECT ADDRESSING, K-RELATIVE IFF #(1,'A') COPY #(1),A ENDC CSK A,KSTK+#(2) NOP ERROR: STORK,DIRECT,ERROR,--,#(1)REG,SHOULD,=#(3) COPY =#(3),#(1) STORK #(1),*#(2) TEST INDIRECT, K-RELATIVE COPY #(3),#(1) IFF #(1,'A') COPY #(1),A ENDC CSK A,=#(3) NOP ERROR: STORK,INDIRECT,ERROR,--,#(1)REG,SHOULD,=#(3) ENDM TITL * * LOAD:K MACRO * * THE LOAD:K MACRO IS USED TO TEST THE LOADK * (LOAD K-RELATIVE) INSTRUCTION. * * THE PARAMETERS ARE: *  #(1) - REGISTER USED * #(2) - D6 FIELD USED * #(3) - DATA READ (INDIRECT ADDRESS) * LOAD:K XMACRO COPY =#(3),#(1) COPY #(1),KSTK+#(2) COPY =0,#(1) LOADK #(2),#(1) COPY #(1),A CSK A,=#(3) NOP ERROR: LOADK,DIRECT,ERROR,--,#(1)REG,SHOULD,=#(3) COPY =#(3),#(1) COPY #(1),#(3) COPY =0,#(1) LOADK *#(2),#(1) COPY #(1),A CSK A,=#(3) NOP ERROR: LOADK,INDIRECT,ERROR,--,#(1)REG,SHOULD,=#(3) ENDM TITL ************************************************************************ *  * * TMEM: MACRO  * * THIS MACRO WILL TEST FOUR MEMORY LOCATIONS FOR THEIR * * SPECIFIED VALUES. IT HALTS WHEN AN INEQUALITY IS FOUND * * CALLING THE ERROR: MACRO. * *  * * EXAMPLE OF A CALL IS: TMEM: MEM1,VAL1,MEM2,VAL2,,,, * *  UP TO FOUR MEMORY LOCATIONS CAN BE SPECIFIED EACH WITH * * AN ASSOCIATED VALUE. THE A REG IS USED FOR THE COMPARE * * AND RESTORED TO ORIGINAL VALUE ON EXIT FROM ROUTINE. * *  * ************************************************************************ XMACRO TMEM:  COPY A,ATEMP SAVE A REG IFT #?>=2 AT LEAST 2 PARAM. COPY #(1),A CSK A,=#(2) TEST MEM1  NOP ERROR: -#(1)-,SHOULD,BE,=#(2) IFT #?>=4 AT LEAST 4 PARAM. COPY #(3),A CSK A,=#(4) TEST MEM2 NOP ERROR: -#(3)-,SHOULD,BE,=#(4) ENDC IFT #?>=6 AT LEAST 6 PARAM. COPY #(5),A CSK A,=#(6) TEST MEM3 NOP ERROR: -#(5)-,SHOULD,BE,=#(6)  ENDC IFT #?>=8 AT LEAST 8 PARAM. COPY #(7),A CSK A,=#(8) TEST MEM4 NOP ERROR: -#(7)-,SHOULD,BE,=#(8) ENDC ENDC COPY ATEMP,A RESTORE A REG VALUE. ENDM * * SIGNAL INSTRUCTION MACRO * MACRO SIGNAL WORD :269D WORD #(1) ENDM * * WAIT INSTRUCTION MACRO * MACRO WAIT WORD :268D WORD #(1) ENDM SAVE END A CSK A,=#(6) TEST MEM3 NOP ERROR: -#(5)-,SHOULD,BE,=#(6)  ENDC IFT #?>=8 AT LEAST 8 PARAM. COPY #(7),A CSK A,=#(8) TEST MEM4 NOP ERROR: -#(7)-,SHOULD,BE,=#(8) ENDC ENDC COPY ATEMP,A RESTORE A REG VALUE. ENDM * * SIGNAL INSTRUCTION MACRO * MACRO SIGNAL WORD :269D WORD #(1) ENDM * * WAIT INSTRUCTION MACRO * MACRO WAIT WORD :2 ATIONS * * LIST EQU $ JST GSZ GET SIZE IFF MDBUG CLSN =CR,A CR  JMP PRN JST *TINP(X,Y) INPUT ASCII CODE OPTION ENDC JST *TCOMMA(X,Y) ERROR IF TERMINATOR IS , IFF MDBUG CLSN =:A,Q ASCII OPTION 'A' JMP $+2 JMP *TERROR(X,Y) COPY Q,ACHO PRN EQU $ COPY *TDIOFG(X,Y),A GET DESIRED OUTPUT MEDIA FLAG CLSN ='P',A IS IT LP OUTPUT JMP $+2 JMP PRN11 COPY *TLPCNT(X,Y),A LINES/PAGE COPY A,*TLNCNT(X,Y)  COPY =TOF,A JST *TTYPLP(X,Y) DO TOP OF FORM PRN11 EQU $ ENDC JST *TCRLF(X,Y) NEW LINE COPY *TADDR(X,Y),A GET 1ST PARAMETER COPY A,SVWORD SAVE IT PRN1 EQU $ JST  *TPADDR(X,Y) COPY =-8,A IFF MDBUG COPY A,SKIPCN ENDC COPY A,PRNTCT 8 WORDS/LINE PRN2 COPY *SVWORD,A GET CONTENTS JST *TSHEX(X,Y) DO HEX ROUTINE FOLLOWED BY A SPACE  JST *TETEST(X,Y) NEXT FUNCTION IF DONE IMS PRNTCT JMP PRN2 IFF MDBUG COPY ACHO,A CLSN =:A,A CHECK FOR ASCII OPTION JST ASCPR YES, GO OUTPUT ASCII CODE ENDC COPY SVWORD,A LATEST ADDRESS JST *TCRLF(X,Y) NEW LINE JMP PRN1 IFF MDBUG ASCPR ENT COPY PRNTCT,A FETCH NUMBER OF HEX DUMPED COPY A,TABCN SAVE TAB CONSTANT SUB SKIPCN,A -(-ELEMENTS PER LINE) NEG A,A -ELEMENTS TO PUBLISH IN ASCII DUMP JEQ A,PRN7 DUMP COMPLETED, DO NEW LINE COPY A,PRNTCT CALCULATE HEAD OF ASCII ADD SVWORD,A COPY A,SVWORD  REFRESH WORD ADDRESS COPY TABCN,A FETCH TAB CONSTANT JEQ A,PRN5 NO TAB NEEDED PRN4 COPY  =-5,A ESTABLISH SPACE COUNTER COPY A,SPACN JST *TSPACE(X,Y) OUTPUT A SPACE IMS SPACN  BUMP SPACE COUNTER JMP $-2 CONTINUE UNTIL SPACED OUT IMS TABCN BUMP TAB COUNTER  JMP PRN4 CONTINUE TAB PRN5 COPY =-3,A ISSUE SPACES BETWEEN HEX & ASCII COPY A,SPACN  JST *TSPACE(X,Y) OUTPUT A SPACE IMS SPACN JMP $-2 PRN6 COPY *SVWORD,A GET DATUM ADDRESS  SHIFT A,RO,8 POSITION HIGH ORDER BYTE SUB =:7F,A SUBTRACT UPPER BOUNDARY OF ASCII SET JGT A,PRN61 ADD =:7F,A SUB =:20,A TEST FOR LOWER BOUND OF ASCII SET JLT A,PRN61 ADD =:20,A JMP $+2 PRN61 COPY =:2E,A INVALID ASCII CODE ISSUE SPACE JST *TTYP(X,Y) PUBLISH ON SPECIFIED I/O COPY *SVWORD,A FETCH DATUM ONCE MORE AND =:FF,A MASK TO LOW ORDER BYTE SUB =:7F,A TEST OFR UPPER BOUND OF ASCII SET JGT A,PRN62 TEST FOR VALID ASCII ISSUE SPACE IF NOT  ADD =:7F,A ADD BACK TO ITS VALUE SUB =:20,A TEST FOR LOWER BOUND OF ASCII SET JLT A,PRN6 2 ADD =:20,A JMP $+2 PRN62 EQU $ COPY =:2E,A INVALID ASCII CODE ISSUE SPACE JST  *TTYP(X,Y) PUBLISH ASCII IMS SVWORD BUMP MEMORY ADDRES TO NEXT DATUM NOP IMS PRNTCT  BUMP WORDS/LINE COUNTER JMP PRN6 CONTINUE ASCII CUMP PRN7 RTN ASCPR END OF THIS LINE RETURN ENDC * * WORD AREA * WSIZE WORD 0 PRNTCT WORD 0 IFF MDBUG ACHO WORD 0 SKIPCN WORD 0 SPACN WORD 0 TABCN WORD 0 QSAVE WORD 0 ENDC TITL ****** * * -- GSZ -- * * GET AND CHECK SIZE/2ND PARAMETER FOR LIST,SEARCH,FILL8 COPY * RETURN: WSIZE = WORD SIZE (ENDING ADD - STARTING ADD) * 'A' = TERMINATOR ****** GSZ ENT CLSN =',',A JMP $+2 PARAMETERS MUST BE SAPARATED BY , JMP *TERROR(X,Y)  ELSE ERROR JST *TINP(X,Y) GET 2ND PARAMETER COPY A,WSIZE SAVE TERM CHAR COPY Q,A GET 2ND PARAM IN AR COPY *TADDR(X,Y),Q GET FIRST PARAM IN QR CSM A,Q 2ND PARAM SHD BE >= 1ST JMP GSZ1 PROBLEM - 2ND < 1ST NOP SUB Q,A GET ACTUAL LENGTH IN AR  ADD =1,A GSZ3 EXCH WSIZE,A A=TERMN,WSIZE=SIZE RTN GSZ EXIT GSZ1 COPY *TCMND(X,Y),Q LOOK AT COMMAND CLSN ='L',Q IF LIST 2ND MAY BE OK JMP $+2 GSZ2 JMP *TERROR(X,Y) NO, ITS AN ERROR JLE A,GSZ2 CANT BE 0 OR NEG CSK A,=LLNTH MUST BE 1-LLNTH JMP GSZ3  OK JMP GSZ2 ERROR JMP GSZ3 OK SVWORD WORD 0 1ST PARAMETER KEEPER TITL ****** * * -- ETEST -- * * TEST FOR END OF PRINT/SRCH/COPY/FILL * INCREMENT STARTING ADD, DECREMENT WORD SIZE. (Q=WORDSIZE) ****** ETEST ENT COPY WSIZE,Q GET WORD COUNT IMS SVWORD BUMP ADDRESS BY 1 SUB =1,Q DECREMENT WORD COUNT JEQ Q,$+3 ALL DONE, BACK TO DBG COPY Q,WSIZE RESTORE WORD COUNT LEFT RTN ETEST ELSE RETURN IFF MDBUG COPY *TCMND(X,Y),A GET COMMAND ID CLSN ='L',A WAS LAST CMND 'L' JMP ERTNT CLSN ='S',A  OR WAS IT 'S' JMP $+2 JMP ERTN ERTNJ COPY *TDIOFG(X,Y),A GET OUTPUT FLAG CLSN ='T',A  TTY OUTPUT JMP ERTN GO BACK JST *TCRLF(X,Y) DO EXTRA CRLF JMP ERTN GO BACK ERTNT IMS PRNTCT NOP COPY ACHO,A HAS ASCII ASKED CLSN =:A,A JST  ASCPR FINISH UP ASCII DUMP COPY =0,A CLEAR ACHO COPY A,ACHO JMP ERTNJ ENDC ERTN JMP *TDBG(X,Y) BACK TO NEXT FUNCTION TITL ****** * * -- FILLP -- * * FILLING MEMORY WITH A CONSTANT VALUE * * ****** FILLP EQU $ JST GET2 GET 2ND,3RD & 4TH PARM COPY A,*TSTORE(X,Y) PUT * TO FLAG THIS COMMAND COPY *TADDR(X,Y),A JST SINKCK MAKE SURE FILL IS NOT IN DBG AREA COP Y A,SVWORD 1ST PARM COPY KEY,A FIL1 COPY A,*SVWORD FILL A WORD JST ETEST  CHECK FOR END ADD KEY1,A ADD INCREMENT/DECREMENT CONSTANT JMP FIL1 LOOP TITL ****** * * -- GET2 -- * * GET 2ND, 3RD & 4TH PARAMETER. * KEY -- FILLER CONSTANT/3RD PARM-START ADD FOR COPY COMMAND * KEY1 -- INCREMENT/DECREMENT CONSTANT OR MASK(FOR SEARCH) * ****** GET2 ENT COPY =0,Q COPY Q,KEY1 INITIALIZE INCREMENT/DECREMENT KEEPER JST GSZ GET 2ND PARM & SIZE TO BE FILLED CLSN =',',A THERE MUST BE A , FOR 3RD PARM JMP $+2 JMP *TERROR(X,Y) ERROR IF NO 3RD PARM JST *TINP(X,Y) GET 3RD PARM COPY Q,KEY SAVE FILL VALUE CLSN =',',A  IS THERE A 4TH PARM? JMP $+2 JMP GOGET2 NO,GO BACK TO CALLER COPY A,NOMACH  FLAG 4TH PARAMETER JST *TINP(X,Y) YES, GET 4TH PARM COPY Q,KEY1 SAVE INCREMENT/DECREMENT COUNT GOGET2 RTN GET2 BACK TO CALLER KEY WORD 0 FILLER KEEPER KEY1 WORD 0  INCREMENT/DECREMENT CONSTANT KEEPER TITL ****** * * -- SRCH -- * * SEARCH MEMORY * ****** SRCH EQU $ COPY =0,Q COPY Q,NOMACH INITIALIZE JST GET2 GET 2ND, 3RD & 4TH PARM  CLSN =',',A IS THERE A 5TH PARM JMP SRCH00 YES GET 5TH PARM COPY =0,A  EXCH A,NOMACH CLSN =',',A CHECK IF THERE WAS A 4TH PARM JMP SRCH55 COPY =-1,Q  COPY Q,KEY1 MASK OF :FFFF JMP SRCH11 NO, GO START SRCH SRCH55 EQU $ COPY KEY1,A GET LAST PARM CSK A,=0 NOP JMP SRCH11 COPY =-1,Q MASK OF :FFFF COPY Q,KEY1 ZERO MASK COPY *TLASTS(X,Y),A CLSN ='-',A MUST BE '-'  JMP $+2 JMP *TERROR(X,Y) ELSE ERROR COPY A,NOMACH SAVE '-' JMP SRCH11  START SEARCH SRCH00 EQU $ JST *TINP(X,Y) GET 5TH PARM COPY *TLASTS(X,Y),A GET LAST TERMINATOR CLSN ='-',A JMP $+2 JMP *TERROR(X,Y) ILLEGAL PARM COPY A,NOMACH A NO-MACH SEARCH SRCH11 EQU $ COPY *TADDR(X,Y),A COPY A,SVWORD GET 1ST PARM SRCH22 COPY *SVWORD,A FETCH A WORD XOR KEY,A COMPARE TO MATCH VALUE AND KEY1,A MASK IT  JNE A,SRCH33 NO MATCH, CHECK IF NO MATCH DESIRED COPY NOMACH,A JEQ A,FOUNDS MATCH FOUND, GO PRINT JMP SRCH44 SRCH33 COPY NOMACH,A CLSN ='-',A JMP FOUNDS SRCH44 JST ETEST  DO NEXT FUNCTION IF DONE, ELSE JMP SRCH22 LOOP FOUNDS JST *TCRLF(X,Y) NEW LINE  COPY SVWORD,A GET MATCH ADDRESS JST *TPADDR(X,Y) COPY *SVWORD,A GET MATCH VALUE   JST *THEX(X,Y) AND PRINT IT JMP SRCH44 NOMACH WORD 0 MATCH - NO MATCH KEEPER TITL ****** * * -- SINKCK -- * * CHECK TO ENSURE DBG AREA IS NOT BEING MODIFIED * * ****** SINKCK ENT COPY SINKV1,Q CALCUATE END OF DEBUG ADD X,Q INTO Q REG CSM A,Q IS START OF WORD>END OF DBG? JMP  SINK1 NO, CHECK FURTHER RTN SINKCK YES,OK JMP SINK2 OVERLAP ERROR SINK1 COPY X,Q CALCULATE START OF DBG SUB SINKV2,Q ADD *TWSIZE(X,Y),A CALCULATE END OF WORD SUB =1,A CSM A,Q IS END OF WORDLAST G-REG? JMP ADR2 NO, DONT BOTHER NOP YES,REPLACE WORKING G-REG COPY  A,ADRT2 WITH ONE NEARER TO ACTUAL. COPY Q,ADRT3 SAVE CURRENT G-REG NUMBER ADR2 EQU $ COPY Y,X RESTORE X IMS ADRT4 BUMP POINTER ADD =1,Q BUMP REGISTER NO.  CLSN =36,Q DONE WITH ALL REGISTERS? JMP $+2 YES JMP ADR1 ND LOOP COPY ADRT3,A ADD =1,A JEQ A,ADR4 NO APPLICABLE G-REG FOUND COPY ='=',A  JST *TTYP(X,Y) COPY ACTUAL,A CALCULATE G-REG OFFSET SUB ADRT2,A JST *THEX(X,Y) COPY ='G',A TYPE 'G' JST *TTYP(X,Y) COPY ADRT3,A REGISTER # FCONV EQU $  CONVERT & PRINT G-REG # SUB =10,A CONVERT TO ASCII JLT A,$+2 ADD =7,A  ADD ='9'+1,A JST *TTYP(X,Y) JMP ADR4 ADR4 EQU $ COPY =BLANK,A JST *TTYP(X,Y) RTN PADDR BACK TO CALLER * ACTUAL EQU CV01 ADRT2 EQU SVCV01 ADRT3 EQU CV02 ADRT4 EQU CV03 TITL ******* * -- SHEX -- DO HEX FOLLOWED BY A SPACE ******* SHEX ENT JST HEX COPY =' ',A JST TYP RTN SHEX ****** * -- HEX -- * TYPE 'A' AS 4 HEXADECIMAL DIGITS ****** * HEX ENT COPY A,ASV SAVE 'A' SHIFT A,RO,12 IST DIGIT JST CONV GO PRINT SHIFT  A,RO,8 2ND DIGIT JST CONV GO PRINT SHIFT A,RO,4 3RD DIGIT JST CONV GO PRINT JST CONV GO PRINT RBIT 1,S RTN HEX BACK TO CALLER CONV ENT AND =:F,A MASK IT OFF SUB =10,A CONVERT TO HEX JLT  A,$+2 JMP IF 0 THRU 9 ADD =7,A ELSE MAKE A THRU F ADD ='9'+1,A ADD ASCII OFFSET JST TYP TYPE DIGIT COPY ASV,A REFERESH 'A' RTN CONV   LOOP ASV WORD 0 SAVE 'A' FOR HEX ROUTINE TITL ****** * * -- RKB -- INPUT CHARACTER *  'A' RETURNS WITH READ CHARACTER * STANDARD I/O DISTRIBUTER ADDRESS = :F * CHANNEL ADDRESS = :4 *  LSB = 1 FOR CONTROL TRANSFER FUNCTION * 0 WORD TRANSFER FUNCTION ****** RKB ENT COPY DIOTY,Q  GET INPUT DEVIE ADD 8 CHANNEL # COPY S,X COPY X,SAVES RBIT 8,S COPY D100,X  RESET TTY CODE COPY D8618,A START,ECHO,NO INTERUPT COMMAND XNX Q OUT A,1  OUTPUT INITIALIZE CONTROL FUNCTION XNX Q IN 1,A INPUT TTY STATUS CONTROL FUNCTION  SHIFT A,RO,4 SHIFT WORD RADY BIT IN OV JF OV,$-3 LOOP TILL WORD IS AVAILABLE (1 CHAR)  XNX Q IN 0,A GET A CHARACTER XNX Q OUT X,1 RESET TTY CONTROL FUNCTION AND =:7F,A AND OFF BIT 7 COPY SAVES,X COPY X,S REFRESH 'S'  COPY Y,X REFRESH 'X' WITH BASE ADDRESS RTN RKB BACK TO CALLER D100 WORD :100 RESET COMMAND WORD D8618 WORD :8618 START,ECHO SAVES WORD 0 TITL ****** * -- TYPCRT -- OUTPUT A CHARACTER FROM A REG * STANDARD IOD ADD = :F,CH ADD = 4 * LSB = 1 FOR CONTROL 0 FOR WORD TRANSFER * MOD BITS OF COMMAND WORD: * BIT 1 -- SELECT OUTPUT(1), SELECT INPUT(0) * 3 -- ECHO INCOMING WORD * 4 -- BRANCH ADDRESS * 9 -- BEGIN BRANCH * 10-- LOAD MODE FIELD BITS INTO MODE REG * 15-- DISABLE DMA ****** TYPCRT ENT COPY DIOTY,Q GET DIO ADDRESS 8 CHANNEL # COPY A,*TVALU(X,Y) SAVE VALUE TO BE PRINTED  COPY D8612,X START,REQUEST TO SEND,NO INTERRUPT XNX Q OUT X,1 INITIALIZE XNX Q OUT A,0 SEND A CHARACTER COPY D100,X RESET CODE XNX Q IN 1,A INPUT TTY STATUS WORD SHIFT A,RO,5 SHIFT TRANSMITTER BIT IN OV JT OV,$-3 LOOP TILL CHARACTER IS TRANSMITTED XNX Q IN 1,A INPUT STATUS AGAIN SHIFT A,RO,5 JF OV,$-3 LOOP TILL TTY/CRT IS READY TO RECEIVE XNX Q OUT X,1 RESET PICO COPY Y,X REFRESH 'X' WITH BASE ADDRESS COPY *TVALU(X,Y),A RESTORE VALUE TO BE PRINTED RTN TYPCRT BACK TO CALLER D8612 WORD :8612 DIOTY WORD :F8 TTY/CRT DIO ADD=:F8, CHANNEL # = 4 TITL ***** * * -- TYP -- OUT PUT PRINT CONTROL ROUTINE * 'A' IS DESTROYED AT RETURN * 'Q', 'X', & 'Y' ARE NOT DESTROYED * ****** TYP ENT COPY Q,INPTEM SAVE 'Q' COPY S,Q COPY Q,SAVES SAVE 'S' IFF MDBUG COPY *TCMND(X,Y),Q GET COMMAND ID CLSN ='A',Q  DEVICE ASSIGNEMT? JMP TYPALL CLSN ='L',Q IS IT LIST? JMP TYPALL   YES-CHECK IF LP OPTION SELECTED CLSN ='S',Q IS IT SEARCH? JMP TYPALL YES-CHECK IF LP OPTION SELECTED CLSN ='Z',Q IS IT Z-STRING? JMP TYPALL YES-CHECK IF LP OPTION SELECTED IFT XDBUG CLSN ='M',Q IS IT BUS MONITOR? BM JMP TYPALL YES-CHECK IF LP OPTION SELECTED BM ENDC JMP TYPSTD TYPALL EQU $ COPY DIOFLG,Q GET DESIRED OUTPUT MODIA FLAG CLSN ='T',Q IS IT TTY/CRT? JMP TYPSTD CLSN ='P',Q  OR LP OUTPUT? JMP TYPOPT CLSN ='B',Q MUST BE BOTH JMP $+2 JMP *TERROR(X,Y)  ELSE,ERROR JST TYPCRT DO CRT OUTPUT JMP TYPOPT DO LP OUTPUT DIOFLG WORD 0 OUTPUT OPTION KEEPER LNCNT WORD 0 RUNNING COUNT OF LINESPRINTED DBG4:CNT EQU $ TO SHOW ON LOAD MAP LPCNT WORD -39 DEFAULT LP LINES/PAGE DIOLP EQU :7F LP DIO ADD = :F, CHANNEL # = 7 ENDC TYPSTD JST TYPCRT DO CRT IFF MDBUG JMP ENDTYP TYPOPT CLSN =LF,A  LINE FEED? JMP $+2 YUP! GO CHECK LINE COUNT JMP DOLP NOP! DO PRINT LP  IMS LNCNT INCREMENT LINES PRINTED JMP TYNAM COPY =TOF,A DO TOP OF FORM JST TYPLP DO TOF COPY *TLPCNT(X,Y),Q LINES/PAGE COPY Q,LNCNT JMP $+2  GET OUT DOLP JST TYPLP PRINT A CHARACTER ENDC ENDTYP COPY SAVES,Q COPY Q,S  RESTORE 'S' COPY INPTEM,Q RESTORE 'Q' RTN TYP BACK TO CALLER IFF MDBUG DBG4:LP EQU $ TYNAM JST TYPLP NO-OP THIS LOC. IF AUTO-LF LP JMP ENDTYP TITL ****** * * -- TYPLP -- OUTPUT 'A' TO DIO LINE PRINTER * ****** TYPLP ENT COPY A,Q SAVE 'A' OUT A,DIOLP%1  OUTPUT CHARACTER TO PICO COPY D8610,A START DONT INTERRUPT OUT A,DIOLP%1;1 TELL PICO OUT A,DIOLP%1;1 COPY D100,X RESET INSTRUCTION IN DIOLP%1;1,A GET STATUS FROM LP SHIFT A,RO,1 BUSY BIT TO OV JT OV,$-2 IF BUSY WAIT FOR IT OUT X,DIOLP%1;1 RESET LP PICO SHIFT X,RO,1 WASTE SOME TIME JNE X,$-1 COPY Y,X  REFRESH 'X' COPY Q,A RESTORE 'A' RTN TYPLP BACK TO CALLER D8610 WORD :8610 ENDC TITL VALU WORD 0 PARMANENT PARM VALUE KEEPER LASTSN WORD 0 LAST SPECIAL TERMINATOR KEEPER TEST WORD 0 LAST TERMINATOR KEEPER INPTEM WORD 0 ****** * * -- INP -- INPUT A PARAMETER * * EXIT= 'Q' = 'VALU' = PARAMETER VALUE * 'TEST'= CURRENT TERMINATOR (, OR CR) * 'LASTSN' = NEXT TO LAST SPECIAL TERMINATOR (+-*X/) * 'A' = LAST TERMINATOR (, OR CR OR ;) ****** IFT XDBUG INPP2 7 WORD 0 BM INPP20 ENT  BM COPY INPP20,Q BM COPY Q,INP  BM COPY =1,Q BM JMP INP+2  BM ENDC BM INP ENT IFT XDBUG COPY =0,Q BM COPY Q,INPP27  BM ENDC COPY =0,Q INITIALIZE COPY Q,VALU FINAL NEW VALUE KEEPER COPY Q,LASTSN SPECIAL TERMINATOR KEEPER (+-*X/) COPY Q,TEST LAST TERMINATOR KEEPER (, OR CR) COPY Q,*TPFLG(X,Y) PARAMETER RECIEVED FLAG COPY Q,INPTEM WORKING PARAMETER VALUE INPP1 JST *TRKB(X,Y) GET A CHARACTER CLSN ='R',A USER HARDWARE REGISTER? JMP  INPP4 CLSN =BLANK,A BLANK CHAR? JMP INPP9 CLSN ='G',A G-REGISTER? JMP  INPP3 PROCESS GENERAL REGISTER CLSN =',',A , JMP INPP5 PROCESS  CLSN =';',A ; / JMP INPP5 PROCESS /  CLSN ='+',A + JMP INPP5 PROCESS CLSN ='-',A - JMP INPP5 PROCESS CLSN =CR,A VALID TERMINATOR JMP INPP5 CLSN ='*',A  * - GO PROCESS JMP INPP5 CLSN ='/',A / JMP INPP5 CLSN ='X',A X JMP INPP5 IFT XDBUG COPY INPP27,Q BM JEQ  Q,INPP21 IF NOT INPP ENTRY... BM CLSN ='=',A BM  JMP INPP5 IF '='... BM CLSN ='<',A  BM JMP INPP5 IF '<'... BM CLSN ='>',A  BM JMP INPP5 IF '>'... BM CLSN =':',A  BM JMP INPP5 IF ':'... BM ENDC  BM INPP21 JST CHK BM  EXCH A,INPTEM BUILD HEX VALUE SHIFT A,LO,4 SHIFT 4 LEFT INPP2 ADD INPTEM,A  ADD VALUE COPY A,INPTEM SAVE CURRENT VALUE IMS *TPFLG(X,Y) PARAMETER ENTERED COPY  =0,Q COPY Q,LASTSN JMP INPP1 INPP6 IMS *TPFLG(X,Y) FLAG PARM RECEIVED INPP5 CLSN =CR,A  JMP $+2 COPY A,LASTSN EXCH A,TEST GET LAST SIGN (+-)& SAVE NEW COPY INPTEM,Q   GET CURRENT WORKING PARM VALUE CLSN ='-',A NEGATE? NEG Q,Q YES, NEGATE THE VALUE COPY Q,A ADD VALU,A ADD IN OLD VALUE COPY A,VALU UPDATE PERMANENT VALUE COPY A,Q SAVE IT ALSO COPY =0,A COPY A,INPTEM NO CURRENT VALUE COPY TEST,A GET CURRENT TERMINATOR CLSN ='+',A IS IT PLUS? JMP INPP1  YES,GO GET MORE WORD CLSN ='-',A MAY BE IT IS MINUS JMP INPP1 YES,GET MORE WORD  CLSN ='*',A IF IT IS * OR JMP INPP8 CLSN ='/',A / OR JMP INPP8 CLSN ='X',A X THEN NEXT MUST BE CR JMP INPP8 RTN INP  END OF EXPRESSION, RETURN * EVALUATE G-REGISTERS INPP3 JST *TRKB(X,Y) GET G-REGISTER NUMBER JST CHKG DEVELOP G REGISTER INDEX ADD A,X ADD BASE ADD TO INDEX ADD GBASE,X  ADD G:0-BASE OFFSET COPY 0(X),A GET REGISTER VALUE COPY Y,X REFRESH 'X' TO BASE ADD JMP INPP2 * * EVALUATE HARDWARE R-REGISTERS INPP4 JST *TRKB(X,Y) GET R-REG NUMBER JST CHKR ADD Q,X ADD BASE ADD ABASE,X ADD AR-BASE OFSET COPY 0(X),A  GET REGISTER VALUE COPY Y,X REFRESH 'X' TO BASE ADD JMP INPP2 INPP8 COPY A,LASTSN JST *TRKB(X,Y) READ LAST CHARECTER(MUST BE CR) COPY A,TEST CR CLSN =CR,A  AFTER SPECIAL TERMINATOR, IT RTN INP MUST BE CR ELSE ERROR JMP *TERROR(X,Y) ERROR INPP9 COPY ='+',A COPY A,LASTSN MAP BLANK TO + JST *TRKB(X,Y) READ LAST CHA(MUST BE CR) CLSN =CR,A JMP INPP5 DO ALL ADJUSTMENT JMP *TERROR(X,Y) AFTER BLANK CR MUST BE LAST CHAR GBASE WORD G0-BASE ABS OFFSET OF GENERAL REG FROM BASE ABASE WORD EXIT-BASE TITL ****** * *  -- CHKR -- * * CALCULATES INDEX OF THE USER REGISTER * ENTER: * 'A' = REGISTER * EXIT: 'Q' = INDEX * ****** CHKR ENT COPY A,CHKG SAVE 'A'=REG NAME ADD CHARAD,X GET CHAR TABLE PTR COPY =0,Q CHKR1 EQU $ COPY 0(X),A GET A CHARACTER CSK A,CHKG COMPARE WITH REG NAME NOP JMP $+2 JMP CHKR2 GOT IT ADD =1,X NEXT CHARACTER INDEX ADD =1,Q INCREMENT INDEX CLSN =CTABLN,Q EVER FOUND? JMP CHKRER JMP  CHKR1 LOOP CHKR2 EQU $ COPY Y,X REFERESH 'X' RTN CHKR GO BACK TO CALLER CHKRER COPY Y,X JMP *TERROR(X,Y) ILLEGAL REGISTER CHARAD WORD CTABL-BASE CTABL WORD 'P','A','Q','X','Y' WORD 'K','L','S','D','C' CTABLN EQU $-CTABL TITL ****** * * -- CHKG -- * DEVELOP G-REGISTER ! INDEX * ENTER 'A' = ASCII DIGIT * EXIT 'A' = INDEX * ****** CHKG ENT CSK A,='Z' >Z? JMP  $+2 NO JMP *TERROR(X,Y) NOT 0-9, A-Z ERROR CSK A,='A' JMP CHKG1A  NOT A-Z, MAY BE 0-9 NOP AND =:001F,A MASK OUT UNDESIRED BITS ADD =9,A +9 FOR 10 THRU 36 VALUE OF A-Z JMP CHKG2A GOT INDEX, GET OUT NOW CHKG1A CSK A,='9' 9 OR LESS?  JMP $+2 YES JMP *TERROR(X,Y) NOT 0-9, ILLEGAL DIGIT CSK A,='0' JMP *TERROR(X,Y) NOT 0-9, ILLEGAL DIGIT NOP AND =:000F,A MASK OUT UNDESIRED DIGIT CHKG2A RTN CHKG  GOT IT, BACK TO CALLER TITL ****** * * -- CHK -- * CONVERT ASCII CHARACTER (0-9,A-F)ONLY) TO HEX, IF NOT IN * RANGE OF HEX,GO TO ERROR ROUTINE FOR ILLEGAL CHARACTER * ENTER 'A' = ASCII CHARACTER * EXIT 'A' = HEX DIGIT * ****** CHK ENT SUB ='9'+1,A TEST FOR DECIMAL DIGIT JGE A,CHK2 NOT DECIMAL DIGIT  ADD =10,A GOT DECIMAL JGE A,CHK3 CHK1 JMP *TERROR(X,Y) NOT A NEXADECIMAL DIGIT CHK2 SUB =13,A -13 JGE A,CHK1 NOT A THRU F ADD =6,A +6 JLT A,CHK1 NOT A THRU F ADD =10,A +10 FOR VALUES 10 THRU 15 CHK3 JMP *CHK  BACK TO CALLER IFF MDBUG TITL ******* * -- Z -- * PARM 1 - HEAD LINK WORD ADDRESS * PARM 2 - # OF WORDS PER LINK LIST * PARM 3 - LINK OFFSET * LINK WORD POINTS TO THE NEXT LINK WORD, SO START OF THE NEXT * LINK LIST WILL BE LINK WORD-LINK OFFSET(3RD PARM). * ******* ZTRING EQU $ CLSN =',',A 2ND PARM? # OF WORDS/LINK JMP $+2 JMP ZT1 NO, USE LAST VALUES JST *TINP(X,Y) YES, GET 2ND PARM COPY Q,ZP1 SAVE # OF WORDS/LINK CLSN =',',A 3RD PARM? LINK OFFSET JMP $+2 JMP ZT1 NO, USE LAST VALUE JST *TINP(X,Y) GET 3RD PARM-LINK OFFSET COPY Q,ZP2 SAVE LINK OFFSET JST *TCOMMA(X,Y) ERROR IF , IS TERMINATOR ZT1 JST *TCRLF(X,Y)  NEW LINE COPY ZP1,Q GET # OF WORDS/LINK COPY *TADDR(X,Y),A GET HEAD LINK WORD ADDRESS  COPY A,ZP0 SAVE START ADDRESS ZT2 COPY *ZP0,A GET A LINKED WORD JST *TSHEX(X,Y) PRINT IT IMS ZP0 NEXT WORD SUB =1,Q DECREMENT WORD COUNT JNE  Q,ZT2 NOT DONE YET? COPY ZP0,A SUB ZP1,A BACK TO BEGINING ADD ZP2,A  + LINK OFFSET COPY A,X COPY 0(X),A COPY Y,X REFERESH 'X' COPY A,*TADDR(X,Y) NEW LINK LIST ADDRESS JNE A,ZT1 START AGAIN COPY *TDIOFG(X,Y),A GET OUTPUT FLAG CLSN ='T',A TTY OUTPUT JMP $+2 JST *TCRLF(X,Y) DO EXTRA CRLF JMP "  *TDBG(X,Y) ALL DONE * ZP0 WORD 0 LINK ADDRESS KEEPER ZP1 WORD :A # OF WORDS/LINK KEEPER ZP2 WORD 0 LINK OFFSET KEEPER ZERROR JMP *TERROR(X,Y) # OF WORDS < 1 TITL ****** * -- W -- * BINARY LOADER W(OFFSET) ****** LOAD EQU $ JST *TINP(X,Y) GET OFFSET COPY Q,K SAVE LOAD LOC COPY =0,A COPY A,LDSW INITIALIZE 1ST TIME SWITCH  JST LOAD1 JNE A,TYPE * * ZERO RECORD LENGTH IS AN END OF FILE * EOT EQU $ JST *TCRLF(X,Y) NEW LINE COPY LOADAD,A LOAD ADDRESS JST *TSHEX(X,Y) GO PRINT IT COPY PC,A  LAST LOAD ADD JST *TSHEX(X,Y) PRINT IT COPY EXEC,Q IJEQ Q,LDEND COPY EXEC,A JST *TSHEX(X,Y) PRINT EXECUTION ADD LDEND JMP *TDBG(X,Y) END OF LOAD - BACK TO DBG ** *  TYPE CODE DECODING TYPE EQU $ JST INPB1X GET TYPE CODE COPY A,Q SAVE TYPE CODE CLSN =:40,Q CHECK NULL JMP TYPE CLSN =:4F,Q LIST SEGMENT NAMES JMP SKIPIT  CLSN =:6D,Q NOTE RECORD JMP SKIPIT CLSN =:6F,Q LIST SEGMENT ATTRIBUTES JMP SKIPIT  JST INPW1X GET LENGTH NEG A,X NEGATE WORD LENGTH COPY X,CNT  MAKE A COUNTER COPY Y,X RESTORE 'X' WITH BASE ADDRESS CLSN =:18,Q CHECK FOR BEGIN CODE JMP TYPE YES SUB =:F,Q TEST FOR RANGE JGT Q,TERRO  TYPE CODE ERROR XNX Q INDEX NEXT INSTRUCTION JMPTBL EQU $ JMP JMPTBL+:F JMP TERRO ILLEGAL TYPE CODE (1=LSI2 BEGIN TC) JMP AEND 2 = ABS END JMP REND  3 = REL END JMP AORG 4 = ABS ORG JMP RORG 5 = REL ORG JMP WORD 6 = ABS WORD JMP WORD 7 = REL WORD JMP WORD 8 = RES AND FILL JMP BACO 9 = BYTE ADDRESS CONSTANT JMP TERRO A = NOT SUPPORTED JMP TERRO B = NOT SUPPORTED JMP TERRO C = NOT SUPPORTED JMP ENTH  D = ENTRY HERE (NAM) JMP EXTADO E = EXTERNAL ADDRESS PRIME EQU $ ENTH EQU $  JST INPW1 IGNORE BOTH JST INPW1 IGNORE BOTH JMP TYPE * INPW1X ENT  JST INPW1 RTN INPW1X INPB1X ENT JST INPB1 RTN INPB1X ***** * TEST FOR MARKER ***** LOAD1 ENT JST INPB GET 1 FRAME XOR =:FF,A TEST FOR MARKER JNE A,LOAD1+1 NO - LOOP TILL FIND COPY A,WSUM INITIALIZE CHECKSUM JST INPW GET 2 FRAMES NEG A,Q SAVE RECORD SIZE COPY Q,RECSZ RTN LOAD1 TERRO JMP TERR EXTADO JMP EXTAD BACO JMP B# AC LINK TO AVOID LPOOLS TITL ** * ORG RELOCATABLE -5- , -4- ABSOLUTE ** RORG EQU $ ADD K,A  ADD OFFSET AORG EQU $ COPY LDSW,Q 1ST TIME SWITCH JNE Q,$+3 COPY A,LOADAD SAVE START LOAD ADD COPY A,LDSW TURN OFF 1ST TIME SWITCH COPY A,PC UPDATE STORAGE ADDRESS JMP TYPE BACK TO TC DECODE ** * REL, ABS, RES AND FILL WORD PROCESSING(TC = 6, 7 & 8) * ** LOPDAT EQU $ CLSN Q,=8-:F&:FF CHECK FOR RES AND FILL JMP AWORD IF RES DR FILL KEEP OLD VALUE WORD EQU $ JST INPW1 GET NEW WORD CLSN Q,=7-:F&:FF CHECK FOR REL WORD RWORD ADD K,A REL WORD, ADD BIAS AWORD EQU $ SBIT 6,S JST CKMEM  MAKE SURE DBG AREA IS INTACT COPY A,*PC STORE IN MEMORY IMS PC BUMP MEMORY POINTER JMP $+2 JMP MEERR MEM OVERFLOW IMS CNT BUMP COUNT JMP LOPDAT DO AGAIN RBIT 6,S JMP TYPE DONE ** * -- CKMEM -- ** CKMEM ENT COPY A,X SAVE 'A' COPY Q,L SAVE 'Q' COPY PC,Q  GET MEMORY ADDRESS COPY TBASEW,A ADD Y,A CSK Q,A JMP CKMEM1 NOP JMP CKMEND NOT IN DBG AREA CKMEM1 COPY Y,A GET BASE ADD CSK Q,A JMP CKMEND  NOP COPY Y,X 'X' HAS BASE ADD JMP MEERR 'M' ERROR CKMEND EQU $ COPY  X,A RESTORE 'A' COPY L,Q RESTORE 'Q' COPY Y,X 'X' HAS BASE ADD RTN CKMEM * SKIPIT EQU $ JST INPB1 NEG A,A COPY A,COUNTZ JST INPB1  IMS COUNTZ JMP $-2 JMP TYPE * COUNTZ WORD 0 TBASEW WORD TAIL-BASE PC WORD 1 WSUM WORD 0  CHECK SUM KEEPER RECSZ WORD 0 RECORD LENGTH KEEPER LOADAD WORD 0 ORIGINAL LOAD ADD KEEPER CNT WORD 0 BYTE COUNT KEEPER EXEC WORD 0 EXECUTION ADD KEEPER LDSW WORD 0 1ST TIME SWITCH WTEMP WORD 0 TEMP LOC WTDMV WORD 0 TEMP PRIMEX JMP PRIME TO AVOID LPOOL * * ABS/REL (2,3) END TYPE CODE PROCESSING * * NOTE: END ADDRESS OF :FFFF IS NOT AN EXECUTION ADDRESS * REND EQU $ ADD K,A ADD RELOCATION BIAS IF ANY AEND EQU $  COPY A,EXEC STORE EXECUTION ADDRESS JMP TYPE ****** * INPW/INPB * ****** INPW ENT JST  INPB GET 1ST BYTE SHIFT A,LO,8 SHIFT COPY A,WTEMP SAVE IN TEMP LOC JST INPB GET 2ND BYTE OR WTEMP,A COMBINE RTN INPW INPB ENT  JST PRTRIN READ A BYTE IN 'A' * DO CHECKSUM CALCULATIONS EXCH A,WSUM SHIFT A,RO,1 JF $  OV,$+2 ADD =:80,A XOR WSUM,A AND =:FF,A STRIP TO 8 BITS EXCH WSUM,A  RESTORE CHARACTER RTN INPB **** * INPB1 INPB1 ENT JST TESTTC JST INPB IMS  RECSZ DECREMENT RECORD LENGTH NOP RTN INPB1 INPW1 ENT JST TESTTC JST INPW  GO GET 2 BYTES IMS RECSZ RECORD SIZE -1 IMS RECSZ AGAIN NOP  RTN INPW1 BACK TO CALLER **** * CKSUM COMPARE ***** CKSMW EQU $ JST INPW SET CHECKSUM VALUE SUB WTDMV,A JNE A,CERROR BAD CHECKSUM JST LOAD1 JNE A,$+2 JMP *TEOT(X,Y) END OF FILE CHECK JMP *TESTTC ***** * CHECKSUM ERROR ***** CERROR EQU $ JST *TCRLF(X,Y) NEW LINE COPY ='C',A PRINT 'C' FOR ALL ERRORS JST *TTYP(X,Y) PRINT 'C' JMP *TDBG(X,Y) BACK TO DBG ***** * TESTTC ***** TESTTC ENT COPY WSUM,A SAVE CURRENT CHECKSUM COPY A,WTDMV SAVE IN TEMP LOC COPY RECSZ,A ALL DONE? JEQ A,CKSMW YES GO TO TEST FOR CORRECT CHECKS1M RTN TESTTC * * BAC TYPE CODE(9) PROCESSING * BAC EQU $ ADD K,A ADD RELOCATION BIAS IF ANY COPY =-1,X COPY X,CNT SET COUNT TO -1 COPY Y,X RESTORE 'X' WITH BASE VALUE JMP RWORD STORE IT * * EXTAD (TC=E) PROCESSING * EXTAD EQU $  COPY =-1,A EXTERNALS ARE MADE -1 JST CKMEM COPY A,*PC IMS PC JMP PRIMEX ** * TERR ** TERR EQU $ JST *TCRLF(X,Y) NEW LINE COPY ='T',A JST *TTYP(X,Y)  PRINT 'T' ADD =:F,Q ORIGINAL TYPE CODE COPY Q,A JST *THEX(X,Y) PRINT ERRONEOUS TC JMP *TDBG(X,Y) BACK TO DBG * * MEERR * MEERR EQU $ JST *TCRLF(X,Y) NEW LINE  COPY ='M',A JST *TTYP(X,Y) PRINT 'M' COPY *PC,A * - READS FROM FIRST READY DEVICE (HSR HAS PRECEDENCE) JST *THEX(X,Y) PRINT MEMORY LOCATION JMP *TDBG(X,Y) BACK TO DEBUG TITL ****** * PRTRIN * INPUYT CHARACTER FROM DIO HSR OR TTY IN 'A' * DIO HSP READER = :FA (CHANNEL 6) * TTY = :F4 (CHANNEL 4) ****** PRTRIN ENT JST SVOVX SAVE 'OV' AND 'X' COPY PD100,X RESET CODE  COPY PD8614,A DIO TAG MASK OUT A,:FB STEP HSR OUT A,:F9 STEP TTY HSRDY IN :FB,A GET HSR STATUS SHIFT A,RO,2 JT OV,TTYRDY IF NOT RDY, TRY TTY SHIFT A,RO,2 JT OV,HSRDY LOOP HSRDY1 IN :FB,A SET HSR STATUS SHIFT A,RO,2 SYSTEM READY TO OV JT OV,TTYRDY IF NOT RDY, TRY TTY SHIFT A,RO,2  SYSTEM READY TO OV JF OV,TTYRDY TRY TTY IF NOT RDY IN :FA,A GET A HSR CHARACT% ER JMP EXIN * TTYRDY IN :F9,A GET TTY STATUS SHIFT A,RO,2 SYSTEM READY TO OV  JT OV,HSRDY1 BACK TO TRY HSR SHIFT A,RO,2 SYSTEM READY TO OV JF OV,HSRDY1  IF NOT RDY, TRY HSR IN :F8,A INPUT A TTY CHARACTER EXIN OUT X,:FB RESET HSR OUT X,:F9 RESET TTY JST RSVOVX RESTORE 'OV' AND 'X' RTN PRTRIN  BACK TO CALLER TITL ****** * PPOT * OUTPUT 'A' TO HS PUNCH * DIO HSPT PUNCH :FC (CHANNEL 6) * ****** PPOT ENT JST SVOVX SAVE OV AND 'X' OUT A,:FC SEND WORD COPY PD8270,X  START, DON'T INTERRUPT OUT X,:FD TELL PICO PROCESSOR COPY PD100,X RESET MASK IN :FD,A INPUT STATUS SHIFT A,RO,4 READY TO OV JT OV,$-2  WAIT FOR IT TO GO AWAY IN :FD,A INPUT STATUS SHIFT A,RO,4 READY TO OV  JF OV,$-2 WAIT FOR READY OUT X,:FD RESET PICO JST RSVOVX RTN PPOT TITL ****** * TYOT * OUTPUT 'A' TO TTY PRINTER(AND PUNCH IF TURNED ON) * * ****** TYOT ENT JST SVOVX  SAVE OV AND 'X' COPY PD8612,X START REQUEST TO SEND, DONT INT OUT X,:F9  START PICO OUT A,:F8 SEND WORD COPY PD100,X RESET CODE IN :F9,A  INPUT STATUS SHIFT A,RO,5 JT OV,$-2 IN :F9,A SHIFT A,RO,5 JF OV,$-2  OUT X,:F9 RESET PICO JST RSVOVX RESTORE OV AND 'X' RTN TYOT ****** *  WORD CELL ****** PD100 WORD :100 PD8614 WORD :8614 PD8270 WORD :8270 PD8612 WORD :8612 KEEPS WORD 0 TITL * *  SVOVX * SVOVX ENT COPY S,X COPY X,KEEPS SAVE 'S' RTN SVOVX BACK TO CALLER * RSVOVX ENT COPY KEEPS,X COPY X,S RESTORE 'S' COPY Y,X RESTORE 'X' RTN RSVOVX BACK TO CALLER PR2 ENT JST PRTRIN YES - GO READ A CHARACTER RTN PR2 TITL ******** * * -- D -- BINARY DUMP/VERIFY * * DF1,T1,F2,T2,F3,T3,F4,T4,F5,T5,F6,T6,(TADD) * * F1,F2 ETC. ARE FROM(START) MEM ADDRESS * T1,T2 ETC. ARE END MEM ADDRESS * TADD - IS OPTIONAL TRANSFER ADDRESS * * NOTE: UPTO SIX(6) PROGRAM SEGMENTS CAN BE DUMPED * ******** DUMP EQU $ COPY =0,A COPY A,TRANSA COPY A,TRANFG INITIALIZE COPY A,SEGNO INITIALIZE NO OF SEGMENT KEEPER ADD ORGAD,X  OFFSET+BASE COPY X,SVPAD GET SAVE TABLE START ADDRESS COPY Y,X RESTORE 'X' * READ ALL THE FROM & TO ADDRESS & SAVE LOPPAR EQU $ JST *TINP(X,Y) GET FROM ADDRESS CLSN =CR,A WAS THIS TRANSFER ADD? JMP GOTTA YES GO STORE TRANSFER ADD IMS SVPAD & COPY Q,*SVPAD SAVE FROM ADDRESS COPY Q,*TADDR(X,Y) SAVE FOR GSZ ROUTINE JST *TGSZ(X,Y)  GET SIZE COPY *TWSIZE(X,Y),Q IMS SVPAD BUMP SAVE TABLE ADDRESS COPY Q,*SVPAD SAVE WORD SIZE TO BE DUMPED IMS SEGNO BUMP NO OF SEGMENTS TO BE DUMPED COPY SEGNO,Q CLSN =6,Q SEGMENT NO SHOULD NOT BE MORE THAN 6 JMP GETTAD CLSN =CR,A  END OF INPUT? JMP BDV YES GO START DUMP JMP LOPPAR * READ TRANSFER ADDRESS IF ANY GETTAD EQU $ CLSN =',',A JMP $+2 ALL DONE JMP BDV JST *TINP(X,Y) GET TRANSFER ADDRESS GOTTA EQU $ COPY Q,TRANSA SAVE IT COPY Q,TRANFG FLAG IT  CLSN =',',A JMP *TERROR(X,Y) TOO MANY PARAMETERS * SET UP FOR DUMP/VERIFY BDV EQU $ ADD ORGAD,X OFFSET+BASE COPY X,SVPAD GET TABLE ADDRESS COPY Y,X RESTORE 'X'  COPY SEGNO,A JGT A,$+2 JMP *TERROR(X,Y) BAD INPUT COPY A,BFLG BFLG>0 = BEGIN NEG A,A COPY A,SEGNO NEGATIVE # OF SEGMENTS COPY *TCMND(X,Y),A GET COMMAND I/D(V OR D) CLSN ='V',A VERIFY JMP $+2 YES,GO SET VERIFY FLAG COPY =0?ÿÿÿÿÿÿe;810914105355810914105355811109180608eú@€810914105355810914105355811109180607e:' 810914105355810914105355810914105355e810914105355810914105355810914105355810914105355810914105355810914105355eSI 8009290214170080092902143550811109174716deQOM790111120000OM790111120000OM790111120000e>%Æ8011240221365080112402214350811109180245d eQdœ^Mµ$O8011240225242580112402262600811109181658d(  e Œ8106301304157581063013042250810630130605) * + , - . / 0 `ÿÿÿÿÿÿð. PAT495 MACA PAT495P3 ASM PAT495P9 ASMPAT495P5 ASM TITL PAT495P3 FLOATING POINT INSTRUCTIONS TESTING 84-93814-13 TITL FLOATING POINT INITIALIZATION NAM FLPT MACHINE =:20 ORG PART3ST ATRAP EQU :A8 FLPT EQU $ COPY DEMAND,A DO A LCNTX IF TESTS OTHER THAN RBIT 0,A BIDP & I/O ARE RUN RBIT 4,A J1 NE A,$+2 JMP PART4ST COPY =FLTPT,A COPY =CONTXT,X COPY A,0(X) COPY STATSV,A COPY A,2(X) LCNTX ERROR: LCNTX,DID,NOT,WORK,PROPERLY FLTPT EQU $ COPY DEMAND,A FETCH TEST SELECTION AND =:20,A TEST BIT 5 JNE A,$+2 IF SET, EXECUTE TEST JMP PART4ST EXIT TEST IF NOT SET COPY =5,A FLOATING POINT RUN INDICATOR SELP A,4 OUTPUT TO CONSOLE JMP FLTPT0 INITRP ENT COPY IMSQ,A COPY 'IMS QTEMP' TO INTERRUPT LOCATION COPY A,ATRAP+2 FOR ARITHMETIC EXCEPTION TRAP COPY =:9F7C,A COPY 'JMP *$-3' TO RETURN FROM TRAP COPY A,ATRAP+3 COPY =0,A COPY A,ATRAP CLEAR SAVED 'P' COPY A,ATRAP+1 CLEAR SAVED 'I' COPY A,QTEMP ZERO OUT TRAP FLAG JMP *INITRP IMSQ IMS QTEMP LPOOL FLTPT0 COPY =0,A COPY A,IDPCNT SET UP LOOP COUNTER FLTPT1 COPY =0,A COPY A,PCOUNT SET UP TEST COUNTER TITL --FIX-- INSTRUCTION TEST (PART 3-1) * * * THE FOLLOWING INSTRUCTION IS TESTED IN THIS SECTION: * *  FIX * * * +:FDF64F +0 FIX = :0000 :0000 ALL FRACTION FLTEST :407F,:F64F,FIX,,,SP,:0000,:0000,S TITL * +:FFFFEC +15 FIX = :0000 :7FFF MAX S.P., CHECK TRUNCATION FLTEST :47FF,:FFEC,FIX,,,SP,:0000,:7FFF,R TITL * +:800000 +16 FIX = :0000 :8000 SMALLEST D.P. FLTEST :4800,:0000,FIX,,,DP,:0000,:8000,S TITL * +:800000 +17 FIX = :0001 :0000 CROSS WORD BOUNDRY FLTEST :4880,:0000,FIX,,,DP,:0001,:0000,R TITL * +:FFFFFF +31 FIX = :7FFF :FF80 MAX D.P. FLTEST :4FFF,:FFFF,FIX,,,DP,:7FFF,:FF80,S TITL * -:800000 -128 FIX= :0000 :0000 SMALL NEG FRACTION FLTEST :8000,:0000,FIX,,,SP,:0000,:0000,R TITL * -:C00001 +02 FIX= :FFFF :FFFD NEG INT, FRACT FLTEST :C140,:0001,FIX,,,SP,:FFFF,:FFFD,S TITL * +:CFFFFF +02 FIX= :0000 :0003 POS INT, TRUNCATION FLTEST :417F,:FFFF,FIX,,,SP,:0000,:0003,R  TITL * +:FFFFFF +32 FIX = :FFFF :FF00 OVERFLOW FLTEST :507F,:FFFF,FIX,,,OV,:FFFF,:FF00,S IMS PCOUNT COPY PCOUNT,A CSK A,=1 NOP ERROR: PCOUNT,SHOULD,=1 TITL --FLOAT-- INSTRUCTION TEST (PART 3-2) * * * THE FOLLOWING INSTRUCTION IS TESTED IN THIS SECTION: * * FLOAT * * FLTEST :0000,:7FFF,FLOAT,,,OK,:47FF,:FE00,S TITL FLTEST :0000,:8000,FLOAT,,,OK,:4800,:0000,R TITL FLTEST :0001,:0000,FLOAT,,,OK,:4880,:0000,S TITL FLTEST :7FFF,:FF80,FLOAT,,,OK,:4FFF,:FFFF,R TITL FLTEST :FFFF,:FFFF,FLOAT,,,OK,:C080,:0000,S * * NEGATIVE NUMBER :FFA5 A5A5 CONVERTING TO FLOATING POINT * NUMBER, AND RETURNING TO FIX NUMBER, THE RESULTING * NUMBER SHOULD BE :FFA5 A5A5 * COPY =:FFA5,A COPY =:A5A5,Q FLOAT FIX CSK A,=:FFA5 NOP JMP $+2 CSK Q,=:A5A5 NOP HLT 'FIX' OR 'FLOAT' FAILED A&Q CHANGED IMS PCOUNT COPY PCOUNT,A CSK A,=2 NOP ERROR: PCOUNT,SHOULD,=2 TITL --CSKF-- INSTRUCTION TEST (PART 3-3) * * * THE FOLLOWING INSTRUCTION IS TESTED IN THIS SECTION: * * CSKF * * FLTEST :0000,:0000,CSKF,:0000,:0001,LT,,,S TITL FLTEST :0000,:0000,CSKF,:8000,:0001,GT,,,R TITL FLTEST :0000,:0000,CSKF,:0000,:0000,EQ,,,S TITL FLTEST :577C,:D405,CSKF,:57FC,:D405,LT,,,R TITL FLTEST :577C,:D405,CSKF,:56FC,:D405,GT,,,S TITL FLTEST :577C,:D405,CSKF,:577C,:D405,EQ,,,R TITL FLTEST :C6A6,:4ED3,CSKF,:C6A6,:4ED2,LT,,,S TITL FLTEST :C6A6,:4ED3,CSKF,:C6A6,:4ED4,GT,,,R IMS PCOUNT 2  COPY PCOUNT,A CSK A,=3 NOP ERROR: PCOUNT,SHOULD,=3 TITL --CSKF-- INSTRUCTION TEST (PART 3-4) * * * * THE FOLLOWING INSTRUCTION IS TESTED IN THIS SECTION: * * CSKF * * FLTEST :C6A6,:4ED3,CSKF,:C6A6,:4ED3,EQ,,,S TITL  FLTEST :3CBE,:7428,CSKF,:3CBE,:7429,LT,,,R TITL FLTEST :3CBE,:7428,CSKF,:3CBE,:7427,GT,,,S TITL FLTEST :3CBE,:7428,CSKF,:3CBE,:7428,EQ,,,R TITL FLTEST :7FFF,:FFFF,CSKF,:007F,:FFFF,GT,,,S TITL FLTEST :7FFF,:FFFF,CSKF,:7FFF,:FFFE,GT,,,R TITL FLTEST :7FFF,:FFFF,CSKF,:7FFF,:FFFF,EQ,,,S * * 'CSKF' INSTRUCTION TEST ,-4 COMPARE WITH -2 * COPY =:C100,A COPY -2 FLOATING NO. IN AQ COPY =:0000,Q JMP $+3 DUMM WORD :C180 STORRE -4 FLOATING NO. WORD :0000 CSKF DUMM COMPARE JMP $+2 'CSKF' FAILED JMP $+2 'CSKF' O.K. * REPLACE THE NOP WITH A HLT IF THIS TEST IS DESIRED NOP 'CSKF' FAILED -4 SHOULD BE LESS THAN -2 * IMS PCOUNT COPY PCOUNT,A CSK A,=4 NOP ERROR: PCOUNT,SHOULD,=4 TITL --ADDF-- INSTRUCTION TEST (PART 3-5) * * * * THE FOLLOWING INSTRUCTION IS TESTED IN THIS SECTION: * * ADDF * * * +:C43D4E +34 ADDF +:9EFB4C +34 = +:B19C4D +35 CARRY INTO EXP. FLTEST :5144,:3D4E,ADDF,:511E,:FB4C,OK,:51B1,:9C4D,S TITL * -:8264CA +13 ADDF -:A6B183 +8 = -:879A56 +13 PRE-SCALE REQUIRED FLTEST :C682,:64CA,ADDF,:C426,:B183,OK,:C687,:9A56,R TITL * -:A6B183 +8 ADDF -:8264CA +13 = -:879A56 +13 PRE-SCALE REQUIRED FLTEST :C426,:B183,ADDF,:C682,:64CA,OK,:C687,:9A56,S TITL * +:E483A9 -37 ADDF +:B73145 -44 = +:E5F20C -37 CHECK ROUNDING FLTEST :2DE4,:83A9,ADDF,:2A37,:3145,OK,:2DE5,:F20C,R TITL * +:B73145 -44 ADDF +:E483A9 -37 = +:E5F20C -37 CHECK ROUNDING FLTEST :2A57,:3145,ADDF,:2DE4,:83A9,OK,:2DE6,:320C,S TITL * +:A94868 +83 ADDF -:8C547E +83 = +:E79F50 +80 SUB, NO BORROW FLTEST :69A9,:4868,ADDF,:E98C,:547E,OK,:6867,:9F50,R TITL * -:8C547E +83 ADDF +:A94868 +83 = +:E79F50 +80 SUB, NO BORROW FLTEST :E98C,:547E,ADDF,:69A9,:4868,OK,:6867,:9F50,S TITL * -:C84986 -23 ADDF +:8246A1 -26 = -:B800B2 -23 SUB, NO BORROW FLTEST :B4C8,:4986,ADDF,:3302,:46A1,OK,:B4B8,:00B2,R IMS PCOUNT COPY PCOUNT,A CSK A,=5 NOP ERROR: PCOUNT,SHOULD,=5 TITL --ADDF-- INSTRUCTION TEST (PART 3-6) * * * * THE FOLLOWING INSTRUCTION IS TESTED IN THIS SECTION: * * ADDF * * * +:8246A1 -26 ADDF -:C84986 -23 = -:B800B2 -23 SUB, WITH BORROW+RNDUP FLTEST :3302,:46A1,ADDF,:B4C8,:4986,OK,:B4B8,:00B2,S TITL * +:A6ED4F-128 ADDF +:0 = +:A6ED4F-128 ADD ZERO FLTEST :0026,:ED4F,ADDF,:0000,:0000,OK,:0026,:ED4F,R TITL * +:0 ADDF +:A6ED4F-128 = +:A6ED4F-128 ADD ZERO FLTEST :0000,:0000,ADDF,:0026,:ED4F,OK,:0026,:ED4F,S TITL * +:FFFC00+127 ADDF +:FFF7FF+112 = +:FFFFFF+127 MAX POS W/ROUNDUP FLTEST :7FFF,:FC00,ADDF,:78FF,:BFFF,OK,:7FFF,:FFFF,R TITL * +:FFFFFF+127 ADDF +:800000+104 = +:800000 +0 OVERFLOW FLTEST :7FFF,:FFFF,ADDF,:7400,:0000,OV,:0000,:0000,S TITL * +:FFC000+127 ADDF +:FFE000+113 = +:800000 +0 OVERFLOW W/ROUNDUP FLTEST :7FFF,:FC00,ADDF,:78FF,:E000,OV,:0000,:0000,R TITL * +:C00001-128 ADDF -:800001-128 = +:0 UNDERFLOW FLTEST :0040,:0001,ADDF,:8000,:0001,UF,:0000,:0000,S IMS PCOUNT COPY PCOUNT,A CSK A,=6 N3 OP ERROR: PCOUNT,SHOULD,=6 TITL --SUBF-- INSTRUCTION TEST (PART 3-7) * * * * THE FOLLOWING INSTRUCTION IS TESTED IN THIS SECTION: * * SUBF * * * +:A94868 +83 SUBF +:8C547E +83 = +:E79F50 +80 SUB, NO BORROW FLTEST :69A9,:4868,SUBF,:698C,:547E,OK,:6867,:9F50,S TITL * +:8C547E +83 SUBF +:A94868 +83 = -:E79F50 +80 SUB, NO BORROW FLTEST :698C,:547E,SUBF,:69A9,:4868,OK,:E867,:9F50,R TITL * +:C84986 -23 SUBF +:8246A1 -26 = +:B800B2 -23 SUB, WITH BORROW+RNDUP * +:8246A1 -26 SUBF +:C84986 -23 = +:B800B2 -23 SUB, WITH BORROW FLTEST :3302,:46A1,SUBF,:34C8,:4986,OK,:B4B8,:00B2,S TITL * +:FFFFFF+127 SUBF -:800000+104 = +:800000 +0 OVERFLOW FLTEST :7FFF,:FFFF,SUBF,:F400,:0000,OV,:0000,:0000,R TITL * +:C00001-128 SUBF +:800001-128 = +:0 UNDERFLOW FLTEST :0040,:0001,SUBF,:0000,:0001,UF,:0000,:0000,S IMS PCOUNT COPY PCOUNT,A CSK A,=7 NOP ERROR: PCOUNT,SHOULD,=7 TITL --MULF-- INSTRUCTION TET (PART 3-8) * * * * THE FOLLOWING INSTRUCTION IS TESTED IN THIS SECTION: * * MULF * * FLTEST :405D,:3E8D,MULF,:4411,:8EE0,OK,:43FB,:97D0,S  TITL FLTEST :C2CD,:5542,MULF,:402A,:A9BB,OK,:C288,:E2C1,R TITL FLTEST :C30D,:0FC8,MULF,:C1B4,:3D71,OK,:4446,:A1E7,S TITL FLTEST :3B0B,:9E2E,MULF,:4161,:9581,OK,:3BF6,:0F20,R TITL FLTEST :0000,:0001,MULF,:4000,:0000,UF,:0000,:0000,S TITL FLTEST :7FFF,:FFFF,MULF,:4080,:0000,OK,:7FFF,:FFFF,R TITL FLTEST :D000,:03FF,MULF,:C77F,:FC00,OK,:5700,:01FF,S TITL FLTEST :487E,:DC00,MULF,:C85E,:AD00,OK,:D05D,:AF03,R IMS PCOUNT COPY PCOUNT,A CSK A,=8 NOP ERROR: PCOUNT,SHOULD,=8 TITL --DIVF-- INSTRUCTION TEST (PART 3-9) * * * * THE FOLLOWING INSTRUCTION IS TESTED IN THE FOLLOWING SECTION: * * DIVF * * FLTEST :405D,:3E8D,DIVF,:4411,:8EE0,OK,:3CC2,:8E77,S TITL FLTEST :465E,:A92F,DIVF,:C124,:E704,OK,:C5AC,:D545,R TITL FLTEST :C2CD,:5542,DIVF,:402A,:A9BB,OK,:C31A,:00CA,S TITL FLTEST :C30D,:0FC8,DIVF,:C1B4,:3D71,OK,:41C8,:5A97,R TITL FLTEST :3B0B,:9E2E,DIVF,:4161,:9581,OK,:3A1E,:7161,S TITL FLTEST :4362,:8789,DIVF,:38D5,:92EF,OK,:4B07,:C3B8,R TITL FLTEST :0000,:0001,DIVF,:4100,:0000,UF,:0000,:0000,S TITL FLTEST :7FFF,:FFFF,DIVF,:4000,:0000,OV,:007F,:FFFF,R IMS PCOUNT COPY PCOUNT,A CSK A,=9 NOP ERROR: PCOUNT,SHOULD,=9 * * IMS IDPCNT COPY IDPCNT,A CSK A,=32 JMP FLTPT1 NOP * * END OF FLOATING POINT TESTING * COPY JMP1,A JMP *$+1 INSTRUCTION COPY A,ATRAP+2 STORE AT TRAP LOCATION COPY =AET1,A UNEXPECTED ARITH. EXCEPTION TRAP ROUTINE COPY A,ATRAP+3 STORE AT TRAP LOCATION JMP PART4ST LPOOL RES $;:1F-$&:1F+1,0 PART4ST SET $ SAVE END 000,:0001,DIVF,:4100,:0000,UF,:0000,:0000,S TITL F* SBUGDF - DEFINITION FILE FOR DEBUGS - 93468-22 B0 MACHINE =:20 MDBUG SET 0 SDBUG SET 1 XDBUG SET 0 TITL LSI-4 DEBUG (93015-XX-D0) 84-93814-19 ***** LSI-4 DEBUG ***** * * THIS FILE MUST BE ASSEMBLED USING ONE OF * THE FOLLOWING DEFINITION FILES: * MBUGDF FOR MDBUG4 * DBUGDF FOR DEBUG4 * XBUGDF FOR XDBUG4 * *************************** IFT MDBUG TITL LSI-4 MINI DEBUG (MDBUG4) (93015-11-D0) NAM MDBUG4 SNAM DEBUG4 4 OBJNOTE '*** DEBUGM.OBJ - REV ',REVA,REVB,' ***' ENDC IFT SDBUG TITL PAT495P9 DEBUG4 UTILITY PROGRAM FOR PAT495 (93814-10) TITL LSI-4 STANDARD DEBUG (DEBUG4) (93015-10-D0) NAM DEBUG4 NAM DBG4:LP  NAM DBG4:CNT OBJNOTE '*** DEBUGS.OBJ - REV ',REVA,REVB,' *** ENDC IFT XDBUG TITL LSI-4 EXTENDED DEBUG (XDBUG4) (93015-12-D0) NAM XDBUG4 SNAM DEBUG4 NAM DBG4:LP NAM DBG4:CNT OBJNOTE '*** DEBUGX.OBJ - REV ',REVA,REVB,' *** ENDC * USER MAY SUPPLY DESIRED DIO ADDRESS & CHANNEL # IN THE * FOLLOWING ORDER IN THE 'Q' REGISTER * BIT 4-7 --> DIO ADDRESS * BIT 1-3 --> CHANNEL NO * BIT 0 --> 0 ******  SEXT G:0,G:1,G:2,G:3,G:4,G:5 SEXT G:6,G:7,G:8,G:9,G:A,G:B SEXT G:C,G:D,G:E,G:F,G:G,G:H SEXT G:I,G:J,G:K,G:L,G:M,G:N SEXT G:O,G:P,G:Q,G:R,G:S,G:T SEXT G:U,G:V,G:W,G:X,G:Y,G:Z MACRO RTN JMP *#1 ENDM * REV: EQU 'D0' REVA EQU REV:%-8 REVB EQU REV:&:FF PROMCH EQU '*' PROM CHARACTER BELL EQU :7 BELL CHAR TOF EQU :C TOP OF FORM CR EQU :D CARRIAGE RETURN LF EQU :A LINE FEED BLANK EQU :20 BLANK CHAR ARROW EQU :5F BACK ARROW CHAR EQUAL EQU '=' LLNTH EQU 40  PERMISSIBLE LENGTH FOR LIST BRKPT EQU 0 BREAK POINT RETURN ADDRESS TITL ORG PART9ST DEBUG4 EQU $ XDBUG4 EQU $ MDBUG4 EQU $ STDIOD JST BASE USRIOD JST OPTION OPTIONAL ENTRY FOR NON-STANDARD IOD BASE ENT IFT XDBUG SELP A,BMADDR%3+1 . BM ENDC  . BM IMS BASE BASE HAS 'BASE' ADDRESS JST SAVE  SAVE USER ENVIORMENT JMP HEADNG DO HEADING ****** * * -- SUB-ROUTINE AND WORD CELL OFFSET FROM BASE PROGRAM -- * * SUB-ROUTINES * TDBG EQU $-BASE WORD DBG-BASE DBG ABSOLUTE OFFSET FROM BASE PROG TERROR EQU $-BASE WORD ERROR-BASE ERROR ABSOLUTE OFFSET FROM BASE PROG TRTN6 EQU $-BASE  WORD RTN6-BASE TDMPRS EQU $-BASE WORD DMPRS-BASE DMPRS ABSOLUTE OFFSET FROM BASE PROG TRREG EQU $-BASE WORD RREG-BASE RREG ABSOLUTE OFFSET FROM BASE PROG TGREG EQU $-BASE WORD GREG-BASE  GREG ABSOLUTE OFFSET FROM BASE PROG TINSP EQU $-BASE WORD INSP-BASE INSP ABSOLUTE OFFSET FROM BASE PROG TCOMMA EQU $-BASE WORD COMMA-BASE COMMA ABSOLUTE OFFSET FROM BASE PROG TSPACE EQU $-BASE  WORD SPACE-BASE SPACE ABSOLUTE OFFSET FROM BASE PROG TLIST EQU $-BASE WORD LIST-BASE LIST ABSOLUTE OFFSET FROM BASE PROG TFILLP EQU $-BASE WORD FILLP-BASE FILLP ABSOLUTE OFFSET FROM BASE PROG TSRCH EQU $-BASE WORD SRCH-BASE SRCH ABSOLUTE OFFSET FROM BASE PROG TCOPYP EQU $-BASE WORD COPYP-BASE COPYP ABSOLUTE OFFSET FROM BASE PROG TCRLF EQU $-BASE WORD CRLF-BASE CRLF ABSOLUTE OFFSET F5 ROM BASE PROG TRKB EQU $-BASE WORD RKB-BASE RKB ABSOLUTE OFFSET FROM BASE PROG TTYP EQU $-BASE  WORD TYP-BASE TYP ABSOLUTE OFFSET FROM BASE PROG THEX EQU $-BASE WORD HEX-BASE HEX ABSOLUTE OFFSET FROM BASE PROG TUNSAV EQU $-BASE WORD UNSAVE-BASE UNSAVE ABSOLUTE OFFSET FROM BASE PROG TINP EQU $-BASE WORD INP-BASE INP ABSOLUTE OFFSET FROM BASE PROG TCHKR EQU $-BASE WORD  CHKR-BASE CHKR ABSOLUTE OFFSET FROM BASE PROG TCHKG EQU $-BASE WORD CHKG-BASE CHKG ABSOLUTE OFFSET FROM BASE PROG TTYPCR EQU $-BASE WORD TYPCRT-BASE TPADDR EQU $-BASE WORD PADDR-BASE TSHEX EQU $-BASE WORD SHEX-BASE TGSZ EQU $-BASE WORD GSZ-BASE IFT XDBUG TTRAP EQU $-BASE WORD TRAP-BASE TSAVE EQU $-BASE WORD SAVE-BASE TCINTS EQU $-BASE WORD CINTS-BASE TUITS EQU $-BASE  WORD UITS-BASE TMETS EQU $-BASE WORD METS-BASE TNETS EQU $-BASE WORD NETS-BASE TSETS EQU $-BASE WORD SETS-BASE TAETS EQU $-BASE WORD AETS-BASE ENDC TETEST EQU $-BASE WORD ETEST-BASE IFF MDBUG TTYPLP EQU $-BASE WORD TYPLP-BASE TZTRNG EQU $-BASE WORD ZTRING-BASE Z ABSOLUTE OFFSET FROM BASE PROG TDUMP EQU $-BASE WORD DUMP-BASE DUMP ABSOLUTE OFFSET FROM BASE PROG TLOAD EQU $-BASE WORD LOAD-BASE LOAD ABSOLUTE OFFSET FROM BASE PROG TEOT EQU $-BASE WORD EOT-BASE  ENDC IFT XDBUG TMCMD EQU $-BASE BM WORD MCMD-BASE  BM TINPP EQU $-BASE BM WORD INPP20-BASE . BM ENDC . BM * * WORD CELLS * TPFLG EQU $-BASE WORD PFLG-BASE PFLG ABSOLUTE OFFSET FROM BASE PROG TADDR EQU  $-BASE WORD ADDR-BASE ADDR ABSOLUTE OFFSET FROM BASE PROG TVALU EQU $-BASE WORD VALU-BASE  VALU ABSOLUTE OFFSET FROM BASE PROG TLASTS EQU $-BASE WORD LASTSN-BASE LASTSN ABSOLUTE OFFSET FROM BASE PROG TTEST EQU $-BASE WORD TEST-BASE TEST ABSOLUTE OFFSET FROM BASE PROG TWSIZE EQU $-BASE  WORD WSIZE-BASE WSIZE ABSOLUTE OFFSET FROM BASE PROG TSTORE EQU $-BASE WORD STORE-BASE STORE ABSOLUTE OFFSET FROM BASE PROG TSIZE EQU $-BASE WORD SIZE-BASE SIZE ABSOLUTE OFFSET FROM BASE PROG TKIND EQU $-BASE WORD KIND-BASE KIND ABSOLUTE OFFSET FROM BASE PROG TEXIT EQU $-BASE WORD EXIT-BASE EXIT ABSOLUTE OFFSET FROM BASE PROG TDIOTY EQU $-BASE WORD DIOTY-BASE DIO ADDRESS KEEPER TCMND EQU $-BASE WORD CMND-BASE IFF MDBUG TLNCNT EQU $-BASE WORD LNCNT-BASE LINE COUNT KEEPER TDIOFG EQU $-BASE WORD DIOFLG-BASE 'T' OR 'P' OR 'B' FLAG KEEPER TPCHFG EQU $-BASE W6 ORD PCHFG-BASE PCHFG ABSOLUTE OFFSET FROM BASE PROG TLPCNT EQU $-BASE WORD LPCNT-BASE LINES/PAGE ON LP ENDC IFT XDBUG TSR EQU $-BASE WORD SR-BASE ENDC TITL ******** * * -- HEADING -- * ******** HEADNG EQU $ IFF MDBUG COPY ='T',A COPY A,*TDIOFG(X,Y) FLAG TO PRINT ON TTY/CRT  ENDC JST HDNG1 HDNG2 COPY ='(',A ( JST *TTYP(X,Y) COPY =':',A  : JST *TTYP(X,Y) COPY BASE,A HEX ADDRESS ADD HBASE,A JST  *THEX(X,Y) CONVERT 'A' INTO 4 HEX DIGITS COPY ='-',A - JST *TTYP(X,Y) COPY =':',A : JST *TTYP(X,Y) COPY HLENTH,A DBG LENGTH ADD X,A DBG END ADDRESS SUB =1,A ADD HBASE,A JST *THEX(X,Y) COPY =')',A  ) JST *TTYP(X,Y) PRINT ) COPY =BELL,A JST *TTYP(X,Y) RING BELL COPY X,A 'A' = BASE ADDRESS ADD HBASE,A 'A' = HEADNG ADDRESS COPY A,*TEXIT(X,Y)  INITIALIZE EXIT JMP *TRTN6(X,Y) CLEAR ANY BREAK POINTS HBASE WORD STDIOD-BASE HLENTH WORD TAIL-DEBUG4 TITL ****** * * -- SAVE -- * - ALL THE USER HARDWARE REGISTERS, CONSOLE WORD REGISTER AND * CONSOLE SENSE SWITCH ARE SAVED IN TEMPORARY REGISTERS. * - ALL THE BITS IN 'S' ARE SET TO ZERO EXCEPT 'XA' BIT, WHICH * IS NOT ALTERED * ****** SAVE ENT EXIT ADDRESS SAVED SIN 12 PROTECT 12 INSTRUCTIONS COPY A,AR COPY  Y,YR COPY X,XR COPY Q,QR COPY K,A COPY A,KR COPY L,A COPY A,LR COPY S,A COPY A,SR COPY =:0040,A TURN XA BIT COPY A,S EXCEPT 'XA' ALL BITS = 0 IN 4,A GET CONSOLE WORD REGISTER COPY A,CDR JT SS,SAVE11 IF SENSE SWITCH TRUS, SAVE 1 COPY =0,A ELSE STORE 0 IN TEMP. SSW REGISTER JMP SAVE22 ELSE SAVE 0 IN TEMPORARY SSW REG SAVE11 COPY =1,A SAVE22 COPY A,SSWR COPY BASE,X COPY X,Y X + Y HAVE BASE PROG ADDRESS RTN SAVE BACK TO CALLER TITL OPTION ENT COPY A,BASE SAVE 'A' COPY OPTION,A EXCH A,BASE ESTABLISH BASE ADDRESS & RESTORE 'A' JST SAVE  GO PRESERVE USER ENVIORMENT COPY Q,*TDIOTY(X,Y) UPDATE DIO ADD JMP HEADNG DO HEADING ****** * * -- UNSAVE -- * RESTORE ALL USER HARDWARE REGISTERS * ****** UNSAVE ENT COPY QR,Q RESTORE 'Q' COPY XR,X 'X' COPY YR,Y 'Y' COPY CDR,A SELP A,4 DISPLAY CONSOLE WORD REGISTER. COPY SSWR,A OUT A,0 RESTORE SENSE SWITCH COPY KR,A COPY A,K RESTORE 'K' COPY LR,A COPY A,L 7  'L' COPY SR,A COPY A,S 'S' IFT XDBUG SIN 5 ENDC IFF XDBUG SIN 3 ENDC COPY AR,A RTN UNSAVE RETURN TO CALLER TITL HDNG1 ENT JST *TCRLF(X,Y) NEW LINE IFT MDBUG COPY ='M',A ENDC IFT SDBUG COPY ='D',A ENDC IFT XDBUG COPY ='X',A ENDC JST *TTYP(X,Y) IFF SDBUG COPY ='D',A ENDC IFT SDBUG COPY ='E',A ENDC JST *TTYP(X,Y) COPY ='B',A  B JST *TTYP(X,Y) COPY ='U',A U JST *TTYP(X,Y) COPY ='G',A  G JST *TTYP(X,Y) COPY ='4',A 4 JST *TTYP(X,Y) COPY =BLANK,A JST *TTYP(X,Y) COPY =REVA,A JST *TTYP(X,Y) COPY =REVB,A JST *TTYP(X,Y) COPY =BLANK,A  JST *TTYP(X,Y) RTN HDNG1 * * SAVE1 * SAVE1 ENT JST SAVE RTN SAVE1 TITL * WORD CELLS * EXIT WORD 0 TEMPORARY SAVE 'P' AR WORD 0 TEMPORARY SAVE 'A' QR WORD 0 TEMPORARY SAVE 'Q' XR WORD 0 TEMPORARY SAVE 'X' YR WORD 0  TEMPORARY SAVE 'Y' KR WORD 0 TEMPORARY SAVE 'K' LR WORD 0 TEMPORARY SAVE 'L' SR WORD 0 TEMPORARY SAVE 'S' CDR WORD 0 TEMPORARY SAVE CONSOLE WORD REGISTER SSWR  WORD 0 TEMPORARY SAVE SENSE SWITCH * * GENERAL REGISTERS 0 - 9, A - Z * G0 EQU $  START OF GENERAL REGISTER AREA WORD G:0,G:1,G:2,G:3,G:4,G:5 WORD G:6,G:7,G:8,G:9,G:A,G:B WORD G:C,G:D,G:E,G:F,G:G,G:H WORD G:I,G:J,G:K,G:L,G:M,G:N WORD G:O,G:P,G:Q,G:R,G:S,G:T WORD G:U,G:V,G:W,G:X,G:Y,G:Z TITL KIND WORD 0 TYPE OF REGISTER DUMP ****** * * -- DMPRS -- DUMP REGISTERS * ****** DMPRS ENT JST *TCRLF(X,Y) NEW LINE COPY =BELL,A ISSUE BELL CODE JST *TTYP(X,Y)  COPY KIND,A FETCH TYPE OF REGISTER DUMP JST *TTYP(X,Y) JST SPACE PRINT A BLANK JST SPACE PRINT A BLANK COPY ='P',A 'P' REGISTER JST TYP:EQ  ISSUE P = COPY *TEXIT(X,Y),A FETCH ADDRESS JST *TPADDR(X,Y) COPY ='A',A JST TYP:EQ ISSUE A= COPY AR,A 'A' VALUE JST *TSHEX(X,Y) DO HEX ROUTINE FOLLOWED BY A SPACE COPY ='Q',A JST TYP:EQ ISSUE Q= COPY QR,A JST *TSHEX(X,Y) DO HEX ROUTINE FOLLOWED BY A SPACE COPY ='X',A JST TYP:EQ ISSUE X= COPY XR,A JST  *TSHEX(X,Y) DO HEX ROUTINE FOLLOWED BY A SPACE COPY ='Y',A JST TYP:EQ ISSUE Y=  COPY YR,A JST *THEX(X,Y) PRINT 'Y' JST *TCRLF(X,Y) JST SPACE PRINT A BLA8 NK JST SPACE PRINT A BLANK JST SPACE PRINT A BLANK COPY ='K',A JST TYP:EQ ISSUE K= COPY KR,A JST *TSHEX(X,Y) DO HEX ROUTINE FOLLOWED BY A SPACE  COPY ='L',A JST TYP:EQ ISSUE L= COPY LR,A JST *TSHEX(X,Y) DO HEX ROUTINE FOLLOWED BY A SPACE COPY ='S',A JST TYP:EQ ISSUE S= COPY SR,A JST *TSHEX(X,Y)  DO HEX ROUTINE FOLLOWED BY A SPACE COPY ='D',A JST TYP:EQ ISSUE D= COPY CDR,A  JST *TSHEX(X,Y) DO HEX ROUTINE FOLLOWED BY A SPACE COPY ='C',A JST TYP:EQ ISSUE C= COPY SSWR,A JST *THEX(X,Y) PRINT SENSE SWITCH RTN DMPRS BACK TO CALLER  TITL ****** * * -- TYP:EQ -- * PUBLISH CONTENTS OF 'A' REGISTER FOLLOWED BY '=' * ****** TYP:EQ ENT JST *TTYP(X,Y) PUBLISH CHARACTER FROM 'A' COPY ='=',A EQUAL SIGN JST *TTYP(X,Y) PUBLISH EQUAL SIGN RTN TYP:EQ BACK TO CALLER * * SAVE21 * SAVE21 ENT JST SAVE1 RTN SAVE21 ******* * * -- SPACE -- * ******* SPACE ENT COPY =BLANK,A JST *TTYP(X,Y) RTN SPACE TITL ****** * -- DBG -- * EXIT: ADDR -- 1ST PARAMETER * SIZE -- INDEX TO G OR R REGISTER * KEY -- COMMAND ID * TEST -- TERMINATOR * LASTSN -- LAST SPECIAL TERMINATOR ****** DBG EQU $ COPY  TRNT,A ADD X,A BREAK POINT RETURN ADDRESS COPY A,BRKPT STUFF IT AT '0' COPY =0,A COPY A,CMND INITIALIZE COMMAND KEEPER JST *TCRLF(X,Y) NEW LINE COPY =PROMCH,A GET PROM CHARACTER JST *TTYPCR(X,Y) JST *TRKB(X,Y) READ COMMAND ID COPY  A,CMND SAVE FUNCTION ID CLSN ='Y',A IS IT SINGLE STEP ? /JPL15NOV78 JMP NEXT YES, PROCESS IT /JPL15NOV78 CLSN ='Q',A IS IT STEP BACK ? JMP NEXT  YES, DO IT CLSN =BLANK,A BLANK=COMMENT MODE JMP COM DO COMMENT IFF MDBUG CLSN ='A',A DEVICE ASSIGNMENT? JMP DEVICE ENDC IFT XDBUG CLSN ='T',A TRAP INTERCEPT? JMP *TTRAP(X,Y) ENDC CLSN ='G',A GENERAL REGISTER JMP  $+2 YES,GO CALCULATE REGISTER INDEX JMP DBGR ELSE CHECK IF HARDWARE REGISTER JST *TRKB(X,Y) READ ANOTHER CHARACTER. G-REG NO. JST *TCHKG(X,Y) DEVELOP INDEX TO G-REG COPY A,SIZE SAVE INDEX IN 'SIZE' JMP DBG1 DBGR CLSN ='R',A IS IT HARDWARE REGISTER?  JMP $+2 YES, GO DEVELOP INDEX JMP DBGDV GO CHECK FOR DUMP/VERIFY/LOADER JST *TRKB(X,Y) READ R-REG NO CLSN =CR,A JUST R COMMAND? JMP ALLR YES, G9 O DUMP ALL R-REGISTERS JST *TCHKR(X,Y) GET R-REG INDEX COPY Q,SIZE SAVE INDEX TO R-REG  JMP DBG1 DBGDV EQU $ IFT XDBUG CLSN ='M',A BM  JMP *TMCMD(X,Y) IF BUS MONITOR COMMAND... BM ENDC  BM IFF MDBUG CLSN ='D',A JMP *TDUMP(X,Y) DUMP D CLSN ='V',A  JMP *TDUMP(X,Y) VERIFY V CLSN ='W',A JMP *TLOAD(X,Y) LOADER W  ENDC DBG1 JST *TINP(X,Y) GET 1ST PARAMETER COPY Q,ADDR SAVE 1ST PARAMETER COPY CMND,Q GET FUNCTION ID COMMAND CLSN ='B',Q NEXT JMP BRK BREAK-POINT B CLSN ='C',Q JMP *TCOPYP(X,Y) COPY C CLSN ='F',Q JMP *TFILLP(X,Y) FILL F  CLSN ='L',Q JMP *TLIST(X,Y) LIST L CLSN ='S',Q JMP *TSRCH(X,Y) SEARCH S CLSN ='J',Q JMP JMPP JUMP J CLSN ='I',Q JMP *TINSP(X,Y) INSPECT I CLSN ='G',Q JMP *TGREG(X,Y) G-REG G CLSN ='R',Q  JMP *TRREG(X,Y) R-REG R IFF MDBUG CLSN ='Z',Q JMP *TZTRNG(X,Y) CHAN  Z ENDC JMP *TERROR(X,Y) ELSE ERROR ALLR COPY =BLANK,A COPY A,*TKIND(X,Y) JST *TDMPRS(X,Y) DO REGISTER DUMP JMP DBG BACK TO DBG ADDR WORD 0 1ST PARM KEEPER SIZE WORD 0 G + R REGISTER INDEX KEEPER CMND WORD 0 COMMAND ID KEEPER TRNT  WORD RTN-BASE RETURN ADDRESS OFFSET FROM BASE * * SAVE2 * SAVE2 ENT JST SAVE21 RTN SAVE2 IFF MDBUG TITL ****** * * -- A -- DEVICE ASSIGNMENT COMMAND * * ALX X = T(TTY), P(PRINTER), B(BOTH) -- LIST OUTPUT DEVICE * APX X = T(TTY), H(HSPT) -- PUNCH OUTPUT DEVICE * ****** DEVICE EQU $ JST *TRKB(X,Y)  READ 2ND CHAR COPY A,SAVE2 SAVE IT JST *TRKB(X,Y) READ 3RD CHAR COPY A,ADDR SAVE 3RD PARMT/P/B JST *TRKB(X,Y) READ CR CLSN =CR,A JMP $+2 JMP *TERROR(X,Y) NO CR ERROR COPY SAVE2,A GET 2ND PARM P/L CLSN ='P',A PUNCH OUTPUT JMP PNCHDV CLSN ='L',A LIST OPTION JMP $+2 JMP *TERROR(X,Y) ERROR IF NOT 'P' OR 'L' COPY ADDR,A GET 3RD PARM T/P/B CLSN ='T',A TTY/CRT OPTION?  JMP DEV2 CLSN ='P',A PRINTER OPTION? JMP DEV1 CLSN ='B',A BOTH DESIRED? JMP DEV1 JMP *TERROR(X,Y) ERROR IF NOT T/P/B DEV1 COPY *TLPCNT(X,Y),A OUTPUT DEVICE IS EITHER LP OR COPY A,*TLNCNT(X,Y) BOTH CRT/LP. DO A TOP FOR LP COPY ='P',A COPY A,*TDIOFG(X,: Y) COPY =TOF,A DO TOP OF FORM JST *TTYP(X,Y) DO TOP OF FORM DEV2 COPY ADDR,A COPY A,*TDIOFG(X,Y) SAVE OUTPUT DEVICE DESIRED JMP DBG BACK TO ACCEPT COMMAND PNCHDV COPY =0,A  COPY A,*TPCHFG(X,Y) COPY ADDR,A CLSN ='H',A IF HSPT, PCHFG = 0 JMP ENDAS  CLSN ='T',A IF TTY, PCHFG NOT = 0 JMP $+2 JMP *TERROR(X,Y) ERROR IF NOT H OR T  COPY A,*TPCHFG(X,Y) SET FLAG FOR TTY ENDAS JMP DBG BACK TO DBG ENDC TITL * -- COM -- * COMMENT MODE COM JST *TRKB(X,Y) FETCH A CHARACTER CLSN =CR,A END OF COMMENT?  JMP *TDBG(X,Y) YES, BACK TO DBG JMP COM CONTINUE COMMENT MODE ****** * * -- J COMMAND -- JUMP FUNCTION * JMPP EQU $ COPY *TPFLG(X,Y),Q ANY INPUT JEQ Q,JMPP1 IF NO EXIT INPUT USE OLD ONE COPY ADDR,A GET 1ST PARM - JUMP LOCATION COPY A,*TEXIT(X,Y) USER RETURN ADD COPY *TTEST(X,Y),A GET LAST CHARACTER CLSN =',',A MORE PARAMETERS? JMP BRK  YES, GO DO BREAK POINT JMPP1 EQU $ COPY *TTEST(X,Y),A GET LAST TERMINATOR CLSN =',',A PARM MUST NOT ENT WITH COMMA JMP ERROR JST *TCRLF(X,Y) NEW LINE * ITERATION COUNT BP EXITS THROUGH HERE / JMPP2 EQU $ / COPY Y,X  REFRESH 'X' WITH BASE ADR / IFT XDBUG COPY BMMRBS,A . BM  TBIT 15,A BM AND H3FFF,A .  BM COPY A,BMMRBS . BM COPY =0,A .  BM JF OV,$+2 BM COPY BMON,A  BM COPY A,BMCONT BM COPY  BMVEC,A SET BM COPY A,*H96 UP BM COPY BMVEC+1,A INTERRUPT BM COPY A,*H97 VECTOR.  BM ENDC BM COPY *TEXIT(X,Y),A GET RETURN ADD COPY A,INLINE JST *TUNSAV(X,Y) RE-STORE USER ENVIORMENT IFT XDBUG BMCONT NOP  BM COPY A,RTN ***** DUMMY FIX FOR THE BUS MONITOR. BM  NOP **THIS 'NO-OP' ALLOWS THE SKIP COUNTER ON THE * **BUS MONITOR TO BE SET TO 5(FIVE) ENDC  BM JMP *INLINE GO TO USER PROGRAM INLINE WORD 0  EXIT ADD KEEPER (IN LINE 'P') IFT XDBUG H97 WORD :97 H96 WORD :96 ENDC ****** * -- E; RROR -- * ERROR FORMAT ERROR COPY =ARROW,A JST *TTYPCR(X,Y) JMP RTN6X GO FIX BREAK POINTS ALLRX JMP ALLR OUT OF RANGE LINK * .TO MAINTAIN BINARY RELOCATABILITY IFT XDBUG BMON SELP A,BMADDR%3+0 BM BMMRBS WORD 0 SAVE FOR THE MONITOR BITS. BM BMVEC JST *$+1 . BM WORD RTNBM .  BM H3FFF WORD :3FFF . BM ENDC  BM * * SAVE2F * SAVE2F ENT JST SAVE2 RTN SAVE2F TITL ****** * * -- BRK -- BREAK POINT COMMAND * * FORMAT OF COMMAND IS : * BAAAA[;CCCC][,AAAA][;CCCC][,AAAA][;CCCC][,AAAA][;CCCC] *  WHERE B=COMMAND , AAAA=ADDRESS , CCCC=ITERATION COUNT * ****** BRK EQU $ ADD SVTBL1,X ADD OFFSET TO BASE COPY X,SVTBL BREAK POINT TABLE REAL ADDRESS COPY Y,X RESTORE 'X' COPY *TCMND(X,Y),A GET COMMAND ID CLSN ='J',A WAS COMMAND A 'J' JMP BRK2 YUP! GO DO REGULAR BREAK POINT CLSN ='B',A IS IT A NORMAL BP COMMAND ? /JPL15NOV78 JMP BRK1  YES, PROCESS NORMAL BP /JPL15NOV78 COPY *TEXIT(X,Y),Q GET CURRENT P-REG /JPL15NOV78  CLSN ='Y',A IS IT STEP FORWARD ONE? ADD =1,Q GET NEXT LOC AS BP ADDRESS /JPL15NOV78  CLSN ='Q',A IS IT STEP BACK ONE? SUB =1,Q YES,GET CURRENT LOC-1 AS BP ADD  JMP BRK3 PUT IT IN BP TABLE /JPL15NOV78 BRK1 EQU $ /JPL15NOV78 COPY PFLG,A ANY PARAMETER JEQ A,BRK7 COPY *TADDR(X,Y),Q GET 1ST PARAMETER FOR 'B' COMMAND JMP BRK2+1 DO BREAK POINT BRK2 JST *TINP(X,Y) FETCH NEXT PARAMETER  COPY BRKCNT,A # OF BREAKPOINTS CURRENTLY CLSN =4,A MORE THAN 4 JMP ERROR  ERROR BRK3 EQU $ /JPL15NOV78 IMS BRKCNT COUNT BREAKPOINTS COPY Q,X 'X' HAS NEW PARAMETER VALUE COPY JST0,A JST *0 CODE IN 'A'  EXCH 0(X),A STORE JST AT USER & SAVE USER INST IMS SVTBL COPY A,*SVTBL SAVE USER INSTRUCTION IMS SVTBL COPY X,*SVTBL SAVE USER INSTRUCTION ADDRESS COPY Y,X  RESTORE X TO BASE ADDRESS COPY *TTEST(X,Y),A FETCH TERMINATOR XOR Q,Q CLEAR ITERATION COUNT /JPL11NOV78 CLSN =';',A IS ITERATION COUNT GIVEN /JPL11NOV78 JMP BRK4 YES, PROCESS IT /JPL11NOV78 JMP BRK5 JUMP IF NO ITERATION COUNT /JPL11NOV78 RTN6X JMP RTN6 LINK TO MAINTAIN BIN. RELOCATABILITY BRK4 EQU $ /JPL11NOV78 <  JST *TINP(X,Y) GET ITERATION COUNT /JPL11NOV78 JGT Q,$+2 SKIP IF COUNT > 0 /JPL11NOV78 XOR Q,Q INDICATE NO COUNT SPECIFIED /JPL11NOV78 SHIFT Q,LO,1 DOUBLE COUNT  /JPL11NOV78 NEG Q,Q NEGATE IT FOR INDEX /JPL11NOV78 BRK5 EQU $  /JPL11NOV78 IMS SVTBL BUMP TABLE ADDRESS /JPL11NOV78 COPY  Q,*SVTBL SAVE ITERATION COUNT /JPL11NOV78 COPY =1,A GET FLAG /JPL11NOV78 JNE Q,$+2 SKIP IF COUNT NOT SPECIFIED /JPL11NOV78 XOR A,A CLEAR FLAG IF NOT  /JPL11NOV78 IMS SVTBL BUMP TABLE ADDRESS /JPL11NOV78 COPY A,*SVTBL SAVE BREAKPOINT FLAG /JPL11NOV78 COPY *TTEST(X,Y),A GET THE TERMINATOR CHARACTER /JPL11NOV78 CLSN =',',A ANOTHER PARAMETER ? /JPL11NOV78 JMP BRK2 PROCESS NEXT PARAMETER /JPL11NOV78  JMP JMPP1 IF NO MORE, GO BACK TO USER /JPL11NOV78 BRK6 JMP ALLRX DO R-REGISTER DUMP & BACK TO DBG BRK7 EQU $ JMP *TERROR(X,Y) NO PARAMETERS, ERROR * * WORD SECTION * PFLG WORD 0  INPUT PARM FLAG BRKCNT WORD 0 BREAK POINT COUNT KEEPER SVTBL1 WORD SVBRK-BASE-1 SVTBL WORD 0 * BP QUEUE : 0=INSTRUCTION,1=ADDRESS,2=COUNT,3=FLAG SVBRK RES 4*4,0 BREAK POINT QUEUE JST0 JST *BRKPT  BREAK POINT INSTRUCTION JMPP2X JMP JMPP2 TO MAINTAIN BIN. RELOCATABILITY TITL ****** * * -- RTN -- RETURN FROM BREAK POINT * * ****** CHO WORD 0 MASK WORD 0 RTNADD WORD 0 RTN ENT SIN 7 .  BM IFT XDBUG SELP A,BMADDR%3+1 . BM  ENDC JST SAVE2F PRESERVE CURRENT ENVIOREMENT COPY RTN,A FETCH BRK POIN ADDRESS + 1 SUB =1,A DECREMENT TO BREAK POINT ADDRESS COPY A,*TEXIT(X,Y) SET UP USER PROGRAM ENTRY ADDRESS COPY A,RTNADD COPY BRKCNT,A FETCH BREAK POINT COUNT JNE A,RTN2 RTN1 COPY ='D',A FLAG AS DUMMY BREAK POINT COPY Y,X REFERESH 'X' WITH BASE ADD COPY A,*TKIND(X,Y) JMP RTN4 RTN2 NEG A,A -BREAK POINT COUNT COPY A,MASK SET INTERROGATION COUNTER COPY *TEXIT(X,Y),A FETCH RETURN ADDRESS COPY SVTBL,X BREAK POINT SAVE QUEUE ADDRESS SUB =4,X ADJUST BP TABLE ADDRESS /JPL11NOV78 RTN3 EQU $  /JPL11NOV78 CSK A,2(X) COMPARE WITH TABLE ENTRY /JPL11NOV78 NOP JMP RTN5  BUMP INDEX REGISTER * FOUND BREAKPOINT IN TABLE COPY 3(X),A GET ITERATION COUNT /JPL11NOV78 JEQ A,RTN3A JUMP IF NO ITERATION COUNT /JPL11NOV78 * IT'S AN ITERATION COUNT BREAKPOINT =  COPY 4(X),A GET BREAKPOINT FLAG /JPL11NOV78 COPY A,CHO SAVE BREAKPOINT FLAG  /JPL11NOV78 COPY X,A SAVE TABLE INDEX /JPL11NOV78 COPY 1(X),Q GET USER INSTRUCTION /JPL11NOV78 COPY 2(X),X GET LOCATION /JPL11NOV78 EXCH Q,0(X)  SWAP INSTRUCTION/JST *0 /JPL11NOV78 ADD CHO,X GET PRIOR/NEXT INSTRUCTION /JPL11NOV78 EXCH Q,0(X) PLACE BREAKPOINT THERE /JPL11NOV78 EXCH A,X SWAP TABLE ADDRESS/LOCATION /JPL11NOV78 COPY Q,1(X) SAVE THIS INSTRUCTION /JPL11NOV78 COPY A,2(X) SAVE IT'S LOCATION  /JPL11NOV78 COPY CHO,Q GET BREAKPOINT FLAG /JPL11NOV78 NEG Q,Q POINT TO NEXT/PRIOR /JPL11NOV78 COPY Q,4(X) RESTORE BREAKPOINT FLAG /JPL11NOV78 IMS 3(X)  BUMP ITERATION COUNT /JPL11NOV78 NOP COUNT NOT DONE, RETURN /JPL11NOV78  JMP JMPP2X DONE, RETURN, STOP NEXT TIME /JPL11NOV78 RTN3A EQU $ /JPL11NOV78 COPY ='B',A REAL BREAK POINT COPY Y,X REFERESH 'X' WITH BASE ADD  COPY A,*TKIND(X,Y) RTN4 EQU $ JST *TDMPRS(X,Y) DO REGISTER DUMP COPY *TKIND(X,Y),A CLSN ='D',A IF DUMMY BRK POINT, THEN BUMP TO IMS *TEXIT(X,Y) NEXT EXECUTABLE LOCATION JMP  RTN6 RESTORE ANY OUTSTANDING BRK POINTS RTN5 SUB =4,X BUMP INDEX TO BRK POIN TABLE IMS MASK BUMP COUNTER JMP RTN3 JMP RTN1 RTN6 EQU $ COPY BRKCNT,A # OF BREAK POINTS JNE A,$+3 COPY Y,X JMP *TDBG(X,Y) IF BRKCNT = 0, BACK TO DBG COPY  SVTBL,X CURRENT SAVE TABLE ADDRESS SUB =4,X UPDATE TABLE ADDRESS COPY X,SVTBL  AND PUT IT BACK COPY 1(X),A GET USER INSTRUCTION COPY 2(X),X GET USER INST. ADDRESS COPY A,0(X) STORE INST. AT PROPER ADDRESS COPY BRKCNT,A ONE BRK POINT RESTORED SUB =1,A COPY A,BRKCNT JMP RTN6 GO PROCESS REST OF THE BRK POINTS IFT XDBUG SPACE 2 ****** BM *  BM * --- RTNBM --- RETURN FROM BUS MONITOR BREAKPOINT. BM *  BM ****** BM RTNBM  ENT ENTER FROM BUS MONITOR BREAKPOINT. BM SIN 7 .  BM SELP A,BMADDR%3+1 . BM JST SAVE2 PRESERVE CURRENT ENVIORNMENT. BM COPY RTNBM,A GET BM COPY A,*TEXIT(X,Y) . >  BM COPY A,RTNADD . BM COPY ='M',A MARK AS BUS MONITOR ENTRY. BM COPY A,*TKIND(X,Y) . BM  COPY SR,A SET THE USER BM OR =:100,A INTERRUPT ENABLE  BM COPY A,SR BIT. BM COPY BMMRBS,A SET THE  BM SBIT 14,A BUS MONITOR ENTRY. BM COPY A,BMMRBS FLAG.  BM COPY Y,X REFRESH X. BM JMP RTN4  . BM LPOOL * * SAVE2C * SAVE2C ENT JST SAVE2 RTN SAVE2C TITL ****** * -- TRAP -- * INTERCEPTS PROCESSOR TRAP * INTERCEPTABLE TRAPS ARE; * -CONSOLE INTERRUPT(C) * -UNIMPLEMENTED INSTRUCTION TRAP(I) * -UNINSTALLED MEMORY TRAP(U) * -CHAR/NUM EXCEPTION TRAP(N) * -STACK EXCEPTION TRAP(S) * -ARITHMETIC ERROR TRAP(A) TRAP EQU $ JST *TRKB(X,Y) INPUT SECOND CHARACTER CLSN =CR,A CARRIAGE RETURN? JMP TRAP22 YES RESTORE ALL TRAPS TRPT CLSN ='T',A 'T'?  JMP $+2 YES GO SEE IF CR JMP TRPC NO SEE IF 'C' JST *TRKB(X,Y) INPUT NEXT CHARACTER CLSN =CR,A CARRIAGE RETURN? JMP SETT YES GO SET INTCPT TAGS JMP *TERROR(X,Y) NO ERROR TRPC CLSN ='C',A 'C'? JMP $+2 YES GO SET INTERCEPT TAG JMP TRPI NO SEE IF 'I' IMS TC SET TC=1 JMP TRAP1 GO GET NEXT CHARACTER TRPI CLSN ='I',A 'I'? JMP $+2 YES GO SET INTERCPT TAG JMP TRPM NO GO SEE IF 'U'  IMS TI SET TI=1 JMP TRAP1 GO GET NEXT CHARACTER TRPM CLSN ='U',A 'U'?  JMP $+2 YES GO SET INTERCEPT TAG JMP TRPN NO SEE IF 'N' IMS TM SET TM=1 JMP TRAP1 GO GET NEXT CHARACTER TRPN CLSN ='N',A 'N'? JMP $+2 YES GO SET INTERCEPT TAG JMP TRPS NO SEE IF 'S' IMS TN SET TN=1 JMP TRAP1  GO GET NEXT CHARACTER TRPS CLSN ='S',A 'S'? JMP $+2 YES GO SET INTERCEPT TAG JMP TRPA NO SEE IF 'A' IMS TS SET TS=1 JMP TRAP1 GO GET NEXT CHARACTER TRPA CLSN ='A',A 'A'? JMP $+2 YES GO SET INTERCEPT TAG JMP ERR NO NONE OF ABOVE IMS TA SET TA=1 JMP TRAP1 GO GET NEXT CHARACTER TRAPC ENT COPY TC,A GET INTERCEPT TAG COPY CINTS,Q JEQ A,TRAPC2 GO RESTORE TRAP IF 0 JEQ Q,TRAPC1  SET NOT REQUIRED IF 0 COPY JSTI,A FETCH JST *$+1 INST EXCH A,*CIN COPY A,CINTB C? OPY TCINTS(Y),Q GET INTCPT SERVICE ADDRESS ADD X,Q EXCH Q,*CIN+1 COPY Q,CINTB+1 COPY  =0,A COPY A,CINTS SET INTERCEPT FLAG TRAPC1 COPY *TSR(X,Y),A RBIT 2,A DISABLE BYTE MODE SBIT 4,A ENABLE CONSOLE INT SBIT 8,A ENABLE INT COPY A,*TSR(X,Y) STORE BACK SREG RTN TRAPC TRAPC2 JNE Q,TRAPC3 INTERCEPT NOT SET IF NOT 0 COPY CINTB,A FETCH ORIGINAL CONTENTS COPY A,*CIN RESTORE IN TRAP LOC COPY CINTB+1,A COPY A,*CIN+1 IMS  CINTS RESET INTERCEPT FLAG TRAPC3 COPY *TSR(X,Y),A RBIT 4,A DISABLE CINT COPY A,*TSR(X,Y) STORE BACK SREG RTN TRAPC CINTS ENT JST SAVE2C SAVE USERS ENVIRONMENT COPY CINTS,A USER PROG. COUNTER @ TRAP TIME COPY YREG,Y RESTORE OFFSETS COPY YREG,X COPY A,*TEXIT(X,Y) COPY =0,A SET INTERCEPT FLAG COPY A,CINTS OUT A,1 TURN OFF CINT SW COPY ='C',A JMP TSRTN CIN WORD :94,:95 CONSOLE INT. LOC. AND +1 CINTB WORD 0,0 TRAPI ENT COPY TI,A GET INTERCEPT TAG COPY UITS,Q GET INTERCEPT FLAG JEQ A,TRAPI2 GO RESTORE TRAP IF 0 JEQ Q,TRAPI1 SET NOT REQUIRED IF 0 COPY JSTI,A GET JST *$+1 INST CODE EXCH  A,*UIT SWAP CONTENTS AT TRAP LOC + 2 COPY A,UITB SAVE ORIGINAL COPY TUITS(Y),Q GET INTCPT SERVICE ADDRESS ADD X,Q EXCH Q,*UIT+1 SWAP CONTENTS AT TRAP LOC +3 COPY Q,UITB+1 CONTENTS TRAPI1 COPY =0,A COPY A,UITS SET INTERCEPT FLAG RTN TRAPI TRAPI2 JNE Q,TRAPI3  RESTORE NOT REQUIRED IF NOT 0 COPY UITB,A FETCH ORIGINAL CONTENTS COPY A,*UIT RESTROE IN TRAP LOC COPY UITB+1,Q COPY Q,*UIT+1 RESTORE IN TRAP LOC IMS UITS RESET INTERCEPT FLAG TRAPI3 RTN TRAPI UITS ENT JST SETIF SET INTERCEPT FLAG COPY :84,A SAVE USERS PROGRAM LOC @ TRAP TIME COPY A,*TEXIT(X,Y) COPY ='I',A JMP TSRTN SETT EQU $ IMS TC SET TC=1 IMS TI SET TI=1 IMS TM SET TM=1 IMS TN  SET TN=1 IMS TS SET TS=1 IMS TA SET TA=1 TRAP22 JMP TRAP2 DO TRAP INTERCEPTIONS TRAP1 EQU $ JST *TRKB(X,Y) INPUT NEXT CHARACTER CLSN =CR,A CARRIAGE RETURN?  JMP TRAP2 YES GO DO TRAP INTERCEPTION CLSN =',',A COMMA? JMP $+2 YES  JMP ERR NO ERROR JST *TRKB(X,Y) INPUT NEXT CHARACTER JMP TRPC SEE IF 'C' ERR JST RESETT RESET ALL INTERCEPT TAGS JMP *TERROR(X,Y) ERROR EXIT TC WORD 0 INTCPT TAG 0=RESTORE 1=SET TI WORD 0 INTCPT TAG 0=RESTORE 1=SET TM WORD 0 INTCPT TAG 0=R@ ESTORE 1=SET TN WORD 0 INTCPT TAG 0=RESTORE 1=SET YREG WORD 0 * * SAVE2B * SAVE2B ENT JST SAVE2C RTN SAVE2B TRAP2 EQU $ JST TRAPC DO CONSOLE INT TRAP INTERCEPT JST TRAPI  DO UNIMP INST TRAP INTERCEPT JST TRAPM DO MEM ERROR TRAP INTERCEPT JST TRAPN DO CHA/NUM ERROR TRAP INTERCEPT JST TRAPS DO STACK ERROR TRAP INTERCEPT JST TRAPA DO ARITH ERROR TRAP INTERCEPT JST RESETT RESET ALL INTERCEPT TAGS COPY Y,YREG SAVE OFFSET VALUE  JMP *TDBG(X,Y) BACK TO DEBUG * LPOOL TS WORD 0 INTCPT TAG 0=RESTORE 1=SET TA WORD 0  INTCPT TAG 0=RESTORE 1=SET TRAPM ENT COPY TM,A GET INTERCEPT TAG COPY METS,Q  GET INTERCEPT FLAG JEQ A,TRAPM2 GO RESTORE TRAP IF 0 JEQ Q,TRAPM1 SET NOT REQUIRED IF 0  COPY JSTI,A GET JST *$+1 INST CODE EXCH A,*MET SWAP CONTENTS AT TRAP LOC + 2 COPY A,METB SAVE ORIGINAL COPY TMETS(Y),Q GET INTCPT SERVICE ADDRESS ADD X,Q EXCH Q,*MET+1  SWAP CONTENTS AT TRAP LOC + 3 COPY Q,METB+1 CONTENTS TRAPM1 COPY =0,A COPY A,METS SET INTERCEPT FLAG RTN TRAPM TRAPM2 JNE Q,TRAPM3 RESTORE NOT REQUIRED IF NOT 0 COPY METB,A FETCH ORIGINAL CONTENTS COPY A,*MET RESTORE IN TRAP LOC COPY METB+1,Q COPY Q,*MET+1 RESTORE IN TRAP LOC IMS METS SET INTERCEPT FLAG TRAPM3 RTN TRAPM JSTI WORD :BF80 JST *$+1 INSTRUCTION CODE UIT WORD :86,:87 UNIMP INST TRAP LOC + 2 AND + 3 UITB WORD 0,0 MET WORD :8A,:8B MEM ERROR TRAP LOC + 2 AND + 3 METB WORD 0,0 NET WORD :9A,:9B CHA/NUM ERROR TRAP LOC + 2 AND + 3 NETB WORD 0,0 SET WORD :9E,:9F STACK ERROR TRAP LOC +2 AND +3 SETB WORD 0,0 AET WORD :AA,:AB ARITH ERROR TRAP LOC + 2 AND + 3 AETB WORD 0,0 METS ENT JST SETIF COPY :88,A SAVE USERS PROGRAM COUNTER COPY A,*TEXIT(X,Y) AT TRAP TIME COPY ='U',A TSRTN EQU $ COPY A,*TKIND(X,Y) STORE TYPE OF REG DUMP JST *TDMPRS(X,Y) DISPLAY REGISTERS JMP *TRTN6(X,Y) RETURN TO DEBUG * * SAVE2A * SAVE2A ENT JST SAVE2B RTN SAVE2A RESETT ENT COPY =0,A RESET INTERCEPT TAGS COPY A,TC COPY A,TI COPY A,TM COPY A,TN COPY A,TS COPY A,TA RTN RESETT SETIF ENT JST  SAVE2A SAVE USERS ENVIRONMENT COPY SETIF,A SET INTERCEPT FLAG SUB =2,A COPY A,SETIF COPY =0,A COPY A,*SETIF IMS SETIF BUMP FOR RETURN IMS SETIF COPY YREG,X RESTORE OFFSETS COPY YREG,Y RTN SETIF TRAPN ENT COPY TN,A GET INTCPT TAG COPY NETS,Q GET INTERCEPT FLAG JEQ A,TRAPN2 GO RESTORE TRAP IF 0 JEQ Q,TA RAPN1 SET NOT REQUIRED IF 0 COPY JSTI,A GET JST *$+1 INST CODE EXCH A,*NET SWAP CONTENTS AT TRAP LOC + 2 COPY A,NETB SAVE ORIGINAL COPY TNETS(Y),Q GET INTCPT SERVICE ADDRESS ADD X,Q EXCH Q,*NET+1 SWAP CONTENTS AT TRAP LOC + 3 COPY Q,NETB+1 CONTENTS TRAPN1 COPY =0,A COPY A,NETS SET INTERCEPT FLAG RTN TRAPN TRAPN2 JNE Q,TRAPN3 RESTORE NOT REQUIRED IF NOT 0 COPY NETB,A FETCH ORIGINAL CONTENTS COPY A,*NET RESTORE IN TRAP LOC COPY NETB+1,A COPY Q,*NET+1 RESTORE IN TRAP LOC IMS NETS SET INTERCEPT FLAG TRAPN3 RTN TRAPN NETS ENT JST SETIF COPY :98,A SAVE USERS P COUNTER @ TRAP TIME COPY A,*TEXIT(X,Y)  COPY ='N',A TSTRTN2 JMP TSRTN TRAPS ENT COPY TS,A GET INTERCEPT TAG COPY SETS,Q GET INTERCEPT FLAG JEQ A,TRAPS2 GO RESTORE TRAP IF 0 JEQ Q,TRAPS1 SET NOT REQUIRED IF 0  COPY JSTI,A GET JST *$+1 INST CODE EXCH A,*SET SWAP CONTENTS AT TRAP LOC + 2 COPY A,SETB SAVE ORIGINAL COPY TSETS(Y),Q GET INTCPT SERVICE ADDRESS ADD X,Q EXCH Q,*SET+1 SWAP CONTENTS AT TRAP LOC + 3 COPY Q,SETB+1 CONTENTS TRAPS1 COPY =0,A COPY A,SETS SET INTERCEPT FLAG RTN TRAPS TRAPS2 JNE Q,TRAPS3 RESTORE NOT REQUIRED IF NOT 0 COPY SETB,A FETCH ORIGINAL CONTENTS COPY A,*SET RESTORE IN TRAP LOC COPY SETB+1,Q COPY Q,*SET+1 RESTORE IN TRAP LOC IMS SETS SET INTERCEPT FLAG TRAPS3 RTN TRAPS SETS ENT JST SETIF  COPY :9C,A SAVE USER P COUNTER @ TRAP TIME COPY A,*TEXIT(X,Y) COPY ='S',A JMP TSRTN TRAPA ENT COPY TA,A GET INTERCEPT TAG COPY AETS,Q GET INTERCEPT FLAG JEQ A,TRAPA2 GO RESTORE TRAP IF 0 JEQ Q,TRAPA1 SET NOT REQUIRED IF 0 COPY JSTI,A GET JST *$+1 INST CODE EXCH A,*AET SWAP CONTENTS AT TRAP LOC + 2 COPY A,AETB SAVE ORIGINAL COPY TAETS(Y),Q GET INTCPT SERVICE ADDRESS ADD X,Q EXCH Q,*AET+1 SWAP CONTENTS AT TRAP LOC + 3 COPY Q,AETB+1 CONTENTS TRAPA1 COPY =0,A COPY A,AETS SET INTERCEPT FLAG RTN TRAPA TRAPA2 JNE Q,TRAPA3 RESTORE NOT REQUIRED IF NOT 0 COPY AETB,A FETCH ORIGINAL CONTENTS COPY A,*AET  RESTORE AT TRAP LOC COPY AETB+1,Q COPY Q,*AET+1 RESTORE IN TRAP LOC IMS AETS  SET INTERCEPT FLAG TRAPA3 RTN TRAPA AETS ENT JST SETIF COPY :A8,A SAVE USER P COUNTER @ TRAP TIME COPY A,*TEXIT(X,Y) COPY ='A',A JMP TSRTN * LPOOL ENDC TITL ****** * * -- RREG -- * -- DISPLAY AND CHANGE OF REGISTERS -- * ****** RREG EQU $ JST *TCOMMA(X,Y) ERROR IFB  , IN INPUT COPY =EXIT-BASE,A RREGG COPY *TSIZE(X,Y),Q ADD X,A ADD Q,A DESIRED REGISTER ADDRESS COPY A,SIZER SAVE IT COPY *TPFLG(X,Y),A GET 'PFLG' CONTENTS JNE A,RREG1 IF VALUE SUPPLIED, GO CHANGE REGISTER JST *TCRLF(X,Y) NEW LINE COPY *SIZER,A  GET DESIRED REG CONTENTS JST *TSHEX(X,Y) DO HEX ROUTINE FOLLOWED BY A SPACE RREG5 EQU $ JST  *TINP(X,Y) GET NEXT PARM-- CHANGE JST *TCOMMA(X,Y) ERROR IF , COPY *TPFLG(X,Y),A GET PARM ENTERED FLAG RREG1 JEQ A,RREG2 IF NO CHANGE, IT MAY BE / OR X COPY *TVALU(X,Y),A GET CHANGE  COPY A,*SIZER CHANGE THE DESIRED REGISTER JMP *TDBG(X,Y) START AGAIN IN DBG RREG2 COPY *TLASTS(X,Y),A FETCH LAST TERMINATOR CLSN =0,A ANY SPECIAL TERMINATOR? JMP *TDBG(X,Y)  NO SPECIAL TERMINATOR, BACK TO DBG CLSN ='/',A LAST TERMINATOR MUST BE JMP RREG3  / OR X CLSN ='X',A JMP $+2 JMP *TERROR(X,Y) ELSE ERROR COPY *SIZER,A  GET DESIRED REG CONTENTS SHIFT A,LO,1 MULTIPLY BY 2 JMP RREG4 RREG3 COPY *SIZER,A SHIFT A,RO,1 DIVIDE BY 2 RREG4 JST *TCRLF(X,Y) NEW LINE JST *TSHEX(X,Y) DO HEX ROUTINE FOLLOWED BY A SPACE JMP RREG5 GET ANOTHER PARM SIZER WORD 0 ****** * * -- DISPLAY AND CHANGE OF GENERAL REGISTERS -- * GREG EQU $ COPY =G0-BASE,A G-REG ABSOLUTE OFFSET JMP RREGG GO PERFORM 'G' FUNCTION TITL ****** * * -- INSP-- I * * INSPECTION & MODIFICATION OF MEMORY LOCATION * ****** INSP  EQU $ INSP1 JST *TCRLF(X,Y) NEW LINE COPY *TADDR(X,Y),A GET 1ST PARM (MEM TO BE MODIFIED) COPY A,ADDRI SAVE IT COPY A,Q JST *TPADDR(X,Y) PUBLISH ADDRESS COPY *ADDRI,A  FETCH CONTENTS OF MEM JST *TSHEX(X,Y) DO HEX ROUTINE FOLLOWED BY A SPACE INSP3 EQU $ JST  *TINP(X,Y) FETCH NEXT PARAMETER COPY *TPFLG(X,Y),A GET PFLG JEQ A,INSP2 ANY PARAMETER(CHANGE)? COPY A,*TSTORE(X,Y) FLAG MEMORY CHANGE COPY Q,*ADDRI MODIFY MEMORY INSP2 EQU  $ COPY *TTEST(X,Y),A GET TERMINATOR CLSN =',',A IS IT A 8 JMP MORE  YES- GO GET NEXT CHANGE COPY ADDRI,Q REFERESH 'Q' COPY *TLASTS(X,Y),A FETCH TERMINATOR  JEQ A,DBGRTN NO SPECIAL TERMINATOR,THEN GO TO DBG CLSN ='+',A INCREMENT? JMP INCR CLSN ='-',A DECREMENT JMP DECR CLSN ='*',A INDIRECT JMP INDI CLSN ='X',A X2 JMP MULT CLSN ='/',A DIV BY 2 JMP DIV JMP *TERROR(X,Y) ELSE ERROR INCR ADD =2,Q DECR SUB =1,Q COPY Q,ADDRI SAVE NEW ADDRESS C  COPY Q,*TADDR(X,Y) RESTORE NEW ADDRESS JMP INSP1 START AGAIN INDI COPY *ADDRI,A  INDIRECT INDI1 COPY A,*TADDR(X,Y) PUT NEW ADD BACK JMP INSP1 START AGAIN MULT COPY *ADDRI,A SHIFT A,LO,1 MULTIPLY BY 2 JMP INDI1 DIV COPY *ADDRI,A SHIFT A,RO,1 DIVIDE BY 2 JMP INDI1 MORE IMS ADDRI NEXT LOCATION JMP INSP3 DO IT AGAIN DBGRTN EQU $ JMP *TDBG(X,Y) BACK TO DBG ADDRI WORD 0 ****** * * -- COMMA -- * COMMA ENT CLSN  =',',A JMP *TERROR(X,Y) RTN COMMA TITL ****** * * -- LIST -- * * LISTING CONSECUTIVE MEMORY LOC51 JST *TINP(X,Y) . BM COPY Q,X2 .  BM JMP MPRS21 BY ! BM SPACE 2  BM * BM * MC - PROCESS A ':'.  BM * BM SPACE 1  BM MPRS60 IMS MPRS20 BM  JMP $+2 BM MPRS62 JMP *TERROR(X,Y)  BM EXCH X2OP,A BM JNE A,MPRS62 IF POSITION WAS FULL... BM EXCH X1,Q BM JNE Q,MPRS62 IF X1 WAS FULL... BM IMS MPRS20 BM JMP $+2  BM JMP *TERROR(X,Y) BM  JST *TINP(X,Y) GET THE SECOND PARAMETER. BM COPY Q,X2  BM COPY A,X1OP MAKE X1OP NON-ZERO. BM JMP MPRS21 BY !  BM LPOOL ENDC TAIL EQU $ END BM JMP $+2  BM JMP *TERROR(X,Y) BM  JST *TINP(X,Y) GET THE SECOND PARAMETER. BM COPY Q,X2  BM COPY A,X1OP MAKE X1OP NON-ZERO. BM JMP MPRS21 BY ! $¿¤‚¦I¢*â*  M º `º VA 6Á ƒ‹A ƒ‰A €&A ž\S¨©H€ž„ $¿{‚¥Hÿ¢â º% úœ º• `º’ VA 6Á ƒbA ƒ`A €&A ž\.33Oÿÿ€/ž„4$¿R‚*I¢xâx  M ºl `ºi VÁ 6Á ƒ9A ƒ7A €&A ž\WXž€Y$¿-‚¤I¢SâS ºœ ú› ºG `ºD VÁ 6Á ƒA ƒA €&A ž\|ÿÿÁ@ÿý}žƒ$¿‚¥Hÿ¢+â+  M º `º VÁ 6Á ƒŠA ƒˆA €&A ž\¤¨©A¥žƒ©$¿D ¤‚¦Hÿ¢â ºL ú º– `º“ VA 6A ƒbA ƒ`A €&A ž\ÌS33PÿÍž…Ó)Ü+€+  ¿u ¢¢sâs º ú› ºg `ºd 6A VA ƒ3A ƒ1A €&A ž\ûÿGÿþüžƒ$¿M ¢¢KâK º M º? `º< 6Á VÁ ƒ A ƒ A €&A ž\#€H$ž‚'$¿& I¢$â$ ºž M º `º 6A VA ƒŠA ƒˆA €&A ž\J¨©H€KžƒO$¿¤‚,H€¢¢â¢ ºŸ ú º– `º“ 6Á VÁ ƒbA ƒ`A €&A ž\rS33Oÿÿÿsž…y$¿zÿHÿ¢xâx ºœ M ºl `ºi 6A VA ƒ8A ƒ6A €&A ž\œÀ€žŸB¥ÂÅ  ºÃžú¿ Ü+€+  ¿E I(⯞‚\¶ž‚  M ºž `º™ ‚j  ‚g  6A VA ƒŒA ƒŠA €&A žMàUUÿ¨©¥¥ÿ¥áž†è3¿ I(âuž‚€\ð ž  M ºd `º_ ‚jº• ‚g  6Á VÁ ƒRA ƒPA €&A žM€ž3¿³ I(â@ž‚\%  M º/ `º* ‚j  ‚g  6A VA ƒA ƒA €&A žMOSPžR3¿~‚²Â²(â ž‚WüÔ\Zž‚ º¤ ú¢ ºŸ `ºœ ‚jº› ‚gº’ 6Á VÁ ƒŽA ƒŒA €&A žM„ W|ÔÿUU¨©Wü…ž‡3¿C‚wÂw(âwž‚VüÔ\• ž ºi úg ºd `ºa ‚jº• ‚gºW 6A VA ƒSA ƒQA €&A žM¿VüÀžÂ3¿‚BÂB(âBž‚W|Ô\Ê º4 ú2 º/ `º, ‚jº% ‚gº" 6Á VÁ ƒA ƒA €&A žMôõž€ö3¿³‚³Â³(âž‚ƦNÒ\þž‚ º¥ ú£ º  `º ‚jº– ‚gº˜ 6A VA ƒA ƒA €&A žM( SƦNÓÿUU¨©NÒ)žˆ23¿w‚wÂw(âwž‚ƦNÔ\: ž ºi úg ºd `ºa ‚jºZ ‚gº‘ 6Á VÁ ƒSA ƒQA €&A žMdNÔežg8Ü+€+  ¿=‚=Â=(â=ž‚ƦNÓ\t º/ ú- º* `º' ‚jº  ‚gº 6A VA ƒA ƒA €&A žMžŸž€ 3¿ ‚²Â²(â ž‚<¾t)\¨ž‚ º¤ ú¢ ºŸ `ºœ ‚jº• ‚gº— 6Á VÁ ƒŽA ƒŒA €&A žMÒ <¾t(ÿUU¨©t)Óž‡Û3¿³‚wÂw(âwž‚<¾t'\ã ž ºi úg ºd `ºa ‚jºZ ‚gº’ 6A VA ƒSA ƒQA €&A žM St'ž‚3¿}‚AÂA(âAž‚<¾t(\ º3 ú1 º. `º+ ‚jº$ ‚gº! 6Á VÁ ƒA ƒA €&A žMCDž€E3¿I‚²Hÿ(â ž‚ÿÿ\M ž º¤ ú¢ ºŸ `ºœ ‚j  ‚gº’ 6A VA ƒŽA ƒŒA €&A žMwÿÿÿÿUU¨©xž†3¿‚xHÿ(âxž‚ÿÿþ\‡ ž ºj úh ºe `ºb ‚jº[ ‚gº‘ 6Á VÁ ƒTA ƒRA €&A žM±ÿþ²ž´3¿³‚CHÿ(âCž‚ÿÿÿ\¼ º5 ú3 º0 `º- ‚jº& ‚gº# 6A VA ƒA ƒA €&A žMæSçžé?‚ÃIž‚Á€\ìžžÜ+€+  ¿o‚´Â´¢­â­ž‚QûL\º« ú© º `ºš ‚mºž ‚jº› 6A VA ƒŒA ƒŠA €&A žP' 33¨©ÁQD=NQ±œMQûL(ž‹40¿3‚¯Â¯¢qâqž‚Ä&±ƒ\<º¦ ú¤ ºa `º^ ‚mº™ ‚jº– 6Á VÁ ƒPA ƒNA €&A žPcÆ‚dÊÆ‡šVÄ&±ƒdž†k0¿°‚|Â|¢:â:ž‚Æ‚dÊ\sºo úm º* `º' ‚mº^ ‚jº[ 6A VA ƒA ƒA €&A žPšS›ž0¿~‚¯Â¯¢âž‚*71E\¥º« ú© ºŸ `ºœ ‚mºž ‚jº• 6Á VÁ ƒA ƒA €&A žPÌ -䃩331E¨©-åò *7ÍžŠØ0¿C‚¯Âw¢tâtž‚-䃩\ລ ú£ ºd `ºa ‚mºZ ‚jºW 6A VA ƒTA ƒRA €&A žP*W-æ2 žƒ E 0¿‚¯Â¯¢@â@ž‚éŒT~\º¦ ú¤ º0 `º- ‚mº™ ‚jº– 6Á VÁ ƒ A ƒA €&A žP;i©HhhgŸPéŒT~<ž†C0¿°‚|Â|¢ â ž‚i©Hh\Kºo úm ºž `º› ‚mº^ ‚jº[ 6A VA ƒA ƒ‹A €&A žPrS33¨©sž…y0¿z‚¯Â¯¢xâxž‚3F¡\º¦ M² ºh `ºe ‚mº˜ ‚jº• 6Á VÁ ƒWA ƒUA €&A žP¨´ÈI†´¸3F¡©ž…¯5Ü+€+  ¿?‚wÂw¢=â=ž‚´ÈI†\¼ºk M² º- `º* ‚mºZ ‚jºW 6A VA ƒA ƒA €&A žPã䞀å0¿ &®¢ â ž‚\í & ú¡ ºž `º› ‚m  ‚j  6Á VÁ ƒA ƒ‹A €&A žPíO33¨©ž…0¿° I¢xâxž‚&íO\# & úk ºh `ºe ‚m & ‚jº[ 6A VA ƒWA ƒUA €&A žPJSKžM0¿~‚¯Â¯¢FâFž‚xÿ¿ÿ\Uº¤ ú¤ º6 `º3 ‚mº— ‚jº• 6Á VÁ ƒ%A ƒ#A €&A žP|ÿüxÿÿÿ¿ÿ}ž…ƒ3¿H‚yHÿ¢âž‚t\‹  M º  `º ‚mºœ ‚j  VA 6A €&  ƒ‹º ƒˆºZ žMµ33¨©t¶ž†½3¿‚?Â?¢vâvž‚xÿà\Å  M ºf `ºc ‚mº' ‚jº” VÁ 6A €&  ƒQº‰ ƒNºZ žMïàÉðž‚ó0¿° @I¢@â@ž‚€\û  M º0 `º- ‚mº– ‚j  VA 6A ƒA ƒA €&A žP"S€#ž‚&5Ü+€+  ¿x‚¯Â¯¢âž‚iŒT~\3º­ ú£ º  `º ‚mºš ‚jº— 6A VA ƒ‘A ƒA €&A žPZ i©HhŸP33iŒT~¨©hg[žŠf0¿=‚yÂy¢uâuž‚i©Hh\nº¤ úh ºe `ºb ‚mºZ ‚jºW 6Á VÁ ƒVA ƒTA €&A žP•èg–ž˜0¿ ‚¯Â¯¢CâCž‚4ÈI†\ º¦ M² º3 `º0 ‚mº˜ ‚jº• 6A VA ƒ$A ƒ"A €&A žPÇ3F¡´¸4ÈI†Èž…Î3¿³‚·Hÿ¢ â ž‚ô\Ö  M º¡ `ºž ‚mºž ‚j  VÁ 6A €&  ƒŒº ƒ‰ºZ žM S33¨©ÿôÚžˆ 0¿w @I¢uâuž‚\  M ºe `ºb ‚m  ‚j  VA 6A ƒTA ƒRA €&A žP9:ž€;5Ü+€+  ¿A‚¯Â¯¢?â?ž‚DŽà\Hº¦ ú¤ º/ `º, ‚mº™ ‚jº– 6A VA ƒA ƒA €&A žPo@]>Cû—ÐDŽàpž†w0¿ ‚³Â³¢âž‚@*©»\ºª ú¨ º `ºš ‚mº ‚jºš 6Á VÁ ƒŒA ƒŠA €&A žP¦ 33¨©ÂÍUBˆâÁ@*©»§žŠ²0¿°‚°Â°¢rârž‚Á´=q\ºº§ ú¥ ºb `º_ ‚mºš ‚jº— 6A VA ƒQA ƒOA €&A žPá Sà ÈDF¡çÁ´=q➇ê0¿x‚¯Â¯¢:â:ž‚Aa•\òº¦ ú¤ º* `º' ‚mº™ ‚jº– 6Á VÁ ƒA ƒA €&A žP ; ž.;ö Aa• ž† !0¿A I¢âž‚@\ )  M º `ºš ‚mº™ ‚j  VA 6A ƒŒA ƒŠA €&A žP P33¨©@ Qž… W0¿ ‚¯Hÿ¢wâwž‚@€\ _º¤ ú¢ ºg `ºd ‚mº— ‚j  6Á VÁ ƒVA ƒTA €&A žP †ÿÿÿ@€ ‡žƒ ‹0¿°‚°Â°¢CâCž‚Çü\ “º§ ú¥ º3 `º0 ‚mºš ‚jº— 6A VA ƒ"A ƒ A €&A žP º SÐÿWÿÇü »ž‡ Ã0¿x‚³Â³¢ â ž‚È^­\ ˺ª ú¨ º `ºš ‚mº ‚jºš 6Á VÁ ƒŒA ƒŠA €&A žP ò 33¨©H~ÜÐ]¯È^­ óžŠ þ5Ü+€+  ¿8‚¯Â¯¢mâmž‚DŽà\! º¦ ú¤ º] `ºZ ‚mº™ ‚jº– 6A VA ƒLA ƒJA €&A žP!2@]><ÂŽwDŽà!3ž†!:0¿‚¯Â¯¢6â6ž‚Á$ç\!Bº¦ ú¤ º& `º# ‚mº™ ‚jº– 6Á VÁ ƒA ƒA €&A žP!iF^©/ŬÕEÁ$ç!jž†!q0¿°‚´Â´¢®â®žF ‚@*©»\!yº« MÊ ºž `º› ‚mº ‚jºš 6A VA ƒA ƒ‹A €&A žP!  S33¨©ÂÍUBÃ@*©»!¡žŠ!¬0¿u‚¯Â¯¢sâsž‚Á´=q\!´º¦ ú¤ ºc `º` ‚mº™ ‚jº– 6Á VÁ ƒRA ƒPA €&A žP!Ûà ÈAÈZ—Á´=q!Üž†!ã0¿>‚¯Â¯¢<â<ž‚Aa•\!뺦 ú¤ º, `º) ‚mº™ ‚jº– 6A VA ƒA ƒA €&A žP"; ž.:qaAa•"ž†"0¿‚³Â³¢âž‚8Õ’ï\""ºª ú¨ º `ºš ‚mº ‚jºš 6Á VÁ ƒŒA ƒŠA €&A žP"I 33¨©Cb‡‰Kø8Õ’ï"JžŠ"U0¿° I¢rârž‚A\"]  M ºb `º_ ‚mº– ‚j  VA 6A ƒQA ƒOA €&A žP"„SA"…ž‚"ˆ3¿}‚²Hÿ¢?â?ž‚@\"  ú¥ º/ `º, ‚mºš ‚j  VÁ 6A €&  ƒº‹ ƒºZ žM"ºÿÿÿ@"”"»ž„"ÀÜ+€+  Ü.€. Ÿ†€0‡„ –‡ƒž‘iª« "à ƒ¼@ÁŸº  „. „+ž˜‚˜Pâ™Â™ÄB‚–p‚•? ?žž ì?ž‚ "ëâ.À"ðFƒ#ž…#!âzIÄA‚wpI K žž Jìž‚ #7ž€#8â–IÄK‚“p ?  ? žž ì? ž‚ "ì#Nž#Pâ–HýÄA‚“pHý K žž Jìž‚ "ô#fž#h‚~phþ)_¨„$@   `º„ €$ÿþ#|ž#~C ™âÀG K )â „À5½‚P‚²pHÿ)iÿ_‡@@?  _†?ˆ+ ?ˆ@+ )¼„$  @ºŒ  `  €$ÿÿ"ü#¾ž‚#Á,‚¨‡¨_Í ý _Ýž „$ƒœºš ƒ™ºk ƒ“  €$_ê6Á „$ºˆ @º €$"ÿ###鞃#í _‹„$@º„ €$ÿý#õž#÷ _Ž„$@ºz €$#ÿž€$ _„$@º„ €$ÿü$ž$ ?Ž„$º1 €$$ž€$_… ž ‚ˆ‚„$º… €$`_ÿ$ ž‚$#VA 6Á ‰‚ˆ?‚„$º… €$Ðp$1ž‚$4VA 6A Ÿª$8-Ü+€+  ‚¥‡‚0œ)ÿ⛂›p Pÿ„$º• @ºŽ ÿ `º‡ €$£PððUUffÿÿ#$z$\žˆ$e „$pºy P  €$$ož€$p„$0ºk €$$vž€$w O‡džïP"ø1y„$0 P pº P  3 €$$é"ø$ž‚$’:G&ºµ M G&ºA úB G&º: Mÿ G&º3 ú1 ‚–P\E„$0 P pºŽ Pºˆ  €$"ë$K"ò$Èžƒ$Ì_†º˜ MP _†ºr ú _† 3 ú† \E ž‚$µUUŸÌ$éRÜ+€+  ‚Çp‚WPþž”&] p ? ‚º?Ï `? &m þž”&]p ? ‚¥?Ï `? &m þž”&]p ? ‚?Ï `? &m $>#$ô% % %5ž…%;‚”pž1%=Ü+€+  ‚& „$  @º… €$"üÿðð%Ožƒ%S‚& „$ºˆ @º… €$ÿÿ€%_žƒ%c Hÿ & „$ºx @ºt €$%ož€%p Iÿ& „$  @  €$%|ž€%}I _‡@@?  I&‹  M 6Á žHÿÿ_‡@@?   I&‹º6 ú3 6Á žHÿÿ_‡@@?  ÿHÿ&‹º ú… 6Á ž‚ÿþI‚˜_‡@@?  Hÿ&‹º‰ ú‡ 6A ž„ÿ€ÿÿHÿÿ_‡@@?  I&‹  M 6Á žI _‡@@?  I&Š  M 6Á žI _‡@@?  I&Šº6 ú3 6Á žI _‡@@?  ‚I&Šº ú 6A žHÿÿ_‡@@?  ÿHÿ&Š  M 6Á žHÿÿ_‡@@?  I&Š  M 6Á žŸÞ& Ü+€+  žŒ&–&–&¢N¢É` €@kžŒ&M- k €Ak ž„'@&M¸@ €'+ )Àk «¢§`@€&=¸A AK €@+ €K •¢“`@€&=¸A AK €@+ €K &–&œ%C&˜&ëž„&ðX¢{` €@kžŒ&M- k €Ak ž„'@&M¸@ €'+ )Àk µ¢Y`@€&=¸A AK €@+ G €K ¢F` €@kžŒ&M- k €Ak ž„'@&M¸@ €'+ )Àk &š'Fž'HL¢#` €@kžŒ&M- k €Ak ž„'@&M¸@ €'+ )Àk ¢`@€&=¸A AK €@+ €K •¢“`@€&=¸A AK €@+ €K &–& '‘ž‚'”?Â2¢|`@€&=¸A AK €@+ €K ¨¢h`@€&=¸A AK €@+ €K •¢T`@€&=¸A AK €@+ €K &˜&ž'О‚'Óe¢>` €@kžŒ&M- k €Ak ž„'@&M¸@ €'+ )Àk ¢` €@kžŒ&M- k €Ak ž„'@&M¸@ €'+ )Àk ¢¡` €@kžŒ&M- k €Ak ž„'@&M¸@ €'+ )Àk &–(6ž(8Ž¢~` €@kžŒ&M- k €Ak ž„'@&M¸@ €'+ )Àk ¢]` €@kžŒ&M- k €Ak ž„'@&M¸@ €'+ )Àk ¢<` €@kžŒ&M- k €Ak ž„'@&M¸@ €'+ )Àk ¨¢`@€&=¸A AK €@+ €K •¢`@€€&Ýø€ ¸@ `øA `@ ¸A &˜&ž(Þ‚(ÆMÂË¢|`@€€&Ýø€ ¸@ `øA `@ ¸A ¢·` &í k €@ ž‰)€@ÀA¹A ùÀ ¢£` €@ ž…&ý1Áž‡ ž…&ý€@  ¢G` &í k €@ ž‰)€@ÀA¹A ùÀ &–&š)ž‚)9·¢|`@€€&Ýø€ ¸@ `øA `@ ¸A ¢` &í k €@ ž‰)€@ÀA¹A ùÀ ¢V` €@ ž…&ý1Áž‡ ž…&ý€@  &œ)Jž)L7¢~` &í k €@ ž‰)€@ÀA¹A ùÀ ¢1` €@ ž…&ý1Áž‡ ž…&ý€@  ¢!` &í k €@ ž‰)€@ÀA¹A ùÀ ŸŠ)‚Ü+€+  ž†UUªªff™™&¢â‰‚‰„@‚ˆ„A‚‡„B‚†„C)‰UUªªff™™)˜ž…)ž ) ây^„$  €$)¦ž€)§ âq‚q„@‚p„A‚o„B‚n„C)°ž€)± )0âfC¿„$@º„ €$ù™)ºž)¼ â\‚\„@‚[„A‚Z„B‚Y„C)Åž€)Æ ) âQ#Þ„$ º„ €$-U)Ïž)Ñ âG‚G„@‚F„A‚E„B‚D„C)Úž€)Û )&â„$  €$*tž€*u â6‚I„@‚H„A‚2„B‚1„C*~ž€* )#â+C„$@  €$*ˆž€*‰ â"‚5„@‚4„A‚„B‚„C*’ž€*“ ) â#„$ º„ €$ÿÿ*œž*ž â ‚ „@‚„A‚ „B‚„C*§ž€*¨ )?âc„$`  €$*±ž€*²+)+â•ÿ „$ƒ‘º ƒŽº ƒ‹º ƒˆºˆ €$ž‡)‰)Š)‹)Œ™™fvâx‚ˆ„@‚‡„A‚†„B‚u„CUUªªff*Ùžƒ*Ý )$âjCþ„$@º„ €$fi*æž*è$)3â_”C„$ƒ[ºk ƒXºh ƒUºe ƒRº… €$žƒvT™âF‚V„@‚U„A‚T„B‚C„C+ ž€+  )â;#ž„$ º„ €$ª+ž+$)â0”C›„$ƒ,º< ƒ)º ƒ&º6 ƒ#º# €$žƒýU©Uâ‚'„@‚&„A‚%„B‚„C+:ž€+; ),â #þ„$ º„ €$i™+Dž+F)âþ „$ƒ‘º‘ ƒº  ƒŒº ƒ‰º‰ €$ž‡)‰UT)Š)‹)Œ™™ŸÈ+dCÜ+€+  /ˆ  oˆ`  Oˆ@  ˆO@  /ˆ  Oˆ@  ˆO@  ˆ/  ˆo`  ˆ/  žC+¦›Ü+€+  ž‚)þ‡ÊâÊ)ƒË„@ƒÊ„A&,Až‚ ƒÂÀ@K ƒ¿„@ƒ¾„A&,Až‚ À@K ‚ø„@‚ý„A&,A ž ‚ï À@K ‚ê„@‚ï„A&,A ž ‚á À@K ‚Ü„@‚á„A&,A ‚Ô À@K ž,@,A,G,I,E,L,F,M‚Á„@&,Až‚ ‚ºÀ@K ‚²„@&,A ž ‚« ÿÀ@K ‚©„@&,A ‚£ ÿÀ@K ‚›„@&,A ‚• ÿÀ@K Þ†žž•â?k)Ÿª ÿÿþÿÿ€ÿÿÿÿÿŸ™,QÜ+€+  I¢ &}„$  @  º‡ €$€+³+¯€,hž„,mi¢z GÀ€ø@ +kžx‘¢ ÿ&}„$  @º‰ º… €$,W-V,‰ž‚,Œ â}¢|H  ÿGÀ€ø@ +kžx‘¢P &}„$  @º‰ º† €$€,¨žƒ,¬â|¢; GÀ€ø@ +kžx‘¢‘ &}„$  @ºˆ º… €$ Ð,Èž‚,Ë â}¢} GÀ€ø@ +kžxž,ÖÜ+€+  žˆ/ƒ–AŸ”¢ÿI†p&½K ¢‰ I†o&½K ž…,Ý,äã-梂‘I†[&½K ¢‰‚ŠI†X&½K ,Þ,ã!!ªª-ž„-¢‚‘I†G&½K ¢‰‚ŠI†B&½K ,ß,âDDÍÍ-$ž„-)¢‚I†3&½K ¢Š I†,&½K ,àʽ,á-9žƒ-=¢h‘ Æ!&­‚º ¢3I Æ&­‚  öRæR-Ož‚-R¢RI Æ &­‚ºŒ ¢‰ Æ&­‚º… ·¶-džƒ-h-¢S‘ ÇP&­ƒNº ¢Š Ç&­ƒº† ž…``B=B¢‘ Ç &­ƒ º ¢0I Ç-&­ƒ+  „t†t-’ž‚-•¢HÿÇŽ &Í  ¢‰ÂLJ &Í  ,Ý,Þ-¥ž‚-¨¢ÂÇŽ &Í  ¢ IÇ &Í  ,ߪª-¸ž‚-»¢ÂÇŽ &Í  ¢ŠÂŠÇˆ &Í  ,áÍÍ,â!!-Ëž„-ТÂÇŽ &Í  ¢ŠÂŠÇˆ &Í  ,ãDD,äU4-àž„-埬-åÜ+€+  žŠ ‚šp‚š€ºq ‚•À‚qº’ Â^ƒ@ºh Š^ÃÂh@º† -ì,å-ñ-ô.ž„.â{~†`ºY âu~ÆâN`ºq ¢>‰ ºO ¢‡>É¢D ºƒ -ï./ž.1âš~‚`º9 â”~Ââ4`º ÂŽ^…@º/ ˆ^ÅÂ)@º„ -î-ð.Kž‚.N"¢ ¦)> º› ¢˜¦)>C º“ ÂnÆI^@ºi ÂfÆI^D@ºa -ò.nž.p"‚ ‡Z º› ‚˜‡— Bº“ âçmi~`º  âçi~F`º -õ.ž.’Ÿ‹.’Ü+€+  Ü.€. Ÿƒž¢-ö"è.Àoƒ™€AŸ—‚—‡—€/0‚•„.ß`À@žƒP iP`¢‹$.ápž‰â2’.Ï‹ ÿÿH€À pi„€Ä+km@žz@P*žžt€À piÆšÀ€K •Ā+†’€€@  ‚„€+km@žm@P*žžg@$ž Pi*ÿÆ{À€K ÂvÄ€*ÿ†s€€@  ‚n„€km@žm@p*žžg@$ž4/.6ž†ýÿÿ  „. „+¾ž )"+žƒ ž„  †cŸp)"ÿ8+ *ÿ1·")"ÿ+ *ÿ1¸"Ÿ·/c;Ü+€+  eûA ‚¬¢©„€+1Až| ‚¥¢¡„€+1Až|¢š€€Kž… +1Ažyž†â”kžw žv ¢‰Â‹€€K +1Ažyü.ÀªªUU/™ž„/žžJ/ž4Ü+€+  ¢s„€À€K +i kžv³þ¢d„€À€K +i kžvã˜` žžp¢T „€À€K +i kžužR/ÑLÜ+€+  ‚ƒ‡ƒž–/4/Þ‹Pž‚ ŸÑºîžƒ „3\Eºé ‚çžx ¢'â‚„€ + kž{–¼„€ +–¹¶¹„€–¶â· +„€¶¯ +„€ kž{IJÿ k@ +„€ kž{`KžvžS0'Ü+€+  A@6A ¢Šhü‚¤„€‚£„‚¢„ƒªŠt¸àÕü80ÿÿ ü?03ž0C> ¢n€€ž ž‹a žŠUUŸ€ªªºx ‚à„‚ œž žƒa ‚Ó†i‚g„ƒž žž‚ ž‘ÂÆK @ KK žB0€CÜ+€+  ¢·€€ž ž„a žƒº> ‚©„‚‚¨†=‚§†: œž žž‚ žŠ@ K@  K ‚!„ƒž ž‹a 0`0lä0œ0žä0»ž‡0ÞB0ÃPÜ+€+  ¢Ð‚І€€ž žž‚ ž‰ÂÄK + ‚¼„‚‚»‡»‚»‡» œž žž‚ žŠ@ KK K ‚¥‡¥ƒ›„ƒž žž‚ ž˜K @ KK ž61:Ü+€+  ž‹0Sè0Ì0æ0è0Vè0U0þ0T¢¬€€ž ž„a žƒ»¢ ‚Ÿ„‚ œž žƒa ƒW„ƒž žƒa žX1K/Ü+€+  ì0P18ƒ³AŸ¥¾û ‡££®«¢§¢ƒŸ£ ƒŸ„€ƒž„ƒ„‚ƒœ„ƒI“ǚŸǙWþ‡— ‡–U…ž •ǎþ‡U…œ€1ð22 222222“‘2/01ü1t1 †ö¢ö‚ð+„€‚î„‚í„‚‚섃³ÇjWþ‡h †çU…ž ©Ç_þ‡^…œ€ †Û IdG2G2úÕž úÒ ‚•ŠË†Ê2 ž¥Þ¾‚½ ž„0 ž§…ž£1£1ª ¢´ð†°‚„€ +o6AžzÞ¨žw‚‡–¦Š˜†£ Ÿh0HÜ+€+  Â˜Ç K‡ž•‹úúœ‚ œ€`Uüÿú§ P ¯Ÿ€2’ ¢åâå‚M„€ + kž{‚އ܂݂݂݇݇݇Ý § „‡×‡×‡×‡×)b^…‚Ô„€¨ biba¢M"ÂLB b ž® bA ¥€I§¸ ¸žÂ´»®žK»«žK»¨žK»¥žK¢$ú#žž  QJG2ÆI ÆJøRÞ2yZ§ž–ž3KÆÆž/üü@0;0<ü€0=ý0>þìðôø2K€¿õƒõÁŸôƒô–ôAŸð ‚ï‡ï „. „+¾ð‚_6 A ‚Ù_6Á o6Á A‚Ð_6A o6Á AƒÏ_6Á o6Á A‚¾_6Á o6Á žP2Ò/Ü+€+   O6A ¾´â¯€@u¾â¬€@_6 Au¹â¤¢¤€€_6 A+u¸âš¢š€€_6B A+u¸žW3]Ü+€+  ž™/>/04`â/Þ‹7ÿP ¢ÌâÌ€€+ kž|Ÿt¾s ¢¿.%À€'A@_6Á @o6Á %À€'A@_6Á @o6Á ¾W ¢£À€A.%Ä€'A@_6 ž@o6 žŒA%À€'A@_6 žƒ@o6Á žC3\PÜ+€+  ž„d`d¾,¢¶â¶‚¶IB„€ + kž{¢® :„€¢¬ƒ¬„‚«„‚‚ª‡ª‚ª‡ª œ _6Á A ‚„‚ ‚š‡•‚•‡•œ _6 Aüü@0ü:è0Q33‚0Vè0U3”3•3žž3¬ž:3¬ Ü+€+  ¿ç¢k À€A@_6 @o6 À€A@_6 @o6 žf3Ë!Ü+€+  ¿È (ÿIÄ€A@_6 @o6 IÄ€A@_6 @o6Á že3ë)Ü+€+  ¿¨ ¢¦&½A@_6 @o6 &½A@_6 @o6 ‚´A@_6 @o6Á ž]4 Ü+€+  34>4ž‚4¿}IB¢{ &­A@_6 a@o6 a&­A@_6 a@o6Á ‚‰†‡žd47Ü+€+  ž‚öR Ü.€. Ÿ„ K‡‚ž˜2¡‹4`_ƒÔ–ÔÁŸÓ  „. „+ ¢ÊâÂÄ€„@ +k@ úžw‚À„€ +@ ú³žy„@ k@`ú®žy ¢¯I‚®BN\ B¸€ ¢¥I‚¥BN\% B¸€ ¢žI BN\% B¸€ ¢‘I‚‘B\%¸€ ü@0ü€â5Àüü 0@ÿ33ÌÌ4©4±ž4¿ž+4¿Ü+€+  ‚¤‡ ‚£‡Ÿ †Šƒ†Žƒž†‰ž¢P·)3€ˆ6A ‚”„‚ƒ“‚“4Û „€\EP·ƒŽ „3\E¯£5¥4Ð4Þ5£ P¬5C 4æž‹4ò ¢=â>‚<„€ + kž{¢4  µ5ž€5R¢Ê\\%ÞY\54ނÆU‚„3\E¢¼ „€&­&½  ù †2FV†¶¦–ÆÖæö /†‚è† ‚è† †ç/Þåž} †‚߆ S‡ O‡‚†05¡ 5P5Nž‡5VŸ£5VÜ+€+  žŽ+‚‡Œ‚ŽP‚p`‚‹„@€/„A)\E·4Å5ˆ5]5d5 †wC PÞtC P ž„I‚n@  [‡k)3‚„„€€/„‚\E5•žU5•Ü+€+  Ü.€. ŸˆžŸ‚“‚” 4i5Àƒžž‚ ž‰ž‚ ž…ž‚ ž ƒöBŸ€?. )3‚ï„€€/„‚\E Á ‡è‡è‡è ¾žô ƒãAžð  ÿx)ˆ‚Úƒ†Ï ¿ÏÂÖ¢Ö‚Öib @„€ãÆÊΞ{Pž‚ žIž‚ žEžž‚ ž@)3‚¿„€€/„‚\E ƒ¹–¹Kžž˜ ú´žŽÇ©–¯Ã­Xÿ@Ǫžƒ¨–¨º¢žž‡ –¢Ã Xÿ@Çž1A@Dx†ˆ‡™‡™‡™‡™)ˆ‚˜„ƒŸ$2€6óâ5Ý899òä6ü 6ãÿÿÿ899ó@n5Á ‚š„€º— ¢•‚•„€€º eƒYº ‚ˆ„€€º‡ ž€žd6v4ž„ €ff‚F žžç ¾ðÂé ¢åâäÄ@K+@1Á k@q¹¿ßº3žt ¾ß‚Øp P ¢ÑâÐÀ@@{ pR+@1Á k@q¶¾ëºžqžR6©A ¾Ç‚ ÿp P‚ ÿ(ÀhÀ@pÄ@pS@`ú°ž† žž‡¾ÓijÀ1Á ÿ*Àžn ¾©ƒ¡‘ ÿp Pƒ› ÿ(ÀhÀÀ@@{ pS@`úž† žž‡¾³ijÀ1Á ÿ*Àžl¾Çž@6é­žÙ€6C7  ¢Å‚Å„€ +@ úÁžy6ÃjP àÜÍ„€ +@ úµžy Ÿb ä'iž… ä'â}æxâ§„$¤% ¢ €€c Š„€+ ºšžw à' %€$Ÿb  IÁIÛQÆAã4np@eDŸtŸ†ü0ü ü@8@ø ‚$†Ï‡Ð‡Ò‡Òÿ†Ë‚Ї˂χςχςχϢÁÂÁKP@¤€&Í&­+-„ž‚ž+ [žvžu ¢±À€@+žžƒ` p  +-„ž‚ž+ [žqžp¢¡ÂŸJÿP@¤€*ÿ-‹ž‚ž*ø [žxžw¢”À€@+žžƒ` p  *ÿ-‹ž‚ž*ø [žqžp¾úž?7•žf88'899ô;;B8(;‚9;¢9‚q P †ô †ó¢ðIÆñÂðC ÂöÊìÊêÊñÆîHøÆéÂëÆëHøÆæH€ÆåÃæÄ€+¾ÃÞàž{ÞàÞÜžuÞÙžoÞÖ [žcžb¢ÏIÆÐÂÏC ÂÕÊËÊÉÊÐÆÍHøÆÈÂÊÆÊHøÆÅH€ÆÄÃÅp@À€@{žžƒ`  +¾šÞ·žtÞ·Þ³žmÞ°žgÞ­ [ž[žZ§QÃIƤž0¾‘ž,7þŸQÃI Æœž'ž&8ž$8ž§ -„Ÿ}Ÿ|+‚˜ †–Ÿw IÁIÚˆQÆAâ†np@eDŸtžð \ †p †o¢lIÆmÂlC ÂrÊhÊfÊnÆjHøÆeÂgÆgHøÆbH€ÆaÃbÄ€+¾?Þ\ž{Þ\ÞXžuÞUžoÞR [žcžb¢KIÆLÂKC ÂQÊGÊEÊLÆIHøÆDÂFÆFHøÆAH€Æ@ÃAXp@&½{žž„` @  +¾Þ1žsÞ1Þ-žkÞ*žeÞ' [žYžXÂ!QÃIÆž.¾ ž*8„ÂQÃI Æž%ž$8Šž"8Š^žƒžø †ø †÷¢ôIÆõÂô@I6ÁIÊîÊJ ìÊóÆðHàÆëÂíÆíHüÆèÃêÄ€ÄĂă+¾ÃÞãÞßžvÞÜžpÞÙ [žbža¢ÒIÆÓÂÒ@I6ÁIÊÌÊÊÊÑÆÎHàÆÉÂËÆËHüÆÆHüÆÅÃÆp@À€@{žžƒ`  +Þ¹žu¾˜Þ¸Þ´žmÞ±žgÞ® [žYžX¨QÃIÆ¥ž-¾’ž)8ç QÃIÆž$ž#8íž!8힤 -„Ÿ}Ÿ|+Þ›ÞšÞ–Þ•Ÿv IÁIÚˆQÆAâ†np@eDŸtžï [ †t †s¢pIÆqÂp@I6ÁIÊjÊhÊpÆlHàÆgÂiÆiHüÆdÃfÄ€ÄĂă+¾?Þ_Þ[žvÞXžpÞU [žbža¢NIÆOÂN@I6ÁIÊHÊFÊMÆJHàÆEÂGÆGHüÆBHüÆAÃBXp@&½{žž„` @  +Þ3žt¾Þ2Þ.žkÞ+žeÞ( [žWžVÂ"QÃIÆž+¾ ž'9mÂQÃIÆž"ž!9sž9s:žƒž¸âû UIª%„@ÄAÄC„Bkm„ž‚žk`[žužt' âé%IUp@À@@{žž„ `' %Iªp@ÀA@{žž„ `' %km„ž‚žk`[žcžb'¾ížK9¬Fž…žã9ô‚ÀÁžÔƒÅAŸÃ ‡Â‡Â‡Â†µ‚Á‡Á‚µ‡À‚´‡¿‚³‡¾‚²‡½)â°P`€€„@+k [žzžy)⦀€pÀ@@{ž†+k [žvžuž‚ žf)„‚„ƒ‚ „†‚„‡ƒp ü‡Ÿ€·Uº@ºC»»B»‚»¢€ã:\7—89ÿ7˜8'8(99¿€6C¾šý…Ÿ€:\‚aþ…Ÿ€@ø IÁIÚTQ³AâRnp@eDŸt ¢TiP`€€„@+k [žzžy¢Ji€€pÀ@@{ž†+k [žvžuŸg žf¾” ž ¾ž‚ ž‰ž‚ ž…ž‚ ž ¾RŸ€5Ð ÿ¶‚Ÿzª ‡UIp@Ú¸ @ùĀøÄ÷ĂöăHþǮ³ǭ…ž Hþǧ­Ǧ` kI…œ€ ǦHüǜ¤ǛI…œ€ ÇŸ IdG>ƒG>„G:ªž‚ G:« @p@ÿ6VNžFÿü‘“>{>|>}>~:q:{>ƒ:„>„œ@Kœ€5/WOhüÂxÄ@ÂwÄAIp@Úd @ÂnÄ€ÂmÄHþÇ^¼Ç]…ž HþÇW¶ÇVI…œ€ DZHüÇN¯ÇMI…œ€ Ǫ IdG>…G>†G:ªž‚ G:« @p@ÿ6BNžL IdG>†G>„G:¬ž‚ G:­ Ÿ‡:÷Ÿ‡:øŸ‡:Á:É>…:Ò>†:\7D;ªªUUUUªªUUªªªªUUUUªªªªUUªªUUUUªªUUªªªªUUªªUUUUªªªªUUUUªªUUªªªªUUªªªªUUUUUUUUªªªªUUUUªªªªªªªªUUUUUUUUªªªªªªªªUUUUªªªªUUUUUUUUªªªª  ªªUUUUªªUUªªªªUUUUªªªªUUªªUUUUªªªªªªªªªªUUUUUUUUUUUUUUUUªªªªªªªª  ƒØ Ÿ× ¿Ï §Pi¢Ëä€&Í&­k4»qB¥žwP§)p â¾À@@{ +p t¹1B¥žu¿´¥(ÿhÿ¤@*ÿjÿ@`ú¯žy@ ú¬žž‚§žq¥(ÿp hÿÀ@@{ *ÿp jÿ@`ú™žu@ ú–žž‚§žm¿Œž;< »Šžž‚¿Šž4ž1<cž‰>ç€706C?.ÿÿÿ? ¿v IÆÛIÆÚ§)¦ØânÂÖC ÂÚÊÒÊÐÊ߯ÔHøÆÏÂÑÆÑHøÆÌH€ÆËÃÌÄ@+kÞÆž{ÞÆÞžuÞ¿žoÞ¼q¤1B¥ž`§)¦µâK³C ·ʯʭʼƱHøÆ¬Â®Æ®HøÆ©H€Æ¨Ã©p@À@@{ +kÞŸžxÞŸÞ›žqÞ˜žkÞ•q 1B¥ž\¿(ÂQÃIÆŠž/ž,†>ø†9€†8ƒ9p&½{žž…@`( `(@+kÞ(žrÞ(Þ$žjÞ!ždÞ1™qB¥žU@¿ÂQÃIÆž&ž#<ðÂQÃI Æ žž<öž<ö_ž„€70;BIÆÞIÆÝ§)¦ÛâtÂÙ@I6ÁIÊÓÊÑÊØÆÕHàÆÐÂÒÆÒHüÆÍÃÏÄ@ÄAÄBÄC+kÞÈÞÄžvÞÁžpÞ¾q£1B¥ž_§)¦·âPµ@I6ÁIʯʭʴƱHàÆ¬Â®Æ®HüÆ©Hüƨép@À@@{ +kÞŸžxÞŸÞ›žqÞ˜žkÞ•qž1B¥žZ¿+ÂQÃIÆŠž,ž)=T†QÃIƃž$ž#=Zž!=ZžŠd;‚IÆtIÆs§)¦qâ Âo@I6ÁIÊiÊgÊæÆkHàÆfÂhÆhHüÆcÃeÄ@ÄAÄBÄC+kÞ^ÞZžvÞWžpÞTq£1B¥ž_§@iæL¢Å‚J 6Á ŠDŠBŠI†Fà†A‚C†Cü†>ü†=ƒ>p&½{žž…@`( `(@+kÞ-žrÞ-Þ)žjÞ&ždÞ#1—qB¥žS@¿˜ÂQÃIÆž#ž =ÇÂQÃIÆžž=Íž=Í § »‰žž‚¿†Ÿ‡Ÿ‡=Ö@žˆ€706C? ;¢<# § »Ažž‚¿>žDžA>³ž‚>ç¿} ‡È§IB¢ÅÀ JÿÄŸAIB¥I‡Up@Úº @ÂÄÄ€ÂÃÄÂÂÄ‚ÂÁăHþǰ±ǯ…ž Hþǩ«Ǩ` kI…œ€ ƳHüǞ¡ÇI…œ€ Æ« IdG>ƒG>„G>ž‚ G>€ @p@ÿ6\NžD>Ýü@ÿü‘“>D>N>Wœ@Kœ€5/WIhüÂtÄ@ÃÓÄAIp@Ú` @ÂjÄ€ÂiÄHþÇZÂÈÇY…ž HþÇSÂÂÇRI…œ€ ÆaHüÇJºÇII…œ€ ÆY IdG>…G>†G>ž‚ G>€ @p@ÿ6BNžL IdG>K †G>„G>ž‚ G>‚ Ÿ‘>Ð §‚Š †ˆ»žž‚¾¯Ÿ‡Ÿˆ>ÛKžÑ:©>š>¢>«>%6C>" ¢½â‚¼„€„@ +k@ ú¶žw‚´„€ +@ ú°žy„@ k@`úªžy Ÿ^ †›¦› ¢›€€ @„€+ º—žx+ €€ @„€+ ºžx ¢ƒ‚Ÿcxü0ü 0@ü@ü€ƒû–ûBŸ€A ƒø; )3‚ó„€€/„‚\E Á ‡ì¿ì ‚ê†û‡é‡éÿ†ø‡ç‚Ô†×‚Ó†Ö‚Ò†Õ‚Ñ†Ô †Ê†ï¢êÂêKÆê¾žó i „+ž‚ž)Œ@ )ˆ‚¾„ƒ€0„‚ @c ÂÓÄ€p@À€@{žÕ@ )ˆ‚°„ƒ @pµžÂ·Ä€Áž &­À€@{žÌpÂIžHþÄ€Áž &­À€@{ž¾qBižH¦¬¾ù¢ª+‚© ž@ž?Ÿ=?Ç?Ñ?Ë?ñ@âã?>@m5ç€@Ö@o@×ÿÿÿ¦ ‚W žI pAžŒž—žß @ )ˆ‚R„ƒ @pLHÿN 6ØÄ€&­€€{žwžÄIN 6LÄ€&­€€{žwž¸ pAžŒž @ )ˆ‚/„ƒ @ † pVÿ†Ž‚™ ÿ†—Áž ‚ˆHÿÄ€&­À€@{žqž– ¾ýŸ}†y‚„ ÿ†‚žj‚rIÄ€&­À€@{žpž€šÏ@pA@ID‚ žW‚¾ÁžÏƒÄAŸÂ † †µ‚¿†‚µ‡½‚´‡¼‚³‡»‚²‡º)â°P`€€„@+k [žzžy)⦀€pÀ@@{ž†+k [žvžuž‚ žf)„‚„ƒ‚„†‚„‡‚ˆp ü‡Ÿ€¿TfÀ¹À¼¿Ç¿Ñ¿Ë¿ñ€ÿàã@Õÿ?¥?¦?§?¨¿€¾šý…Ÿ€@Õ‚dþ…Ÿ€@ø IÁIÚWQ³AâUnp@eDŸt ¢W¦OiP`€€„@k+ [žzžy¢Li€€pÀ@@{ž†+k [žvžuŸf že¾” ž ¾ž‚ ž‰ž‚ ž…ž‚ ž ¾QŸ€?. ÿ¶‚Ÿzªžƒ0‚ žœ ¿ž §P‡›‡› ‡š¢¿™¤6B¥žz§¿”P »’žžƒP‡ˆži)ˆƒ‹„ƒ‚Š„‚ž¢>ç? ?Æ?Å?]? @n6D\5HA@A Ü,žÜ-Ÿ€"Æ—¦—†—&}¢“â““€€Œ@È+kKQ¹‚‡ ž~‚„ žtÀ ­(.)⮀€„@-ÿž‚žƒ+kžw ÿ )➀€À@„@Ä€-ÿž‚žƒ+kžu¢’ ‘ˆ€ Kž‚ž‚+žyŠºŠÂ‰D žRA­Ÿ€"AÀB¿Àÿÿ ­ BÀ×¾¾è Þ~¾Íž¯ “É,OQ€„0z¢3íovÓð´èàùaK39ÑNrstÙ³OÈš2PLKÛM T…ð¾Ê (½Ó :½Ó‚EŠ’½Ô -½Ó :½Ó‚" ÿЉ½Ô )½Ó ½Ó Š‚…ìÆÿþA ¿†ÈæÊ¦ÈÆÆp†ÇP†Æ0†Å @0†ÂB ž †¾¢` Ÿh †‚}’¾cÅížD «¢«â«‚®‚­‚§p‚¦P‚¥0/‚œŸo ½Ñ D½Ó E½Ó B½Ó U½Ó G½Ó 4½Ó ½Ó D½Ó 0½Ó ½ÓŸi ¾7Ÿ} ½Ñ ½Ó‚z½Ó¾¶¾µ P¾«ì½Ú A¾§‚C½Û Q¾£‚@½Û X¾Ÿ‚=½Û Y¾›‚:½Ô½Ñ¾Ÿ¾ž¾ K¾“‚3½Û L¾‚0½Û S¾‹‚-½Û D¾‡‚*½Û C¾ƒ‚'½ÔŸK ½Ó =½ÓŸ{ ¾Ÿ} ½ÓŸ|‚Æ"„ †Á½Ñ *½Ù½Ò†¼ Yž  Qžž žä Až¹ Gžž„½Ò½Ø†­ž Ržž†½Ò ž¡½×Ƥž† Dà Và Wá½Öƚ›LBžãLCÐLFÎLLÍLSÏLJžÁLIÊLGÉLRÈLZßÅ …ë½Çž<ê ¾/Ÿ}½Ò†{½Ò†u½Ò žÅ‚t Pž” LžÅ‚j Tž‹ Pžƒ BžÅò…ï P…ð ½Ó‚\…ðž …ñ‚W Hž„ TžÅ…ñž ½Ò Äž|ÁãQE‚I…ìç ,ž‘ç ,ž‡½Ñ `솂½ÕŸ€ _½Ùž¨ž3 ¾9Ÿ}ª¸¦¸ `î JžŒ Bž†Áì YK QJÿžˆ‚¨fÁäž½Ö‚¤ žcÞ¡ @‚²€ÞŸ‡žÞ§œ `ç@E ;ž‚ž†žß½ÖRA@EN@AÞÇŽ QÁÞŠ‡‰ç ,ž^ž:žFÅÔ罞& o¾*‚| ÿ…ì†x‚`Ä D `…ëžž†oì¢Y*ü¸‚ž›€ƒQ€„†d À ‚Ѐª_Ѐ Ä„‚ÂZ@AĄ܃žT B `…ë½Çë DÝìž„*üÞLž_žU‚3 `Ä¢1*ü¦/€ ‚„€‚) ÿ†'žr½Ë šÁê"B†œãƽу˜½Û½Ö½ËãC凑Ŀ Ä /ž† XžÅƒ‡ž‚ƒ„ ½Ñ½Ûži ¤ž]½Ñ䆫@½Úƒ¨½Û½ÖãB…éÇ¢ç ,žœÂžæ[ +ž‰ -žˆ *žŠ Xž‹ /žŒÅKJÿÆŽÅäž^ƒ‹…äž[ƒˆž{ƒ… žxÞ‚žZÄ ,ÅŸ|¾Û ž†½Ö½ËL žÅÆÎð Pžž„ò…ï ½Þ½Ñä†à½Úø†Á†¾ƒÛ½Û½ÝÞºž{‚¹ ¾ƒ‚ӽўq ‚±†´Ž±k†¬ŠÉ†È‚­Gû†©½ÌÞ§ž}Þ¦žyý†¢½ÌÞ ž}ƒ¹y E  à ž .½Óƒ®ÿ E  à ž .½ÓÞ£ÞƒžfŸN ,žÅ½Ö†s@ÁäFž…C ’kŸqÁîLLžÅ¾ (žwž{žu Â^Þ|JÿQBÆZŸyî Lžˆ Sžžð TžŠ½ÑžˆÞN‚M ¾ †Ižsľ‰…éä¾Ë†_‚”‡]¾]Š’ž| IÆŽ¾> ,žÅ½ÖƇ ,žžƒ†·½ÖÆ‚ŸpIư¾k ,ž“ ’« ,žƒHÿÆtž’‚r žŽHÿÆmæ -žÅ†›ž†½Öæ -žÅ†”ä†(ƒ'š\–\ÂFžƒ‚Š -ž‚¾žt½Ñ‚½Úƒ½Ôžx Â’@"Fž‚Ÿzž‡@ ÎŒ‰è ÿFž„ …éÅè Ÿl>¾#…é䆠† ‚.¾b†žÁèÆƒ™‡šÞ™Þ–JÿQº‚”†’‚!†’Â’ƒŽ»ž…ÞŠÞ‹JÿQ¸Ä½Ñ %½Ó‚‚½Ôžu †U ½Ó ½Ó ’‰B *ž ½Ó ½Ó‚GŸo †h½Ô †fÿ†e ¤"†cIƒaM K ÿ¢Y&žž†¢L V&žƒ†RÆR `ÞQKL$žžk‚K N =½Ó‚DŽD½Ô G½Ó‚A öÁ  :½Óž€ ½ÓŸL ¾ƒ ¾ÇŸ{ †’¹¾‡y¾…9¾ƒ¾‚Ÿu  öÁ  :¾´‚Ÿw ® 0¦”‡¢‚C C 96¼C C "¢…0 `Ÿj† •…墒C "C ¢tC I60@—ŸT¾žz @þ‚Œÿÿ¢0ÿ 6="ÿ. 1¾ `@Ÿp† IÆyÆyÆyÅãÆx½Ò Rž¾ žÉ Gž³ ,ž˜ ;ž– +ž” -ž’ ž *žŽ /žŒ XžŠ¾í’_1Š]†\ÝãIÆWž`Ýã ž†R’RÂR -@A@ŠK†J@ †J‚H +žO -žM *ž“ /ž‘ XžŸ?½Ò¾· ª–€€ `žY½Ò¾“ Bª€€ `žR†-½Ò†,  Ÿ,Å +†&½Ò žNŤš †›ªI€€º—žž…+KL žƒžv `Ÿp `ÅæPAQXYKLSDC ZžÅ Až„ ž‡ 9žÅ 0ÅŸn ÆC FÅ ó= » Ÿt ,žžˆ½ÖÆ ,žžƒ½ÖÆ™½Ë½Ñ•䆒ƒ‘½ÛÞJÿQ»‚ŒŽŒŠŒ €€ `…ä¯ð Tž½ÑÄ Å½Öp@ †ü¾¶ʽтõ½Û‚ð½ÛÂóTB‚ñ½Ûľ§@L@ž|LOžÛLmžÙLož×¾š ¦á `LžpJñRbC žŽžŸžßžÝž žžž¦ž¥ž¤ž™ž–ž•ž”žž“¾ë¾êž[ ¾çŸ} ¾ÞŸ} ¾Ñÿ½†»¾Æ@ƹŸwžûžõžïr·Q†²†´†­žBLùžƒ¾ÍLøre¾ˆ‡¤Þ£žžîÞ¤žsgž3 P@™‚—b@ ž‚ž†`@ žƒ `žÚ @P `Ÿl¾¦†„¾£Þ‚ž}ž?ž.r†yž  ¾…q†v¾‚¶tŸy ¾½’j 6Á €šfÿ’dŸv ¾–¾sÞ`Ÿz ¾¾fÞZÞYŸy¾aŽ[ľÁ⟄½Ñ C½ÓÄ ‚I†O‚H0Ÿzr(ÿ¦E `žÿ¾ ‡<Þ;žC½Ñ T½ÓK@½ÔÄ½Ñ M½Óƒ/½ÔÄ ¾½¢·‚·ûùû6I6;û6D6Âúž†ù666´ø"û"ù¾¨Ÿd ¾¡ü¢œ"ý¢˜ý96=ý96½"ý¾™Ÿq ¾’¢"ùø¢‰ùI6=ùI6½"ù¾ŠŸq†‚p† 0¦|Ÿ| ¢y0 `Ÿ{ ¾6Ÿ} †ö†÷†õªû¦ù `½Ö ž’ÞôÇóÅä½ÜÁèÞïÇîÞçÂæLžƒ ž‰žo ,žž…½ÖÆÛÆÜ ,Åªß¦Ý `‚ÕAņæ†Ðî Vž †ÍIP¾÷Þ΃͆àÞ˃ʅè ÿÂÃQÁ¾Ú°‰èJ ‘è@žˆ ¾Ÿ} ¾ Ÿ}…èIPNÆÃ‚ÁAKèÁ¾¡K †»¾Õ‚·F ¾ý¾ºIƱ¾Í ¾÷¾´Â²¾È ¾ò¾¯Â¨N ¾Â‚¥†‘çަ¾¼ž| ¾ Ÿ} ‚… ÁKŸzË hžž# †hÆ¿ÂcQH¾UÂbQÃŽaA¾Í¶ŸsÂnQB¾žz¾žx ¾¶Ÿ} @y¾§¾dÞK@ÿ¾¢¾_ÞFŸsèÕÞ?ž“ ¾™¾V‚;Â8ÁHÿ¾gÂK¾eI ¾˜Â3QÄ ÿ¾IIZ¾’ÄÂ@¾ZI ¾èAž=ž; ’7 6Á €š3ÿ’1Ÿw ‚BÆK ¾. ÿIJÿQ¶ÆŸs ½Ñ %½Ó‚" ÿ½ÔŸxmF0EBE5E3--E2E1ÿ|Ÿ| ¢y0 `Ÿ{ ¾6Ÿ} †ö†÷†õªû¦ù `½Ö ž’ÞôÇóÅä½ÜÁèÞïÇîÞçÂæLžƒ ž‰žo ,žž…½ÖÆÛÆÜ ,Åªß¦Ý `‚ÕAņæ†Ðî Vž †ÍIP¾÷Þ΃͆àÞ˃ʅè ÿÂÃQÁ¾Ú°‰èJ ‘è@žˆ ¾Ÿ} ¾ Ÿ}…èIPNÆÃ‚ÁAKèÁ¾¡K †»¾Õ‚·F ¾ý¾ºIƱ¾Í ¾÷¾´Â²¾È ¾ò¾¯Â¨N ¾Â‚¥†‘çަ¾¼ž| ¾ Ÿ} ‚… ÁKŸz’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I’I