;+ ; Copyright (c) 2014 Oleg Safiullin ; ; Permission to use, copy, modify, and distribute this software for any ; purpose with or without fee is hereby granted, provided that the above ; copyright notice and this permission notice appear in all copies. ; ; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ;- .MCALL .MODULE .MODULE SW,VERSION=00,RELEASE=01,COMMENT=,AUDIT=YES $SYPTR == 54 ;POINTER TO RMON DATA $CNFG1 == 300 ;SYSTEM CONFIGURATION WORD CLOCK$ == 100000 ;SYSTEM CLOCK BIT CR = 15 ;CARRIAGE RETURN LF = 12 ;LINE FEED .MCALL .ASSUME,.DRDEF,.INTEN,.MTPS,.PRINT .DRDEF SW,373,RONLY$!WONLY$,0,0,0 .DRPTR FETCH=*NO*,LOAD=SWLOA,UNLOAD=SWUNL .DRINS SW NOP ;ONLY DATA INSTALL AVAILABLE MOV @#$SYPTR,R0 ;POINT TO RMON DATA TST $CNFG1(R0) ;SYSTEM CLOCK AVAILABLE? BPL O.BAD ;NO BANNER: NOP ;PRINT BANNER BY DEFAULT JSR R0,10$ ;CALL PRINT ROUTINE .ASCII /SW V01.00 Copyright (C) 2014 / .ASCIZ /Oleg Safiullin / .EVEN 10$: .PRINT ;PRINT BANNER TST (SP)+ ;RESTORE STACK (AND LEAR CARRY) RETURN ;RETURN .ASSUME . LE 400,MESSGAE=<;Installation area overflow> .DRSET BANNER,,O.BANN,NO .DRSET LOOP,10000.,O.LOOP,NUM .ASSUME . LE 1000,MESSAGE=<;Set area overflow> O.BANN: MOV #,R3 ;SET BANNER GOES HERE MOV R3,BANNER ;SET BANNER FLAG BR O.GOOD ;RETURN O.LOOP: CMP R0,R3 ;TOO LARGE? BHI O.BAD ;YES TST R0 ;TOO SMALL? BEQ O.BAD ;YES MOV R0,SWCNT ;UPDATE COUNT O.GOOD: TST (PC)+ ;CLEAR CARRY AND SKIP OVER SEC O.BAD: SEC ;SET CARRY RETURN ;RETURN .DRBEG SW SWINT:: MOV #340,-(SP) ;;;SET LOOP FLAG & PRIORITY SWFLG == .-2 MOV #SWAST-SWLQE,-(SP) ;;;SET OUR ISR ADDRESS SWISR == .-2 JMP @#0 ;;;CALL SYSTEM CLOCK ISR SWSAV == .-2 SWAST:: BCC 10$ ;;;IF CC, LOOP INACTIVE RTI ;;;RETURN FROM INTERRUPT 10$: MOV #341,SWFLG ;;;SET LOOP FLAG .INTEN 4,PIC ;;;LOWER CPU PRIORITY .FORK FKBLK ;;;FORK PROCESS MOV #10000.,R0 ;SET LOOP COUNT SWCNT == .-2 SOB R0,. ;LOOP MOV #340,SWFLG ;RESET LOOP FLAG RETURN ;RETURN FKBLK:: .BLKW 4 ;FORK BLOCK .DREND SW .PSECT SETOVR .ENABL LSB SWLOA:: MOV @R5,R5 ;POINT TO LQE .MTPS #340 ;RAISE CPU PRIORITY MOV @#100,SWSAV-SWLQE(R5) ;;;SAVE SYSTEM ISR ADDRESS ADD R5,SWISR-SWLQE(R5) ;;;SET OUR AST ROUTINE ADD #SWINT-SWLQE,R5 ;;;POINT TO OUR ISR MOV R5,@#100 ;;;SET ISR ADDRESS BR 10$ ;RETURN SWUNL:: MOV @R5,R5 ;POINT TO LQE MOV #1,R1 ;SET CARRY BY DEFAULT .MTPS #340 ;RAISE CPU PRIORITY MOV R5,R0 ;;;GET OUR ISR ADDRESS ADD #SWINT-SWLQE,R0 ;;; CMP @#100,R0 ;;;OUR ISR ADDRESS? BNE 20$ ;;;NO, UNLOADING DISABLED MOV SWSAV-SWLQE(R5),@#100 ;;;RESTORE SYSTEM ISR ADDRESS 10$: CLR R1 ;;;CLEAR CARRY 20$: .MTPS R1 ;;;LOWER CPU PRIORITY RETURN ;RETURN .DSABL LSB .END