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

Subversion Repositories System09

[/] [System09/] [tags/] [pre_mkfiles_rev1_merge/] [src/] [fmt/] [fmt_cf8.lst] - Blame information for rev 201

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                         ** FLEX 9 COMPACT FLASH FORMAT PROGRAM
5
0003                         *
6
0004                         * FOR B5-X300 and CF with 8 Bit Transfer interface
7
0005                         *
8
0006                         *
9
0007 0001                    CFLAG   EQU $01     CARRY FLAG
10
0008 0002                    VFLAG   EQU $02     OVERFLOW FLAG
11
0009 0004                    ZFLAG   EQU $04     ZERO FLAG
12
0010 0008                    NFLAG   EQU $08     NEGATIVE FLAG
13
0011 0010                    IFLAG   EQU $10     IRQ MASK CC
14
0012 0020                    HFLAG   EQU $20     HALF CARRY
15
0013 0040                    FFLAG   EQU $40     FIRQ MASK CC
16
0014 0080                    EFLAG   EQU $80     ENTIRE FLAG
17
0015                         *
18
0016 0000                    MAPPAG  EQU $00     PAGE $0000 DAT ADDRESS
19
0017                         *
20
0018                         * Serial Port
21
0019                         *
22
0020 E000                    ACIAS   EQU $E000
23
0021 E000                    ACIAC1  EQU ACIAS
24
0022 E001                    ACIAD1  EQU ACIAS+1
25
0023 04E2                    DELCON  EQU 1250    Delay (Processor clock in MHz * 50)
26
0024                         *
27
0025                         * XMODEM Control characters
28
0026                         *
29
0027 0001                    SOH     EQU $01
30
0028 0004                    EOT     EQU $04
31
0029 0006                    ACK     EQU $06
32
0030 0015                    NAK     EQU $15
33
0031 0018                    CAN     EQU $18
34
0032                         *
35
0033                         * Some dummy Constants
36
0034                         *
37
0035 0040                    RMAXTRK EQU 64
38
0036 00FF                    RMAXSEC EQU 255
39
0037 3EC1                    RTOTSEC EQU RMAXTRK*RMAXSEC-RMAXSEC
40
0038                         *
41
0039                         * Start
42
0040                         *
43
0041 0100                            ORG $0100
44
0042 0100 17 02 9E           START   LBSR  UFSUB
45
0043 0103 6E 9F F8 00                JMP  [$F800]  Jump to monitor on Completion.
46
0044                         *
47
0045                         *
48
0046                         * RAM SPACE
49
0047                         *
50
0048 0107 00                 DRVNUM  FCB  0
51
0049 0108 00                 TRACK   FCB  0
52
0050 0109 00                 SECTOR  FCB  0
53
0051 010A 00                 CHKSUM  FCB  0
54
0052 010B 00                 BLKNUM  FCB  0 Xmodem block number
55
0053 010C 00                 BYTCNT  FCB  0 Xmodem byte count
56
0054 010D 00 00              XSTATE  FDB  0 Xmodem State Vector
57
0055 010F 00 00 00           DELCNT  FCB  $00,$00,$00 Xmodem Poll timer
58
0056 0112 00                 MAXTRK  FCB  0
59
0057 0113 00                 MAXSEC  FCB  0
60
0058 0200                            ORG  $0200
61
0059                         *
62
0060                         * SECTOR BUFFER
63
0061                         *
64
0062 0200                    BUFFER  RMB  256
65
0063                         *
66
0064                         *
67
0065                         * recieve char from remote drive.
68
0066                         * timeout if no response for approx 1s.
69
0067                         * Entry: no parameters
70
0068                         * Exit:  (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout.
71
0069                         *
72
0070 0300 34 30              RCHAR   PSHS    X,Y
73
0071                         *
74
0072 0302 8E 03 E8                   LDX     #1000         1000x inner loop
75
0073 0305 10 8E 04 E2        RCHAR1  LDY     #DELCON       delay constant for inner loop (approx 1ms).
76
0074 0309 B6 E0 00           RCHAR2  LDA     ACIAC1        test for recieved char
77
0075 030C 47                         ASRA
78
0076 030D 25 0A                      BCS     RCHAR3        get character
79
0077 030F 31 3F                      LEAY    -1,Y          else, continue to count delay
80
0078 0311 26 F6                      BNE     RCHAR2
81
0079 0313 30 1F                      LEAX    -1,X
82
0080 0315 26 EE                      BNE     RCHAR1
83
0081 0317 35 B0                      PULS    X,Y,PC        return with error if timed out
84
0082                         *
85
0083 0319 B6 E0 01           RCHAR3  LDA     ACIAD1        return data (carry bit still set)
86
0084 031C 35 B0                      PULS    X,Y,PC
87
0085                         *
88
0086                         *
89
0087                         * transmit char to remote drive.
90
0088                         * timeout if no response for approx 1s. (allows for use of hardware flow control)
91
0089                         * Entry: (A) = char to transmit
92
0090                         * Exit:  (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout.
93
0091                         *
94
0092 031E 34 30              SCHAR   PSHS    X,Y
95
0093 0320 34 02                      PSHS    A
96
0094                         *
97
0095 0322 8E 03 E8                   LDX     #1000         1000x inner loop
98
0096 0325 10 8E 04 E2        SCHAR1  LDY     #DELCON       delay constant for inner loop (approx 1ms).
99
0097 0329 B6 E0 00           SCHAR2  LDA     ACIAC1        test for space in transmit FIFO
100
0098 032C 47                         ASRA
101
0099 032D 47                         ASRA
102
0100 032E 25 0C                      BCS     SCHAR3        send character
103
0101 0330 31 3F                      LEAY    -1,Y          else, continue to count delay
104
0102 0332 26 F5                      BNE     SCHAR2
105
0103 0334 30 1F                      LEAX    -1,X
106
0104 0336 26 ED                      BNE     SCHAR1
107
0105 0338 35 02                      PULS    A
108
0106 033A 35 B0                      PULS    X,Y,PC        return with error if timed out
109
0107                         *
110
0108 033C 35 02              SCHAR3  PULS    A
111
0109 033E B7 E0 01                   STA     ACIAD1        send data (carry bit still set)
112
0110 0341 35 B0                      PULS    X,Y,PC
113
0111                         *
114
0112                         * Print Data
115
0113                         *
116
0114 0343 8D D9              PDATA0  BSR  SCHAR
117
0115 0345 A6 80              PDATA1  LDA  ,X+
118
0116 0347 81 04                      CMPA #$04
119
0117 0349 26 F8                      BNE  PDATA0
120
0118 034B 39                         RTS
121
0119                         *
122
0120                         ** 'UF' Format RAMdisc to FLEX standard.
123
0121                         *
124
0122 034C 0A 0D              DISFOS  FCB $0A,$0D
125
0123 034E 46 6F 72 6D 61 74          FCC 'Formating RAMdisk... '
126
          69 6E 67 20 52 41
127
          4D 64 69 73 6B 2E
128
          2E 2E 20
129
0124 0363 0A 0D                      FCB $0A,$0D
130
0125 0365 44 72 69 76 65 20          FCC 'Drive Number ?'
131
          4E 75 6D 62 65 72
132
          20 3F
133
0126 0373 04                         FCB 4
134
0127 0374 0A 0D 04           MESS6   FCB $0A,$0D,4
135
0128 0377 52 61 6D 64 69 73          FCC 'Ramdisk not allocated! '
136
          6B 20 6E 6F 74 20
137
          61 6C 6C 6F 63 61
138
          74 65 64 21 20
139
0129 038E 04                    FCB 4
140
0130 038F 0A 0D              UFMSG1  FCB $0A,$0D
141
0131 0391 46 6F 72 6D 61 74          FCC 'Format Complete'
142
          20 43 6F 6D 70 6C
143
          65 74 65
144
0132 03A0 04                         FCB 4
145
0133                         *
146
0134 03A1 BD 04 B1           UFSUB   JSR  INITDR
147
0135 03A4 8E 03 4C                   LDX #DISFOS
148
0136 03A7 BD 03 45                   JSR PDATA1
149
0137 03AA 17 FF 53           UFSUB1  LBSR RCHAR
150
0138 03AD 24 FB                      BCC  UFSUB1
151
0139 03AF 17 FF 6C                   LBSR SCHAR
152
0140 03B2 81 30                      CMPA #'0'
153
0141 03B4 10 25 00 F3                LBLO UFEXIT
154
0142 03B8 81 33                      CMPA #'3'
155
0143 03BA 10 22 00 ED                LBHI  UFEXIT
156
0144 03BE 80 30                      SUBA #'0'
157
0145 03C0 1F 89                      TFR  A,B
158
0146 03C2 F7 01 07                   STB DRVNUM
159
0147 03C5 8E 01 04                   LDX #DRVNUM-3
160
0148 03C8 BD 05 22                   JSR DRVSEL
161
0149                         *
162
0150                         * set up free chain
163
0151                         *
164
0152 03CB 8E 02 00                   LDX #BUFFER clear out buffer
165
0153 03CE 4F                         CLRA
166
0154 03CF 5F                         CLRB
167
0155 03D0 A7 80              DFL1    STA 0,X+
168
0156 03D2 5A                         DECB
169
0157 03D3 26 FB                      BNE DFL1
170
0158                         *
171
0159 03D5 7F 01 08                   CLR TRACK
172
0160 03D8 86 01                      LDA #1
173
0161 03DA B7 01 09                   STA SECTOR
174
0162 03DD 8E 02 00           DFL2    LDX #BUFFER
175
0163 03E0 B6 01 08                   LDA TRACK
176
0164 03E3 A7 84                      STA 0,X
177
0165 03E5 B6 01 09                   LDA SECTOR
178
0166 03E8 4C                         INCA
179
0167 03E9 81 00                      CMPA #RMAXSEC+1 last sector on track?
180
0168 03EB 26 04                      BNE DFL3
181
0169 03ED 6C 84                      INC 0,X
182
0170 03EF 86 01                      LDA #1
183
0171 03F1 A7 01              DFL3    STA 1,X
184
0172 03F3 B6 01 08                   LDA TRACK
185
0173 03F6 F6 01 09                   LDB SECTOR
186
0174 03F9 BD 04 FE                   JSR WRITSC
187
0175 03FC 7C 01 09                   INC SECTOR
188
0176 03FF B6 01 09                   LDA SECTOR
189
0177 0402 81 00                      CMPA #RMAXSEC+1
190
0178 0404 26 D7                      BNE DFL2
191
0179 0406 86 01                      LDA #1
192
0180 0408 B7 01 09                   STA  SECTOR
193
0181 040B 7C 01 08                   INC TRACK
194
0182 040E B6 01 08                   LDA TRACK
195
0183 0411 81 40                      CMPA #RMAXTRK
196
0184 0413 26 C8                      BNE DFL2
197
0185                         * break free chain at last track/sector
198
0186 0415 8E 02 00                   LDX  #BUFFER
199
0187 0418 86 3F                      LDA  #RMAXTRK-1
200
0188 041A C6 FF                      LDB  #RMAXSEC
201
0189 041C BD 04 DD                   JSR  READSC
202
0190 041F 8E 02 00                   LDX  #BUFFER
203
0191 0422 6F 84                      CLR  0,X
204
0192 0424 6F 01                      CLR  1,X
205
0193 0426 86 3F                      LDA  #RMAXTRK-1
206
0194 0428 C6 FF                      LDB  #RMAXSEC
207
0195 042A BD 04 FE                   JSR  WRITSC
208
0196                         * set up sector structure, SIR, directory etc
209
0197 042D 8E 02 00                   LDX  #BUFFER
210
0198 0430 4F                         CLRA
211
0199 0431 C6 FF                      LDB  #RMAXSEC
212
0200 0433 BD 04 DD                   JSR  READSC
213
0201 0436 8E 02 00                   LDX  #BUFFER
214
0202 0439 6F 84                      CLR  0,X break end of directory chain
215
0203 043B 6F 01                      CLR  1,X
216
0204 043D 4F                         CLRA
217
0205 043E C6 FF                      LDB  #RMAXSEC
218
0206 0440 BD 04 FE                   JSR  WRITSC
219
0207                         *
220
0208 0443 8E 02 00                   LDX  #BUFFER
221
0209 0446 4F                         CLRA
222
0210 0447 C6 03                      LDB  #3 set up SIR
223
0211 0449 BD 04 DD                   JSR  READSC
224
0212 044C 8E 02 00                   LDX  #BUFFER
225
0213 044F 6F 84                      CLR  0,X break forward link
226
0214 0451 6F 01                      CLR  1,X
227
0215 0453 CC 52 41                   LDD  #$5241 set volume name (RAMDISK )
228
0216 0456 ED 88 10                   STD  16,X
229
0217 0459 CC 4D 44                   LDD  #$4D44
230
0218 045C ED 88 12                   STD  18,X
231
0219 045F CC 49 53                   LDD  #$4953
232
0220 0462 ED 88 14                   STD  20,X
233
0221 0465 CC 4B 20                   LDD  #$4B20
234
0222 0468 ED 88 16                   STD  22,X
235
0223 046B CC 00 01                   LDD  #1 volume number
236
0224 046E ED 88 1B                   STD  27,X
237
0225 0471 CC 01 01                   LDD  #$0101 first trk/sec  01-01
238
0226 0474 ED 88 1D                   STD  29,X
239
0227 0477 86 3F                      LDA  #RMAXTRK-1
240
0228 0479 C6 FF                      LDB  #RMAXSEC
241
0229 047B ED 88 1F                   STD  31,X
242
0230 047E ED 88 26                   STD  38,X
243
0231 0481 CC 3E C1                   LDD  #RTOTSEC total DATA sectors (2912-14)
244
0232 0484 ED 88 21                   STD  33,X
245
0233                         *
246
0234 0487 86 01                      LDA #01 month   set default creation date (SYS09's birthday!)
247
0235 0489 A7 88 23                   STA 35,X
248
0236 048C 86 07                      LDA #07 day
249
0237 048E A7 88 24                   STA 36,X
250
0238 0491 86 07                      LDA #07 year
251
0239 0493 A7 88 25                   STA 37,X
252
0240                         *
253
0241 0496 4F                 RF3     CLRA
254
0242 0497 C6 03                      LDB  #3
255
0243 0499 BD 04 FE                   JSR  WRITSC
256
0244                         *
257
0245                         *        LDX #BUFFER
258
0246                         *        CLRA
259
0247                         *        LDB #1
260
0248                         *        JSR READSC
261
0249                         *        LDX #BUFFER
262
0250                         *        LDA #$AA set the init flag
263
0251                         *        STA 0,X
264
0252                         *        LDA  #$55
265
0253                         *        STA 1,X
266
0254                         *        CLRA
267
0255                         *        LDB #1
268
0256                         *        JSR WRITSC
269
0257                         *
270
0258                         *  Write Boot sector
271
0259                         *
272
0260 049C 8E C0 00                   LDX  #$C000
273
0261 049F 4F                         CLRA         TRACK 0
274
0262 04A0 C6 01                      LDB  #$01    SECTOR 1
275
0263 04A2 B7 01 08                   STA  TRACK
276
0264 04A5 F7 01 09                   STB  SECTOR
277
0265 04A8 17 00 53                   LBSR WRITSC
278
0266                         *
279
0267 04AB 8E 03 8F           UFEXIT  LDX #UFMSG1
280
0268 04AE 7E 03 45                   JMP PDATA1
281
0269                         *
282
0270                         *
283
0271                         ** FLEX 9 COMPACT FLASH DISK DRIVERS
284
0272                         *
285
0273                         * FOR SYS09BUG 1.2 ON THE BURCHED B5-X300
286
0274                         * WITH I/O MAPPED AT $XE000
287
0275                         * AND ROM MAPPED AT $XF000
288
0276                         * THE BURCHED B5-X300 HAS 256KBYTES OF SRAM
289
0277                         * THE FIRST 64K IS USED BY FLEX,
290
0278                         * THE SECOND 192K MAY BE USED AS A RAM DISK
291
0279                         *
292
0280                         *
293
0281 0010                    IMASK  EQU $10     IRQ MASK CC
294
0282 0040                    FMASK  EQU $40     FIRQ MASK CC
295
0283 FFF0                    DATREG EQU $FFF0   DAT REGISTERS
296
0284                         *
297
0285 E040                    CF_BASE    EQU $E040
298
0286 E040                    CF_DATA    EQU CF_BASE+0
299
0287 E041                    CF_ERROR   EQU CF_BASE+1 ; read error
300
0288 E041                    CF_FEATURE EQU CF_BASE+1 ; write feature
301
0289 E042                    CF_SCNT    EQU CF_BASE+2
302
0290 E043                    CF_SNUM    EQU CF_BASE+3
303
0291 E044                    CF_CLO     EQU CF_BASE+4
304
0292 E045                    CF_CHI     EQU CF_BASE+5
305
0293 E046                    CF_HEAD    EQU CF_BASE+6
306
0294 E047                    CF_STATUS  EQU CF_BASE+7 ; read status
307
0295 E047                    CF_COMAND  EQU CF_BASE+7 ; write command
308
0296                         *
309
0297                         * Command Equates
310
0298                         *
311
0299 0020                    CMDREAD    EQU $20 ; Read Single sector
312
0300 0030                    CMDWRITE   EQU $30 ; Write Single sector
313
0301 00EF                    CMDFEATURE EQU $EF
314
0302 0001                    FEAT8BIT   EQU $01 ; enable 8 bit transfers
315
0303 00E0                    HEADLBA    EQU $E0
316
0304                         *
317
0305                         * Status bit equates
318
0306                         *
319
0307 0080                    BSY        EQU $80
320
0308 0040                    DRDY       EQU $40
321
0309 0008                    DRQ        EQU $08
322
0310 0001                    ERR        EQU $01
323
0311                         *
324
0312                         *
325
0313                         * INITIALIZE CF CARD FOR 8 BIT LBA MODE
326
0314                         *
327
0315 04B1 8D 7F              INITDR BSR WAITRDY
328
0316 04B3 86 E0                     LDA  #HEADLBA
329
0317 04B5 B7 E0 46                  STA  CF_HEAD
330
0318 04B8 86 01                     LDA #FEAT8BIT
331
0319 04BA B7 E0 41                  STA CF_FEATURE
332
0320 04BD 86 EF                     LDA #CMDFEATURE
333
0321 04BF B7 E0 47                  STA CF_COMAND
334
0322 04C2 20 6E                     BRA WAITRDY
335
0323                         *
336
0324                         * RESTORE DISK DRIVER (SEEK TRACK 00)
337
0325                         *
338
0326 04C4 8D 5C              RESTR1 BSR   DRVSEL
339
0327 04C6 4F                        CLRA           ; Track 0
340
0328 04C7 C6 01                     LDB   #$01     ; Sector 1
341
0329                         *
342
0330                         * Seek track and sector
343
0331                         * A holds track number (0 - ??)
344
0332                         * B holds sector number (1 - ??)
345
0333                         * Sector numbers starts from 1
346
0334                         * subtract 1 to start from sector 0 on CF
347
0335                         *
348
0336 04C9 5A                 SEEKTS DECB
349
0337 04CA F7 E0 43                  STB  CF_SNUM
350
0338 04CD B7 E0 44                  STA  CF_CLO
351
0339 04D0 F6 01 07                  LDB  DRVNUM
352
0340 04D3 F7 E0 45                  STB  CF_CHI
353
0341 04D6 C6 01                     LDB  #$01
354
0342 04D8 F7 E0 42                  STB  CF_SCNT
355
0343 04DB 5F                        CLRB
356
0344 04DC 39                        RTS
357
0345                         *
358
0346                         * READ SECTORS FROM CF
359
0347                         *
360
0348                         *
361
0349 04DD 8D EA              READSC BSR  SEEKTS
362
0350 04DF 86 20                     LDA  #CMDREAD ; IDE READ MULTIPLE
363
0351 04E1 B7 E0 47                  STA  CF_COMAND
364
0352 04E4 8D 4C                     BSR  WAITRDY
365
0353                         *
366
0354                         * READ LOOP
367
0355                         *
368
0356 04E6 5F                        CLRB
369
0357 04E7 8D 58              RDLP1  BSR  WAITDRQ
370
0358 04E9 B6 E0 40                  LDA  CF_DATA
371
0359 04EC A7 80                     STA  ,X+
372
0360 04EE 5A                        DECB
373
0361 04EF 26 F6                     BNE  RDLP1
374
0362                         *
375
0363 04F1 5F                        CLRB
376
0364 04F2 8D 4D              RDLP2  BSR  WAITDRQ
377
0365 04F4 B6 E0 40                  LDA  CF_DATA
378
0366 04F7 5A                        DECB
379
0367 04F8 26 F8                     BNE  RDLP2
380
0368                         *
381
0369 04FA 8D 36                     BSR  WAITRDY
382
0370 04FC 5F                        CLRB
383
0371 04FD 39                        RTS
384
0372                         *
385
0373                         * WRITE SECTOR TO CF
386
0374                         *
387
0375 04FE 8D C9              WRITSC BSR  SEEKTS   ; SEEK TRACK & SECTOR
388
0376 0500 86 30                     LDA  #CMDWRITE ; IDE WRITE MULTIPLE
389
0377 0502 B7 E0 47                  STA  CF_COMAND
390
0378 0505 8D 2B                     BSR  WAITRDY
391
0379                         *
392
0380                         * WRITE LOOP
393
0381                         *
394
0382 0507 5F                        CLRB
395
0383 0508 8D 37              WRTLP1 BSR  WAITDRQ
396
0384 050A A6 80                     LDA  ,X+
397
0385 050C B7 E0 40                  STA  CF_DATA
398
0386 050F 5A                        DECB
399
0387 0510 26 F6                     BNE  WRTLP1
400
0388                         *
401
0389 0512 5F                        CLRB
402
0390 0513 8D 2C              WRTLP2 BSR  WAITDRQ
403
0391 0515 4F                        CLRA
404
0392 0516 B7 E0 40                  STA  CF_DATA
405
0393 0519 5A                        DECB
406
0394 051A 26 F7                     BNE WRTLP2
407
0395                         *
408
0396 051C 8D 14                     BSR  WAITRDY
409
0397 051E 5F                        CLRB
410
0398 051F 39                        RTS
411
0399                         *
412
0400                         * CHECK FOR BUSY
413
0401                         * Doubles as VERIFY
414
0402                         *
415
0403 0520 5F                 BUSY   CLRB            Never busy
416
0404 0521 39                        RTS
417
0405                         *
418
0406                         * DRIVE SELECT DISK DRIVER
419
0407                         *
420
0408 0522 A6 03              DRVSEL LDA   3,X       GET DRIVE # FROM FCB
421
0409 0524 81 03                     CMPA  #3
422
0410 0526 23 01                     BLS   DRVS2     IF > 3, SET IT TO 0
423
0411 0528 4F                        CLRA
424
0412 0529 B7 01 07           DRVS2  STA   DRVNUM
425
0413 052C 5F                        CLRB            ; SET Z, CLEAR C
426
0414 052D 39                        RTS
427
0415                         *
428
0416                         * CHECK DRIVE READY DISK DRIVER
429
0417                         *
430
0418 052E A6 03              CHKDRV LDA  3,X
431
0419 0530 5F                        CLRB             ; CLEAR C, SET Z
432
0420 0531 39                        RTS
433
0421                         *
434
0422                         * WAIT UNTIL READY
435
0423                         *
436
0424 0532 B6 E0 47           WAITRDY LDA  CF_STATUS
437
0425 0535 85 80                      BITA #BSY
438
0426 0537 26 F9                      BNE  WAITRDY
439
0427 0539 B6 E0 47                   LDA  CF_STATUS
440
0428 053C 85 40                      BITA #DRDY
441
0429 053E 27 F2                      BEQ  WAITRDY
442
0430 0540 39                         RTS
443
0431                         *
444
0432                         * WAIT FOR DATA REQUEST
445
0433                         *
446
0434 0541 B6 E0 47           WAITDRQ LDA  CF_STATUS
447
0435 0544 85 08                      BITA #DRQ
448
0436 0546 27 F9                      BEQ  WAITDRQ
449
0437 0548 39                         RTS
450
0438                         *
451
0439                         *******************************************************
452
0440                         *
453
0441                         * Bootstrap FLEX Loader
454
0442                         *
455
0443                         * SBUG1.8 loads the bootstap loader at $C000
456
0444                         * however the Flex adaption manual has the
457
0445                         * bootstrap loader residing at $C100
458
0446                         *
459
0447                         ******************************************************
460
0448                         *
461
0449                         * Equates
462
0450                         *
463
0451 C0FF                    STACK   EQU $C0FF
464
0452 C300                    SCTBUF  EQU $C300
465
0453                         *
466
0454                         * Start of Utility
467
0455                         *
468
0456 C000                            ORG $C000
469
0457 C000 20 0B              BOOT    BRA LOAD0
470
0458 C002 00 00 00                   FCB 0,0,0
471
0459 C005 00                 TRK     FCB 0        File start track
472
0460 C006 00                 SCT     FCB 0        File start sector
473
0461 C007 00                 DNS     FCB 0        Density Flag (not used)
474
0462 C008 C0 00              TADR    FDB $C000    Transfer address
475
0463 C00A 00 00              LADR    FDB 0        Load Address
476
0464 C00C 00                 DRNUM   FCB 0        Drive number 0
477
0465                         *
478
0466 C00D 10 CE C0 FF        LOAD0   LDS  #STACK   Set up stack
479
0467 C011 FC C0 05                   LDD  TRK      Set up start track and sector
480
0468 C014 FD C3 00                   STD  SCTBUF
481
0469 C017 10 8E C4 00                LDY  #SCTBUF+256
482
0470                         *
483
0471                         * Perform actual file load
484
0472                         *
485
0473 C01B 8D 35              LOAD1   BSR GETCH    Get acharcater
486
0474 C01D 81 02                      CMPA #$02    Data record hearder ?
487
0475 C01F 27 10                      BEQ  LOAD2   Skip, is so
488
0476 C021 81 16                      CMPA #$16    Xfr address hearder ?
489
0477 C023 26 F6                      BNE LOAD1    Loop if neither
490
0478                         *
491
0479                         * Get transfer address
492
0480                         *
493
0481 C025 8D 2B                      BSR  GETCH
494
0482 C027 B7 C0 08                   STA  TADR
495
0483 C02A 8D 26                      BSR  GETCH
496
0484 C02C B7 C0 09                   STA  TADR+1
497
0485 C02F 20 EA                      BRA  LOAD1
498
0486                         *
499
0487                         * Load data record
500
0488                         *
501
0489 C031 8D 1F              LOAD2  BSR  GETCH  Get load address
502
0490 C033 B7 C0 0A                  STA  LADR
503
0491 C036 8D 1A                     BSR  GETCH
504
0492 C038 B7 C0 0B                  STA  LADR+1
505
0493 C03B 8D 15                     BSR  GETCH  Get Bytes count
506
0494 C03D 1F 89                     TFR  A,B
507
0495 C03F 5D                        TSTB
508
0496 C040 27 D9                     BEQ  LOAD1 Loop if count = 0
509
0497 C042 BE C0 0A                  LDX  LADR  Get load address
510
0498 C045 34 14              LOAD3  PSHS B,X
511
0499 C047 8D 09                     BSR  GETCH  Get data character
512
0500 C049 35 14                     PULS B,X
513
0501 C04B A7 80                     STA  ,X+    Store at load address
514
0502 C04D 5A                        DECB
515
0503 C04E 26 F5                     BNE  LOAD3  Loop until count = 0
516
0504 C050 20 C9                     BRA  LOAD1
517
0505                         *
518
0506                         * Get Character routine
519
0507                         * Reads a sector if needed
520
0508                         *
521
0509 C052 10 8C C4 00        GETCH  CMPY #SCTBUF+256 out of data ?
522
0510 C056 26 0F                     BNE  GETCH4      Go read Character if not
523
0511 C058 8E C3 00           GETCH2 LDX  #SCTBUF     Point to buffer
524
0512 C05B EC 84                     LDD  0,X         Get forward Link
525
0513 C05D 27 0B                     BEQ  GO          if zero, file is loaded
526
0514 C05F 8D 21                     BSR  READ        Read next sector
527
0515 C061 26 9D                     BNE  BOOT        start over if error
528
0516 C063 10 8E C3 04               LDY  #SCTBUF+4   Point past link
529
0517 C067 A6 A0              GETCH4 LDA  ,Y+         Else, get a character
530
0518 C069 39                        RTS
531
0519                         *
532
0520                         * File is loaded, Jump to it
533
0521                         *
534
0522 C06A 6E 9F C0 08        GO     JMP  [TADR]      Jump to transfer address
535
0523
536
0524                         *
537
0525                         ** FLEX 9 COMPACT FLASH DISK DRIVERS
538
0526                         *
539
0527                         * FOR SYS09BUG 1.2 ON THE BURCHED B5-X300
540
0528                         * WITH I/O MAPPED AT $XE000
541
0529                         * AND ROM MAPPED AT $XF000
542
0530                         * THE BURCHED B5-X300 HAS 256KBYTES OF SRAM
543
0531                         * THE FIRST 64K IS USED BY FLEX,
544
0532                         * THE SECOND 192K MAY BE USED AS A RAM DISK
545
0533                         *
546
0534                         *
547
0535                         *IMASK  EQU $10     IRQ MASK CC
548
0536                         *FMASK  EQU $40     FIRQ MASK CC
549
0537                         *DATREG EQU $FFF0   DAT REGISTERS
550
0538                         *
551
0539                         *CF_BASE    EQU $E040
552
0540                         *CF_DATA    EQU CF_BASE+0
553
0541                         *CF_ERROR   EQU CF_BASE+1 ; read error
554
0542                         *CF_FEATURE EQU CF_BASE+1 ; write feature
555
0543                         *CF_SCNT  EQU CF_BASE+2
556
0544                         *CF_SNUM  EQU CF_BASE+3
557
0545                         *CF_CLO   EQU CF_BASE+4
558
0546                         *CF_CHI   EQU CF_BASE+5
559
0547                         *CF_HEAD    EQU CF_BASE+6
560
0548                         *CF_STATUS  EQU CF_BASE+7 ; read status
561
0549                         *CF_COMAND  EQU CF_BASE+7 ; write command
562
0550                         *
563
0551                         * Command Equates
564
0552                         *
565
0553                         *CMDREAD    EQU $20 ; Read Single sector
566
0554                         *CMDWRITE   EQU $30 ; Write Single sector
567
0555                         *CMDFEATURE EQU $EF
568
0556                         *FEAT8BIT   EQU $01 ; enable 8 bit transfers
569
0557                         *HEADLBA    EQU $E0
570
0558                         *
571
0559                         * Status bit equates
572
0560                         *
573
0561                         *BSY        EQU $80
574
0562                         *DRDY       EQU $40
575
0563                         *DRQ        EQU $08
576
0564                         *ERR        EQU $01
577
0565                         *
578
0566                         * Seek track and sector
579
0567                         * A holds track number (0 - ??)
580
0568                         * B holds sector number (1 - ??)
581
0569                         * Sector numbers starts from 1
582
0570                         * subtract 1 to start from sector 0 on CF
583
0571                         *
584
0572 C06E 5A                 SEEK   DECB
585
0573 C06F F7 E0 43                  STB  CF_SNUM
586
0574 C072 B7 E0 44                  STA  CF_CLO
587
0575 C075 F6 C0 0C                  LDB  DRNUM
588
0576 C078 F7 E0 45                  STB  CF_CHI
589
0577 C07B C6 01                     LDB  #$01
590
0578 C07D F7 E0 42                  STB  CF_SCNT
591
0579 C080 5F                        CLRB
592
0580 C081 39                        RTS
593
0581                         *
594
0582                         * READ SECTORS FROM CF
595
0583                         *
596
0584                         *
597
0585 C082 8D EA              READ   BSR  SEEK
598
0586 C084 86 20                     LDA  #CMDREAD ; IDE READ MULTIPLE
599
0587 C086 B7 E0 47                  STA  CF_COMAND
600
0588 C089 8D 18                     BSR  WTRDY
601
0589                         *
602
0590                         * READ LOOP
603
0591                         *
604
0592 C08B 5F                        CLRB
605
0593 C08C 8D 24              READ1  BSR  WTDRQ
606
0594 C08E B6 E0 40                  LDA  CF_DATA
607
0595 C091 A7 80                     STA  ,X+
608
0596 C093 5A                        DECB
609
0597 C094 26 F6                     BNE  READ1
610
0598                         *
611
0599 C096 5F                        CLRB
612
0600 C097 8D 19              READ2  BSR  WTDRQ
613
0601 C099 B6 E0 40                  LDA  CF_DATA
614
0602 C09C 5A                        DECB
615
0603 C09D 26 F8                     BNE  READ2
616
0604                         *
617
0605 C09F 8D 02                     BSR  WTRDY
618
0606 C0A1 5F                        CLRB
619
0607 C0A2 39                        RTS
620
0608                         *
621
0609                         * WAIT UNTIL READY
622
0610                         *
623
0611 C0A3 B6 E0 47           WTRDY   LDA  CF_STATUS
624
0612 C0A6 85 80                      BITA #BSY
625
0613 C0A8 26 F9                      BNE  WTRDY
626
0614 C0AA B6 E0 47                   LDA  CF_STATUS
627
0615 C0AD 85 40                      BITA #DRDY
628
0616 C0AF 27 F2                      BEQ  WTRDY
629
0617 C0B1 39                         RTS
630
0618                         *
631
0619                         * WAIT FOR DATA REQUEST
632
0620                         *
633
0621 C0B2 B6 E0 47           WTDRQ   LDA  CF_STATUS
634
0622 C0B5 85 08                      BITA #DRQ
635
0623 C0B7 27 F9                      BEQ  WTDRQ
636
0624 C0B9 39                         RTS
637
0625                         *
638
0626                                END START
639
Program + Init Data = 791 bytes
640
Error count = 0

powered by: WebSVN 2.1.0

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