ASMB,R,L,C
      HED TDGN [#DUMP] - GENNED IN DUMP TO TAPE 
      NAM #DUMP,1 24999-16311 REV.2024 800116 
      EXT EXEC
      EXT $MRMP     POINTER TO MEM RES MAP
* 
*     "TDGN" - (KNOWN AS #DUMP) - A "STANDALONE" PROGRAM THAT 
*     DUMPS A CRASHED SYSTEM TO MAG TAPE.  IT RESIDES IN THE MEMORY 
*     RESIDENT AREA, BUT REQUIRES NO RTE SERVICES 
* 
*     THE PROGRAM DUMPS 32K OF MEMORY, THE DRIVER PARTITIONS AND THE
*     4 SYSTEM MAPS, FOLLOWED BY THE CONTENTS OF THE SYSTEM AND 
*     USER ADDRESS SPACES.  NOTE THAT THE DUMP ORDER IS: THE FIRST 32K, 
*     THE MAPS, THE NEXT 16K, AND THE PAGES OF THE SYSTEM AND USER
*     ADDRESS SPACES THAT ARE NOT IN THE FIRST 32K OR THE DRIVER PARTITIONS.
* 
*     THE END OF THE DRIVER PARTITIONS IS FOUND BY EXAMINING C(C($MRMP)), 
*     WHICH CONTAINS THE PAGE ADDRESS OF THE FIRST PAGE AFTER 
*     THE END OF THE DRIVER PARTITIONS.  IF C($MRMP) IS LESS THAN 32, 
*     THEN NO DRIVER PARTITIONS ARE DUMPED (THEY ARE ALL IN THE FIRST 32K). 
*     IF C(C($MRMP)) IS BETWEEN 32 AND 64, THEN THAT VALUE LESS 32 IS USED. 
*     IF C(C($MRMP)) IS OVER 64, PAGES 32 - 47 ARE DUMPED AS DRIVER PARTITIONS
* 
*     BLOCKS IN THE SYSTEM AND USER MAPS THAT ARE ALSO IN THE FIRST 
*     32K OR THE DRIVER PARTITIONS ARE NOT DUMPED TWICE.
* 
*     A HALT 41 INDICATES TAPE NOT READY.  (NOT AT LOAD POINT)
*     A HALT 42 INDICATES A NONRECOVERABLE WRITE ERROR. 
*     A HALT 43 INDICATES UNABLE TO WRITE END OF FILE.
*     BY HITTING RUN YOU CAN TRY AGAIN. 
*     A HALT 77 INDICATES A NORMAL COMPLETION.
* 
*     TO RUN -- SET THE P REGISTER TO THE ADDRESS OF \DUMP IN THE 
*     SYSTEM (THIS IS GENNED IN).  SET THE S REGISTER TO THE SELECT 
*     CODE OF THE MAG TAPE.  NOTE THAT THE PROGRAM IS ALREADY LOADED
*     INTO MEMORY, AND NO BOOT LOAD IS NECESSARY. 
* 
*     THIS PROGRAM IS PART OF THE CRASH DUMP ANALYSIS PACKAGE 
* 
*     24999-         REV 1902 
* 
*     TEF  12/23/78 
*     JEF  01/16/80 
* 
* 
A     EQU 0 
B     EQU 1 
S     EQU 1 
* 
*     PUT A TRAP IN IN CASE ANYONE TRIES TO "RU,#DUMP"
* 
#DUMP JSB EXEC      CALL EXEC 
      DEF *+2       RETN ADDR 
      DEF D6        PROGRAM TERMINATION 
* 
*     SELECT CODE OF M.T. INITIALIZATION
* 
TDGN  STA DADDR     SAVE \DUMP ADDRESS
      LIA S         GET THE LOWER M.T. SELECT CODE
      STA DC        SET THE DATA CHANNEL
      INA 
      STA CC        SET THE COMMAND CHANNEL 
* 
*   SET-UP I/O INSTRUCTIONS FOR M.T.
* 
      LDA OTA.1 
      IOR CC
      STA OTA.1 
      STA OTA.2 
      STA OTA.4 
      STA OTA.5 
      STA OTA.6 
      LDA STC.2 
      IOR DC
      STA STC.2 
      INA 
      STA STC.4 
      STA STC.5 
      STA STC.6 
      LDA LIA.1 
      IOR CC
      STA LIA.1 
      STA LIA.2 
      STA LIA.4 
* 
*                   INITIALIZE THE M.T. INTERFACE 
* 
MEM1  LDA CLR       CLEER THE INTERFACE 
OTA.1 OTA 00
      LDA SLECT     UNIT SELECT 
OTA.2 OTA 00
* 
*                   CHECK THE M.T. INITIAL STAT 
* 
LIA.2 LIA 00
      AND ALL7      MASK OFF THE DENSITY BIT
      CPA BIT6      ONLY THE LOAD POINT BIT SHOULD BE SET 
      JMP READY 
      HLT 41B 
      JMP LIA.2 
* 
*     FIGURE OUT HOW MANY PHYSICAL PAGES TO DUMP -
*       IF $MRMP IS BETWEEN 32 AND 63, USE THAT; IF IT IS 
*       LESS THAN 32, USE 32; OTHERWISE DUMP 48K
* 
READY LDA $MRMP,I     LOAD MR BASE PAGE ADDR
      AND B1777       MASK OUT PROTECT BITS 
      LDB A           B REG HAS # TO USE
      STA TMP         & SAVE
      ADA M32 
      SSA             >= 32?
      LDB D32         NO - USE 32K
      LDA TMP 
      ADA M64         SUBTRACT 64 
      SSA,RSS         MR BP >= 64?
      LDB D48         YES - SET DUMP LIMIT TO 48K 
      STB DLIM            SAVE
      CLB             SET 
      STB CPAGE           CURRENT PAGE NUMBER 
* 
*     WRITE PAGES TO TAPE - THE MAPS ARE WRITTEN AFTER
*     THE FIRST 32K.
* 
PH    JSB POUT        PUT OUT PAGE
      ISZ CPAGE       BUMP PAGE # 
      LDB CPAGE 
      CPB D32         IS PAGE 32 NEXT?
      JSB MAPS        YES - WRITE MAPS
      CPB DLIM        LAST PAGE?
      RSS 
      JMP PH          NO - DO MORE
* 
*     DUMP THE CONTENTS OF THE SYSTEM AND USER MAPS 
*     DO NOT DUMP PAGES THAT ALREADY HAVE BEEN DUMPED 
*     IN THE FIRST 32K OR THE DRIVER PARTITIONS 
* 
      LDA B2000       INIT
      STA MADDR           LOOP
WL    LDA MADDR,I     GET PAGE #
      AND B1777       MASK OUT READ/WRITE PROTECT 
      STA TMP         HOLD
      CMA,INA         CHECK 
      ADA DLIM            IF PAGE HAS TO
      CMA,SSA,INA,SZA         BE DUMPED 
      JMP NEXT        NO - PAGE WAS ALREADY DUMPED
      LDB TMP         YES - WRITE 
      JSB POUT            PAGE
NEXT  ISZ MADDR       BUMP PAGE 
      LDA MADDR           NUMBER
      CPA B2100       ARE WE ALL DONE?
      RSS 
      JMP WL          NO - CONTINUE 
* 
*     NOW WRITE AN END OF FILE
* 
      LDA WEOF      WRITE AN EOF ON M.T.
OTA.4 OTA 00
STC.4 STC 00,C
LIA.4 LIA 00
      AND ALL7
      CPA O4200     EOF + ODD # OF BYTES XFERRED
      JMP MEM5
      JSB CKSTA 
      JMP LIA.4 
      HLT 43B 
      JMP LIA.4 
MEM5  LDA REWOF     REWIND TO OFF-LINE
OTA.5 OTA 00
STC.5 STC 00,C
      HLT 77B       SUCCESSFUL COMPLETION 
* 
*     MAPS RETRIEVES THE SYSTEM MAP FROM \DUMP
*     IN THE FIRST 32K AND THEN WRITES ALL FOUR MAPS
*     TO THE TAPE.
* 
MAPS  NOP 
      LDA D2          MAP 
      CAX                 PHYS PAGES 1+2
      LDA D1                  AS
      LDB A                       SYS PAGES 
      XMS                         1+2 
      LDA BADDR       SAVE
      USA                 USER
      PAA                 PORT A
      PBA                 AND PORT B MAPS 
      LDA D32         MAP PHYS PAGES 0-31 
      CAX                 AS USER MAP 
      CLB 
      XMS 
      LDA D32         MOVE
      CAX                 32 WORDS
      LDA DADDR               FROM \DUMP
      LDB B2000                   TO PAGE 1 
      MWF                         (SYS MAP) 
      LDB D1          WRITE 
      JSB MSET          -SET MAP- 
      LDB B2000           MAPS
      JSB WRIT
      LDB CPAGE       RETORE CPAGE
      JMP MAPS,I      RETURN
* 
*     POUT WRITES A PAGE OF MEMORY TO THE TAPE
*     THE B REGISTER HAS THE PAGE NUMBER
* 
POUT  NOP 
      JSB MSET        SET MAP 
      LDB B4000       INIT
      STB DPAD            ADDR
PCONT JSB WRIT        WRITE 128 WORDS 
      LDB DPAD        INCR DUMP ADDR
      ADB B200            BY 128
      STB DPAD
      CPB B6000       DONE? 
      JMP POUT,I      YES - RETURN
      JMP PCONT 
* 
*     MSET SETS THE MAP REGISTER SPECIFIED BY WPAG
*     TO THE PAGE SPECIFIED BY THE B REGISTER 
* 
MSET  NOP 
      LDA D1          MAP 
      CAX                 THE PAGE SPECIFIED
      LDA WPAG                TO WPAG 
      XMS 
      JMP MSET,I      RETURN
* 
* SET UP DMA WITH THE 3 CONTROL WORDS : 
* 
*   CW1 --- M.T. SELECT CODE
*   CW2 --- STARTING ADDRESS
*   CW3 --- NO. OF WORDS TO BE TRANSFERRED
* 
*     WRIT WRITES 128 BYTES FROM THE ADDRESS SPECIFIED
*     BY THE B REGISTER (MAPPING MUST ALREADY BE DONE)
* 
WRIT  NOP 
      LDA DC
      IOR BIT13     CLEAR CONTROL AT END OF XFER
      OTA 6         OUTPUT CW1 TO DCPC CHANNEL 1
      CLC 2 
      OTB 2         OUTPUT CW2
      STC 2 
      LDA M128      ALWAYS DO 128 WORDS 
      OTA 2         OUTPUT CW3
* 
* INITIATE M.T. & DMA 
* 
      LDA WREC      WRITE 1 RECORD COMMAND
OTA.6 OTA 00
STC.6 STC 00,C
STC.2 STC 00,C
      STC 6,C       INITIATE DMA
* 
* WAIT FOR COMPLETION OF DMA TO M.T.
* 
      SFS 6 
      JMP *-1 
* 
* DMA TO M.T. COMPLETED , CHECK FOR STAT FROM M.T.
* 
LIA.1 LIA 00        GET STAT FROM COMMAND CHANNEL 
      AND ALL7      MASK OFF DENSITY BIT
      SZA,RSS 
      JMP WRIT,I    NO ERROR , EXIT 
      JSB CKSTA     CHECK STAT OF M.T.
      JMP LIA.1 
      LDA STAT
      HLT 42B       UNRECOVERABLE WRITE ERROR 
      JMP MEM1      START FROM BEGINNING
* 
* SUBROUTINE TO CHECK THE STAT OF M.T.
* 
CKSTA NOP 
      STA STAT      SAVE STAT 
      AND BIT8      CHECK FOR CONTROLLER BUSY FLAG
      SZA 
      JMP CKSTA,I 
      LDA STAT
      AND BIT3      CHECK FOR REJECT FLAG 
      SZA 
      JMP CKSTA,I 
      LDA STAT
      AND BIT9      CHECK FOR TRANSPORT BUSY FLAG 
      SZA 
      JMP CKSTA,I 
      ISZ CKSTA 
      JMP CKSTA,I 
* 
* MAG TAPE COMMANDS FOR OUTPUT
* 
CLR   OCT  110
SLECT OCT  1400 
WREC  OCT  31 
WEOF  OCT  211
REWOF OCT  105
* 
BIT3  OCT  10 
BIT6  OCT  100
BIT8  OCT  400
BIT9  OCT  1000 
O4200 OCT  4200 
BIT13 OCT  20000
ALL7  OCT  77777
* 
CC    OCT  0
DC    OCT  0
STAT  OCT  0
M128  DEC  -128 
M32   DEC -32 
M64   DEC -64 
D48   DEC 48
D6    DEC 6           CODE FOR PROGRAM TERMINATION
DLIM  DEF *-*         NUMBER OF PHYSICAL PAGES TO DUMP
CPAGE DEF *-*         PAGE BEING DUMPED 
B2000 OCT 2000
TMP   DEF *-* 
B1777 OCT 1777
MADDR DEF *-*         ADDRESS WITHIN MAP TABLE
B2100 OCT 2100        ADDRESS OF 65TH PAGE IN MAP TABLE 
D1    DEC 1 
D2    DEC 2 
D32   DEC 32
DADDR DEF *-*         ADDRESS OF ENTRY POINT
BADDR OCT 102040      FOR DUMPING MAPS TO 2040
B4000 OCT 4000
B200  OCT 200 
B6000 OCT 6000
DPAD  DEF *-*         ADDRESS OF NEXT RECORD TO WRITE 
WPAG  DEF 66          MAP REGISTER # TO USE FOR I/O 
* 
      END #DUMP 
      END$
                                                                                                                                                                                                            