.TITLE LIMPIT .MCALL SVDB$,VRCT$,VSDR$,RQST$,DIR$,EXIT$S .MCALL VSDA$ ; ; ENTRY: MOV R0,CURPC ; SAVE THE GIVEN PROG. COUNTER JSR PC,SAVREG ; SAVE REGISTER AT BEGINING OF TASK MOV #TASKNM,R3 MOV R1,(R3) MOV R2,2(R3) DIR$ #SSTSET ; RESET THE TRAP TABLE TO LIMPIT ; ROUTINES. MOV CURPC,SNDPC MOV #SNDTSK,R4 MOV (R3),(R4) MOV 2(R3),2(R4) DIR$ #SND1 ; SEND THE P.C. AND TASK NAME TO DEBUG DIR$ #REQUST ; REQUEST DEBUG TO START BR SLEEP SEND: DIR$ #SND ; SEND THE SEGMENT NO. TO DEBUG. SLEEP: AWAKE: DIR$ #REC MOV $DSW,R1 CMP #1,R1 BNE AWAKE MOV BRCODE,WKWD1 MOV BRCODE,R1 CLR ERCODE ASL R1 JMP @JMPTAB(R1) ; ;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ; COMMAND ROUTINES VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ; ; ; REGISTERS ; REGS: MOV #2,NBYTE MOV REGNO,R1 ASL R1 ADD #REGTAB,R1 MOV R1,ADDRES CMP #4,WKWD1 BNE EXADD BR CHADD ; ; EXAMINE PROGRAM COUNTER(PC) AND CURRENT SEGMENT ; EXPC: MOV CURPC,PCDATA JMP SEND ; ; EXAMINE BY ADDRESS ; EXADD: MOV NBYTE,R1 ; SET NO. BYTES TO EXAMINE MOV ADDRES,R2 ; SET STARTING ADDRES MOV #DATA,R3 ; SET OUT PUT STARTING ADDRES 10$: MOVB (R2)+,(R3)+ ; DO EXAMINATION LOOP SOB R1,10$ ; BYTE BY BYTE JMP SEND ; ; CHANGE BY ADDRESS ; CHADD: MOV NBYTE,R1 ; SET NO. BYTES TO CHANGE MOV ADDRES,R2 ; SET START ADDRES MOV #DATA,R3 ; SET INPUT ADDRES 10$: MOVB (R3)+,(R2)+ ; DO CHANGE LOOP SOB R1,10$ ; BYTE BY BYTE JMP SLEEP ; ; PROCEED THE OBJECT TASK ; PROCED: JSR PC,RESREG ; RESTORE REGISTERS MOV CURPC,PC ; OFF TO WONDER-WONDER LAND ; LETS HOPE WE DONT GO TO ; NEVER-NEVER LAND!! PRODNE: JSR PC,SAVREG ; SAVE THE REGISTERS FOR LATER USE MOV (SP),CURPC MOV CURPC,PCDATA MOV #SEND,(SP) RTT ; ; SET TRAPED ROUTINES ; ODADD: MOV #1,ERCODE BR PRODNE SEGFLT: MOV #2,ERCODE BR PRODNE TRACE: MOV #3,ERCODE BR PRODNE IOT: MOV #4,ERCODE BR PRODNE RESIN: MOV #4,ERCODE BR PRODNE NONIAS: MOV #6,ERCODE BR PRODNE TRAP: MOV #7,ERCODE BR PRODNE FPEXC: MOV #10,ERCODE BR PRODNE MEM: MOV #11,ERCODE BR PRODNE ; ; CHANGE PC ; CHPC: MOV ADDRES,CURPC JMP SLEEP ; ; SEND TO DEBUG SEGMENT STATUS ; SEGTST: MOV ADDRES,R1 MOV #10000,R2 BIT R2,(R1) BNE OUTMEM INMEM: MOV #1,SEGDAT JMP SEND OUTMEM: MOV #0,SEGDAT JMP SEND ; ; EXIT LIMPIT ; EXIT: EXIT$S ; ; ; ; VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ; SUBROUTINES TO SAVE AND RESTORE REGISTERS VVVVVVVVVVVVVVVVVVV ; VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ; ; ; ; SAVE THE REGISTERS!!!!!!!BEFORE THEY PERISH ; SAVREG: MOV R0,REG0 MOV #REGTAB,R0 MOV REG0,(R0)+ MOV R1,(R0)+ MOV R2,(R0)+ MOV R3,(R0)+ MOV R4,(R0)+ MOV R5,(R0)+ RTS PC ; ; RESTORE THE REGISTERS OR ELSE!!!!!! ; WE PERISH ; RESREG: MOV #ENDREG,R5 MOV -(R5),REG5 MOV -(R5),R4 MOV -(R5),R3 MOV -(R5),R2 MOV -(R5),R1 MOV -(R5),R0 MOV REG5,R5 RTS PC ; ; ; ;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ; DATA STORAGE AREAS VVVVVVVVVVVVVVVVVVVVVVVVVVVV ;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ; ; OFFSETS ; L.TSK: .WORD 2 L.TRAC: .WORD 4 ; ; TABLES ; JMPTAB: .WORD EXIT .WORD REGS .WORD EXPC .WORD EXADD .WORD REGS .WORD CHADD .WORD PROCED .WORD CHPC .WORD SEGTST REGTAB: REG0: .BLKW 6 ENDREG: REG5: .WORD 0 ; ; SAVE AREAS ; SEGNO: .WORD 0 CURPC: .WORD 0 PSTAT: .WORD 0 TIADDR: .WORD 0 TASKNM: .BLKW 2 WKWD1: .WORD 0 WKWD2: .WORD 0 PROFLG: .WORD 0 ; ; DIRECTIVES USED ; SSTSET: SVDB$ SSTTBL,11 REQUST: RQST$ DEBUG,, SND1: VSDA$ DEBUG,SNDBUF,7,,, SND: VSDR$ DEBUG,,,,,SNDBUF,7,,, REC: VRCT$ DEBUG,RECBUF,11,TIADDR .EVEN ; ; TRAP TABLE ; SSTTBL: .WORD ODADD .WORD SEGFLT .WORD TRACE .WORD IOT .WORD RESIN .WORD NONIAS .WORD 0 ; OVERRIDE TRAP INSTRUCTION .WORD FPEXC .WORD MEM .EVEN ; ; SEND / REC BUFFER ; RECBUF: .BLKW 2 SNDBUF: BRCODE: ERCODE: SNDPC: .WORD 0 ; REGNO: RDATA1: PCDATA: ADDRES: NSTEP: TRAPNO: SNDTSK: .WORD 0 ; NBYTE: RDATA2: SEGDAT: TADDRS: .WORD 0 DATA: .BLKW 4 ; .END ENTRY