ASMB,A,B,L,C
      HED *** MEMORY EXPANSION MODULE DIAGNOSTIC ***
      ORG 0 
      SUP 
      SPC 10
*                 **************************************************
*                 **************************************************
*                 **                                              **
*                 **                                              **
*                 **                                              **
*                 **                                              **
*                 **                  MEMORY                      **
*                 **                EXPANSION                     **
*                 **                  MODULE                      **
*                 **                DIAGNOSTIC                    **
*                 **                                              **
*                 **                                              **
*                 **                             JULY 6, 1978     **
*                 **                                              **
*                 **************************************************
*                 **************************************************
      SKP 
*     GENERAL OPERATING PROCEDURE 
* 
*         A. LOAD DIAGNOSTIC CONFIGURATOR AND SET IT UP.
*         B. LOAD DIAGNOSTIC MAIN PROGRAM 
*         C. LOAD ADDRESS 100B. 
*         D. LOAD SWITCH REG. WITH SELECT CODE AND OPTIONS
*         E. PRESS RUN AND WAIT FOR HALT 102074 
*         F. LOAD SWITCH REGISTER 
*                   IF SET =: 
*                   15 = HALT AT END OF EACH TEST 
*                   14 = SUPRESS ERROR HALTS
*                   13 = LOOP ON LAST TEST
*                   12 = LOOP ON DIAGNOSTIC 
*                        (SUPPRESS ALL OPERATOR INTERVENTION) 
*                   11 = SUPRESS ERROR MESSAGES 
*                   10 = SUPRESS NON-ERROR MESSAGES 
*                    9 = GO TO USER CONTROL SECTION 
*                        AT END OF PRESENT TEST 
*                    8= SUPPRESS OPERATOR INTERVENTION TESTS
*                    7
*                      = DIAGNOSTIC OPTIONS 
*                    0
*         NOTE: STANDARD RUN SHOULD BE WITH SW. REG. = 0
*               USER CONTROL WILL ASK FOR A 32 BIT WORD.
*               EACH BIT WILL = 1 TEST
* 
*         G. PRESS RUN. 
*         H. RESTART - LOAD ADDRESS 2000B 
*         I. RECONFIGURE IF TESTING I/O INTERFACE - LOAD ADDRESS 100B 
* 
*         GENERAL COMPUTER HALTS
* 
*         1020XX    E OR H  000 TO 067
*         1060XX    E OR H  100 TO 167
*         1030XX    E OR H  200 TO 267
*         1070XX    E OR H  300 TO 367
* 
*         CONTROL PROGRAM HALT MESSAGES 
* 
*         102077    END OF DIAG (A = PASS COUNT)
*         102076    END OF TEST (A = TEST #)
*         102075    USER SELECTION REQUEST
*         102074    SELECT CODE INPUT COMPLETE
*         102073    USER SELECT CODE ERROR
*         102072    RESERVED
*         102071    RESERVED
*         102070    RESERVED
* 
*         106077    TRAP CELL HALT
* 
* 
* 
      HED CONFIGURATOR LINKAGE TABLE
A     EQU 0         A REGISTER REFERENCE
B     EQU 1         B REGISTER REFERENCE
SW    EQU 1         SWITCH REGISTER REFERENCE 
INTP  EQU 0         INTERRUPT CHANNEL REFERENCE 
MEMSC EQU 5 
DVICE EQU 0 
      SPC 1 
      ORG 100B
      SPC 1 
      JMP CFIG,I    GO TO CONFIGURATION SECTION 
FAIN  BSS 1         FAST INPUT (PHOTO READER) 
SLOP  BSS 1         SLOW OUTPUT (LIST)
FAOP  BSS 1         FAST OUTPUT (DUMP OR PUNCH) 
SLIN  BSS 1         SLOW INPUT (KEYBOARD) 
FWAM  DEF FWAA      FIRST WORD OF AVBL. MEMORY
LWAM  BSS 1         LAST WORD OF AVBL. MEMORY 
      BSS 1         NOT USED (MAG TAPE) 
OTMC  BSS 1         1 MILL SEC TIME OUT COUNT 
      BSS 4         SELECT CODES FOR I/O
CPTO  BSS 1         COMPUTER TYPE/OPTIONS 
USSC  NOP           USER CARD TYPE AND SELECT CODE
MEMO  BSS 1         MEMORY SIZE AND TYPE
ISWR  BSS 1         INTERNAL SWITCH REGISTER
TMRR  BSS 1         1 MILL SEC TIMER
SWRC  BSS 1         CONFIGURATOR SWITCH CK PTR
I2AS  BSS 1         INTEGER TO ASCII CONVERSION 
O2AS  BSS 1         OCTAL TO ASCII CONVERSION 
AS2N  BSS 1         ASCII CONVERSION
DSNL  OCT 102103
FMTR  BSS 1         FORMATTER 
      SPC 1 
*               CONTROL LINKAGE AND DATA REFERENCES 
      SPC 1 
CFIG  DEF ZCONF     CONFIGURATION SECTION 
MSGC  DEF ZMSGC     MESSAGE WITH NO HALT
MSGH  DEF ZMSGH     MESSAGE WITH HALT 
ERMS  DEF ZERMS     ERROR MESSAGE 
SWRT  DEF ZSWRT     SWITCH REGISTER CHECK ROUTINE 
TSTN  OCT 0         CURRENT TEST NUMBER 
EXRT  DEF ZEXRT     RETURN TO CONTROL PROGRAM 
      NOP           RESERVED
      SPC 1 
*               TABLE OF POINTERS 
      SPC 1 
IOIP  DEF IODP
TSTP  DEF TSTD
HDMP  DEF HDMS
HDMP1 DEF HDMS+21 
MSP23 DEF H327+2
STDA  OCT -1
STDB  OCT 7 
      NOP 
      NOP 
      NOP 
      HED *** MEM DIAGNOSTIC LINKAGE
      SPC 1 
HDMS  ASC 25,MEMORY EXPANSION MODULE DIAGNOSTIC, DSN = XXXXXX/
      SPC 2 
*               TEST POINTER TABLE
      SPC 3 
TSTD  DEF TST00     TRANSFER MAP OR MEMORY       A 0
      DEF TST01     TRANSFER MAP SEQUENTIALLY    A 1
      DEF TST02     TRANSFER MAPS INTERNALLY     A 2
      DEF TST03     LOAD/STORE MAPS              A 3
      DEF TST04     STATUS - FENCE REGISTER      A 4
      DEF TST05     CROSS LOAD/STORE/COMPARE     A 5
      DEF TST06     MOVE WORDS INSTRUCTIONS      A 6
      DEF TST07     MOVE BYTES INSTRUCTIONS      A 7
      DEF TST10     PROTECTED MODE PRESET TEST   A 8
      DEF TST11     READ/WRITE-BP VIOLATIONS     A 9
      DEF TST12     WRITE VIOLATIONS             A10
      DEF TST13     PRIVILEGED INSTRUCTIONS 1    A11
      DEF TST14     PRIVILEGED INSTRUCTIONS 2    A12
      DEF TST15     DCPC PORTS ENABLE TEST       A13
      DEF TST16     READ VIOLATIONS              A14
      DEF TST17     INTERRUPTABLE INSTRUCTIONS   A15
      DEF TST20     DCPC INTERFERENCE TEST       B 0
      DEF TST21     VIOLATION REGISTER MAP BITS  B 1
      DEF TST22     MAP-LOAD REGISTER INCREMENT  B 2
      DEF TST23     EXTENDED MEMORY TEST         B 3
      DEF TST24     BASIC I/O  (TCP)             B 4
      DEF TST25     MAP REGISTER CRUSHER         B 5
      DEC -1
      SKP 
*               I/O INSTRUCTION POINTER TABLE 
      SPC 2 
IODP  DEF EIO01 
      DEF EIO02 
      DEF EIO03 
      DEF EIO04 
      DEF EIO4A 
      DEF EIO05 
      DEF EIO06 
      DEF EIO07 
      DEF EIO08 
      DEF EIO09 
      DEF EIO10 
      DEF DVSC1 
      DEF DMACW 
      DEF RDVC1 
      DEF NNIO1 
      DEF NNIO2 
      DEF NNIO4 
      DEF NNIO5 
      DEF JIO01 
      DEF PIO01 
      DEF PIO02 
      DEF PIO03 
      DEF PIO04 
      DEF QQIO1 
      DEF PTBCW 
      DEC -1
      SPC 3 
*               LINK ADDRESSES
      SPC 1 
ADLNK OCT 0 
M5LNK OCT 0 
      HED MEM/MPT VIOLATION CHECK SUBROUTINES 
RDVCK NOP 
      SFC MEMSC 
      JMP *+5 
      LDY RDVCK 
      JSB ERMS,I
      DEF E120
      RVA 
      SSA           CHECK TO SEE THAT IT WAS
      JMP RDVCK,I   A READ VIOLATION
      ISZ RDVCK 
      JMP RDVCK,I 
      SPC 1 
WTVCK NOP 
      SFC MEMSC 
      JMP *+5 
      LDY WTVCK 
      JSB ERMS,I
      DEF E121
      RVA 
      AND BIT14 
      SZA 
      JMP WTVCK,I 
      ISZ WTVCK 
      JMP WTVCK,I 
      SPC 1 
PIVCK NOP 
      SFC MEMSC     MEMV? 
      JMP *+5 
      LDY PIVCK 
      JSB ERMS,I
      DEF E300
      RVA           GET THE VIOLATION REGISTER
      AND BIT12     AND MAKE SURE 
      CPA BIT12     THAT THE PRIV. INST BIT IS SET
      JMP PIVCK,I   OK, USE CORRECT EXIT
      ISZ PIVCK     NOT SET, USE THE
      JMP PIVCK,I   ERROR EXIT
      SPC 3 
E120  ASC 13,E120 RDV - MPT VIOLATION/
E121  ASC 13,E121 WTV - MPT VIOLATION/
E300  ASC 13,E300 PIV - MPT VIOLATION/
      HED *** MEM DIAGNOSTIC - MAPS LOADER
LODUP NOP 
      CLA           MAKE A SEQUENCE 
      JSB MKSTB     TABLE 
      LDA LTPTB     AND 
      LDB A         LOAD THE
      USA           USER AND
      SYB           SYSTEM MAPS 
      LDA OCT10     NOW PUT 
      LDB .STB.     THE SPECIAL 
      LDX OCT05     TABLE VALUES
      XMM           IN THE SYSTEM 
      LDA OCT50     AND THE 
      LDB .UTB.     SPECIAL 
      LDX OCT05     VALUES
      XMM           IN THE USER 
      JMP LODUP,I 
      SPC 1 
.STB. DEF *+1 
      OCT 11,13,14,15,16
.UTB. DEF *+1 
      OCT 10,12,14,15,16
      SPC 2 
JLOAD NOP 
      JSB LODUP 
      LDA OCT10 
      LDB .JLS. 
      LDX OCT05 
      XMM 
      LDA OCT50 
      LDB .JLS. 
      LDX OCT05 
      XMM 
      JMP JLOAD,I 
      SPC 2 
.JLS. DEF *+1 
      OCT 100010,040011,140012,13,14
      HED REGISTER SAVE ROUTINES
RGSVE NOP 
      STA SVPD1     SAVE THE REGISTERS
      STB SVPD2     FOR 
      STX SVPD3        ERROR
      STY SVPD4          REPORTING
      JMP RGSVE,I 
      SPC 3 
RGRS1 NOP 
      LDA SVPD1     RESTORE THE REGISTERS 
      LDB SVPD2     FOR ERROR REPORTING 
      JMP RGRS1,I   EXIT
      SPC 3 
RGRS2 NOP 
      LDX SVPD3     RESTORE 
      LDY SVPD4         X AND Y 
      JMP RGRS2,I 
      SPC 3 
RGRST NOP 
      JSB RGRS1     RESTORE 
      JSB RGRS2      ALL
      JMP RGRST,I     REGISTERS 
      SPC 3 
SVPD1 OCT 0 
SVPD2 OCT 0 
SVPD3 OCT 0 
SVPD4 OCT 0 
      HED *** MEM DIAGNOSTIC - COMMON SUBROUTINES 
XMMSY NOP           ********************************
      CLA           *                              *
      LDB LTSYS     *  LOAD THE PATTERN FOUND IN   *
      LDX OCT40     *  LTSYS INTO THE SYSTEM MAP   *
      XMM           *                              *
      JMP XMMSY,I   ********************************
      SPC 3 
XMMUS NOP           ********************************
      LDA OCT40     *                              *
      LDB LTUSR     *  LOAD THE PATTERN FOUND IN   *
      LDX OCT40     *  LTUSR INTO THE USER MAP     *
      XMM           *                              *
      JMP XMMUS,I   ********************************
      SPC 3 
P1XMM NOP           ********************************
      LDA OC100     *                              *
      LDB RTPTA     *  READ THE CONTENTS OF THE    *
      LDX NON40     *  PORT A MAP INTO RTPT1       *
      XMM           *                              *
      JMP P1XMM,I   ********************************
      SPC 3 
P2XMM NOP           ********************************
      LDA OC140     *                              *
      LDB RTPTB     *  READ THE CONTENTS OF THE    *
      LDX NON40     *  PORT B MAP INTO RTPT2       *
      XMM           *                              *
      JMP P2XMM,I   ********************************
      SPC 3 
PMON  NOP 
      CLC INTP,C    PROHIBIT INTPS BEFORE WERE READY
      STF INTP      PLACE THE 
      SJP *+2        MEM IN ITS 
      STC MEMSC      PROTECTED
      JMP PMON,I     MODE W/SYSTEM ENABLED
      SPC 2 
PMONU NOP 
      CLC INTP,C    PROHIBIT INTPS BEFORE WE ARE READY
      STF INTP      PLACE THE 
      UJP *+2        MEM IN ITS 
      STC MEMSC      PROTECTED
      JMP PMONU,I    MODE W/THE USER ENABLED
      SKP 
ZORCH NOP 
      LDA MPJSB     WRITE OVER
      STA MEMSC      TCP'S SELECT 
      LDA DVJSB      CODE HALT-FILL 
DVSC1 STA DVICE      ROUTINES 
      JMP ZORCH,I    AND EXIT 
      SPC 1 
MPJSB JSB M5LNK,I 
DVJSB JSB ADLNK,I 
      SPC 2 
CAINT NOP 
      CLF INTP      CAUSE AN INTRRUPT 
EIO06 STF DVICE     ON THE DEVICE 
EIO07 STC DVICE     CONFIGURED AT 
      STF INTP      START-UP TIME 
      NOP           WAIT FOR INTERRUPT
      NOP           WAIT FOR INTERRUPT
      JSB ERMS,I    NO INTERRUPT HAS
      DEF E066      OCCURRED, REPORT TO OPERATOR
      JMP CAINT,I   THEN EXIT 
      SPC 2 
TRNOF NOP 
      CLF INTP      OFF THE INTERRUPT 
      DJP *+2       AND MEM 
      JMP TRNOF,I 
      SPC 1 
KFNCE NOP 
      LDA OC100     MADE THE M.E.M. AND 
      LFA           M.P.T. FENCE REGISTER 
      OTA MEMSC     VALUES OCTAL 100
      JMP KFNCE,I   EXIT
      SPC 1 
OFFPM NOP 
      LDA KERR1     PUT RECOVERY ROUTINE'S
      STA M5LNK     ADDRESS IN THE LINK 
      STA MEMSC     CAUSE THE INTERRUPT 
      NOP 
KERRA NOP           TO HERE,
      JSB TRNOF     OFF MEM AND INTP
      JMP OFFPM,I   AND EXIT
      SPC 1 
KERR1 DEF KERRA 
      SKP 
LTZRO NOP 
      CLA           ZERO
      CLB               THE 
      JSB MKTBL            LOAD MAP 
      OCT 074000                   TABLE
      JMP LTZRO,I 
      SPC 3 
RDZRO NOP 
      CLA           ZERO
      CLB               THE 
      JSB MKTBL            READ MAP 
      OCT 174000                   TABLE
      JMP RDZRO,I   EXIT
      SPC 3 
LTONE NOP 
      CCA           LOAD THE LOAD 
      CCB           TABLE WITH ALL
      JSB MKTBL     ONES AND
      OCT 074000
      JMP LTONE,I   EXIT
      SPC 3 
CLTBL NOP 
      JSB LTZRO     ZERO BOTH 
      JSB RDZRO             TABLES
      JMP CLTBL,I 
      SPC 2 
BIT12 OCT 10000 
BIT14 OCT 40000 
      SKP 
TBCMP NOP 
      STA MKTB1     SAVE THE DATA PATTERN 
      STB MKTB2          ADDRESSES FOR POINTERS 
      LDA RTSYS      CALCULATE THE
      CMA,INA            STARTING REGISTER
      ADA MKTB2          AND PUT IN 
      STA REGNR          REGNR
      LDY NON40     XTHRU = 40
TBCM. LDA MAPSK          MASK OFF AND 
      AND MKTB2,I        STORE THE READ TABLE 
      STA B               PATTERN 
      LDA MAPSK     DO THE SAME TO
      AND MKTB1,I    LOAD TABLE PATTERN 
      CPA B              SAME PATTERN?
      JMP *+3            YES, OVER THE ERROR
      JMP TBCMP,I         NO, USE ERROR EXIT
TCPHR NOP                 RETURN CONTINUATOR
      ISZ REGNR     BUMP THE REGISTER NUMBER
      ISZ MKTB1          THE LOAD TABLE POINTER 
      ISZ MKTB2          THE READ TABLE POINTER 
      ISY                AND THRU?
      JMP TBCM.     NO XTHRU YET, DO ANOTHER
      ISZ TBCMP     XTHRU COMPLETE, SET UP FOR
      JMP TBCMP,I   RETURN AND EXIT.
      SPC 1 
MASKO OCT 100000    BIT STRIPPER
MASK7 OCT 7 
REGNR OCT 0 
MAPSK OCT 141777
      SKP 
MKTBL NOP 
      STA MKTB1     PLACE PATTERNS
      STB MKTB2          IN SAVE SCRATCH PADS 
      LDA MKTBL,I   GET AND STORE 
      STA MKPD1          THE COMMAND WORD 
      ISZ MKTBL     UPDATE THE RETURN ADDRESS 
      SSA           WHICH TABLE?
      JSB GTRTA     GO GET READ TABLE ADDRESS 
      LDA LTSYS     OR GET LOAD TABLE ADDRESS 
      STA ADCAL     STORE IN ADDRESS CALC.
      STA MKPNT     SET UP POINTER FOR MARK 
      LDA MKPD1     GET THE COMMAND WORD
      AND SYTBC     WANT TO DO
      SZA                THE SYSTEM MAP TABLE?
      JSB MAKR      YES 
      LDA ADCAL     GET AND UPDATE
      ADA OCT40          THE TABLE POINTER
      STA MKPNT          FOR NEXT TIME THRU MAKR
      LDA MKPD1     GET THE COMMAND WORD
      AND USTBC     WANT TO DO
      SZA                THE USER MAP TABLE?
      JSB MAKR      YES 
      LDA ADCAL     GET AND UPDATE
      ADA OC100          THE TABLE POINTER
      STA MKPNT          FOR NEXT TIME THRU MAKR
      LDA MKPD1     GET THE COMMAND WORD
      AND P1TBC     WANT TO DO THE
      SZA                PORT1 MAP TABLE? 
      JSB MAKR      YES 
      LDA ADCAL     GET AND UPDATE
      ADA OC140          THE TABLE POINTER
      STA MKPNT          FOR NEXT TIME THRU MAKR
      LDA MKPD1     GET THE COMMAND WORD
      AND P2TBC     WANT TO DO THE
      SZA                PORT2 MAP TABLE? ?y
      JSB MAKR      YES 
      JMP MKTBL,I   EXIT
      SPC 1 
MKPD1 OCT 0         MAKE TABLE SCRATCH PAD REGISTER 
ADCAL OCT 0         ADDRESS CALCULATION REGISTER
SYTBC OCT 40000     SYSTEM MAP TABLE CODE 
USTBC OCT 20000     USER MAP TABLE CODE 
P1TBC OCT 10000     PORT 1 MAP TABLE CODE 
P2TBC OCT 4000      PORT 2 MAP TABLE CODE 
MKTB1 OCT 0 
MKTB2 OCT 0 
      SKP 
GTRTA NOP 
      LDA RTSYS     GET THE READ TABLE ADDRESS
      ISZ GTRTA     SKIP OVER THE LOAD TABLE ADDRESS
      JMP GTRTA,I   AND RETURN
      SPC 3 
MAKR  NOP 
      LDY NON20     INITIALIZE THE XTHRU
      LDA MKTB1     GET PATTERNS
      LDB MKTB2      ONE AND TWO
STMPT STA MKPNT,I   PLACE THE 
      ISZ MKPNT          PATTERNS 
      STB MKPNT,I             INTO THE
      ISZ MKPNT                    TABLE
      ISY           XTHRU?
      JMP STMPT     DO AGAIN
      JMP MAKR,I    XTHRU COMPLETE, EXIT
      SPC 1 
MKPNT OCT 0         ADDRESS POINTER 
PTRN1 OCT 125252
PTRN2 OCT 052525
      SPC 4 
LDTBL BSS 128       LOAD TABLE *****
LTSYS DEF LDTBL 
LTUSR DEF LDTBL+32
LTPTA DEF LDTBL+64
LTPTB DEF LDTBL+96
LTBSU DEF LDTBL+26
LTBUA DEF LDTBL+58
LTBAB DEF LDTBL+90
      SPC 1 
RDTBL BSS 128       READ TABLE *****
RTSYS DEF RDTBL 
RTUSR DEF RDTBL+32
RTPTA DEF RDTBL+64
RTPTB DEF RDTBL+96
RTBSU DEF RDTBL+26
RTBUA DEF RDTBL+58
RTBAB DEF RDTBL+90
      SKP 
MKSTB NOP           MAKE THE SEQUENCE  TABLE
      LDB NON40     INITIALIZE
      STB MKST2          XTHRU COUNTER
      LDB LTPTB     INITIALIZE
      STB MKST1          ADDRESS POINTER
.MKST STA MKST1,I   LOAD UP 
      INA                THE SEQUENCE 
      ISZ MKST1               TABLE 
      ISZ MKST2     FINISHED? 
      JMP .MKST     NO, DO AGAIN
      JMP MKSTB,I   YES, EXIT 
      SPC 1 
MKST2 OCT 0 
MKST1 OCT 0 
      SPC 3 
SQALL NOP 
      LDA NO177 
      STA SQAL1          XTHRU
      LDA LTSYS     INITIALIZE
      STA SQAL2          ADDRESS POINTER
      CLA           START W/ ZERO 
.SQAL STA SQAL2,I        AND SEQUENTIALLY 
      INA                     BUILD A 
      ISZ SQAL2                    COMPARE
      ISZ SQAL1                         TABLE 
      JMP .SQAL          AND
      JMP SQALL,I          EXIT 
      SPC 1 
SQAL1 OCT 0 
SQAL2 OCT 0 
      HED PAGE ZERO CONSTANTS 
OCT01 OCT 01
OCT02 OCT 02
OCT03 OCT 03
OCT04 OCT 04
OCT05 OCT 05
OCT06 OCT 06
OCT10 OCT 10
OCT11 OCT 11
OCT12 OCT 12
OCT14 OCT 14
OCT15 OCT 15
OCT30 OCT 30
OCT33 OCT 33
OCT37 OCT 37
OCT40 OCT 40
OCT50 OCT 50
OCT73 OCT 73
OC100 OCT 100 
OC140 OCT 140 
OC177 OCT 200 
OCT1K OCT 1000
OCT2K OCT 2000
FOURK OCT 4000
OC10K OCT 10000 
TWNTK OCT 20000 
TWN1K OCT 21000 
TWN2K OCT 22000 
TWN3K OCT 23000 
TWN4K OCT 24000 
TWN6K OCT 26000 
TWN7K OCT 27000 
THR2K OCT 32000 
FORTK OCT 40000 
FOR2K OCT 42000 
FOR4K OCT 44000 
FOR6K OCT 46000 
OCTWO OCT 02
      SPC 2 
NEG01 OCT -1
NEG02 OCT -2
NEG03 OCT -3
NON05 OCT -5
NDN08 DEC -8
                                                                                                                                                                                                      