ASMB,A,L,C
     HED CDMP - STANDALONE DUMP TO CART 
      ORG 2         RUN PROGRAM 
      JMP 3,I         BY SETTING P REG
      DEF CDMP        TO 2
* 
* 
      ORG 77000B
* 
*     !CDMP IS A STANDALONE PROGRAM THAT DUMPS A CRASHED
*     SYSTEM TO THE LEFT CARTRIDGE 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 42 INDICATES A NONRECOVERABLE WRITE ERROR.  BY HITTING 
*     RUN YOU CAN TRY AGAIN.
*     A HALT 70 INDICATES A PAUSE TO CHANGE TAPES.
*         (AFTER THE MAPS, AFTER THE DRIVERS, AND AFTER THE SYSTEM A.S.)
*     A HALT 77 INDICATES A NORMAL COMPLETION.
*         (AFTER THE USER ADDRESS SPACE)
* 
*     TO RUN -- SET THE P REGISTER TO 2 AND THE S REGISTER TO 
*     THE SELECT CODE OF THE TERMINAL.
* 
*     THIS PROGRAM IS PART OF THE CRASH DUMP ANALYSIS PACKAGE 
* 
* 
*     EJH   ??/??/??
*     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 
SC    EQU 25B 
***** 
* 
*     CONFIGURE 
* 
***** 
CDMP  LIA 1         LOAD DISPLAY REG INTO A REG 
      ADA SFS1      BUILD INST SFS SC 
      STA FIX1
      ADA LIA2      BUILD INST LIA SC 
      STA FIX3
      ADA OTA3      BUILD INST OTA SC 
      STA FIX4
      ADA STC4      BUILD INST STC SC,C 
      STA FIX5
      STA FIX2
***** 
* 
*     MAIN ROUTINE
* 
***** 
INIT  RSA           SAVE MEMORY 
      STA MSTAT         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 MAPS TO THE CART AND PAUSE
* 
      JSB MAPS
      JSB EOF       WRITE AN EOF ON THE TAPE
      HLT 70B       PAUSE 
* 
*     TURN THE MAPS ON
* 
      LDA D32 
      CAX           LOAD 32 MAP REGISTERS 
      CLA           STARTING WITH MR 0
      CLB           AND VALUES FROM 0 
      XMS           SET MAPS
      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 CART.  PAUSE WHEN DONE 
* 
PH2   JSB POUT        PUT OUT PAGE
      ISZ CPAGE       BUMP PAGE # 
      LDB CPAGE 
      CPB DLIM        LAST PAGE?
      RSS 
      JMP PH2         NO - DO MORE
      JSB EOF         WRITE AN EOF ON THE TAPE
      HLT 70B         LET THE USER CHANGE CARTS 
* 
*     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 PHYSICAL MEMORY 
*     PAUSE AFTER THE SYSTEM MAP IS DUMPED. 
* 
      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 B2040       ARE WE THROUGH THE SYSTEM MAP?
      JMP HPAUS           YES - PAUSE 
      CPA B2100       ARE WE ALL DONE?
      RSS 
      JMP WL          NO - CONTINUE 
      JSB EOF         YES - WRITE AN EOF ON THE TAPE
STOP  HLT 77B         THE END!! 
      JMP STOP
* 
HPAUS JSB EOF         WRITE AN EOF ON THE TAPE
      HLT 70B         PAUSE TO LET THE USER CHANGE CARTS
      JMP WL          DO NEXT ITERATION 
* 
*     SUBROUTINE TO WRITE AN EOF ON THE TAPE
* 
EOF   DEF *-* 
      LDB ESC 
      JSB OTWD
      LDB P5
      JSB OTWD
      LDA C 
      JSB OTBYT 
      JMP EOF,I       RETURN
* 
*     MAPS WRITES THE FOUR MAPS TO THE TAPE/CART
* 
MAPS  NOP 
      LDA BADDR       SAVE
      SYA 
      USA                 MAPS
      PAA 
      PBA 
      LDB D1          WRITE 
      JSB MSETM         -SET MAP- 
      LDB B2000           MAPS
      JSB WRIT
      JMP MAPS,I      RETURN
* 
*     POUT WRITES A PAGE OF MEMORY TO THE CART
*     THE A REGISTER HAS THE PAGE NUMBER
* 
POUT  NOP 
      JSB MSETM       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 
* 
MSETM NOP 
      LDA D1          MAP 
      CAX                 THE PAGE SPECIFIED
      LDA WPAG                TO WPAG 
      XMS 
      JMP MSETM,I     RETURN
* 
*     WRIT WRITES 128 BYTES FROM THE ADDRESS SPECIFIED
*     BY THE B REGISTER (MAPPING MUST ALREADY BE DONE)
* 
WRIT  NOP 
      STB ADR       SAVE PARM 
* 
*     PUT OUT ESCAPE SEQUENCE 
* 
      LDA EPTR      RESET POINTER 
      STA *+1 
ESLP  LDB ESC       GET A WORD OF THE ESC SEQ 
      ISZ *-1       MOVE TO NEXT WORD 
      JSB OTWD      OUTPUT CURRENT WORD 
      CPB EOT       IS IT END OF ESC SEQ? 
      RSS           YES-GO WAIT FOR ACK 
      JMP ESLP      NO-DO NEXT ESC SEQ WORD 
