1 |
22 |
dilbert57 |
Assembler release DWC_2.0 version 2.11
|
2 |
|
|
May 6, 2004 (c) Motorola (free ware)
|
3 |
|
|
0001 *
|
4 |
|
|
0002 * Sector Dump Utility
|
5 |
|
|
0003 * for IDE Drives or Compact Flash
|
6 |
|
|
0004 * for the 6809
|
7 |
|
|
0005 * revised for 16 bit peripheral bus
|
8 |
|
|
0006 * on XESS XSA-3S1000 / XST-3.0
|
9 |
|
|
0007 *
|
10 |
|
|
0008 * John Kent
|
11 |
|
|
0009 * 1 Feb 2008
|
12 |
|
|
0010 *
|
13 |
|
|
0011 * SYS09BUG
|
14 |
|
|
0012 *
|
15 |
|
|
0013 F800 MON_BASE EQU $F800
|
16 |
|
|
0014 F800 MONV EQU MON_BASE+0
|
17 |
|
|
0015 F802 NEXTCV EQU MON_BASE+2
|
18 |
|
|
0016 F804 INCHV EQU MON_BASE+4
|
19 |
|
|
0017 F806 INCHEV EQU MON_BASE+6
|
20 |
|
|
0018 F808 INCHEKV EQU MON_BASE+8
|
21 |
|
|
0019 F80A OUTCHV EQU MON_BASE+10
|
22 |
|
|
0020 F80C PDATAV EQU MON_BASE+12
|
23 |
|
|
0021 F80E PCRLFV EQU MON_BASE+14
|
24 |
|
|
0022 F810 PSTRGV EQU MON_BASE+16
|
25 |
|
|
0023 *
|
26 |
|
|
0024 * Register Equates
|
27 |
|
|
0025 *
|
28 |
|
|
0026 E100 CF_BASE EQU $E100
|
29 |
|
|
0027 E100 CF_DATA EQU CF_BASE+0
|
30 |
|
|
0028 E102 CF_ERROR EQU CF_BASE+2 ; read error
|
31 |
|
|
0029 E102 CF_FEATURE EQU CF_BASE+2 ; write feature
|
32 |
|
|
0030 E104 CF_SECCNT EQU CF_BASE+4
|
33 |
|
|
0031 E106 CF_SECNUM EQU CF_BASE+6
|
34 |
|
|
0032 E108 CF_CYLLO EQU CF_BASE+8
|
35 |
|
|
0033 E10A CF_CYLHI EQU CF_BASE+10
|
36 |
|
|
0034 E10C CF_HEAD EQU CF_BASE+12
|
37 |
|
|
0035 E10E CF_STATUS EQU CF_BASE+14 ; read status
|
38 |
|
|
0036 E10E CF_COMAND EQU CF_BASE+14 ; write command
|
39 |
|
|
0037 E11E CF_AUX EQU CF_BASE+30
|
40 |
|
|
0038 *
|
41 |
|
|
0039 * Command Equates
|
42 |
|
|
0040 *
|
43 |
|
|
0041 0006 AUXRESET EQU $06 ; CF_AUX Reset command
|
44 |
|
|
0042 0002 AUXRELEA EQU $02
|
45 |
|
|
0043 0020 CMDREAD EQU $20 ; Read Single sector
|
46 |
|
|
0044 0030 CMDWRITE EQU $30 ; Write Single sector
|
47 |
|
|
0045 00E0 HEADLBA EQU $E0
|
48 |
|
|
0046 *
|
49 |
|
|
0047 * Status bit equates
|
50 |
|
|
0048 *
|
51 |
|
|
0049 0080 BUSY EQU $80
|
52 |
|
|
0050 0040 DRDY EQU $40
|
53 |
|
|
0051 0008 DRQ EQU $08
|
54 |
|
|
0052 0001 ERR EQU $01
|
55 |
|
|
0053 *
|
56 |
|
|
0054 * Start of Program
|
57 |
|
|
0055 *
|
58 |
|
|
0056 0100 ORG $0100
|
59 |
|
|
0057 0100 16 02 46 START LBRA START1
|
60 |
|
|
0058 *
|
61 |
|
|
0059 * DATA STORAGE
|
62 |
|
|
0060 *
|
63 |
|
|
0061 0103 00 00 00 SECNUM FCB $00,$00,$00
|
64 |
|
|
0062 0106 E0 00 CPORT FDB $E000
|
65 |
|
|
0063 0108 FF ECHO FCB $FF
|
66 |
|
|
0064 *
|
67 |
|
|
0065 * SECTOR BUFFER
|
68 |
|
|
0066 *
|
69 |
|
|
0067 0109 SECBUF RMB 512
|
70 |
|
|
0068 *
|
71 |
|
|
0069 * PROGRAM STACK
|
72 |
|
|
0070 *
|
73 |
|
|
0071 0309 RMB 64
|
74 |
|
|
0072 0349 STACK EQU *
|
75 |
|
|
0073 *
|
76 |
|
|
0074 * Initialization
|
77 |
|
|
0075 *
|
78 |
|
|
0076 0349 10 CE 03 49 START1 LDS #STACK
|
79 |
|
|
0077 *
|
80 |
|
|
0078 * Clear sector buffer
|
81 |
|
|
0079 *
|
82 |
|
|
0080 034D 8E 01 09 LDX #SECBUF
|
83 |
|
|
0081 0350 10 8E 00 00 LDY #0
|
84 |
|
|
0082 0354 C6 00 LDB #0
|
85 |
|
|
0083 0356 10 AF 81 ZEROLP STY ,X++
|
86 |
|
|
0084 0359 5A DECB
|
87 |
|
|
0085 035A 26 FA BNE ZEROLP
|
88 |
|
|
0086 *
|
89 |
|
|
0087 * INITIALIZE CF CARD FOR 8 BIT LBA MODE
|
90 |
|
|
0088 *
|
91 |
|
|
0089 035C CC 00 06 LDD #AUXRESET
|
92 |
|
|
0090 035F FD E1 1E STD CF_AUX
|
93 |
|
|
0091 0362 CC 00 02 LDD #AUXRELEA
|
94 |
|
|
0092 0365 FD E1 1E STD CF_AUX
|
95 |
|
|
0093 0368 BD 04 87 JSR WAITRDY
|
96 |
|
|
0094 036B CC 00 E0 LDD #HEADLBA
|
97 |
|
|
0095 036E FD E1 0C STD CF_HEAD
|
98 |
|
|
0096 0371 BD 04 87 JSR WAITRDY
|
99 |
|
|
0097 *
|
100 |
|
|
0098 * DISPLAY TITTLE BANNER
|
101 |
|
|
0099 *
|
102 |
|
|
0100 0374 8E 06 48 LDX #TTLMSG
|
103 |
|
|
0101 0377 BD 06 2B JSR PDATA
|
104 |
|
|
0102 *
|
105 |
|
|
0103 * COMMAND LOOP
|
106 |
|
|
0104 * R - READ
|
107 |
|
|
0105 * W - WRITE
|
108 |
|
|
0106 * N - NEXT
|
109 |
|
|
0107 * P - PREV
|
110 |
|
|
0108 * M - MODIFY
|
111 |
|
|
0109 * Q - QUIT
|
112 |
|
|
0110 *
|
113 |
|
|
0111 037A 8E 06 72 CMDLP LDX #CMDMSG
|
114 |
|
|
0112 037D BD 06 2B JSR PDATA
|
115 |
|
|
0113 0380 BD 06 2F JSR ECHON
|
116 |
|
|
0114 0383 81 52 CMPA #'R'
|
117 |
|
|
0115 0385 27 64 BEQ READ
|
118 |
|
|
0116 0387 81 4E CMPA #'N'
|
119 |
|
|
0117 0389 27 3D BEQ NEXT
|
120 |
|
|
0118 038B 81 50 CMPA #'P'
|
121 |
|
|
0119 038D 27 48 BEQ PREV
|
122 |
|
|
0120 038F 81 57 CMPA #'W'
|
123 |
|
|
0121 0391 10 27 00 A5 LBEQ WRITE
|
124 |
|
|
0122 0395 81 4D CMPA #'M'
|
125 |
|
|
0123 0397 27 2A BEQ MODIFY
|
126 |
|
|
0124 0399 81 51 CMPA #'Q'
|
127 |
|
|
0125 039B 27 22 BEQ QUIT
|
128 |
|
|
0126 039D 81 72 CMPA #'r'
|
129 |
|
|
0127 039F 27 4A BEQ READ
|
130 |
|
|
0128 03A1 81 6E CMPA #'n'
|
131 |
|
|
0129 03A3 27 23 BEQ NEXT
|
132 |
|
|
0130 03A5 81 70 CMPA #'p'
|
133 |
|
|
0131 03A7 27 2E BEQ PREV
|
134 |
|
|
0132 03A9 81 77 CMPA #'w'
|
135 |
|
|
0133 03AB 10 27 00 8B LBEQ WRITE
|
136 |
|
|
0134 03AF 81 6D CMPA #'m'
|
137 |
|
|
0135 03B1 27 10 BEQ MODIFY
|
138 |
|
|
0136 03B3 81 71 CMPA #'q'
|
139 |
|
|
0137 03B5 27 08 BEQ QUIT
|
140 |
|
|
0138 03B7 8E 07 3B LDX #WOTMSG
|
141 |
|
|
0139 03BA BD 06 23 JSR PSTRNG
|
142 |
|
|
0140 03BD 20 BB BRA CMDLP
|
143 |
|
|
0141 *
|
144 |
|
|
0142 * QUIT
|
145 |
|
|
0143 *
|
146 |
|
|
0144 03BF 6E 9F F8 00 QUIT JMP [MONV]
|
147 |
|
|
0145 *
|
148 |
|
|
0146 * MODIFY SECTOR
|
149 |
|
|
0147 *
|
150 |
|
|
0148 03C3 BD 05 2A MODIFY JSR MEMCHG
|
151 |
|
|
0149 03C6 20 B2 BRA CMDLP
|
152 |
|
|
0150 *
|
153 |
|
|
0151 * NEXT SECTOR (READ)
|
154 |
|
|
0152 * INCREMENT SECTOR NUMBER
|
155 |
|
|
0153 * WRAPS AROUND TO ZERO ON $FFFFFF
|
156 |
|
|
0154 *
|
157 |
|
|
0155 03C8 BE 01 04 NEXT LDX SECNUM+1
|
158 |
|
|
0156 03CB 30 01 LEAX 1,X
|
159 |
|
|
0157 03CD BF 01 04 STX SECNUM+1
|
160 |
|
|
0158 03D0 26 2A BNE READS
|
161 |
|
|
0159 03D2 7C 01 03 INC SECNUM
|
162 |
|
|
0160 03D5 20 25 BRA READS
|
163 |
|
|
0161 *
|
164 |
|
|
0162 * PREVIOUS SECTOR (READ)
|
165 |
|
|
0163 * DECREMENT SECTOR NUMBER
|
166 |
|
|
0164 * DON'T DECREMENT PAST $000000
|
167 |
|
|
0165 *
|
168 |
|
|
0166 03D7 BE 01 04 PREV LDX SECNUM+1
|
169 |
|
|
0167 03DA 26 08 BNE PREV1
|
170 |
|
|
0168 03DC 7D 01 03 TST SECNUM
|
171 |
|
|
0169 03DF 27 1B BEQ READS
|
172 |
|
|
0170 03E1 7A 01 03 DEC SECNUM
|
173 |
|
|
0171 03E4 30 1F PREV1 LEAX -1,X
|
174 |
|
|
0172 03E6 BF 01 04 STX SECNUM+1
|
175 |
|
|
0173 03E9 20 11 BRA READS
|
176 |
|
|
0174 *
|
177 |
|
|
0175 * READ SECTORS FROM CF
|
178 |
|
|
0176 *
|
179 |
|
|
0177 03EB 8E 06 E9 READ LDX #SECPMT
|
180 |
|
|
0178 03EE BD 06 23 JSR PSTRNG
|
181 |
|
|
0179 03F1 BD 05 90 JSR IN6HEX
|
182 |
|
|
0180 03F4 29 41 BVS RDEXIT
|
183 |
|
|
0181 03F6 F7 01 03 STB SECNUM
|
184 |
|
|
0182 03F9 BF 01 04 STX SECNUM+1
|
185 |
|
|
0183 *
|
186 |
|
|
0184 03FC 4F READS CLRA
|
187 |
|
|
0185 03FD C6 01 LDB #$01
|
188 |
|
|
0186 03FF FD E1 04 STD CF_SECCNT
|
189 |
|
|
0187 *
|
190 |
|
|
0188 0402 F6 01 05 LDB SECNUM+2
|
191 |
|
|
0189 0405 FD E1 06 STD CF_SECNUM
|
192 |
|
|
0190 *
|
193 |
|
|
0191 0408 F6 01 04 LDB SECNUM+1
|
194 |
|
|
0192 040B FD E1 08 STD CF_CYLLO
|
195 |
|
|
0193 *
|
196 |
|
|
0194 040E F6 01 03 LDB SECNUM+0
|
197 |
|
|
0195 0411 FD E1 0A STD CF_CYLHI
|
198 |
|
|
0196 *
|
199 |
|
|
0197 0414 C6 20 LDB #CMDREAD ; IDE READ MULTIPLE
|
200 |
|
|
0198 0416 FD E1 0E STD CF_COMAND
|
201 |
|
|
0199 0419 BD 04 87 JSR WAITRDY
|
202 |
|
|
0200 *
|
203 |
|
|
0201 041C 8E 01 09 LDX #SECBUF
|
204 |
|
|
0202 041F 10 8E 01 00 LDY #256
|
205 |
|
|
0203 *
|
206 |
|
|
0204 * READ LOOP
|
207 |
|
|
0205 *
|
208 |
|
|
0206 0423 BD 04 96 RDLOOP JSR WAITDRQ
|
209 |
|
|
0207 0426 FC E1 00 LDD CF_DATA ; reverse order of bytes
|
210 |
|
|
0208 0429 E7 80 STB ,X+
|
211 |
|
|
0209 042B A7 80 STA ,X+
|
212 |
|
|
0210 042D 31 3F LEAY -1,Y
|
213 |
|
|
0211 042F 26 F2 BNE RDLOOP
|
214 |
|
|
0212 *
|
215 |
|
|
0213 0431 BD 04 87 JSR WAITRDY
|
216 |
|
|
0214 0434 BD 04 9E JSR MEMDUMP
|
217 |
|
|
0215 0437 7E 03 7A RDEXIT JMP CMDLP
|
218 |
|
|
0216 *
|
219 |
|
|
0217 * WRITE SECTOR TO CF
|
220 |
|
|
0218 *
|
221 |
|
|
0219 043A 8E 06 E9 WRITE LDX #SECPMT
|
222 |
|
|
0220 043D BD 06 23 JSR PSTRNG
|
223 |
|
|
0221 0440 BD 05 90 JSR IN6HEX
|
224 |
|
|
0222 0443 29 3F BVS WREXIT
|
225 |
|
|
0223 0445 F7 01 03 STB SECNUM
|
226 |
|
|
0224 0448 BF 01 04 STX SECNUM+1
|
227 |
|
|
0225 *
|
228 |
|
|
0226 044B 4F CLRA
|
229 |
|
|
0227 044C C6 01 LDB #$01
|
230 |
|
|
0228 044E FD E1 04 STD CF_SECCNT
|
231 |
|
|
0229 *
|
232 |
|
|
0230 0451 F6 01 05 LDB SECNUM+2
|
233 |
|
|
0231 0454 FD E1 06 STD CF_SECNUM
|
234 |
|
|
0232 *
|
235 |
|
|
0233 0457 F6 01 04 LDB SECNUM+1
|
236 |
|
|
0234 045A FD E1 08 STD CF_CYLLO
|
237 |
|
|
0235 *
|
238 |
|
|
0236 045D F6 01 03 LDB SECNUM+0
|
239 |
|
|
0237 0460 FD E1 0A STD CF_CYLHI
|
240 |
|
|
0238 *
|
241 |
|
|
0239 0463 CC 00 30 LDD #CMDWRITE; IDE WRITE MULTIPLE
|
242 |
|
|
0240 0466 FD E1 0E STD CF_COMAND
|
243 |
|
|
0241 0469 BD 04 87 JSR WAITRDY
|
244 |
|
|
0242 *
|
245 |
|
|
0243 046C 8E 01 09 LDX #SECBUF
|
246 |
|
|
0244 046F 10 8E 01 00 LDY #256
|
247 |
|
|
0245 *
|
248 |
|
|
0246 * WRITE LOOP
|
249 |
|
|
0247 *
|
250 |
|
|
0248 0473 BD 04 96 WRLOOP JSR WAITDRQ
|
251 |
|
|
0249 0476 E6 80 LDB ,X+ ; reverse order of bytes
|
252 |
|
|
0250 0478 A6 80 LDA ,X+
|
253 |
|
|
0251 047A FD E1 00 STD CF_DATA
|
254 |
|
|
0252 047D 31 3F LEAY -1,Y
|
255 |
|
|
0253 047F 26 F2 BNE WRLOOP
|
256 |
|
|
0254 *
|
257 |
|
|
0255 0481 BD 04 87 JSR WAITRDY
|
258 |
|
|
0256 0484 7E 03 7A WREXIT JMP CMDLP
|
259 |
|
|
0257 *
|
260 |
|
|
0258 * WAIT UNTIL READY
|
261 |
|
|
0259 *
|
262 |
|
|
0260 0487 FC E1 0E WAITRDY LDD CF_STATUS
|
263 |
|
|
0261 048A C5 80 BITB #BUSY
|
264 |
|
|
0262 048C 26 F9 BNE WAITRDY
|
265 |
|
|
0263 048E FC E1 0E LDD CF_STATUS
|
266 |
|
|
0264 0491 C5 40 BITB #DRDY
|
267 |
|
|
0265 0493 27 F2 BEQ WAITRDY
|
268 |
|
|
0266 0495 39 RTS
|
269 |
|
|
0267 *
|
270 |
|
|
0268 * WAIT FOR DATA REQUEST
|
271 |
|
|
0269 *
|
272 |
|
|
0270 0496 FC E1 0E WAITDRQ LDD CF_STATUS
|
273 |
|
|
0271 0499 C5 08 BITB #DRQ
|
274 |
|
|
0272 049B 27 F9 BEQ WAITDRQ
|
275 |
|
|
0273 049D 39 RTS
|
276 |
|
|
0274 *
|
277 |
|
|
0275 * DUMP SECTOR IN MEMORY
|
278 |
|
|
0276 *
|
279 |
|
|
0277 049E 8E 07 02 MEMDUMP LDX #SECMSG
|
280 |
|
|
0278 04A1 BD 06 23 JSR PSTRNG
|
281 |
|
|
0279 04A4 B6 01 03 LDA SECNUM
|
282 |
|
|
0280 04A7 BD 05 F8 JSR OUT2H
|
283 |
|
|
0281 04AA BE 01 04 LDX SECNUM+1
|
284 |
|
|
0282 04AD BD 05 F0 JSR OUT4H
|
285 |
|
|
0283 04B0 BD 06 27 JSR PCRLF
|
286 |
|
|
0284 *
|
287 |
|
|
0285 * Dump first 256 bytes
|
288 |
|
|
0286 *
|
289 |
|
|
0287 04B3 10 8E 00 00 LDY #$0000
|
290 |
|
|
0288 04B7 30 A9 00 FF LEAX #$0FF,Y
|
291 |
|
|
0289 04BB BD 04 CF JSR AJDUMP
|
292 |
|
|
0290 *
|
293 |
|
|
0291 * Prompt to continue
|
294 |
|
|
0292 *
|
295 |
|
|
0293 04BE 8E 07 44 LDX #PAGMSG
|
296 |
|
|
0294 04C1 BD 06 23 JSR PSTRNG
|
297 |
|
|
0295 04C4 BD 06 38 JSR INCH
|
298 |
|
|
0296 *
|
299 |
|
|
0297 * Dump second 256 bytes
|
300 |
|
|
0298 *
|
301 |
|
|
0299 04C7 10 8E 01 00 LDY #$0100
|
302 |
|
|
0300 04CB 30 A9 00 FF LEAX #$0FF,Y
|
303 |
|
|
0301 *
|
304 |
|
|
0302 * ADJUST LOWER AND UPPER ADDRESS LIMITS
|
305 |
|
|
0303 * TO EVEN 16 BYTE BOUNDRIES.
|
306 |
|
|
0304 *
|
307 |
|
|
0305 * IF LOWER ADDR = $4532
|
308 |
|
|
0306 * LOWER BOUNDS WILL BE ADJUSTED TO = $4530.
|
309 |
|
|
0307 *
|
310 |
|
|
0308 * IF UPPER ADDR = $4567
|
311 |
|
|
0309 * UPPER BOUNDS WILL BE ADJUSTED TO = $4570.
|
312 |
|
|
0310 *
|
313 |
|
|
0311 * ENTER WITH LOWER ADDRESS IN X-REG.
|
314 |
|
|
0312 * -UPPER ADDRESS ON TOP OF STACK.
|
315 |
|
|
0313 *
|
316 |
|
|
0314 04CF 1F 10 AJDUMP TFR X,D GET UPPER ADDR IN D-REG
|
317 |
|
|
0315 04D1 C3 00 10 ADDD #$10 ADD 16 TO UPPER ADDRESS
|
318 |
|
|
0316 04D4 C4 F0 ANDB #$F0 MASK TO EVEN 16 BYTE BOUNDRY
|
319 |
|
|
0317 04D6 34 06 PSHS A,B SAVE ON STACK AS UPPER DUMP LIMIT
|
320 |
|
|
0318 04D8 1F 20 TFR Y,D $F9A5 GET LOWER ADDRESS IN D-REG
|
321 |
|
|
0319 04DA C4 F0 ANDB #$F0 MASK TO EVEN 16 BYTE BOUNDRY
|
322 |
|
|
0320 04DC 1F 01 TFR D,X PUT IN X-REG AS LOWER DUMP LIMIT
|
323 |
|
|
0321 04DE AC E4 NXTLIN CMPX ,S COMPARE LOWER TO UPPER LIMIT
|
324 |
|
|
0322 04E0 27 05 BEQ SKPDMP IF EQUAL SKIP HEX-ASCII DUMP
|
325 |
|
|
0323 04E2 17 01 57 LBSR INCHEK CHECK FOR INPUT FROM KEYBOARD
|
326 |
|
|
0324 04E5 27 03 BEQ EDUMP
|
327 |
|
|
0325 04E7 32 62 SKPDMP LEAS 2,S READJUST STACK IF NOT DUMPING
|
328 |
|
|
0326 04E9 39 RTS ;
|
329 |
|
|
0327 *
|
330 |
|
|
0328 * PRINT 16 HEX BYTES FOLLOWED BY 16 ASCII CHARACTERS
|
331 |
|
|
0329 * FOR EACH LINE THROUGHOUT ADDRESS LIMITS.
|
332 |
|
|
0330 *
|
333 |
|
|
0331 04EA 34 10 EDUMP PSHS X PUSH LOWER ADDR LIMIT ON STACK
|
334 |
|
|
0332 04EC 8E 07 2F LDX #MSG5 POINT TO MSG " - "
|
335 |
|
|
0333 04EF 17 01 31 LBSR PSTRNG PRINT MSG
|
336 |
|
|
0334 04F2 AE E4 LDX ,S LOAD LOWER ADDR FROM TOP OF STACK
|
337 |
|
|
0335 04F4 17 00 F9 LBSR OUT4H PRINT THE ADDRESS
|
338 |
|
|
0336 04F7 17 01 46 LBSR OUT2S 2 SPACES
|
339 |
|
|
0337 04FA C6 10 LDB #$10 LOAD COUNT OF 16 BYTES TO DUMP
|
340 |
|
|
0338 04FC A6 89 01 09 ELOOP LDA SECBUF,X GET FROM MEMORY HEX BYTE TO PRINT
|
341 |
|
|
0339 0500 30 01 LEAX 1,X
|
342 |
|
|
0340 0502 17 00 F3 LBSR OUT2H OUTPUT HEX BYTE AS ASCII
|
343 |
|
|
0341 0505 17 01 3A LBSR OUT1S OUTPUT SPACE
|
344 |
|
|
0342 0508 5A DECB $F9D1 DECREMENT BYTE COUNT
|
345 |
|
|
0343 0509 26 F1 BNE ELOOP CONTINUE TIL 16 HEX BYTES PRINTED
|
346 |
|
|
0344 *
|
347 |
|
|
0345 * PRINT 16 ASCII CHARACTERS
|
348 |
|
|
0346 * IF NOT PRINTABLE OR NOT VALID
|
349 |
|
|
0347 * ASCII PRINT A PERIOD (.)
|
350 |
|
|
0348 050B 17 01 32 LBSR OUT2S 2 SPACES
|
351 |
|
|
0349 050E AE E1 LDX ,S++ GET LOW LIMIT FRM STACK - ADJ STACK
|
352 |
|
|
0350 0510 C6 10 LDB #$10 SET ASCII CHAR TO PRINT = 16
|
353 |
|
|
0351 0512 A6 89 01 09 EDPASC LDA SECBUF,X GET CHARACTER FROM MEMORY
|
354 |
|
|
0352 0516 30 01 LEAX 1,X
|
355 |
|
|
0353 0518 81 20 CMPA #$20 IF LESS THAN $20, NON-PRINTABLE?
|
356 |
|
|
0354 051A 25 04 BCS PERIOD IF SO, PRINT PERIOD INSTEAD
|
357 |
|
|
0355 051C 81 7E CMPA #$7E IS IT VALID ASCII?
|
358 |
|
|
0356 051E 23 02 BLS PRASC IF SO PRINT IT
|
359 |
|
|
0357 0520 86 2E PERIOD LDA #'. LOAD A PERIOD (.)
|
360 |
|
|
0358 0522 17 01 1F PRASC LBSR OUTCH PRINT ASCII CHARACTER
|
361 |
|
|
0359 0525 5A DECB DECREMENT COUNT
|
362 |
|
|
0360 0526 26 EA BNE EDPASC
|
363 |
|
|
0361 0528 20 B4 BRA NXTLIN
|
364 |
|
|
0362 *
|
365 |
|
|
0363 *
|
366 |
|
|
0364 ***** "M" MEMORY EXAMINE AND CHANGE *****
|
367 |
|
|
0365 *
|
368 |
|
|
0366 * RESTRICT ADDRESSING RANGE TO 512 BYTES ($000 - $1FF)
|
369 |
|
|
0367 *
|
370 |
|
|
0368 052A 8E 07 14 MEMCHG LDX #MEMMSG
|
371 |
|
|
0369 052D BD 06 23 JSR PSTRNG
|
372 |
|
|
0370 0530 17 00 74 LBSR IN3HEX INPUT ADDRESS
|
373 |
|
|
0371 0533 29 34 BVS CHRTN IF NOT HEX, RETURN
|
374 |
|
|
0372 0535 8C 02 00 CMPX #$0200
|
375 |
|
|
0373 0538 24 2F BHS CHRTN
|
376 |
|
|
0374 053A 1F 12 TFR X,Y SAVE ADDR IN "Y"
|
377 |
|
|
0375 053C 8E 07 2F MEMC2 LDX #MSG5 POINT TO MSG " - "
|
378 |
|
|
0376 053F 17 00 E1 LBSR PSTRNG PRINT MSG
|
379 |
|
|
0377 0542 1F 21 TFR Y,X FETCH ADDRESS
|
380 |
|
|
0378 0544 17 00 A9 LBSR OUT4H PRINT ADDR IN HEX
|
381 |
|
|
0379 0547 17 00 F8 LBSR OUT1S OUTPUT SPACE
|
382 |
|
|
0380 054A A6 A9 01 09 LDA SECBUF,Y GET CONTENTS OF CURRENT ADDR.
|
383 |
|
|
0381 054E 17 00 A7 LBSR OUT2H OUTPUT CONTENTS IN ASCII
|
384 |
|
|
0382 0551 17 00 EE LBSR OUT1S OUTPUT SPACE
|
385 |
|
|
0383 0554 17 00 60 LBSR BYTE LOOP WAITING FOR OPERATOR INPUT
|
386 |
|
|
0384 0557 28 11 BVC CHANGE IF VALID HEX GO CHANGE MEM. LOC.
|
387 |
|
|
0385 0559 81 08 CMPA #8 IS IT A BACKSPACE (CNTRL H)?
|
388 |
|
|
0386 055B 27 DF BEQ MEMC2 PROMPT OPERATOR AGAIN
|
389 |
|
|
0387 055D 81 18 CMPA #$18 IS IT A CANCEL (CNTRL X)?
|
390 |
|
|
0388 055F 27 DB BEQ MEMC2 PROMPT OPERATOR AGAIN
|
391 |
|
|
0389 0561 81 5E CMPA #'^ IS IT AN UP ARROW?
|
392 |
|
|
0390 0563 27 21 BEQ BACK DISPLAY PREVIOUS BYTE
|
393 |
|
|
0391 0565 81 0D CMPA #$D IS IT A CR?
|
394 |
|
|
0392 0567 26 13 BNE FORWRD DISPLAY NEXT BYTE
|
395 |
|
|
0393 0569 39 CHRTN RTS EXIT ROUTINE
|
396 |
|
|
0394 *
|
397 |
|
|
0395 *
|
398 |
|
|
0396 056A A7 A9 01 09 CHANGE STA SECBUF,Y CHANGE BYTE IN MEMORY
|
399 |
|
|
0397 056E A1 A9 01 09 CMPA SECBUF,Y DID MEMORY BYTE CHANGE?
|
400 |
|
|
0398 0572 27 08 BEQ FORWRD $F972
|
401 |
|
|
0399 0574 17 00 CB LBSR OUT1S OUTPUT SPACE
|
402 |
|
|
0400 0577 86 3F LDA #'? LOAD QUESTION MARK
|
403 |
|
|
0401 0579 17 00 C8 LBSR OUTCH PRINT IT
|
404 |
|
|
0402 057C 10 8C 01 FF FORWRD CMPY #$01FF
|
405 |
|
|
0403 0580 27 BA BEQ MEMC2
|
406 |
|
|
0404 0582 31 21 LEAY 1,Y POINT TO NEXT HIGHER MEM LOCATION
|
407 |
|
|
0405 0584 20 B6 BRA MEMC2 PRINT LOCATION & CONTENTS
|
408 |
|
|
0406 0586 10 8C 00 00 BACK CMPY #$0000
|
409 |
|
|
0407 058A 27 B0 BEQ MEMC2
|
410 |
|
|
0408 058C 31 3F LEAY -1,Y POINT TO LAST MEM LOCATION
|
411 |
|
|
0409 058E 20 AC BRA MEMC2 PRINT LOCATION & CONTENTS
|
412 |
|
|
0410 *
|
413 |
|
|
0411 * THE FOLLOWING ROUTINE LOOPS WAITING FOR THE
|
414 |
|
|
0412 * OPERATOR TO INPUT ONE VALID HEX ADDRESS. THE
|
415 |
|
|
0413 * ADDRESS IS RETURNED IN THE "X" REGISTER.
|
416 |
|
|
0414 *
|
417 |
|
|
0415 * IN6HEX - MS BYTE IN ACCB
|
418 |
|
|
0416 * LS WORD IN X REG
|
419 |
|
|
0417 *
|
420 |
|
|
0418 0590 32 7D IN6HEX LEAS -3,S
|
421 |
|
|
0419 0592 8D 23 BSR BYTE
|
422 |
|
|
0420 0594 29 57 BVS NOTHEX
|
423 |
|
|
0421 0596 A7 E4 STA 0,S
|
424 |
|
|
0422 0598 8D 1D BSR BYTE
|
425 |
|
|
0423 059A 29 51 BVS NOTHEX
|
426 |
|
|
0424 059C A7 61 STA 1,S
|
427 |
|
|
0425 059E 8D 17 BSR BYTE
|
428 |
|
|
0426 05A0 29 4B BVS NOTHEX
|
429 |
|
|
0427 05A2 A7 62 STA 2,S
|
430 |
|
|
0428 05A4 4F CLRA
|
431 |
|
|
0429 05A5 35 94 PULS B,X,PC
|
432 |
|
|
0430 *
|
433 |
|
|
0431 * INPUT 3 HEX DIGITS
|
434 |
|
|
0432 * RESULT RETURNED IN X
|
435 |
|
|
0433 *
|
436 |
|
|
0434 05A7 8D 21 IN3HEX BSR INHEX INPUT HEX (1 HEX CHAR)
|
437 |
|
|
0435 05A9 29 42 BVS NOTHEX EXIT IF NOT VALID HEX
|
438 |
|
|
0436 05AB 1F 01 TFR D,X
|
439 |
|
|
0437 05AD 8D 08 BSR BYTE INPUT BYTE (2 HEX CHAR)
|
440 |
|
|
0438 05AF 29 3C BVS NOTHEX
|
441 |
|
|
0439 05B1 34 10 PSHS X
|
442 |
|
|
0440 05B3 A7 61 STA 1,S
|
443 |
|
|
0441 05B5 35 90 PULS X,PC
|
444 |
|
|
0442 *
|
445 |
|
|
0443 ***** INPUT BYTE (2 HEX CHAR.) *****
|
446 |
|
|
0444 *
|
447 |
|
|
0445 05B7 8D 11 BYTE BSR INHEX GET HEX LEFT
|
448 |
|
|
0446 05B9 29 32 BVS NOTHEX EXIT IF NOT VALID HEX
|
449 |
|
|
0447 05BB 48 ASLA ;
|
450 |
|
|
0448 05BC 48 ASLA ;
|
451 |
|
|
0449 05BD 48 ASLA ; SHIFT INTO LEFT NIBBLE
|
452 |
|
|
0450 05BE 48 ASLA ;
|
453 |
|
|
0451 05BF 1F 89 TFR A,B PUT HEXL IN "B"
|
454 |
|
|
0452 05C1 8D 07 BSR INHEX GET HEX RIGHT
|
455 |
|
|
0453 05C3 29 28 BVS NOTHEX EXIT IF NOT VALID HEX
|
456 |
|
|
0454 05C5 34 04 PSHS B PUSH HEXL ON STACK
|
457 |
|
|
0455 05C7 AB E0 ADDA ,S+ ADD HEXL TO HEXR AND ADJ. STK
|
458 |
|
|
0456 05C9 39 RTS RETURN WITH HEX L&R IN "A"
|
459 |
|
|
0457 *
|
460 |
|
|
0458 *
|
461 |
|
|
0459 05CA 8D 63 INHEX BSR ECHON INPUT ASCII CHAR.
|
462 |
|
|
0460 05CC 81 30 CMPA #'0 IS IT > OR = "0" ?
|
463 |
|
|
0461 05CE 25 1D BCS NOTHEX IF LESS IT AIN'T HEX
|
464 |
|
|
0462 05D0 81 39 CMPA #'9 IS IT < OR = "9" ?
|
465 |
|
|
0463 05D2 22 03 BHI INHEXA IF > MAYBE IT'S ALPHA
|
466 |
|
|
0464 05D4 80 30 SUBA #$30 ASCII ADJ. NUMERIC
|
467 |
|
|
0465 05D6 39 RTS ;
|
468 |
|
|
0466 *
|
469 |
|
|
0467 *
|
470 |
|
|
0468 05D7 81 41 INHEXA CMPA #'A IS IT > OR = "A"
|
471 |
|
|
0469 05D9 25 12 BCS NOTHEX IF LESS IT AIN'T HEX
|
472 |
|
|
0470 05DB 81 46 CMPA #'F IS IT < OR = "F" ?
|
473 |
|
|
0471 05DD 22 03 BHI INHEXL IF > IT AIN'T HEX
|
474 |
|
|
0472 05DF 80 37 SUBA #$37 ASCII ADJ. ALPHA
|
475 |
|
|
0473 05E1 39 RTS ;
|
476 |
|
|
0474 *
|
477 |
|
|
0475 05E2 81 61 INHEXL CMPA #'a IS IT > OR = "a"
|
478 |
|
|
0476 05E4 25 07 BCS NOTHEX IF LESS IT AIN'T HEX
|
479 |
|
|
0477 05E6 81 66 CMPA #'f IS IT < "f"
|
480 |
|
|
0478 05E8 22 03 BHI NOTHEX IF > IT AIN'T HEX
|
481 |
|
|
0479 05EA 80 57 SUBA #$57 ADJUST TO LOWER CASE
|
482 |
|
|
0480 05EC 39 RTS ;
|
483 |
|
|
0481 *
|
484 |
|
|
0482 *
|
485 |
|
|
0483 05ED 1A 02 NOTHEX ORCC #2 SET (V) FLAG IN C-CODES REGISTER
|
486 |
|
|
0484 05EF 39 RTS ;
|
487 |
|
|
0485 *
|
488 |
|
|
0486 *
|
489 |
|
|
0487 05F0 34 10 OUT4H PSHS X PUSH X-REG. ON THE STACK
|
490 |
|
|
0488 05F2 35 02 PULS A POP MS BYTE OF X-REG INTO A-ACC.
|
491 |
|
|
0489 05F4 8D 02 BSR OUTHL OUTPUT HEX LEFT
|
492 |
|
|
0490 05F6 35 02 PULS A POP LS BYTE OF X-REG INTO A-ACC.
|
493 |
|
|
0491 05F8 OUTHL EQU *
|
494 |
|
|
0492 05F8 34 02 OUT2H PSHS A SAVE IT BACK ON STACK
|
495 |
|
|
0493 05FA 44 LSRA CONVERT UPPER HEX NIBBLE TO ASCII
|
496 |
|
|
0494 05FB 44 LSRA ;
|
497 |
|
|
0495 05FC 44 LSRA ;
|
498 |
|
|
0496 05FD 44 LSRA ;
|
499 |
|
|
0497 05FE 8D 04 BSR XASCII PRINT HEX NIBBLE AS ASCII
|
500 |
|
|
0498 0600 35 02 OUTHR PULS A CONVERT LOWER HEX NIBBLE TO ASCII
|
501 |
|
|
0499 0602 84 0F ANDA #$0F STRIP LEFT NIBBLE
|
502 |
|
|
0500 0604 8B 30 XASCII ADDA #$30 ASCII ADJ
|
503 |
|
|
0501 0606 81 39 CMPA #$39 IS IT < OR = "9" ?
|
504 |
|
|
0502 0608 2F 02 BLE OUTC IF LESS, OUTPUT IT
|
505 |
|
|
0503 060A 8B 07 ADDA #7 IF > MAKE ASCII LETTER
|
506 |
|
|
0504 060C 20 36 OUTC BRA OUTCH OUTPUT CHAR
|
507 |
|
|
0505 *
|
508 |
|
|
0506 * BINARY / ASCII --- THIS ROUTINE
|
509 |
|
|
0507 * OUTPUTS A BYTE IN ENHANCED
|
510 |
|
|
0508 * BINARY FORMAT. THE ENHANCEMENT
|
511 |
|
|
0509 * IS DONE BY SUBSTITUTING ASCII
|
512 |
|
|
0510 * LETTERS FOR THE ONES IN THE BYTE.
|
513 |
|
|
0511 * THE ASCII ENHANCEMENT LETTERS
|
514 |
|
|
0512 * ARE OBTAINED FROM THE STRING
|
515 |
|
|
0513 * POINTED TO BY THE INDEX REG. "X".
|
516 |
|
|
0514 *
|
517 |
|
|
0515 060E 34 02 BIASCI PSHS A SAVE "A" ON STACK
|
518 |
|
|
0516 0610 C6 08 LDB #8 PRESET LOOP# TO BITS PER BYTE
|
519 |
|
|
0517 0612 A6 80 OUTBA LDA ,X+ GET LETTER FROM STRING
|
520 |
|
|
0518 0614 68 E4 ASL ,S TEST BYTE FOR "1" IN B7
|
521 |
|
|
0519 0616 25 02 BCS PRTBA IF ONE PRINT LETTER
|
522 |
|
|
0520 0618 86 2D LDA #'- IF ZERO PRINT "-"
|
523 |
|
|
0521 061A 8D 28 PRTBA BSR OUTCH PRINT IT
|
524 |
|
|
0522 061C 8D 24 BSR OUT1S PRINT SPACE
|
525 |
|
|
0523 061E 5A DECB SUB 1 FROM #BITS YET TO PRINT
|
526 |
|
|
0524 061F 26 F1 BNE OUTBA
|
527 |
|
|
0525 0621 35 82 PULS A,PC
|
528 |
|
|
0526 *
|
529 |
|
|
0527 * PRINT STRING PRECEEDED BY A CR & LF.
|
530 |
|
|
0528 *
|
531 |
|
|
0529 0623 6E 9F F8 10 PSTRNG JMP [PSTRGV] PRINT CR/LF
|
532 |
|
|
0530 *
|
533 |
|
|
0531 * PCRLF
|
534 |
|
|
0532 *
|
535 |
|
|
0533 0627 6E 9F F8 0E PCRLF JMP [PCRLFV]
|
536 |
|
|
0534 *
|
537 |
|
|
0535 * PDATA
|
538 |
|
|
0536 *
|
539 |
|
|
0537 062B 6E 9F F8 0C PDATA JMP [PDATAV]
|
540 |
|
|
0538 *
|
541 |
|
|
0539 062F 7D 01 08 ECHON TST ECHO IS ECHO REQUIRED ?
|
542 |
|
|
0540 0632 27 04 BEQ INCH ECHO NOT REQ. IF CLEAR
|
543 |
|
|
0541 *
|
544 |
|
|
0542 * INCHE
|
545 |
|
|
0543 *
|
546 |
|
|
0544 * ---GETS CHARACTER FROM TERMINAL AND
|
547 |
|
|
0545 * ECHOS SAME. THE CHARACTER IS RETURNED
|
548 |
|
|
0546 * IN THE "A" ACCUMULATOR WITH THE PARITY
|
549 |
|
|
0547 * BIT MASKED OFF. ALL OTHER REGISTERS
|
550 |
|
|
0548 * ARE PRESERVED.
|
551 |
|
|
0549 *
|
552 |
|
|
0550 0634 6E 9F F8 06 INCHE JMP [INCHEV]
|
553 |
|
|
0551 *
|
554 |
|
|
0552 * INCH
|
555 |
|
|
0553 *
|
556 |
|
|
0554 * GET CHARACTER FROM TERMINAL. RETURN
|
557 |
|
|
0555 * CHARACTER IN "A" ACCUMULATOR AND PRESERVE
|
558 |
|
|
0556 * ALL OTHER REGISTERS. THE INPUT CHARACTER
|
559 |
|
|
0557 * IS 8 BITS AND IS NOT ECHOED.
|
560 |
|
|
0558 *
|
561 |
|
|
0559 *
|
562 |
|
|
0560 0638 6E 9F F8 04 INCH JMP [INCHV]
|
563 |
|
|
0561 *
|
564 |
|
|
0562 * INCHEK
|
565 |
|
|
0563 *
|
566 |
|
|
0564 * CHECK FOR A CHARACTER AVAILABLE FROM
|
567 |
|
|
0565 * THE TERMINAL. THE SERIAL PORT IS CHECKED
|
568 |
|
|
0566 * FOR READ READY. ALL REGISTERS ARE
|
569 |
|
|
0567 * PRESERVED, AND THE "Z" BIT WILL BE
|
570 |
|
|
0568 * CLEAR IF A CHARACTER CAN BE READ.
|
571 |
|
|
0569 *
|
572 |
|
|
0570 *
|
573 |
|
|
0571 063C 6E 9F F8 08 INCHEK JMP [INCHEKV]
|
574 |
|
|
0572 *
|
575 |
|
|
0573 0640 8D 00 OUT2S BSR OUT1S OUTPUT 2 SPACES
|
576 |
|
|
0574 0642 86 20 OUT1S LDA #$20 OUTPUT 1 SPACE
|
577 |
|
|
0575 *
|
578 |
|
|
0576 *
|
579 |
|
|
0577 * OUTCH
|
580 |
|
|
0578 *
|
581 |
|
|
0579 * OUTPUT CHARACTER TO TERMINAL.
|
582 |
|
|
0580 * THE CHAR. TO BE OUTPUT IS
|
583 |
|
|
0581 * PASSED IN THE A REGISTER.
|
584 |
|
|
0582 * ALL REGISTERS ARE PRESERVED.
|
585 |
|
|
0583 *
|
586 |
|
|
0584 0644 6E 9F F8 0A OUTCH JMP [OUTCHV]
|
587 |
|
|
0585 *
|
588 |
|
|
0586 * MESSAGE STRINGS
|
589 |
|
|
0587 *
|
590 |
|
|
0588 0648 0A 0D TTLMSG FCB $0A,$0D
|
591 |
|
|
0589 064A 43 4F 4D 50 41 43 FCC "COMPACT FLASH SECTOR READ/WRITE UTILITY"
|
592 |
|
|
54 20 46 4C 41 53
|
593 |
|
|
48 20 53 45 43 54
|
594 |
|
|
4F 52 20 52 45 41
|
595 |
|
|
44 2F 57 52 49 54
|
596 |
|
|
45 20 55 54 49 4C
|
597 |
|
|
49 54 59
|
598 |
|
|
0590 0671 04 FCB $04
|
599 |
|
|
0591 0672 0D 0A CMDMSG FCB $0D,$0A
|
600 |
|
|
0592 0674 28 52 29 20 52 45 FCC "(R) READ SECTOR "
|
601 |
|
|
41 44 20 53 45 43
|
602 |
|
|
54 4F 52 20 20 20
|
603 |
|
|
0593 0686 28 57 29 20 57 52 FCC "(W) WRITE SECTOR "
|
604 |
|
|
49 54 45 20 53 45
|
605 |
|
|
43 54 4F 52 20 20
|
606 |
|
|
0594 0698 0D 0A FCB $0D,$0A
|
607 |
|
|
0595 069A 28 4E 29 20 4E 45 FCC "(N) NEXT SECTOR "
|
608 |
|
|
58 54 20 53 45 43
|
609 |
|
|
54 4F 52 20 20 20
|
610 |
|
|
0596 06AC 28 50 29 20 50 52 FCC "(P) PREV SECTOR "
|
611 |
|
|
45 56 20 53 45 43
|
612 |
|
|
54 4F 52 20 20 20
|
613 |
|
|
0597 06BE 0D 0A FCB $0D,$0A
|
614 |
|
|
0598 06C0 28 4D 29 20 4D 4F FCC "(M) MODIFY SECTOR "
|
615 |
|
|
44 49 46 59 20 53
|
616 |
|
|
45 43 54 4F 52 20
|
617 |
|
|
0599 06D2 28 51 29 20 51 55 FCC "(Q) QUIT "
|
618 |
|
|
49 54 20 20 20 20
|
619 |
|
|
20 20 20 20 20 20
|
620 |
|
|
0600 06E4 0D 0A FCB $0D,$0A
|
621 |
|
|
0601 06E6 3A 20 FCC ": "
|
622 |
|
|
0602 06E8 04 FCB $04
|
623 |
|
|
0603 06E9 53 45 43 54 4F 52 SECPMT FCC "SECTOR NUMBER (6 HEX) : "
|
624 |
|
|
20 4E 55 4D 42 45
|
625 |
|
|
52 20 28 36 20 48
|
626 |
|
|
45 58 29 20 3A 20
|
627 |
|
|
0604 0701 04 FCB $04
|
628 |
|
|
0605 0702 53 45 43 54 4F 52 SECMSG FCC "SECTOR NUMBER - $"
|
629 |
|
|
20 4E 55 4D 42 45
|
630 |
|
|
52 20 2D 20 24
|
631 |
|
|
0606 0713 04 FCB $04
|
632 |
|
|
0607 0714 0D 0A MEMMSG FCB $0D,$0A
|
633 |
|
|
0608 0716 4D 45 4D 4F 52 59 FCC "MEMORY ADDRESS (3 HEX): "
|
634 |
|
|
20 41 44 44 52 45
|
635 |
|
|
53 53 20 28 33 20
|
636 |
|
|
48 45 58 29 3A 20
|
637 |
|
|
0609 072E 04 FCB $04
|
638 |
|
|
0610 072F 20 2D 20 MSG5 FCC " - "
|
639 |
|
|
0611 0732 04 FCB $04
|
640 |
|
|
0612 0733 00 00 0A 0D 00 00 MSG2 FCB $00,$00,$0A,$0D,$00,$00,$00,$04
|
641 |
|
|
00 04
|
642 |
|
|
0613 073B 57 68 61 74 20 3F WOTMSG FCC "What ?"
|
643 |
|
|
0614 0741 0D 0A 04 FCB $0D,$0A,$04
|
644 |
|
|
0615 0744 0D 0A PAGMSG FCB $0D,$0A
|
645 |
|
|
0616 0746 48 69 74 20 61 6E FCC "Hit any key to continue"
|
646 |
|
|
79 20 6B 65 79 20
|
647 |
|
|
74 6F 20 63 6F 6E
|
648 |
|
|
74 69 6E 75 65
|
649 |
|
|
0617 075D 04 FCB $04
|
650 |
|
|
0618 *
|
651 |
|
|
0619 END START
|
652 |
|
|
Program + Init Data = 1054 bytes
|
653 |
|
|
Error count = 0
|