Mercurial > hg > Members > kono > nitros9-code
annotate level1/cmds/mdir.asm @ 1523:82200a2c5721
Added mpi utility
author | boisy |
---|---|
date | Wed, 17 Mar 2004 16:52:01 +0000 |
parents | 84ea83668304 |
children | d588589fc0e0 |
rev | line source |
---|---|
0 | 1 ******************************************************************** |
13 | 2 * Mdir - Show module directory |
0 | 3 * |
4 * $Id$ | |
5 * | |
1325
84ea83668304
Redid comments, reset all rev nibbles that weren't explictly set to 0
boisy
parents:
1277
diff
changeset
|
6 * Edt/Rev YYYY/MM/DD Modified by |
84ea83668304
Redid comments, reset all rev nibbles that weren't explictly set to 0
boisy
parents:
1277
diff
changeset
|
7 * Comment |
0 | 8 * ------------------------------------------------------------------ |
1325
84ea83668304
Redid comments, reset all rev nibbles that weren't explictly set to 0
boisy
parents:
1277
diff
changeset
|
9 * 5 ????/??/?? |
84ea83668304
Redid comments, reset all rev nibbles that weren't explictly set to 0
boisy
parents:
1277
diff
changeset
|
10 * |
84ea83668304
Redid comments, reset all rev nibbles that weren't explictly set to 0
boisy
parents:
1277
diff
changeset
|
11 * 6 2003/01/14 Boisy G. Pitre |
84ea83668304
Redid comments, reset all rev nibbles that weren't explictly set to 0
boisy
parents:
1277
diff
changeset
|
12 * Changed option to -e, optimized slightly. |
84ea83668304
Redid comments, reset all rev nibbles that weren't explictly set to 0
boisy
parents:
1277
diff
changeset
|
13 * |
84ea83668304
Redid comments, reset all rev nibbles that weren't explictly set to 0
boisy
parents:
1277
diff
changeset
|
14 * 7 2003/08/25 Rodney V. Hamilton |
84ea83668304
Redid comments, reset all rev nibbles that weren't explictly set to 0
boisy
parents:
1277
diff
changeset
|
15 * Fixed leading zero supression, more optimizations. |
0 | 16 |
17 nam Mdir | |
13 | 18 ttl Show module directory |
0 | 19 |
13 | 20 * Disassembled 02/04/05 12:49:18 by Disasm v1.6 (C) 1988 by RML |
0 | 21 |
22 ifp1 | |
13 | 23 use defsfile |
0 | 24 endc |
13 | 25 |
0 | 26 tylg set Prgrm+Objct |
27 atrv set ReEnt+rev | |
1325
84ea83668304
Redid comments, reset all rev nibbles that weren't explictly set to 0
boisy
parents:
1277
diff
changeset
|
28 rev set $00 |
1277 | 29 edition set 7 |
92 | 30 stdout set 1 |
13 | 31 |
0 | 32 mod eom,name,tylg,atrv,start,size |
13 | 33 |
838 | 34 org 0 |
35 mdstart rmb 2 | |
36 mdend rmb 2 | |
37 parmptr rmb 2 | |
1277 | 38 zflag rmb 1 supress leading zeros flag |
92 | 39 bufptr rmb 1 |
0 | 40 u0008 rmb 1 |
838 | 41 datebuf rmb 3 |
42 timebuf rmb 3 | |
1277 | 43 u000F rmb 1 name field width |
44 u0010 rmb 1 last starting column | |
838 | 45 narrow rmb 1 |
1277 | 46 buffer rmb 80 |
47 rmb 450 stack & parameters | |
0 | 48 size equ . |
13 | 49 |
50 name fcs /Mdir/ | |
200
e9ce43cc215e
Made major changes to headers for consistency and identification
boisy
parents:
92
diff
changeset
|
51 fcb edition |
13 | 52 |
92 | 53 tophead fcb C$LF |
1277 | 54 fcs " Module directory at " |
92 | 55 ltitle fcb C$LF |
13 | 56 fcc "Addr Size Typ Rev Attr Use Module name" |
57 fcb C$LF | |
58 fcc "---- ---- --- --- ---- --- ------------" | |
59 fcb C$CR | |
838 | 60 stitle fcb C$LF |
13 | 61 fcc "Addr Size Ty Rv At Uc Name" |
62 fcb C$LF | |
63 fcc "---- ---- -- -- -- -- ---------" | |
64 fcb C$CR | |
65 | |
838 | 66 start stx <parmptr |
1277 | 67 clr <zflag |
838 | 68 ldd #$0C30 |
13 | 69 std <u000F |
838 | 70 clr <narrow assume wide output |
71 lda #stdout standard output | |
72 ldb #SS.ScSiz we need screen size | |
73 os9 I$GetStt get it | |
74 bcc L00D2 branch if we got it | |
75 cmpb #E$UnkSvc not a known service request error? | |
76 lbne Exit if not, exit | |
13 | 77 bra L00DF |
838 | 78 L00D2 cmpx #80 80 columns? |
79 bge L00DF branch if greater or equal to | |
80 inc <narrow | |
81 ldd #$0A15 | |
13 | 82 std <u000F |
1277 | 83 L00DF leay >tophead,pcr |
84 leax <buffer,u | |
85 stx <bufptr | |
86 lbsr copySTR | |
838 | 87 leax datebuf,u |
0 | 88 os9 F$Time |
838 | 89 leax timebuf,u |
13 | 90 lbsr L0224 |
1277 | 91 lbsr writeBUF |
92 ldx >D.ModDir MUST use ext addr for page 0 | |
838 | 93 stx <mdstart |
13 | 94 ldd >D.ModDir+2 |
838 | 95 std <mdend |
1277 | 96 leax -MD$ESize,x |
92 | 97 * Check for 'E' given as argument |
838 | 98 ldy <parmptr |
99 ldd ,y+ | |
100 andb #$DF | |
101 cmpd #$2D45 -E ? | |
1277 | 102 bne L015D |
103 leax >ltitle,pcr | |
838 | 104 tst <narrow |
1277 | 105 beq L012B |
106 leax >stitle,pcr | |
838 | 107 L012B ldy #80 max. length to write |
108 lda #stdout | |
0 | 109 os9 I$WritLn |
838 | 110 ldx <mdstart |
1277 | 111 bra L01B9 |
112 loop ldy MD$MPtr,x | |
113 beq L015D skip if unused slot | |
114 ldd M$Name,y | |
0 | 115 leay d,y |
1277 | 116 lbsr copySTR |
117 L0141 lbsr outSP | |
0 | 118 ldb <u0008 |
13 | 119 subb #$12 |
120 cmpb <u0010 | |
121 bhi L0154 | |
122 L014C subb <u000F | |
123 bhi L014C | |
124 bne L0141 | |
125 bra L015D | |
1277 | 126 L0154 lbsr writeBUF |
127 L015D leax MD$ESize,x | |
838 | 128 cmpx <mdend |
92 | 129 bcs loop |
1277 | 130 lbsr writeBUF |
838 | 131 bra ExitOk |
92 | 132 * |
838 | 133 * A module entry is 2 two byte pointers. |
92 | 134 * If the first pointer is $0000, then the slot is unused |
1277 | 135 L0168 ldy MD$MPtr,x ptr=0? |
136 beq gotonxt yes, skip unused slot | |
137 ldd MD$MPtr,x address (faster than tfr) | |
138 bsr out4HS | |
139 ldd M$Size,y size | |
140 bsr out4HS | |
838 | 141 tst <narrow |
13 | 142 bne L0181 |
1277 | 143 bsr outSP |
144 L0181 lda M$Type,y type/lang | |
145 bsr out2HS | |
838 | 146 tst <narrow |
13 | 147 bne L018B |
1277 | 148 bsr outSP |
149 L018B lda M$Revs,y revision | |
150 anda #RevsMask | |
151 bsr out2HS | |
152 ldb M$Revs,y attributes | |
153 lda #'r | |
154 bsr L01FE bit 7 (ReEnt) | |
838 | 155 tst <narrow |
13 | 156 bne L01A7 |
1277 | 157 lda #'w bit 6 (ModProt:1=writable) |
13 | 158 bsr L01FE |
1277 | 159 lda #'3 bit 5 (ModNat:6309 Native mode) |
13 | 160 bsr L01FE |
1277 | 161 lda #'? bit 4 undefined |
13 | 162 bsr L01FE |
1277 | 163 L01A7 bsr outSP |
164 bsr outSP | |
165 lda MD$Link,x user count | |
166 bsr out2HS | |
167 ldd M$Name,y | |
168 leay d,y module name | |
169 bsr copySTR | |
170 bsr writeBUF | |
171 gotonxt leax MD$ESize,x | |
838 | 172 L01B9 cmpx <mdend |
13 | 173 bcs L0168 |
92 | 174 |
838 | 175 ExitOk clrb |
176 Exit os9 F$Exit | |
92 | 177 |
1277 | 178 out4HS inc <zflag supress leading zeros |
179 inc <zflag | |
180 bsr Byt2Hex | |
181 dec <zflag | |
0 | 182 tfr b,a |
1277 | 183 out2HS bsr Byt2Hex |
184 bra outSP | |
838 | 185 |
1277 | 186 Byt2Hex inc <zflag supress leading zero |
187 pshs a | |
0 | 188 lsra |
189 lsra | |
190 lsra | |
191 lsra | |
13 | 192 bsr L01DB |
1277 | 193 puls a |
194 anda #$0F is this a zero? | |
195 L01DB bne L01E8 no, print it | |
196 tst <zflag still supressing zeros? | |
197 bgt outZSP yes, count it and print space | |
198 L01E8 clr <zflag nonzero, print all the rest | |
199 adda #'0 | |
92 | 200 cmpa #'9 |
201 bls ApndA | |
1277 | 202 adda #$07 Make it A-F |
92 | 203 bra ApndA |
1277 | 204 |
205 outZSP dec <zflag countdown to last digit | |
206 outSP lda #$20 append a space | |
92 | 207 * |
208 * append a char (in reg a) to buffer | |
209 * | |
210 ApndA pshs x | |
211 ldx <bufptr | |
0 | 212 sta ,x+ |
92 | 213 stx <bufptr |
0 | 214 puls pc,x |
1277 | 215 * |
216 * process attribute flag bit | |
217 * | |
13 | 218 L01FE rolb |
92 | 219 bcs ApndA |
220 lda #'. | |
221 bra ApndA | |
1277 | 222 * |
223 * Copy an FCS string to buffer | |
224 * | |
225 copySTR lda ,y | |
0 | 226 anda #$7F |
92 | 227 bsr ApndA |
0 | 228 lda ,y+ |
1277 | 229 bpl copySTR |
0 | 230 rts |
92 | 231 * |
232 * Append a CR to buffer and write it | |
233 * | |
1277 | 234 writeBUF pshs y,x,a |
92 | 235 lda #C$CR |
236 bsr ApndA | |
237 leax <buffer,u | |
1277 | 238 stx <bufptr |
13 | 239 ldy #80 |
92 | 240 lda #stdout |
0 | 241 os9 I$WritLn |
242 puls pc,y,x,a | |
92 | 243 |
1277 | 244 * Write the time to the buffer as HH:MM:SS |
838 | 245 L0224 bsr Byt2ASC |
246 bsr Colon | |
247 Colon lda #': | |
92 | 248 bsr ApndA |
838 | 249 Byt2ASC ldb ,x+ |
1277 | 250 Hundreds subb #100 |
838 | 251 bcc Hundreds |
1277 | 252 * code to print 100's digit removed - max timefield value is 59 |
253 Tens lda #'9+1 | |
254 TensLoop deca | |
838 | 255 addb #10 |
256 bcc TensLoop | |
92 | 257 bsr ApndA |
0 | 258 tfr b,a |
92 | 259 adda #'0 |
260 bra ApndA | |
13 | 261 |
0 | 262 emod |
263 eom equ * | |
13 | 264 end |