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

Subversion Repositories System09

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

powered by: WebSVN 2.1.0

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