diff --git a/apps/pdp10/diags/ka10/dakba/DAKBA.MAC.txt b/apps/pdp10/diags/ka10/dakba/DAKBA.MAC.txt new file mode 100644 index 000000000..1ca6d1b84 --- /dev/null +++ b/apps/pdp10/diags/ka10/dakba/DAKBA.MAC.txt @@ -0,0 +1,4176 @@ +;MAINDEC-10-DAKBA + +DECVER=002 +MCNVER=000 + + XLIST +DEFINE NAME (MCNVER,DECVER),< + +TITLE DAKBA PDP-10 KA10 BASIC INSTRUCTION RELIABILITY TEST (1), VERSION MCNVER,DECVER > + LIST + LALL + +NAME \MCNVER,\DECVER + + XALL + +;TEST DESIGNED FOR RANDOM NUMBER TESTING OF THE PDP-10 BASIC INSTRUCTIONS +;(COMPARES,SKIPS,EXCHANGES,BOOLE,ROTATES,TESTS,ETC.) + +;COPYRIGHT 1977 +;DIGITAL EQUIPMENT CORPORATION +;MARLBORO, MASS. 01752 + +;JOHN R. KIRCHOFF + + LOC 137 +MCNVER,,DECVER + + NOSYM +SUBTTL DIAGNOSTIC PARAMETERS + +;LUUO DEFINITIONS + +OPDEF ERR [1B8] +OPDEF ERRM [2B8] +OPDEF ERRI [3B8] +OPDEF ERROR [4B8] +OPDEF ER [5B8] +OPDEF EERR [11B8] +OPDEF EERRM [12B8] +OPDEF EERRI [13B8] +LUUO1=ERRMES +LUUO2=ERRMES +LUUO3=ERRMES +LUUO4=ERRMES +LUUO5=ERRMES +LUUO11=ERRMES +LUUO12=ERRMES +LUUO13=ERRMES + +;SUBROUTINE ASSEMBLY DEFINITIONS + +EXCASB==1 +USRASB==1 +DEBUG==40 +KLOLD==1 +KA10=10 +PGMEND==1 +ERRELB==1 +SADR1==BEGIN +SADR2==RESRT1 +SADR3==RENTR1 +SADR4==BEGIN +SADR5==BEGIN +SADR6==BEGIN +SADR7==HALT BEGIN +SADR8==HALT BEGIN +SADR9==HALT BEGIN +SADR10==HALT BEGIN +SADR11==HALT BEGIN +PAREA1==123457,,654321 +PAREA2==0 +PAREA3==SIXBIT/DAKBA/ +PAREA4==SIXBIT/TMP/ +PAREA5==0 +PAREA6==0 +ITERAT==1 +ENDPGM==1 +;MACROS + +DEFINE SETUP (A,B)< + AC1=&17 + AC2=&17 + AC3=&17 + AC4=&17 + AC5=&17 + RAN1=&17 + MOVEI AC-1,. + MOVEM AC-1,TESTPC ;SETUP SUBTEST PC + MOVEI AC-1,&17 ;INFORM ERROR ROUTINE + MOVEM AC-1,ERRLOP# ;WHICH AC IS USED FOR ITERATION + MOVEI AC-1,A ;ROUTINE WEIGHTING + ASH AC-1,@CMPLXT+B ;ROUTINE COMPLEXITY + ASH AC-1,@RTIME ;RUN TIME CONTROLLER > + +DEFINE RANDOM (A)< + MOVE AC,RAN# ;GENERATE A PSEUDO RANDOM NUMBER + ADD AC,[142536475076] + ROT AC,-1 ;IN BOTH AC AND + EQVB AC,RAN ;REGISTER RAN > + +DEFINE LOOP (A,B)< + SOJG AC-1,A ;ITERATION COUNTER + MOVE AC,RAN ;RESTORE RANDOM NUMBER + JUMPL AC-1,B ;LOOP ON ERROR SWITCH > + +SUBTTL *PARAM* CONSOLE DATA SWITCH ASSIGNMENTS, SEPT 18,1979 + +DEFINE S,<; *********************************************************************> + +; ********************************************************************** +;*DATA SWITCHES (READ FROM CONSOLE IN EXEC MODE OR TYPED IN IN USER MODE) +;*LEFT HALF SWITCHES ARE PRE-ASSIGNED FOR SUBROUTINE PACKAGE USE +;*AND CONTROL LOOPING, PRINTING (TTY OR OTHER DEVICE) AND MISC. FUNCTIONS +; ********************************************************************** + +ABORT== 400000 ;ABORT PROGRAM ON PASS COMPLETION +RSTART==200000 ;RESTART TEST, PRINT TOTALS +TOTALS==100000 ;PRINT TOTALS, CONTINUE + +NOPNT== 040000 ;INHIBIT ALL PRINT/TYPE OUT (EXCEPT FORCED) +PNTLPT==020000 ;PRINT ALL DATA ON LPT (LOGICAL DEVICE, USER MODE) +DING== 010000 ;RING BELL ON ERROR + +LOOPER==004000 ;ENTER EXERCISE/CHECK LOOP ON ERROR +ERSTOP==002000 ;HALT ON TEST ERROR +PALERS==001000 ;PRINT ALL ERRORS + +RELIAB==000400 ;RELIABILITY MODE +TXTINH==000200 ;INHIBIT ERROR TEXT +INHPAG==000100 ;INHIBIT PAGING + +MODDVC==000040 ;MODIFY DEVICE CODE +INHCSH==000020 ;INHIBIT CACHE +OPRSEL==000010 ;OPERATOR SELECTION + +CHAIN== 000004 ;CHAIN CONTROL SWITCH + +KAHZ50==000002 ;KA10 50 HERTZ POWER + + ;SWITCH 17 RESERVED !!! +SUBTTL *PARAM* PROGRAM/SUBROUTINE PARAMETERS, SEPT 18,1979 + +; ********************************************************************** +;*SPECIAL SUBPROGRAM LINKAGES +; ********************************************************************** + +FSELNK= 27772 ;FILE SELECT LINK +FRDLNK= 27773 ;FILE READ LINK +LDLNK= 27774 ;LOAD LINKAGE ADDRESS +DDTLNK= 27775 ;DDT LINKAGE ADDRESS +MODLNK= 27776 ;OPERATIONAL MODE CHECK LINKAGE ADDRESS +SUBLNK= 27777 ;SUBROUTINE LINKAGE ADDRESS + +; ********************************************************************** +;*SPECIAL SUBROUTINE FATAL HALTS +;*USED TO REPORT ERRORS THAT CAUSE THE SUBROUTINES TO BE UNUSABLE +; ********************************************************************** + +;ADDRESS TAG REASON +;--------------------- + +; 1010 NOEXEC ;PROGRAM NOT CODED FOR EXEC MODE OPERATION +; 1011 PLERR ;FATAL PUSH LIST POINTER ERROR +; 1012 PLERR1 ;INITIAL PUSH LIST POINTER ERROR +; 1013 MUOERR ;MUUO WITH LUUO HANDLER WIPED OUT +; 1014 DTEBER ;DTE20 INTERRUPT WITHOUT DOORBELL +; 1015 DTECER ;DTE20 CLOCK INTERRUPT WITHOUT FLAG SET +; 1016 CPIERR ;CPU INITIALIZATION ERROR +; 1017 EOPERR ;END OF PROGRAM ERROR +; 1020 LUOERR ;INTERRUPT WITH LUUO HANDLER WIPED OUT + +; ********************************************************************** +; ********************************************************************** +;OPERATOR DEFINITIONS (NON-UUO'S) +; ********************************************************************** + +OPDEF GO [PUSHJ P,] ;SUBROUTINE CALL +OPDEF RTN [POPJ P,] ;SUBROUTINE RETURN +OPDEF PUT [PUSH P,] ;PUT DATA ON PUSH LIST +OPDEF GET [POP P,] ;GET DATA FROM PUSH LIST +OPDEF PJRST [JRST ] ;JRST TO ROUTINE THAT RTN'S +OPDEF HALT [JRST 4,] ;DEFINITION FOR DDT +OPDEF JRSTF [JRST 2,] ;DEFINITION FOR DDT +OPDEF JEN [JRST 12,] ;DEFINITION FOR DDT + +; ********************************************************************** +;SUBROUTINE INITIALIZATION CALL +; ********************************************************************** + +OPDEF PGMINT [JSP 0,SBINIT] ;SUBROUTINE INITIALIZATION + +; ********************************************************************** +;HALTING UUO'S (A MORE GRACEFUL HALT THAN SIMPLY USING THE HALT INSTRUCTION). +; ********************************************************************** + +OPDEF FATAL [37B8!15B12!4] ;FATAL PROGRAMMING HALT +OPDEF ERRHLT [37B8!14B12!4] ;PROGRAM ERROR HALT + +; ********************************************************************** +;TERMINAL INPUT UUO'S +;ALWAYS COME FROM THE CONSOLE TERMINAL IN EXEC MODE OR THE +;CONTROLLING TERMINAL (REAL TERMINAL OR PTY) IN USER MODE. +; ********************************************************************** + +OPDEF TTICHR [37B8!0B12!3] ;TTY, INPUT ANY CHARACTER +OPDEF TTIYES [37B8!1B12!3] ;TTY, NORMAL RETURN Y +OPDEF TTINO [37B8!2B12!3] ;TTY, NORMAL RETURN N +OPDEF TTIOCT [37B8!3B12!3] ;TTY, INPUT OCTAL WORD +OPDEF TTIDEC [37B8!4B12!3] ;TTY, INPUT DECIMAL WORD +OPDEF TTICNV [37B8!5B12!3] ;TTY, INPUT CONVERTABLE WORD +OPDEF TTLOOK [37B8!6B12!3] ;TTY, KEYBOARD CHECK +OPDEF TTALTM [37B8!7B12!3] ;TTY, ALT-MODE CHECK +OPDEF TTSIXB [37B8!10B12!3] ;TTY, INPUT SIXBIT WORD +OPDEF TTYINP [37B8!11B12!3] ;TTY, IMAGE MODE INPUT +OPDEF TTICLR [37B8!12B12!3] ;TTY, CLEAR INPUT +;TERMINAL OUTPUT UUO'S. + +OPDEF PNTA [37B8!0B12!0] ;PRINT ASCII WORD +OPDEF PNTAF [37B8!0B12!1] ;PRINT ASCII WORD FORCED +OPDEF PNTAL [37B8!17B12!0] ;PRINT ASCIZ LINE +OPDEF PNTALF [37B8!17B12!1] ;PRINT ASCIZ LINE FORCED +OPDEF PSIXL [37B8!14B12!3] ;PRINT SIXBIT'Z LINE +OPDEF PSIXLF [37B8!15B12!3] ;PRINT SIXBIT'Z LINE FORCED +OPDEF PNTMSG [37B8!0B12!0] ;PRINT MESSAGE IMMEDIATE +OPDEF PNTMSF [37B8!1B12!0] ;PRINT MESSAGE IMMEDIATE FORCED +OPDEF PSIXM [37B8!2B12!0] ;PRINT SIXBIT'Z MSG IMMEDIATE +OPDEF PSIXMF [37B8!4B12!0] ;PRINT SIXBIT'Z MSG IMM FORCED +OPDEF PNTCI [37B8!0B12!0] ;PRINT CHARACTER IMMEDIATE +OPDEF PNTCIF [37B8!1B12!0] ;PRINT CHARACTER IMMEDIATE FORCED +OPDEF PNTCHR [37B8!12B12!0] ;PRINT CHARACTER +OPDEF PNTCHF [37B8!12B12!1] ;PRINT CHARACTER FORCED +OPDEF PNT1 [37B8!1B12!0] ;PRINT ONE OCTAL DIGIT +OPDEF PNT1F [37B8!1B12!1] ;PRINT 1 OCTAL DIGIT FORCED +OPDEF PNT2 [37B8!2B12!0] ;PRINT TWO OCTAL DIGITS +OPDEF PNT2F [37B8!2B12!1] ;PRINT 2 OCTAL DIGITS FORCED +OPDEF PNT3 [37B8!3B12!0] ;PRINT THREE OCTAL DIGITS +OPDEF PNT3F [37B8!3B12!1] ;PRINT THREE OCTAL DIGITS FORCED +OPDEF PNT4 [37B8!4B12!0] ;PRINT FOUR OCTAL DIGITS +OPDEF PNT4F [37B8!4B12!1] ;PRINT FOUR OCTAL DIGITS FORCED +OPDEF PNT5 [37B8!5B12!0] ;PRINT FIVE OCTAL DIGITS +OPDEF PNT5F [37B8!5B12!1] ;PRINT FIVE OCTAL DIGITS FORCED +OPDEF PNT6 [37B8!6B12!0] ;PRINT SIX OCTAL DIGITS +OPDEF PNT6F [37B8!6B12!1] ;PRINT SIX OCTAL DIGITS FORCED +OPDEF PNT7 [37B8!7B12!0] ;PRINT 7 OCTAL DIGITS +OPDEF PNT7F [37B8!7B12!1] ;PRINT 7 OCTAL DIGITS FORCED +OPDEF PNT11 [37B8!11B12!0] ;PRINT 11 OCTAL DIGITS +OPDEF PNT11F [37B8!11B12!1] ;PRINT 11 OCTAL DIGITS FORCED. +OPDEF PNTADR [37B8!10B12!0] ;PRINT PHYSICAL ADDRESS +OPDEF PNTADF [37B8!10B12!1] ;PRINT PHYSICAL ADDRESS FORCED +OPDEF PNTOCT [37B8!14B12!0] ;PRINT FULL WORD OCTAL +OPDEF PNTOTF [37B8!14B12!1] ;PRINT FULL WORD OCTAL FORCED +OPDEF PNTHW [37B8!13B12!0] ;PRINT OCTAL HALF WORDS, 6 SP 6 +OPDEF PNTHWF [37B8!13B12!1] ;PRINT OCTAL HALF WORDS, 6 SP 6 FORCED +OPDEF PNTOCS [37B8!16B12!3] ;PRINT OCTAL, SUPPRESS LEADING 0'S +OPDEF PNTOCF [37B8!17B12!3] ;PRINT OCTAL, SUPPRESS LEADING 0'S FORCED +OPDEF PNTDEC [37B8!15B12!0] ;PRINT DECIMAL, SUPRESS LEADING 0'S +OPDEF PNTDCF [37B8!15B12!1] ;PRINT DECIMAL, SUPRESS LEADING 0'S FORCED +OPDEF PNTDS [37B8!16B12!0] ;PRINT DECIMAL, SPACES FOR LD 0'S +OPDEF PNTDSF [37B8!16B12!1] ;PRINT DECIMAL, SPACES FOR LD 0'S FORCED +OPDEF PNTNM [37B8!4B12!2] ;PRINT PROGRAM NAME +OPDEF PNTSIX [37B8!0B12!2] ;PRINT SIXBIT WORD +OPDEF PNTSXF [37B8!1B12!2] ;PRINT SIXBIT WORD FORCED +OPDEF DROPDV [37B8!5B12!2] ;CLOSE LOGICAL FILE, USER MODE +OPDEF PNTCW [37B8!2B12!2] ;PRINT DF10 CONTROL WORD +OPDEF PNTCWF [37B8!3B12!2] ;PRINT DF10 CONTROL WORD FORCED +OPDEF PCRL [37B8!0B12!CRLF] ;PRINT CARRIAGE RETURN/LINE FEED +OPDEF PCRLF [37B8!1B12!CRLF] ;PRINT CARRIAGE RETURN/LINE FEED FORCED +OPDEF PSP [37B8!0B12!40] ;PRINT SPACE +OPDEF PSPF [37B8!1B12!40] ;PRINT SPACE FORCED +OPDEF PCRL2 [37B8!0B12!CRLF2] ;PRINT CARRIAGE RETURN/LINE FEED (TWICE) +OPDEF PCRL2F [37B8!1B12!CRLF2] ;PRINT CARRIAGE RETURN/LINE FEED (TWICE) FORCED +OPDEF PBELL [37B8!1B12!7] ;PRINT TTY BELL + +OPDEF PFORCE [37B8!1B12!26] ;PRINT FORCE, CONTROL O OVERRIDE + +DEFINE PMSG (ARG),< + PSIXM [SIXBIT\ARG'_\]> + +DEFINE PMSGF (ARG),< + PSIXMF [SIXBIT\ARG'_\]> + +;SIXBTZ -- MACRO TO GENERATE SIXBIT DATA FOR PRINTING +; CONSERVES CORE OVER ASCIZ + +DEFINE SIXBTZ (ARG),< [SIXBIT\ARG'_\]> + +;CONSOLE SWITCH INPUT UUO. +;READS CONSOLE SWITCHES IF IN EXEC MODE OR ASKS FOR THEM IF +; USER MODE. + +OPDEF SWITCH [37B8!10B12!2] ;INPUT CONSOLE SWITCHES + +;CLOCK INITIALIZATION UUO - TO SET DESIRED CLOCK OPERATION +;EITHER IGNORE CLOCK, ONLY LET IT TICK OR CAUSE INTERRUPT TO OCCUR. + +OPDEF CLOKOP [37B8!13B12!4] ;CLOCK OPERATION UUO - PDP-11 CLOCK +OPDEF MTROP [37B8!4B12!4] ;CLOCK OPERATION UUO - DK20 METER + +;KL10 ONLY CACHE OPERATION UUO'S + +OPDEF CINVAL [37B8!1B12!4] ;CACHE INVALIDATE +OPDEF CFLUSH [37B8!2B12!4] ;CACHE FLUSH +OPDEF CWRTBI [37B8!3B12!4] ;CACHE WRITE-BACK & INVALIDATE +;END OF PASS/PROGRAM UUOS + +;PERFORMS THE END OF PASS FUNCTIONS. INCREMENT PASS COUNT, +;DECREMENT ITERATION COUNT, CHECK IF FINISHED WITH THIS PROGRAM ETC. + +OPDEF ENDUUO [37B8!12B12!4] ;UUO TO DISPLAY LIGHTS +OPDEF EOPUUO [37B8!16B12!4] ;END OF PROGRAM UUO + +;MEMORY MANAGEMENT UUO'S +;UUO'S TO PERFORM VARIOUS MEMORY FUNCTIONS. MAPPING, ZEROING, PAGING, +;ADDRESS CONVERSION, ETC... + +OPDEF MAPMEM [37B8!0B12!4] ;MAP MEMORY +OPDEF MEMZRO [37B8!12B12!2] ;ZERO MEMORY +OPDEF MEMSEG [37B8!11B12!2] ;SETUP MEMORY SEGMENT +OPDEF MAPADR [37B8!13B12!2] ;VIRTUAL TO PHYSICAL ADR CONVERT +OPDEF MAPCNK [37B8!15B12!2] ;MAP MEMORY CHUNK +OPDEF MAPSET [37B8!14B12!2] ;SET KI10 EXEC PAGE MAP +OPDEF MAPPNT [37B8!17B12!2] ;PRINT MEMORY MAP + +;DEVICE CODE MODIFICATION UUO +;ALLOWS THE MODIFICATION OF IOT'S TO ONE DEVICE TO BE CHANGED TO +;IOT'S TO A DIFFERENT DEVICE CODE. + +OPDEF MODPCU [37B8!7B12!2] ;MODIFY PERHIPERAL CODE, USER +OPDEF MODPCP [37B8!6B12!2] ;MODIFY PERHIPERAL CODE, PROGRAM + + IFNDEF MODDVL, + IFNDEF MODDVU, + +;"DIAMON" FILE SELECTION AND READ UUOS + +OPDEF FSELECT [37B8!5B12!4] ;FILE SELECTION +OPDEF FREAD [37B8!6B12!4] ;FILE READ - ASCII DATA +OPDEF FRD36 [37B8!7B12!4] ;FILE READ - 36 BIT DATA +OPDEF FRD8 [37B8!10B12!4] ;FILE READ - 8 BIT DATA + +;KI10 ONLY UUO FOR PRINTING MARGIN VALUES + +OPDEF PNTMGN [37B8!16B12!2] ;PRINT MARGIN VALUE + + XLIST +IFNDEF KLOLD, + +;A MACRO TO REPORT AN ERROR AND NOT LOOP + + DEFINE ERROR1 (FORMAT,CORECT,ACTUAL,F,D,ERR)< + SALL + ERUUO FORMAT,[T,,[SIXBIT\F'_\] + CORECT,,ACTUAL + [SIXBIT\D'_\],,ERR] + XALL> + +>;END OF KLOLD CONDITIONAL + + XLIST +IFDEF $PAPER, +SUBTTL STANDARD PROGRAM ASSIGNMENTS + +; ********************************************************************** +;ACCUMULATORS +; ********************************************************************** + +P= 17 ;PUSHDOWN POINTER AC (IF PUSH LIST USED) +REPT== 15 ;ERROR HANDLER REPEAT AC +REPT1== 16 ; " + +; ********************************************************************** +;PDP-10 STANDARD PC CONTROL FLAGS (SAVED ON PUSHJ, JSR, ETC..) +; ********************************************************************** + +AROV== 400000 ;ARITHMETIC OVERFLOW +CRY0== 200000 ;CARRY 0 +CRY1== 100000 ;CARRY 1 +FOV== 40000 ;FLOATING POINT OVERFLOW +BIS== 20000 ;BYTE INTERRUPT +USERF== 10000 ;USER MODE +EXIOT== 4000 ;USER PRIV I/O +FXU== 100 ;FLOATING POINT UNDERFLOW +DCK== 40 ;DIVIDE CHECK + +; ********************************************************************** +;PDP-10 STANDARD ADDRESS ASSIGNMENTS +; ********************************************************************** + +LUUO== 40 ;UUO STORAGE, UUO 1-37 +LUUOI== 41 ;UUO SERVICE INSTRUCTION + +; ********************************************************************** +;JOB DATA AREA EXTERNALS (OLD DEFINITIONS) +; ********************************************************************** + +JOBUUO==40 +JOB41== 41 +JOBREL==44 +JOBDDT==74 +JOBSYM==116 +JOBUSY==117 +JOBSA== 120 +JOBFF== 121 +JOBREN==124 +JOBAPR==125 +JOBCNI==126 +JOBTPC==127 +JOBOPC==130 +JOBVER==137 +; ********************************************************************** +;JOB DATA AREA EXTERNALS (NEW DEFINITIONS) +; ********************************************************************** + +.JBUUO==40 +.JB41== 41 +.JBREL==44 +.JBDDT==74 +.JBSYM==116 +.JBUSY==117 +.JBSA== 120 +.JBFF== 121 +.JBREN==124 +.JBAPR==125 +.JBCNI==126 +.JBTPC==127 +.JBOPC==130 +.JBVER==137 + +; ********************************************************************** +;USER MODE APR ASSIGNMENTS (FOR "APRENB" CALL) +; ********************************************************************** + +PDLOVU==200000 ;PUSHDOWN LIST OVERFLOW +MPVU== 20000 ;MEMORY PROTECTION VIOLATION +NXMU== 10000 ;NON-X-MEMORY +PARU== 4000 ;PARITY ERROR +CLKU== 1000 ;CLOCK +FOVU== 100 ;FLOATING OVERFLOW +AROVU== 10 ;ARITHMETIC OVERFLOW + +; ********************************************************************** +;USER MODE PRINT OUTPUT CHANNEL ASSIGNMENTS (FOR SUBROUTINE PACKAGE) +;THE USER SHOULD BE CAUTIONED NOT TO USE THESE CHANNELS WHEN +;USING THE SUBROUTINE PACKAGE AND CODING USER MODE PROGRAMS. +; ********************************************************************** + +$DEVCH==17 ;LOGICAL DEVICE CHANNEL +$DVCH1==16 ;LOGICAL DEV UPDATE INPUT CHANNEL + +; ********************************************************************** +;PDP-10 SPECIAL COMPATABILITY ASSIGNMENTS +; ********************************************************************** + +PAG== 010 ;PAGING I/O DEVICE CODE, KI/KL + +CCA== 014 ;CACHE I/O DEVICE CODE, KL10 +; ********************************************************************** +;PDP-10 STANDARD APR CONO ASSIGNMENTS +; ********************************************************************** + +IOCLR== 200000 ;CLEAR ALL I/O DEVICES +CLKDIS==4000 ;DISABLE CLOCK INTERRUPTS +CLKENB==2000 ;ENABLE CLOCK INTERRUPTS +CLKCLR==1000 ;CLEAR CLOCK FLAG + +; ********************************************************************** +;PDP-10 STANDARD APR CONI ASSIGNMENTS, RIGHT HALF +; ********************************************************************** + +CLKENB==2000 ;CLOCK INTERRUPT ENABLED +CLK== 1000 ;CLOCK FLAG +ANXM== 10000 ;KA10, NON-X-MEMORY +INXM== 100 ;KI10 + +; ********************************************************************** +;PDP-10 STANDARD PI CONO ASSIGNMENTS +; ********************************************************************** + +PWFCLR==400000 ;CLEAR POWER FAIL FLAG +PARCLR==200000 ;CLEAR PARITY ERROR FLAG +PARDIS==100000 ;DISABLE PARITY INTERRUPTS +PARENB==40000 ;ENABLE PARITY INTERRUPTS +PICLR== 10000 ;CLEAR PI SYSTEM +REQSET==4000 ;SET PROGRAM PI REQUEST +CHNON== 2000 ;TURN ON CHANNEL +CHNOFF==1000 ;TURN OFF CHANNEL +PIOFF== 400 ;TURN OFF PI SYSTEM +PION== 200 ;TURN ON PI SYSTEM + +; ********************************************************************** +;PDP-10 STANDARD PI CONI ASSIGNMENTS +; ********************************************************************** + +PION== 200 ;PI SYSTEM ON + +; ********************************************************************** +;PDP-10 STANDARD PI CHANNEL ASSIGNMENTS +; ********************************************************************** + +PICHN1==100 ;PI CHANNEL 1 +PICHN2==40 ;PI CHANNEL 2 +PICHN3==20 ;PI CHANNEL 3 +PICHN4==10 ;PI CHANNEL 4 +PICHN5==4 ;PI CHANNEL 5 +PICHN6==2 ;PI CHANNEL 6 +PICHN7==1 ;PI CHANNEL 7 +PICHNA==177 ;ALL PI CHANNELS, 1 THRU 7 + XLIST + IFDEF KA10,< +IFDEF $PAPER, +; ********************************************************************** +;KA10 APR CHANNEL ASSIGNMENTS +; ********************************************************************** + +AAPRC1==1 ;APR INTERRUPT CHANNEL + +; ********************************************************************** +;KA10 APR CONO ASSIGNMENTS +; ********************************************************************** + +APDCLR==400000 ;CLEAR PUSHDOWN OVERFLOW +AABCLR==40000 ;CLEAR ADDRESS BREAK +AMPCLR==20000 ;CLEAR MEMORY PROTECTION +ANXCLR==10000 ;CLEAR NON-X-MEMORY +AFODIS==400 ;DISABLE FLOATING POINT OVERFLOW +AFOENB==200 ;ENABLE FLOATING POINT OVERFLOW +AFOCLR==100 ;CLEAR FLOATING POINT OVERFLOW +AOVDIS==40 ;DISABLE OVERFLOW +AOVENB==20 ;ENABLE OVERFLOW +AOVCLR==10 ;CLEAR OVERFLOW + +; ********************************************************************** +;KA10 APR CONI ASSIGNMENTS +; ********************************************************************** + +APDLOV==200000 ;PUSHDOWN OVERFLOW +AUSRIO==100000 ;USER I/O +AADRBK==40000 ;ADDRESS BREAK +AMPV== 20000 ;MEMORY PROTECTION VIOLATION +ANXM== 10000 ;NON-EXISTENT MEMORY +AFOENB==200 ;FLT PT INTERRUPT ENABLED +AFOV== 100 ;FLOATING POINT OVERFLOW +ATRPOS==40 ;TRAPS OFFSET +AOVENB==20 ;OVERFLOW INTERRUPT ENABLED +AOVFLO==10 ;ARITHMETIC OVERFLOW + +; ********************************************************************** +;KA10 PI CONI ASSIGNMENTS +; ********************************************************************** + +APWRFL==400000 ;POWER FAILURE +APARER==200000 ;PARITY ERROR +APAREN==100000 ;PARITY INTERRUPT ENABLED + +> ;END CONDITIONAL ON KA10 + XLIST + IFDEF KI10,< +IFDEF $PAPER, +; ********************************************************************** +;KI10 PC CONTROL FLAGS +; ********************************************************************** + +LIP== 2000 ;LAST INSTRUCTION PUBLIC +TN0== 400 ;TN=00, NO TRAP ;TN=01, ARITH TRAP +TN1== 200 ;TN=10, PDL OV ;TN=11, TRAP 3 + +; ********************************************************************** +;KI10 SPECIAL EXEC MODE FLAGS +; ********************************************************************** + +UOLIP== 400000 ;UUO OLD L.I.P. +UOUSR== 4000 ;UUO OLD USER + +; ********************************************************************** +;KI10 APR CHANNEL ASSIGNMENTS +; ********************************************************************** + +IAPRC1==1 ;APR CLOCK CHANNEL +IAPRE1==10 ;APR ERROR CHANNEL + +; ********************************************************************** +;KI10 APR CONO ASSIGNMENTS +; ********************************************************************** + +ITMSET==400000 ;SET TIME OUT TIMER +ITMDIS==100000 ;DISABLE TIME OUT +ITMENB==40000 ;ENABLE TIME OUT +IASRTC==20000 ;CLEAR AUTO RESTART +IASRTS==10000 ;SET AUTO RESTART +IIOPFC==200 ;CLEAR I/O PAGE FAIL +INXCLR==100 ;CLEAR NON-X-MEM + +; ********************************************************************** +;KI10 APR CONI ASSIGNMENTS, RIGHT HALF +; ********************************************************************** + +ITMOUT==400000 ;TIMER TIMED OUT +IPARER==200000 ;PARITY ERROR +IPAREN==100000 ;PARITY ENABLED +ITMOEN==40000 ;TIME OUT ENABLED +IPWRFL==20000 ;POWER FAIL +IASRTE==10000 ;AUTO RESTART ENABLED +IIOPFL==200 ;I/O PAGE FAIL +INXM== 100 ;NON-X-MEMORY +; ********************************************************************** +;KI10 APR CONI ASSIGMENTS, LEFT HALF +; ********************************************************************** + +IMLAPD==200000 ;MEMORY OVERLAP DISABLED +IFMMAN==100000 ;FAST MEMORY MANUAL +IMIPGD==40000 ;MI PROGRAM DISABLE +ICNSLR==20000 ;CONSOLE READ ONLY +ICNSLL==10000 ;CONSOLE LOCKED +IP50HZ==4000 ;50 HZ POWER +IMGINM==2000 ;MANUAL MARGINS +IMAINT==1000 ;MAINTENANCE MODE +IPWRLO==400 ;POWER LOW +IMGNLO==200 ;MARGIN COMPARATOR LOW +SENSE1==40 ;SENSE SWITCHES 1 +SENSE2==20 ; 2 +SENSE3==10 ; 3 +SENSE4==4 ; 4 +SENSE5==2 ; 5 +SENSE6==1 ; 6 + +; ********************************************************************** +;KI10 APR DATAO ASSIGNMENTS +; ********************************************************************** + +IEVNPR==20000 ;WRITE EVEN PARITY +ISPDOF==10000 ;SPEED MARGINS OFF +ISPDON==4000 ;SPEED MARGINS ON +IMGNOF==2000 ;MARGINS OFF - LH +IMGNON==1000 ;MARGINS ON - LH + +; ********************************************************************** +;KI10 PI CONO ASSIGNMENTS +; ********************************************************************** + +IRQCLR==20000 ;CLEAR PROGRAM PI REQUEST +; ********************************************************************** +;KI10 PI CONI ASSIGNMENTS +; ********************************************************************** + +IINSTF==400000 ;ADDRESS CONDITIONS, INST FETCH +IDATAF==200000 ; DATA FETCH +IWRITE==100000 ; WRITE +IADSTP==40000 ;ADDRESS STOP +IADBRK==20000 ;ADDRESS BREAK +IADEXC==10000 ;ADDRESS SWITCHES EXEC +IADUSR==4000 ; " " USER +IPRSTP==2000 ;PARITY STOP +INXSTP==1000 ;NON-X-MEM STOP + +; ********************************************************************** +;KI10 PAG CONI ASSIGNMENTS +; ********************************************************************** + +EXCMEM==400 ;EXEC MEMORY SPACE +AMCLRB==40 ;ASSOCIATIVE MEMORY CLEAR BIT + +; ********************************************************************** +;KI10 PAG DATAO ASSIGNMENTS, LEFT HALF +; ********************************************************************** + +LDUSRB==400000 ;LOAD USER BASE REGISTER +SMLUSR==40000 ;SMALL USER, 32K OR UNDER +USRCMP==20000 ;USER ADR COMPARE ENABLE + +; ********************************************************************** +;KI10 PAG DATAO ASSIGNMENTS, RIGHT HALF +; ********************************************************************** + +LDEXCB==400000 ;LOAD EXEC BASE REGISTER +TRPENB==20000 ;ENABLE TRAPS + +; ********************************************************************** +;KI10 PAG DATAI ASSIGNMENTS +; ********************************************************************** + +SMLUSR==40000 ;SMALL USER +USRCMP==20000 ;USER ADR COMPARE ENABLED +TRPENB==20000 ;RH, TRAPS ENABLED + +; ********************************************************************** +;KI10 PTR DATAO ASSIGNMENTS +; ********************************************************************** + + ;ADDRESS CONDITIONS, ADDRESS BREAK ;AS ABOVE, PI CONI + ;ADDRESS SWITCHES, 14-35 +; ********************************************************************** +;KI10 EXEC PAGE MAP PAGE ASSIGNMENTS +; ********************************************************************** + +PGFTRP==420 ;PAGE FAULT TRAP +AROVTP==421 ;ARITHMETIC TRAP +PDOVTP==422 ;PUSHDOWN OVERFLOW TRAP +TRP3TP==423 ;TRAP 3 TRAP + +; ********************************************************************** +;KI10 USER PAGE MAP PAGE ASSIGNMENTS +; ********************************************************************** + +PGFTRP==420 ;PAGE FAULT TRAP +AROVTP==421 ;ARITHMETIC TRAP +PDOVTP==422 ;PUSHDOWN OVERFLOW TRAP +TRP3TP==423 ;TRAP 3 TRAP + +MUUO== 424 ;MUUO STORAGE +MUUOPC==425 ;C(PC) OF MUUO STORAGE + +EXCPFW==426 ;EXEC PAGE FAIL WORD +USRPFW==427 ;USER PAGE FAIL WORD + +KNTRP== 430 ;KERNAL NO TRAP - NEW PC'S- +KTRP== 431 ;" TRAP +SNTRP== 432 ;SUPERVISOR NO TRAP +STRP== 433 ;" TRAP +CNTRP== 434 ;CONCEAL NO TRAP +CTRP== 435 ;" TRAP +PNTRP== 436 ;PUBLIC NO TRAP +PTRP== 437 ;" TRAP + +> ;END CONDITIONAL ON KI10 + XLIST + IFDEF KL10,< + IFNDEF KL10P0,< +IFDEF $PAPER, +;KL10 CONO APR 000 ASSIGMENTS +; ********************************************************************** + +LIOCLR==200000 ;CLEAR ALL I/O DEVICES +LFLGEN==100000 ;ENABLE SELECTED FLAG +LFLGDS==40000 ;DISABLE SELECTED FLAG +LFLGCL==20000 ;CLEAR SELECTED FLAG +LFLGST==10000 ;SET SELECTED FLAG +LSBUSE==4000 ;SBUS ERROR FLAG +LNXMER==2000 ;NON-EXISTENT MEMORY FLAG +LPARER==1000 ;PARITY ERROR FLAG +LIOPFE==400 ;I/O PAGE FAIL FLAG +LPWRFL==100 ;POWER FAIL FLAG +LCASWD==20 ;CACHE SWEEP DONE FLAG +LAPRP7==7 ;APR PI CHANNEL 7 +LAPRP6==6 ;APR PI CHANNEL 6 +LAPRP5==5 ;APR PI CHANNEL 5 +LAPRP4==4 ;APR PI CHANNEL 4 +LAPRP3==3 ;APR PI CHANNEL 3 +LAPRP2==2 ;APR PI CHANNEL 2 +LAPRP1==1 ;APR PI CHANNEL 1 +LESBER==104000 ;ENABLE SBUS ERRORS +LDSBER==044000 ;DISABLE SBUS ERRORS +LCSBER==024000 ;CLR SBUS ERRORS +LSSBER==014000 ;SET SBUS ERROR +LENXER==102000 ;ENABLE NON-EXISTENT MEMORY +LDNXER==042000 ;DISABLE NON-EXISTENT MEORY +LCNXER==022000 ;CLR NON-EXISTENT MEMORY +LSNXER==012000 ;SET NON-EXISTENT MEMORY +LEPAER==101000 ;ENABLE PARITY ERRORS +LDPAER==041000 ;DISABLE PARITY ERRORS +LCPAER==021000 ;CLR PARITY ERROR +LSPAER==011000 ;SET PARITY ERROR +LEIOPF==100400 ;ENABLE I/O PAGE FAILS +LDIOPF==040400 ;DISABLE I/O PAGE FAILS +LCIOPF==020400 ;CLR I/O PAGE FAIL +LSIOPF==010400 ;SET I/O PAGE FAIL +LEPWRF==100100 ;ENABLE POWER FAIL +LDPWRF==040100 ;DISABLE POWER FAIL +LCPWRF==020100 ;CLR POWER FAIL +LSPWRF==010100 ;SET POWER FAIL +LECASD==100020 ;ENABLE CACHE SWEEP DONE +LDCASD==040020 ;DISABLE CACHE SWEEP DONE +LCCASD==020020 ;CLR CACHE SWEEP DONE +LSCASD==010020 ;SET CACHE SWEEP DONE +LAPRAL==127520 ;CLR ALL ERROR FLAGS & ENABLE +; ********************************************************************** +;KL10 CONI APR 000 ASSIGMENTS (LEFT HALF) +; ********************************************************************** + +LSBSEN==4000 ;SBUS ERRORS ENABLED +LNXMEN==2000 ;NON-EXISTENT MEMORY ERRORS ENABLED +LPAREN==1000 ;PARITY ERRORS ENABLED +LIOPFE=400 ;I/O PAFE FAILURES ENABLED +LPWRFE==100 ;POWER FAILURES ENABLED +LCASDE==20 ;CACHE SWEEP DONE ENABLED + +; ********************************************************************** +;KL10 CONI APR 000 ASSIGMENTS (RIGHT HALF) +; ********************************************************************** + +LCASWB==200000 ;CACHE SWEEP BUSY +LSBUSE==4000 ;SBUS ERROR FLAG +LNXMER==2000 ;NON-EXISTENT MEMORY FLAG +LPARER==1000 ;PARITY ERROR FLAG +LIOPFE==400 ;I/O PAGE FAIL FLAG +LPWRFL==100 ;POWER FAIL FLAG +LCASWD==20 ;CACHE SWEEP DONE FLAG +LAPRP7==7 ;APR PI CHANNEL 7 +LAPRP6==6 ;APR PI CHANNEL 6 +LAPRP5==5 ;APR PI CHANNEL 5 +LAPRP4==4 ;APR PI CHANNEL 4 +LAPRP3==3 ;APR PI CHANNEL 3 +LAPRP2==2 ;APR PI CHANNEL 2 +LAPRP1==1 ;APR PI CHANNEL 1 +LINT==10 ;APR INTERRUPT + +; ********************************************************************** +;KL10 DATAO APR 000 ASSIGMENTS (LEFT HALF) +; ********************************************************************** + +LINSTF==400 ;ADDRESS BREAK REQUEST FOR INST. FETCH +LDATAF==200 ;ADDRESS BREAK REQUEST FOR DATA FETCH +LWRITE==100 ;ADDRESS BREAK REQUEST FOR DATA WRITE +LUSCMP==40 ;USER ADDRESS COMPARE +LEXCMP==0 ;EXEC ADDRESS COMPARE + +; ********************************************************************** +;KL10 DATAO APR 000 ASSIGMENTS (RIGHT HALF) +; ********************************************************************** + +;DATAO APR,ADDRESS SWITCHES=13-35 +> + XLIST + IFDEF KL10P0,< +IFDEF $PAPER, +;KL10 CONO APR 000 ASSIGMENTS +; ********************************************************************** +LIOCLR==200000 ;CLEAR ALL I/O DEVICES +LFLGEN==100000 ;ENABLE SELECTED FLAG +LFLGDS==40000 ;DISABLE SELECTED FLAG +LFLGCL==20000 ;CLEAR SELECTED FLAG +LFLGST==10000 ;SET SELECTED FLAG +LSBUSE==4000 ;SBUS ERROR FLAG +LNXMER==2000 ;NON-EXISTENT MEMORY FLAG +LIOPFE==1000 ;I/O PAGE FAIL FLAG +LPARER==400 ;MB PARITY ERROR FLAG +LCADRP==200 ;CACHE ADDRESS PARITY ERROR FLAG +LSADRP==100 ;S-BUS ADDRESS PARITY ERROR FLAG +LPWRFL==40 ;POWER FAIL FLAG +LCASWD==20 ;CACHE SWEEP DONE FLAG +LAPRP7==7 ;APR PI CHANNEL 7 +LAPRP6==6 ;APR PI CHANNEL 6 +LAPRP5==5 ;APR PI CHANNEL 5 +LAPRP4==4 ;APR PI CHANNEL 4 +LAPRP3==3 ;APR PI CHANNEL 3 +LAPRP2==2 ;APR PI CHANNEL 2 +LAPRP1==1 ;APR PI CHANNEL 1 +LESBER==104000 ;ENABLE SBUS ERRORS +LDSBER==044000 ;DISABLE SBUS ERRORS +LCSBER==024000 ;CLR SBUS ERRORS +LSSBER==014000 ;SET SBUS ERROR +LENXER==102000 ;ENABLE NON-EXISTENT MEMORY +LDNXER==042000 ;DISABLE NON-EXISTENT MEORY +LCNXER==022000 ;CLR NON-EXISTENT MEMORY +LSNXER==012000 ;SET NON-EXISTENT MEMORY +LEIOPF==101000 ;ENABLE I/O PAGE FAILS +LDIOPF==041000 ;DISABLE I/O PAGE FAILS +LCIOPF==021000 ;CLR I/O PAGE FAIL +LSIOPF==011000 ;SET I/O PAGE FAIL +LEPAER==100400 ;ENABLE PARITY ERRORS +LDPAER==040400 ;DISABLE PARITY ERRORS +LCPAER==020400 ;CLR PARITY ERROR +LSPAER==010400 ;SET PARITY ERROR +LECAER==100200 ;ENABLE CACHE ADR PARITY ERRORS +LDCAER==040200 ; " DISABLE +LCCAER==020200 ; " CLR +LSCAER==010200 ; " SET +LESAER==100100 ;ENABLE S-BUS ADR PARITY ERRORS +LDSAER==040100 ; " DISABLE +LCSAER==020100 ; " CLR +LSSAER==010100 ; " SET +LEPWRF==100040 ;ENABLE POWER FAIL +LDPWRF==040400 ;DISABLE POWER FAIL +LCPWRF==020040 ;CLR POWER FAIL +LSPWRF==010040 ;SET POWER FAIL +LECASD==100020 ;ENABLE CACHE SWEEP DONE +LDCASD==040020 ;DISABLE CACHE SWEEP DONE +LCCASD==020020 ;CLR CACHE SWEEP DONE +LSCASD==010020 ;SET CACHE SWEEP DONE +LAPRAL==127760 ;CLR ALL ERROR FLAGS & ENABLE +; ********************************************************************** +;KL10 CONI APR 000 ASSIGMENTS (LEFT HALF) +; ********************************************************************** + +LSBSEN==4000 ;SBUS ERRORS ENABLED +LNXMEN==2000 ;NON-EXISTENT MEMORY ERRORS ENABLED +LIOPFE==1000 ;I/O PAGE FAILURES ENABLED +LPAREN==400 ;PARITY ERRORS ENABLED +LCADEN==200 ;CACHE ADR PARITY ERRORS ENABLED +LSADEN==100 ;S-BUS ADR PARITY ERRORS ENABLED +LPWRFE==40 ;POWER FAILURES ENABLED +LCASDE==20 ;CACHE SWEEP DONE ENABLED + +; ********************************************************************** +;KL10 CONI APR 000 ASSIGMENTS (RIGHT HALF) +; ********************************************************************** + +LCASWB==200000 ;CACHE SWEEP BUSY +LSBUSE==4000 ;SBUS ERROR FLAG +LNXMER==2000 ;NON-EXISTENT MEMORY FLAG +LIOPFE==1000 ;I/O PAGE FAIL FLAG +LPARER==400 ;PARITY ERROR FLAG +LCADRP==200 ;CACHE ADR PARITY ERROR FLAG +LSADRP==100 ;S-BUS ADR PARITY ERROR FLAG +LPWRFL==40 ;POWER FAIL FLAG +LCASWD==20 ;CACHE SWEEP DONE FLAG +LAPRP7==7 ;APR PI CHANNEL 7 +LAPRP6==6 ;APR PI CHANNEL 6 +LAPRP5==5 ;APR PI CHANNEL 5 +LAPRP4==4 ;APR PI CHANNEL 4 +LAPRP3==3 ;APR PI CHANNEL 3 +LAPRP2==2 ;APR PI CHANNEL 2 +LAPRP1==1 ;APR PI CHANNEL 1 +LINT==10 ;APR INTERRUPT + +; ********************************************************************** +;KL10 DATAO APR 000 ASSIGMENTS (LEFT HALF) +; ********************************************************************** + +LINSTF==400 ;ADDRESS BREAK REQUEST FOR INST. FETCH +LDATAF==200 ;ADDRESS BREAK REQUEST FOR DATA FETCH +LWRITE==100 ;ADDRESS BREAK REQUEST FOR DATA WRITE +LUSCMP==40 ;USER ADDRESS COMPARE +LEXCMP==0 ;EXEC ADDRESS COMPARE + +; ********************************************************************** +;KL10 DATAO APR 000 ASSIGMENTS (RIGHT HALF) +; ********************************************************************** + +;DATAO APR,ADDRESS SWITCHES=13-35 +> + XLIST +IFDEF $PAPER, +; ********************************************************************** +;KL10 DATAI APR 000 ASSIGMENTS (LEFT HALF) +; ********************************************************************** + +LINSTF==400 ;ADDRESS BREAK REQUEST FOR INST. FETCH +LDATAF==200 ;ADDRESS BREAK REQUEST FOR DATA FETCH +LWRITE==100 ;ADDRESS BREAK REQUEST FOR DATA WRITE +LUSCMP==40 ;USER ADDRESS COMPARE +LEXCMP==0 ;EXEC ADDRESS COMPARE + +; ********************************************************************** +;KL10 DATAI APR 000 ASSIGMENTS (RIGHT HALF) +; ********************************************************************** + +;DATAI APR,ADDRESS SWITCHES=13-35 + +; ********************************************************************** +;KL10 BLKO APR 000 ASSIGMENTS (IMMEDIATE MODE) +; ********************************************************************** + +;REFILL ALGORITHM BITS 18-20 +;REFILL ALGORITHM ADDRESS 27-33 + +; ********************************************************************** +;KL10 BLKI APR 000 ASSIGMENTS +; ********************************************************************** + +;MICRO-CODE OPTIONS = 0-8 +;MICRO-CODE VERSION NUMBER = 9-17 +;HARDWARE OPTIONS =18-23 +;PROCESSOR SERIAL NUMBER = 24-35 +; ********************************************************************** +;KL10 CONO PI 004 ASSIGMENTS +; ********************************************************************** + +LEVNPA==400000 ;WRITE EVEN PARITY ADDRESS +LEVNPD==200000 ;WRITE EVEN PARITY DATA +LEVNCD==100000 ;WRITE EVEN CACHE DIRECTORY PARITY *P0 +LRQCLR==20000 ;DROP INTERRUPT ON SELECTED CHANNEL +LPICLR==10000 ;CLEAR PI SYSTEM +LREQSE==4000 ;REQUEST INTERRUPT ON SELECTED CHANNEL +LCHNON=2000 ;TURN ON SELECTED CHANNEL +LCHNOF==1000 ;TURN OFF SELECTED CHANNEL +LPIOFF==400 ;TURN PI SYSTEM OFF +LPION==200 ;TURN PI SYSTEM ON +LPICH1==100 ;PI CHANNEL 1 +LPICH2==40 ;PI CHANNEL 2 +LPICH3==20 ;PI CHANNEL 3 +LPICH4==10 ;PI CHANNEL 4 +LPICH5==4 ;PI CHANNEL 5 +LPICH6==2 ;PI CHANNEL 6 +LPICH7==1 ;PI CHANNEL 7 +LPICHA==177 ;ALL PI CHANNELS + +; ********************************************************************** +;KL10 CONI PI 004 ASSIGMENTS (LEFT HALF) +; ********************************************************************** + +LPRCH1==100 ;PROGRAM REQUEST ON CHANNEL 1 +LPRCH2==40 ;PROGRAM REQUEST ON CHANNEL 2 +LPRCH3==20 ;PROGRAM REQUEST ON CHANNEL 3 +LPRCH4==10 ;PROGRAM REQUEST ON CHANNEL 4 +LPRCH5==4 ;PROGRAM REQUEST ON CHANNEL 5 +LPRCH6==2 ;PROGRAM REQUEST ON CHANNEL 6 +LPRCH7==1 ;PROGRAM REQUEST ON CHANNEL 7 +; ********************************************************************** +;KL10 CONI PI 004 ASSIGMENTS (RIGHT HALF) +; ********************************************************************** + +LEVNPA==400000 ;WRITE EVEN PARITY ADDRESS +LEVNPD==200000 ;WRITE EVEN PARITY DATA +LEVNCD==100000 ;WRITE EVEN CACHE DIRECTORY PARITY *P0 +LPIIP1==40000 ;PI IN PROGRESS ON CHANNEL 1 +LPIIP2==20000 ;PI IN PROGRESS ON CHANNEL 2 +LPIIP3==10000 ;PI IN PROGRESS ON CHANNEL 3 +LPIIP4==4000 ;PI IN PROGRESS ON CHANNEL 4 +LPIIP5==2000 ;PI IN PROGRESS ON CHANNEL 5 +LPIIP6==1000 ;PI IN PROGRESS ON CHANNEL 6 +LPIIP7==400 ;PI IN PROGRESS ON CHANNEL 7 +LPION==200 ;PI SYSTEM ON +LPICH1==100 ;PI CHANNEL 1 ON +LPICH2==40 ;PI CHANNEL 2 ON +LPICH3==20 ;PI CHANNEL 3 ON +LPICH4==10 ;PI CHANNEL 4 ON +LPICH5==4 ;PI CHANNEL 5 ON +LPICH6==2 ;PI CHANNEL 6 ON +LPICH7==1 ;PI CHANNEL 7 ON +; ********************************************************************** +;KL10 DATAO PAG 010 ASSIGMENTS (LEFT HALF) +; ********************************************************************** + +LLACBL==400000 ;LOAD AC BLOCKS +LLPRCN==200000 ;LOAD PREVIOUS CONTEXT SECTION +LLDUSB==100000 ;LOAD USER BASE REGISTER +LCWSX==40 ; + +;CURRENT AC BLOCKS BITS 6 - 8 +;PREVIOUS AC BLOCKS BITS 9 - 11 +;PREVIOUS CONTEXT SECTION BITS 13 - 17 + +; ********************************************************************** +;KL10 DATAO PAG 010 ASSIGMENTS (RIGHT HALF) +; ********************************************************************** + +;USER BASE REGISTER BITS 23 - 35 + +; ********************************************************************** +;KL10 DATAI PAG 010 ASSIGMENTS (LEFT HALF) +; ********************************************************************** + +LLACBL==400000 ;LOAD AC BLOCKS +LLPRCN==200000 ;LOAD PREVIOUS CONTEXT SECTION +LLDUSB==100000 ;LOAD USER BASE REGISTER +LCWSX==40 ; + +;CURRENT AC BLOCKS BITS 6 - 8 +;PREVIOUS AC BLOCKS BITS 9 - 11 +;PREVIOUS CONTEXT SECTION BITS 13 - 17 + +; ********************************************************************** +;KL10 DATAI PAG 010 ASSIGMENTS (RIGHT HALF) +; ********************************************************************** + +;USER BASE REGISTER BITS 23 - 35 +; ********************************************************************** +;KL10 CONO PAG 010 ASSIGMENTS +; ********************************************************************** + +LCASLO==400000 ;CACHE STRATEGY LOOK +LCASLD==200000 ;CACHE STRATEGY LOAD +LSMODE==40000 ;SECTION MODE +LTRPEN==20000 ;TRAP AND PAGE ENABLE + +;EXEC BASE REGISTER = 23-35 + +; ********************************************************************** +;KL10 CONI PAG 010 ASSIGMENTS +; ********************************************************************** + + +LCSLOO==400000 ;CACHE STRATEGY LOOK +LCSLOA==200000 ;CACHE STRATEGY LOAD +LSECMO==40000 ;SECTION MODE +LTRPAE==20000 ;TRAP AND PAGE ENABLE + +;EXEC BASE REGISTER = 23-35 + +; ********************************************************************** +;KL10 BLKO PAG 010 ASSIGMENTS (IMMEDIATE MODE) +; ********************************************************************** + + XLIST + IFNDEF KL10P0,< +IFDEF $PAPER, +; ********************************************************************** +;KL10 EXEC PAGE MAP PAGE ASSIGNMENTS +; ********************************************************************** + +LAROVT==421 ;ARITHMETIC TRAP +LPDOVT==422 ;PUSHDOWN OVERFLOW TRAP +LTRP3T==423 ;TRAP 3 TRAP + +; ********************************************************************** +;KL10 USER PAGE MAP PAGE ASSIGNMENTS +; ********************************************************************** + +LEUPFW==420 ;EXEC & USER PAGE FAIL WORD +LAROVT==421 ;ARITHMETIC TRAP +LPDOVT==422 ;PUSHDOWN OVERFLOW TRAP +LTRP3T==423 ;TRAP 3 TRAP + +LMUUO== 424 ;MUUO STORAGE +LMUUOP==425 ;C(PC) OF MUUO STORAGE + +LPFWPC==426 ;C(PC) OF PAGE FAIL WORD +LPGFTR==427 ;PAGE FAIL NEW PC TRAP + +LKNTRP==430 ;KERNAL NO TRAP - NEW PC'S- +LKTRP== 431 ;" TRAP +LSNTRP==432 ;SUPERVISOR NO TRAP +LSTRP== 433 ;" TRAP +LCNTRP==434 ;CONCEAL NO TRAP +LCTRP== 435 ;" TRAP +LPNTRP==436 ;PUBLIC NO TRAP +LPTRP== 437 ;" TRAP + +> + XLIST + IFDEF KL10P0,< +IFDEF $PAPER, +; ********************************************************************** +;KL10 EXEC PAGE MAP PAGE ASSIGNMENTS +; ********************************************************************** + +LAROVT==421 ;ARITHMETIC TRAP +LPDOVT==422 ;PUSHDOWN OVERFLOW TRAP +LTRP3T==423 ;TRAP 3 TRAP + +LTBASH==510 ;TIME-BASE, HI +LTBASL==511 ;TIME-BASE, LO +LPRFMH==512 ;PERFORMANCE ANAYLYSIS, HI +LPRFML==513 ;PERFORMANCE ANAYLYSIS, LO + +; ********************************************************************** +;KL10 USER PAGE MAP PAGE ASSIGNMENTS +; ********************************************************************** + +LAROVT==421 ;ARITHMETIC TRAP +LPDOVT==422 ;PUSHDOWN OVERFLOW TRAP +LTRP3T==423 ;TRAP 3 TRAP + +LMUUO== 424 ;MUUO STORAGE +LMUUOP==425 ;C(PC) OF MUUO STORAGE +LCNTXT==426 ;PROCESS CONTEXT WORD + +LKNTRP==430 ;KERNAL NO TRAP - NEW PC'S- +LKTRP== 431 ;" TRAP +LSNTRP==432 ;SUPERVISOR NO TRAP +LSTRP== 433 ;" TRAP +LCNTRP==434 ;CONCEAL NO TRAP +LCTRP== 435 ;" TRAP +LPNTRP==436 ;PUBLIC NO TRAP +LPTRP== 437 ;" TRAP + +LEUPFW==500 ;EXEC & USER PAGE FAIL WORD +LPFWPC==501 ;C(PC) OF PAGE FAIL WORD +LPGFTR==502 ;PAGE FAIL NEW PC + +LEBXMH==504 ;E-BOX CLOCK TICK METER, HI +LEBXML==505 ;E-BOX CLOCK TICK METER, LO +LMBXMH==506 ;M-BOX CYCLE METER, HI +LMBXML==507 ;M-BOX CYCLE METER, LO + +>> ;END CONDITIONAL ON KL10 + LIST + +SUBTTL *FIXED* FIXED CONTROL AND DISPATCH STORAGE, SEPT 18,1979 + + LOC 30000 + +; ********************************************************************** +;PROGRAM STARTING ADDRESSES +;THESE ADDRESSES CALL VARIOUS SPECIAL START ROUTINES AND OR OPTIONS +;NORMAL START ADDRESS IS 30000 ALL OTHERS ARE SPECIAL. INVOKED BECAUSE +;OF END OF PASS, POWER FAILURE, DDT START, RE-ENTERING(TYPICALLY USER +;MODE), OR ANY NUMBER OF SPECIAL FEATURE TESTS. +; ********************************************************************** + +BEGIN: JRST @MODLNK ;STAND-ALONE START +$START: JRST START ;MODE CHECK STARTING ADDRESS + +DIAGMN: JRST @LDLNK ;DIAGNOSTIC MONITOR START + +SYSEXR: JRST @LDLNK ;SYSTEM EXERCISER START + +SFSTRT: JRST SADR1 ;SPECIAL FEATURE START + +PFSTRT: JRST SADR2 ;POWER FAIL RESTART + +REENTR: JRST SADR3 ;REENTER START(USUALLY USER MODE ONLY) + +SRTDDT: ;COMMONLY MISTAKEN NAME FOR "DDTSRT" +DDTSRT: JRST @DDTLNK ;DDT START + +BEGIN1: JRST STARTA ;LOOP START(END OF PASS COMES HERE) +SBINIT: JRST @SUBLNK ;PMGINT LINKAGE +RETURN: 0 ;RETURN ADDRESS STORAGE + +START1: SADR7 ;OPTIONAL STARTING ADR/INSTRUCTIONS +START2: SADR8 ; " +START3: SADR9 ; " +START4: SADR10 ; " +START5: SADR11 ; " +; ********************************************************************** +;PROGRAM FIXED PARAMETER AREA +; ********************************************************************** + +PNTNAM: PAREA3 ;SIXBIT PROGRAM NAME +PNTEXT: PAREA4 ;SIXBIT PROGRAM EXTENSION +RANDBS: PAREA1 ;RANDOM BASE NUMBER +SWTEXR: PAREA2 ;SYSTEM EXERCISER SWITCHES +ITRCNT: ITERAT ;PROGRAM ITERATIONS +$PNAME: PGMNAM ;POINTER TO PROGRAMS NAME +$PVER: MCNVER,,DECVER ;MCN & DEC VERSION LEVEL +$MODVL: MODDVL ;DEVICE CODE CHANGE LOWER LIMIT +$MODVU: MODDVU ;DEVICE CODE CHANGE UPPER LIMIT +$EMODE: IFNDEF EXCASB,<0> IFDEF EXCASB,<-1> ;EXEC ALLOWED +$UMODE: IFNDEF USRASB,<0> IFDEF USRASB,<-1> ;USER ALLOWED +$DSKUP: IFNDEF DSKUPD,<0> IFDEF DSKUPD,<-1> ;DISK UPDATE MODE +$MMAP: IFNDEF MEMMAP,<0> IFDEF MEMMAP,<-1> ;ALLOW MEMORY RTNS +PAREA7: PAREA5 ;OPTIONAL PARAMETER +PAREA8: PAREA6 ;OPTIONAL PARAMETER + +; ********************************************************************** +;PROGRAM VARIABLE PARAMETER AREA +; ********************************************************************** + +USER: 0 ; 0 = EXEC, -1 = USER MODE FLAG +KAIFLG: 0 ;PROCESSOR TYPE, 0 = KA10, -1 = KI10 +KLFLG: 0 ;PROCESSOR TYPE, 0 = KA/KI, -1 = KL10 +MONFLG: -1 ;DIAG MONITOR SPECIAL USER FLAG +MONCTL: 0 ;DIAG MON/SYS EXR FLAG +MONTEN: 0 ;-1= LOADED BY 10 +CLOCKF: 0 ;CLOCK TICKED FLAG +CONSW: 0 ;CONSOLE SWITCH SETTINGS +PASCNT: 0 ;PROGRAM PASS COUNT +RUNFLG: 0 ;PROGRAM RUN FLAG +TESTPC: 0 ;SUBTEST PC +ERRPC: 0 ;ERROR PC +ERRTLS: 0 ;ERROR TOTALS +TICKS: 0 ;PROGRAM RUNNING TIME +MARGIN: 0 ;KI10 MARGIN WORD VALUE +$ONETM: 0 ;SUBROUTINE INITIALIZATION FLAG +; ********************************************************************** +;SPECIAL PROGRAM DISPATCH ADDRESSES +; ********************************************************************** + +BEGEND: ENDUUO ;END OF PASS +$BEND1: JRST BEGIN1 ;KEEP RUNNING PROGRAM +$BEND2: EOPUUO ;END OF PROGRAM - NO RETURN +CNTLC: SADR5 ;CONTROL C XFER ADDRESS +ALTMGO: SADR6 ;ALTMODE XFER ADDRESS +CPOPJ1: ;SKIP RETURN +UUOSKP: AOS (P) ;SKIP RETURN FROM UUO +CPOPJ: ;NON-SKIP REGULAR RETURN +UUOEXT: RTN ;UUO RETURN +UUORTN: JFCL ;ADDITIONAL USERS UUO ROUTINE +$UORTX: JFCL ;ADDITIONAL UUO LINKAGE +$UUOER: JFCL ;INITED AS (JRST $UOERX) +$ITRHL: JFCL ;ADDITIONAL INTERRUPT LINKAGE +$ITRX1: JFCL ; " +$USRHL: JFCL ; " +$RSRTX: JFCL ;ADDITIONAL POWER FAIL LINKAGE +$RSRTY: JFCL ; " +RESRT1: JFCL ; INITED AS (JRST RESRTX) +RESRT2: JFCL ; " +$PARER: JFCL ;ADDITIONAL PARITY ERROR LINKAGE +ERMORE: JFCL ;ADDITIONAL ERROR HANDLER LINKAGE + HALT . ;IMPROPER TRANSFER HALT + +$PSHER: 0 ;INITED AS (JRST PSHERR) +ITRCH1: 0 ;PC & FLAGS OF CURRENT INTERRUPT + 0 ;INITED AS (JRST $ITRC1) + +; ********************************************************************** +;PROCESSOR CONTROL STORAGE +; ********************************************************************** + +$ACC0: 0 ;INTERRUPT SAVED AC0 +$SVPI: 0 ;INTERRUPT SAVED PI +$SVAPR: 0 ;INTERRUPT SAVED APR +$SVPAG: 0 ;INTERRUPT SAVED PAG (DATAI) +$SPAG1: 0 ;INTERRUPT SAVED PAG (CONI) + +$SVUUO: 0 ;CURRENT USERS UUO +$SVUPC: 0 ;PC OF CURRENT USERS UUO + +REPTU: 0 ;REPEAT UUO ITERATIONS +SCOPE: 0 ;ERROR HANDLER SCOPE LOOP FLAG +%CORFLG:0 ; " CORRECT FLAG +%COREC: 0 ; " CORRECT DATA +%ACTFL: 0 ; " ACTUAL FLAG +%ACTUL: 0 ; " ACTUAL DATA +%DISCR: 0 ; " DISCREPENCY DATA +; ********************************************************************** +;UUO DISPATCH TABLE +; ********************************************************************** + XLIST +IFNDEF LUUO1, +IFNDEF LUUO2, +IFNDEF LUUO3, +IFNDEF LUUO4, +IFNDEF LUUO5, +IFNDEF LUUO6, +IFNDEF LUUO7, +IFNDEF LUUO10, +IFNDEF LUUO11, +IFNDEF LUUO12, +IFNDEF LUUO13, +IFNDEF LUUO14, +IFNDEF LUUO15, +IFNDEF LUUO16, +IFNDEF LUUO17, +IFNDEF LUUO20, +IFNDEF LUUO21, +IFNDEF LUUO22, +IFNDEF LUUO23, +IFNDEF LUUO24, +IFNDEF LUUO25, +IFNDEF LUUO26, +IFNDEF LUUO27, +IFNDEF LUUO30, +IFNDEF LUUO31, +IFNDEF LUUO32, +IFNDEF LUUO33, + LIST +UUODIS: LUUO1,,$UUOER + LUUO3,,LUUO2 + LUUO5,,LUUO4 + LUUO7,,LUUO6 + LUUO11,,LUUO10 + LUUO13,,LUUO12 + LUUO15,,LUUO14 + LUUO17,,LUUO16 + LUUO21,,LUUO20 + LUUO23,,LUUO22 + LUUO25,,LUUO24 + LUUO27,,LUUO26 + LUUO31,,LUUO30 + LUUO33,,LUUO32 + +; ********************************************************************** +;MEMORY MANAGMENT STORAGE +; ********************************************************************** + +DF22F: 0 ;DF10 CONTROL FLAG, 0 = 18, -1 = 22 BIT +MAPNEW: 0 ;MEMORY MAPPING CONTROL FLAG, -1 = 4096K MAPPING +MEMTOT: 0 ;TOTAL MEMORY SIZE IN K (1024.) +MEMLOW: 0 ;LOWEST USABLE MEMORY +MEMSIZ: BLOCK ^D41 ;MEMORY SEGMENT POINTER TABLE + +; ********************************************************************** +;PRINT CONTROL STORAGE +; ********************************************************************** + +PNTFLG: 0 ;PRINT FLAG, -1 WHILE IN PRINT ROUTINE +PNTENB: 0 ;PRINT ENABLE +PDISF: 0 ;PRINT DISABLED FLAG +PNTINH: 0 ;INHIBIT PRINT INPUT CHECKS +PNTSPC: 0 ;PRINT SPACE CONTROL +OPTIME: 0 ;TYPE-IN WAIT TIME +$TWCNT: 0 ;TIME WAITED +$DVOFF: 0 ;LOGICAL DEVICE INITED FLAG +TTYFIL: 0 ;TTY EXEC FILLERS FLAG +TTYSPD: 0 ;TTY EXEC BAUD RATE +$TTCHR: 0 ;ACTUAL TYPED IN CHAR +$CHRIN: 0 ;UPPER CASED & PARITY STRIPPED CHAR +$TYPNB: 0 ;TYPED IN NUMBER +$CRLF: 0 ;FREE CR/LF FLAG +$TABF: 0 ;TAB CONVERSION FLAG +$FFF: 0 ;FORM FEED CONVERSION FLAG +$VTF: 0 ;VERTICAL TAB CONVERSION FLAG +USRLFF: 0 ;USER LF FILLERS +USRCRF: 0 ;USER CR FILLERS +; ********************************************************************** +;THE FOLLOWING MISCELLANEOUS PRINT CHARACTERS ARE INCLUDED +;TO FACILITATE PRINTING AND ARE CALLED AS FOLLOWS: +; MOVEI NAME +; PNTA ;OR PNTAF +; ********************************************************************** + +CRLF: ASCII/ +/ +CRLF2: ASCII/ + +/ +COMMA: ASCII/,/ +PERIOD: ASCII/./ +SPACE: ASCII/ / +TAB: ASCII/ / +MINUS: +HYPEN: ASCII/-/ +PLUS: ASCII/+/ +AST: ASCII/*/ +ATSIN: ASCII/@/ +LFP: ASCII/(/ +RTP: ASCII/)/ +BELL: BYTE (7) 007 +QUEST: ASCII/?/ +SLASH: ASCII!/! +DOLLAR: ASCII/$/ +RADIX: ^D10 ;DECIMAL PRINT RADIX +RADLSP: 40 ;DECIMAL PRINT LEADING CHAR +RADLSC: ^D10 ;DECIMAL PRINT LEADING CHAR COUNT + +; ********************************************************************** +;USER MODE OUTPUT FILE INFORMATION +; ********************************************************************** + +$OBUF: BLOCK 3 ;LOGICAL FILE OUTPUT BUFFER HEADER +$OUTNM: SIXBIT /PRINT/ ;FILE NAME +$OUTEX: SIXBIT /PNT/ ;FILE NAME EXTENSION + BLOCK 2 + +; ********************************************************************** +;DISK UPDATE MODE FILE INFORMATION +; ********************************************************************** + +$IBUF: BLOCK 3 +$INNM: SIXBIT /PRINT/ +$INEXT: SIXBIT /PNT/ + BLOCK 2 +; ********************************************************************** +;PUSHDOWN LIST CONTROL INFORMATION +; ********************************************************************** + +PLIST: PLIST-PLISTE,,PLIST +PLISTS: BLOCK 200 +PLISTE: 0 ;END OF PUSHDOWN LIST + +; ********************************************************************** +;POWER LINE CLOCK FREQUENCY FLAG +; ********************************************************************** + +CYCL60: 0 ;0 = 60, -1 = 50 CYCLE + +; ********************************************************************** +;KL10 CACHE CONTROL FLAGS +; ********************************************************************** + +CSHFLG: 0 ;ALLOW CACHE IF 0 +CSHMEM: 0 ;CACHE MEMORY SEGMENTS IF 0 + +; ********************************************************************** +;NUMBER INPUT DIGIT FLAG +; ********************************************************************** + +TTNBRF: 0 ;-1 IF ANY DIGIT TYPED + +; ********************************************************************** +;KL10 & KI10 "INHPAG" SWITCH PAGING PREVENTION +; ********************************************************************** + +PVPAGI: 0 ;IF NON-ZERO, OVERRIDE "INHPAG" SWITCH ACTION + +; ********************************************************************** +;ERROR REPORTING ROUTINE ADDITIONAL USERS CONTROL INSTRUCTIONS +; ********************************************************************** + +%ERHI1: 0 ;IF NON-ZERO, XCT'D AT START OF %ERUUO +%ERHI2: 0 ;IF NON-ZERO, XCT'D AT END OF %ERUUO +%ERHI3: 0 ;IF NON-ZERO, XCT'D AFTER "PC" OF %ERUUO + +; ********************************************************************** +;SPECIAL USERS UUO INTERCEPT INSTRUCTION +; ********************************************************************** + +$$UUO: 0 ;IF NON-ZERO, XCT'D AT START OF $UORTN +; ********************************************************************** +;USER MODE MONITOR TYPE FLAG +; ********************************************************************** + +MONTYP: 0 ;0 = TOPS10, -1 = TOPS20 + +;*********************************************************************^ +;*KL10 PROCESSOR TYPE FLAG, 0=P0, 1=BBD NEW, 2=BBD OLD +;*********************************************************************^ + +KLTYP: 0 + +; ********************************************************************** +;SPECIAL USERS MUUO INTERCEPT INSTRUCTION +; ********************************************************************** + +$$MUUO: 0 ;IF NON-ZERO, XCT'D AT START OF MUUOER + +; ********************************************************************** +;SPECIAL USERS USER MODE OUTPUT ERROR INTERCEPT INSTUCTION +; ********************************************************************** + +$$OUTER:0 ;IF NON-ZERO, XCT'D AT END OF USER MODE ERROR + +; ********************************************************************** +;"SWITCH" CALL USAGE CONTROL +; ********************************************************************** + +$$TOGGLE:0 ;IF NON-ZERO, USE C(CONSW) FOR SWITCHES + +; ********************************************************************** +;SPECIAL USERS ALTMODE SWITCH CALL INTERCEPT INSTRUCTIONS +; ********************************************************************** + +$$TAX1: 0 ;IF NON-ZERO, XCT'D AT START OF ALTMODE SWITCH CALL +$$TAX2: 0 ;IF NON-ZERO, XCT'D AT END OF ALTMODE SWITCH CALL + +; ********************************************************************** +;SM10 (KS-10) PROCESSOR TYPE FLAG +; ********************************************************************** + +SM10: 0 ;IF -1 THIS IS A KS-10 + +; ********************************************************************** +;RIGHT HALF SWITCHES PROMPT TABLE ADDRESS +; ********************************************************************** + +SWPTAB: 0 ;0 = NO PROMPT, ADR = ADR OF SIXBIT PROMPT TABLE + +; ********************************************************************** +;SPECIAL FUTURE EXPANSION ROOM +; ********************************************************************** + +; ********************************************************************** +;END OF FIXED STORAGE +; ********************************************************************** + + LOC 30577 +ENDFIX: 0 ;END OF FIXED STORAGE + +;INITIALIZE UUO HANDLER + +START: ;PGMINT ;INITIALIZE SUBROUTINES + MOVE 0,RANDBS ;EXEC, SETUP RANDOM BASE + SKIPE USER ;USER, USE TIME OF DAY IN JIFFIES + ;CALL 0,[SIXBIT/TIMER/] + MOVEM 0,RAN ;SETUP RANDOM BASE + +;INITIALIZE COMPLEXITY TABLE + A=0 +STARTA: SETZM CMPLXT ;STORE A TABLE OF POWERS OF 2 + MOVEI 1,1 ;OR 0. + ;SWITCH + TLNN RELIAB ;FAST CYCLE SWITCH SET ? + SETZM 1 ;YES, STORE ZERO'S + REPEAT 7, +< MOVEM 1,CMPLXT+1+A + LSH 1,1 + A=A+1> +;INITIALIZE RUN TIME + + MOVEI 1,1 + TLNE RELIAB ;FAST CYCLE SWITCH SET ? + MOVEI 1,7 ;NO, MULTIPLY RUNNING TIME + MOVEM 1,RTIME ;STORE IN RTIME + + JRST CAM1 ;GO PERFORM DIAGNOSTIC + +RENTR1: ;DROPDV ;CLOSE LOGICAL OUTPUT FILE + ;CALL [SIXBIT .EXIT.] + +PGMNAM: ASCIZ/ +PDP-10 KA10 BASIC INSTRUCTION RELIABILITY TEST 1 (DAKBA) +(COMPARES, SKIPS, EXCHANGES, BOOLE, ROTATES, TESTS, ETC.) +/ +;CONSTANTS + +RTIME: 0 +CMPLXT: BLOCK 20 +SUBTTL DIAGNOSTIC SECTION + LALL + +;TEST CAMN,CAME (SIMPLE) +;THE CONTENTS OF THE AC IS COMPARED WITH ITSELF +;AN ERROR WILL OCCUR IF CAMN SKIPS OR CAME FAILS TO SKIP +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) +;15 ACS ARE USED IN THE TEST + + AC=2 +CAM1: SETUP 20,0 + RANDOM +CAMNE1: REPEAT ^D10, +< MOVE AC,RAN + CAMN AC,AC ;C(AC) = C(AC) + CAME AC,AC + ERROR AC,AC ;CHECK CAME,CAMN + AC=&17 +> + AC=2 + LOOP CAMNE1-3,CAMNE1 + + +;TEST MOVE TO AC,FURTHER TEST OF CAME +;THE C(AC) IS COMPARED WITH THE CONTENTS OF THE RANDOM +;NUMBER GENERATOR. 15 ACS ARE USED IN THE TEST +;ERRORS ARE PRINTED IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=2 +MOVAC: SETUP 20,0 + RANDOM +MOVAC1: REPEAT ^D10, +< MOVE AC,RAN ;MOVE RAN INTO AC. + CAME AC,RAN ;RANDOM SHOULD EQUAL AC + ERROR AC,RAN ;IF NOT MOVE FAILED + CAME AC,RAN# ;IF AC=RAN CAME FAILED + ERROR AC,RAN# ;IF PREVIOUS WORKED,INHIBIT STORE + AC=&17 ;AC ON CAME FAILED +> + AC=2 + LOOP MOVAC1-3,MOVAC1 + +;TEST THE SKIP INST FOR NO SKIP,ABILITY TO LOAD +;AN AC,AC SELECTION,AND AC0 LOGIC(NOT LOADING 0) +;ERRORS ARE PRESENTED IN THE FORM(PC,AC,C(AC),CORRECT) + + AC=5 +SKP: SETUP 30,0 + RANDOM +SKP1: MOVE [0] ;DO NOT USE AC0 FOR SKIP + REPEAT ^D8, +< SKIP AC1,RAN# ;STORE IN AC,DO NOT SKIP,CHECK + CAME AC1,AC ;NEW AC AGAINST PREVIOUSLY + ERROR AC1,AC ;STORED AC. IF AC=AC+1(SKIP LOGIC) + CAME [0] ;IF NOT= STORE CYCLE + ERROR [0] ;IF 0 NONE ZERO ADDR/STORE + AC=&17 + AC1=&17 +> + AC=5 + LOOP SKP1-4,SKP1 + +;TEST SKIPA INST FOR PC INCREMENT,ABILITY TO LOAD AN AC, +;AC SELECTION AND AC0 LOGIC(NOT LOADING 0).ERRORS ARE +;PRESENTED IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=5 +SKPA: SETUP 30,0 + RANDOM +SKPA1: MOVE [0] ;DO NOT USE AC0 FOR SKIPA + REPEAT ^D8, +< SKIPA AC1,AC ;LOAD AC1 AND SKIP + ER AC,[ASCII /SKP/] ;FAILED TO SKIP. + CAME AC,RAN ;C(E) GET CHANGED? + ERROR AC,RAN ;YES. + CAME AC1,RAN ;AC GET LOADED WITH RAN? + ERROR AC1,RAN ;NO. + CAME 0,[0] ;C(AC0) STILL = 0? + ERROR [0] ;CHECK STORE CYCLE,AC ADDRESS + AC=&17 + AC1=&17 +> + AC=5 + LOOP SKPA1-4,SKPA1 + + +;TEST EXCH. BOTH AC AND E ARE AC'S. CHECK FOR +;CORRECT DATA IN AC AND C(E). +;C(E) = -1, C(AC) = RAN NUM. + + AC=5 +EXCH1: SETUP 200,0 +EXCH2: RANDOM +EXCH3: SETOB AC1,RAN1 ;MAKE C(E) = -1. + EXCH AC,AC1 ;DO THE EXCH. + CAME AC,RAN1 ;THE C(AC) SHOULD = ORIG C(E). + ERR RAN1,RAN + CAME AC1,RAN ;THE C(E) SHOULD = ORIG C(AC). + ERR RAN1,RAN + LOOP EXCH2,EXCH3 + + +;TEST SETCA FOR COMPLEMENT AC AND NOT STORING IN C(E) +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) +;SETCA DOES NOT NORMALLY CHANGE THE CONTENTS OF "E" + + AC=10 +BOLCA: REPEAT 2, +< SETUP 100,2 + RANDOM + MOVE AC2,[0] ;CLEAR AC2, USED TO INSURE + SETCA AC,AC2 ;SETCA DOES NOT STORE IN C(E) + CAMN AC,RAN# ;IF AC UNCHANGED CNTL PULSES + ERROR AC,RAN ;FOR INST SETCA FAILED + REPEAT 3, +< SETCA AC,AC2> + CAME AC,RAN# ;A TOTAL OF 4 COMPLEMENTS + ERROR AC,RAN ;SHOULD PRODUCE ORIGINAL NUM + CAME AC2,[0] ;IF SETCA STORED C(E) + ERROR AC2,[0] ;C(AC2) WILL NO LONGER BE 0. + LOOP .-16,.-15 + AC=AC+17 +> + +;TEST SETCAI ABILITY TO COMPLEMENT AC AND FAILURE TO FETCH C(E) +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT +;SETCA IS INDEXED FOR NOISE PURPOSES + + AC=5 +BOLCAI: SETUP 40,0 +BOLCA1: RANDOM +BOLCA2: REPEAT 4, +< MOVE AC1,AC ;MOVE RANDOM TO AN AC + SETCAI AC1,-1(AC) ;TWO COMP SHOULD PRODUCE + SETCAI AC1,777000(AC) ;ORIGINAL NUMBER + CAME AC1,AC ;SETCAI FAILED + ERROR AC1,AC + AC=&17 + AC1=&17 +> + AC=5 + LOOP BOLCA1,BOLCA2 + + +;TEST XOR TO ZERO,XOR 0 TO N,N TO N,-1 TO N +;THREE ACS ARE USED IN THE TEST +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT + + AC=1 +BOLX: REPEAT 3, +< SETUP 200,0 + RANDOM + MOVE AC,[0] ;CLEAR THE AC + XOR AC,RAN ;0 EXCLUSIVE ORED WITH + CAME AC,RAN ;RANDOM SHOULD = RANDOM + ERROR AC,RAN ;XOR FAILED + XOR AC,[0] ;ANY NUMBER XORED + CAME AC,RAN ;WITH THE NUMBER 0 + ERROR AC,RAN ;SHOULD REMAIN UNCHANGED + XOR AC,RAN ;ANY NUMBER XORED + CAME AC,[0] ;WITH ITSELF SHOULD + ERROR AC,[0] ;EQUAL 0 + XOR AC,[-1] ;SET AC TO ALL ONES + XOR AC,RAN ;AC SHOULD CONTAIN COMP OF RAN + XOR AC,[-1] ;RECOMPLEMENT AC TO ORIG + CAME AC,RAN ;CHECK FOR RANDOM + ERROR AC,RAN ;XOR FAILED + LOOP .-22,.-21 + AC=AC+1 +> + + +;TEST SETZI AND IOR. SETZI ABILITY TO CLEAR,IOR RAN TO 0, +;RANDOM TO RANDOM,RANDOM TO COMP RANDOM,0 TO RANDOM +;ERROR IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=5 +BOLZI: SETUP 100,0 + RANDOM +BOLZI1: REPEAT 2, +< MOVE AC,RAN# ;LOAD THE AC THEN + SETZI AC,(AC) ;TRY TO CLEAR IT,INDEX REDUNDANT + CAME AC,[0] ;IF NOT 0 + ERROR AC,[0] ;SETZI FAILED + IOR AC,RAN ;INCLUSIVE OR OF A + CAME AC,RAN ;NUMBER TO 0 SHOULD PRODUCE + ERROR AC,RAN ;THE NUMBER + IOR AC,RAN ;IOR SAME NUMBERS + CAME AC,RAN ;SHOULD HAVE NO EFFECT + ERROR AC,RAN ;ON AC.IOR FAILED + IOR AC,[0] ;IOR OF NO BITS SHOULD DO NOTHING + CAME AC,RAN + ERROR AC,RAN ;IOR FAILED + SETCA AC,0 + IOR AC,RAN ;INCLUSIVE OR OF COMP NUMBERS + CAME AC,[-1] ;SHOULD SET ALL BITS + ERROR AC,[-1] ;IOR FAILED + IOR AC,[-1] ;ALL BITS TO ALL BITS + CAME AC,[-1] ;PRODUCE ALL BITS + ERROR AC,[-1] + AC=&17 +> + AC=5 + LOOP BOLZI1-4,BOLZI1 + +;TEST AND FOR 0 TO 0,1 TO 1,0 TO 1,1 TO 0 +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=10 +BOLA: SETUP 400,0 + RANDOM +BOLA1: AND AC,RAN ;NUMBER AND NUMBeR + CAME AC,RAN ;SHOULD EQUAL NUMBER + ERROR AC,RAN ;IF NOT, "AND" FAILED. + AND AC,[-1] ;"AND" OF ALL BITS WITH + CAME AC,RAN ;ANY NUMBER SHOULD + ERROR AC,RAN ;LEAVE THE NUMBER UNCHANGED + SETCA AC, + AND AC,RAN ;"AND" OF A NUMBER WITH ITS + CAME AC,[0] ;COMPLEMENT SHOULD + ERROR AC,[0] ;PRODUCE 0 + LOOP BOLA1-4,BOLA1 + +;TEST ORCA AND SETO. 1 TO 0,1 TO 1, 0 TO 0, 1 TO 0,0 TO 1 +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) +;ONE AC IS USED FOR TESTING + + AC=12 +BOLOS: SETUP 300,0 + RANDOM +BOLOS1: SETO AC,. ;WILL CHANGE THIS INST IF FETCH/STORE C(E). + CAME AC,[-1] ;CHECK FOR ALL BITS SET + ERROR AC,[-1] ;SETO FAILED + ORCA AC,RAN ;-1 ORED TO RANDOM + CAME AC,RAN ;SHOULD PRODUCE RANDOM + ERROR AC,RAN ;IF AC COMP PROBELY + ORCA AC,RAN ;RANDOM TO RANDOM SHOULD + CAME AC,[-1] ;PRODUCE -1 + ERROR AC,[-1] ;IF AC COMPLEMENTED PROPERLY + ORCA AC,[0] ;WITH NO BITS EFFECT IC COMP AC + ORCA AC,RAN + CAME AC,[-1] ;NO BITS COMPLEMENTS TO PRODUCE + ERROR AC,[-1] ;ALL ONES + LOOP BOLOS1-4,BOLOS1 + + +;TEST ANDCA.1 TO 1,0 TO 0, 0 TO 1,0 TO 0,1 TO 1,1 TO 0 +;ERRORS ARE IN THE FORM(PC,AC,C(AC),CORRECT +;ONE AC IS USED + + AC=13 +BOLAC: SETUP 200,1 + RANDOM +BOLAC1: ANDCA AC,RAN ;ANDCA OF LIKE NUMBERS + CAME AC,[0] ;SHOULD PRODUCE 0 + ERROR AC,[0] ;ANDCA FAILED + ANDCA AC,RAN + CAME AC,RAN ;ANDCA OF ZERO AND NUMBER + ERROR AC,RAN ;SHOULD PRODUCE NUMBER + SETO AC,. ;SET ALL BITS + ANDCA AC,RAN + CAME AC,[0] ;ANDCA OF ALL BITS WITH NUMBER + ERROR AC,[0] ;SHOULD PRODUCE 0 + LOOP BOLAC1-4,BOLAC1 + + +;TEST EQV,1 TO 1,0 TO 0,1 TO 0,0 TO 1. EQV =(SET ALL LIKE BITS) +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=14 +BOLEQ: SETUP 200,2 + RANDOM +BOLEQ1: EQV AC,RAN ;WHEN NUMBERS ARE EQUAL + CAME AC,[-1] ;EQV SHOULD PRODUCE ALL + ERROR AC,[-1] ;BITS SET.EQV FAILED + EQV AC,RAN# + CAME AC,RAN ;WITH AC SET,EQV SHOULD + ERROR AC,RAN ;PRODUCE C(E) IN THE AC + SETZI AC,-1 + EQV AC,RAN ;WHEN AC=0 EQV SHOULD + SETCA AC,. ;PRODUCE COMPLEMENT OF + CAME AC,RAN ;C(E) + ERROR AC,RAN ;EQV FAILED + LOOP BOLEQ1-3,BOLEQ1 + + +;TEST SETM. SET THE CONTENTS OF MEMORY TO THE AC +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=10 +BOLSM: SETUP 100,0 + RANDOM +BOLSM1: REPEAT 2, +< SETM AC1,RAN ;THE NET RESULT OF SETM + CAME AC1,AC ;IS THE SAME AS MOVE + ERROR AC1,RAN ;SETM FAILED + AC=&17 + AC1=&17 +> + AC=10 + LOOP BOLSM1-4,BOLSM1 + +;TEST SETCM. (MOVE THE COMPLEMENT OF MEMORY TO AC) +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=14 +BOLCM: SETUP 100,0 + RANDOM +BOLCM1: SETCM AC1,RAN ;COMP OF RANDOM TO AC + SETCM AC2,AC1 ;RECOMP TO AC2 + CAME AC2,RAN + ERROR AC2,RAN ;SETCM 1 OR 2 FAILED + LOOP BOLCM1-3,BOLCM1 + + +;TEST ORCM. (INCLUSIVE OR THE CONTENTS OF COMPLEMENTED MEMORY +;TO THE CONTENTS OF AC.) ERRORS ARE IN THE FORM (PC,AC, +;C(AC),CORRECT + + AC=5 +BOLOC: SETUP 140,0 + RANDOM +BOLOC1: ORCM AC,RAN ;LIKE NUMBERS SHOULD PRODUCE + CAME AC,[-1] ;ALL BITS SET + ERROR AC,[-1] + ORCM AC,RAN ;ANY NUMBER ORED WITH ALL + CAME AC,[-1] ;ONES SHOULD PRODUCE + ERROR AC,[-1] ;ALL ONES + SETZI AC,-1 + ORCM AC,RAN ;THE RANDOM NUMBER IS + SETCA AC,. ;ORED TO 0. THIS SHOULD + CAME AC,RAN ;PRODUCE THE COMPLEMENT + ERROR AC,RAN ;OF RANDOM + ORCM AC,[-1] + CAME AC,RAN ;ORING -1 SHOULD LEAVE + ERROR AC,RAN ;AC UNCHANGED + LOOP BOLOC1-3,BOLOC1 + + +;TEST ANDCM (AND WITH THE COMP OF MEMORY) +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=10 +BOLAX: SETUP 140,0 + RANDOM +BOLAX1: ANDCM AC,RAN ;LIKE NUMBERS SHOULD + CAME AC,[0] ;PRODUCE 0 + ERROR AC,[0] ;ANDCM FAILED + ANDCM AC,RAN ;ANYTHING ANDED TO + CAME AC,[0] ;ZERO SHOULD = 0 + ERROR AC,[0] + SETO AC, + ANDCM AC,RAN ;AC SHOULD - COMP OF MEMORY + ANDCM AC,[0] ;AC SHOULD REMAIN UNCHANGED + XOR AC,[-1] ;COMP AC + CAME AC,RAN ;AFTER COMP SHOULD EQUAL + ERROR AC,RAN ;RANDOM. ANDCM FAILED + LOOP BOLAX1-3,BOLAX1 + + +;TEST ORCB (INCLUSIVE OR THE COMPLEMENT OF AC AND C(E)) +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=1 +BOLOB: SETUP 140,0 + RANDOM +BOLOB1: ORCB AC,RAN ;PRODUCE COMP OF RAN + ORCB AC,[-1] ;COMP AC + CAME AC,RAN ;CHECK ORCB + ERROR AC,RAN + ORCB AC,[-1] ;COMP AC + ORCB AC,RAN ;ANY TWO COMPLEMENTED NUMBERS + CAME AC,[-1] ;SHOULD PRODUCE ALL ONES + ERROR AC,[-1] + ORCB AC,[0] ;AC COMPLEMENTS TO 0 + CAME AC,[-1] + ERROR AC,[-1] ;ORCB FAILED + LOOP BOLOB1-4,BOLOB1 + + +;TEST ANDCB (AND WITH BOTH OPERANDS COMPLEMENTED) +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=2 +BOLAB: SETUP 140,0 + RANDOM +BOLAB1: ANDCB AC,RAN ;PRODUCE COMP OF RAN + ANDCB AC,[0] ;COMP AC + CAME AC,RAN ;CHECK FOR ORIGIONAL NUMBER + ERROR AC,RAN ;ANDCB FAILED + ANDCB AC,[0] ;COMPLEMENT AC + ANDCB AC,[0] ;RECOMPLEMENT AC + CAME AC,RAN ;SHOULD PRODUCE ORIGIONAL + ERROR AC,RAN ;ANDCB FAILED + ANDCB AC,[-1] ;RESULT SHOULD BE 0 IF + CAME AC,[0] ;CONTENTS OF E + ERROR AC,[0] ;CONTAINS NO BITS AFTER COMP + ANDCB AC,RAN ;AC SHOULD EQUAL COMP OF RAN + ANDCB AC,[0] ;COMP AC + CAME AC,RAN ;THE AND TO 0 + ERROR AC,RAN ;FAILED + LOOP BOLAB1-3,BOLAB1 + + +;TEST SETA (EFFECTIVELY A NO OPERATION IN THIS MODE) +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=3 +BOLSA: SETUP 100,0 + RANDOM + ;DO 7 SETA'S. +BOLSA1: REPEAT 7,< + SETA AC,.> + CAME AC,RAN ;C(AC) SHOULD = ORIG. C(AC) + ERROR AC,RAN + LOOP BOLSA1-3,BOLSA1 + + +;TEST IORM, WHERE E IS AN AC. THE INST IS TESTED +;FOR NOT STORING IN AC AS WELL AS STORING PROPERLY +;IN E. +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=11 +BMIOR: SETUP 100,1 +BMIOR1: RANDOM +BMIOR2: MOVS AC1,AC ;AC=C(E) ORIG + CAMN AC,AC1 ;HALVES SAME? + JRST BMIOR1 ;YES. REJECT. + SETCM AC ;SIM AN + AND AC1 ;IOR + XOR AC ;INST + IORM AC,AC1 ;RESULT TO AC1 + CAMN AC,AC1 ;BOTH SAME? + ERROR AC,AC1 ;YES. STORED IN AC. + CAME AC1,0 ;C(E) = SIM. ANS? + ERROR AC,0 ;NO. IORM FAILED. + LOOP BMIOR1,BMIOR2 + + +;TEST ORCAM, WHERE E IS AN AC. THE INSTRUCTION IS TESTED +;FOR NOT STORING IN AC AS WELL AS STORING PROPERLY IN C(E). +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=12 +BMICA: SETUP 100,1 +BMICA1: RANDOM +BMICA2: MOVS AC1,AC ;SECOND RANDOM NUMBER + SETCM AC2,AC1 ;MOVE COMPLEMENT OF NUMBER + SETCM AC ;SIMULATE + AND AC2 ;THE INSTRUCTION + XOR AC ;IN AC0. + ORCAM AC1,AC ;RESULT TO C(E) + CAMN AC1,AC ;EQUAL? + ERROR AC1,AC ;YES. STORED IN AC. + CAME AC,0 ;C(E) = SIM. ANS? + ERROR AC,0 ;NO. ORCAM FAILED. + LOOP BMICA1,BMICA2 + + +;TEST ORCMM, WHERE E IS AN AC. THE INSTRUCTION +;IS TESTED FOR NOT STORING IN AC AS WELL AS THE +;CORRECT ANSWER IN C(E). +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=13 +BMICM: SETUP 100,0 +BMICM1: RANDOM +BMICM2: MOVS AC1,AC ;SECOND RANDOM NUMBER + SETCM AC2,AC ;SIMULATE + SETCM AC1 ;THE + AND AC2 ;INSTRUCTION + XOR AC1 ;IN AC0 + CAMN 0,AC1 ;IS SIMULATED ANS + JRST BMICM1 ;= C(AC)?...REJECT. + ORCMM AC1,AC ;IF AC1 = AC, STORE INHIBIT + CAMN AC1,AC + ERROR AC1,AC ;FAILED. + CAME AC,0 ;C(E) SHOULD = SIM. ANS. + ERROR AC,0 ;ORCMM FAILED. + LOOP BMICM1,BMICM2 + + +;TEST ORCBM, WHERE E IS AN AC. THE INSTRUCTION +;IS TESTED FOR NOT STORING IN AC AS WELL AS THE +;CORRECT ANSWER IN C(E). +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=14 +BMICB: SETUP 200,0 +BMICB1: RANDOM +BMICB2: MOVS AC1,AC ;AC1= 0101,0011 + SETCM AC2,AC ;AC2= 1100,1010 + SETCM AC2 ;AC0 = 0011,0101 + ANDCM AC1 ;AC0 = 0010,0100 + XOR AC2 ;AC0 = 1110,1110 + ORCBM AC1,AC ;SHOULD PRODUCE SAME LOGIC + CAMN AC1,AC ;EQUAL? + ERROR AC1,AC ;YES. INHIBIT STORE AC FAILED. + CAME AC,0 ;C(E) SHOULD = SIM. ANS. + ERROR AC,0 ;ORCBM FAILED. + LOOP BMICB1,BMICB2 + + +;TEST XORM, WHERE E IS AN AC. THE INSTRUCTION IS +;TESTED FOR NOT STORING AC AS WELL AS CONTENTS +;OF E CORRECTNESS. +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=10 +BMX: SETUP 200,1 +BMX1: RANDOM +BMX2: JUMPE AC,BMX1 ;REJECT IF RAN = 0. + MOVS AC1,AC ;SECOND RANDOM NUMBER. + SETCM AC + ANDCA AC1 ;PERFORM + MOVE AC2,AC ;A PSEUDO + IOR AC2,AC1 ;EXCLUSIVE + ANDCA AC2 ;OR INSTRUCTION + XORM AC1,AC ;DO THE XOR + CAMN AC1,AC ;EQUAL? + ERROR AC1,AC ;YES. INHIBIT STORE AC FAILED. + CAME AC,0 ;C(E) SHOULD = SIM. ANS. + ERROR AC,0 ;XORM FAILED. + LOOP BMX1,BMX2 + + +;TEST EQVM, WHERE E IS AN AC. THE INSTRUCTION +;IS TESTED FOR NOT STORING AC AS WELL AS +;CORRECTNESS OF C(E). +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=10 +BMEQ: SETUP 100,0 +BMEQ1: RANDOM +BMEQ2: MOVS AC1,AC ;SECOND RANDOM NUMBER + SETCM AC1 ;EQV IS SAME LOGIC + XOR AC ;AS XOR WITH COMP AC + EQVM AC1,AC ;EQV SETS ALL LIKE BITS + CAMN AC1,AC ;EQUAL? + ERROR AC1,AC ;YES. INHIBIT STORE AC FAILED. + CAME AC,0 ;C(E) SHOULD = SIM. ANS. + ERROR AC,0 ;EQVM FAILED. + LOOP BMEQ1,BMEQ2 + + + +;TEST ANDM, WHERE E IS AN AC. THE INSTRUCTION IS +;TESTED FOR NOT STORING IN AC AS WELL AS STORING +;PROPERLY IN C(E). +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=3 +BMAN: SETUP 100,0 +BMAN1: RANDOM +BMAN2: MOVS AC1,AC ;SECOND RANDOM NUMBER + MOVE AC ;SIMULATE + IOR AC1 ;AN "AND" + XOR AC1 ;INSTRUCTION. + XOR AC ;IN AC0 + CAMN AC1,AC ;REJECT THE NUMBER + JRST BMAN1 ;IF EQUAL. + ANDM AC1,AC ;THE INSTRUCTION + CAMN AC1,AC ;EQUAL? + ERROR AC1,AC ;YES. INHIBIT STORE AC FAILED. + CAME AC,0 ;C(E) SHOULD = SIM. ANS. + ERROR AC,0 ;AND FAILED. + LOOP BMAN1,BMAN2 + + + +;TEST ANDCAM, WHERE E IS AN AC. THE INSTRUCTION IS +;TESTED FOR NOT STORING IN AN AC AS WELL AS +;STORING C(E) PROPERLY. +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=4 +BMACA: SETUP 100,0 +BMACA1: RANDOM +BMACA2: JUMPE AC,BMACA1 ;REJECT IF RAN = 0. + MOVS AC1,AC ;SECOND RANDOM NUMBER + SETM AC ;SIMULATE + ORCA AC1 ;ANDCA + SETCA ;LOGIC + ANDCAM AC1,AC ;THE INSTRUCTION + CAMN AC1,AC ;EQUAL? + ERROR AC1,AC ;YES. INHIBIT STORE AC FAILED. + CAME AC,0 ;C(E) SHOULD = SIM. ANS. + ERROR AC,0 ;ANDCA FAILED. + LOOP BMACA1,BMACA2 + + +;TEST ANDCMM, WHERE E IS AN AC. THE INSTRUCTION IS +;TESTED FOR NOT STORING IN AN AC AS WELL AS +;STORING C(E) PROPERLY. +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=5 +BMACM: SETUP 100,0 +BMACM1: RANDOM +BMACM2: JUMPE AC,BMACM1 ;REJECT IF RAN = 0. + MOVS AC1,AC ;SECOND RANDOM NUMBER + SETAM AC1,0 ;AC1 TO AC0. + IOR AC ;SIMULATE + XOR AC ;THE INSTUCTION + CAMN 0,AC1 ;SIM ANS = C(AC)? + JRST BMACM1 ;YES. REJECT. + ANDCMM AC1,AC ;DO AN ANDCMM INSTRUCTION. + CAMN AC1,AC ;EQUAL? + ERROR AC1,AC ;YES. INHIBIT STORE AC FAILED. + CAME AC,0 ;C(E) SHOULD = SIM. ANS. + ERROR AC,0 ;ANDCMM FAILED. + LOOP BMACM1,BMACM2 + + +;TEST ANDCBM, WHERE E IS AN AC. THE INSTRUCTION +;IS TESTED FOR NOT STORING IN AC AS WELL AS STORING +;PROPERLY IN C(E). +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=7 +BMACB: SETUP 100,0 +BMACB1: RANDOM +BMACB2: MOVS AC1,AC ;SECOND RANDOM NUMBER. + SETCM AC1 ;SIMULATE + SETCM 1,AC ;AN + AND 1 ;ANDCBM INST. + ANDCBM AC1,AC ;DO AN ANDCBM. + CAMN AC1,AC ;EQUAL? + ERROR AC1,AC ;YES. INHIBIT STORE AC FAILED. + CAME AC,0 ;C(E) SHOULD = SIM. ANS. + ERROR AC,0 ;ANDCBM FAILED. + LOOP BMACB1,BMACB2 + + +;TEST SETCAM, WHERE E IS AN AC. THE INSTRUCTION +;IS TESTED FOR NOT STORING IN AC AS WELL AS +;PROPER C(E). +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=10 +BMCMM: SETUP 200,0 +BMCMM1: RANDOM +BMCMM2: MOVS AC1,AC ;CHECK FOR NO CHANGE + CAMN AC1,AC ;IN 8 COMPLEMENTS + JRST BMCMM1 ;REJECT IF HALF SAME. + + REPEAT 10,< + SETCMM AC1,AC> + CAMN AC1,AC ;EQUAL? + ERROR AC1,AC ;YES. INHIBIT STORE AC FAILED. + CAME AC,RAN ;C(E) SHOULD = ORIG. C(E). + ERROR AC,RAN ;SETCMM FAILED. + LOOP BMCMM1,BMCMM2 + + + ;TEST SETCAM, WHERE E IS AN AC. TEST FOR NOT +;STORING IN AC AS WELL AS PROPER STORAGE IN C(E). +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=11 +BMCAM: SETUP 100,0 +BMCAM1: RANDOM +BMCAM2: MOVS AC1,AC ;SECOND RANDOM NUMBER. + SETCM AC1 ;SIMULATE SETCAM. + SETCAM AC1,AC ;DO SETCAM. + CAMN AC1,AC ;EQUAL? + ERROR AC1,AC ;YES. INHIBIT STORE AC FAILED. + CAME AC,0 ;C(E) SHOULD = SIM. ANS. + ERROR AC,0 ;SETCAM FAILED. + LOOP BMCAM1,BMACM2 + + +;TEST SETAM, WHERE E IS AN AC. +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=10 +BMSA: SETUP 100,0 +BMSA1: RANDOM +BMSA2: MOVS AC1,AC ;SECOND RANDOM NUMBER + CAMN AC1,AC + JRST BMSA1 ;REJECT IF SAME. + SETAM AC,AC1 ;C(AC) TO C(AC1) + CAME AC,AC1 ;EQUAL? + ERROR AC,AC1 ;NO. + CAME AC1,RAN ;C(E) SHOULD = ORIG C(AC). + ERROR AC1,RAN ;SETAM FAILED. + LOOP BMSA1,BMSA2 + + +;TEST SETOM, WHERE E IS AN AC. +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=10 +BMSM: SETUP 100,0 +BMSM1: RANDOM +BMSM2: MOVS AC1,AC ;SECOND RANDOM NUMBER + SETOM AC1,AC ;DO SETOM INST. + CAMN AC1,AC ;EQUAL? + ERROR AC1,AC ;YES. INHIBIT STORE AC FAILED. + CAME AC,[-1] ;C(E) SHOULD = A -1. + ERROR AC,[-1] ;SETOM FAILED. + LOOP BMSM1,BMSM2 + + +;TEST SETMM, WHERE E IS AN AC. +;ERRORS ARE IN THE FORM (PC, AC,C(AC),CORRECT) + + AC=10 +BMSMM: SETUP 100,0 +BMSMM1: RANDOM +BMSMM2: MOVS AC1,AC ;A SECOND RANDOM NUMBER + CAMN AC,AC1 ;REJECT IF + JRST BMSMM1 ;HALF SAME + ;DO 8 SETMM...SHOULD NOT CHANGE C(E). + REPEAT 10,< + SETMM AC1,AC> + CAMN AC1,AC ;EQUAL? + ERROR AC1,AC ;YES. INHIBIT STORE AC FAILED. + CAME AC,RAN ;C(E) SHOULD = ORIG. C(E). + ERROR AC,RAN ;SETMM FAILED. + LOOP BMSMM1,BMSMM2 + + +;TEST SETZM, WHERE E IS AN AC. TESTS FOR NOT STORING +;IN AC AS WELL AS STORING IN C(E) PROPERLY. + + AC=10 +SETZM1: SETUP 40,0 +SETZM2: RANDOM +SETZM3: JUMPE AC,SETZM2 ;REJECT IF C(AC) = 0. + SETOB AC1,RAN1 ;SET C(AC) TO ALL ONES. + SETZM AC1,AC ;DO SETZM + CAME AC,[0] ;DID AC GET CLEARED? + EERR ,RAN1 ;NO. + CAME AC1,[-1] ;DOES C(AC1) STILL = -1? + EERR ,RAN1 ;NO. + LOOP SETZM2,SETZM3 + + +;TEST ROT LEFT 3X(2X18). CHECKING FOR AC1 NOT CHANGED +;AS WELL AS C(AC) BEING THE PROPER NUMBER. +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=10 +ROTL2: SETUP 200,2 +ROTL2A: RANDOM +ROTL2B: SETOB AC1,RAN1 ;SET AC+1 TO ALL ONES. + ;DO 6 X (ROT LEFT 18 PLACES). + REPEAT 3,< + ROT AC,22 + ROT AC,22> + CAME AC,RAN ;C(AC)SHOULD = C(AC) BEFORE ROT. + EERRI ,22 + CAME AC1,[-1] ;AC1 SHOULD NOT HAVE CHANGED. + ERR RAN1,22 + LOOP ROTL2A,ROTL2B + +;TEST ROT RIGHT 3X(2X18)..CHECKING FOR AC1 NOT +;CHANGED AS WELL AS C(AC) ENDING UP BEING +;THE SAME AS IT WAS BEFORE THE ROT. +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=10 +ROTR2: SETUP 300,2 +ROTR2A: RANDOM +ROTR2B: SETOB AC1,RAN1 ;SET AC+1 TO ALL ONES. + ;DO 6 X (ROT RIGHT 18 PLACES). + REPEAT 3,< + ROT AC,-22 + ROT AC,-22> + CAME AC,RAN ;C(AC) SHOULD = C(AC) BEFORE ROT. + EERR ,-22 + CAME AC1,[-1] ;C(AC1) SHOULD STILL = -1. + ERRI RAN1,-22 + LOOP ROTR2A,ROTR2B + + +;TEST ROT LEFT 3X36. CHECKING FOR AC1 NOT +;CHANGED AND C(AC) = WHAT IT WAS BEFORE +;ROT. +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=2 +RTL36: SETUP 300,2 +RTL36A: RANDOM +RTL36B: SETOB AC1,RAN1 ;SET AC+1 TO ALL ONES. + ;DO 3 X (ROT LEFT 36 PLACES). + REPEAT 3,< + ROT AC,44> + CAME AC,RAN ;C(AC) SHOULD = C(AC) BEFORE ROT. + EERRI ,44 + CAME AC1,[-1] ;C(AC1) SHOULD STILL = -1. + ERRI RAN1,44 + LOOP RTL36A,RTL36B + + +;TEST ROT RIGHT 3X36. CHECKING FOR AC1 NOT +;CHANGED AND C(AC) = WHAT IT DID BEFORE ROT. +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=2 +RTR36: SETUP 300,2 +RTR36A: RANDOM +RTR36B: SETOB AC1,RAN1 ;SET AC+1 TO ALL ONES. + ;DO 3 X (ROT RIGHT 36 PLACES). + REPEAT 3,< + ROT AC,-44> + CAME AC,RAN ;C(AC) SHOULD = RAN. + EERRI ,-44 + CAME AC1,[-1] ;C(AC1) SHOULD STILL = -1. + ERRI RAN1,-44 + LOOP RTR36A,RTR36B + + +;TEST ROTC LEFT 3X36 THROUGH ALL AC'S CHECKING +;FOR C(AC) AND C(AC1) BEING EXCHANGED +;AFTER THE ROTC. +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=2 +RTCL: SETUP 100,2 +RTCLA: RANDOM + +RTCLB: REPEAT ^D10,< + MOVE AC,RAN ;MOVE A RAN NUM INTO AN AC. + SETOB AC1,RAN1 ;SET AC+1 TO ALL ONES. + ;DO 3 X (ROTC LEFT 36 PLACES). + REPEAT 3,< + ROTC AC,44> + CAME AC1,RAN ;C(AC1) SHOULD = RAN. + EERRI ,44 + CAME AC,[-1] ;C(AC) SHOULD = A -1. + ERRI RAN1,44 + AC=&17 + AC1=&17 +> + AC=2 + LOOP RTCLA,RTCLB + + +;TEST ROTC RIGHT 3X36 THROUGH ALL AC'S. CHECKING +;FOR C(AC) AND C(AC1) BEING EXCHANGED. +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=2 +RTCR: SETUP 100,2 +RTCRA: RANDOM + +RTCRB: REPEAT ^D10,< + MOVE AC,RAN ;MOVE A RAN NUM INTO AN AC. + SETOB AC1,RAN1 ;SET AC+1 TO ALL ONES. + ;DO 3 X (ROTC RIGHT 36 PLACES). + REPEAT 3,< + ROTC AC,-44> + CAME AC1,RAN ;C(AC1) SHOULD = C(AC) BEFORE ROTC. + EERRI ,-44 + CAME AC,[-1] ;C(AC) SHOULD = C(AC1) BEFORE ROTC. + ERRI RAN1,-44 + AC=&17 + AC1=&17 +> + AC=2 + LOOP RTCRA,RTCRB + + +;TEST ROT. ROT A RANDOM NUMBER A RANDOM NUMBER OF TIMES +;IN ONE DIRECTION AND THEN THE SAME NUMBER OF TIMES +;IN THE OPPOSITE DIRECTION. +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT). + + AC=2 +ROTLR: SETUP 100,4 +ROTLR1: RANDOM + MOVE AC3,RAN ;CHECK TO SEE + AND AC3,[377] ;THAT THE RIGHT MOST 8 BITS + JUMPE AC3,ROTLR1 ;DO NOT = 0..REJECT IF THEY DO. +ROTLR2: MOVN AC2,RAN ;PUT 2'S COMP OF RAN INTO AC2. + SETOB AC1,RAN1 ;SET AC+1 TO ALL ONES. + ROT AC,(AC) ;ROT AC A RANDOM NUMBER OF TIMES. + ROT AC,(AC2) ;ROT AC THE SAME NUM OF TIMES + ;IN THE OPPOSITE DIRECTION. + CAME AC,RAN ;C(AC) SHOULD STILL = C(RAN). + ERROR AC,RAN + CAME AC1,[-1] ;C(AC1) SHOULD STILL = -1. + ERROR AC1,[-1] + LOOP ROTLR1,ROTLR2 + + +;TEST ROTC. DO A ROTC WITH A RANDOM NUMBER A RANDOM +;NUMBER OF TIMES IN ONE DIRECTION AND THEN THE SAME +;NUMBER OF TIMES IN THE OPPOSITE DIRECTION. +;REPEAT THIS TEST FOR ALL AC'S. +;ERRORS ARE IN THE FORM (PC,AC,C(AC),CORRECT) + + AC=2 +RTCLR: SETUP 200,3 +RTCLR1: RANDOM + MOVE AC3,RAN ;CHECK TO SEE + AND AC3,[377] ;THAT THE RIGHT MOST 8 BITS + JUMPE AC3,RTCLR1 ;DO NOT = 0..REJECT IF THEY DO. + +RTCLR2: REPEAT ^D10,< + MOVE AC,RAN ;MOVE A RAN NUM INTO AN AC. + MOVN AC2,RAN ;MOVE THE 2'S COMP INTO ANOTHER AC. + SETO AC1, ;SET AC1 TO ALL ONES. + ROTC AC,(AC) ;ROTC AC A RANDOM NUMBER OF + ;TIMES IN ONE DIRECTION. + ROTC AC,(AC2) ;ROTC AC THE SAME NUMBER OF + ;TIMES IN THE OPPOSITE DIRECTION. + CAME AC,RAN ;C(AC) SHOULD STILL = RAN. + ERROR AC,RAN + CAME AC1,[-1] ;C(AC1) SHOULD STILL =-1 + ERROR AC1,[-1] + AC=&17 + AC1=&17 + AC2=&17 + +> + AC=2 + LOOP RTCLR1,RTCLR2 + + +;TEST OVERFLOW ON A ROT LEFT...AROV SHOULD NOT COME UP. + + AC=2 +ROTOV: SETUP 20,0 +ROTOV1: RANDOM +ROTOV2: JUMPE AC,ROTOV1 ;REJECT IF RAN = 0. + CAMN AC,[-1] ;ALSO REJECT IF RAN = -1. + JRST ROTOV1 + JFCL 10,.+1 ;CLEAR OV FLAG. + ROT AC,256 ;ROT C(AC) 256 TIMES. + JFCL 10,.+2 ;OV FLAG GET SET? + JRST .+2 ;NO. + ER AC,[ASCII /OV/] ;YES. SHOULD NOT SET ON A ROT. + LOOP ROTOV1,ROTOV2 + + +;TEST OVERFLOW FLAG ON A ROT RIGHT...SHOULD NEVER GET SET. + + AC=3 +RTROV: SETUP 20,0 +RTROV1: RANDOM +RTROV2: JUMPE AC,RTROV1 ;REJECT IF RAN = 0. + CAMN AC,[-1] ;ALSO REJECT IF RAN = -1. + JRST RTROV1 + JFCL 10,.+1 ;CLEAR OVERFLOW FLAG. + ROT AC,-256 ;ROT AC RIGHT 256 TIMES. + JFCL 10,.+2 ;OVERFLOW FALG GET SET? + JRST .+2 ;NO. + ER AC,[ASCII /OV/] + LOOP RTROV1,RTROV2 + + +;TEST MOVEM. AFTER FOLLOWED BY +;, C(AC) SHOULD = ORIG C(AC). +;RAN TO RAN1. + + AC=2 +MVEM1: SETUP 30,0 +MVEM2: RANDOM + ;DO 3 SETS OF MOVEM'S. +MVEM3: REPEAT 3,< + MOVEM AC,AC1 + MOVEM AC1,AC> + CAME AC,RAN ;C(AC) SHOULD = ORIG C(AC). + ERROR AC,RAN + CAME AC1,RAN ;C(AC1) SHOULD ALSO = ORIG. C(AC). + ERROR AC1,RAN + LOOP MVEM2,MVEM3 + + +;TEST MOVES. AFTER 6 MOVES IN A ROW, THE C(E) +;SHOULD = ORIG C(E). + + AC=2 +MVES1: SETUP 200,1 +MVES2: RANDOM + ;DO 6 MOVE INSTRUCTIONS. +MVES3: REPEAT 3,< + MOVES AC1,AC + MOVES AC1,AC> + CAME AC1,AC ;C(AC) SHOULD = C(E). + ERROR AC1,AC + CAME AC,RAN ;C(E) SHOULD = ORIG C(E). + ERROR AC,RAN + LOOP MVES2,MVES3 + + +;TEST MOVS INSTRUCTION...TWO MOVS SHOULD GIVE SAME NUMBER. + + AC=4 +MOVSA: SETUP 200,2 +MOVSB: RANDOM + ;DO 6 MOVS INSTRUCTIONS. +MOVSC: REPEAT 3,< + MOVS AC,AC + MOVS AC,AC> + CAME AC,RAN ;C(AC) SHOULD STILL = RAN. + EERR ,RAN + LOOP MOVSB,MOVSC + + +;TEST MOVS INSTRUCTION...MOVS FOLLOWED BY ROT SHOULD GIVE +;SAME NUMBER. + + AC=5 +MOVS1: SETUP 200,1 +MOVS2: RANDOM +MOVS3: MOVS AC,AC ;DO MOVS INSTRUCTION. + ROT AC,22 ;ROT LEFT 18 PLACES. + CAME AC,RAN ;C(AC) SHOULD NOW = RAN. + EERR ,RAN + LOOP MOVS2,MOVS3 + + +;TEST MOVSM....TWO MOVSM SHOULD GIVE THE ORIG. NUM. + + AC=6 +MOVSMA: SETUP 300,1 +MOVSMB: RANDOM + +MOVSMC: REPEAT 3,< + MOVSM AC,AC1 + MOVSM AC1,AC> + CAME AC,RAN ;C(AC) SHOULD NOW BE = TO RAN. + ERROR AC,RAN + LOOP MOVSMB,MOVSMC + + +;TEST MOVSS...TWO MOVSS SHOULD GIVE THE ORIGINAL NUMBER. + + AC=7 +MOVSSA: SETUP 200,0 +MOVSSB: RANDOM +MOVSSC: SETZB 0,RAN1 ;CLEAR AC0. + + REPEAT 3,< + MOVSS AC + MOVSS AC> + CAME AC,RAN ;C(AC) SHOULD NOW BE = TO RAN. + EERR ,RAN1 + CAME [0] ;C(AC0) SHOULD STILL = 0. + EERR ,RAN1 + LOOP MOVSSB,MOVSSC + + +;TEST MOVSI. + + AC=10 +MOVSIA: SETUP 100,0 +MOVSIB: RANDOM + MOVE AC2,RAN ;PUT RAN INTO AN AC. +MOVSIC: ANDI AC,-1 ;SIMULATE + ROT AC,22 ;A MOVSI INST. + MOVSI AC1,(AC2) ;DO MOVSI. + CAME AC1,AC ;C(AC1) SHOULD = SIM. ANS. + ERROR AC1,AC + LOOP MOVSIB,MOVSIC + + +;TEST LSH. SIMULATE A LSH 18 PLACES WITH A MOVSI. + + AC=11 +LSHA: SETUP 200,1 +LSHB: RANDOM +LSHC: SETO AC1, ;SET AC+1 TO ALL ONES. + MOVSI AC2,(AC) ;SIMULATE LSH 18 PLACES. + LSH AC,22 ;DO LSH + CAME AC,AC2 ;C(AC) SHOULD = SIM. ANS. + ERROR AC,AC2 + CAME AC1,[-1] ;AC1 GET CHANGED? + ERROR AC1,[-1] ;YES. + LOOP LSHB,LSHC + + +;TEST LSH RIGHT 18 PLACES. + + AC=10 +LSH1: SETUP 200,1 +LSH2: RANDOM +LSH3: SETOB AC1,RAN1 ;SET C(AC+1) TO ALL ONES. + LSH AC,-22 ;DO LSH RIGHT 18 PLACES. + MOVS AC2,RAN ;SIMULATE + ANDI AC2,-1 ;LSH. + CAME AC,AC2 ;C(AC) SHOULD = SIM. ANS. + EERRI ,-22 + CAME AC1,[-1] ;C(AC+1) GET CHANGED? + ERRI RAN1,-22 + LOOP LSH2,LSH3 + + +;TEST ASH ABILITY TO SET OR NOT SET OVERFLOW FLAG. + + AC=10 +ASHOV: SETUP 30,0 +ASHOV1: SETO AC, ;SET AC TO ALL ONES..1,1 CONDITION. + JFCL 10,.+1 ;CLEAR OV FLAG. + ASH AC,1 ;DO ASH. + JFCL 10,.+2 ;OVERFLOW FLAG GET SET? + JRST .+2 ;NO. + ER AC,[ASCII /OV/] ;YES. 1,1 CONDITION SHOULD NOT SET IT. + JFCL 10,.+1 ;CLEAR OV FLAG. + SETZ AC, ;CLEAR AC...0,0 CONDITION. + ASH AC,1 ;DO ASH. + JFCL 10,.+2 ;OVERFLOW FLAG GET SET? + JRST .+2 ;NO. + ER AC,[ASCII /OV/] ;YES. 0,0 COND. SHOULDN'T SET IT. + JFCL 10,.+1 ;CLEAR OV FLAG. + MOVSI AC,377777 ;SET AC FOR 0,1 CONDITION. + ASH AC,1 ;DO ASH. + JFCL 10,.+2 ;OVERFLOW FLAG GET SET? + ER AC,[ASCII /OV/] ;NO. 0,1 COND. SHOULD SET IT. + JFCL 10,.+1 ;CLEAR OV FLAG. + MOVSI AC,400000 ;SET AC FOR 1,0 CONDITION. + ASH AC,1 ;DO ASH. + JFCL 10,.+2 ;OV FLAG GET SET? + ER AC,[ASCII /OV/] ;NO. 1,0 COND. SHOULD SET IT. + LOOP ASHOV1,ASHOV1 + + +;TEST ASH. DO ASH RIGHT 36 PLACES WITH ORIG. +;C(AC) = 400000000000. AFTER ASH THE C(AC) SHOULD = A -1. + + AC=10 +ASH1: SETUP 20,0 +ASH2: MOVE AC,[XWD 400000,0] ;MAKE C(AC) = ALL 0'S WITH SIGN BIT SET. + ASH AC,-44 ;DO ASH RIGHT 36 PLACES...SIGN + CAME AC,[-1] ;BIT SHOULD HAVE SET ALL BITS TO A ONE. + ERROR AC,[-1] + LOOP ASH2,ASH2 + + +;TEST ASH. DO ASH LEFT 36 PLACES WITH ORIG. C(AC) = +;TO A -1. AFTER ASH THE C(AC) SHOULD = THE SIGN +;BIT SET AND THE REST ZEROS. + + AC=11 +ASH3: SETUP 20,0 +ASH4: MOVE AC,[-1] ;MAKE C(AC) = A -1. + ASH AC,44 ;DO ASH LEFT 36 PLACES..0'S GOING + CAME AC,[XWD 400000,0] ;INTO BIT 35 SHOULD JUST LEAVE SIGN BIT SET. + ERROR AC,[0] + LOOP ASH4,ASH4 + + +;TEST ADD. RAN TO 0 CONDITION. + + AC=10 +ADD1: SETUP 100,0 +ADD2: RANDOM +ADD3: SETZ AC, ;CLEAR AC. + ADD AC,RAN ;ADD RAN TO 0. + CAME AC,RAN ;C(AC) SHOULD = RAN NUM. + ERROR AC,RAN + LOOP ADD2,ADD3 + + +; TEST ADD. 0 TO RAN CONDITION. + + AC=10 +ADD1A: SETUP 100,0 +ADD2A: RANDOM + ;ADD A CONSTANT 0 TO RAN 5 TIMES. +ADD3A: REPEAT 5,< + ADD AC,[0]> + CAME AC,RAN ;C(AC) SHOULD STILL = RAN NUM. + ERROR AC,RAN + LOOP ADD2A,ADD3A + + +;TEST ADD. ADD 1'S COMP OF RAN TO RAN. +;SHOULD GET A -1. + + AC=10 +ADD1B: SETUP 100,0 +ADD2B: RANDOM +ADD3B: SETCM AC1,RAN ;1'S COMP OF RAN TO AC1. + ADD AC,AC1 ;ADD IT TO RAN. + CAME AC,[-1] ;C(AC) SHOULD = -1. + ERROR AC,[-1] + LOOP ADD2B,ADD3B + + +;TEST ADD. CHECK CRY0,CRY1,AND OV FLAGS. +;ADD, TO A RANDOM NUMBER, A -1 AND THEN A +1. +;CRY0 AND CRY1 SHOULD BOTH GET SET AND AROV SHOULD NOT GET SET. + + AC=10 +ADD1C: SETUP 400,2 +ADD2C: RANDOM +ADD3C: JFCL 17,.+1 ;CLEAR ALL FLAGS. + ADD AC,[-1] ;ADD A -1 TO RAN. + ADD AC,[1] ;ADD A +1 TO ANS OF ADDITION OF RAN AND A -1. + CAME AC,RAN ;C(AC) SHOULD = ORIG C(AC). + ERROR AC,RAN + JFCL 4,CRY0A + JFCL 2,.+2 + JRST BOTHF + ER AC,[ASCII /CRY0/];CRY0 FAILED TO GET SET. +CRY0A: JFCL 2,.+2 + ER AC,[ASCII /CRY1/];CRY1 FAILED TO GET SET. + JRST AROVA +BOTHF: ER AC,[ASCII /CRY01/];BOTH CRY0 + CRY1 FAILED TO GET SET. +AROVA: JFCL 10,.+2 + JRST ADD4C + ER AC,[ASCII /OV/] ;AROV GOT SET. +ADD4C: LOOP ADD2C,ADD3C + + +;TEST ADDM. WHERE E IS AN AC. +;RAN TO 0 CONDITION. + + AC=4 +ADDM1: SETUP 100,0 +ADDM2: RANDOM + MOVE AC2,RAN ;SAVE RAN IN AN AC. +ADDM3: SETZB AC1,RAN1 ;MAKE C(E) = 0. + ADDM AC,AC1 ;DO ADDM. + CAME AC2,AC1 ;C(E) SHOULD =ORIG C(AC). + ERRM RAN1,RAN + LOOP ADDM2,ADDM3 + + +;TEST ADDM. WHERE E IS AN AC. +;0 TO RAN CONDITION. + + AC=5 +ADDM1A: SETUP 100,0 +ADDM2A: RANDOM + MOVE AC2,RAN ;SAVE RAN IN AN AC. +ADDM3A: SETZB AC1,RAN1 ;MAKE C(AC) = 0. + ADDM AC1,AC ;DO ADDM. + CAME AC2,AC ;C(E) SHOULD = ORIG C(E). + EERRM ,RAN1 + LOOP ADDM2A,ADDM3A + + +;TEST ADDM. WHERE E IS AN AC. +;1'S COMP RAN TO RAN. + + AC=6 +ADDM1B: SETUP 100,0 +ADDM2B: RANDOM +ADDM3B: SETCM AC1,AC ;MAKE C(AC) = 1'S COMP OF C(E). + MOVE RAN1,AC1 ;SAVE C(AC) IN CASE OF ERROR. + ADDM AC1,AC ;DO ADDM. + CAME AC,[-1] ;C(E) SHOULD = A -1. + EERRM ,RAN1 + LOOP ADDM2B,ADDM3B + + +;TEST ADDI. CHECK C(AC) FOR CORRECT DATA. +;0 TO RAN CONDITION. + + AC=2 +ADDI1: SETUP 20,0 +ADDI2: RANDOM +ADDI3: ADDI AC,0 ;DO ADDI. + CAME AC,RAN ;C(AC) SHOULD = ORIG C(AC). + EERRI ,0 + LOOP ADDI2,ADDI3 + + +;TEST ADDI. CHECK FOR CORRECT DATA IN AC. +;RAN TO 0 CONDITION. + + AC=2 +ADDI1A: SETUP 100,0 +ADDI2A: RANDOM +ADDI3A: SETZB AC1,RAN1 ;CLEAR C(AC). + MOVEI AC2,(AC) ;SIMULATE ADDI. + ADDI AC1,(AC) ;DO ADDI. + CAME AC1,AC2 ;C(AC) SHOULD = SIM. ANS. + ERRI RAN1,(AC) + LOOP ADDI2A,ADDI3A + + +;TEST ADDI. CHECK FOR CORRECT DATA IN AC. +;1'S COMP RAN TO RAN. + + AC=3 +ADDI1B: SETUP 40,0 +ADDI2B: RANDOM +ADDI3B: SETCM AC1,AC ;MAKE C(AC) = 1'S COMP OF E. + MOVE AC2,AC1 ;SIMULATE + IORI AC2,-1 ;ADDI INST. + MOVE RAN1,AC1 ;SAVE C(AC) IN CASE OF ERROR. + ADDI AC1,(AC) ;DO ADDI. + CAME AC1,AC2 ;C(AC) SHOULD = SIM. ANS. + ERRI RAN1,(AC) + LOOP ADDI2B,ADDI3B + + +;TEST ADDB. CHECK FOR C(AC) = C(E), AND CORRECT +;DATA IN AC FOR 0 TO RAN CONDITION. + + AC=4 +ADDB1: SETUP 100,0 +ADDB2: RANDOM +ADDB3: SETZB AC1,RAN1 ;CLEAR C(E). + ADDB AC,AC1 ;DO ADDB. + CAME AC,AC1 ;C(AC) SHOULLD = C(E). + ERR RAN1,RAN + CAME AC,RAN ;C(AC) SHOULD = ORIG C(AC). + ERR RAN1,RAN + LOOP ADDB2,ADDB3 + + +;TEST ADDB. CHECK FOR C(AC) = C(E), AND CORRECT +;DATA IN AC FOR RAN TO 0 CONDITION. + + AC=5 +ADDB1A: SETUP 100,0 +ADDB2A: RANDOM +ADDB3A: SETZB AC1,RAN1 ;CLEAR C(AC). + ADDB AC1,AC ;DO ADDB. + CAME AC1,AC ;C(AC) SHOULD = C(E). + EERR ,RAN1 + CAME AC1,RAN ;C(AC) SHOULD = ORIG C(E). + EERR ,RAN1 + LOOP ADDB2A,ADDB3A + + +;TEST ADDB. CHECK FOR C(AC) = C(E), AND CORRECT DATA +;IN AC FOR NOT RAN TO RAN CONDITION. + + AC=6 +ADDB1B: SETUP 100,0 +ADDB2B: RANDOM +ADDB3B: SETCM AC1,AC ;MAKE C(E) = 1'S COMP OF C(AC). + MOVE RAN1,AC1 ;SAVE C(E) IN CASE OF ERROR. + ADDB AC,AC1 ;DO ADDB. + CAME AC,AC1 ;C(AC) SHOULD = C(E). + ERR RAN1,RAN + CAME AC,[-1] ;C(AC) SHOULD = A -1. + ERR RAN1,RAN + LOOP ADDB2B,ADDB3B + + +;TEST SUB. CHECK C(AC) FOR CORRECT DATA. +;0 TO RAN CONDITION. + + AC=2 +SUB1: SETUP 100,0 +SUB2: RANDOM +SUB3: SETZB AC1,RAN1 ;CLEAR C(E). + + REPEAT 3,< + SUB AC,AC1> + CAME AC,RAN ;C(AC) SHOULD STILL = ORIG C(AC). + ERR RAN1,RAN + LOOP SUB2,SUB3 + + +;TEST SUB. CHECK C(AC) FOR CORRECT DATA. +;RAN TO 0 CONDITION. + + AC=2 +SUB1A: SETUP 100,0 +SUB1B: RANDOM +SUB1C: SETZB AC1,RAN1 ;CLEAR C(AC). + MOVN AC2,RAN ;ANY NUM FROM 0 = 2'S COMP OF THAT NUM. + SUB AC1,AC ;SUBTRACT RAN FROM 0. + CAME AC1,AC2 ;C(AC) SHOULD = SIM. ANS. + EERR ,RAN1 + LOOP SUB1B,SUB1C + + +;TEST SUB. CHECK C(AC) FOR CORRECT DATA. +;SUB RAN FROM RAN. + + AC=2 +SUB2A: SETUP 100,0 +SUB2B: RANDOM +SUB2C: MOVE AC1,AC ;MAKE C(E) = C(AC). + SUB AC,AC1 ;SUB RAN FROM RAN. + CAME AC,[0] ;C(AC) SHOULD = 0. + EERR ,RAN + LOOP SUB2B,SUB2C + + +;TEST SUBM. WHERE E IS AN AC. +;RAN TO 0 CONDITION. + + AC=7 +SUBM1: SETUP 100,0 +SUBM2: RANDOM +SUBM3: SETZB AC1,RAN1 ;CLEAR C(AC). + MOVN AC2,AC ;SIM SUB..RAN FROM 0 = 2'S COMP RAN. + SUBM AC1,AC ;DO SUBM. + CAME AC2,AC ;C(E) SHOULD = SIM. ANS. + EERRM ,RAN1 + LOOP SUBM2,SUBM3 + +;TEST SUBM. SHERE E IS AN AC. +;0 TO RAN CONDITION. + + AC=10 +SUBM1A: SETUP 100,0 +SUBM2A: RANDOM + MOVE AC2,RAN ;SAVE RAN IN AN AC. +SUBM3A: SETZB AC1,RAN1 ;CLEAR C(E). + SUBM AC,AC1 ;DO SUBM...0 FROM RAN = RAN. + CAME AC2,AC1 ;C(E) SHOULD = ORIG C(AC). + ERRM RAN1,RAN + CAME AC,RAN ;C(AC) SHOULD = ORIG C(AC). + ERRM RAN1,RAN + LOOP SUBM2A,SUBM3A + + +;TEST SUBM. WHERE E IS AN AC. +;RAN TO RAN CONDITION. + + AC=11 +SUBM1B: SETUP 100,0 +SUBM2B: RANDOM +SUBM3B: MOVE AC1,AC ;MAKE C(E) = C(AC). + SUBM AC,AC1 ;DO SUBM. + CAME AC1,[0] ;C(E) SHOULD = 0. + EERRM ,RAN + CAME AC,RAN ;C(AC) SHOULD = ORIG C(AC). + EERRM ,RAN + LOOP SUBM2B,SUBM3B + + +;TEST SUBI. CHECK C(AC) FOR CORRECT DATA. +;0 TO RAN CONDITION. + + AC=10 +SUBI1: SETUP 20,0 +SUBI2: RANDOM +SUBI3: SUBI AC,0 ;DO SUBI..0 FROM RAN = RAN. + CAME AC,RAN ;C(AC) SHOULD = ORIG C(AC). + EERRI ,0 + LOOP SUBI2,SUBI3 + + +;TEST SUBI. CHECK C(AC) FOR CORRECT DATA. +;RAN TO 0 CONDITION. + + AC=10 +SUBI1A: SETUP 20,0 +SUBI2A: RANDOM +SUBI3A: SETZB AC1,RAN1 ;CLEAR C(AC). + MOVNI AC2,(AC) ;SIM SUB..RAN FROM 0 = 2'S COMP RAN. + SUBI AC1,(AC) ;DO SUBI. + CAME AC1,AC2 ;C(AC) SHOULD = SIM ANS. + ERRI RAN1,(AC) + LOOP SUBI2A,SUBI3A + + +;TEST SUBI. CHECK C(AC) FOR CORRECT DATA. +;RAN TO RAN CONDITION. + + AC=10 +SUBI1B: SETUP 20,0 +SUBI2B: RANDOM + MOVE RAN1,AC ;SAVE C(AC) IN CASE OF ERROR. +SUBI3B: MOVE AC1,AC ;SIMULATE A + AND AC1,[XWD -1,0] ;SUBI RAN FROM RAN. + SUBI AC,(AC) ;DO SUBI. + CAME AC,AC1 ;C(AC) SHOULD = SIM. ANS. + ERRI RAN1,(RAN1) + LOOP SUBI2B,SUBI3B + + +;TEST SUBB. CHECK THAT C(AC) = C(E) AND C(AC) +;= CORRECT DATA. +;0 TO RAN. + + AC=10 +SUBB1: SETUP 20,0 +SUBB2: RANDOM +SUBB3: SETZB AC1,RAN1 ;CLEAR C(E). + SUBB AC,AC1 ;DO SUBB..0 FROM RAN = RAN. + CAME AC,AC1 ;C(AC) SHOULD = C(E). + ERR RAN1,RAN + CAME AC,RAN ;C(AC) SHOULD = ORIG C(AC). + ERR RAN1,RAN + LOOP SUBB2,SUBB3 + + +;TEST SUBB. CHECK C(AC) = C(E) AND C(AC) FOR +;CORRECT DATA. +;RAN TO 0 CONDITION. + + AC=10 +SUBB1A: SETUP 20,0 +SUBB2A: RANDOM +SUBB3A: SETZB AC1,RAN1 ;CLEAR C(AC). + MOVN AC2,AC ;SIMULATE SUB...RAN FROM 0 = 2'S COMP RAN. + SUBB AC1,AC ;DO SUBB. + CAME AC1,AC ;C(AC) SHOULD = C(E). + EERR ,RAN1 + CAME AC1,AC2 ;C(AC) SHOULD = SIM. ANS. + EERR ,RAN1 + LOOP SUBB2A,SUBB3A + + +;TEST SUBB. CHECK C(AC) = C(E) AND FOR +;CORRECT DATA IN AC. +;RAN TO RAN CONDITION. + + AC=10 +SUBB1B: SETUP 40,0 +SUBB2B: RANDOM +SUBB3B: MOVE AC1,AC ;MAKE C(E) = C(AC). + SUBB AC,AC1 ;DO SUBB..RAN FROM RAN = 0. + CAME AC,AC1 ;C(AC) SHOULD = C(E). + EERR ,RAN + CAME AC,[0] ;C(AC) SHOULD = 0. + EERR ,RAN + LOOP SUBB2B,SUBB3B + + + +;TEST MOVEI. CHECK C(AC) FOR CORRECT DATA. +;RAN TO RAN1. + + AC=2 +MVEI1: SETUP 20,0 +MVEI2: RANDOM + MOVE AC2,RAN ;SAVE RAN IN AN AC. +MVEI3: MOVSS RAN1,AC ;MAKE C(AC) = SEC RAN NUM. + MOVE AC1,RAN ;SIMULATE + LSH AC1,22 ;A + LSH AC1,-22 ;MOVEI. + MOVEI AC,(AC2) ;DO A MOVEI. + CAME AC,AC1 ;C(AC) SHOULD = SIM. ANS. + ERRI RAN1,(AC2) + LOOP MVEI2,MVEI3 + + +;TEST MOVN. TWO MOVN INSTRUCTIONS SHOULD NOT CHANGE C(AC). + + AC=2 +MOVN1: SETUP 200,0 +MOVN2: RANDOM + ;DO 6 X (MOVN RAN TO RAN). +MOVN3: REPEAT 3,< + MOVN AC,AC + MOVN AC,AC> + CAME AC,RAN ;C(AC) SHOULD STILL = RAN NUM. + ERROR AC,RAN + LOOP MOVN2,MOVN3 + + +;TEST MOVNI. CHECK C(AC) FOR CORRECT DATA. +;RAN TO RAN1. + + AC=2 +MVNI1: SETUP 40,0 +MVNI2: RANDOM + MOVE AC2,RAN ;SAVE RAN IN AN AC. +MVNI3: MOVSS RAN1,AC ;C(AC) = SEC RAN NUM. + MOVEI AC1,(AC2) ;SIMULATE + SETCA AC1, ;A + ADD AC1,[1] ;MOVNI INST. + MOVNI AC,(AC2) ;DO A MOVNI. + CAME AC,AC1 ;C(AC) SHOULD = SIM. ANS. + ERRI RAN1,(AC2) + LOOP MVNI2,MVNI3 + + +;TEST MOVNM. WHERE E IS AN AC. +;CHECK C(E) FOR CORRECT DATA. +;RAN TO RAN. + + AC=2 +MVNM1: SETUP 100,0 +MVNM2: RANDOM + MOVE RAN1,RAN ;SAVE RAN IN AN AC. +MVNM3: MOVE AC1,AC ;MAKE C(E) = C(AC). + ;DO 3 X 2(MOVNM). + REPEAT 3,< + MOVNM AC,AC1 + MOVNM AC1,AC> + CAME RAN1,AC ;C(E) SHOULD = ORIG C(E). + EERRM ,RAN + LOOP MVNM2,MVNM3 + + +;TEST MOVNS. WHERE E IS AN AC. +;CHECK PROPER STORING OF C(E) INTO AC. +;TWO MOVNS = ORIG NUMBER. +;C(E) = RAN. + + AC=3 +MVNS1: SETUP 100,0 +MVNS2: RANDOM + MOVE AC2,RAN ;PUT C(RAN) INTO AC2 FOR FUTURE COMPARE. +MVNS3: SETOB AC1,RAN1 ;MAKE C(AC) = -1. + ;DO 3 X 2(MOVNS). + REPEAT 3,< + MOVNS AC1,AC + MOVNS AC1,AC> + CAME AC1,AC ;C(AC) SHOULD = C(E). + EERRM ,RAN1 + CAME AC2,AC ;C(E) SHOULD = ORIG. C(E). + EERRM ,RAN1 + LOOP MVNS2,MVNS3 + + +;TEST MOVNS. WHERE E IS AN AC. +;CHECK FOR NOT LOADING C(E) INTO AC WHEN AC= 0. +;TWO MOVNS = ORIGINAL NUM. +;C(E) = RAN. + + AC=10 +MVNSA: SETUP 40,0 +MVNSB: RANDOM + MOVE AC2,RAN ;SAVE RAN IN AN AC. +MVNSC: SETOB RAN1 ;MAKE C(AC) = -1. + ;DO 3 X 2(MOVNS). + REPEAT 3,< + MOVNS AC + MOVNS AC> + CAMN AC ;C(AC) SHOULD NOT = C(E). + EERRM ,RAN1 + CAME AC2,AC ;C(AC) SHOULD = ORIG C(AC). + EERRM ,RAN1 + LOOP MVNSB, MVNSC + + +;TEST MOVM. CHECK F(AC) FOR CORRECT DATA. +;RAN TO RAN1. + + AC=7 +MVM1: SETUP 40,0 +MVM2: RANDOM +MVM3: MOVSS RAN1,AC ;C(AC) = SEC RAN NUM. + MOVE AC1,RAN ;C(E) = 1ST RAN NUM. + SETCM AC2,AC1 ;SIMULATE + TLNN AC1,400000 ;A + MOVE AC2,AC1 ;MOVM + TLNE AC1,400000 ;INST. + ADD AC2,[1] + MOVM AC,AC1 ;DO A MOVM. + CAME AC,AC2 ;C(AC) SHOULD = SIM. ANS. + EERR ,RAN1 + LOOP MVM2, MVM3 + + +;TEST MOVMI. CHECK C(AC) FOR CORRECT DATA. +;RAN TO RAN1. + + AC=10 +MVMI1: SETUP 40,0 +MVMI2: RANDOM +MVMI3: MOVEI AC1,AC ;SIMULATE A MOVMI INST...MOVEI. + MOVSS RAN1,AC ;C(AC) = SEC RAN NUM. + MOVMI AC,(AC1) ;DO MOVMI. + CAME AC,AC1 ;C(AC) SHOULD = SIM ANS. + ERRI RAN1,(AC1) + LOOP MVMI2, MVMI3 + + +;TEST MOVMM. CHECK C(AC) + C(E) FOR CORRECT DATA. +;RAN TO RAN1. + + AC=11 +MVMM1: SETUP 200,0 +MVMM2: RANDOM +MVMM3: MOVSS RAN1,AC ;C(AC) = SEC RAN NUM. + MOVE AC1,RAN ;C(E) = RAN. + SETCM AC2,AC ;SIMULATE + TLNN AC,400000 ;A + MOVE AC2,AC ;MOVMM + TLNE AC,400000 ;INST + ADD AC2,[1] + MOVMM AC,AC1 ;DO A MOVMM INST. + CAME AC,RAN1 ;C(AC) SHOULD = ORIG C(AC). + EERRM ,RAN1 + CAME AC1,AC2 ;C(E) SHOULD = SIM. ANS. + EERRM ,RAN1 + LOOP MVMM2, MVMM3 + + +;TEST MOVMS. CHECK C(E) FOR CORRECT DATA. +;RAN TO RAN1. + + AC=10 +MVMS1: SETUP 200,0 +MVMS2: RANDOM +MVMS3: MOVSS RAN1,AC ;C(AC) = SEC RAN NUM. + MOVE AC1,RAN ;C(E) = RAN. + SETCM AC2,RAN ;SIMULATE + TLNN AC1,400000 ;A + MOVE AC2,AC1 ;MOVMS + TLNE AC1,400000 ;INST. + ADD AC2,[1] + MOVMS AC,AC1 ;DO A MOVMS. + CAME AC,AC1 ;C(AC) SHOULD = C(E). + EERRM ,RAN1 + CAME AC1,AC2 ;C(E) SHOULD = SIM. ANS. + EERRM ,RAN1 + LOOP MVMS2, MVMS3 + + +;TEST LSH. A LSH LEFT AND A LSH RIGHT SHOULD +;GIVE THE SAME NUMBER WITH A ZERO SIGN BIT. + + AC=2 +LSH1P: SETUP 40,0 +LSH1PA: RANDOM +LSH1PB: AND AC,[XWD 377777,-1] ;SIMULATE A LSH LEFT THEN RIGHT. + MOVE AC1,RAN ;MOVE RANDOM NUM INTO AN AC + ;AND DO 3(LSH LEFT 1 PLACE THEN RIGHT 1 PLACE). + REPEAT 3,< + LSH AC1,1 + LSH AC1,-1> + CAME AC1,AC ;C(AC1) = SIM. ANS? + ERROR AC1,AC ;NO. LSH FAILED. + LOOP LSH1PA,LSH1PB + + +;TEST TDN,TDNA. CHECK FOR SKIP/NO SKIP AND +;NO DATA CHANGE IN AC FOR RAN1 TO RAN CONDITION. + + AC=2 +TDN1: SETUP 100,0 +TDN2: RANDOM +TDN3: MOVS AC1,AC ;PUT SECOND RAN. NUM. INTO "E". + TDN AC,AC1 ;NO SKIP, NO DATA CHANGE. + JRST .+2 ;HERE..GO AROUND ERR UUO. + ER AC,[ASCII /TST/];TDN SKIPPED. + TDNA AC,AC1 ;SKIP, NO DATA CHANGE. + ER AC,[ASCII /TST/] + CAME AC,RAN ;C(AC) SHOULD = ORIG C(AC). + ERR AC1,RAN + LOOP TDN2,TDN3 + + +;TEST TDNN,TDNE. CHECK FOR SKIP/ NO SKIP AND +;NO DATA CHANGE IN AC FOR RAN TO 0 CONDITION. + + AC=3 +TDNE1A: SETUP 100,0 +TDNE2A: RANDOM +TDNE3A: SETZB AC1,RAN1 ;CLEAR C(AC). + TDNN AC1,AC ;C(E) + C(AC) =0..NO SKIP. + JRST .+2 + ER AC1,[ASCII /TST/];TDNN SKIPPED. + TDNE AC1,AC ;C(E) + C(AC) = 0. SKIP. + ER AC1,[ASCII /TST/] + CAME AC1,[0] ;C(AC) SHOULD STILL = 0. + ERR AC,RAN1 + LOOP TDNE2A,TDNE3A + + +;TEST TDNN,TDNE. CHECK FOR SKIP/ NO SKIP AND +;NO DATA CHANGE FOR 0 TO RAN CONDITION. + + AC=4 +TDNE1B: SETUP 40,0 +TDNE2B: RANDOM +TDNE3B: SETZ AC1, ;CLEAR C(E). + TDNN AC,AC1 ;C(E) + C(AC) = 0. NO SKIP. + JRST .+2 + ER AC,[ASCII /TST/];TDNN SKIPPED. + TDNE AC,AC1 ;C(E) + C(AC) = 0. SKIP. + ER AC,[ASCII /TST/] + CAME AC,RAN ;C(AC) SHOULD = ORIG C(AC). + ERR AC1,RAN + LOOP TDNE2B,TDNE3B + + +;TEST TDNN,TDNE. CHECK FOR SKIP/ NO SKIP AND +;NO DATA CHANGE IN AC FOR RAN TO -1 CONDITION. + + AC=5 +TDNE1C: SETUP 40,0 +TDNE2C: RANDOM + JUMPE AC,TDNE2C ;REJECT IF RAN = 0. +TDNE3C: SETOB AC1,RAN1 ;SET C(AC) TO ALL ONES. + TDNE AC1,AC ;C(E) + C(AC) NOT = 0..NO SKIP. + JRST .+2 + ER AC1,[ASCII /TST/];TDNE SKIPPED. + TDNN AC1,AC ;C(E) + C(AC) NOT = 0..SKIP. + ER AC1,[ASCII /TST/] + CAME AC1,[-1] ;C(AC) SHOULD = ORIG C(AC). + ERR AC,RAN1 + LOOP TDNE2C,TDNE3C + + +;TEST TDNE,TDNN. CHECK FOR SKIP/ NO SKIP AND +;NO DATA CHANGE IN AC FOR -1 TO RAN CONDITION. + + AC=6 +TDNE1D: SETUP 40,0 +TDNE2D: RANDOM + JUMPE AC,TDNE2D ;REJECT IF RAN = 0. +TDNE3D: SETO AC1, ;SET C(E) TO ALL ONES. + TDNE AC,AC1 ;C(E) + C(AC) NOT = 0..NO SKIP. + JRST .+2 + ER AC,[ASCII /TST/];TDNE SKIPPED. + TDNN AC,AC1 ;C(E) + C(AC) NOT = 0..SKIP. + ER AC,[ASCII /TST/] + CAME AC,RAN ;C(AC) SHOULD = ORIG C(AC). + ERR AC1,RAN + LOOP TDNE2D,TDNE3D + + +;TEST TDNE,TDNN. CHECK FOR SKIP/ NO SKIP AND +;NO DATA CHANGE IN AC FOR RAN TO RAN CONDITION. + + AC=7 +TDNE1E: SETUP 20,0 +TDNE2E: RANDOM + JUMPE AC,TDNE2E ;REJECT IF RAN = 0. +TDNE3E: MOVE AC1,AC ;MAKE C(E) = C(AC). + TDNE AC,AC1 ;C(E) + C(AC) NOT = 0..NO SKIP. + JRST .+2 + ER AC,[ASCII /TST/];TDNE SKIPPED. + TDNN AC,AC1 ;C(E) + C(AC) NOT = 0. SKIP. + ER AC,[ASCII /TST/] + CAME AC,RAN ;C(AC) SHOULD = ORIG C(AC). + ERR AC1,RAN + LOOP TDNE2E,TDNE3E + + +;TEST TDNE,TDNN. CHECK FOR SKIP/ NO SKIP AND +;NO DATA CHANGE IN AC FOR NOT RAN TO RAN CONDITON. + + AC=10 +TDNE1F: SETUP 20,0 +TDNE2F: RANDOM +TDNE3F: SETCM AC1,AC ;MAKE C(E) = 1'S COMP OF C(AC). + TDNN AC,AC1 ;C(E) + C(AC) = 0..NO SKIP. + JRST .+2 + ER AC,[ASCII /TST/];TDNN SKIPPED. + TDNE AC,AC1 ;C(E) + C(AC) = 0..SKIP. + ER AC,[ASCII /TST/] + CAME AC,RAN ;C(AC) SHOULD = ORIG C(AC). + ERR AC1,RAN + LOOP TDNE2F,TDNE3F + + +;TEST TDZ,TDZA. CHECK FOR SKIP/ NO SKIP AND +;CORRECT DATA IN AC FOR NOT RAN TO RAN CONDITION. + + AC=11 +TDZA1: SETUP 100,0 +TDZA2: RANDOM +TDZA3: SETCM AC1,AC ;MAKE C(E) 1'S COMP OF C(AC). + TDZ AC,AC1 ;SHOULD NOT SKIP. + JRST .+2 + ER AC,[ASCII/TST/] ;TDZ SKIPPED. + TDZA AC,AC1 ;SHOULD SKIP. + ER AC,[ASCII /TST/] + CAME AC,RAN ;C(AC) SHOULD STILL = RAN NUM. + ERR AC1,RAN + CAMN AC1,RAN ;C(E) SHOULD NOT = RAN. + ERR AC1,RAN + LOOP TDZA2,TDZA3 + + +;TEST TDZ,TDZA. CHECK FOR SKIP/NO SKIP AND +;CORRECT DATA IN AC FOR RAN TO RAN CONDITION. + + AC=10 +TDZAA: SETUP 100,1 +TDZAB: RANDOM +TDZAC: TDZ AC,AC ;SHOULD NOT SKIP. + CAME AC,[0] ;SHOULD CLEAR C(AC). + EERR ,RAN + MOVE AC,RAN ;RESTORE AC. + TDZA AC,AC ;SHOULD SKIP. + ER AC,[ASCII /TST/] + CAME AC,[0] ;C(AC) SHOULD BE CLEARED. + EERR ,RAN + LOOP TDZAB,TDZAC + + + +;TEST TDZ,TDZA. CHECK FOR SKIP/ NO SKIP AND +;CORRECT DATA IN AC FOR RAN1 TO RAN CONDITION. + + AC=10 +TDZB1: SETUP 100,0 +TDZB2: RANDOM +TDZB3: MOVS AC1,AC ;MAKE C(E) A DIFF. RAN. NUM. + MOVE AC2,AC1 ;SIMULATE + XOR AC2,AC ;A + AND AC2,AC ;TDZ. + TDZ AC,AC1 ;TDZ SHOULD NOT SKIP. + CAME AC,AC2 ;C(AC) SHOULD = SIM. ANS. + ERR AC1,RAN + MOVE AC,RAN ;RESTORE AC. + TDZA AC,AC1 ;SHOULD SKIP. + ER AC,[ASCII /TST/] + CAME AC,AC2 ;C(AC) SHOULD = SIM. ANS. + ERR AC1,RAN + LOOP TDZB2,TDZB3 + +;TEST TDZE, TDZN. CHECK FOR SKIP/NO SKIP AND +;CORRECT DATA IN AC FOR FLOATING ONE IN C(E) AND +;THAT BIT CLEARED IN RANDOM NUM. IN AC. + + AC=10 +TDZE1: SETUP 100,0 + MOVEI AC1,1 ;SETUP AC1 TO CONTAIN A MASK BIT. +TDZE2: RANDOM + ROT AC1,1 ;ROT TO TEST NEXT BIT. +TDZE3: ANDCM AC,AC1 ;CLEAR MASK BIT IN AC. + MOVE AC2,AC ;SAVE FOR FUTURE COMPARE. + TDZN AC,AC1 ;C(E) + C(AC) = 0...NO SKIP. + JRST .+2 + ER AC,[ASCII /TST/] ;TDZN SKIPPED. + TDZE AC,AC1 ;C(E) + C(AC) = 0...SKIP. + ER AC,[ASCII /TST/] + CAME AC,AC2 ;C(AC) SHOULD = ORIG C(AC). + ERR AC1,AC2 + LOOP TDZE2,TDZE3 + + +;TEST TDZE, TDZN. CHECK FOR SKIP/ NO SKIP AND +;CORRECT DATA IN AC FOR FLOATING ONE IN C(E) +;AND THAT BIT SET IN RAN. NUM. IN C(AC). + + AC=10 +TDZEA: SETUP 100,0 + MOVEI AC1,1 ;SET MASK BIT IN C(E). +TDZEB: RANDOM + ROT AC1,1 ;ROT MASK BIT TO TEST NEXT BIT. +TDZEC: IOR AC,AC1 ;SET MASK BIT IN AC. + MOVE RAN1,AC ;SAVE C(AC) IN CASE OF ERROR. + MOVE AC2,AC ;SIMULATE + ANDCM AC2,AC1 ;A TDZ. + TDZE AC,AC1 ;C(E) + C(AC) NOT = 0...NO SKIP. + CAME AC,AC2 ;C(AC) SHOULD = SIM. ANS. + ERR AC1,RAN1 + IOR AC,AC1 ;RESET MASK BIT IN AC. + TDZN AC,AC1 ;C(E) + C(AC) NOT = 0...SKIP. + ER AC,[ASCII /TST/] + CAME AC,AC2 ;AND C(AC) SHOULD = SIM. ANS. + ERR AC1,RAN1 + LOOP TDZEB,TDZEC + + +;TEST TDZE,TDZN. SET AND ROT A MASK BIT IN AC +;AND CHECK SKIP/NO SKIP AND PROPER C(AC) +;FOR MASK BIT IN AC ANS RANDOM NUMBER IN E. + + AC=10 +TDZNA: SETUP 100,0 + MOVEI AC1,1 ;SETUP AC1 FOR MASK BIT. +TDZNB: RANDOM + ROT AC1,1 ;ROT AC1 TO TEST NEXT BIT. + MOVE AC2,AC1 ;SAVE MASK BIT. +TDZNC: MOVE AC1,AC2 ;RESTORE MASK BIT IF ERROR. + ANDCM AC,AC1 ;CLEAR MASK BIT IN RAN NUM. + TDZN AC1,AC ;C(E) + C(AC) =0..SHOULDN'T SKIP. + JRST .+2 + ER AC1,[ASCII /TST/];TDZN SKIPPED. + TDZE AC1,AC ;C(E) + C(AC) = 0..SKIP. + ER AC1,[ASCII /TST/] + CAME AC1,AC2 ;C(AC1) SHOULD NOT HAVE CHANGED. + ERR AC,AC2 + LOOP TDZNB,TDZNC + + +;TEST TDZE,TDZN. SET AND ROT A MASK BIT IN AC +;AND CHECK SKIP/NO SKIP AND PROPER C(AC) +;FOR MASK BIT IN AC AND RANDOM NUMBER IN E. +;RANDOM NUMBER HAS MASK BIT SET. + + AC=10 +TDZN1: SETUP 40,0 + MOVEI AC1,1 ;SETUP AC1 FOR MASK BIT. +TDZN2: RANDOM + ROT AC1,1 ;ROT AC1 TO TEST NEXT BIT. +TDZN3: MOVE AC2,AC1 ;SAVE MASK BIT. + IOR AC,AC1 ;SET MASK BIT IN RAN. + TDZE AC1,AC ;C(E) + C(AC) NOT = 0...NO SKIP. + CAME AC1,[0] ;C(AC) SHOULD = 0. + ERR AC,AC2 + MOVE AC1,AC2 ;RESTORE MASK BIT. + TDZN AC1,AC ;C(E) + C(AC) NOT = 0...SKIP. + ER AC1,[ASCII /TST/] + CAME AC1,[0] ;AC1 SHOULD HAVE GOTTEN CLEARED OUT. + ERR AC,AC2 + MOVE AC1,AC2 ;RESTORE MASK BIT. + LOOP TDZN2,TDZN3 + + +;TEST TDO TDOA. CHECK FOR SKIP/NO SKIP ANS CORRECT DATA +;IN AC FOR RAN TO NOT RAN. + + AC=10 +TDOA1: SETUP 100,0 +TDOA2: RANDOM +TDOA3: SETCM AC1,AC ;MAKE "C(E)" = COMP OF RAN. + TDO AC,AC1 ;SHOULD NOT SKIP. + CAME AC,[-1] ;AC SHOULD HAVE ALL BITS SET. + ERR AC1,RAN + MOVE AC,RAN ;RESTORE AC. + TDOA AC,AC1 ;SHOULD SKIP. + ER AC,[ASCII /TST/] + CAME AC,[-1] ;AC SHOULD HAVE ALL BITS SET. + ERR AC1,RAN + LOOP TDOA2,TDOA3 + + +;TEST TDO,TDOA. CHECK SKIP/NO SKIP AND +;CORRECT DATA IN AC FOR RAN TO RAN CONDITION. + + AC=2 +TDOAA: SETUP 40,0 +TDOAB: RANDOM +TDOAC: TDO AC,AC ;SHOULD NOT SKIP. + JRST .+2 + ER AC,[ASCII /TST/] ;TDO SKIPPED. + TDOA AC,AC ;SHOULD SKIP. + ER AC,[ASCII /TST/] + CAME AC,RAN ;C(AC) SHOULD NOT HAVE CHANGED. + EERR ,RAN + LOOP TDOAB,TDOAC + + +;TEST TDO, TDOA. CHECK FOR SKIP/NO SKIP +;AND CORRECT DATA IN AC FOR RAN1 TO RAN CONDITION. + + AC=2 +TDOB1: SETUP 400,3 +TDOB2: RANDOM +TDOB3: MOVS AC1,AC ;MAKE AC1 ANOTHER RAN NUM. + MOVE AC2,AC ;SIMULATE + XOR AC2,AC1 ;A + IOR AC2,AC ;TDO INST. + TDO AC,AC1 ;SHOULD NOT SKIP. + CAME AC,AC2 ;C(AC) = SIM. ANS? + ERR AC1,RAN ;NO. + MOVE AC,RAN ;RESTORE AC. + TDOA AC,AC1 ;SHOULD SKIP. + ER AC,[ASCII /TST/] + CAME AC,AC2 ;C(AC) = SIM ANS? + ERR AC1,RAN ;NO. + LOOP TDOB2,TDOB3 + + +;TEST TDOE,TDON. ROT A MASK BIT IN E AND SET THAT +;BIT IN AC BEFORE TDO. CHECK FOR SKIP/NO SKIP +;AND PROPER DATA IN AC. + + AC=2 +TDOE1: SETUP 40,0 + MOVEI AC1,1 ;SETUP A MASK BIT IN "E". +TDOE2: RANDOM + ROT AC1, ;ROT MASK BIT TO TEST NEXT BIT. +TDOE3: IOR AC,AC1 ;SET MASK BIT IN AC. + MOVE AC2,AC ;SAVE AC IN AC2. + TDOE AC,AC1 ;C(E) + C(AC) NOT = 0. NO SKIP. + JRST .+2 + ER AC,[ASCII /TST/];TDOE SKIPPED. + TDON AC,AC1 ;C(E) + C(AC) NOT = 0..SKIP. + ER AC,[ASCII /TST/] + CAME AC,AC2 ;C(AC) SHOULD NOT CHANGE. + ERR AC1,AC2 + LOOP TDOE2,TDOE3 + + +;TEST TDOE,TDON. ROT A MASK BIT IN E AND CLEAR THAT +;BIT IN AC BEFORE TDO. CHECK FOR SKIP/NO SKIP +;AND PROPER DATA IN AC. + + AC=3 +TDOEA: SETUP 40,0 + MOVEI AC1,1 ;SETUP MASK BIT IN"E". +TDOEB: RANDOM + ROT AC1,1 ;ROT MASK BIT TO TEST NEXT BIT. +TDOEC: ANDCM AC,AC1 ;CLEAR MASK BIT IN AC. + MOVE RAN1,AC ;SAVE AC. + MOVE AC2,AC ;SIMULATE + IOR AC2,AC1 ;A TDO. + TDOE AC,AC1 ;C(E) + C(AC) = 0. SKIP. + ER AC,[ASCII /TST/] + CAME AC,AC2 ;C(AC) = SIM ANS? + ERR AC1,RAN1 ;NO. + MOVE AC,RAN1 ;RESTORE AC. + TDON AC,AC1 ;C(E) + C(AC) = 0..NO SKIP. + CAME AC,AC2 ;C(AC) = SIM. ANS? + ERR AC1,RAN1 ;NO. + LOOP TDOEB,TDOEC + + +;TEST TDOE,TDON. ROT A MASK BIT IN AC AND CLEAR THAT +;BIT IN E BEFORE TDO. CHECK FOR SKIP/NO SKIP +;AND PROPER DATA IN AC. + + AC=4 +TDONA: SETUP 40,0 + MOVEI AC1,1 ;SETUP A MASK BIT IN AC. +TDONB: RANDOM + ROT AC1,1 ;ROT BIT TO TEST NEXT BIT. + MOVE AC2,AC1 ;SAVE MASK BIT SO IN CASE +TDONC: MOVE AC1,AC2 ;OF ERROR IT CAN BE RESTORED. + ANDCM AC,AC1 ;CLEAR MASK BIT IN E. + JUMPE AC,TDONB ;REJECT IF C(AC) = 0. + MOVE AC3,AC ;SIMULATE + IOR AC3,AC1 ;TDO. + TDOE AC1,AC ;C(E) + C(AC) = 0...SKIP. + ER AC1,[ASCII /TST/];TDOE DID NOT SKIP. + CAME AC1,AC3 ;C(AC) SHOULD = SIM. ANS. + ERR AC,AC2 + TDON AC1,AC ;C(E) + C(AC) NOT = 0...SKIP. + ER AC1,[ASCII /TST/] + CAME AC1,AC3 ;C(AC) SHOULD = SIM. ANS. + ERR AC,AC2 + MOVE AC1,AC2 ;RESTORE AC. + LOOP TDONB,TDONC + + +;TEST TDOE,TDON. ROT A MASK BIT IN AC AND SET +;THAT BIT IN E BEFORE TDO. CHECK FOR SKIP/ NO SKIP +;AND CORRECT DATA IN AC. + + AC=5 +TDON1: SETUP 40,0 + MOVEI AC1,1 ;SETUP AC TO CONTAIN A MASK BIT. +TDON2: RANDOM + ROT AC1,1 ;ROT TO TEST NEXT BIT. + MOVE AC2,AC1 ;SAVE C(AC) SO IT CAN BE +TDON3: MOVE AC1,AC2 ;RESTORED IN CASE OF ERROR. + IOR AC,AC1 ;SET MASK BIT IN E. + TDOE AC1,AC ;C(E) + C(AC) NOT = 0...NO SKIP. + JRST .+2 + ER AC1,[ASCII /TST/];TDOE SKIPPED. + TDON AC1,AC ;C(E) + C(AC) NOT = 0...SKIP. + ER AC1,[ASCII /TST/] + CAME AC1,AC ;C(AC) SHOULD = C(E). + ERR AC,AC2 + MOVE AC1,AC2 ;RESTORE AC. + LOOP TDON2,TDON3 + + +;TEST TDC. CHECK FOR SKIP/NO SKIP AND CORRECT +;DATA FOR NOT RAN TO RAN CONDITION. + + AC=6 +TDC1: SETUP 100,0 +TDC2: RANDOM +TDC3: SETCM AC1,RAN ;MAKE C("E") = COMP. OF RAN. + TDC AC,AC1 ;NO SKIP. + CAME AC,[-1] ;C(AC) SHOULD = A -1. + ERR AC1,RAN + SETO RAN1, ;SET RAN1 FOR ERROR MESSAGE. + TDC AC,AC1 ;NO SKIP. + CAME AC,RAN ;C(AC) SHOULD = RAN AGAIN. + ERR AC1,RAN1 + LOOP TDC2,TDC3 + + +;TEST TDCA. CHECKING FOR SKIP/ NO SKIP AND +;CORRECT DATA IN AC FOR NOT RAN TO RAN CONDITION. + + AC=10 +TDCA1: SETUP 100,0 +TDCA2: RANDOM +TDCA3: SETCM AC1,RAN ;MAKE C("E") = COMP OF RAN. + TDC AC,AC1 ;SHOULD NOT SKIP. + JRST .+2 + ER AC,[ASCII /TST/];TDC SKIPPED. + TDCA AC,AC1 ;SHOULD SKIP. + ER AC,[ASCII /TST/] + CAME AC,RAN ;TWO TDC'S SHOULD RETURN C(AC) + ;TO IT'S ORIGINAL VALUE. + ERR AC1,RAN + LOOP TDCA2,TDCA3 + + +;TEST TDCE. CHECKING FOR SKIP/NO SKIP AND +;CORRECT DATA IN AC FOR RAN TO 0 CONDITION. + + AC=11 +TDCE1: SETUP 100,0 +TDCE2: RANDOM +TDCE3: SETZB AC1,RAN1 ;CLEAR BOTH AC AND RAN1. + TDCE AC1,AC ;C(E) + C(AC) = 0. SKIP. + ER AC1,[ASCII /TST/] + CAME AC1,RAN ;C(AC) SHOULD = RAN. + EERR ,RAN1 + LOOP TDCE2,TDCE3 + + +;TEST TDCE,TDCN. CHECKING FOR SKIP/NO SKIP AND +;CORRECT DATA IN AC FOR 0 TO RAN CONDITION. + + AC=11 +TDCEA: SETUP 100,0 +TDCEB: RANDOM +TDCEC: SETZ AC1, ;CLEAR C(E). + TDCN AC,AC1 ;C(E) + C(AC) = 0...NO SKIP. + JRST .+2 + ER AC,[ASCII /TST/];TDCN SKIPPED. + TDCE AC,AC1 ;C(E) + C(AC) = 0. SKIP. + ER AC,[ASCII /TST/] + CAME AC,RAN ;C(AC) SHOULD STILL = RAN. + ERR AC1,RAN + LOOP TDCEB,TDCEC + + +;TEST TDCE. CHECKING FOR SKIP/NO SKIP AND +;CORRECT DATA IN AC FOR RAN TO -1 CONDITION. + + AC=10 +TDCE4: SETUP 100,0 +TDCE5: RANDOM + JUMPE AC,TDCE5 ;REJECT IF RAN = 0. +TDCE6: SETOB AC1,RAN1 ;SET C(AC) TO ALL ONES. + SETCM AC2,AC ;SIMULATE A TDC. + TDCE AC1,AC ;C(E) + C(AC) NOT = 0. NO SKIP. + CAME AC1,AC2 ;C(AC) = SIM.. ANS? + ERR AC,RAN1 ;NO. + LOOP TDCE5,TDCE6 + + +;TEST TDCE,TDCN. CHECKING FOR SKIP/NO SKIP AND +;CORRECT DATA IN AC FOR -1 TO RAN CONDITION. + + AC=10 +TDCED: SETUP 100,0 +TDCEE: RANDOM + JUMPE AC,TDCEE ;REJECT IF RAN = 0. + CAMN AC,[-1] ;C(AC) = -1? + JRST TDCEE ;YES. REJECT. +TDCEF: SETOB AC1,RAN1 ;SET C(E) TO ALL ONES. + TDCE AC,AC1 ;C(E) + C(AC) NOT = 0. NO SKIP. + JRST .+2 + ER AC,[ASCII /TST/];TDCE SKIPPED. + TDCN AC,AC1 ;C(E) + C(AC) NOT = 0..SKIP. + ER AC,[ASCII /TST/] + CAME AC,RAN ;C(AC) SHOULD = ORIG C(AC). + ERR RAN1,RAN + LOOP TDCEE,TDCEF + + +;TEST TDCE. CHECKING FOR SKIP/NO SKIP AND +;CORRECT DATA IN AC FOR RAN TO RAN CONDITION. + + AC=10 +TDCE7: SETUP 100,0 +TDCE8: RANDOM + JUMPE AC,TDCE8 ;REJECT IF RAN = 0. +TDCE9: MOVE AC1,RAN ;MAKE C("AC") = C("E"). + TDCE AC1,AC ;C(E) + C(AC) NOT = 0. NO SKIP. + CAME AC1,[0] ;C(AC) SHOULD = 0. + ERR AC,AC + LOOP TDCE8,TDCE9 + + +;TEST TDCE. CHECKING FOR SKIP/NO SKIP AND +;CORRECT DATA IN AC FOR RAN TO NOT RAN. + + AC=10 +TDCEG: SETUP 100,0 +TDCEH: RANDOM +TDCEI: SETCM AC1,AC ;MAKE C("AC") = TO COMP OF RAN. + MOVE RAN1,AC1 ;SAVE C(AC) IN CASE OF ERROR. + TDCE AC1,AC ;C(E) + C(AC) = 0. SKIP. + ER AC1,[ASCII /TST/] + CAME AC1,[-1] ;C(AC) SHOULD = -1. + ERR AC,RAN1 + LOOP TDCEH,TDCEI + + + + ;JRST BEGEND ;REPEAT TEST + +SUBTTL *UUOERR* OLD-UUO ERROR HANDLER SUBROUTINE, V75B, APR 22,1975 + +;THIS SUBROUTINE PROVIDES ERROR REPORTING THRU THE USE OF UUO'S. + +ERRMES: MOVEM 0,%ERAC0# ;SAVE AC0 + IFDEF EXCASB,> + MOVEM 1,%ERAC1# ;SAVE AC1 + MOVEM 2,%ERAC2# ;SAVE AC2 + AOS ERRTLS ;INCREMENT ERROR TOTALS + HRRZ 0,$SVUPC ;GET PC OF UUO + CAMN 0,ERRPC ;PC = PC OF LAST ERROR ? + AOS MICNT# ;YES, ADD 1 TO ERROR COUNT + MOVE 0,MICNT + HRL 0,$SVUPC + SKIPN KLFLG ;NOT KL10 + SKIPE USER ;AND NOT USER? + JRST .+2 + DATAO PI,0 ;YES, DISPLAY ERROR PC,ERROR COUNT + SETZM PROCED# ;CLEAR PROCEED FLAG + SWITCH + TLNE NOPNT ;PRINTOUT ? + JRST %ERRS1 ;NO, RESTORE AC'S AND RETURN + MOVE 1,$SVUUO + LSH 1,-^D27 + MOVEM 1,%ACS1A# ;SAVE UUO NUMBER + MOVE 0,%ERAC0 + MOVE 1,%ERAC1 + SKIPGE @ERRLOP ;ERR LOOP AC > OR = 0 ? + JRST %ERRS4 ;NO, SEE IF PRINT ALL +%ERMS1: SETZM MICNT ;CLEAR ERROR COUNT + SKIPL MONCTL ;DIAG MON OR SYS EXER ? + JRST .+4 ;NO, DON'T NEED TITLE + SKIPN %ERFST# ;FIRST ERROR ? + PNTNM ;YES, PRINT PROGRAM TITLE + SETOM %ERFST + SKIPN PASCNT ;FIRST PASS ? + JRST .+4 ;YES + PMSG <^TEST PASS COUNT = > + MOVE PASCNT + PNTDEC + PMSG <^PC = > + HRRZ 0,$SVUPC ;GET PC OF UUO + MOVEM 0,ERRPC ;SAVE FOR COMPARE + PNT6 ;PRINT UUO ADDRESS + XLIST + IFDEF ERDIAG, + MOVE 1,$SVUUO ;GET AC # OF UUO + LSH 1,-27 + ANDI 1,17 + MOVE 0,(1) ;GET C(AC) + CAIG 1,1 ;IS AC # = TO SAVE AC ? + MOVE 0,%ERAC0(1) ;YES, GET SAVED AC + PNTHW ;PRINT C(AC) + + MOVE CONSW + TLNE TXTINH ;PRINT FAILURE DES AND FLT NBR ? + JRST %ERMORE ;NO, RESTORE AC'S ETC. + +;PRINT FAILURE DESCRIPTOR + + MOVE 1,%ACS1A ;GET UUO NUMBER + CAIG 1,1 ;PRINT DESCRIPTOR ? + JRST %ERMS3 ;NO, JUST PRINT FAULT NUMBER + PCRL + MOVE %FLTTB(1) + PNTAL ;PRINT FAULT DESCRIPTOR + +;PRINT FAULT NUMBER + +%ERMS3: PMSG <^FAULT NUMBER = > + MOVEI TLET + PNTA ;PRINT TEST LETTER + + HRRZ $SVUUO + TRNE 700000 + JRST %ER6X + TRNE 070000 + JRST %ER5X + TRNE 007000 + JRST %ER4X + PNT3 ;PRINT FAULT NUMBER +%ER7X: PCRL + JRST %ERMORE + +%ER4X: PNT4 + JRST %ER7X +%ER5X: PNT5 + JRST %ER7X +%ER6X: PNT6 + JRST %ER7X + +;FAILURE DESCRIPTORS + +TLET: 0 ;TEST LETTER +%FLTTB: 0 ;DESCRIPTOR TABLE +%NODES: [0] ;NO DESCRIPTOR +SPDES: [0] ;SPECIAL USER FAILURE DESCRIPTOR +$ACF: [ASCIZ/C(AC) FAILED/] +%AC1F: [ASCIZ/C(AC+1) FAILED/] +%EF: [ASCIZ/C(E) FAILED/] +%E1F: [ASCIZ/C(E+1) FAILED/] +%ARF: [ASCIZ/C(C(ACR)) FAILED/] +%AR1F: [ASCIZ/C(C(ACR+1)) FAILED/] +%ALF: [ASCIZ/C(C(ACL)) FAILED/] +%EEF: [ASCIZ/C(C(E)) FAILED/] +%FF: [ASCIZ/FLAG FAILED/] +> + XLIST + IFDEF ERRELB,< + LIST +;RELIABILITY FORMAT ERROR PRINTER + +%ERMS2: SETZM %RAND# ;CLEAR PNT C(RAN) FLAG + MOVE 1,%ACS1A + CAIL 1,11 ;UUO # 11-13 + SETOM %RAND ;YES, SET PNT C(RAN) FLAG + TRZ 1,10 ;MAKE UUO # 1-7 + MOVEM 1,%ACS1A + MOVE 2,ERRPC ;GET UUO ADDRESS + MOVE 2,-1(2) ;GET INST IN UUO-1 + CAIL 1,4 ;UUO # < THAN 4 ? + MOVE 2,$SVUUO ;YES, GET UUO + MOVEM 2,%CNTE# ;SAVE E ADDRESS + MOVE 2,%ERAC2 + MOVE 1,%ERAC1 + MOVE 0,%ERAC0 + MOVEI 1,@%CNTE ;GET ADRS FIELD OF UUO OR UUO-1 + MOVEM 1,%EE1# + MOVE 1,%ERAC1 + MOVE 1,@%EE1 ;GET C(E) + MOVEM 1,%EE1A# + MOVE 1,%ERAC1 + MOVEI 1,@$SVUUO ;GET ADDRESS FIELD OF UUO + MOVEM 1,%EE2# + MOVE 1,%ACS1A + CAIN 1,3 ;UUO # 3 ? + JRST .+4 ;YES + MOVE 1,%ERAC1 + MOVE 1,@%EE2 ;GET C(E) OF UUO + MOVEM 1,%EE2A# + MOVE 2,%ACS1A ;GET UUO # + MOVE 1,%CNTE + LSH 1,-27 ;GET AC NUMBER + ANDI 1,17 + CAIG 2,5 ;UUO # 6,7 OR 2 + CAIN 2,2 + JRST %ERR2 ;YES, GO PNT E AND C(E) +;PRINT ERROR AC + + PMSG <^AC = > + MOVE 0,1 + PNT2 ;PRINT AC NUMBER + PMSG <^C(AC)= > + MOVE 0,(1) ;GET C(AC) + CAIG 1,2 ;IS AC # = SAVED AC ? + MOVE 0,%ERAC0(1) ;YES, GET SAVED AC +%ERRB: PNTHW ;PRINT C(AC) OR UUO2 (E) + +;PRINT ERROR INFO + + CAIN 2,5 ;UUO # 5 + JRST %ERR4 ;YES, GO PNT 'TST','SKP', OR ETC. + + PMSG <^COR = > + MOVE 0,(1) ;GET C(AC) + CAIG 1,2 ;IS AC # = SAVED AC ? + MOVE 0,%ERAC0(1) ;YES, GET SAVED AC + CAIE 2,2 + MOVE 0,%EE1A ;UUO # 2, GET C(E) + PNTHW ;PRINT C(E) OR UUO2 C(AC) + CAIL 2,4 ;UUO # >3 ? + JRST %ERRC ;YES, RESTORE AC'S AND RETURN + + PMSG <^ ORIGINAL> +%ERRB1: MOVE 1,$SVUUO + LSH 1,-27 ;GET AC # OF UUO + ANDI 1,17 + PMSG <^C(AC)= > + MOVE 0,(1) ;GET C(AC) + CAIG 1,2 ;IS AC # = SAVED AC ? + MOVE 0,%ERAC0(1) ;YES, GET SAVED AC + SKIPE %RAND ;PRINT C(RAN) FLAG SET ? + MOVE 0,RAN# ;YES + PNTHW ;PRINT C(AC) OR C(RAN) + CAIN 2,3 ;UUO # 3 ? + JRST %ERR2 ;YES, PRINT E, RESTORE AC'S AND RETURN + CAIN 2,7 ;UUO # 7 ? + JRST %ERRC ;YES, BYPASS PRINTING C(E) + PMSG <^C(E) = > + MOVE 0,%EE2A + PNTHW ;PRINT C(E) + JRST %ERRC + +%ERR2: PMSG <^E = > + MOVE 0,%EE2 + CAIN 2,2 ;UUO # 2 ? + MOVE 0,%EE1 + PNT6 ;PRINT E OF UUO OR UUO-1 + CAIL 2,6 ;UUO 6 OR 7 ? + JRST %ERRB1 ;YES, GO PNT C(AC), C(E) AND RETURN + CAIN 2,3 ;UUO # 3 ? + JRST %ERRC ;YES, RESTORE AC'S AND RETURN + + PMSG <^C(E) = > + MOVE 0,%EE1A ;GET C(E) + JRST %ERRB +;PRINT ASCII COMMENT + +%ERR4: HRRZI 0,@$SVUUO + PNTA ;PRINT 'TST','SKP', OR ETC. + JRST %ERRC + +;COMPLETE PRINTOUT + +%ERRC: PCRL + + XLIST + IFDEF UUOTXT,< + LIST + MOVE 0,CONSW + TLNN TXTINH ;PRINT DIAGNOSTIC COMMENT ? + CAIE 2,7 ;UUO # 7 ? + JRST %ERMORE ;NO, RESTORE AC'S AND RETURN + MOVE 0,%EE2 ;YES + PNTAL ;PRINT DIAGNOSTIC COMMENT + PCRL +> + LIST + JRST %ERMORE + +> + LIST +;RESTORE AC'S AND RETURN OR HALT + +%ERMORE:XCT ERMORE + PNTMGN ;PRINT MARGINS + SWITCH + +%ERRS1: TTALTM ;ALTMODE CHECK + JRST .+4 ;NONE + MOVEI .+3 ;SAVE CONT ADDRESS + MOVEM JOBOPC + JRST @ALTMGO ;PERFORM TRANSFER + MOVE CONSW + TLNE 0,ERSTOP ;HALT ON ERROR SWITCH SET ? + ERRHLT ;YES + TLNN 0,LOOPER ;LOOP ON ERROR SWITCH SET ? + SETOM PROCED ;NO, SET THE PROCEED FLAG + TLNE 0,DING ;RING BELL SWITCH SET ? + PBELL ;YES, GO RING BELL + +%ERRS2: MOVE 2,%ERAC2 ;RESTORE AC'S + MOVE 1,%ERAC1 + SETOM @ERRLOP ;SET C(ERR LOOP AC) TO -1 + SKIPN PROCED ;LOOP ON ERROR ? + JRST %ERRS5 ;YES + AOS @ERRLOP ;NO, INC C(ERR LOOP AC) + AOS @ERRLOP ;SO IT ='S 1 + SKIPL MONCTL ;UNDER DIAGNOSTIC MONITOR ? + JRST %ERRS5 ;NO, CONTINUE PROGRAM + MOVE 0,ERRTLS ;YES + CAIL 0,5 ;PRINTED ALLOWED ERRORS ? + JRST $BEND2 + +%ERRS5: MOVE 0,%ERAC0 ;NO, CONTINUE PROGRAM + IFDEF EXCASB,> + JRST UUOEXT + +%ERRS4: MOVE 0,CONSW + TLNN PALERS ;PRINT ALL ERRORS ? + JRST %ERRS1 ;NO + JRST %ERMS1 ;YES + +SUBTTL *STOR* RESERVED STORAGE, JULY 19,1977 + +;PROGRAM LITERALS + + XLIST +IFNDEF $LPAPER, + LIT + LIST +ENDSLD: 0 + +IFDEF DEBUG,< +PATCH: BLOCK DEBUG ;PATCHING AREA +> + +;PROGRAM VARIABLES + VAR + +IFDEF PGMEND,< +END: 0 + END START > + diff --git a/modules/pdp10/lib/macro10.js b/modules/pdp10/lib/macro10.js index e3208be09..9dace82a0 100644 --- a/modules/pdp10/lib/macro10.js +++ b/modules/pdp10/lib/macro10.js @@ -736,6 +736,7 @@ class Macro10 { case Macro10.PSEUDO_OP.PAGE: // TODO case Macro10.PSEUDO_OP.SUBTTL: // TODO case Macro10.PSEUDO_OP.TITLE: // TODO + case Macro10.PSEUDO_OP.XALL: // TODO case Macro10.PSEUDO_OP.XLIST: // TODO break; @@ -2060,6 +2061,7 @@ Macro10.PSEUDO_OP = { SUBTTL: "SUBTTL", TITLE: "TITLE", VAR: "VAR", + XALL: "XALL", XWD: "XWD", XLIST: "XLIST" }; diff --git a/versions/pdpjs/1.34.3/pdp10-dbg.js b/versions/pdpjs/1.34.3/pdp10-dbg.js index 386640c43..d17d48927 100644 --- a/versions/pdpjs/1.34.3/pdp10-dbg.js +++ b/versions/pdpjs/1.34.3/pdp10-dbg.js @@ -247,19 +247,19 @@ function Mg(a){if(0<=a.W.indexOf("p"))a.u(a.D.join(""));else{var b=bf(a.b);Pg(a, function Rg(a,b,c,d,e){var f,g;null!=a.w&&(b=Wg(a,b));for(var h=!0,k="";h;){g=b.match(a.ha);if(!g||g[5]&&";"!=g[5].slice(0,1))return a.error("failed to parse line '"+b+"'"),!1;h=!1;k=g[2].toUpperCase();if(k==Xg||k==Yg)c=null;if(c){for(f=0;fF)break;var q=F+1,J=F+l.length,Lc="",qa="";F&&(Lc=b[F-1]).match(/[0-9A-Z$%.]/i)||!(J>=b.length)&&(qa=b[J]).match(/[0-9A-Z$%.]/i)||("'"==Lc&&F--,"'"==qa&&J++, b=b.substr(0,F)+p+b.substr(J),q=F+p.length,h=!0)}c=null}if(a.i&&(1==a.i&&(f=b.indexOf(a.C),0<=f?(a.i++,b=b.substr(f+1)):a.error("expected "+a.S+" definition in '"+b+"'")),1=I?a.X+=I:a.error("unrecognized BLOCK expression '"+k+"'");break;case lh:k=c;b=g=0;for(c=36;I=mh(a,k);){k=k.substr(I.length).trim();d=I;if(e=I.match(/^\((.*)\)\s*(.*)$/))e[1]&&(g=Ug(a,"^D"+e[1])),d=e[2];if(g){d=d?Ug(a,d):0;if(void 0===d||0>g||36c&& -nh(a,b);break;case oh:(k=c)?(a.J=Ug(a,k),void 0===a.J&&a.error("unrecognized END expression '"+k+"'")):a.J=a.la;break;case ph:qh(a,c);break;case rh:Sg(a);break;case sh:a.X=Ug(a,c)||0;break;case th:Tg(a);break;case uh:qh(a,c.replace(",",",,"));break;case vh:case wh:case xh:case yh:case zh:case Ah:case Bh:case Ch:case Dh:case Eh:case Fh:case Gh:case Xg:case Yg:case Hh:case Ih:dh(a,k,g);break;case Jh:k=Kh(a,c);for(I=0;Id.Fa&&Z(a,d.ka);break;case Eh:0>=d.Fa&&Z(a,d.ka);break;case wh:case Fh:case xh:case Ch:d.Fa&&Z(a,d.ka);break;case Xg:case Yg:for(b=0;ba.Ea&&(a.Ea=a.X);a.X=0}function Uh(a){if(a.G.length){var b=a.G[a.G.length-1].name;b&&a.L.push({name:b,T:a.T,ea:a.ea});b=a.G.pop();a.T=b.T;a.ea=b.ea;a.X=b.X;a.Ea=b.Ea;a.G.length||-1==a.Ea||a.error("scope restore error")}else a.error("scope nesting error")} +function gh(a,b,c){var d=a.v[b];if(!d)return!1;if(null!=c){if(d.Fa==Th){var e=a.X;Z(a,d.ka);if(ed.Fa&&Z(a,d.ka);break;case Eh:0>=d.Fa&&Z(a,d.ka);break;case wh:case Fh:case xh:case Ch:d.Fa&&Z(a,d.ka);break;case Xg:case Yg:for(b=0;ba.Ea&&(a.Ea=a.X);a.X=0}function Vh(a){if(a.G.length){var b=a.G[a.G.length-1].name;b&&a.L.push({name:b,T:a.T,ea:a.ea});b=a.G.pop();a.T=b.T;a.ea=b.ea;a.X=b.X;a.Ea=b.Ea;a.G.length||-1==a.Ea||a.error("scope restore error")}else a.error("scope nesting error")} function mh(a,b){var c;c=void 0===c?",":c;for(var d=0,e=!1,f=null,g=0;d"==h&&0>--g){a.error("missing bracket(s) in '"+b+"'");break}}}g?0f&&(g=g.replace(/\.([^0-9]|$)/g,L(a.b,d,-1)+"$1"),f=$e(a.b,g,c),void 0===f&&a.error("unable to parse expression '"+b+"'",e));return f} function ch(a,b){for(var c=0,d="",e=0,f=-1,g=b.length;e=--c){g=e;break}}0>c&&a.error("missing bracket(s) in '"+b+"'");0<=f&&(d=b.substr(f,g-f));return d}function Qg(a,b){b=void 0===b?a.ia:b;for(var c=0;b>a.M[c];)if(b-=a.M[c],cd?c="":(c=b.substr(d+1),b=b.substr(0,d),a.w=null);a.F+=b}if(null==a.w){var d=b=0,e,f,g=a.F.length;a.S==ih&&g++;for(var h=0;h=k&&(k-=32),k=k+32&63);d+=k*Math.pow(2,f);f-=e;b++;0>f&&(nh(a,d),b=0)}b&&nh(a,d)}return c} -function dh(a,b,c){var d,e,f,g,h,k;a.C="<";a.N=">";g=h=k=[];if(b==vh){e=c.match(/([A-Z$%.][0-9A-Z$%.]*)\s*(\([^)]*\)|)\s*,?\s*(<|)([\s\S]*)/i);if(!e)return a.error("unrecognized "+b+" in '"+c+"'"),c;f=e[1];if(e[2]&&","!=e[2]){h=g=Kh(a,e[2],!0);b=[];for(c=0;c");0>l&&(l=h[c].length);b[c]=h[c].substr(d,l-d);h[c]=h[c].substr(0,d)}h=b}d=Wh;b=3}else if(b==Hh){a.C="[";a.N="]";e=c.match(/([A-Z$%.][0-9A-Z$%.]*)\s*(\[)([\s\S]*)/i);if(!e)return a.error("unrecognized "+ -b+" in '"+c+"'"),c;f=e[1];d=Sh;b=2}else if(b==eh)a.C="[",a.N="]",f="?"+xa(++a.ga,5),a.v[f]&&a.error("literal symbol '"+f+"' redefined"),e=[c[0],c.substr(1)],d=Xh,b=0;else if(b==Xg||b==Yg){a.j||a.error(b+" outside of macro");e=c.match(/([A-Z$%.][0-9A-Z$%.]*)\s*,\s*(<|)([\s\S]*)/i);if(!e)return a.error("unrecognized "+b+" operands '"+c+"'"),c;for(d=0;d");0>l&&(l=h[c].length);b[c]=h[c].substr(d,l-d);h[c]=h[c].substr(0,d)}h=b}d=Xh;b=3}else if(b==Hh){a.C="[";a.N="]";e=c.match(/([A-Z$%.][0-9A-Z$%.]*)\s*(\[)([\s\S]*)/i);if(!e)return a.error("unrecognized "+ +b+" in '"+c+"'"),c;f=e[1];d=Th;b=2}else if(b==eh)a.C="[",a.N="]",f="?"+xa(++a.ga,5),a.v[f]&&a.error("literal symbol '"+f+"' redefined"),e=[c[0],c.substr(1)],d=Yh,b=0;else if(b==Xg||b==Yg){a.j||a.error(b+" outside of macro");e=c.match(/([A-Z$%.][0-9A-Z$%.]*)\s*,\s*(<|)([\s\S]*)/i);if(!e)return a.error("unrecognized "+b+" operands '"+c+"'"),c;for(d=0;d=C)&&Og(a,"truncated value "+wa(b)+" at location "+wa(c)+" to "+wa(d));return d}ag.prototype.error=function(a,b){throw Error("error in "+Qg(this,b)+": "+a);}; function Og(a,b){a.u("warning in "+Qg(a,void 0)+": "+b)}ag.prototype.u=function(a){this.b?this.b.u(a):console.log(a)}; -var $g=1,ah=2,bh=4,hh="ASCII",ih="ASCIZ",kh="BLOCK",lh="BYTE",vh="DEFINE",oh="END",ph="EXP",wh="IF1",xh="IFDEF",yh="IFDIF",zh="IFE",Ah="IFG",Bh="IFGE",Ch="IFIDN",Dh="IFL",Eh="IFLE",Fh="IFN",Gh="IFNDEF",Xg="IRP",Yg="IRPC",Lh="LALL",rh="LIT",eh="LITERAL",Mh="LIST",sh="LOC",Nh="NOSYM",Hh="OPDEF",Oh="PAGE",Jh="PURGE",Ih="REPEAT",jh="SIXBIT",Ph="SUBTTL",Qh="TITLE",th="VAR",uh="XWD",Rh="XLIST",Wh=-1,Sh=-2,Xh=-3,Vh=-4; -function Yh(a,b,c){t.call(this,"Computer",a,33554432);this.A.ba=!1;this.R=null;ji(this,b);this.N=bd(this,"autoPower",a,6);this.w=0;this.W=+a.busWidth||+a.buswidth;this.L=this.F=this.M=null;this.K=this.V=!1;this.I=this.C=null;this.S=this.O=!1;this.Z=bd(this,"url")||"";(Math.random()+.1).toString(36);this.i=ki(this);if(this.v=tb("CPU",this.id)){this.D=tb("Debugger",this.id);this.G=new Bc({id:this.bb+".bus",busWidth:this.W},this.v,this.D);var d,e=rb(this.id);if((this.j=tb("Panel",this.id))&&this.j.za)for(b= -0;b\nLicense: GPL version 3 or later ");for(b=0;bli){if(mi(d,this.L)){this.C=new G(this,"1.34.3",vi);mi(this.C)&&(wi(this,d),a=xi,yi(this.C));this.C.set(si,Ia());zi(this.C);var e=this.b&&!this.K;if(a==ti||qb("Click OK to restore the previous "+Sb+" machine state, or CANCEL to reset the machine.")){if(c=ri(d)){var f=d.get("code"),g=d.get("data");f&&("ok"==f?mi(d,g):("error"==f&&"no machine state"!= -g?(this.ja("Error: "+g),"unable to verify user"==g&&(Ta(Ai,""),this.i=null)):this.u(f+": "+g),yi(d),mi(d)?(c=ri(d),e=!0):c=!1))}e&&pi(this,c?d:null)}else a==xi&&d.clear()}else pi(this);delete this.L;delete this.I}e=rb(this.id);for(f=0;fa[1];a=a[2];this.S=!0;this.A.ba=!0;var d=this.J.power;d&&(d.textContent="Shutdown");this.v&&(Bi(this,this.v,b,c,a),K(this,-2),this.v.fa());this.O&&(wi(this,b),b.clear());!c&&this.C&&(this.C.clear(),delete this.C);this.w=0}; -function wi(a,b){if(qb("There may be a problem with your "+Sb+" machine.\n\nTo help us diagnose it, click OK to send this "+Sb+" machine state to http://www.pcjs.org.")){var c=a.Z;a=a.i||"";b=b.toString();var d={};d.app=Sb;d.ver="1.34.3";d.url=c;d.user=a;d.type="bug";d.data=b;Ja("http://www.pcjs.org/api/v1/report",d,!0)}} -function Ig(a,b,c){var d,e="none";if(a.w)return null;a.w--;var f=new G(a,"1.34.3"),g=new G(a,"1.34.3",qi),h=Ia();g.set(si,h);f.set(si,h);f.set(Ci,"1.34.3");f.set(Di,window?window.location.href:null);f.set(Ei,window?window.navigator.userAgent:"");a.v&&a.v.ra&&(c&&(b&&(a.v.A.fa=a.v.A.P),a.v.Y()),d=a.v.ra(b,c),"object"===typeof d&&f.set(a.v.id,d),c&&(a.v.A.ba=!1,!1===d&&(e=null)));for(var h=rb(a.id),k=0;k\nLicense: GPL version 3 or later ");for(b=0;bmi){if(ni(d,this.L)){this.C=new G(this,"1.34.3",wi);ni(this.C)&&(xi(this,d),a=yi,zi(this.C));this.C.set(ti,Ia());Ai(this.C);var e=this.b&&!this.K;if(a==ui||qb("Click OK to restore the previous "+Sb+" machine state, or CANCEL to reset the machine.")){if(c=si(d)){var f=d.get("code"),g=d.get("data");f&&("ok"==f?ni(d,g):("error"==f&&"no machine state"!= +g?(this.ja("Error: "+g),"unable to verify user"==g&&(Ta(Bi,""),this.i=null)):this.u(f+": "+g),zi(d),ni(d)?(c=si(d),e=!0):c=!1))}e&&qi(this,c?d:null)}else a==yi&&d.clear()}else qi(this);delete this.L;delete this.I}e=rb(this.id);for(f=0;fa[1];a=a[2];this.S=!0;this.A.ba=!0;var d=this.J.power;d&&(d.textContent="Shutdown");this.v&&(Ci(this,this.v,b,c,a),K(this,-2),this.v.fa());this.O&&(xi(this,b),b.clear());!c&&this.C&&(this.C.clear(),delete this.C);this.w=0}; +function xi(a,b){if(qb("There may be a problem with your "+Sb+" machine.\n\nTo help us diagnose it, click OK to send this "+Sb+" machine state to http://www.pcjs.org.")){var c=a.Z;a=a.i||"";b=b.toString();var d={};d.app=Sb;d.ver="1.34.3";d.url=c;d.user=a;d.type="bug";d.data=b;Ja("http://www.pcjs.org/api/v1/report",d,!0)}} +function Ig(a,b,c){var d,e="none";if(a.w)return null;a.w--;var f=new G(a,"1.34.3"),g=new G(a,"1.34.3",ri),h=Ia();g.set(ti,h);f.set(ti,h);f.set(Di,"1.34.3");f.set(Ei,window?window.location.href:null);f.set(Fi,window?window.navigator.userAgent:"");a.v&&a.v.ra&&(c&&(b&&(a.v.A.fa=a.v.A.P),a.v.Y()),d=a.v.ra(b,c),"object"===typeof d&&f.set(a.v.id,d),c&&(a.v.A.ba=!1,!1===d&&(e=null)));for(var h=rb(a.id),k=0;k=d||30<=(c.kb+=d))&&(e.textContent=c.A.P?c.Z.toFixed(2)+"Mhz":"Stopped",c.kb=0)}if(a.j&&(a=a.j,b=b||0,a.L)){c=a.v.A.P;d=!!(a.v.C&8);if(0>=b||60<=(a.K+=b)){e=a.v.i;if(a.J.PC){var f=a.D&&a.D.U||8,e=e||0,e=8==f?wa(e,void 0):n(e,void 0);a.J.PC.textContent!=e&&(a.J.PC.textContent=e)}a.K=0}-1>b?a.i=a.v.i:0g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g),e?"}"==e.slice(-1)?(e=e.slice(0,-1),1]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(e?" parms='"+e+"'":"")+(g?' url="'+g+'"':"")));f||(a=a.replace(/().*?(<\/xsl:variable>)/,"$1PDPjs$2"), -a=a.replace(/().*?(<\/xsl:variable>)/,"$1"+d+"$2"));g=null;if("<"==a.charAt(0))try{f||(a=a.replace(/\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(g=new window.ActiveXObject("Microsoft.XMLDOM"),g.async=!1,g.loadXML(a)):g=(new window.DOMParser).parseFromString(a,"text/xml")}catch(q){g=null,a=q.message}else a="unrecognized XML: "+(255/g.exec(a)){var e=d[2];b("Loading "+e+"...");Ja(e,null,!0,function(f,g,h){if(h||!g)c(a,"unable to resolve XML reference: "+d[0]+" ("+h+")");else{if(f=d[3])if(h=g.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=h[0],l,p=/( [a-z]+=)(['"])(.*?)\2/g;l=p.exec(f);)k=0>k.indexOf(l[1])?k.replace(">",l[0]+">"):k.replace(new RegExp(l[1]+"(['\"])(.*?)\\1"),l[0]);h[0]!=k&&(g=g.replace(h[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}g=g.replace(/<\?xml[^>]*>[\r\n]*/, -"");a=a.replace(d[0],g);Mi(a,b,c)}})}else c(a,null)} -function Ni(a,b,c,d,e){function f(a){if(void 0===k){var b=h&&w(h,"machine-warning");k=b&&b[0]||h}k&&(k.innerHTML=Ba(a))}function g(a){f("Error: "+a);l&&(--Ji||db(!0));l=!1}var h,k,l=!0;Ji++;jb[b]={};try{if(h=document.getElementById(b)){var p;if("object"==typeof resources&&(p=resources.css)){var q=document.head||document.getElementsByTagName("head")[0],D=document.createElement("style");D.type="text/css";D.styleSheet?D.styleSheet.cssText=p:D.appendChild(document.createTextNode(p));q.appendChild(D)}d|| -(p=a,"pdp"==a.substr(0,3)&&(p="pdpjs"),d="/versions/"+p+"/1.34.3/components.xsl");p=function(e,k){k?Ki(d,null,a,null,!1,f,function(a,e){e?(ib(b,d,a),f("Processing "+c+"..."),window.ActiveXObject||"ActiveXObject"in window?(e=k.transformNode(e))?(h.outerHTML=e,--Ji||db(!0)):g("transformNodeToObject failed"):document.implementation&&document.implementation.createDocument?(a=new XSLTProcessor,a.importStylesheet(e),(e=a.transformToFragment(k,document))?h.parentNode?(h.parentNode.replaceChild(e,h),--Ji|| -db(!0)):g("invalid machine element: "+b):g("transformToFragment failed")):g("unable to transform XML: unsupported browser")):g(a)}):g(e)};"<"!=c.charAt(0)?Ki(c,b,a,e,!0,f,p):Li(c,null,b,a,e,!1,f,p)}else g("missing machine element: "+b)}catch(F){g(F.message)}return l}window.embedPDP10=function(a,b,c,d){db(!1);return Ni("pdp10",a,b,c,d)};window.embedPDP11=function(a,b,c,d){db(!1);return Ni("pdp11",a,b,c,d)};window.findMachineComponent=function(a,b){return tb(b,a+".machine")}; +m.sa=function(a,b,c){var d=this;switch(b){case "power":return this.J[b]=c,c.onclick=function(){d.w||(d.A.ba?Ig(d,!1,!0):pi(d,d.Wa))},!0;case "reset":return this.J[b]=c,c.onclick=function(){if(d.A.ba&&!d.w)if(d.b&&!d.F){var a=qb("Click OK to save changes to this "+Sb+" machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");Ig(d,a,!0);!a&&d.M?window&&window.location.reload():d.Wa(mi)}else d.reset(),d.v&&!d.D&&d.v.fa()},!0;case "save":if(Aa(La(),"pcjs.org"))c.parentNode.removeChild(c); +else return this.J[b]=c,c.onclick=function(){var a=li(d,!0);if(a){var b=!!(d.b&&!d.F||d.M),c=Ig(d,b);b?Gi(d,a,c):d.ja("Resume disabled, machine state not saved")}},!0}return!1}; +function li(a,b){var c=a.i;c||((c=Oa(Bi),void 0!==c)?!c&&b&&(b=null,window&&(b=window.prompt("Saving machine states on the pcjs.org server is currently unsupported.\n\nIf you're running your own server, enter your user ID below.","")),c=b)&&((c=Ii(a,c))||a.ja("The user ID is invalid.")):b&&a.ja("Browser local storage is not available"));return c} +function Ii(a,b){a.i=null;b=Ja(La()+"/api/v1/user?req=verify&user="+b);var c=b[1];if(!b[0]&&c)try{b=eval("("+c+")"),b.code&&"ok"==b.code&&(Ta(Bi,b.data),a.i=b.data)}catch(d){r(d.message+" ("+c+")")}return a.i}function oi(a){var b=null;a.i&&(b=La()+"/api/v1/user?req=load&user="+a.i+"&state="+Ji(a,"1.34.3"));return b} +function Gi(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=Ji(a,"1.34.3");d.data=c;b=Ja(La()+"/api/v1/user",d);d=b[0];if(b[1]){if(d){var e=d.indexOf("\n");0g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g),e?"}"==e.slice(-1)?(e=e.slice(0,-1),1]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(e?" parms='"+e+"'":"")+(g?' url="'+g+'"':"")));f||(a=a.replace(/().*?(<\/xsl:variable>)/,"$1PDPjs$2"), +a=a.replace(/().*?(<\/xsl:variable>)/,"$1"+d+"$2"));g=null;if("<"==a.charAt(0))try{f||(a=a.replace(/\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(g=new window.ActiveXObject("Microsoft.XMLDOM"),g.async=!1,g.loadXML(a)):g=(new window.DOMParser).parseFromString(a,"text/xml")}catch(q){g=null,a=q.message}else a="unrecognized XML: "+(255/g.exec(a)){var e=d[2];b("Loading "+e+"...");Ja(e,null,!0,function(f,g,h){if(h||!g)c(a,"unable to resolve XML reference: "+d[0]+" ("+h+")");else{if(f=d[3])if(h=g.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=h[0],l,p=/( [a-z]+=)(['"])(.*?)\2/g;l=p.exec(f);)k=0>k.indexOf(l[1])?k.replace(">",l[0]+">"):k.replace(new RegExp(l[1]+"(['\"])(.*?)\\1"),l[0]);h[0]!=k&&(g=g.replace(h[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}g=g.replace(/<\?xml[^>]*>[\r\n]*/, +"");a=a.replace(d[0],g);Ni(a,b,c)}})}else c(a,null)} +function Oi(a,b,c,d,e){function f(a){if(void 0===k){var b=h&&w(h,"machine-warning");k=b&&b[0]||h}k&&(k.innerHTML=Ba(a))}function g(a){f("Error: "+a);l&&(--Ki||db(!0));l=!1}var h,k,l=!0;Ki++;jb[b]={};try{if(h=document.getElementById(b)){var p;if("object"==typeof resources&&(p=resources.css)){var q=document.head||document.getElementsByTagName("head")[0],D=document.createElement("style");D.type="text/css";D.styleSheet?D.styleSheet.cssText=p:D.appendChild(document.createTextNode(p));q.appendChild(D)}d|| +(p=a,"pdp"==a.substr(0,3)&&(p="pdpjs"),d="/versions/"+p+"/1.34.3/components.xsl");p=function(e,k){k?Li(d,null,a,null,!1,f,function(a,e){e?(ib(b,d,a),f("Processing "+c+"..."),window.ActiveXObject||"ActiveXObject"in window?(e=k.transformNode(e))?(h.outerHTML=e,--Ki||db(!0)):g("transformNodeToObject failed"):document.implementation&&document.implementation.createDocument?(a=new XSLTProcessor,a.importStylesheet(e),(e=a.transformToFragment(k,document))?h.parentNode?(h.parentNode.replaceChild(e,h),--Ki|| +db(!0)):g("invalid machine element: "+b):g("transformToFragment failed")):g("unable to transform XML: unsupported browser")):g(a)}):g(e)};"<"!=c.charAt(0)?Li(c,b,a,e,!0,f,p):Mi(c,null,b,a,e,!1,f,p)}else g("missing machine element: "+b)}catch(F){g(F.message)}return l}window.embedPDP10=function(a,b,c,d){db(!1);return Oi("pdp10",a,b,c,d)};window.embedPDP11=function(a,b,c,d){db(!1);return Oi("pdp11",a,b,c,d)};window.findMachineComponent=function(a,b){return tb(b,a+".machine")}; window.processMachineScript=function(a,b){var c=!1;a+=".machine";if("string"==typeof b&&!wb[a]){for(var c=!0,d=wb,e=a,f=b.length,g=[],h=[],k="",l=null,p=0;p