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
|