Mercurial > hg > Members > kono > os9 > sbc09
comparison CoCoOS9/level2v3/CMDS/mmap.asm @ 31:bd2b07db8917 cocoos9lv2v3
CoCoOS9 version
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 14 Jul 2018 15:16:13 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
30:7b1b25ff010a | 31:bd2b07db8917 |
---|---|
1 ******************************************************************** | |
2 * MMap - Show memory block map | |
3 * | |
4 * $Id: mmap.asm,v 1.1.1.1 2001/02/21 23:30:54 boisy Exp $ | |
5 * | |
6 * From Kevin Darling, "Inside OS9 Level II" | |
7 * | |
8 * Ed. Comments Who YY/MM/DD | |
9 * ------------------------------------------------------------------ | |
10 * ? Original verison KKD 88/??/?? | |
11 * 4 Modified by Ken Drexler fr various block sizes KD 89/07/30 | |
12 | |
13 nam MMap | |
14 ttl Memory Block Utility | |
15 | |
16 ifp1 | |
17 use defsfile | |
18 endc | |
19 | |
20 Revs set ReEnt+1 | |
21 Type set Prgrm+Objct | |
22 edition set 4 | |
23 | |
24 mod prglen,name,type,revs,MMap,datsiz | |
25 | |
26 Name fcs /MMap/ | |
27 fcb edition | |
28 | |
29 *************************************************** | |
30 * | |
31 * Data | |
32 * | |
33 buffsiz set 512 | |
34 | |
35 numflag rmb 1 flag for leading zeros | |
36 rowcnt rmb 1 no rows to print | |
37 free rmb 1 no free blocks | |
38 rowno rmb 1 row number | |
39 lcnt rmb 1 line length counter | |
40 outptr rmb 2 output pointer | |
41 out rmb 80 output buffer | |
42 mapsiz rmb 2 size of map block | |
43 blksiz rmb 2 block size | |
44 buffer rmb buffsiz map itself | |
45 stack rmb 200 | |
46 datsiz equ . | |
47 | |
48 pag | |
49 *************************************************** | |
50 * | |
51 * Messages | |
52 * | |
53 header fcc / 0 1 2 3 4 5 6 7 8 9 A B C D E F/ | |
54 fcb C$CR | |
55 hdrlen equ *-header | |
56 | |
57 hdr2 fcc / # = = = = = = = = = = = = = = = =/ | |
58 fcb C$CR | |
59 hdrlen2 equ *-hdr2 | |
60 | |
61 BlockMsg fcc / Block Size: / | |
62 blklen equ *-Blockmsg | |
63 | |
64 Freemsg fcc / Free Blocks: / | |
65 freelen equ *-Freemsg | |
66 | |
67 Rammsg fcc / KBytes Free: / | |
68 ramlen equ *-Rammsg | |
69 | |
70 ********************************************** | |
71 * | |
72 MMap lbsr pcrtn print line | |
73 leax header,pcr print headers | |
74 lda #1 | |
75 ldy #hdrlen | |
76 os9 I$WritLn | |
77 leax hdr2,pcr | |
78 ldy #hdrlen2 | |
79 os9 I$WritLn | |
80 leax buffer,u get block map to read | |
81 os9 F$GBlkMp | |
82 lbcs error | |
83 std blksiz save block size | |
84 sty mapsiz save map size | |
85 clr free | |
86 clr rowno | |
87 ldd mapsiz compute number of rows | |
88 lsra at 16 per row | |
89 rorb | |
90 lsra | |
91 rorb | |
92 lsra | |
93 rorb | |
94 lsra | |
95 rorb | |
96 stb rowcnt save count | |
97 leax out,u | |
98 stx outptr | |
99 leax buffer,u point at map | |
100 pshs x | |
101 bra loop2 | |
102 | |
103 loop dec lcnt count -= 1 | |
104 bne loop3 if more, skip line print | |
105 | |
106 * print line, start next line | |
107 loop1 pshs x save map pointer | |
108 lbsr prline print line | |
109 dec rowcnt done? | |
110 beq exit yes | |
111 loop2 lda #16 set line length count | |
112 sta lcnt | |
113 lbsr Space 1 space | |
114 lda rowno print row number | |
115 lbsr Hex1 | |
116 inc rowno row number += 1 | |
117 lbsr space2 2 spaces | |
118 puls x | |
119 | |
120 * Print one block status | |
121 loop3 ldb ,x+ get next block | |
122 beq freeram | |
123 bmi noram | |
124 bitb #2 module? | |
125 bne module | |
126 lda #'U must be ram in use | |
127 bra put | |
128 | |
129 freeram lda #'_ not used | |
130 inc free count it | |
131 bra put | |
132 | |
133 module lda #'M module | |
134 bra put | |
135 | |
136 noram lda #'. not ram | |
137 | |
138 * Print character in A and space | |
139 put equ * | |
140 lbsr print put character in output buffer | |
141 lda #C$SPAC add space | |
142 lbsr print | |
143 | |
144 bra loop | |
145 | |
146 * Add summary messages | |
147 Exit equ * | |
148 leax BlockMsg,pcr print "Block Size" | |
149 ldy #blklen | |
150 lbsr Prstr | |
151 ldd blksiz | |
152 clr numflag suppress zeros | |
153 bsr outdec | |
154 lbsr prline print line | |
155 leax freemsg,pcr print "Free Blocks" | |
156 ldy #freelen | |
157 lbsr Prstr | |
158 ldb free get number of blocks | |
159 clra | |
160 clr numflag suppress zeros | |
161 bsr outdec print in decimal | |
162 bsr prline | |
163 leax rammsg,pcr print "Ram Free" | |
164 ldy #ramlen | |
165 lbsr Prstr | |
166 ldb free get number of blocks | |
167 lda blksiz get #k/block | |
168 lsra by dividing msb by 4 | |
169 lsra | |
170 mul | |
171 clr numflag suppress zeros | |
172 bsr outdec print in decimal | |
173 bsr prline | |
174 | |
175 bye clrb no errors | |
176 | |
177 error os9 F$Exit | |
178 | |
179 | |
180 ********************************************** | |
181 * | |
182 * Subroutines | |
183 * | |
184 Pcrtn pshs a,x Output carriage return | |
185 lda #C$CR | |
186 sta out | |
187 leax out,u point at buffer | |
188 ldy #1 one char. | |
189 lda #1 | |
190 os9 I$WritLn | |
191 puls a,x,pc | |
192 | |
193 | |
194 ** Decimal output routine | |
195 * IN: D - number to output | |
196 * X - destination buffer | |
197 * OUT: X,Y,U preserved | |
198 * | |
199 Outdec pshs b,x,y,u | |
200 ldx outptr get pointer | |
201 leau <dectbl,pcr | |
202 ldy #5 set counter | |
203 | |
204 Outdec1 clr ,s clear workspace | |
205 | |
206 Outdec2 subd ,u subtract power of ten | |
207 bcs outdec3 | |
208 inc ,s | |
209 bra outdec2 | |
210 | |
211 outdec3 addd ,u++ add back one power | |
212 pshs b save b | |
213 ldb 1,s | |
214 addb #'0 convert to ascii | |
215 cmpb #'0 zero? | |
216 bne outdec4 no, print it | |
217 tst numflag suppress zero? | |
218 beq outdec5 yes | |
219 outdec4 inc numflag | |
220 stb ,x+ put in buffer | |
221 outdec5 puls b restore b | |
222 leay -1,y counter -= 1 | |
223 bne outdec1 | |
224 stx outptr update pointer | |
225 puls b,x,y,u,pc | |
226 | |
227 Dectbl fdb 10000 | |
228 fdb 1000 | |
229 fdb 100 | |
230 fdb 10 | |
231 fdb 1 | |
232 | |
233 | |
234 * Print Line | |
235 Prline ldx outptr now print line | |
236 lda #C$CR | |
237 sta ,x terminate line | |
238 leax out,u | |
239 ldy #80 | |
240 lda #1 | |
241 os9 I$Writln | |
242 bcs error | |
243 leax out,u set pointer | |
244 stx outptr | |
245 rts | |
246 | |
247 | |
248 * Print Spaces | |
249 Space2 bsr Space | |
250 | |
251 Space lda #C$SPAC | |
252 bra Print | |
253 | |
254 * Print Hexidecimal Digit in A | |
255 Hex1 tfr a,b | |
256 lsra | |
257 lsra | |
258 lsra | |
259 lsra | |
260 bsr outhex | |
261 tfr b,a | |
262 Outhex anda #$0f | |
263 cmpa #$0a 0 - 9 | |
264 bcs outdig | |
265 adda #$07 A - F | |
266 outdig adda #'0 make ASCII | |
267 print pshs X | |
268 ldx outptr | |
269 sta ,X+ | |
270 stx outptr | |
271 puls x,pc | |
272 | |
273 | |
274 * Print string to output buffer | |
275 * IN: X - string pointer | |
276 * Y - string length | |
277 * | |
278 Prstr equ * | |
279 lda ,x+ get character | |
280 bsr print put in buffer | |
281 leay -1,y | |
282 bne Prstr | |
283 rts | |
284 | |
285 emod | |
286 Prglen equ * | |
287 end |