0
|
1 ********************************************************************
|
|
2 * PMap - Show process map information
|
|
3 *
|
|
4 * $Id$
|
|
5 *
|
|
6 * From "Inside Level II" by Kevin Darling
|
|
7 *
|
|
8 * Ed. Comments Who YY/MM/DD
|
|
9 * ------------------------------------------------------------------
|
|
10 * ? Original version KKD 87/02/08
|
|
11 * 2 Revised to handle 4K or 8K blocks KD 89/09/12
|
|
12
|
|
13 nam PMap
|
|
14 ttl Show process map information
|
|
15
|
|
16 ifp1
|
|
17 use defsfile
|
|
18 endc
|
|
19
|
|
20 Type set Prgrm+Objct
|
|
21 Revs set ReEnt+1
|
|
22 Bufsiz set 512
|
|
23 edition set 2
|
|
24
|
|
25 stdout set 1
|
|
26 maxnam set 30
|
|
27
|
|
28 pag
|
|
29 ***************************************************
|
|
30 *
|
|
31 mod PrgSiz,Name,Type,Revs,Entry,DatSiz
|
|
32
|
|
33 Name fcs /PMap/
|
|
34 fcb edition
|
|
35
|
|
36 * Data Equates
|
|
37 umem rmb 2
|
|
38 sysImg rmb 2 pointer to sysprc datimg
|
|
39 datimg rmb 2 datimg for copymem
|
|
40 lineptr rmb 2
|
|
41 number rmb 3
|
|
42 leadflag rmb 1
|
|
43 pid rmb 1
|
|
44 hdr rmb 12
|
|
45 blkcnt rmb 1 no. blocks/64k
|
|
46 outbuf rmb 80
|
|
47 buffer rmb bufsiz*2 working proc. desc.
|
|
48 stack rmb 200
|
|
49 datsiz equ .
|
|
50
|
|
51 *************************************************
|
|
52 *
|
|
53 * Messages
|
|
54 *
|
|
55 Head1A fcc / ID 01 23 45 67 89 AB CD EF Program /
|
|
56 fcb C$CR
|
|
57
|
|
58 Head2A fcc /____ __ __ __ __ __ __ __ __ ___________/
|
|
59 Hdrcr fcb C$CR
|
|
60
|
|
61 Head1B fcc / ID 0 1 2 3 4 5 6 7 8 9 A B C D E F Program/
|
|
62 fcb C$CR
|
|
63
|
|
64 Head2B fcc /____ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ _______/
|
|
65 fcb C$CR
|
|
66
|
|
67 SysNam fcs "SYSTEM"
|
|
68 syslen equ *-Sysnam
|
|
69
|
|
70 spc 3
|
|
71 ***************************************************
|
|
72 *
|
|
73 Entry stu Umem
|
|
74 lda #1 start with process 1
|
|
75 clr Pid
|
|
76
|
|
77 * Print header
|
|
78 leax buffer,u point at storage
|
|
79 os9 F$GBlkMp get block info
|
|
80 bcs Error
|
|
81 cmpd #8192 8k?
|
|
82 beq Set8k
|
|
83 cmpd #4096 4k?
|
|
84 beq Set4k
|
|
85 bra Error we only do 4k/8k
|
|
86
|
|
87 Set8k lda #64/8
|
|
88 bra Entry1
|
|
89
|
|
90 Set4k lda #64/4
|
|
91 Entry1 sta blkcnt save size
|
|
92 leax Hdrcr,pcr print line
|
|
93 lbsr PrintL1 print it
|
|
94 lda blkcnt
|
|
95 cmpa #64/4 4k?
|
|
96 beq Headr4
|
|
97 Headr8 leax Head1A,pcr
|
|
98 lbsr PrintL1 print it
|
|
99 leax Head2A,pcr
|
|
100 bra Head41
|
|
101
|
|
102 Headr4 leax Head1B,pcr
|
|
103 lbsr PrintL1
|
|
104 leax Head2B,pcr
|
|
105 Head41 lbsr PrintL1
|
|
106
|
|
107 * Main Program Loop
|
|
108 Main ldu umem
|
|
109 leax OutBuf,U set line pointer
|
|
110 stx Lineptr
|
|
111 inc Pid next process
|
|
112 beq Bye >= 255 --> exit
|
|
113 lda Pid get proc id
|
|
114 leax Buffer,U set destination
|
|
115 os9 F$GPrDsc
|
|
116 bcs Main loop if no descriptor
|
|
117 bsr Output print data for descriptor
|
|
118 bra Main
|
|
119
|
|
120 Bye clrb
|
|
121 Error os9 F$Exit
|
|
122
|
|
123 * Subroutines
|
|
124
|
|
125 Output lda P$ID,X process id
|
|
126 lbsr Outdecl
|
|
127 lbsr Space
|
|
128 lbsr Space
|
|
129
|
|
130 * Print Process DAT Image
|
|
131 * IN: x = process descriptor
|
|
132 *
|
|
133 pshs X
|
|
134 leax P$DATImg,x point to DAT image
|
|
135 ldb blkcnt set count
|
|
136 pshs b
|
|
137
|
|
138 PrntImg ldd ,x++ get DAT block
|
|
139 cmpd #$00FC empty?
|
|
140 bne prntimg2
|
|
141 ldy lineptr
|
|
142 ldd #"..
|
|
143 std ,y++
|
|
144 sty lineptr
|
|
145 lbsr space
|
|
146 bra prntimg3
|
|
147
|
|
148 PrntImg2 tfr b,a print block no.
|
|
149 lbsr Out2HS
|
|
150
|
|
151 PrntImg3 dec ,s count -= 1
|
|
152 bne Prntimg
|
|
153 puls b,x
|
|
154
|
|
155 * Print primary module name
|
|
156 * IN: X - process descriptor
|
|
157 *
|
|
158 lbsr Space
|
|
159 leay P$DATImg,X
|
|
160 tfr Y,D d=dat image
|
|
161 std datimg save pointer
|
|
162 ldx P$PModul,X x=offset in map
|
|
163 bne doname
|
|
164 leax >sysnam,pcr point at name
|
|
165 ldy lineptr
|
|
166 ldb #syslen
|
|
167
|
|
168 Copy lda ,x+
|
|
169 sta ,y+
|
|
170 decb
|
|
171 bne copy
|
|
172 bsr Name2
|
|
173 bra Printlin
|
|
174
|
|
175 Doname bsr Printnam
|
|
176
|
|
177 * Print Line
|
|
178 Printlin ldx lineptr terminate line
|
|
179 lda #C$CR
|
|
180 sta ,X
|
|
181 ldu umem
|
|
182 leax outbuf,U
|
|
183
|
|
184 * Print line
|
|
185 PrintL1 ldy #80
|
|
186 lda #stdout
|
|
187 os9 I$Writln
|
|
188 bcs Error
|
|
189 rts
|
|
190
|
|
191 ** Find and print a module name
|
|
192 * IN: X - module offset
|
|
193 * U - data area
|
|
194 * datimg = pointer
|
|
195 *
|
|
196 Printnam equ *
|
|
197
|
|
198 * Read module header
|
|
199 pshs U save u
|
|
200 leau hdr,U destination
|
|
201 ldd datimg proc datimg pointer
|
|
202 ldy #10 set length
|
|
203 os9 F$CpyMem
|
|
204 lbcs Error
|
|
205
|
|
206 * Read name from Module to buffer
|
|
207 ldd M$Name,U get name offset from header
|
|
208 ldu lineptr move name to outbuf
|
|
209 leax D,X X - offset to name
|
|
210 ldd datimg
|
|
211 ldy #maxnam set maximum length
|
|
212 os9 F$CpyMem
|
|
213 puls U
|
|
214 lbcs Error
|
|
215
|
|
216 Name2 pshs X
|
|
217 ldx lineptr
|
|
218 clrb set length = 0
|
|
219 Name3 incb
|
|
220 lda ,X+
|
|
221 bpl Name3
|
|
222 cmpb #40
|
|
223 bcc Name5
|
|
224 anda #$7F clear d7
|
|
225 sta -1,X
|
|
226 cmpb #9
|
|
227 bcc Name5
|
|
228 lda #C$SPAC
|
|
229 Name4 sta ,X+
|
|
230 incb
|
|
231 cmpb #9
|
|
232 bcs Name4
|
|
233 Name5 stx lineptr
|
|
234 puls X,PC
|
|
235
|
|
236 * Print hex digit in A
|
|
237 Out2HS bsr Hexl
|
|
238
|
|
239 Space lda #C$SPAC
|
|
240 bra Print
|
|
241
|
|
242
|
|
243 * Print Hexidecimal Digit in A
|
|
244 Hexl tfr A,B
|
|
245 lsra
|
|
246 lsra
|
|
247 lsra
|
|
248 lsra
|
|
249 bsr Outhex
|
|
250 tfr B,A
|
|
251 Outhex anda #$0F
|
|
252 cmpa #$0A 0 - 9
|
|
253 bcs Outdig
|
|
254 adda #$07 A - F
|
|
255 Outdig adda #'0 make ASCII
|
|
256
|
|
257 * Put character in A in buf
|
|
258 Print pshs X
|
|
259 ldx lineptr
|
|
260 sta ,X+
|
|
261 stx lineptr
|
|
262 puls X,PC
|
|
263
|
|
264 * Print 1 Decimal Digit in A
|
|
265 *
|
|
266 Outdecl tfr A,B number to B
|
|
267 clra
|
|
268
|
|
269 * Print 2 Decimal Digits in D
|
|
270 Outdec clr leadflag
|
|
271 pshs X
|
|
272 ldx umem
|
|
273 leax number,X
|
|
274 clr ,X
|
|
275 clr 1,X
|
|
276 clr 2,X
|
|
277 Hundred inc ,X
|
|
278 subd #100
|
|
279 bcc Hundred
|
|
280 addd #100
|
|
281 Ten inc 1,X
|
|
282 subd #10
|
|
283 bcc Ten
|
|
284 addd #10
|
|
285 incb
|
|
286 stb 2,X
|
|
287 bsr Printled
|
|
288 bsr Printled
|
|
289 bsr Printnum
|
|
290 bsr Space
|
|
291 puls X,PC
|
|
292
|
|
293 Printnum lda ,X+ get char
|
|
294 adda #'0-1 make ASCII
|
|
295 bra Print
|
|
296
|
|
297 Printled tst leadflag print leading zero?
|
|
298 bne Printnum yes
|
|
299 ldb ,X is it zero?
|
|
300 inc leadflag
|
|
301 decb
|
|
302 bne Printnum no, print zeros
|
|
303 clr leadflag
|
|
304 lda #C$SPAC
|
|
305 leax 1,X
|
|
306 bra Print
|
|
307
|
|
308 emod
|
|
309 Prgsiz equ *
|
|
310 end
|