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$