.TITLE VBSET .GLOBL VBSET,VSBSET,VIOR,VSETBC R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 .PSECT VPNTBF,RW,D,GBL,REL,OVR RPSPP: .BLKW 1 PNTBUF: .BLKW 1 .PSECT VPLTBF,RW,D,GBL,REL,OVR PLTBUF: .BLKW 1 .PSECT VPLTYG,RW,D,GBL,REL,OVR PLTYGB: .BLKW 1 .PSECT .PSECT VPDP,RW,D,GBL,REL,OVR PSPP: .BLKW 1 PBUFL: .BLKW 1 PCY: .BLKW 1 PCYSPP: .BLKW 1 PBY: .BLKW 1 POFBY: .BLKW 1 PBPIY: .BLKW 2 PBPCY: .BLKW 2 PBCIX: .BLKW 2 .PSECT .PSECT VSMTBL,RW,D,GBL,REL,OVR NSYM: .BLKW 1 STBL: .BLKW 1 .PSECT ; ; VIOR: BISB @2(R5),@4(R5) RTS PC ; ; ; VBSET: ; ; ; MOV @2(R5),R0 ;R0=BEG BGT L1 MOV #1,R0 ;IF(BEG.LT.1) BEG=1 L1: MOV @4(R5),R1 ;R1=END CMP R1,PBY BLE L2 MOV PBY,R1 ;IF(END.GT.PBY)END=PBY L2: CMP R0,R1 BLE L3 RTS PC ;IF(BEG.GT.END)RETURN L3: DEC R0 ASR R0 ASR R0 ASR R0 ;BEGBYT=(BEG-1)/8 DEC R1 ASR R1 ASR R1 ASR R1 ;ENDBYT=(END-1)/8 ; THE FOLLOWING IMPLEMENTS THE ALGORITHM ; DO I= BEGBYT+1,ENDBYT-1 ; PLTBUF(I)=-1 END; MOV R0,R2 ADD #PLTBUF+1,R2 MOV R1,R3 ADD #PLTBUF-1,R3 L10: CMP R2,R3 BHI L11 MOVB #377,(R2)+ BR L10 L11: ; THE FOLLOWING SETS BITS IN BEGBYT. THE ALGORITHM IS ; IS=BEG-(BEGBYT*8) ; IF(IS.LE.8) THEN DO; ; IE=END-(BEGBYT*8) ; IF(IE.GT.8)IE=8 ; DO I=IS,IE ; SETBIT(PLTBUF(BEGBYT),I) END; END; MOV R0,R2 ASL R2 ASL R2 ASL R2 NEG R2 ADD @2(R5),R2 ;R2=IS CMP R2,#8. BGT L30 MOV R0,R3 ASL R3 ASL R3 ASL R3 NEG R3 ADD @4(R5),R3 ;R3=IE CMP R3,#8. BLE L20 MOV #8.,R3 L20: ADD #PLTBUF,R0 ;RO=ADDR(PLTBUF(BEGBYT)) L22: CMP R2,R3 BGT L28 MOV #MASKTB-1,R4 ADD R2,R4 BISB (R4),(R0) INC R2 BR L22 L28: SUB #PLTBUF,R0 L30: ; THE FOLLOWING SETS BITS IN ENDBYT. THE ALGORITHM IS ; IF(BEGBYT.EQ.ENDBYT) RETURN ; IE=END-(ENDBYT*8) ; DO I=1,IE ; SETBIT(PLTBUF(ENDBYT),I) END; CMP R0,R1 BNE L40 RTS PC L40: MOV R1,R0 ADD #PLTBUF,R0 ;R0=ADDR(PLTBUF(ENDBYT)) ASL R1 ASL R1 ASL R1 NEG R1 ADD @4(R5),R1 ;R1=IE MOV #1,R2 ;R2=1 L42: CMP R2,R1 BGT L44 MOV #MASKTB-1,R4 ADD R2,R4 BISB (R4),(R0) INC R2 BR L42 L44: RTS PC ; ; VSBSET: ; ; MOV PBUFL,R0 MOV #PLTBUF,R1 MOV @2(R5),R2 ;R2=BIT LOC BGT GTZERO RTS PC GTZERO: ;WE NEED TO COMPUTE ; BYTE=(LOC-1)/8 ; BIT=LOC-(BYTE*8) MOV R2,R3 DEC R3 ASR R3 ASR R3 ASR R3 ;R3=BYTE MOV R3,R4 ASL R4 ASL R4 ASL R4 NEG R4 ADD R2,R4 ;R4=BIT WITHIN BYTE ;CHECK TO SEE THAT BYTE IS IN PLTBUF CMP R3,R0 BLE INBUF RTS PC INBUF: ADD R3,R1 MOV #MASKTB-1,R3 ADD R4,R3 BISB (R3),(R1) RTS PC ; ; ; VSBARG: .WORD 0 ERR3: .WORD 3 VSETBC: ; ; ; MOV @2(R5),R0 ;R0=INDEX OF SYMBOL BLE L195 CMP R0,NSYM BGT L195 MOV @4(R5),R1 ADD #2,R1 ;R1=RELATIVE BYTE OF SYMBOL BLT L195 CMP R1,#4 BGT L195 ; THE FOLLOWING GETS THE BYTE TO PLOT IN R2 MOV #STBL,R2 ADD R1,R2 L100: DEC R0 BLE L105 ADD #5,R2 BR L100 L105: MOVB (R2),R2 ;R2=PBYTE ; THE FOLLOWING IMPLEMENTS THE ALGORITHM ; IY=YPOS-2 ; DO I=1,5 ; IF BITSET(PBYTE,I) THEN CALL VSBSET(IY); ; IY=IY+1;END; MOV @6(R5),R0 SUB #2,R0 ;R0=IY MOV #1,R1 ;R1=I L110: CMP R1,#5 BLE L115 RTS PC L115: MOV #MASKTB-1,R3 ADD R1,R3 BITB (R3),R2 BEQ L125 MOV R0,-(SP) MOV R1,-(SP) MOV R2,-(SP) MOV R5,-(SP) MOV R0,VSBARG MOV #ALST1,R5 JSR PC,VSBSET MOV (SP)+,R5 MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 L125: INC R0 INC R1 BR L110 ;A BRANCH IS MADE TO HERE IF VSETBC GOT BAD PARAMETERS L195: RTS PC ALST1: .BYTE 1,0 .WORD VSBARG MASKTB: .BYTE 200,100,40,20,10,4,2,1 .END