.TITLE MD - MEMORY DUMP HANDLER .IDENT /X01.01/ ; ; COPYRIGHT (C) 1980 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A ; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE ; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ; ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE ; MADE AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH ; SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE ; TO AND OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN ; IN DEC. ; ; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT ; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION. ; ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ; ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. ; ; ; MODULE DESCRIPTION ; ; -MD- DUMP MEMORY CONTENTS TO LINE PRINTER ; ; THIS HANDLER IS LOADED AS A NORMAL RT11 DEVICE HANDLER. ; IT USES THE I/O TRAP VECTOR AS THE VECTOR ADDRESS (20 OCTAL). ; ; ; DISTIBUTED SYSTEMS SOFTWARE ENGINEERING ; ; IDENT HISTORY: ; ; 1.00 DA-MON-YR RELEASE .ENABL GBL ; ; TO USE THIS MODULE THE FOLLOWING STEPS MUST BE TAKEN: ; ; 1. EDIT THE SOURCE FILE TO CONFIGURE THE HANDLER FOR ; YOUR PARTICULAR RT-11. ONLY THREE (3) SYMBOLS ARE ; INVOLVED - ; ; MMG$T - 0 MEANS NO MEMORY MANAGEMENT SUPPORT (XM) ; 1 MEANS MEMORY MANAGEMENT SUPPORT ; ERL$G - 0 MEANS NO ERROR LOGGING ; 1 MEANS ERROR LOGGING SUPPORT ; TIM$IT - 0 MEANS NO DEVICE TIMER SUPPORT ; 1 MEANS DEVICE TIMER SUPPORT ; ; 2. ASSEMBLE THE MODULE USING THE COMMAND ; ; MACRO MDUMP ; ; 3. LINK THE HANDLER USING THE COMMAND: ; ; LINK/EXECUTE:MD.SYS/MAP:LP: MDUMP ; ; 4. DELETE THE OBJECT MODULE USING THE COMMAND: ; ; DELETE/NOQUERY MDUMP.OBJ ; ; 5. INSTALL THE HANDLER USING THE COMMAND: ; ; INSTALL MD: ; ; 6. LOAD THE HANDLER USING THE COMMAND: ; ; LOAD MD: ; ; THE HANDLER IS ACTIVATED BY ONE OF TWO METHODS: ; ; 1. THE 'IOT' INSTRUCTION. ; ; 2. BY BRANCHING TO THE LOCATION CONTAINED IN ABSOLUTE ; MEMORY ADDRESS 20 (THE I/O ERROR TRAP VECTOR). ; NOTE THAT IF THIS METHOD IS USED, THE CONTENTS ; OF THE STACK IS NOT CORRECT. THIS IS BECAUSE ; THE HANDLER ASSUMES THAT THE PC AND PS OF THE ; IOT INSTRUCTION ARE ON THE TOP OF THE STACK. ; .SBTTL MACROS AND DEFINITIONS ; ; EXTERNAL MACRO LIBRARY CALLS ; .MCALL .DRBEG,.DREND ; ; DEFAULT ASSEMBLY PARAMETERS ; .IIF NDF MMG$T,MMG$T=0 ;NO MEMORY MANAGEMENT .IIF NDF ERL$G,ERL$G=0 ;NO ERROR LOGGING .IIF NDF TIM$IT,TIM$IT=1 ;DEVICE TIME-OUT SUPPORT ; ; DEVICE PARAMETERS ; MDSTS = 50003 ;DEVICE STATUS (READ ONLY, LINE PRINTER) MDDSIZ = 0 ;DEVICE BLOCK SIZE ; ; LINE PRINTER REGISTERS ; LPS = 177514 ;STATUS REGISTER LPB = 177516 ;DATA BUFFER REGISTER ; ; RMON SYSTEM COMMUNICATION DEFINITIONS ; SYSPTR = 54 ;RESIDENT MONITOR POINTER .SBTTL MAIN LINE CODE ; ; HANDLER HEADER AND ENTRY POINT ; .DRBEG MD,20,MDDSIZ,MDSTS ;DEFINE HANDLER HEADER MDINT:: ;HANDLER ENTRY IS HERE ; ; SAVE CONTEXT ; MOV R5,(PC)+ ;SAVE R5 IN TEMPORARY TEMP: .WORD 0 MOV PC,R5 ;INITIALIZE ADDRESS OF INTERNAL STACK (PIC) ADD #ISTACK-.,R5 ; ... MOV (SP)+,-(R5) ;SAVE PROGRAM COUNTER MOV (SP)+,-(R5) ;SAVE PROCESSOR STATUS MOV SP,-(R5) ;SAVE STACK POINTER MOV R5,SP ;UPDATE STACK POINTER TO INTERNAL STACK MOV TEMP,-(SP) ;SAVE R5 MOV R4,-(SP) ;SAVE R4 MOV R3,-(SP) ;SAVE R3 MOV R2,-(SP) ;SAVE R2 MOV R1,-(SP) ;SAVE R1 MOV R0,-(SP) ;SAVE R0 ; ; DUMP REGISTER CONTENTS ; MOV PC,R0 ;INITIALIZE TEXT ADDRESS (PIC) ADD #TEXT-.,R0 ; ... MOV #9.,R2 ;INITIALIZE REGISTER COUNT 10$: CALL STRING ;OUTPUT TEXT STRING MOV (SP)+,R1 ;GET A VALUE FROM INTERNAL STACK CALL CONVRT ;CONVERT AND OUTPUT THE REGISTER DEC R2 ;ALL REGISTERS COMPLETE? BNE 10$ ;BR IF NO ; ; DUMP MEMORY CONTENTS ; MOV @#SYSPTR,RMON ;SAVE ADDRESS OF RESIDENT MONITOR CLR R5 ;INITIALIZE MEMORY ADDRESS MOV PC,R4 ;INITIALIZE LIMIT TABLE ADDRESS (PIC) ADD #LIMTBL-.,R4 ; ... ; PRINT TEXT HEADER 20$: CALL NEWLIN ;GO TO NEW LINE CALL STRING ;OUTPUT TEXT STRING ; PRINT MEMORY ADDRESS IN OCTAL FORMAT 30$: CALL NEWLIN ;GO TO NEW LINE MOV R5,R1 ;CONVERT AND OUTPUT THE MEMORY ADDRESS CALL CONVRT ; ... ; PRINT 8 WORDS OF MEMORY IN OCTAL FORMAT MOV #8.,R2 ;INITIALIZE WORD COUNT 40$: BIT #7,R5 ;IS THIS AN 8 BYTE BOUNDARY? BNE 50$ ;BR IF NO CALL SPACE ;OUTPUT A SPACE 50$: MOV (R5)+,R1 ;GET THE NEXT WORD CALL CONVRT ;CONVERT AND OUTPUT THE MEMORY WORD CONTENTS DEC R2 ;ALL OCTAL OUTPUT COMPLETE? BGT 40$ ;BR IF NO ; PRINT 16 BYTES IN ASCII FORMAT CALL SPACE ;OUTPUT 2 SPACES CALL SPACE MOV #16.,R2 ;INIITIALIZE BYTE COUNT SUB R2,R5 ;BACK UP TO BEGINNING OF LINE 60$: MOVB (R5)+,R3 ;GET THE NEXT BYTE CMP R3,#-1 ;IS CHARACTER A DELETE (177)? BEQ 70$ ;BR IF YES CMPB R3,#40 ;IS CHARACTER PRINTABLE? BGE 80$ ;BR IF YES 70$: MOVB #56,R3 ;MAKE CHARACTER PRINTABLE 80$: CALL CHARAC ;OUTPUT THE CHARACTER DEC R2 ;IS THE LINE COMPLETE? BGT 60$ ;BR IF NO ; DIVIDE MEMORY INTO DISCRETE AREAS CMP (R4),R5 ;HIGH LIMIT OF AREA? BHI 30$ ;BR IF NO TST (R4)+ ;ADVANCE TO NEXT LIMIT ENTRY BR 20$ .SBTTL SUBROUTINES ;+ ; ; -CONVRT- CONVERT OCTAL WORD TO ASCII ; ; INPUTS: ; R1 CONTAINS THE VALUE TO BE CONVERTED ; ; OUTPUTS: ; R1 AND R3 DESTROYED ; ; EFFECTS: ; THE VALUE IS CONVERTED ONE OCTAL DIGIT AT A TIME FROM BINARY TO ; THE ASCII CHARACTER AND OUTPUT TO THE LINE PRINTER. ; ;_ CONVRT: MOV R4,-(SP) ;FREE UP A REGISTER CALL SPACE ;OUTPUT A SPACE MOV #111111,R4 ;INITIALIZE DIGIT FLAGS BR 20$ 10$: ROL R4 ;ALL DIGITS COMPLETE? BEQ 30$ ;BR IF YES 20$: ROL R1 ;EXTRACT NEXT BIT FROM WORD ROLB R3 ;SHIFT BIT TO ACCUMULATOR TST R4 ;DIGIT COMPLETE? BPL 10$ ;BR IF NO BISB #60,R3 ;CONVERT DIGIT FROM BINARY TO ASCII CALL CHARAC ;OUTPUT THE CHARACTER BR 10$ 30$: MOV (SP)+,R4 ;RESTORE REGISTER RETURN ;FINISHED ;+ ; ; -STRING- OUTPUT TEXT STRING TO PRINTER ; ; INPUTS: ; R0 CONTAINS THE ADDRESS OF THE TEXT STRING TO BE OUTPUT ; ; OUTPUTS: ; R0 CONTAINS THE ADDRESS OF THE NEXT CHARACTER AFTER THE TEXT STRING ; R3 IS DESTROYED ; ; EFFECTS: ; THE TEXT STRING IS OUTPUT ONE CHARACTER AT A TIME UNTIL A NULL ; CHARACTER (END-OF-STRING) IS FOUND. ; ;- STRING: CALL NEWLIN ;GO TO NEW LINE 10$: MOVB (R0)+,R3 ;END OF TEXT STRING? BEQ GOBACK ;BR IF YES CALL CHARAC ;OUTPUT THE CHARACTER BR 10$ ;+ ; ; -NEWLIN- GO TO NEW LINE ; -SPACE- OUTPUT A SPACE ; ; INPUTS: ; NONE ; ; OUTPUTS: ; R3 IS DESTROYED ; ; EFFECTS: ; NEWLIN ; LINE FEED CHARACTER IS OUTPUT TO LINE PRINTER. ; SPACE ; SPACE CHARACTER IS OUTPUT TO LINE PRINTER ; ;- NEWLIN: MOV #12,R3 ;SET UP ASCII LINE FEED BR CHARAC SPACE: MOV #40,R3 ;SET UP ASCII SPACE ;+ ; ; -CHARAC- OUTPUT CHARACTER TO PRINTER ; ; INPUTS: ; R3 CONTAINS THE CHARACTER TO BE OUTPUT ; ; OUTPUTS: ; R3 IS DESTROYED ; C-BIT IS CLEAR ; ; EFFECTS: ; THE CHARACTER IS OUTPUT TO THE LINE PRINTER. ; ;- CHARAC: TSTB @#LPS ;IS DEVICE READY? BPL CHARAC ;BR IF NO MOVB R3,@#LPB ;MOVE CHARACTER TO BUFFER CLR R3 ;CLEAR THE CHARACTER AND C-BIT GOBACK: RETURN ;FINISHED .SBTTL IMPURE DATA AREA ; ; INTERNAL STACK AREA ; .BLKW 12. ISTACK: ; ; LIMIT TABLE ; LIMTBL: .WORD 000040 ;000000-000037 TRAP VECTORS .WORD 000060 ;000040-000057 SYSTEM COMMUNICATION AREA .WORD 000500 ;000060-000477 DEVICE INTERRUPT VECTORS .WORD 001000 ;000500-000777 BACKGROUND STACK RMON: .WORD 0 ;001000-XXXXXX MAIN MEMORY .WORD 170000 ;XXXXXX-170000 RESIDENT MONITOR (MAX 30K) ; ; TEXT STRINGS ; .NLIST BEX TEXT: .ASCIZ <14>"R0=" .ASCIZ "R1=" .ASCIZ "R2=" .ASCIZ "R3=" .ASCIZ "R4=" .ASCIZ "R5=" .ASCIZ "SP=" .ASCIZ "PS=" .ASCIZ "PC=" .ASCIZ "TRAP VECTORS" .ASCIZ "SYSTEM COMM AREA" .ASCIZ "DEVICE VECTORS" .ASCIZ "BACKGROUND STACK" .ASCIZ "MAIN MEMORY" .ASCIZ "RESIDENT MONITOR" .LIST BEX .EVEN .DREND MD .END ;000500-000777 BACKGROUND STACK RMON: .WO