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

Subversion Repositories System09

[/] [System09/] [tags/] [pre_mkfiles_rev1_merge/] [src/] [dump/] [dump_ide.lst] - Blame information for rev 188

Go to most recent revision | 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 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

powered by: WebSVN 2.1.0

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