Trailing-Edge
-
PDP-10 Archives
-
klad_sources
-
klad.sources/dbkdbm.mac
There are no other files named dbkdbm.mac in the archive.
SUBTTL TEST CONTROL
PGMNAM: ASCIZ/
DECSYSTEM10 KI10 RANDOM NUMBER INSTRUCTION TEST (DBKDB)
/
;*SIMULATOR -DDT- INITIALIZATION SEQUENCE
SIMDDT: JRST SENTRY ;GO TO SIMULATOR
;*PROGRAM INITIALIZATION
SFSRT1: SETZM ERRTLS
SETZM TICKS
SETZM TSTIMR#
JRST BEGIN
START: PGMINT ;INITIALIZE SUBROUTINES
JSR MGNCLR
SWITCH
SKIPN USER ;IF USER, USE TIME OF DAY IN JIFFIES
JRST .+3
CALL 1,[SIXBIT/TIMER/]
MOVEM 1,RANDBS ;INIT RANDOM NUMBER GENERATOR
TRNN RANBAS ;SPECIFY RANDOM NUMBER BASE ?
JRST STARTA ;NO
MOVEI [ASCIZ/
SPECIFY BASE RANDOM NUMBER - /]
PNTALF
TTIOCT ;INPUT OCTAL NUMBER
JRST .-3 ;ERROR
MOVEM 0,RANDBS ;INIT RANDOM NUMBER GENERATOR
STARTA: SETOM SIMFLG# ;SETUP CONTROL FLAGS
SETOM NEWFLG#
SETZM PNTSPC
SWITCH
TRNE INHNEW ;INHIBIT NEW INST'S ?
SETZM NEWFLG ;YES
TRNE INHSIM ;INHIBIT SIMULATION ?
SETZM SIMFLG ;YES
MOVEI 1,^D10
TRNE SNGFL ;SINGLE FAST LOOP ?
MOVEI 1,1 ;YES
MOVEM 1,FLCNT#
TRNE ENTDDT ;ENTER DDT SWITCH SET ?
JRST DDTSRT ;YES
SKIPE USER ;USER MODE ?
JRST BEG ;YES
STARTB: TRNE INHCLK ;EXEC, INHIBIT CLOCK INTERRUPTS ?
JRST STARTC ;YES
MOVE 1,[JSR ITRCLK] ;SETUP INTERRUPT ROUTINE
MOVEM 1,$ITRHL ;TO ALLOW FOR CLOCK
MOVEI 1,^D60 ;50 OR 60 HZ. ?
SKIPE CYCL60
MOVEI 1,^D50 ;50 HZ.
MOVEM 1,HERTZ#
MOVE [JSR ITRCH1] ;SETUP FOR ALL CHANNELS
MOVEM 44
MOVEM 46
MOVEM 50
MOVEM 52
MOVEM 54
MOVEM 56
CONO APR,CLKENB!CLKCLR!IAPRE1!IAPRC1 ;TURN ON CLOCK
CONO PI,PARENB!CHNON!PION!PICHNA
JRST BEG
STARTC: CONO PI,PICLR!CHNOFF!PIOFF ;CLEAR INTERRUPTS
CONO APR,IAPRE1 ;TURN ON ERROR CHANNEL 1
CONO PI,CHNON!PION!PICHN1
JRST BEG
SUBTTL DIAGNOSTIC SECTION
BEG: SETZM ERRCNT# ;ERROR COUNT
SETZM PASCNT#
CONTNU: MOVE RANDBS
MOVEM K1#
MOVE 10,FLCNT
MOVEM 10,K2# ;ITR COUNT
SETZM PRNT# ;PRINT FLAG
SETZ 12,0
MOVS 10,K1 ;RESTART TO CONTINUE RANDOM NUMBERS
MULI 10,6065
DIV 10,[XWD 377777,777741]
MOVEM 11,K1
MOVEM 11,0(12)
AOS 12,12
CAIE 12,10
JRST CONTNU+6
HRRI 12,RAND ;STOR NUM IN RAND TO RAND+7 AND AC 0-7
HRLI 12,0
BLT 12,RAND+7
VIT: SETZ 12,0 ;TEST FOR VALID INST
MOVE 11,@12
AND 11,[XWD 770000,0]
ROT 11,6
CAIGE 11,11 ;LESS THAN 110
JRST XCONVT ;YES, MAKE NEW INST
CAIGE 11,13 ;LESS THAN 130
JRST NWINST ;YES, MAKE NEW KI INSTRUCTIONS
CAIGE 11,14 ;LESS THAN 140
JRST BYTTST ;YES GO CHECK FOR POSSIBLE BYTE OR FSC
CAIN 11,26 ;CHECK FOR PUSH,POP
JRST XIMUL ;GO MAKE NEW INST (IMUL)
CAIN 11,25 ;CHECK FOR JMP INST
JRST ECHTST ;GO CHECK FOR POSSIBLE EXCH
LSH 11,-3
CAIN 11,3 ;CHECK FOR SKIPS & JMPS
JRST XFSBR ;GO MAKE NEW INST(FSBR)
CAIN 11,6 ;CHECK FOR TST INST
JRST TSTTST ;GO CHECK FOR LAST INST IN GROUP
CAIN 11,7 ;CHECK FOR IOT
JRST XFMPR ;GO MAKE NEW INST(FMPR)
CAIE 11,2 ;CHECK FOR JFFO
JRST MASKX ;NO
JSR ARANGE ;YES, POSSIBLE
CAIN 13,243
JRST XIMUL ;GO MAKE NEW INST (IMUL)
CAIN 13,247 ;MAP INSTRUCTION
JRST XIMUL ;MAKE IMUL
JRST MASKX ;GO MASKX OUT UNWANTED BITS
ARANGE: 0 ;GET OPERATION CODE OF OPERAND
MOVE 13,@12
AND 13,[XWD 777000,0]
ROT 13,9
JRST @ARANGE
BYTTST: JSR ARANGE
CAILE 13,132 ;CHECK FOR FSC OR BYTE
JRST XASHC ;NO,MAKE NEW INST (ASHC)
JRST MASKX ;YES,GO MASKX OUT UNWANTED BITS
ECHTST: JSR ARANGE ;GO GET OP CODE
CAIE 13,250 ;POSSIBLE EXCHANGE INST
JRST XIMUL ;NO,MAKE NEW INST (IMUL)
JRST MASKX ;YES,GO MASKX OUT UNWANTED BITS
TSTTST: CAILE 12,4 ;POSSIBLE TST INST IF NOT LAST IN GROUP
JRST XFDVR ;NO,GO MAKE NEW INST (FDVR)
JRST MASKX ;YES,GO MASKX OUT UNWANTED BITS
VITEXT: AOS 12
MOVEM 11,INSBLK-1(12) ;STOR VALID INST IN INSBLK TO INS BLK+7
CAIN 12,7
JRST SLO ;GO SET UP SLOW LOOP
JRST VIT+1 ;GO TEST MORE
MMASKX: 0 ;MAKE NEW INST
MOVE 11,@12
TLZ 11,777000
XCT @MMASKX
JRST MASKX+1
XROTC: JSR MMASKX
ADD 11,[XWD 245000,0] ;MAKE IT A ROTC
XIMUL: JSR MMASKX
ADD 11,[XWD 220000,0] ;MAKE IT A IMUL
XFDVR: JSR MMASKX ;MAKE IT A FDVR
ADD 11,[XWD 174000,0]
XFMPR: JSR MMASKX
ADD 11,[XWD 164000,0] ;MAKE IT A FMPR
XFSBR: JSR MMASKX
ADD 11,[XWD 154000,0] ;MAKE IT A FSBR
XASHC: JSR MMASKX
ADD 11,[XWD 244000,0] ;MAKE IT A ASHC
XDFAD: JSR MMASKX
ADD 11,[XWD 110000,0] ;MAKE DFAD
XDFSB: JSR MMASKX
ADD 11,[XWD 111000,0] ;MAKE DFSB
XDFMP: JSR MMASKX
ADD 11,[XWD 112000,0] ;MAKE DFMP
XDFDV: JSR MMASKX
ADD 11,[XWD 113000,0] ;MAKE DFDV
MASKX: MOVE 11,@12 ;MASK OUT INDEX REG & HIGH ORDER E FIELD
AND 11,[XWD 777340,7]
JRST VITEXT
XCONVT: SKIPN NEWFLG ;MAKE NEW INST'S
JRST XROTC ;NO
CAIGE 11,02
JRST XDFAD ;0-17 MAKE DFAD
CAIGE 11,04
JRST XDFSB ;20-37 MAKE DFSB
CAIGE 11,06
JRST XDFMP ;40-57 MAKE DFMP
CAIGE 11,10
JRST XDFDV ;60-77 MAKE DFDV
JRST XROTC ;100-107 MAKE ROTC
NWINST: SKIPN NEWFLG ;MAKE NEW INST'S
JRST XROTC ;NO
JSR ARANGE
CAIG 13,113
JRST MASKX ;DOUBLE FP
CAIGE 13,120
JRST XDFDV ;MAKE NEW INST (DFDV)
CAIG 13,122
JRST MASKX ;DOUBLE MOVES
CAIN 13,123
JRST XDFDV ;MAKE NEW INST (DFDV)
JRST MASKX ;DBL MOVES MEM, FIX, FLT
SLO: MOVE 10,INSBLK ;GO STORE INSTRUCTIONS
MOVEM 10,CORIN1 ;IN CORE LOOP
MOVE 10,INSBLK+1
MOVEM 10,CORIN2
MOVE 10,INSBLK+2
MOVEM 10,CORIN3
MOVE 10,INSBLK+3
MOVEM 10,CORIN4
MOVE 10,INSBLK+4
MOVEM 10,CORIN5
MOVE 10,INSBLK+5
MOVEM 10,CORIN6
SETZM SVINPC# ;CLEAR SVINPC FOR ERROR
SLO1: MOVEM 0,SAC0
TTALTM ;ALTMODE CHECK
SKIPA ;NONE
JRST DDTEX+1 ;YES, GO TO DDT
MOVE 0,SAC0
SETZM COREXF ;CLEAR FLAG FOR SIMULATION
MOVSI 10,RAND
BLT 10,7 ;SETUP AC OPERANDS
MOVE 10,[RAND,,ACS]
BLT 10,ACS+7 ;SETUP SIMULATOR OPERANDS
SETZB 10,ACS+10 ;AC10 IS 0 IN BOTH
JRSTF @.+1 ;CLEAR FLAGS
.+1
SKIPN MGNFLG ;MARGIN ALL ?
JRST .+3
SKIPE MARGIN
DATAO APR,MARGIN ;NO, SET MARGINS FOR SLOW LOOP
CORLOP: SETZM NOSKPF ;CLEAR NO SKIP FLAG
CORIN1: 0 ;1ST INSTRUCTION
SETOM NOSKPF ;NO SKIP
JSR COREX ;GO TO SIMULATION
CORIN2: 0 ;2ND INST
SETOM NOSKPF
JSR COREX
CORIN3: 0 ;3RD INST
SETOM NOSKPF
JSR COREX
CORIN4: 0 ;4TH INST
SETOM NOSKPF
JSR COREX
CORIN5: 0 ;5TH INST
SETOM NOSKPF
JSR COREX
CORIN6: 0 ;6TH INST
SETOM NOSKPF
JSR COREX
JRST .+3
COREXF: 0 ;SIMULATION FLAG
NOSKPF: 0 ;NO SKIP FLAG
SKIPN MGNFLG ;MARGIN ALL ?
JRST .+3
SKIPE MARGIN
DATAO APR,[IMGNOF,,ISPDOF] ;NO, CLEAR MARGINS
SKIPGE K2 ;PREVIOUS FAILURE, BUT NONE THIS TIME ?
JRST CORER1 ;YES
MOVEI 10,ANSBLK
BLT 10,ANSBLK+7 ;SAVE ANSWERS
MOVE 10,FLCNT
MOVEM 10,K2 ;SETUP FAST LOOP COUNT
SETZM COREXF ;CLEAR SIMULATION FLAG
FAST: MOVEM 0,SAC0
TTALTM ;ALTMODE CHECK
SKIPA ;NONE
JRST DDTEX+1 ;YES, GO TO DDT
MOVE SAC0
MOVE 10,[INSBLK,,11]
BLT 10,17 ;LOAD FAST LOOP INSTRUCTIONS
MOVSI 10,RAND
BLT 10,7 ;LOAD OPERANDS
SETZM 10
;*EXECUTE FAST LOOP
EXFAST: MOVE 17,[JRST CHEC] ;SETUP EXIT INST
JRSTF @.+1 ;CLEAR FLAGS
.+1
SKIPN MGNFLG ;MARGIN ALL ?
JRST .+3
SKIPE MARGIN
DATAO APR,MARGIN ;NO, SET MARGINS FOR FAST LOOP
JRST 11 ;GO TO FAST LOOP
CHEC: MOVEM 0,ANSSV0#
MOVE P,PLIST
MOVEI $PSHER
PUT 0
MOVE 0,ANSSV0
SKIPN MGNFLG ;MARGIN ALL ?
JRST .+3
SKIPE MARGIN
DATAO APR,[IMGNOF,,ISPDOF] ;NO, CLEAR MARGINS
CAME 0,ANSBLK ;CHECK FAST LOOP AND SLOW LOOP ANS
JSR ERRX
CAME 1,ANSBLK+1
JSR ERRX
CAME 2,ANSBLK+2
JSR ERRX
CAME 3,ANSBLK+3
JSR ERRX
CAME 4,ANSBLK+4
JSR ERRX
CAME 5,ANSBLK+5
JSR ERRX
CAME 6,ANSBLK+6
JSR ERRX
CAME 7,ANSBLK+7
JSR ERRX
CHEC1: SKIPGE K2 ;FAILURE ?
JRST FSTER1 ;YES
SOSE K2 ;REPEAT FAST LOOP ?
JRST FAST ;YES
CHEC2: MOVE K1
MOVEM RANDBS ;UPDATE RANDOM BASE
SWITCH
TLNE RSTART!TOTALS
JSR PNTTOT ;GO PRINT TOTALS
AOS 16,PASCNT
TLNE RELIAB
JRST .+4
TRNE 16,3
JRST CONTNU
JRST BEGEND
TRNE 16,37
JRST CONTNU
JRST BEGEND
FSTER1: SWITCH
TLNN LOOPER ;STAY IN ERROR LOOP
JRST CHEC2 ;NO
JRST FAST ;YES, REPEAT FAILING LOOP
COREX: 0
MOVEM 10,SAC10#
MOVE 10,COREX ;GET CALL PC
SUBI 10,3 ;-3, POINTS TO INST
MOVEM 10,INPC ;SAVE AS SIM PC
ADDI 10,3
SKIPN NOSKPF ;DID INST SKIP ?
ADDI 10,3 ;YES, SET RETURN TO SKIP NEXT INST
MOVEM 10,COREX
SETZM NOSKPF
MOVE 10,SAC10
SKIPN SIMFLG ;SIMULATE INSTRUCTION ?
JRST @COREX ;NO
COREX1: SKIPN MGNFLG ;MARGIN ALL ?
JRST .+3
SKIPE MARGIN
DATAO APR,[IMGNOF,,ISPDOF] ;NO, CLEAR MARGINS
SETOM COREXF
MOVE 10,[ACS,,SIMBLK]
BLT 10,SIMBLK+10 ;SAVE ORIG SIM AC'S FOR ERROR
SETOM MASK
JSR SIMNST ;SIMULATE INSTRUCTION
CAME 0,ACS+0 ;COMPARE AC RESULTS & SIM RESULTS
JSR ERRX ;ERROR
CAME 1,ACS+1
JSR ERRX
CAME 2,ACS+2
JSR ERRX
CAME 3,ACS+3
JSR ERRX
CAME 4,ACS+4
JSR ERRX
CAME 5,ACS+5
JSR ERRX
CAME 6,ACS+6
JSR ERRX
CAME 7,ACS+7
JSR ERRX
MOVE 10,SAC10
SKIPN MGNFLG ;MARGIN ALL ?
JRST .+3
SKIPE MARGIN
DATAO APR,MARGIN ;NO, RESET MARGINS
JRST @COREX ;EXIT
CORER1: SWITCH
TLNN LOOPER ;LOOP ON ERROR ?
JRST CHEC2 ;NO
JRST SLO1 ;YES, STAY IN SLOW LOOP
;*ERROR ROUTINES
ERRX: 0
SKIPE USER
JRST .+3
SKIPE MARGIN
DATAO APR,[IMGNOF,,ISPDOF] ;CLEAR MARGINS
MOVEM 0,SAV0#
SWITCH
MOVEM 0,10
MOVE 0,SAV0
SKIPE PRNT ;FIRST OUTPUT
TLNE 10,PALERS ;PRINT ALL ERRORS ?
JSR OUT ;GO OUTPUT
ERRX1: AOS ERRCNT
AOS ERRTLS
SWITCH
TLNE ERSTOP ;HALT ON ERROR ?
JSR GOING ;YES
TLNE 0,LOOPER ;LOOP ON ERROR ?
SETOM K2 ;YES, MAKES LOOP EFF FOREVER
SKIPN USER
DATAO PI,ERRCNT ;DISPLAY
TLNN DING ;RING TTY BELL ?
JRST .+3 ;NO
MOVEI BELL ;YES
PNTAF
SKIPE USER ;USER MODE ?
JRST ERRX2 ;YES
SKIPE MGNFLG ;EXEC - MARGIN ALL ?
JRST .+3
SKIPE MARGIN
DATAO APR,MARGIN ;YES
ERRX2: SKIPE COREXF ;IN SIMULATION ?
JRST CORER1 ;YES
JRST FSTER1 ;NO
;*ERROR STOP
GOING: 0
CONI APR,$SVAPR
CONI PI,$SVPI
CONO PI,PIOFF
HALT @GOING
;*PRINT INSTRUCTION FAILURE
OUT: 0
SETZM EXIT1# ;CLEAR EXIT FLAG
MOVEI 10,FSTANS ;SAVE FAST LOOP ANSWERS
BLT 10,FSTANS+7
MOVEI 0,7 ;INIT INST CNT,
MOVEM 0,INTCNT#
MOVEM 0,ACCNT# ;AND AC CNT
PNTNM
MOVEI [ASCIZ/
**********/]
PNTAL
SKIPE USER
JRST OUTX
MOVE 0,CONSW
TRNE INHCLK
JRST OUTX
MOVE 0,TICKS
CAIL ^D<60*60*10> ;BEEN RUNNING TEN MINUTES ?
JSR RUNTIM ;YES, PRINT RUN TIME
OUTX: PNTMGN ;PRINT MARGINS
MOVEI 0,[ASCIZ/
RANDOM INSTRUCTION FAILURE
INST GROUP OPERANDS /]
PNTAL
MOVEI [ASCIZ/SLOW ANS SIM ANS/]
SKIPN COREXF
MOVEI [ASCIZ/FAST ANS SLOW ANS/]
PNTAL ;PRINT HEADER
SETZM PNTSPC
OUT1: MOVE 10,INTCNT
SOJE 10,LOOP ;MONITOR CNT
MOVEM 10,INTCNT
SETCA 10,0
ANDI 10,7
MOVEI CRLF
PNTA
SETZM PNTSPC
MOVEI 0,1 ;PRINT FIRST DIGIT
PNT1 ;OF INST GROUP AND,
MOVE 0,10
PNT1 ;2ND DIGIT
JSR SLSHSP ;PRINT / SPACE
MOVE 0,INSBLK-1(10)
PNTHW ;PRINT INST
OUT2: JSR ACPNT1 ;PRINT AC
MOVE 0,RAND(10)
PNTHW ;PRINT OPERANDS
JSR ACPNT1 ;PRINT AC
MOVE 0,FSTANS(10) ;PRINT FAST ANS/SIM - SLOW ANS
PNTHW ;PRINT AC
JSR ACPNT1 ;PRINT AC NUMBER
MOVE 0,ACS(10)
SKIPN COREXF
MOVE 0,ANSBLK(10)
PNTHW ;PRINT SLOW ANS/SIM - SIM ANS
SOSLE ACCNT
JRST OUT1
OUT3: SKIPE EXIT1
JRST OUT4
MOVEI 0,[ASCIZ /
/ ] ;PRINT MARGIN
PNTAL
SETOM EXIT1
JRST OUT2
OUT4: SETOM PRNT
MOVEI CRLF
PNTA
MOVEI [ASCIZ/
BASE RANDOM NUMBER = /]
PNTAL
MOVE 0,RANDBS
PNTHW ;PRINT RANDOM BASE
MOVEI CRLF
PNTA
OUT5: SKIPN SIMFLG ;SIMULATION INHIBITED ?
JRST @OUT ;YES
SKIPN COREXF ;SLOW LOOP FAILURE ?
JRST SIMFST ;NO
MOVEI [ASCIZ/
INSTRUCTION SIMULATION - CORE LOOP INST # /]
PNTAL
HRRZ INPC ;COMPUTE INST NUMBER
SUBI CORIN1
IDIVI 3
ADDI 1
PNT1 ;PRINT
MOVEI [ASCIZ/
----------
/]
PNTAL
MOVS 10,[ACS,,SIMBLK]
BLT 10,ACS+10 ;RESTORE SIM OPERANDS
JRST SIMMT ;SIM & PRINT INSTRUCTION
SLSHSP: 0 ;PRINT / SPACE
MOVEI 0,[ASCIZ X/ X]
PNTAL
JRST @SLSHSP
ACPNT1: 0 ;PRINT SPACE
MOVEI 0,SPACE
PNTA
MOVE 10,ACCNT ;GET AC NUMBER
SETCA 10,0
ANDI 10,7
MOVE 0,10
SETZM PNTSPC
PNT1 ;PRINT IT
JSR SLSHSP
JRST @ACPNT1
LOOP: MOVEI CRLF
PNTA
MOVEI 0,17 ;PRINT 17
SETZM PNTSPC
PNT2
JSR SLSHSP
MOVEI 0,[ASCIZ/ EXIT /] ;PRINT EXIT
PNTAL
JRST OUT2
;*SETUP MARGINS FOR ALL OR JUST FAST & SLOW LOOP
MGNCLR: 0
SETZM MGNFLG# ;CLEAR CONTROL FLAG
SKIPE USER ;USER MODE ?
JRST @MGNCLR ;YES
MOVE 0,CONSW ;GET SWITCHES
TRNN MGNTST ;MARGIN SLOW & FAST ONLY ?
JRST @MGNCLR ;NO, MARGIN ALL
SETOM MGNFLG ;YES, SET CONTROL FLAG
SKIPE MARGIN
DATAO APR,[IMGNOF,,ISPDOF] ;CLEAR MARGINS
JRST @MGNCLR
RUNTIM: 0
CONO APR,CLKDIS!IAPRE1 ;DISABLE CLOCK
JSR TSTIMA ;PRINT RUN TIME
CONO APR,CLKENB!CLKCLR!IAPRE1!IAPRC1 ;ENABLE CLOCK
JRST @RUNTIM
;*CLOCK SERVICE ROUTINE
ITRCLK: 0
CONSO APR,CLK
JRSTF @ITRCLK ;NOT CLOCK
AOS TICKS ;INC CLOCK COUNTER
MOVEM 0,CLKAC0# ;SAVE AC'S
MOVEM 1,CLKAC1#
JSR TSTIME ;CHECK AND PRINT TIME
MOVE 1,K1 ;GET RANDOM NUMBER
ANDI 1,7
SKIPN 1 ;IF 0, MAKE 1
AOS 1 ;SETUP CLOCK ON RANDOM CHANNEL
CONO APR,CLKENB!CLKCLR!IAPRE1(1)
MOVE 0,CLKAC0
MOVE 1,CLKAC1
JEN @ITRCH1 ;RETURN
PNTTOT: 0
SKIPE USER ;NO TIME IF USER
JRST .+4
TRNE INHCLK ;NO TIME IF CLOCK INHIBITED
JRST .+2
JSR RUNTIM ;PRINT RUN TIME
MOVEI [ASCIZ/
TOTAL ERRORS = /]
PNTAL
MOVE ERRTLS
PNTDEC ;PRINT TOTAL ERRORS
MOVEI [ASCIZ/
BASE RANDOM NUMBER = /]
PNTAL
MOVE 0,RANDBS
PNTHW ;PRINT RANDOM BASE
MOVEI CRLF2
PNTA
SWITCH
TLNN RSTART ;RESTART PROGRAM ?
JRST @PNTTOT ;NO, CONTINUE
JRST SFSTRT ;YES, RESTART AS STAND-ALONE
;*TEST RUN TIME SUBROUTINE
;*PRINTS TIME AT HALF HOUR INTERVALS OR WHEN REQUESTED
TSTIME: 0
MOVE TICKS ;HAS HALF HOUR PASSED ?
SUB TSTIMR
MOVE 1,HERTZ
CAIE 1,^D60 ;60 HZ. ?
JRST TSTIMB ;NO, 50
CAIGE ^D<60*60*30>
JRST @TSTIME ;NOT HALF HOUR YET
TSTIMC: SETOM TIMFRC
JSR TSTIMA
JRST @TSTIME
TSTIMA: 0
SKIPE PNTFLG ;INTERRUPTED OUT OF PRINT ROUTINE
JRST @TSTIMA ;YES, DO NEXT CLOCK
MOVEI [ASCIZ/
RUN TIME = /]
PNTALF
MOVE TICKS ;GET TIME
SKIPE TIMFRC# ;REQUESTED TIME, IF SO DON'T
MOVEM TSTIMR ;UPDATE HALF HOUR COMPARE
IDIV HERTZ ;CONVERT TO SECONDS
IDIVI ^D<60*60> ;CONVERT TO HOURS
MOVEM 1,TIMAC1# ;SAVE MIN:SEC
PNTDCF ;PRINT HOURS
MOVEI [ASCIZ/:/]
PNTAF
MOVE 0,TIMAC1 ;RETURN MIN:SEC
IDIVI ^D60 ;CONVERT TO MINUTES
MOVEM 1,TIMAC1 ;SAVE :SEC
PNTDCF ;PRINT MINUTES
MOVEI [ASCIZ/:/]
PNTAF
MOVE 0,TIMAC1 ;RETURN :SEC
PNTDCF ;PRINT SECONDS
MOVEI CRLF
PNTAF
SETZM TIMFRC
JRST @TSTIMA
TSTIMB: CAIGE ^D<60*60*25> ;50 HZ HALF HOUR
JRST @TSTIME ;NO
JRST TSTIMC
;*SIMULATE INSTRUCTION
SIMNST: 0
MOVEM 0,SAVAC
MOVE [1,,SAVAC+1]
BLT SAVAC+17 ;SAVE AC'S
SETZM INSTR
SETZM CNTLPC
SETOM SNGLIN ;SET SINGLE INSTRUCTION CONTROL
SETZM SNGL2 ;SET FOR FIRST INST
MOVE P,PLIST
MOVEI $PSHER
PUSH P,0
GO SENTRY ;GO TO SIMULATOR
MOVS [1,,SAVAC+1]
BLT 17 ;RESTORE AC'S
MOVE 0,SAVAC
JRST @SIMNST
;*SIMULATE INSTRUCTION, PRINT
SIMMT: SETZM MASK ;ALLOW PRINTOUT
JSR SIMNST ;GO SIMULATE
MOVEI CRLF
PNTA
JRST @OUT
RAND: BLOCK 10
INSBLK: BLOCK 10
ANSBLK: BLOCK 10
FSTANS: BLOCK 10
SAVAC: BLOCK 20
SIMBLK: BLOCK ^D10
VMEM: ENDSLD
;*SIMULATE AND PRINT ALL INSTRUCTIONS
;*FAST LOOP RELIABILITY/SPEED FAILURE
SIMFST: MOVEI [ASCIZ/
INSTRUCTION SIMULATION - FAST LOOP FAILURE
----------
/]
PNTAL
SETZM MASK
MOVE [1,,SAVAC+1]
BLT SAVAC+17 ;SAVE AC'S
MOVE [INSBLK,,ACS+11]
BLT ACS+17 ;SETUP INSTRUCTIONS
MOVE [RAND,,ACS]
BLT ACS+7
SETZM ACS+10 ;SETUP OPEARANDS
MOVEI 11
SIMFS1: MOVEM INPC ;SET INPC TO FIRST INSTRUCTION
SETZM INSTR
SETZM CNTLPC
SETOM SNGLIN ;SET SINGLE INSTRUCTION CONTROL
SETZM SNGL2 ;SET FOR FIRST INST
MOVE P,PLIST
MOVEI $PSHER
PUSH P,0
GO SENTRY ;GO TO SIMULATOR
HRRZ PC
CAIE 17 ;COMPLETED SIM ?
JRST SIMFS1 ;NO
MOVS [1,,SAVAC+1]
BLT 17 ;RESTORE AC'S
MOVEI CRLF
PNTA
JRST @OUT