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