;MEMUSE SEARCH SYS SEARCH SYSSYM CLR D1 CALL SHOADR TYPE MOV SYSBAS,D1 CALL SHOSIZ MOV SYSBAS,D1 CALL SHOADR TYPE MOV MEMBAS,D1 SUB SYSBAS,D1 CALL SHOSIZ MOV MEMBAS,D1 CALL SHOADR TYPE MOV MEMEND,D1 SUB MEMBAS,D1 CALL SHOSIZ TYPECR < ----------> TYPE < Total memory > MOV MEMEND,D1 CALL SHOSIZ CRLF ; ;find amount of user memory in use CLR D0 ; size of hold (largest) CLR D4 ; not in use K count CLR D5 ; in use K count CLR D3 ; size of hole (current) CLR D2 ; state flag (0=unused, 1=used) CLR D0 ; MOV MEMBAS,A0 ; MOV MEMEND,A1 ; LOOP: CALL OWNED ; see if this memory is in use BEQ INUSE ; yes, owned by a job FREE: INC D4 ; increment not-in-use K count TSTB D2 ; same state? BEQ 10$ ; yes CLRB D2 ; CLR D3 ; 10$: INC D3 ; BR NEXT ; INUSE: INC D5 ; increment in-use K count TSTB D2 ; same state? BNE NEXT ; yes TST D3 ; BEQ NEXT ; TST D0 ; BEQ 10$ ; CMP D3,D0 BLOS NEXT ; 10$: MOV D3,D0 ; NEXT: ADD #1024.,A0 ; CMP A0,A1 ; BLO LOOP ; CRLF ; TYPE MOV D5,D1 ; MUL D1,#1024. ; CALL SHOSIZ ; TYPE MOV D4,D1 ; MUL D1,#1024. ; CALL SHOSIZ ; TYPE MOV D0,D1 ; MUL D1,#1024. ; CALL SHOSIZ ; CRLF EXIT ;************ ;* SHOADR * ;************ ;Function: Display memory address ; ;Inputs: D1 - address SHOADR: SAVE A0 ; JOBIDX A0 ; PUSHW JOBTYP(A0) ; ORW #J.HEX,JOBTYP(A0) ; OCVT 10,OT$TRM ; TYPE < > ; POPW JOBTYP(A0) ; REST A0 ; RTN ; ;************ ;* SHOSIZ * ;************ ;Function: Display amount of memory ; ;Inputs: D1 - amount of bytes SHOSIZ: SAVE D1-D2 ; DCVT 12,OT$TRM!OT$ZER ; TYPE < bytes > ; CMP D1,#1024. ; JEQ SHO.EL ; TYPE < (> ; SHO.BR: MOV D1,D2 ; CMP D1,#1024.*1024. ; BHIS SHO.MB ; CMP D1,#1024. ; BHIS SHO.KB ; SHO.B: DCVT 0,OT$TRM!OT$ZER ; TYPE < bytes> ; BR SHO.RT ; SHO.KB: DIV D1,#1024. ; AND #177777,D1 ; DCVT 0,OT$TRM!OT$ZER ; 10$: TYPE < KB> ; MUL D1,#1024. ; SUB D1,D2 ; BEQ SHO.RT ; MOV D2,D1 ; TYPE <, > ; BR SHO.BR ; SHO.MB: DIV D1,#1024. ; AND #177777,D1 ; DIV D1,#1024. ; AND #177777,D1 ; DCVT 0,OT$TRM!OT$ZER ; TYPE < MB> ; MUL D1,#1024. ; MUL D1,#1024. ; SUB D1,D2 ; BEQ SHO.RT ; MOV D2,D1 ; TYPE <, > ; JMP SHO.BR ; SHO.RT: TYPE ) ; SHO.EL: CRLF ; REST D1-D2 ; RTN ; ;set Z if memory address A0 is in use by any job OWNED: SAVE A2 ; MOV JOBTBL,A2 ; 10$: MOV (A2)+,D7 ; BEQ 10$ ; CMP D7,#-1 ; BEQ 90$ ; MOV D7,A6 ; TST JOBSIZ(A6) ; BEQ 10$ ; MOV JOBBAS(A6),D6 ; MOV D6,D7 ; ADD JOBSIZ(A6),D7 ; CMP A0,D6 ; BLO 10$ ; CMP A0,D7 ; BHI 10$ ; REST A2 ; LCC #PS.Z ; RTN ; 90$: REST A2 ; LCC #0 ; RTN ; END .