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