ASMB,R,L,C HED CDGN [#DUMP] - GENNED IN DUMP TO CART NAM #DUMP,1 24999-16310 REV.2024 800116 EXT EXEC EXT $MRMP POINTER TO MEM RES MAP * * "CDGN" - (KNOWN AS #DUMP) - A "STANDALONE" PROGRAM THAT * DUMPS A CRASHED SYSTEM TO CARTRIDGE TAPE. IT RESIDES IN THE * MEMORY RESIDENT AREA, BUT REQUIRES NO RTE SERVICES. * * THE PROGRAM DUMPS 32K OF MEMORY, THE DRIVER PARTITIONS AND THE * FOUR 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 OF 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 DIRVER PARTITIONS. IF C(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 IN THE FIRST 32K OR THE * DRIVER PARTITIONS ARE NOT DUMPED TWICE. * * 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 THE ADDRESS OF \DUMP IN THE * SYSTEM (THIS IS GENNED IN). SET THE S REGISTER TO THE SELECT * CODE OF THE 26XX TERMINAL. THE DUMP WILL BE TO THE LEFT CTU. * 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 * * JEF 01/16/80 * * A EQU 0 B EQU 1 SC EQU 25B * * IF USER RUNS WITH "RU,#DUMP", JUST DO A TERMINATION * TO PROTECT HIM * #DUMP JSB EXEC TERMINATE PROGRAM DEF *+2 DEF D6 * * CONFIGURE * INIT EQU * CDGN STA DADDR SAVE \DUMP ADDRESS 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 * ***** * * 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 USE 48K. * * LDA $MRMP,I LOAD MR BASE PAGE ADDR AND B1777 MASK OUT PROTECT BITS LDB A STA TMP & SAVE ADA M32 SSA >= 32? LDB D32 NO - USE 32 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 THE CART - THE MAPS ARE WRITTEN AFTER * THE FIRST 32K. PAUSE AFTER THE MAPS ARE WRITTEN AND AFTER * WE ARE DONE DUMPING PHYSICAL MEMORY. * 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 JSB EOF PUT AN EOF ON THE CART 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 * 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 B2040 ARE WE THROUGH THE SYSTEM MAP? JMP HPAUS YES - WRITE AN EOF AND PAUSE CPA B2100 ARE WE ALL DONE? RSS JMP WL NO - CONTINUE JSB EOF WRITE AN EOF ON THE TAPE STOP HLT 77B WE'RE DONE JMP STOP (EVEN IF THEY HIT RUN AGAIN) * HPAUS JSB EOF WRITE AN EOF ON THE TAPE HLT 70B PAUSE JMP WL CONTINUE WITH MAPS * * SUBROUTINE TO WRITE AN EOF ON THE CART * EOF DEF *-* ENTRY POINT LDB ESC JSB OTWD LDB P5 JSB OTWD LDA C JSB OTBYT JMP EOF,I RETURN * * MAPS RETRIEVES THE SYSTEM MAP FROM \DUMP * IN THE FIRST 32K AND THEN WRITES ALL FOUR MAPS * TO THE CART. * MAPS NOP LDA D2 MAP CAX PHYS PAGES 1+2 LDA D1 AS LDB A SYS PAGES XMS 1+2 LDA BADDR SAVE USA MAPS PAA PBA LDA D32 SET 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 MSETM -SET MAP- LDB B2000 MAPS JSB WRIT HLT 70B PAUSE TO CHANGE CARTS LDB CPAGE RESTORE VALUE JMP MAPS,I RETURN * * POUT WRITES A PAGE OF MEMORY TO THE TAPE/CART * THE B 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 * * 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 A REGISTER (MAPPING MUST ALREADY BE DONE) * WRIT NOP STB ADR SAVE PARM * * PUT OUT ESCAPE SEQUENCE * ESCQ 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 M32 DEC -32 M64 DEC -64 D48 DEC 48 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 B2040 OCT 2040 ADDRESS OF 33RD PAGE IN MAP TABLE B2100 OCT 2100 ADDRESS OF 65TH PAGE IN MAP TABLE D1 DEC 1 D2 DEC 2 D6 DEC 6 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 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" * * END #DUMP