ASMB,A,L,C
      HED TDMP - STANDALONE DUMP TO TAPE
      ORG 2         RUN PROGRAM 
      JMP 3,I         BY SETTING P REG
      DEF TDMP        TO 2
* 
* 
      ORG 77377B
* 
*     !TDMP IS A STANDALONE PROGRAM THAT DUMPS A CRASHED
*     SYSTEM TO MAG TAPE. 
* 
*     THE PROGRAM DUMPS 48K OF MEMORY 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 48K. 
* 
*     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 2 AND THE S REGISTER TO 
*     THE SELECT CODE OF THE MAG TAPE.
* 
*     THIS PROGRAM IS PART OF THE CRASH DUMP ANALYSIS PACKAGE 
* 
*     24999-         REV 1902 
* 
*     TEF  12/23/78 
*     JEF  01/16/80  CHANGED TO DUMP ANOTHER 16K, SYSTEM AND USER 
*                    ADDRESS SPACES, AND "DEAD SPOT" - SEE END OF FILE
* 
* 
A     EQU 0 
B     EQU 1 
S     EQU 1 
* 
* 
* 
* 
*                   SELECT CODE OF M.T. INITIALIZATION
* 
TDMP  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       CLEAR 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 
***** 
* 
*     MAIN ROUTINE
* 
***** 
READY RSA             SAVE
      STA MSTAT           MEMORY STATUS REGISTER
* 
*     DUMP THE FIRST 32K OF PHYSICAL MEMORY (MAPPING OFF) 
* 
      CLB             STARTING ADDR 
      STB DPAD            OF DUMP 
PH1   JSB WRIT        WRITE 128 WORDS 
      LDB DPAD        INCR
      ADB B200            DUMP ADDRESS
      STB DPAD
      SSB,RSS         ARE WE DONE?
      JMP PH1         NO - DO ANOTHER RECORD
* 
*     WRITE THE MAPS TO THE TAPE
* 
      JSB MAPS
* 
*     TURN THE MAPS ON
* 
      LDA D32 
      CAX             LOAD 32 MAP REGISTERS 
      CLA             STARTING WITH MR 0
      CLB             AND VALUES FROM 0 
      XMS             DO IT 
      SJP CONT        TURN ON MAPS
* 
*     SINCE WE CAN'T DETERMINE WHERE THE DRIVER PARTITIONS
*     END, WE ALWAYS DUMP 48K 
*     HERE, WE DUMP THE LATTER 16K (MAPS ON)
* 
CONT  LDB D32         SET 
      STB CPAGE           CURRENT PAGE NUMBER 
* 
*     WRITE PAGES TO TAPE 
* 
PH2   JSB POUT        PUT OUT PAGE
      ISZ CPAGE       BUMP PAGE # 
      LDB CPAGE 
      CPB DLIM        LAST PAGE?
      RSS 
      JMP PH2         NO - DO MORE
* 
*     DUMP THE CONTENTS OF THE SYSTEM AND USER MAPS 
*     DO NOT DUMP PAGES THAT ALREADY HAVE BEEN DUMPED 
*     I.E., PAGES IN THE FIRST 48K OF PHYS MEMORY 
* 
      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 WRITES THE FOUR MAPS TO THE TAPE 
* 
MAPS  NOP 
      LDA BADDR       SAVE
      SYA 
      USA                 MAPS
      PAA 
      PBA 
      LDB D1          WRITE 
      JSB MSET          -SET MAP- 
      LDB B2000           MAPS
      JSB WRIT
      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       NO - DO MORE
* 
*     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
DLIM  DEF 48          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 
D32   DEC 32
BADDR OCT 102000      FOR DUMPING MAPS TO 2000
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 
* 
*     THE NEXT FOUR WORDS CONTAIN THE MEMORY STATUS REGISTER
*     AND THE ADDRESSES OF THE "DEAD SPOT"
*     THEY ARE ASSUMED TO BE AT 077674-077677 ABSOLUTE
* 
MSTAT DEF *-*       MEMORY STATUS REG IMAGE 
      DEF TDMP      FIRST LOCATION IN PROGRAM =>DEAD
      DEF 77777B    LAST LOCATION IN MEMORY   =>SPOT
      DEF 4666      MAGIC NUMBER
* 
      END 
      END$
                                                                                                        