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

Subversion Repositories System09

[/] [System09/] [tags/] [pre_mkfiles_rev1_merge/] [src/] [upld/] [upld_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                         ** FLEX 9 DISK DRIVERS
5
0003                         *
6
0004                         * FOR SYS09BUG ON THE DIGILENT SPARTAN 3 STARTER BOARD
7
0005                         * WITH I/O MAPPED AT $XE000
8
0006                         * AND ROM MAPPED AT $XF000
9
0007                         * THE DIGILENT SPARTAN 3 STARTER BOARD HAS 1MBYTE OF SRAM
10
0008                         * THE FIRST 64K IS USED BY FLEX,
11
0009                         * THE SECOND 128K IS USED AS A ROM DISK
12
0010                         * THE REMAINING RAM IS USED FOR A RAM DISK
13
0011                         *
14
0012                         *
15
0013 0001                    CFLAG   EQU $01     CARRY FLAG
16
0014 0002                    VFLAG   EQU $02     OVERFLOW FLAG
17
0015 0004                    ZFLAG   EQU $04     ZERO FLAG
18
0016 0008                    NFLAG   EQU $08     NEGATIVE FLAG
19
0017 0010                    IFLAG   EQU $10     IRQ MASK CC
20
0018 0020                    HFLAG   EQU $20     HALF CARRY
21
0019 0040                    FFLAG   EQU $40     FIRQ MASK CC
22
0020 0080                    EFLAG   EQU $80     ENTIRE FLAG
23
0021                         *
24
0022 0000                    MAPPAG  EQU $00     PAGE $0000 DAT ADDRESS
25
0023                         *
26
0024                         * Serial Port
27
0025                         *
28
0026 E000                    ACIAS   EQU $E000
29
0027 E000                    ACIAC1  EQU ACIAS
30
0028 E001                    ACIAD1  EQU ACIAS+1
31
0029 04E2                    DELCON  EQU 1250    Delay (Processor clock in MHz * 50)
32
0030                         *
33
0031                         * XMODEM Control characters
34
0032                         *
35
0033 0001                    SOH     EQU $01
36
0034 0004                    EOT     EQU $04
37
0035 0006                    ACK     EQU $06
38
0036 0015                    NAK     EQU $15
39
0037 0018                    CAN     EQU $18
40
0038                         *
41
0039                         * Some dummy Constants
42
0040                         *
43
0041 0030                    RMAXTRK EQU 48
44
0042 000E                    RMAXSEC EQU 14
45
0043 0292                    RTOTSEC EQU RMAXTRK*RMAXSEC-RMAXSEC
46
0044                         *
47
0045                         * Start
48
0046                         *
49
0047 0100                            ORG $0100
50
0048 0100 17 02 C3           START   LBSR  UXSUB
51
0049 0103 6E 9F F8 00                JMP  [$F800]  Jump to monitor on Completion.
52
0050                         *
53
0051                         *
54
0052                         * RAM SPACE
55
0053                         *
56
0054 0107 00                 DRVNUM  FCB  0
57
0055 0108 00                 TRACK   FCB  0
58
0056 0109 00                 SECTOR  FCB  0
59
0057 010A 00                 CHKSUM  FCB  0
60
0058 010B 00                 BLKNUM  FCB  0 Xmodem block number
61
0059 010C 00                 BYTCNT  FCB  0 Xmodem byte count
62
0060 010D 00 00              XSTATE  FDB  0 Xmodem State Vector
63
0061 010F 00 00 00           DELCNT  FCB  $00,$00,$00 Xmodem Poll timer
64
0062 0112 00                 MAXTRK  FCB  0
65
0063 0113 00                 MAXSEC  FCB  0
66
0064 0200                            ORG  $0200
67
0065                         *
68
0066                         * SECTOR BUFFER
69
0067                         *
70
0068 0200                    BUFFER  RMB  256
71
0069                         *
72
0070                         * ACIA INPUT TEST
73
0071                         *
74
0072 0300 B6 E0 00           INTEST  LDA ACIAC1
75
0073 0303 85 01                      BITA #$01
76
0074 0305 39                         RTS
77
0075                         *
78
0076                         * RESET ACIA
79
0077                         *
80
0078 0306 86 03              ACIRST  LDA #$03 master reset
81
0079 0308 B7 E0 00                   STA  ACIAC1
82
0080 030B 86 11                      LDA #$11
83
0081 030D B7 E0 00                   STA ACIAC1
84
0082 0310 39                         RTS
85
0083                         *
86
0084                         * ACIA INPUT
87
0085                         *
88
0086 0311 86 10              INTER   LDA  #16
89
0087 0313 B7 01 0F                   STA  DELCNT+0
90
0088 0316 7F 01 10                   CLR  DELCNT+1
91
0089 0319 7F 01 11                   CLR  DELCNT+2
92
0090 031C B6 E0 00           INTER0  LDA  ACIAC1
93
0091 031F 85 01                      BITA #$01
94
0092 0321 26 08                      BNE  INTER1
95
0093 0323 85 78                      BITA #$78
96
0094 0325 27 0A                      BEQ  INTER2
97
0095 0327 8D DD                      BSR  ACIRST
98
0096 0329 20 E6                      BRA  INTER
99
0097                         *
100
0098 032B B6 E0 01           INTER1  LDA  ACIAD1
101
0099 032E 1C FD                      ANDCC #$FF-VFLAG
102
0100 0330 39                         RTS
103
0101                         *
104
0102 0331 7A 01 11           INTER2  DEC  DELCNT+2
105
0103 0334 26 E6                      BNE  INTER0
106
0104 0336 7A 01 10                   DEC  DELCNT+1
107
0105 0339 26 E1                      BNE  INTER0
108
0106 033B 7A 01 0F                   DEC  DELCNT+0
109
0107 033E 26 DC                      BNE  INTER0
110
0108 0340 4F                         CLRA
111
0109 0341 1A 02                      ORCC #VFLAG
112
0110 0343 39                         RTS
113
0111                         *
114
0112                         * ACIA OUTPUT
115
0113                         *
116
0114 0344 34 02              OUTTER  PSHS A
117
0115                         *
118
0116 0346 B6 E0 00           OUTTE1  LDA ACIAC1
119
0117 0349 85 02                      BITA #$02
120
0118 034B 26 08                      BNE  OUTTE2
121
0119 034D 85 78                      BITA #$78
122
0120 034F 27 F5                      BEQ  OUTTE1
123
0121 0351 8D B3                      BSR  ACIRST
124
0122 0353 20 F1                      BRA  OUTTE1
125
0123                         *
126
0124 0355 35 02              OUTTE2  PULS A
127
0125 0357 B7 E0 01                   STA ACIAD1
128
0126 035A 39                         RTS
129
0127                         *
130
0128                         * Print Data
131
0129                         *
132
0130 035B 8D E7              PDATA0  BSR  OUTTER
133
0131 035D A6 80              PDATA1  LDA  ,X+
134
0132 035F 81 04                      CMPA #$04
135
0133 0361 26 F8                      BNE  PDATA0
136
0134 0363 39                         RTS
137
0135                         *
138
0136                         ** 'UX' Xmodem ROM Disk upload
139
0137                         *
140
0138 0364 0D 0A              UXMES0  FCB $0D,$0A
141
0139 0366 58 6D 6F 64 65 6D          FCC 'Xmodem ROM Disk Upload'
142
          20 52 4F 4D 20 44
143
          69 73 6B 20 55 70
144
          6C 6F 61 64
145
0140 037C 04                         FCB 4
146
0141 037D 0D 0A              UXMES1  FCB $0D,$0A
147
0142 037F 55 70 6C 6F 61 64          FCC 'Upload Complete'
148
          20 43 6F 6D 70 6C
149
          65 74 65
150
0143 038E 04                         FCB 4
151
0144 038F 0D 0A              UXMES2  FCB $0D,$0A
152
0145 0391 55 70 6C 6F 61 64          FCC 'Upload Error'
153
          20 45 72 72 6F 72
154
0146 039D 04                         FCB 4
155
0147 039E 0D 0A              UXMSG3  FCB $0D,$0A
156
0148 03A0 44 72 69 76 65 20          FCC 'Drive Number :'
157
          4E 75 6D 62 65 72
158
          20 3A
159
0149 03AE 04                         FCB 4
160
0150 03AF 0D 0A              UXMSG4  FCB $0D,$0A
161
0151 03B1 41 72 65 20 59 6F          FCC 'Are You Sure ? (Y/N)'
162
          75 20 53 75 72 65
163
          20 3F 20 28 59 2F
164
          4E 29
165
0152 03C5 04                         FCB 4
166
0153                         *
167
0154                         * Print Banner
168
0155                         *
169
0156 03C6 8E 03 64           UXSUB   LDX #UXMES0
170
0157 03C9 17 FF 91                   LBSR PDATA1
171
0158                         *
172
0159                         * Prompt for Disk drive number (0 to 3)
173
0160                         *
174
0161 03CC 8E 03 9E                   LDX #UXMSG3
175
0162 03CF 17 FF 8B                   LBSR PDATA1
176
0163 03D2 17 FF 3C           UXSUB1  LBSR INTER
177
0164 03D5 29 FB                      BVS  UXSUB1
178
0165 03D7 17 FF 6A                   LBSR OUTTER
179
0166 03DA 81 30                      CMPA #'0
180
0167 03DC 10 25 01 2E                LBLO UXEXIT
181
0168 03E0 81 33                      CMPA #'3
182
0169 03E2 10 22 01 28                LBHI UXEXIT
183
0170 03E6 80 30                      SUBA #'0
184
0171 03E8 B7 01 07                   STA  DRVNUM
185
0172                         *
186
0173                         * Report selected drive
187
0174                         *
188
0175 03EB 8E 03 9E                   LDX #UXMSG3
189
0176 03EE 17 FF 6C                   LBSR PDATA1
190
0177 03F1 B6 01 07                   LDA  DRVNUM
191
0178 03F4 8B 30                      ADDA #'0
192
0179 03F6 17 FF 4B                   LBSR OUTTER
193
0180                         *
194
0181                         * Ask for confirmation (Y/N)
195
0182                         *
196
0183 03F9 8E 03 AF                   LDX #UXMSG4
197
0184 03FC 17 FF 5E                   LBSR PDATA1
198
0185 03FF 17 FF 0F           UXSUB2  LBSR INTER
199
0186 0402 29 FB                      BVS  UXSUB2
200
0187 0404 17 FF 3D                   LBSR OUTTER
201
0188 0407 84 5F                      ANDA #$5F
202
0189 0409 81 4E                      CMPA #'N
203
0190 040B 10 27 00 FF                LBEQ UXEXIT
204
0191 040F 81 59                      CMPA #'Y
205
0192 0411 26 B3                      BNE  UXSUB
206
0193                         *
207
0194                         * We have confirmation ... now load the disk image
208
0195                         *
209
0196 0413 17 01 B1                   LBSR INITDR
210
0197 0416 CE 05 37                   LDU  #XSTST
211
0198 0419 FF 01 0D                   STU  XSTATE
212
0199 041C 86 01                      LDA  #1
213
0200 041E B7 01 0B                   STA  BLKNUM
214
0201                         *
215
0202                         * Sector1
216
0203                         *
217
0204 0421 8E 02 00                   LDX  #BUFFER
218
0205                         *
219
0206 0424 4F                         CLRA         TRACK 0
220
0207 0425 C6 01                      LDB  #$01    SECTOR 1
221
0208 0427 B7 01 08                   STA  TRACK
222
0209 042A F7 01 09                   STB  SECTOR
223
0210                         *
224
0211 042D 17 00 EA                   LBSR XREAD
225
0212 0430 10 25 00 E0                LBCS UXERR
226
0213 0434 17 01 87                   LBSR XACK
227
0214 0437 17 00 E0                   LBSR XREAD
228
0215 043A 10 25 00 D6                LBCS UXERR
229
0216                         *
230
0217 043E 8E 02 00                   LDX  #BUFFER
231
0218 0441 B6 01 08                   LDA  TRACK
232
0219 0444 F6 01 09                   LDB  SECTOR
233
0220 0447 17 01 C5                   LBSR WRITSC
234
0221 044A 17 01 71                   LBSR XACK
235
0222                         *
236
0223                         * Sector 2
237
0224                         *
238
0225 044D 8E 02 00                   LDX  #BUFFER
239
0226                         *
240
0227 0450 B6 01 08                   LDA  TRACK
241
0228 0453 F6 01 09                   LDB  SECTOR
242
0229 0456 5C                         INCB
243
0230 0457 B7 01 08                   STA  TRACK
244
0231 045A F7 01 09                   STB  SECTOR
245
0232                         *
246
0233 045D 17 00 BA                   LBSR XREAD
247
0234 0460 10 25 00 B0                LBCS UXERR
248
0235 0464 17 01 57                   LBSR XACK
249
0236 0467 17 00 B0                   LBSR XREAD
250
0237 046A 10 25 00 A6                LBCS UXERR
251
0238                         *
252
0239 046E 8E 02 00                   LDX  #BUFFER
253
0240 0471 B6 01 08                   LDA  TRACK
254
0241 0474 F6 01 09                   LDB  SECTOR
255
0242 0477 17 01 95                   LBSR WRITSC
256
0243                         *
257
0244 047A 17 01 41                   LBSR XACK
258
0245                         *
259
0246                         * Sector 3 - SIR
260
0247                         *
261
0248 047D 8E 02 00                   LDX  #BUFFER
262
0249                         *
263
0250 0480 B6 01 08                   LDA  TRACK
264
0251 0483 F6 01 09                   LDB  SECTOR
265
0252 0486 5C                         INCB
266
0253 0487 B7 01 08                   STA  TRACK
267
0254 048A F7 01 09                   STB  SECTOR
268
0255                         *
269
0256 048D 17 00 8A                   LBSR XREAD
270
0257 0490 10 25 00 80                LBCS UXERR
271
0258 0494 17 01 27                   LBSR XACK
272
0259 0497 17 00 80                   LBSR XREAD
273
0260 049A 10 25 00 76                LBCS UXERR
274
0261                         *
275
0262 049E 8E 02 00                   LDX  #BUFFER
276
0263 04A1 A6 88 26                   LDA  38,X
277
0264 04A4 4C                         INCA
278
0265 04A5 B7 01 12                   STA  MAXTRK
279
0266 04A8 E6 88 27                   LDB  39,X
280
0267 04AB 5C                         INCB
281
0268 04AC F7 01 13                   STB  MAXSEC
282
0269 04AF B6 01 08                   LDA  TRACK
283
0270 04B2 F6 01 09                   LDB  SECTOR
284
0271 04B5 17 01 57                   LBSR WRITSC
285
0272                         *
286
0273 04B8 17 01 03                   LBSR XACK
287
0274                         *
288
0275                         * Sector 4 to Last Track & Sector
289
0276                         *
290
0277                         *
291
0278 04BB B6 01 08                   LDA  TRACK
292
0279 04BE F6 01 09                   LDB  SECTOR
293
0280 04C1 5C                         INCB
294
0281                         *
295
0282 04C2 8E 02 00           UXLOOP  LDX  #BUFFER
296
0283 04C5 B7 01 08                   STA  TRACK
297
0284 04C8 F7 01 09                   STB  SECTOR
298
0285                         *
299
0286 04CB 17 00 4C                   LBSR XREAD
300
0287 04CE 10 25 00 42                LBCS UXERR
301
0288 04D2 17 00 E9                   LBSR XACK
302
0289 04D5 17 00 42                   LBSR XREAD
303
0290 04D8 10 25 00 38                LBCS UXERR
304
0291                         *
305
0292 04DC 8E 02 00                   LDX  #BUFFER
306
0293 04DF B6 01 08                   LDA  TRACK
307
0294 04E2 F6 01 09                   LDB  SECTOR
308
0295 04E5 17 01 27                   LBSR WRITSC
309
0296 04E8 17 00 D3                   LBSR XACK
310
0297                         *
311
0298 04EB B6 01 08                   LDA  TRACK
312
0299 04EE F6 01 09                   LDB  SECTOR
313
0300 04F1 5C                         INCB
314
0301 04F2 F1 01 13                   CMPB MAXSEC
315
0302 04F5 26 CB                      BNE  UXLOOP
316
0303 04F7 C6 01                      LDB  #1
317
0304 04F9 4C                         INCA
318
0305 04FA B1 01 12                   CMPA MAXTRK
319
0306 04FD 26 C3                      BNE  UXLOOP
320
0307                         *
321
0308                         *
322
0309                         *  Write Boot sector
323
0310                         *
324
0311 04FF 8E C0 00                   LDX  #$C000
325
0312 0502 4F                         CLRA         TRACK 0
326
0313 0503 C6 01                      LDB  #$01    SECTOR 1
327
0314 0505 B7 01 08                   STA  TRACK
328
0315 0508 F7 01 09                   STB  SECTOR
329
0316 050B 17 01 01                   LBSR WRITSC
330
0317                         *
331
0318 050E 8E 03 7D           UXEXIT  LDX  #UXMES1
332
0319 0511 7E 03 5D                   JMP  PDATA1
333
0320                         *
334
0321 0514 8E 03 8F           UXERR   LDX  #UXMES2
335
0322 0517 16 FE 43                   LBRA PDATA1
336
0323                         *
337
0324                         * Get a Byte using XModem protocol
338
0325                         * Carry clear => no errors
339
0326                         * Carry set   => errors
340
0327                         *
341
0328 051A 34 40              XREAD   PSHS U
342
0329 051C FE 01 0D                   LDU  XSTATE
343
0330                         *
344
0331 051F 17 FD EF           XBYTE0  LBSR INTER
345
0332 0522 28 0A                      BVC  XBYTE1
346
0333 0524 86 15                      LDA  #NAK
347
0334 0526 17 FE 1B                   LBSR OUTTER
348
0335 0529 CE 05 37                   LDU  #XSTST
349
0336 052C 20 F1                      BRA  XBYTE0
350
0337                         *
351
0338 052E AD C4              XBYTE1  JSR  ,U
352
0339 0530 26 ED                      BNE  XBYTE0
353
0340 0532 FF 01 0D                   STU  XSTATE
354
0341 0535 35 C0                      PULS U,PC
355
0342                         *
356
0343                         * START - LOOK FOR SOH (START OF HEADER) = $01
357
0344                         *
358
0345 0537 81 01              XSTST   CMPA #SOH
359
0346 0539 26 06                      BNE  XSTST1
360
0347 053B CE 05 57                   LDU  #XSTBL
361
0348 053E 1C FA                      ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit)
362
0349 0540 39                         RTS
363
0350                         *
364
0351 0541 81 04              XSTST1  CMPA #EOT
365
0352 0543 26 08                      BNE  XSTST2
366
0353 0545 86 06                      LDA  #ACK
367
0354 0547 17 FD FA                   LBSR OUTTER
368
0355 054A 1A 05                      ORCC  #CFLAG+ZFLAG  Set (c)=1 abort & exit
369
0356 054C 39                         RTS
370
0357                         *
371
0358 054D 81 18              XSTST2  CMPA #CAN
372
0359 054F 26 03                      BNE  XSTST3
373
0360 0551 1A 05                      ORCC  #CFLAG+ZFLAG  Set (c)=1 abort & exit
374
0361 0553 39                         RTS
375
0362                         *
376
0363 0554 1C FA              XSTST3  ANDCC #$FF-CFLAG-ZFLAG
377
0364 0556 39                         RTS
378
0365                         *
379
0366                         * Got SOH
380
0367                         * Now get block number
381
0368                         *
382
0369 0557 B1 01 0B           XSTBL   CMPA BLKNUM
383
0370 055A 26 06                      BNE  XSTBLE
384
0371 055C CE 05 6D                   LDU  #XSTCOM
385
0372 055F 1C FA                      ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit)
386
0373 0561 39                         RTS
387
0374                         *
388
0375                         * Error in block number
389
0376                         *
390
0377 0562 86 15              XSTBLE  LDA  #NAK
391
0378 0564 17 FD DD                   LBSR OUTTER
392
0379 0567 CE 05 37                   LDU  #XSTST
393
0380 056A 1C FA                      ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit)
394
0381 056C 39                         RTS
395
0382                         *
396
0383                         * Get complement of block number
397
0384                         *
398
0385 056D 43                 XSTCOM  COMA
399
0386 056E B1 01 0B                   CMPA BLKNUM
400
0387 0571 26 EF                      BNE  XSTBLE
401
0388 0573 7F 01 0A                   CLR  CHKSUM
402
0389 0576 86 80                      LDA  #128
403
0390 0578 B7 01 0C                   STA  BYTCNT
404
0391 057B CE 05 81                   LDU  #XSTDA
405
0392 057E 1C FA                      ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit)
406
0393 0580 39                         RTS
407
0394                         *
408
0395                         * Get data bytes
409
0396                         *
410
0397 0581 34 02              XSTDA   PSHS A
411
0398 0583 BB 01 0A                   ADDA CHKSUM
412
0399 0586 B7 01 0A                   STA  CHKSUM
413
0400 0589 35 02                      PULS A
414
0401 058B 7A 01 0C                   DEC  BYTCNT
415
0402 058E 26 03                      BNE  XSTDA1
416
0403 0590 CE 05 98                   LDU  #XSTCK
417
0404 0593 A7 80              XSTDA1  STA  ,X+
418
0405 0595 1C FA                      ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit)
419
0406 0597 39                         RTS
420
0407                         *
421
0408                         * Byte count reached zero
422
0409                         * Check checksum byte
423
0410                         *
424
0411 0598 B1 01 0A           XSTCK   CMPA CHKSUM
425
0412 059B 26 0B                      BNE  XSTCK1 retry if wrong checksum
426
0413                         *
427
0414                         * Checksum OK ...
428
0415                         * increment block number
429
0416                         * Don't send ACK until data written to CF
430
0417                         *
431
0418 059D 7C 01 0B                   INC  BLKNUM
432
0419 05A0 CE 05 37                   LDU  #XSTST
433
0420 05A3 1C FE                      ANDCC #$FF-CFLAG No abort
434
0421 05A5 1A 04                      ORCC #ZFLAG      Valid data (exit)
435
0422 05A7 39                         RTS
436
0423                         *
437
0424                         * Checksum Error detected ...
438
0425                         * Reset Sector counter in ACCB to last 128 byte boundary
439
0426                         * and send NAK
440
0427                         *
441
0428 05A8 34 04              XSTCK1  PSHS B
442
0429 05AA 1F 10                      TFR  X,D
443
0430 05AC 5A                         DECB
444
0431 05AD C4 80                      ANDB #128
445
0432 05AF 1F 01                      TFR  D,X
446
0433 05B1 35 04                      PULS B
447
0434 05B3 86 15                      LDA  #NAK
448
0435 05B5 17 FD 8C           XSTCK2  LBSR OUTTER
449
0436 05B8 CE 05 37                   LDU  #XSTST
450
0437 05BB 1C FA                      ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit)
451
0438 05BD 39                         RTS
452
0439                         *
453
0440                         * Acknowledge Data Received
454
0441                         *
455
0442 05BE 34 02              XACK    PSHS A
456
0443 05C0 86 06                      LDA  #ACK
457
0444 05C2 17 FD 7F                   LBSR OUTTER
458
0445 05C5 35 82                      PULS A,PC
459
0446                         *
460
0447                         *
461
0448                         ** FLEX 9 COMPACT FLASH DISK DRIVERS
462
0449                         *
463
0450                         * FOR SYS09BUG 1.2 ON THE BURCHED B5-X300
464
0451                         * WITH I/O MAPPED AT $XE000
465
0452                         * AND ROM MAPPED AT $XF000
466
0453                         * THE BURCHED B5-X300 HAS 256KBYTES OF SRAM
467
0454                         * THE FIRST 64K IS USED BY FLEX,
468
0455                         * THE SECOND 192K MAY BE USED AS A RAM DISK
469
0456                         *
470
0457                         *
471
0458 0010                    IMASK  EQU $10     IRQ MASK CC
472
0459 0040                    FMASK  EQU $40     FIRQ MASK CC
473
0460 FFF0                    DATREG EQU $FFF0   DAT REGISTERS
474
0461                         *
475
0462 E040                    CF_BASE    EQU $E040
476
0463 E040                    CF_DATA    EQU CF_BASE+0
477
0464 E041                    CF_ERROR   EQU CF_BASE+1 ; read error
478
0465 E041                    CF_FEATURE EQU CF_BASE+1 ; write feature
479
0466 E042                    CF_SCNT    EQU CF_BASE+2
480
0467 E043                    CF_SNUM    EQU CF_BASE+3
481
0468 E044                    CF_CLO     EQU CF_BASE+4
482
0469 E045                    CF_CHI     EQU CF_BASE+5
483
0470 E046                    CF_HEAD    EQU CF_BASE+6
484
0471 E047                    CF_STATUS  EQU CF_BASE+7 ; read status
485
0472 E047                    CF_COMAND  EQU CF_BASE+7 ; write command
486
0473                         *
487
0474                         * Command Equates
488
0475                         *
489
0476 0020                    CMDREAD    EQU $20 ; Read Single sector
490
0477 0030                    CMDWRITE   EQU $30 ; Write Single sector
491
0478 00EF                    CMDFEATURE EQU $EF
492
0479 0001                    FEAT8BIT   EQU $01 ; enable 8 bit transfers
493
0480 00E0                    HEADLBA    EQU $E0
494
0481                         *
495
0482                         * Status bit equates
496
0483                         *
497
0484 0080                    BSY        EQU $80
498
0485 0040                    DRDY       EQU $40
499
0486 0008                    DRQ        EQU $08
500
0487 0001                    ERR        EQU $01
501
0488                         *
502
0489                         *
503
0490                         * INITIALIZE CF CARD FOR 8 BIT LBA MODE
504
0491                         *
505
0492 05C7 8D 7A              INITDR BSR WAITRDY
506
0493 05C9 86 E0                     LDA  #HEADLBA
507
0494 05CB B7 E0 46                  STA  CF_HEAD
508
0495 05CE 86 01                     LDA #FEAT8BIT
509
0496 05D0 B7 E0 41                  STA CF_FEATURE
510
0497 05D3 86 EF                     LDA #CMDFEATURE
511
0498 05D5 B7 E0 47                  STA CF_COMAND
512
0499 05D8 20 69                     BRA WAITRDY
513
0500                         *
514
0501                         * Seek track and sector
515
0502                         * A holds track number (0 - ??)
516
0503                         * B holds sector number (1 - ??)
517
0504                         * Sector numbers starts from 1
518
0505                         * subtract 1 to start from sector 0 on CF
519
0506                         *
520
0507 05DA 5A                 SEEKTS DECB
521
0508 05DB F7 E0 43                  STB  CF_SNUM
522
0509 05DE B7 E0 44                  STA  CF_CLO
523
0510 05E1 F6 01 07                  LDB  DRVNUM
524
0511 05E4 F7 E0 45                  STB  CF_CHI
525
0512 05E7 C6 01                     LDB  #$01
526
0513 05E9 F7 E0 42                  STB  CF_SCNT
527
0514 05EC 5F                        CLRB
528
0515 05ED 39                        RTS
529
0516                         *
530
0517                         * READ SECTORS FROM CF
531
0518                         *
532
0519                         *
533
0520 05EE 8D EA              READSC BSR  SEEKTS
534
0521 05F0 86 20                     LDA  #CMDREAD ; IDE READ MULTIPLE
535
0522 05F2 B7 E0 47                  STA  CF_COMAND
536
0523 05F5 8D 4C                     BSR  WAITRDY
537
0524                         *
538
0525                         * READ LOOP
539
0526                         *
540
0527 05F7 5F                        CLRB
541
0528 05F8 8D 58              RDLP1  BSR  WAITDRQ
542
0529 05FA B6 E0 40                  LDA  CF_DATA
543
0530 05FD A7 80                     STA  ,X+
544
0531 05FF 5A                        DECB
545
0532 0600 26 F6                     BNE  RDLP1
546
0533                         *
547
0534 0602 5F                        CLRB
548
0535 0603 8D 4D              RDLP2  BSR  WAITDRQ
549
0536 0605 B6 E0 40                  LDA  CF_DATA
550
0537 0608 5A                        DECB
551
0538 0609 26 F8                     BNE  RDLP2
552
0539                         *
553
0540 060B 8D 36                     BSR  WAITRDY
554
0541 060D 5F                        CLRB
555
0542 060E 39                        RTS
556
0543                         *
557
0544                         * WRITE SECTOR TO CF
558
0545                         *
559
0546 060F 8D C9              WRITSC BSR  SEEKTS   ; SEEK TRACK & SECTOR
560
0547 0611 86 30                     LDA  #CMDWRITE ; IDE WRITE MULTIPLE
561
0548 0613 B7 E0 47                  STA  CF_COMAND
562
0549 0616 8D 2B                     BSR  WAITRDY
563
0550                         *
564
0551                         * WRITE LOOP
565
0552                         *
566
0553 0618 5F                        CLRB
567
0554 0619 8D 37              WRTLP1 BSR  WAITDRQ
568
0555 061B A6 80                     LDA  ,X+
569
0556 061D B7 E0 40                  STA  CF_DATA
570
0557 0620 5A                        DECB
571
0558 0621 26 F6                     BNE  WRTLP1
572
0559                         *
573
0560 0623 5F                        CLRB
574
0561 0624 8D 2C              WRTLP2 BSR  WAITDRQ
575
0562 0626 4F                        CLRA
576
0563 0627 B7 E0 40                  STA  CF_DATA
577
0564 062A 5A                        DECB
578
0565 062B 26 F7                     BNE WRTLP2
579
0566                         *
580
0567 062D 8D 14                     BSR  WAITRDY
581
0568 062F 5F                        CLRB
582
0569 0630 39                        RTS
583
0570                         *
584
0571                         * CHECK FOR BUSY
585
0572                         * Doubles as VERIFY
586
0573                         *
587
0574 0631 5F                 BUSY   CLRB            Never busy
588
0575 0632 39                        RTS
589
0576                         *
590
0577                         * DRIVE SELECT DISK DRIVER
591
0578                         *
592
0579 0633 A6 03              DRVSEL LDA   3,X       GET DRIVE # FROM FCB
593
0580 0635 81 03                     CMPA  #3
594
0581 0637 23 01                     BLS   DRVS2     IF > 3, SET IT TO 0
595
0582 0639 4F                        CLRA
596
0583 063A B7 01 07           DRVS2  STA   DRVNUM
597
0584 063D 5F                        CLRB            ; SET Z, CLEAR C
598
0585 063E 39                        RTS
599
0586                         *
600
0587                         * CHECK DRIVE READY DISK DRIVER
601
0588                         *
602
0589 063F A6 03              CHKDRV LDA  3,X
603
0590 0641 5F                        CLRB             ; CLEAR C, SET Z
604
0591 0642 39                        RTS
605
0592                         *
606
0593                         * WAIT UNTIL READY
607
0594                         *
608
0595 0643 B6 E0 47           WAITRDY LDA  CF_STATUS
609
0596 0646 85 80                      BITA #BSY
610
0597 0648 26 F9                      BNE  WAITRDY
611
0598 064A B6 E0 47                   LDA  CF_STATUS
612
0599 064D 85 40                      BITA #DRDY
613
0600 064F 27 F2                      BEQ  WAITRDY
614
0601 0651 39                         RTS
615
0602                         *
616
0603                         * WAIT FOR DATA REQUEST
617
0604                         *
618
0605 0652 B6 E0 47           WAITDRQ LDA  CF_STATUS
619
0606 0655 85 08                      BITA #DRQ
620
0607 0657 27 F9                      BEQ  WAITDRQ
621
0608 0659 39                         RTS
622
0609                         *
623
0610                         *******************************************************
624
0611                         *
625
0612                         * Bootstrap FLEX Loader
626
0613                         *
627
0614                         * SBUG1.8 loads the bootstap loader at $C000
628
0615                         * however the Flex adaption manual has the
629
0616                         * bootstrap loader residing at $C100
630
0617                         *
631
0618                         ******************************************************
632
0619                         *
633
0620                         * Equates
634
0621                         *
635
0622 C0FF                    STACK   EQU $C0FF
636
0623 C300                    SCTBUF  EQU $C300
637
0624                         *
638
0625                         * Start of Utility
639
0626                         *
640
0627 C000                            ORG $C000
641
0628 C000 20 0B              BOOT    BRA LOAD0
642
0629 C002 00 00 00                   FCB 0,0,0
643
0630 C005 00                 TRK     FCB 0        File start track
644
0631 C006 00                 SCT     FCB 0        File start sector
645
0632 C007 00                 DNS     FCB 0        Density Flag (not used)
646
0633 C008 C0 00              TADR    FDB $C000    Transfer address
647
0634 C00A 00 00              LADR    FDB 0        Load Address
648
0635 C00C 00                 DRNUM   FCB 0        Drive number 0
649
0636                         *
650
0637 C00D 10 CE C0 FF        LOAD0   LDS  #STACK   Set up stack
651
0638 C011 FC C0 05                   LDD  TRK      Set up start track and sector
652
0639 C014 FD C3 00                   STD  SCTBUF
653
0640 C017 10 8E C4 00                LDY  #SCTBUF+256
654
0641                         *
655
0642                         * Perform actual file load
656
0643                         *
657
0644 C01B 8D 35              LOAD1   BSR GETCH    Get acharcater
658
0645 C01D 81 02                      CMPA #$02    Data record hearder ?
659
0646 C01F 27 10                      BEQ  LOAD2   Skip, is so
660
0647 C021 81 16                      CMPA #$16    Xfr address hearder ?
661
0648 C023 26 F6                      BNE LOAD1    Loop if neither
662
0649                         *
663
0650                         * Get transfer address
664
0651                         *
665
0652 C025 8D 2B                      BSR  GETCH
666
0653 C027 B7 C0 08                   STA  TADR
667
0654 C02A 8D 26                      BSR  GETCH
668
0655 C02C B7 C0 09                   STA  TADR+1
669
0656 C02F 20 EA                      BRA  LOAD1
670
0657                         *
671
0658                         * Load data record
672
0659                         *
673
0660 C031 8D 1F              LOAD2  BSR  GETCH  Get load address
674
0661 C033 B7 C0 0A                  STA  LADR
675
0662 C036 8D 1A                     BSR  GETCH
676
0663 C038 B7 C0 0B                  STA  LADR+1
677
0664 C03B 8D 15                     BSR  GETCH  Get Bytes count
678
0665 C03D 1F 89                     TFR  A,B
679
0666 C03F 5D                        TSTB
680
0667 C040 27 D9                     BEQ  LOAD1 Loop if count = 0
681
0668 C042 BE C0 0A                  LDX  LADR  Get load address
682
0669 C045 34 14              LOAD3  PSHS B,X
683
0670 C047 8D 09                     BSR  GETCH  Get data character
684
0671 C049 35 14                     PULS B,X
685
0672 C04B A7 80                     STA  ,X+    Store at load address
686
0673 C04D 5A                        DECB
687
0674 C04E 26 F5                     BNE  LOAD3  Loop until count = 0
688
0675 C050 20 C9                     BRA  LOAD1
689
0676                         *
690
0677                         * Get Character routine
691
0678                         * Reads a sector if needed
692
0679                         *
693
0680 C052 10 8C C4 00        GETCH  CMPY #SCTBUF+256 out of data ?
694
0681 C056 26 0F                     BNE  GETCH4      Go read Character if not
695
0682 C058 8E C3 00           GETCH2 LDX  #SCTBUF     Point to buffer
696
0683 C05B EC 84                     LDD  0,X         Get forward Link
697
0684 C05D 27 0B                     BEQ  GO          if zero, file is loaded
698
0685 C05F 8D 21                     BSR  READ        Read next sector
699
0686 C061 26 9D                     BNE  BOOT        start over if error
700
0687 C063 10 8E C3 04               LDY  #SCTBUF+4   Point past link
701
0688 C067 A6 A0              GETCH4 LDA  ,Y+         Else, get a character
702
0689 C069 39                        RTS
703
0690                         *
704
0691                         * File is loaded, Jump to it
705
0692                         *
706
0693 C06A 6E 9F C0 08        GO     JMP  [TADR]      Jump to transfer address
707
0694
708
0695                         *
709
0696                         ** FLEX 9 COMPACT FLASH DISK DRIVERS
710
0697                         *
711
0698                         * FOR SYS09BUG 1.2 ON THE BURCHED B5-X300
712
0699                         * WITH I/O MAPPED AT $XE000
713
0700                         * AND ROM MAPPED AT $XF000
714
0701                         * THE BURCHED B5-X300 HAS 256KBYTES OF SRAM
715
0702                         * THE FIRST 64K IS USED BY FLEX,
716
0703                         * THE SECOND 192K MAY BE USED AS A RAM DISK
717
0704                         *
718
0705                         *
719
0706                         *IMASK  EQU $10     IRQ MASK CC
720
0707                         *FMASK  EQU $40     FIRQ MASK CC
721
0708                         *DATREG EQU $FFF0   DAT REGISTERS
722
0709                         *
723
0710                         *CF_BASE    EQU $E040
724
0711                         *CF_DATA    EQU CF_BASE+0
725
0712                         *CF_ERROR   EQU CF_BASE+1 ; read error
726
0713                         *CF_FEATURE EQU CF_BASE+1 ; write feature
727
0714                         *CF_SCNT  EQU CF_BASE+2
728
0715                         *CF_SNUM  EQU CF_BASE+3
729
0716                         *CF_CLO   EQU CF_BASE+4
730
0717                         *CF_CHI   EQU CF_BASE+5
731
0718                         *CF_HEAD    EQU CF_BASE+6
732
0719                         *CF_STATUS  EQU CF_BASE+7 ; read status
733
0720                         *CF_COMAND  EQU CF_BASE+7 ; write command
734
0721                         *
735
0722                         * Command Equates
736
0723                         *
737
0724                         *CMDREAD    EQU $20 ; Read Single sector
738
0725                         *CMDWRITE   EQU $30 ; Write Single sector
739
0726                         *CMDFEATURE EQU $EF
740
0727                         *FEAT8BIT   EQU $01 ; enable 8 bit transfers
741
0728                         *HEADLBA    EQU $E0
742
0729                         *
743
0730                         * Status bit equates
744
0731                         *
745
0732                         *BSY        EQU $80
746
0733                         *DRDY       EQU $40
747
0734                         *DRQ        EQU $08
748
0735                         *ERR        EQU $01
749
0736                         *
750
0737                         * Seek track and sector
751
0738                         * A holds track number (0 - ??)
752
0739                         * B holds sector number (1 - ??)
753
0740                         * Sector numbers starts from 1
754
0741                         * subtract 1 to start from sector 0 on CF
755
0742                         *
756
0743 C06E 5A                 SEEK   DECB
757
0744 C06F F7 E0 43                  STB  CF_SNUM
758
0745 C072 B7 E0 44                  STA  CF_CLO
759
0746 C075 F6 C0 0C                  LDB  DRNUM
760
0747 C078 F7 E0 45                  STB  CF_CHI
761
0748 C07B C6 01                     LDB  #$01
762
0749 C07D F7 E0 42                  STB  CF_SCNT
763
0750 C080 5F                        CLRB
764
0751 C081 39                        RTS
765
0752                         *
766
0753                         * READ SECTORS FROM CF
767
0754                         *
768
0755                         *
769
0756 C082 8D EA              READ   BSR  SEEK
770
0757 C084 86 20                     LDA  #CMDREAD ; IDE READ MULTIPLE
771
0758 C086 B7 E0 47                  STA  CF_COMAND
772
0759 C089 8D 18                     BSR  WTRDY
773
0760                         *
774
0761                         * READ LOOP
775
0762                         *
776
0763 C08B 5F                        CLRB
777
0764 C08C 8D 24              READ1  BSR  WTDRQ
778
0765 C08E B6 E0 40                  LDA  CF_DATA
779
0766 C091 A7 80                     STA  ,X+
780
0767 C093 5A                        DECB
781
0768 C094 26 F6                     BNE  READ1
782
0769                         *
783
0770 C096 5F                        CLRB
784
0771 C097 8D 19              READ2  BSR  WTDRQ
785
0772 C099 B6 E0 40                  LDA  CF_DATA
786
0773 C09C 5A                        DECB
787
0774 C09D 26 F8                     BNE  READ2
788
0775                         *
789
0776 C09F 8D 02                     BSR  WTRDY
790
0777 C0A1 5F                        CLRB
791
0778 C0A2 39                        RTS
792
0779                         *
793
0780                         * WAIT UNTIL READY
794
0781                         *
795
0782 C0A3 B6 E0 47           WTRDY   LDA  CF_STATUS
796
0783 C0A6 85 80                      BITA #BSY
797
0784 C0A8 26 F9                      BNE  WTRDY
798
0785 C0AA B6 E0 47                   LDA  CF_STATUS
799
0786 C0AD 85 40                      BITA #DRDY
800
0787 C0AF 27 F2                      BEQ  WTRDY
801
0788 C0B1 39                         RTS
802
0789                         *
803
0790                         * WAIT FOR DATA REQUEST
804
0791                         *
805
0792 C0B2 B6 E0 47           WTDRQ   LDA  CF_STATUS
806
0793 C0B5 85 08                      BITA #DRQ
807
0794 C0B7 27 F9                      BEQ  WTDRQ
808
0795 C0B9 39                         RTS
809
0796                         *
810
0797                                END START
811
Program + Init Data = 1064 bytes
812
Error count = 0

powered by: WebSVN 2.1.0

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