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

Subversion Repositories System09

[/] [System09/] [tags/] [pre_mkfiles_rev1_merge/] [src/] [fmt/] [fmt_ide.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 0040                    RMAXTRK EQU 64
44
0042 00FF                    RMAXSEC EQU 255
45
0043 3EC1                    RTOTSEC EQU RMAXTRK*RMAXSEC-RMAXSEC
46
0044                         *
47
0045                         * Start
48
0046                         *
49
0047 0100                            ORG $0100
50
0048 0100 17 02 98           START   LBSR  UFSUB
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                         *
73
0071                         * recieve char from remote drive.
74
0072                         * timeout if no response for approx 1s.
75
0073                         * Entry: no parameters
76
0074                         * Exit:  (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout.
77
0075                         *
78
0076 0300 34 30              RCHAR   PSHS    X,Y
79
0077                         *
80
0078 0302 8E 03 E8                   LDX     #1000         1000x inner loop
81
0079 0305 10 8E 04 E2        RCHAR1  LDY     #DELCON       delay constant for inner loop (approx 1ms).
82
0080 0309 B6 E0 00           RCHAR2  LDA     ACIAC1        test for recieved char
83
0081 030C 47                         ASRA
84
0082 030D 25 0A                      BCS     RCHAR3        get character
85
0083 030F 31 3F                      LEAY    -1,Y          else, continue to count delay
86
0084 0311 26 F6                      BNE     RCHAR2
87
0085 0313 30 1F                      LEAX    -1,X
88
0086 0315 26 EE                      BNE     RCHAR1
89
0087 0317 35 B0                      PULS    X,Y,PC        return with error if timed out
90
0088                         *
91
0089 0319 B6 E0 01           RCHAR3  LDA     ACIAD1        return data (carry bit still set)
92
0090 031C 35 B0                      PULS    X,Y,PC
93
0091                         *
94
0092                         *
95
0093                         * transmit char to remote drive.
96
0094                         * timeout if no response for approx 1s. (allows for use of hardware flow control)
97
0095                         * Entry: (A) = char to transmit
98
0096                         * Exit:  (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout.
99
0097                         *
100
0098 031E 34 30              SCHAR   PSHS    X,Y
101
0099 0320 34 02                      PSHS    A
102
0100                         *
103
0101 0322 8E 03 E8                   LDX     #1000         1000x inner loop
104
0102 0325 10 8E 04 E2        SCHAR1  LDY     #DELCON       delay constant for inner loop (approx 1ms).
105
0103 0329 B6 E0 00           SCHAR2  LDA     ACIAC1        test for space in transmit FIFO
106
0104 032C 47                         ASRA
107
0105 032D 47                         ASRA
108
0106 032E 25 0C                      BCS     SCHAR3        send character
109
0107 0330 31 3F                      LEAY    -1,Y          else, continue to count delay
110
0108 0332 26 F5                      BNE     SCHAR2
111
0109 0334 30 1F                      LEAX    -1,X
112
0110 0336 26 ED                      BNE     SCHAR1
113
0111 0338 35 02                      PULS    A
114
0112 033A 35 B0                      PULS    X,Y,PC        return with error if timed out
115
0113                         *
116
0114 033C 35 02              SCHAR3  PULS    A
117
0115 033E B7 E0 01                   STA     ACIAD1        send data (carry bit still set)
118
0116 0341 35 B0                      PULS    X,Y,PC
119
0117                         *
120
0118                         ** 'UF' Format IDE Drive to FLEX standard.
121
0119                         *
122
0120 0343 0A 0D              DISFOS  FCB $0A,$0D
123
0121 0345 46 6F 72 6D 61 74          FCC 'Formating IDE disk... '
124
          69 6E 67 20 49 44
125
          45 20 64 69 73 6B
126
          2E 2E 2E 20
127
0122 035B 0A 0D                      FCB $0A,$0D
128
0123 035D 44 72 69 76 65 20          FCC 'Drive Number ?'
129
          4E 75 6D 62 65 72
130
          20 3F
131
0124 036B 04                         FCB 4
132
0125 036C 0A 0D 04           MESS6   FCB $0A,$0D,4
133
0126 036F 49 44 45 20 64 72          FCC 'IDE drive not allocated! '
134
          69 76 65 20 6E 6F
135
          74 20 61 6C 6C 6F
136
          63 61 74 65 64 21
137
          20
138
0127 0388 04                    FCB 4
139
0128 0389 0A 0D              UFMSG1  FCB $0A,$0D
140
0129 038B 46 6F 72 6D 61 74          FCC 'Format Complete'
141
          20 43 6F 6D 70 6C
142
          65 74 65
143
0130 039A 04                         FCB 4
144
0131                         *
145
0132 039B BD 05 39           UFSUB   JSR  INITDR
146
0133 039E 8E 03 43                   LDX #DISFOS
147
0134 03A1 BD 05 32                   JSR PDATA1
148
0135 03A4 17 FF 59           UFSUB1  LBSR RCHAR
149
0136 03A7 24 FB                      BCC  UFSUB1
150
0137 03A9 17 FF 72                   LBSR SCHAR
151
0138 03AC 81 30                      CMPA #'0'
152
0139 03AE 10 25 00 F3                LBLO UFEXIT
153
0140 03B2 81 33                      CMPA #'3'
154
0141 03B4 10 22 00 ED                LBHI  UFEXIT
155
0142 03B8 80 30                      SUBA #'0'
156
0143 03BA 1F 89                      TFR  A,B
157
0144 03BC F7 01 07                   STB DRVNUM
158
0145 03BF 8E 01 04                   LDX #DRVNUM-3
159
0146 03C2 BD 05 B1                   JSR DRVSEL
160
0147                         *
161
0148                         * set up free chain
162
0149                         *
163
0150 03C5 8E 02 00                   LDX #BUFFER clear out buffer
164
0151 03C8 4F                         CLRA
165
0152 03C9 5F                         CLRB
166
0153 03CA A7 80              DFL1    STA 0,X+
167
0154 03CC 5A                         DECB
168
0155 03CD 26 FB                      BNE DFL1
169
0156                         *
170
0157 03CF 7F 01 08                   CLR TRACK
171
0158 03D2 86 01                      LDA #1
172
0159 03D4 B7 01 09                   STA SECTOR
173
0160 03D7 8E 02 00           DFL2    LDX #BUFFER
174
0161 03DA B6 01 08                   LDA TRACK
175
0162 03DD A7 84                      STA 0,X
176
0163 03DF B6 01 09                   LDA SECTOR
177
0164 03E2 4C                         INCA
178
0165 03E3 81 00                      CMPA #RMAXSEC+1 last sector on track?
179
0166 03E5 26 04                      BNE DFL3
180
0167 03E7 6C 84                      INC 0,X
181
0168 03E9 86 01                      LDA #1
182
0169 03EB A7 01              DFL3    STA 1,X
183
0170 03ED B6 01 08                   LDA TRACK
184
0171 03F0 F6 01 09                   LDB SECTOR
185
0172 03F3 BD 05 8D                   JSR WRITSC
186
0173 03F6 7C 01 09                   INC SECTOR
187
0174 03F9 B6 01 09                   LDA SECTOR
188
0175 03FC 81 00                      CMPA #RMAXSEC+1
189
0176 03FE 26 D7                      BNE DFL2
190
0177 0400 86 01                      LDA #1
191
0178 0402 B7 01 09                   STA  SECTOR
192
0179 0405 7C 01 08                   INC TRACK
193
0180 0408 B6 01 08                   LDA TRACK
194
0181 040B 81 40                      CMPA #RMAXTRK
195
0182 040D 26 C8                      BNE DFL2
196
0183                         * break free chain at last track/sector
197
0184 040F 8E 02 00                   LDX  #BUFFER
198
0185 0412 86 3F                      LDA  #RMAXTRK-1
199
0186 0414 C6 FF                      LDB  #RMAXSEC
200
0187 0416 BD 05 6C                   JSR  READSC
201
0188 0419 8E 02 00                   LDX  #BUFFER
202
0189 041C 6F 84                      CLR  0,X
203
0190 041E 6F 01                      CLR  1,X
204
0191 0420 86 3F                      LDA  #RMAXTRK-1
205
0192 0422 C6 FF                      LDB  #RMAXSEC
206
0193 0424 BD 05 8D                   JSR  WRITSC
207
0194                         * set up sector structure, SIR, directory etc
208
0195 0427 8E 02 00                   LDX  #BUFFER
209
0196 042A 4F                         CLRA
210
0197 042B C6 FF                      LDB  #RMAXSEC
211
0198 042D BD 05 6C                   JSR  READSC
212
0199 0430 8E 02 00                   LDX  #BUFFER
213
0200 0433 6F 84                      CLR  0,X break end of directory chain
214
0201 0435 6F 01                      CLR  1,X
215
0202 0437 4F                         CLRA
216
0203 0438 C6 FF                      LDB  #RMAXSEC
217
0204 043A BD 05 8D                   JSR  WRITSC
218
0205                         *
219
0206 043D 8E 02 00                   LDX  #BUFFER
220
0207 0440 4F                         CLRA
221
0208 0441 C6 03                      LDB  #3 set up SIR
222
0209 0443 BD 05 6C                   JSR  READSC
223
0210 0446 8E 02 00                   LDX  #BUFFER
224
0211 0449 6F 84                      CLR  0,X break forward link
225
0212 044B 6F 01                      CLR  1,X
226
0213 044D CC 52 41                   LDD  #$5241 set volume name (RAMDISK )
227
0214 0450 ED 88 10                   STD  16,X
228
0215 0453 CC 4D 44                   LDD  #$4D44
229
0216 0456 ED 88 12                   STD  18,X
230
0217 0459 CC 49 53                   LDD  #$4953
231
0218 045C ED 88 14                   STD  20,X
232
0219 045F CC 4B 20                   LDD  #$4B20
233
0220 0462 ED 88 16                   STD  22,X
234
0221 0465 CC 00 01                   LDD  #1 volume number
235
0222 0468 ED 88 1B                   STD  27,X
236
0223 046B CC 01 01                   LDD  #$0101 first trk/sec  01-01
237
0224 046E ED 88 1D                   STD  29,X
238
0225 0471 86 3F                      LDA  #RMAXTRK-1
239
0226 0473 C6 FF                      LDB  #RMAXSEC
240
0227 0475 ED 88 1F                   STD  31,X
241
0228 0478 ED 88 26                   STD  38,X
242
0229 047B CC 3E C1                   LDD  #RTOTSEC total DATA sectors (2912-14)
243
0230 047E ED 88 21                   STD  33,X
244
0231                         *
245
0232 0481 86 01                      LDA #01 month   set default creation date (SYS09's birthday!)
246
0233 0483 A7 88 23                   STA 35,X
247
0234 0486 86 07                      LDA #07 day
248
0235 0488 A7 88 24                   STA 36,X
249
0236 048B 86 07                      LDA #07 year
250
0237 048D A7 88 25                   STA 37,X
251
0238                         *
252
0239 0490 4F                 RF3     CLRA
253
0240 0491 C6 03                      LDB  #3
254
0241 0493 BD 05 8D                   JSR  WRITSC
255
0242                         *
256
0243                         * Not sure what this is about
257
0244                         * put bootstrap on track 0 sector 1
258
0245                         *
259
0246                         *        LDX #BUFFER
260
0247                         *        CLRA
261
0248                         *        LDB #1
262
0249                         *        JSR READSC
263
0250                         *        LDX #BUFFER
264
0251                         *        LDA #$AA set the init flag
265
0252                         *        STA 0,X
266
0253                         *        LDA  #$55
267
0254                         *        STA 1,X
268
0255                         *        CLRA
269
0256                         *        LDB #1
270
0257                         *        JSR WRITSC
271
0258                         *
272
0259                         *  Write Boot sector
273
0260                         *
274
0261 0496 8E C0 00                   LDX  #$C000
275
0262 0499 4F                         CLRA         TRACK 0
276
0263 049A C6 01                      LDB  #$01    SECTOR 1
277
0264 049C B7 01 08                   STA  TRACK
278
0265 049F F7 01 09                   STB  SECTOR
279
0266 04A2 17 00 E8                   LBSR WRITSC
280
0267                         *
281
0268 04A5 8E 03 89           UFEXIT  LDX #UFMSG1
282
0269 04A8 7E 05 32                   JMP PDATA1
283
0270                         *
284
0271                         * Read a byte from the serial port
285
0272                         *
286
0273 04AB 34 04              LRBYTE  PSHS B
287
0274 04AD 8D 0E                      BSR  LRHEX                  Get hex digit.
288
0275 04AF 48                         ASLA
289
0276 04B0 48                         ASLA                           Shift to msb.
290
0277 04B1 48                         ASLA
291
0278 04B2 48                         ASLA
292
0279 04B3 1F 89                      TFR  A,B                    Save in B.
293
0280 04B5 8D 06                      BSR  LRHEX                  Get next digit.
294
0281 04B7 34 04                      PSHS B
295
0282 04B9 AB E0                      ADDA 0,S+                    Add together bytes.
296
0283 04BB 35 84                      PULS B,PC
297
0284                         *
298
0285 04BD BD 04 E6           LRHEX   JSR  INTER
299
0286 04C0 29 FB                      BVS  LRHEX
300
0287 04C2 80 30                      SUBA #$30                   Remove ascii bias.
301
0288 04C4 2B F7                      BMI  LRHEX
302
0289 04C6 81 09                      CMPA #$09                   Number?
303
0290 04C8 2F 0A                      BLE  LRHEX1                 Yes.
304
0291 04CA 81 11                      CMPA #$11                   Keep testing.
305
0292 04CC 2B EF                      BMI  LRHEX
306
0293 04CE 81 16                      CMPA #$16
307
0294 04D0 2E EB                      BGT  LRHEX
308
0295 04D2 80 07                      SUBA #$07
309
0296 04D4 39                 LRHEX1  RTS
310
0297                         *
311
0298                         * ACIA INPUT TEST
312
0299                         *
313
0300 04D5 B6 E0 00           INTEST  LDA ACIAC1
314
0301 04D8 85 01                      BITA #$01
315
0302 04DA 39                         RTS
316
0303                         *
317
0304                         * RESET ACIA
318
0305                         *
319
0306 04DB 86 03              ACIRST  LDA #$03 master reset
320
0307 04DD B7 E0 00                   STA  ACIAC1
321
0308 04E0 86 11                      LDA #$11
322
0309 04E2 B7 E0 00                   STA ACIAC1
323
0310 04E5 39                         RTS
324
0311                         *
325
0312                         * ACIA INPUT
326
0313                         *
327
0314 04E6 86 10              INTER   LDA  #16
328
0315 04E8 B7 01 0F                   STA  DELCNT+0
329
0316 04EB 7F 01 10                   CLR  DELCNT+1
330
0317 04EE 7F 01 11                   CLR  DELCNT+2
331
0318 04F1 B6 E0 00           INTER0  LDA  ACIAC1
332
0319 04F4 85 01                      BITA #$01
333
0320 04F6 26 08                      BNE  INTER1
334
0321 04F8 85 78                      BITA #$78
335
0322 04FA 27 0A                      BEQ  INTER2
336
0323 04FC 8D DD                      BSR  ACIRST
337
0324 04FE 20 E6                      BRA  INTER
338
0325                         *
339
0326 0500 B6 E0 01           INTER1  LDA  ACIAD1
340
0327 0503 1C 02                      ANDCC #VFLAG
341
0328 0505 39                         RTS
342
0329                         *
343
0330 0506 7A 01 11           INTER2  DEC  DELCNT+2
344
0331 0509 26 E6                      BNE  INTER0
345
0332 050B 7A 01 10                   DEC  DELCNT+1
346
0333 050E 26 E1                      BNE  INTER0
347
0334 0510 7A 01 0F                   DEC  DELCNT+0
348
0335 0513 26 DC                      BNE  INTER0
349
0336 0515 4F                         CLRA
350
0337 0516 1A 02                      ORCC #VFLAG
351
0338 0518 39                         RTS
352
0339                         *
353
0340                         * ACIA OUTPUT
354
0341                         *
355
0342 0519 34 02              OUTTER  PSHS A
356
0343                         *
357
0344 051B B6 E0 00           OUTTE1  LDA ACIAC1
358
0345 051E 85 02                      BITA #$02
359
0346 0520 26 08                      BNE  OUTTE2
360
0347 0522 85 78                      BITA #$78
361
0348 0524 27 F5                      BEQ  OUTTE1
362
0349 0526 8D B3                      BSR  ACIRST
363
0350 0528 20 F1                      BRA  OUTTE1
364
0351                         *
365
0352 052A 35 02              OUTTE2  PULS A
366
0353 052C B7 E0 01                   STA ACIAD1
367
0354 052F 39                         RTS
368
0355                         *
369
0356                         * Print Data
370
0357                         *
371
0358 0530 8D E7              PDATA0  BSR  OUTTER
372
0359 0532 A6 80              PDATA1  LDA  ,X+
373
0360 0534 81 04                      CMPA #$04
374
0361 0536 26 F8                      BNE  PDATA0
375
0362 0538 39                         RTS
376
0363                         *
377
0364                         ** FLEX 9 IDE DISK DRIVERS
378
0365                         *
379
0366                         * FOR SYS09BUG 1.2 ON THE XSA-3S1000
380
0367                         * WITH I/O MAPPED AT $XE000
381
0368                         * AND ROM MAPPED AT $XF000
382
0369                         *
383
0370                         *
384
0371 0010                    IMASK  EQU $10     IRQ MASK CC
385
0372 0040                    FMASK  EQU $40     FIRQ MASK CC
386
0373                         *
387
0374 E100                    CF_BASE    EQU $E100
388
0375 E100                    CF_DATA    EQU CF_BASE+0
389
0376 E102                    CF_ERROR   EQU CF_BASE+2 ; read error
390
0377 E102                    CF_FEATURE EQU CF_BASE+2 ; write feature
391
0378 E104                    CF_SCNT    EQU CF_BASE+4
392
0379 E106                    CF_SNUM    EQU CF_BASE+6
393
0380 E108                    CF_CLO     EQU CF_BASE+8
394
0381 E10A                    CF_CHI     EQU CF_BASE+10
395
0382 E10C                    CF_HEAD    EQU CF_BASE+12
396
0383 E10E                    CF_STATUS  EQU CF_BASE+14 ; read status
397
0384 E10E                    CF_COMAND  EQU CF_BASE+14 ; write command
398
0385 E11E                    CF_AUX     EQU CF_BASE+30
399
0386                         *
400
0387                         * Command Equates
401
0388                         *
402
0389 0020                    CMDREAD    EQU $20 ; Read Single sector
403
0390 0030                    CMDWRITE   EQU $30 ; Write Single sector
404
0391 0006                    AUXRESET   EQU $06
405
0392 0002                    AUXRSTREL  EQU $02
406
0393 00E0                    HEADLBA    EQU $E0
407
0394                         *
408
0395                         * Status bit equates
409
0396                         *
410
0397 0080                    BSY        EQU $80
411
0398 0040                    DRDY       EQU $40
412
0399 0008                    DRQ        EQU $08
413
0400 0001                    ERR        EQU $01
414
0401                         *
415
0402                         *
416
0403                         * INITIALIZE CF CARD FOR 8 BIT LBA MODE
417
0404                         *
418
0405 0539 CC 00 06           INITDR LDD #AUXRESET
419
0406 053C FD E1 1E                  STD CF_AUX
420
0407 053F CC 00 02                  LDD #AUXRSTREL
421
0408 0542 FD E1 1E                  STD CF_AUX
422
0409 0545 CC 00 E0                  LDD  #HEADLBA
423
0410 0548 FD E1 0C                  STD  CF_HEAD
424
0411 054B 20 74                     BRA WAITRDY
425
0412                         *
426
0413                         * RESTORE DISK DRIVER (SEEK TRACK 00)
427
0414                         *
428
0415 054D 8D 62              RESTR1 BSR   DRVSEL
429
0416 054F 4F                        CLRA           ; Track 0
430
0417 0550 C6 01                     LDB   #$01     ; Sector 1
431
0418                         *
432
0419                         * Seek track and sector
433
0420                         * A holds track number (0 - ??)
434
0421                         * B holds sector number (1 - ??)
435
0422                         * Sector numbers starts from 1
436
0423                         * subtract 1 to start from sector 0 on CF
437
0424                         *
438
0425 0552 34 02              SEEKTS PSHS A
439
0426 0554 4F                        CLRA
440
0427 0555 5A                        DECB
441
0428 0556 FD E1 06                  STD  CF_SNUM
442
0429 0559 E6 E4                     LDB ,S
443
0430 055B FD E1 08                  STD  CF_CLO
444
0431 055E F6 01 07                  LDB  DRVNUM
445
0432 0561 FD E1 0A                  STD  CF_CHI
446
0433 0564 C6 01                     LDB  #$01
447
0434 0566 FD E1 04                  STD  CF_SCNT
448
0435 0569 5F                        CLRB
449
0436 056A 35 82                     PULS A,PC
450
0437                         *
451
0438                         * READ SECTORS FROM CF
452
0439                         *
453
0440                         *
454
0441 056C 8D E4              READSC BSR  SEEKTS
455
0442 056E CC 00 20                  LDD  #CMDREAD ; IDE READ MULTIPLE
456
0443 0571 FD E1 0E                  STD  CF_COMAND
457
0444 0574 8D 4B                     BSR  WAITRDY
458
0445                         *
459
0446                         * READ LOOP
460
0447                         *
461
0448 0576 34 20                     PSHS Y
462
0449 0578 10 8E 01 00               LDY #256
463
0450 057C 8D 52              RDLP1  BSR  WAITDRQ
464
0451 057E FC E1 00                  LDD  CF_DATA
465
0452 0581 E7 80                     STB  ,X+
466
0453 0583 31 3F                     LEAY -1,Y
467
0454 0585 26 F5                     BNE  RDLP1
468
0455 0587 35 20                     PULS Y
469
0456                         *
470
0457 0589 8D 36                     BSR  WAITRDY
471
0458 058B 5F                        CLRB
472
0459 058C 39                        RTS
473
0460                         *
474
0461                         * WRITE SECTOR TO CF
475
0462                         *
476
0463 058D 8D C3              WRITSC BSR  SEEKTS   ; SEEK TRACK & SECTOR
477
0464 058F CC 00 30                  LDD  #CMDWRITE ; IDE WRITE MULTIPLE
478
0465 0592 FD E1 0E                  STD  CF_COMAND
479
0466 0595 8D 2A                     BSR  WAITRDY
480
0467                         *
481
0468                         * WRITE LOOP
482
0469                         *
483
0470 0597 34 20                     PSHS Y
484
0471 0599 10 8E 01 00               LDY #256
485
0472 059D 4F                        CLRA
486
0473 059E 8D 30              WRTLP1 BSR  WAITDRQ
487
0474 05A0 E6 80                     LDB  ,X+
488
0475 05A2 FD E1 00                  STD  CF_DATA
489
0476 05A5 31 3F                     LEAY -1,Y
490
0477 05A7 26 F5                     BNE  WRTLP1
491
0478 05A9 35 20                     PULS Y
492
0479                         *
493
0480 05AB 8D 14                     BSR  WAITRDY
494
0481 05AD 5F                        CLRB
495
0482 05AE 39                        RTS
496
0483                         *
497
0484                         * CHECK FOR BUSY
498
0485                         * Doubles as VERIFY
499
0486                         *
500
0487 05AF 5F                 BUSY   CLRB            Never busy
501
0488 05B0 39                        RTS
502
0489                         *
503
0490                         * DRIVE SELECT DISK DRIVER
504
0491                         *
505
0492 05B1 A6 03              DRVSEL LDA   3,X       GET DRIVE # FROM FCB
506
0493 05B3 81 03                     CMPA  #3
507
0494 05B5 23 01                     BLS   DRVS2     IF > 3, SET IT TO 0
508
0495 05B7 4F                        CLRA
509
0496 05B8 B7 01 07           DRVS2  STA   DRVNUM
510
0497 05BB 5F                        CLRB            ; SET Z, CLEAR C
511
0498 05BC 39                        RTS
512
0499                         *
513
0500                         * CHECK DRIVE READY DISK DRIVER
514
0501                         *
515
0502 05BD A6 03              CHKDRV LDA  3,X
516
0503 05BF 5F                        CLRB             ; CLEAR C, SET Z
517
0504 05C0 39                        RTS
518
0505                         *
519
0506                         * WAIT UNTIL READY
520
0507                         *
521
0508 05C1 FC E1 0E           WAITRDY LDD  CF_STATUS
522
0509 05C4 C5 80                      BITB #BSY
523
0510 05C6 26 F9                      BNE  WAITRDY
524
0511 05C8 FC E1 0E                   LDD  CF_STATUS
525
0512 05CB C5 40                      BITB #DRDY
526
0513 05CD 27 F2                      BEQ  WAITRDY
527
0514 05CF 39                         RTS
528
0515                         *
529
0516                         * WAIT FOR DATA REQUEST
530
0517                         *
531
0518 05D0 FC E1 0E           WAITDRQ LDD  CF_STATUS
532
0519 05D3 C5 08                      BITB #DRQ
533
0520 05D5 27 F9                      BEQ  WAITDRQ
534
0521 05D7 39                         RTS
535
0522                         *
536
0523                         *******************************************************
537
0524                         *
538
0525                         * Bootstrap FLEX Loader
539
0526                         *
540
0527                         * SBUG1.8 loads the bootstap loader at $C000
541
0528                         * however the Flex adaption manual has the
542
0529                         * bootstrap loader residing at $C100
543
0530                         *
544
0531                         ******************************************************
545
0532                         *
546
0533                         * Equates
547
0534                         *
548
0535 C0FF                    STACK   EQU $C0FF
549
0536 C300                    SCTBUF  EQU $C300
550
0537                         *
551
0538                         * Start of Utility
552
0539                         *
553
0540 C000                            ORG $C000
554
0541 C000 20 0B              BOOT    BRA LOAD0
555
0542 C002 00 00 00                   FCB 0,0,0
556
0543 C005 00                 TRK     FCB 0        File start track
557
0544 C006 00                 SCT     FCB 0        File start sector
558
0545 C007 00                 DNS     FCB 0        Density Flag (not used)
559
0546 C008 C0 00              TADR    FDB $C000    Transfer address
560
0547 C00A 00 00              LADR    FDB 0        Load Address
561
0548 C00C 00                 DRNUM   FCB 0        Drive number 0
562
0549                         *
563
0550 C00D 10 CE C0 FF        LOAD0   LDS  #STACK   Set up stack
564
0551 C011 FC C0 05                   LDD  TRK      Set up start track and sector
565
0552 C014 FD C3 00                   STD  SCTBUF
566
0553 C017 10 8E C4 00                LDY  #SCTBUF+256
567
0554                         *
568
0555                         * Perform actual file load
569
0556                         *
570
0557 C01B 8D 35              LOAD1   BSR GETCH    Get acharcater
571
0558 C01D 81 02                      CMPA #$02    Data record hearder ?
572
0559 C01F 27 10                      BEQ  LOAD2   Skip, is so
573
0560 C021 81 16                      CMPA #$16    Xfr address hearder ?
574
0561 C023 26 F6                      BNE LOAD1    Loop if neither
575
0562                         *
576
0563                         * Get transfer address
577
0564                         *
578
0565 C025 8D 2B                      BSR  GETCH
579
0566 C027 B7 C0 08                   STA  TADR
580
0567 C02A 8D 26                      BSR  GETCH
581
0568 C02C B7 C0 09                   STA  TADR+1
582
0569 C02F 20 EA                      BRA  LOAD1
583
0570                         *
584
0571                         * Load data record
585
0572                         *
586
0573 C031 8D 1F              LOAD2  BSR  GETCH  Get load address
587
0574 C033 B7 C0 0A                  STA  LADR
588
0575 C036 8D 1A                     BSR  GETCH
589
0576 C038 B7 C0 0B                  STA  LADR+1
590
0577 C03B 8D 15                     BSR  GETCH  Get Bytes count
591
0578 C03D 1F 89                     TFR  A,B
592
0579 C03F 5D                        TSTB
593
0580 C040 27 D9                     BEQ  LOAD1 Loop if count = 0
594
0581 C042 BE C0 0A                  LDX  LADR  Get load address
595
0582 C045 34 14              LOAD3  PSHS B,X
596
0583 C047 8D 09                     BSR  GETCH  Get data character
597
0584 C049 35 14                     PULS B,X
598
0585 C04B A7 80                     STA  ,X+    Store at load address
599
0586 C04D 5A                        DECB
600
0587 C04E 26 F5                     BNE  LOAD3  Loop until count = 0
601
0588 C050 20 C9                     BRA  LOAD1
602
0589                         *
603
0590                         * Get Character routine
604
0591                         * Reads a sector if needed
605
0592                         *
606
0593 C052 10 8C C4 00        GETCH  CMPY #SCTBUF+256 out of data ?
607
0594 C056 26 0F                     BNE  GETCH4      Go read Character if not
608
0595 C058 8E C3 00           GETCH2 LDX  #SCTBUF     Point to buffer
609
0596 C05B EC 84                     LDD  0,X         Get forward Link
610
0597 C05D 27 0B                     BEQ  GO          if zero, file is loaded
611
0598 C05F 8D 27                     BSR  READ        Read next sector
612
0599 C061 26 9D                     BNE  BOOT        start over if error
613
0600 C063 10 8E C3 04               LDY  #SCTBUF+4   Point past link
614
0601 C067 A6 A0              GETCH4 LDA  ,Y+         Else, get a character
615
0602 C069 39                        RTS
616
0603                         *
617
0604                         * File is loaded, Jump to it
618
0605                         *
619
0606 C06A 6E 9F C0 08        GO     JMP  [TADR]      Jump to transfer address
620
0607
621
0608                         *
622
0609                         ** FLEX 9 IDE DISK DRIVERS
623
0610                         *
624
0611                         * FOR SYS09BUG 1.2 ON THE XSA-3S1000
625
0612                         * WITH I/O MAPPED AT $XE000
626
0613                         * AND ROM MAPPED AT $XF000
627
0614                         *
628
0615                         *IMASK  EQU $10     IRQ MASK CC
629
0616                         *FMASK  EQU $40     FIRQ MASK CC
630
0617                         *
631
0618                         *CF_BASE    EQU $E100
632
0619                         *CF_DATA    EQU CF_BASE+0
633
0620                         *CF_ERROR   EQU CF_BASE+2 ; read error
634
0621                         *CF_FEATURE EQU CF_BASE+2 ; write feature
635
0622                         *CF_SCNT  EQU CF_BASE+4
636
0623                         *CF_SNUM  EQU CF_BASE+6
637
0624                         *CF_CLO   EQU CF_BASE+8
638
0625                         *CF_CHI   EQU CF_BASE+10
639
0626                         *CF_HEAD    EQU CF_BASE+12
640
0627                         *CF_STATUS  EQU CF_BASE+14 ; read status
641
0628                         *CF_COMAND  EQU CF_BASE+14 ; write command
642
0629                         *CF_AUX     EQU CF_BASE+30
643
0630                         *
644
0631                         * Command Equates
645
0632                         *
646
0633                         *CMDREAD    EQU $20 ; Read Single sector
647
0634                         *CMDWRITE   EQU $30 ; Write Single sector
648
0635                         *HEADLBA    EQU $E0
649
0636                         *AUXRESET   EQU $06
650
0637                         *AUXRSTREL  EQU $02
651
0638                         *
652
0639                         * Status bit equates
653
0640                         *
654
0641                         *BSY        EQU $80
655
0642                         *DRDY       EQU $40
656
0643                         *DRQ        EQU $08
657
0644                         *ERR        EQU $01
658
0645                         *
659
0646                         * Seek track and sector
660
0647                         * A holds track number (0 - ??)
661
0648                         * B holds sector number (1 - ??)
662
0649                         * Sector numbers starts from 1
663
0650                         * subtract 1 to start from sector 0 on CF
664
0651                         *
665
0652 C06E 34 02              SEEK   PSHS A
666
0653 C070 4F                        CLRA
667
0654 C071 5A                        DECB
668
0655 C072 FD E1 06                  STD  CF_SNUM
669
0656 C075 E6 E4                     LDB  ,S
670
0657 C077 FD E1 08                  STD  CF_CLO
671
0658 C07A F6 C0 0C                  LDB  DRNUM
672
0659 C07D FD E1 0A                  STD  CF_CHI
673
0660 C080 C6 01                     LDB  #$01
674
0661 C082 FD E1 04                  STD  CF_SCNT
675
0662 C085 5F                        CLRB
676
0663 C086 35 82                     PULS A,PC
677
0664                         *
678
0665                         * READ SECTORS FROM CF
679
0666                         *
680
0667                         *
681
0668 C088 8D E4              READ   BSR  SEEK
682
0669 C08A CC 00 20                  LDD  #CMDREAD ; IDE READ MULTIPLE
683
0670 C08D FD E1 0E                  STD  CF_COMAND
684
0671 C090 8D 17                     BSR  WTRDY
685
0672                         *
686
0673                         * READ LOOP
687
0674                         *
688
0675 C092 34 20                     PSHS Y
689
0676 C094 10 8E 01 00               LDY #256
690
0677 C098 8D 1E              READ1  BSR  WTDRQ
691
0678 C09A FC E1 00                  LDD  CF_DATA
692
0679 C09D E7 80                     STB  ,X+
693
0680 C09F 31 3F                     LEAY -1,Y
694
0681 C0A1 26 F5                     BNE  READ1
695
0682 C0A3 35 20                     PULS Y
696
0683                         *
697
0684 C0A5 8D 02                     BSR  WTRDY
698
0685 C0A7 5F                        CLRB
699
0686 C0A8 39                        RTS
700
0687                         *
701
0688                         * WAIT UNTIL READY
702
0689                         *
703
0690 C0A9 FC E1 0E           WTRDY   LDD  CF_STATUS
704
0691 C0AC C5 80                      BITB #BSY
705
0692 C0AE 26 F9                      BNE  WTRDY
706
0693 C0B0 FC E1 0E                   LDD  CF_STATUS
707
0694 C0B3 C5 40                      BITB #DRDY
708
0695 C0B5 27 F2                      BEQ  WTRDY
709
0696 C0B7 39                         RTS
710
0697                         *
711
0698                         * WAIT FOR DATA REQUEST
712
0699                         *
713
0700 C0B8 FC E1 0E           WTDRQ   LDD  CF_STATUS
714
0701 C0BB C5 08                      BITB #DRQ
715
0702 C0BD 27 F9                      BEQ  WTDRQ
716
0703 C0BF 39                         RTS
717
0704                         *
718
0705                                END START
719
Program + Init Data = 940 bytes
720
Error count = 0

powered by: WebSVN 2.1.0

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