OpenCores
URL https://opencores.org/ocsvn/System09/System09/trunk

Subversion Repositories System09

[/] [System09/] [tags/] [pre_mkfiles_rev1_merge/] [src/] [dump/] [dump_cf8.lst] - Blame information for rev 66

Details | Compare with Previous | View Log

Line No. Rev Author Line
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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.