* 
*     ACKNOWLEDGE 
* 
WACK  LDA ENQ       SEND ENQ
      JSB OTBYT 
      JSB INBYT     GET ACK 
      CPA ACK       IS IT ACK?
      CLE,RSS       YES-SKIP
      JMP WACK      NO-LOOP 
* 
* 
*     OUTPUT RECORDS
* 
* 
      LDA M128      GET COUNTER #WDS/REC
      STA TMP 
OTLP  LDB ADR,I     O.W. GET IT OUT OF SYS MAP
      JSB OTWD      WRITE THE WORD
      ISZ ADR       GET THE NEXT ADDRESS
      ISZ TMP       DONE WITH REC?
      JMP OTLP      NO-DO NEXT WORD 
      LDA DC1       YES-SEND DC1
      JSB OTBYT 
      JSB INBYT     GET TAPE STATUS 
      CPA S         S-SUCCESS? (F-FAIL) 
      JMP *+3       YES-SKIP
      HLT 42B       NO-HALT 
      JMP INIT      2ND CHANCE TO RUN 
      JSB INBYT     WAIT FOR CR 
      JMP WRIT,I    RETURN
* 
*     OUTPUT ONE WORD 
* 
OTWD  NOP           OUTPUT ONE WORD TO CTU
      CCE           START WITH UPPER HALF 
      LDA B         PUT DATA IN A REG 
      ALF,ALF       PUT IN LOWER POSITION 
      AND B377      MASK OUT UPPER HALF 
      JSB OTBYT     OUTPUT BYTE 
      SEZ,RSS       SECOND HALF WRITTEN?
      JMP OTWD,I    YES-RETURN
      LDA B         N0-PUT DATA IN A REG
      CLE           SET LOWER HALF FLAG 
      JMP OTWD+4    WRITE IT
* 
*     INPUT ONE BYTE
* 
INBYT NOP           INPUT ONE BYTE
      JSB SETUP     FIX UP I O INTERFACE CARD 
      LDA RCV       PUT IN RECEIVE MODE 
      JSB OUT 
FIX2  STC SC,C      DO IT 
FIX3  LIA SC        PUT THE BYTE INTO A-REG 
      SSA,RSS       VALID?
      JMP *-2       NO. GET ANOTHER.
      AND B377      MASK OUT UPPER HALF 
      JMP INBYT,I   RETURN
* 
*     OUTPUT ONE BYTE 
* 
OTBYT NOP           OUTPUT ONE BYTE 
      STA OVAL      SAVE VALUE TO SEND
      JSB SETUP     FIX UP I O INTERFACE CARD 
      LDA XMIT      PUT IN TRANSMIT MODE
      JSB OUT 
      LDA OVAL      GET VALUE TO SEND 
      JSB OUT       SEND THE BYTE 
FIX5  STC SC,C      PUT CARD IN DATA MODE 
FIX1  SFS SC        IS I/O DONE?
      JMP *-1       NO-WAIT 
      JMP OTBYT,I   RETURN
* 
*     DO ONE OTA
* 
OUT   NOP 
FIX4  OTA SC
      JMP OUT,I 
* 
*     SET UP THE INTERFACE CARD 
* 
SETUP NOP 
      LDA MSET      MASTER RESET
      JSB OUT 
      LDA CHMD      PUT IN CHAR MODE
      JSB OUT 
      LDA FRAM      CHAR FRAME CONTROL
      JSB OUT 
      JMP SETUP,I   RETURN
* 
* 
* 
SFS1  OCT 102300    TO BUILD SFS COMMAND
LIA2  OCT 000200    TO BUILD LIA COMMAND
OTA3  OCT 000100    TO BUILD OTA COMMAND
STC4  OCT 001100    TO BUILD STC,C COMMAND
* 
* 
M128  DEC -128
B377  OCT 377 
* 
* 
OVAL  NOP 
ADR   NOP 
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
B2040 OCT 2040        ADDRESS OF 33RD PAGE IN 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 2           MAP REGISTER # TO USE FOR I/O 
* 
MSET  OCT 150077    MASTER RESET
FRAM  OCT 30003     CHAR FRAME CONTROL
RCV   OCT 40340     PUT IN RECEIVE MODE 
XMIT  OCT 40740     PUT IN TRANSMIT MODE
CHMD  OCT 10040     PUT IN CHAR MODE
* 
* 
EPTR  LDB ESC 
* 
* 
ESC   OCT 015446    ASCII "ESC" "&" 
      OCT 070061    ASCII LOWER CASE "P" "1"
      OCT 062062    ASCII LOWER CASE "D" "2"
      OCT 032466    ASCII "5" "6" 
EOT   OCT 053421    ASCII UPPER CASE "W" "DC1"
P5    OCT 070065    ASCII LOWER CASE "P" "5"
C     OCT 000103    ASCII UPPER CASE "C"
ENQ   OCT 000005    ASCII "ENQ" 
ACK   OCT 000006    ASCII "ACK" 
DC1   OCT 000021    ASCII DEVICE CONTROL 1
S     OCT 000123    ASCII UPPER CASE "S"
* 
*     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 CDMP      FIRST LOCATION IN PROGRAM =>DEAD
      DEF 77777B    LAST LOCATION IN MEMORY   =>SPOT
      DEF 4666      MAGIC NUMBER
* 
* 
      END CDMP
                                                                                                      