.NLIST .INCLUDE /DSMAC.MAC/ .INCLUDE /MYMAC.MAC/ .INCLUDE /ASCII.MAC/ .INCLUDE /HWDF.MAC/ .LIST .INCLUDE /MACRO.MAC/ ; ; External file ; ; SP$ZER = 0 ; SP$CHE = 0 ; On or Off caching ; ;DEBU$G = 0 ; debug code R$$T11 = 0 ; defined - work under rt-11, undefined - standalone version MODULE NAME=, REL=, VER=<03>, COMM= FROM SYSMAC IMPORT .SETTOP, .EXIT, .TTYOUT, .PRINT FROM ARITH IMPORT $QMUL, $DMUL, $QDIV, $DDIV PRO$CS =: ^O<173700> ; PRO300 series System CSR $SYPTR =: ^O<54> ; Pointer to base of the Resident Monitor $CNTXT =: ^O<320> $CNFG2 =: ^O<370> ; System configuration word #2 C2.PC =: ^O<20000> ; 1 => System is a Pro 3xx. SECCNT =: ^D<16> ; Time of test in seconds CLKCNT =: ^D<50>*SECCNT ; Clock ticks count CLKCN2 =: ^D<64>*SECCNT ; Clock ticks count (pro) 60*16? No! 64! .IF NDF SP$CHE IACTCNT =: 0. ; Speed3 - without cache .IFF IACTCNT =: 400. ; Speed4 - with cache .ENDC .MACRO SOB RR,LAB .EMIT .EMIT .ENDM SOB .MACRO $MTPS PR,?L ; MTPS PR PUSH PR PUSH #L .EMIT .EMITL .EMIT .EMIT .ENDM $MTPS PROCEDURE START BEGIN LET SPSAVE := SP CALL INIT $PRINT #MSPEED LET TCURR := #0 $GOTO PREP END START ; THRU R3 := #5 ; THRU R4 := #0 ; IFB (R5) EQ #0 LEAVE LOOP ; END ; IFB (R5) EQ #0 LEAVE LOOP ; END ; IFB (R5) NE #0 THEN ; CALL RESVEC ; $PRINT #ERR ; .EXIT ; END ; $ASCII ; ; ERR: ; .ASCII /TV buffer not empty/<200> PROCEDURE PREP BEGIN $MTPS #PR7 LET @#V.TR10+2 := #PR0 LET @#V.TR10 := #ILLOP $MTPS #PR0 LET R1 := TCURR + R1 ; R1 := TCURR*2 LET R0 := R1 + R0 ; R0 := TCURR*4 LET R0 := R0 + #CMDPTR ; next test pointer LET R5 := (R0)+ ; word count IF RESULT IS MI THEN ; mi if paired test LET QPAIRED := #1 NEG R5 END LET R4 := (R0) ; first word command pointer LET R1 := R1 + #MSGPTR ; title pointer offset LET R1 := (R1) ; address of title $SSHWL R1 .IF NDF SP$CHE LET R1 := #0 LET R2 := UPLIM - BLKBEG LET R0 := R5 CALL $DDIV ; (R1 R2) / R0 -> (R1 R2) - result, R0 - remainder LET R1 := R2 - #1 CLC LET R1 := R1 R.ROTATE 1 LET ACTCNT := R1 .IFF LET R1 := #IACTCNT .ENDC LET R0 := BLKBEG THRU R1 LET R2 := R4 ; first word command pointer THRU R3 := R5 LET (R0)+ := (R2)+ END END LET (R0)+ := CRET LET R0 := R0 - BLKBEG CLC LET R0 := R0 R.ROTATE 1 LET BLKSIZ := R0 LET R0 := #123456 LET R1 := #123456 LET R2 := #123456 LET R3 := #123456 LET R4 := #123456 LET R5 := #123456 IF PROFLG NE #0 THEN LET CLKS := #CLKCN2+1 ELSE LET CLKS := #CLKCNT+1 END LET ICNT := #0 .IF DF R$$T11 CALL TVWAIT .ENDC $MTPS #PR7 LET @VLTC2 := #PR7 LET @VLTC := #TICTAK $MTPS #PR0 WAIT $GOTO TEST END PREP ; ; The exit from this procedure is performed by the procedure TICTAK ; PROCEDURE TEST BEGIN LOOP CALL @BLKBEG LET ICNT := ICNT + #1 END END TEST PROCEDIRE ILLOP BEGIN LET QPAIRED := #0 LET (SP) := #NXTSTP $PRINT #NOOP RTI END ILLOP PROCEDURE TICTAK BEGIN IF PROFLG NE #0 THEN TST @#173030 END LET CLKS := CLKS - #1 IF RESULT IS NE RTI END $GOTO SHOW END TICTAK PROCEDURE SHOW BEGIN CALL RESVEC LET PARTP := (SP) LET SP := SPSAVE .IF DF DEBU$G LET R2 := #0 .IF NDF SP$CHE LET R3 := ACTCNT ; actions (one or more PDP-11 commands) count in buf .IFF LET R3 := #IACTCNT ; actions (one or more PDP-11 commands) count in buf .ENDC ; LET R3 := ACTCNT ; actions (one or more PDP-11 commands) count in buf CALL CNV10 CALL SHOBUF LET R2 := #0 LET R3 := ICNT ; counter of the total execution of actions in the buffer CALL CNV10 CALL SHOBUF .ENDC CALL CALC LET ISPEED+2 := R2 ; high LET ISPEED := R3 ; low CALL CNV10 CALL SHOBUF $PRINT #CSPEED IF QPAIRED NE #0 THEN IF QPAIRED HIS #2 THEN $PRINT #TSPEED CALL PCALC CALL CNV10 CALL SHOBUF $PRINT #CSPEED LET QPAIRED := #0 ELSE LET ISPIDP+2 := ISPEED+2 ; high LET ISPIDP := ISPEED ; low LET QPAIRED := QPAIRED + #1 END END ENTRY NXTSTP CALL RESVEC LET TCURR := TCURR + #1 IF TCURR LO #TST.CN THEN JUMPTO PREP END .IF DF R$$T11 .EXIT .IFF LOOP HALT END .ENDC END SHOW PROCEDURE PCALC BEGIN .IF DF DEBU$G LET R0 := #000000 LET R1 := #100000 LET R2 := #000000 LET R3 := #100000 CALL $QMUL HALT LET R0 := #100000 LET R1 := #000000 LET R2 := #000000 LET R3 := #000002 CALL $QMUL HALT LET R0 := #000000 LET R1 := #000000 LET R2 := #040000 LET R3 := #000001 LET R4 := #000000 LET R5 := #100000 CALL $QDIV HALT LET R0 := #000000 LET R1 := #000000 LET R2 := #000001 LET R3 := #100002 LET R4 := #000000 LET R5 := #000003 CALL $QDIV HALT .ENDC ; SPEEDP*SPEED ; ------------ ; SPEEDP-SPEED LET R0 := ISPIDP+2 ; high LET R1 := ISPIDP ; low LET R2 := ISPEED+2 ; high LET R3 := ISPEED ; low CALL $QMUL ; (R0 R1) * (R2 R3) -> (R0 R1 R2 R3) LET R4 := ISPIDP+2 ; high LET R5 := ISPIDP - ISPEED ; low LET R4 := R4 - CARRY - ISPEED+2 ; high JUMPTO $QDIV ; (R0 R1 R2 R3) / (R4 R5) -> (R0 R1 R2 R3) (R4 R5) END PCALC PROCEDURE CALC BEGIN .IF DF DEBU$G LET R2 := #0 LET R3 := PARTP CALL CNV8 CALL SHOBUF LET R2 := #0 LET R3 := PARTP - BLKBEG R.SHIFT 1 CALL CNV10 CALL SHOBUF .ENDC .IF NDF SP$CHE LET R0 := ACTCNT ; actions (one or more PDP-11 commands) count in buf .IFF LET R0 := #IACTCNT ; actions (one or more PDP-11 commands) count in buf .ENDC ; LET R0 := ACTCNT LET R2 := #0 LET R3 := PARTP - BLKBEG R.SHIFT 1 CALL $DMUL ; R0 R1 LET R2 := R1 LET R1 := R0 LET R0 := BLKSIZ CALL $DDIV ; R1 R2 LET R0 := R0 L.SHIFT 1 IF R0 HIS BLKSIZ THEN LET R2 := R2 + #1 END LET PARTC := R2 .IF DF DEBU$G LET R3 := R2 LET R2 := #0 CALL CNV10 CALL SHOBUF .ENDC ; ; $DMUL ; ; ; $DDIV ; (R1 R2) / R0 -> (R1 R2) result R0 remainder ; .IF NDF SP$CHE LET R0 := ACTCNT ; actions (one or more PDP-11 commands) count in buf .IFF LET R0 := #IACTCNT ; actions (one or more PDP-11 commands) count in buf .ENDC ; LET R0 := ACTCNT ; actions (one or more PDP-11 commands) count in buf LET R2 := #0 LET R3 := ICNT ; counter of the total execution of actions in the buffer CALL $DMUL ; (R2 R3) * R0 -> (R0 R1) LET R1 := R1 + PARTC LET R0 := R0 + CARRY LET R2 := R1 LET R1 := R0 LET R0 := #SECCNT ; execution count in sec CALL $DDIV ; (R1 R2) / R0 -> (R1 R2) (R0) LET R3 := R2 LET R2 := R1 RETURN END CALC PROCEDURE CNV10 BEGIN LET R1 := #10. GOTO CNV END CNV10 PROCEDURE CNV8 BEGIN LET R1 := #8. $GOTO CNV END CNV8 ; ; R2 R3 ; PROCEDURE CNV BEGIN LET R0 := #BUF THRU R4 := #EBUF-BUF LET (R0)+ :B= #SPACE END LET -(SP) := #4 LOOP LET R4 := #0 LET R5 := #0 LOOP IF R2 EQ #0 AND R3 LO R1 LEAVE LOOP ADD #1, R5 ADC R4 SUB R1, R3 SBC R2 END LET (SP) := (SP) - #1 IF RESULT IS EQ THEN LET -(R0) :B= #SPACE LET (SP) := #3 END LET -(R0) :B= R3 LET (R0) :B= (R0) SET.BY #'0 LET R2 := R4 LET R3 := R5 IF R2 EQ #0 AND R3 EQ #0 LEAVE LOOP END POP RETURN END CNV PROCEDURE SSHOWL BEGIN PUSH R1 $PRINT R1 LET R1 := R1 - (SP)+ - #1 LET R1 := - R1 + #MMXLEN IF RESULT IS GT THEN THRU R1 $TTYOUT #SPACE END END RETURN END SSHOWL PROCEDURE INIT BEGIN .IF DF R$$T11 .SETTOP #-2 LET UPLIM := R0 LET R0 := @#$SYPTR IF #C2.PC SET.IN $CNFG2(R0) THEN ; On Pro? LET PROFLG := #1 IF @#V.LTC EQ @#230 AND @#V.LTC+2 EQ @#230+2 THEN LET VLTC := #230 ;#100 LET VLTC2 := #232 ;#102 END CALL GETCNT END .IFF LET UPLIM := #157776 .ENDC CALL SAVVEC LET INISPS := SP $MTPS #PR7 LET @#V.TR4+2 := #PR7 ; LET @#V.TR4 := #10$ ; ; LET R0 := @#PRO$CS ; IF R0 EQ #233 THEN ; On Pro? ; ; LET PROFLG := #1 ; LET VLTC := #230 ; LET VLTC2 := #232 ; ; END IF ; 10$: ; ; LET SP := INISPS LET @#V.TR4 := #20$ .IF NDF SP$CHE LET @#CCR := @#CCR SET.BY #CC.BP .IFF LET @#CCR := @#CCR OFF.BY #CC.BP .ENDC 20$: LET SP := INISPS .IF DF DEBU$G STFPS -(SP) LDFPS #^B<0100111111100000> LDD DNUM03, AC0 LDD DNUM04, AC1 DIVD AC1, AC0 STFPS R3 CLR R2 CALL CNV8 CALL SHOBUF LDFPS (SP)+ .ENDC LET @#V.TR10+2 := #PR7 LET @#V.TR10 := #30$ ; ; Some "possible trap 10" init ; ; FPP SETD SETL 30$: LET SP := INISPS LET @#V.TR10 := #40$ ; CIS CVTNPI ; numeric to packed N01DSC, BUF01 CVTNPI ; numeric to packed N02DSC, BUF02 CVTNPI ; numeric to packed N03DSC, BUF03 CVTNPI ; numeric to packed N04DSC, BUF04 40$: LET SP := INISPS ; init completed $MTPS #PR0 CALL RESVEC RETURN END INIT .IF DF R$$T11 PROCEDURE GETCNT BEGIN LET R5 := @#V.TPS + #2*2 LET R4 := R5 + #100 REPEAT LET R5 := R5 + #2 IF R5 HIS R4 GOTO 10$ IF (R5) NE #^O<105765> CONTINUE LOOP ; TSTB xx(R5) LET R5 := R5 + #2 IF #270 HI (R5) CONTINUE LOOP IF (R5) HI #400 CONTINUE LOOP UNTILB 3(R5) EQ #2 ; BEQ .. LET R4 := (R5) LET R5 := @#$SYPTR LET R5 := $CNTXT(R5) + R4 LET OCNT := R5 $PRINT #OCFND, NORET 10$: $PRINT #OCNFND, NORET END GETCNT $ASCII OCFND: .ASCII /OCnt field found :)/<200> OCNFND: .ASCII /OCnt field not found :(/<200> PROCEDURE TVWAIT BEGIN IF PROFLG NE #0 THEN PUSH R5 IF OCNT NE #0 THEN LET R5 := OCNT PUSH REPEAT UNTILB (R5) EQ #0 POP ELSE THRU R5 := #0 END THRU R5 := #0 END ; REPEAT ; UNTIL #100 OFF.IN @TVCSR END POP R5 END RETURN END TVWAIT .ENDC $IDATA .IF DF R$$T11 OCNT: .WORD 0 .ENDC PROFLG: .WORD 0 $PDATA LIMITS: .LIMIT BLKBEG =: .-2 $IDATA VLTC: .WORD V.LTC VLTC2: .WORD V.LTC+2 $PDATA TVCSR: .WORD TPS TVBUF: .WORD TPB PROCEDURE $TTYOUT BEGIN .IF DF R$$T11 IF PROFLG NE #0 THEN .TTYOUT #SPACE ELSE .IFTF REPEAT UNTILB @TVCSR MI #0 LET @TVBUF :B= #SPACE .IFT END .ENDC RETURN END $TTYOUT PROCEDURE SHOBUF BEGIN LET R1 := #BUF $GOTO $PRINT END SHOBUF PROCEDURE $PRINT BEGIN .IF DF R$$T11 IF PROFLG NE #0 THEN .PRINT R1 REPEAT UNTILB (R1)+ EQ #200 RETURN ELSE .IFTF LOOP LET R0 := #0 LET R0 :B= R0 SET.BY (R1)+ IF R0 EQ #200 THEN RETURN END REPEAT UNTILB @TVCSR MI #0 LET @TVBUF :B= R0 END .IFT END .ENDC END $PRINT PROCEDURE SAVVEC BEGIN $MTPS #PR7 LET SV4 := @#V.TR4 LET SV4+2 := @#V.TR4+2 LET SV10 := @#V.TR10 LET SV10+2 := @#V.TR10+2 LET SV100 := @VLTC LET SV100+2 := @VLTC2 $MTPS #PR0 RETURN END SAVVEC PROCEDURE RESVEC BEGIN $MTPS #PR7 LET @#V.TR4 := SV4 LET @#V.TR4+2 := SV4+2 LET @#V.TR10 := SV10 LET @#V.TR10+2 := SV10+2 LET @VLTC := SV100 LET @VLTC2 := SV100+2 $MTPS #PR0 RETURN END RESVEC $IDATA SV4: .BLKW 2 SV10: .BLKW 2 SV100: .BLKW 2 ACTINIT ACTION <\BR .+2\> BR .+2 .IF NDF SP$ZER ACTION <\R1+R0 classic\> LET R1 := R1 + R0 .ENDC ACTION <\R1(23456.)+R0(12345.) empty\>, Paired=YES LET R0 := #12345. LET R1 := #23456. ACTION <\R1(23456.)+R0(12345.)\> LET R0 := #12345. LET R1 := #23456. LET R1 := R1 + R0 .IF NDF SP$ZER ACTION <\R1+@R0 classic\> LET R1 := R1 + @R0 ACTION <\R1(23456.)+@R0(M-12345.) empty\>, Paired=YES LET R1 := #12345. LET R0 := #ADDM ACTION <\R1(23456.)+@R0(M-12345.)\> LET R1 := #12345. LET R0 := #ADDM LET R1 := R1 + @R0 ACTION <\R0*R0 classic\> LET R0 := R0 * R0 ACTION <\11.*12. empty\>, Paired=YES LET R1 := #11. LET R3 := #12. ACTION <\11.*12.\> LET R1 := #11. LET R3 := #12. LET R1 := R1 * R3 ACTION <\R2/R0 classic\> LET R2 := R2 / R0 ACTION <\R2-R3(34567.)/R1(321.) empty\>, Paired=YES LET R2 := #0 LET R3 := #34567. LET R1 := #321. ACTION <\R2-R3(34567.)/R1(321.)\> LET R2 := #0 LET R3 := #34567. LET R1 := #321. LET R2 := R2 / R1 ACTION <\34567./321. (FPU) empty\>, Paired=YES LDCLD @#DNUM05, AC0 LDCLD @#DNUM06, AC1 ACTION <\34567./321. (FPU)\> LDCLD @#DNUM05, AC0 LDCLD @#DNUM06, AC1 DIVD AC1, AC0 ACTION <\34567.89022+32109.754321 empty\>, Paired=YES LDD @#DNUM01, AC0 LDD @#DNUM02, AC1 ACTION <\34567.89022+32109.754321\> LDD @#DNUM01, AC0 LDD @#DNUM02, AC1 ADDD AC0, AC1 ACTION <\34567.89022*32109.754321 empty\>, Paired=YES LDD @#DNUM01, AC0 LDD @#DNUM02, AC1 ACTION <\34567.89022*32109.754321\> LDD @#DNUM01, AC0 LDD @#DNUM02, AC1 MULD AC0, AC1 ACTION <\34567.89022/32109.754321 empty\>, Paired=YES LDD @#DNUM03, AC0 LDD @#DNUM04, AC1 ACTION <\34567.89022/32109.754321\> LDD @#DNUM03, AC0 LDD @#DNUM04, AC1 DIVD AC1, AC0 ACTION <\CIS MULPI 1\> ; multiply packed MULPI BUF01, BUF02, BUFR01 ; CVTNPI N01DSC, BUF01 | CVTNPI N02DSC, BUF02 ACTION <\CIS MULP 1 empty\>, Paired=YES ; multiply packed ; CVTNPI N01DSC, BUF01 | CVTNPI N02DSC, BUF02 LET R0 := #DMULP1 L3D0 ACTION <\CIS MULP 1\> ; multiply packed ; CVTNPI N01DSC, BUF01 | CVTNPI N02DSC, BUF02 LET R0 := #DMULP1 L3D0 MULP ACTION <\CIS MULPI 2\> ; multiply packed MULPI BUF03, BUF04, BUFR02 ; CVTNPI N03DSC, BUF03 | CVTNPI N04DSC, BUF04 ACTION <\CIS MULP 2 empty\>, Paired=YES ; multiply packed ; CVTNPI N03DSC, BUF03 | CVTNPI N04DSC, BUF04 LET R0 := #DMULP2 L3D0 ACTION <\CIS MULP 2\> ; multiply packed ; CVTNPI N03DSC, BUF03 | CVTNPI N04DSC, BUF04 LET R0 := #DMULP2 L3D0 MULP ACTION <\CIS ADDNI 1\> ; add numeric ADDNI N05DSC, N06DSC, BUFR03 ACTION <\CIS ADDN 1 empty\>, Paired=YES ; add numeric LET R0 := #DADDN1 L3D0 ACTION <\CIS ADDN 1\> ; add numeric LET R0 := #DADDN1 L3D0 ADDN ACTION <\CIS ADDNI 2\> ; add numeric ADDNI N07DSC, N08DSC, BUFR04 ACTION <\CIS ADDN 2 empty\>, Paired=YES ; add numeric LET R0 := #DADDN2 L3D0 ACTION <\CIS ADDN 2\> ; add numeric LET R0 := #DADDN2 L3D0 ADDN ACTION <\MOV 8 word 1 empty\>, Paired=YES LET R0 := #ABUF01 LET R1 := #ABUF02 LET R2 := #/2 ACTION <\MOV 8 word 1\> LET R0 := #ABUF01 LET R1 := #ABUF02 LET R2 := #/2 THRU R2 LET (R1)+ := (R0)+ END ACTION <\MOV 8 word 2 empty\>, Paired=YES LET R0 := #ABUF01 LET R1 := #ABUF02 LET R2 := #/4 ACTION <\MOV 8 word 2\> LET R0 := #ABUF01 LET R1 := #ABUF02 LET R2 := #/4 THRU R2 LET (R1)+ := (R0)+ LET (R1)+ := (R0)+ END ACTION <\CIS MOVCI 8 word 1\> MOVCI MBUF01, MBUF02, SPACE ACTION <\CIS MOVC 8 word 2 empty\>, Paired=YES LET R0 := #DMOVC L2D0 LET R4 := #SPACE ACTION <\CIS MOVC 8 word 2\> LET R0 := #DMOVC L2D0 LET R4 := #SPACE MOVC ACTION <\R1 := M(word)\> LET R1 := @#ADDM ACTION <\R1 := M(even byte)\> LET R1 :B= @#ADDM ACTION <\R1 := M(odd byte)\> LET R1 :B= @#ADDM+1 ACTION <\#4+R0(2000) empty\>, Paired=YES LET R0 := #2000 ACTION <\#4+R0(2000)\> LET R0 := #2000 LET R0 := R0 + #4 ACTION <\CMP (R0)+,(R0)+ empty\>, Paired=YES LET R0 := #2000 ACTION <\CMP (R0)+,(R0)+\> LET R0 := #2000 CMP (R0)+, (R0)+ ACTION <\#2+R0(2000) empty\>, Paired=YES LET R0 := #2000 ACTION <\#2+R0(2000)\> LET R0 := #2000 LET R0 := R0 + #2 ACTION <\INC R0 INC R0 empty\>, Paired=YES LET R0 := #2000 ACTION <\INC R0 INC R0\> LET R0 := #2000 INC R0 INC R0 ACTION <\TST (R0)+ empty\>, Paired=YES LET R0 := #2000 ACTION <\TST (R0)+\> LET R0 := #2000 TST (R0)+ ACTION <\CLR R0 - SOB R0, . empty\>, Paired=YES LET R0 := #0 ACTION <\CLR R0 - SOB R0, . \> LET R0 := #0 THRU R0 END ACTION <\ABS1\> LET R1 := R0 ASH #-15.,R1 ADD R1,R0 XOR R1,R0 ACTION <\ABS2\> TST R0 BPL 10$ NEG R0 10$: ACTION <\ABS2+ empty\>, Paired=YES LET R0 := #1 ACTION <\ABS2+\> LET R0 := #1 TST R0 BPL 10$ NEG R0 10$: ACTION <\ABS2- empty\>, Paired=YES LET R0 := #-1 ACTION <\ABS2-\> LET R0 := #-1 TST R0 BPL 10$ NEG R0 10$: ACTION <\ABS3\> MOV R0, R1 SXT R1 ADD R1, R0 XOR R1, R0 .ENDC ACTEND $PDATA ADDM: .WORD 23456. N01DSC: SZ$NUM <+123456789012345> N02DSC: SZ$NUM <+234567890123456> N03DSC: SZ$NUM <+11> N04DSC: SZ$NUM <+12> N05DSC: SZ$NUM <+123456789012345> N06DSC: SZ$NUM <+234567890123456> N07DSC: SZ$NUM <+11> N08DSC: SZ$NUM <+12> DNUM01: .FLT4 3.456789022E4 DNUM02: .FLT4 3.2109754321E4 DNUM03: .FLT4 1.0 DNUM04: .FLT4 1.0 DNUM05: .WORD 0,34567. DNUM06: .WORD 0,321. $ASCII MSPEED: .ASCII /tEST BYSTRODEJSTWIQ / .ASCII /V3.0.3 / .IF NDF SP$CHE .ASCII /(K\[, ESLI ON ESTX, WYKL@^EN)/ .IFF .ASCII /(K\[, ESLI ON ESTX, WKL@^EN)/ .ENDC .ASCII <200> TSPEED: .ASCII \ -> \<200> CSPEED: .ASCII \ OP./SEK\<200> NOOP: .ASCII / - KOMANDA NE REALIZOWANA/<200> $IDATA UPLIM: .BLKW .IF NDF SP$CHE ACTCNT: .BLKW .ENDC SPSAVE: .BLKW INISPS: .BLKW QPAIRED: .BLKW BLKSIZ: .BLKW BUF: .BLKB 11. EBUF: .BYTE 200 .EVEN TCURR: .BLKW CRET: RETURN CLKS: .BLKW ICNT: ; counter of the total execution of actions in the buffer .BLKW ISPEED: ; calculated speed .BLKW 2 ISPIDP: ; paired calculated speed .BLKW 2 PARTP: ; partial block execution pointer .BLKW PARTC: ; partial block execution counter .BLKW P01VAL: ;.PACKED +123456789012345 ;, P01LEN .EVEN ;D01: ; .WORD 60000+P01LEN ; .WORD P01VAL DMULP1: .WORD BUF01 .WORD BUF02 .WORD BUFR01 DMULP2: .WORD BUF03 .WORD BUF04 .WORD BUFR02 DADDN1: .WORD N05DSC .WORD N06DSC .WORD BUFR03 DADDN2: .WORD N07DSC .WORD N08DSC .WORD BUFR04 BUF01: .WORD 60000+31. .WORD ADR01 BUF02: .WORD 60000+31. .WORD ADR02 BUF03: .WORD 60000+31. .WORD ADR03 BUF04: .WORD 60000+31. .WORD ADR04 BUFR01: .WORD 60000+31. .WORD ADRR01 BUFR02: .WORD 60000+31. .WORD ADRR02 BUFR03: SZ$NUM <+000000000000000> BUFR04: SZ$NUM <+00> ADR01: .BLKB 32./2 ADR02: .BLKB 32./2 ADR03: .BLKB 32./2 ADR04: .BLKB 32./2 ADRR01: .BLKB 32./2 ADRR02: .BLKB 32./2 DMOVC: .WORD MBUF01 .WORD MBUF02 MBUF01: .WORD , ABUF01 MBUF02: .WORD , ABUF02 ABUF01: .BYTE 0,1,2,3,4,5,6,7,10,11,12,13,14,15,16,17 ABUF02: .BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 END SPEED .END START