Rev 845 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
845 | savelij | 1 | |
952 | savelij | 2 | ;LAST UPDATE: 27.02.2021 savelij |
845 | savelij | 3 | |
4 | ; include sl811_equ.a80 |
||
5 | |||
6 | TIMEOUT_RETRY EQU 6 |
||
7 | |||
8 | ;bFlags |
||
9 | BITMASK bMassDevice, 7 |
||
10 | BITMASK bData1, 6 |
||
11 | BITMASK DATA_STOP, 5 |
||
12 | BITMASK TIMEOUT_ERR, 4 |
||
13 | BITMASK SLAVE_ENUMERATED, 3 |
||
14 | BITMASK SLAVE_FOUND, 2 |
||
15 | BITMASK SLAVE_REMOVED, 1 |
||
16 | BITMASK SLAVE_IS_ATTACHED, 0 |
||
17 | |||
18 | ;室 ࠬ 騥: |
||
19 | ;HL- 㧪 |
||
20 | ;BCDE-32- ᥪ |
||
21 | ;A-⢮ ᥪ (512 ) |
||
22 | ;⮫쪮 筮 /⥭ |
||
23 | |||
24 | ; IX |
||
25 | |||
26 | ; 窠 室 ࠡ |
||
27 | COMUSBF EX AF,AF' |
||
952 | savelij | 28 | LD (TMP_NUMHDD),A |
845 | savelij | 29 | LD A,IYL |
30 | AND A |
||
31 | LD A,(NEXTBYTERST8) |
||
32 | JR Z,.L1 |
||
33 | EX (SP),HL |
||
34 | LD A,(HL) |
||
35 | INC HL |
||
36 | EX (SP),HL |
||
37 | .L1 ADD A,A |
||
38 | PUSH IX |
||
39 | PUSH IY |
||
40 | PUSH HL |
||
41 | LD HL,.L2 |
||
42 | EX (SP),HL |
||
43 | PUSH HL |
||
44 | LD HL,.TBLUSBF |
||
45 | ADD A,L |
||
46 | LD L,A |
||
47 | ADC A,H |
||
48 | SUB L |
||
49 | LD H,A |
||
50 | LD A,(HL) |
||
51 | INC HL |
||
52 | LD H,(HL) |
||
53 | LD L,A |
||
952 | savelij | 54 | LD A,(TMP_NUMHDD) |
845 | savelij | 55 | EX AF,AF' |
56 | EX (SP),HL |
||
57 | RET |
||
58 | |||
59 | .L2 POP IY |
||
60 | POP IX |
||
61 | PUSH AF |
||
62 | LD A,IYL |
||
63 | AND A |
||
64 | JR NZ,.L3 |
||
65 | LD (RREG_L),HL |
||
66 | EX (SP),HL |
||
67 | LD (RREG_F),HL |
||
68 | EX (SP),HL |
||
69 | .L3 POP AF |
||
70 | RET |
||
71 | |||
72 | .TBLUSBF DW sl811_init_my |
||
73 | DW USBOFF |
||
74 | DW RBC_Read ;READ MULTI |
||
75 | DW RBC_Write ;WRITE MULTI |
||
76 | DW USBOFF |
||
77 | |||
78 | ;=============== 樠 |
||
79 | |||
80 | sl811_init_my CALL sl811_reset |
||
81 | CALL SL11HardReset |
||
82 | LD HL,vars.bFlags |
||
83 | LD (HL),0 |
||
84 | ; RES B_SLAVE_FOUND,(HL) |
||
85 | ; RES B_SLAVE_ENUMERATED,(HL) |
||
86 | ; RES B_DATA_STOP,(HL) |
||
87 | LD IXH,50 |
||
88 | .L1 XOR A |
||
89 | DEC IXH |
||
90 | RET Z |
||
91 | CALL USBReset |
||
92 | LD HL,IntStatus << 8 + INT_CLEAR |
||
93 | CALL SL_WRITE |
||
94 | CALL SL_READ |
||
95 | XOR A |
||
96 | BIT 6,L |
||
97 | RET NZ |
||
98 | BIT 7,L |
||
99 | JR Z,.L1 |
||
100 | LD HL,CtrlReg << 8 + 5 |
||
101 | CALL SL_WRITE |
||
102 | LD HL,EP0Status << 8 + 0x50 |
||
103 | CALL SL_WRITE |
||
104 | LD HL,EP0Counter << 8 |
||
105 | CALL SL_WRITE |
||
106 | LD HL,EP0Control << 8 + 1 |
||
107 | CALL SL_WRITE |
||
108 | LD HL,IntStatus << 8 + INT_CLEAR |
||
109 | CALL SL_WRITE |
||
110 | LD E,1 |
||
111 | CALL EnumUsbDev |
||
112 | AND A |
||
113 | RET Z |
||
114 | XOR A |
||
115 | LD HL,vars.bFlags |
||
116 | BIT B_bMassDevice,(HL) |
||
117 | RET Z |
||
118 | RES B_bMassDevice,(HL) |
||
119 | PUSH HL |
||
120 | CALL EnumMassDev |
||
121 | POP HL |
||
122 | AND A |
||
123 | RET Z |
||
124 | SET B_SLAVE_IS_ATTACHED,(HL) |
||
125 | LD L,(HL) |
||
126 | USBOFF XOR A |
||
127 | RET |
||
128 | |||
129 | SL11HardReset: LD BC,UE_INT_RES |
||
130 | IN A,(C) |
||
131 | AND %11011111 |
||
132 | OUT (C),A |
||
133 | LD B,HIGH (UE_CONTROL) |
||
134 | IN A,(C) |
||
135 | OR %01000000 |
||
136 | OUT (C),A |
||
137 | EI |
||
138 | HALT |
||
139 | DI |
||
140 | IN A,(C) |
||
141 | AND %10101111 |
||
142 | OUT (C),A |
||
143 | LD B,HIGH (UE_INT_RES) |
||
144 | IN A,(C) |
||
145 | OR %00100000 |
||
146 | OUT (C),A |
||
147 | .L1 LD B,HIGH (UE_INT_RES) |
||
148 | IN A,(C) |
||
149 | AND 0X10 |
||
150 | LD D,A |
||
151 | OUT (C),A |
||
152 | LD B,HIGH (UE_INT_RES) |
||
153 | SET 5,D |
||
154 | OUT (C),D |
||
155 | LD B,HIGH (UE_MAPW5300) |
||
156 | XOR A |
||
157 | OUT (C),A |
||
158 | LD HL,CtrlReg << 8 |
||
159 | CALL SL_WRITE |
||
160 | LD HL,cDATASet << 8 + msSOFLowCountFS |
||
161 | CALL SL_WRITE |
||
162 | LD HL,cSOFcnt << 8 + cSOFMasterMode | cSOFFullSpeed | msSOFHighCountFS |
||
163 | CALL SL_WRITE |
||
164 | LD HL,IntEna << 8 |
||
165 | CALL SL_WRITE |
||
166 | LD H,IntStatus |
||
167 | CALL SL_READ |
||
168 | CP 5 |
||
169 | JR Z,.L1 |
||
170 | RET |
||
171 | |||
172 | sl811_reset: LD BC,UE_MAPW5300 |
||
173 | XOR A |
||
174 | OUT (C),A |
||
175 | LD B,HIGH (UE_INT_RES) |
||
176 | LD A,%00100000 |
||
177 | OUT (C),A |
||
178 | |||
179 | USBReset: LD H,CtrlReg |
||
180 | CALL SL_READ |
||
181 | LD A,L |
||
182 | LD L,8 |
||
183 | CALL SL_WRITE |
||
184 | EI |
||
185 | HALT |
||
186 | ; LD L,0x18 |
||
187 | ; CALL SL_WRITE |
||
188 | ; HALT |
||
189 | ; LD L,8 |
||
190 | ; CALL SL_WRITE |
||
191 | ; HALT |
||
192 | DI |
||
193 | LD L,A |
||
194 | JP SL_WRITE |
||
195 | |||
196 | ;=============== ࠡ ⠬ |
||
197 | |||
198 | SL_READ LD BC,SL811H_ADDR |
||
199 | OUT (C),H |
||
200 | LD B,HIGH (SL811H_DATA) |
||
201 | IN L,(C) |
||
202 | .L1 LD B,HIGH (SL811H_ADDR) |
||
203 | OUT (C),H |
||
204 | LD B,HIGH (SL811H_DATA) |
||
205 | IN A,(C) |
||
206 | CP L |
||
207 | RET Z |
||
208 | LD L,A |
||
209 | JR .L1 |
||
210 | |||
211 | SL_WRITE LD BC,SL811H_ADDR |
||
212 | OUT (C),H |
||
213 | LD B,HIGH (SL811H_DATA) |
||
214 | OUT (C),L |
||
215 | RET |
||
216 | |||
217 | SL_READBUF LD BC,SL811H_ADDR |
||
218 | OUT (C),E |
||
219 | INC E |
||
220 | LD B,HIGH (SL811H_DATA) |
||
221 | INI |
||
222 | DEC D |
||
223 | JR NZ,SL_READBUF |
||
224 | RET |
||
225 | |||
226 | SL_WRITEBUF LD BC,SL811H_ADDR |
||
227 | OUT (C),E |
||
228 | INC E |
||
229 | LD B,HIGH (SL811H_DATA) + 1 |
||
230 | OUTI |
||
231 | DEC D |
||
232 | JR NZ,SL_WRITEBUF |
||
233 | RET |
||
234 | |||
235 | ;=============== ⥭/ USB |
||
236 | |||
237 | EnumMassDev: CALL SPC_Inquiry |
||
238 | OR A |
||
239 | ; LD A,0x81 |
||
240 | RET Z |
||
241 | CALL SPC_TestUnit |
||
242 | OR A |
||
243 | ; LD A,0x82 |
||
244 | RET Z |
||
245 | CALL SPC_LockMedia |
||
246 | OR A |
||
247 | ; LD A,0x83 |
||
248 | RET Z |
||
249 | CALL SPC_RequestSense |
||
250 | OR A |
||
251 | ; LD A,0x84 |
||
252 | RET Z |
||
253 | CALL SPC_TestUnit |
||
254 | OR A |
||
255 | ; LD A,0x85 |
||
256 | RET Z |
||
257 | CALL RBC_ReadCapacity |
||
258 | OR A |
||
259 | ; LD A,0x86 |
||
260 | RET Z |
||
261 | CALL SPC_RequestSense |
||
262 | OR A |
||
263 | ; LD A,0x87 |
||
264 | RET Z |
||
265 | CALL SPC_TestUnit |
||
266 | OR A |
||
267 | ; LD A,0x88 |
||
268 | RET Z |
||
269 | CALL RBC_ReadCapacity |
||
270 | OR A |
||
271 | ; LD A,0x89 |
||
272 | RET Z |
||
273 | IF 0 |
||
274 | LD HL,vars.DBUF |
||
275 | LD A,1 |
||
276 | LD DE,0 |
||
277 | LD B,D |
||
278 | LD C,E |
||
279 | CALL RBC_Read |
||
280 | OR A |
||
281 | ; LD A,0x8A |
||
282 | RET Z |
||
283 | ENDIF |
||
284 | LD A,TRUE |
||
285 | RET |
||
286 | |||
287 | SPC_Inquiry: LD BC,0x15 |
||
288 | CALL SET_T_OUT |
||
289 | LD C,0x1F |
||
290 | CALL T_OUT_SEND |
||
291 | OR A |
||
292 | RET Z |
||
293 | LD BC,0x24 |
||
294 | LD DE,vars.DBUF |
||
295 | CALL epBulkRcv |
||
296 | OR A |
||
297 | RET Z |
||
298 | JP T_OUT13_RECV |
||
299 | |||
300 | SPC_RequestSense: |
||
301 | LD BC,0x15 |
||
302 | CALL SET_T_OUT |
||
303 | LD A,14 |
||
304 | LD (vars.T_OUT+8),A |
||
305 | LD A,SPC_CMD_REQUESTSENSE |
||
306 | LD (vars.T_OUT+15),A |
||
307 | LD A,14 |
||
308 | LD (vars.T_OUT+19),A |
||
309 | LD C,31 |
||
310 | CALL T_OUT_SEND |
||
311 | OR A |
||
312 | RET Z |
||
313 | LD BC,18 |
||
314 | CALL T_OUT_RECV |
||
315 | OR A |
||
316 | RET Z |
||
317 | JP T_OUT13_RECV |
||
318 | |||
319 | SPC_TestUnit: LD BC,0x15 |
||
320 | CALL SET_T_OUT |
||
321 | XOR A |
||
322 | LD (vars.T_OUT+8),A |
||
323 | LD (vars.T_OUT+12),A |
||
324 | LD (vars.T_OUT+15),A ;SPC_CMD_TESTUNITREADY |
||
325 | LD (vars.T_OUT+19),A |
||
326 | LD C,0x1F |
||
327 | CALL T_OUT_SEND |
||
328 | OR A |
||
329 | RET Z |
||
330 | JP T_OUT13_RECV |
||
331 | |||
332 | SPC_LockMedia: LD BC,0x15 |
||
333 | CALL SET_T_OUT |
||
334 | XOR A |
||
335 | LD (vars.T_OUT+8),A |
||
336 | LD (vars.T_OUT+12),A |
||
337 | INC A |
||
338 | LD (vars.T_OUT+19),A |
||
339 | LD A,5 |
||
340 | LD (vars.T_OUT+14),A |
||
341 | LD A,SPC_CMD_PRVENTALLOWMEDIUMREMOVAL |
||
342 | LD (vars.T_OUT+15),A |
||
343 | LD C,0x1F |
||
344 | CALL T_OUT_SEND |
||
345 | OR A |
||
346 | RET Z |
||
347 | JP T_OUT13_RECV |
||
348 | |||
349 | RBC_ReadCapacity: |
||
350 | LD BC,0x19 |
||
351 | CALL SET_T_OUT |
||
352 | LD A,8 |
||
353 | LD (vars.T_OUT+8),A |
||
354 | LD A,10 |
||
355 | LD (vars.T_OUT+14),A |
||
356 | LD A,RBC_CMD_READCAPACITY |
||
357 | LD (vars.T_OUT+15),A |
||
358 | XOR A |
||
359 | LD (vars.T_OUT+19),A |
||
360 | LD C,0x1F |
||
361 | CALL T_OUT_SEND |
||
362 | OR A |
||
363 | RET Z |
||
364 | LD BC,8 |
||
365 | LD DE,vars.DBUF |
||
366 | CALL epBulkRcv |
||
367 | OR A |
||
368 | RET Z |
||
369 | JP T_OUT13_RECV |
||
370 | |||
371 | ;HL - |
||
372 | ;BCDE - ᥪ LBA |
||
373 | ;A - ⢮ ᥪ |
||
374 | RBC_Read: PUSH HL ; |
||
375 | CALL SET_LBA |
||
376 | PUSH DE ; |
||
377 | ADC HL,HL |
||
378 | LD (vars.T_OUT+10),HL |
||
379 | LD A,0x80 |
||
380 | LD (vars.T_OUT+12),A |
||
381 | LD A,10 |
||
382 | LD (vars.T_OUT+14),A |
||
383 | LD A,RBC_CMD_READ10 |
||
384 | LD (vars.T_OUT+15),A |
||
385 | XOR A |
||
386 | LD (vars.T_OUT+13),A |
||
387 | LD (vars.T_OUT+16),A |
||
388 | LD (vars.T_OUT+21),A |
||
389 | LD (vars.T_OUT+24),A |
||
390 | LD BC,0x1F |
||
391 | CALL T_OUT_SEND |
||
392 | OR A |
||
393 | POP BC ; |
||
394 | POP DE ; |
||
395 | RET Z |
||
396 | CALL epBulkRcv |
||
397 | OR A |
||
398 | RET Z |
||
399 | JP T_OUT13_RECV |
||
400 | |||
401 | SET_LBA LD HL,vars.T_OUT+17 |
||
402 | LD (HL),B |
||
403 | INC HL |
||
404 | LD (HL),C |
||
405 | INC HL |
||
406 | LD (HL),D |
||
407 | INC HL |
||
408 | LD (HL),E |
||
409 | LD BC,8 |
||
410 | LD DE,vars.T_OUT |
||
411 | LD HL,T_DATA0 |
||
412 | LDIR |
||
413 | LD H,A |
||
414 | LD L,B |
||
415 | LD (vars.T_OUT+22),HL |
||
416 | LD D,B |
||
417 | LD E,B |
||
418 | ADD HL,HL |
||
419 | LD (vars.T_OUT+8),HL |
||
420 | EX DE,HL |
||
421 | RET |
||
422 | |||
423 | ;HL - |
||
424 | ;BCDE - ᥪ LBA |
||
425 | ;A - ⢮ ᥪ |
||
426 | RBC_Write: PUSH HL ; |
||
427 | CALL SET_LBA |
||
428 | PUSH DE ; |
||
429 | ADC HL,HL |
||
430 | LD (vars.T_OUT+10),HL |
||
431 | LD A,10 |
||
432 | LD (vars.T_OUT+14),A |
||
433 | LD A,RBC_CMD_WRITE10 |
||
434 | LD (vars.T_OUT+15),A |
||
435 | XOR A |
||
436 | LD (vars.T_OUT+12),A |
||
437 | LD (vars.T_OUT+13),A |
||
438 | LD (vars.T_OUT+16),A |
||
439 | LD (vars.T_OUT+21),A |
||
440 | LD (vars.T_OUT+24),A |
||
441 | LD BC,0x1F |
||
442 | CALL T_OUT_SEND |
||
443 | OR A |
||
444 | POP BC ; |
||
445 | POP DE ; |
||
446 | RET Z |
||
447 | CALL epBulkSend |
||
448 | OR A |
||
449 | RET Z |
||
450 | T_OUT13_RECV LD BC,13 |
||
451 | T_OUT_RECV LD DE,vars.T_OUT |
||
452 | CALL epBulkRcv |
||
453 | OR A |
||
454 | RET Z |
||
455 | LD A,TRUE |
||
456 | RET |
||
457 | |||
458 | T_OUT13_SEND LD BC,13 |
||
459 | T_OUT_SEND LD DE,vars.T_OUT |
||
460 | JP epBulkSend |
||
461 | |||
462 | SET_T_OUT LD HL,T_DATA0 |
||
463 | LD DE,vars.T_OUT |
||
464 | LDIR |
||
465 | RET |
||
466 | |||
467 | ;=============== ࠡ SL811 |
||
468 | |||
469 | ;input: |
||
470 | ;none |
||
471 | usbXfer: LD HL,vars.bFlags |
||
472 | RES B_DATA_STOP,(HL) |
||
473 | RES B_TIMEOUT_ERR,(HL) |
||
474 | LD A,EP0_Buf |
||
475 | LD (vars.data0),A |
||
476 | LD A,(usbstack_wPayload) |
||
477 | ADD A,16 |
||
478 | LD (vars.data1),A |
||
479 | XOR A |
||
480 | LD (vars.timeout),A |
||
481 | LD (vars.dataX),A |
||
482 | LD BC,(usbstack_wPayload) |
||
483 | LD B,A |
||
484 | LD HL,(usbstack_wLen) |
||
485 | LD A,L ;usbstack_wLen |
||
486 | AND A |
||
487 | SBC HL,BC |
||
488 | JR C,.L1 |
||
489 | LD A,C ;usbstack_wPayload |
||
490 | .L1 LD (vars.xferLen),A |
||
491 | LD A,(usbstack_pid) |
||
492 | CP PID_IN |
||
493 | JR NZ,.L2 |
||
494 | LD A,sDATA0_RD |
||
495 | JP .L8 |
||
496 | |||
497 | .L2 CP PID_OUT |
||
498 | LD A,(vars.xferLen) |
||
499 | JR NZ,.L6 |
||
500 | OR A |
||
501 | JR Z,.L3 |
||
502 | LD DE,(vars.data0) |
||
503 | LD D,A |
||
504 | LD HL,(usbstack_buffer) |
||
505 | CALL SL_WRITEBUF |
||
506 | .L3 LD A,sDATA0_WR |
||
507 | LD (vars.cmd),A |
||
508 | LD HL,(usbstack_endpoint) |
||
509 | LD H,0 |
||
510 | LD D,H |
||
511 | LD BC,uDev_bData1 |
||
512 | ADD HL,BC |
||
513 | LD A,(vars.bFlags) |
||
514 | AND %10111111 |
||
515 | LD B,A |
||
516 | LD A,(HL) |
||
517 | RRCA |
||
518 | RRCA |
||
519 | AND %01000000 |
||
520 | OR B |
||
521 | LD (vars.bFlags),A |
||
522 | LD HL,(usbstack_endpoint) |
||
523 | LD H,D |
||
524 | LD BC,uDev_bData1 |
||
525 | ADD HL,BC |
||
526 | LD A,(HL) |
||
527 | OR A |
||
528 | LD A,1 |
||
529 | JR Z,.L5 |
||
530 | XOR A |
||
531 | .L5 LD HL,(usbstack_endpoint) |
||
532 | LD H,D |
||
533 | LD BC,uDev_bData1 |
||
534 | ADD HL,BC |
||
535 | LD (HL),A |
||
536 | LD HL,(vars.bFlags) |
||
537 | BIT B_bData1,L |
||
538 | JR Z,.L9 |
||
539 | LD HL,vars.cmd |
||
540 | SET 6,(HL) |
||
541 | JR .L9 |
||
542 | |||
543 | .L6 OR A |
||
544 | JR Z,.L7 |
||
545 | LD A,(usbstack_setup_wLength) |
||
546 | LD (vars.intr),A |
||
547 | LD HL,usbstack_setup_bmRequest |
||
548 | LD DE,vars.SL_OUT |
||
549 | LD BC,SetupPKG_len |
||
550 | LDIR |
||
551 | LD A,(vars.xferLen) |
||
552 | LD DE,(vars.data0) |
||
553 | LD D,A |
||
554 | LD HL,vars.SL_OUT |
||
555 | CALL SL_WRITEBUF |
||
556 | LD HL,(vars.intr) |
||
557 | LD H,0 |
||
558 | LD (usbstack_setup_wLength),HL |
||
559 | .L7 LD A,sDATA0_WR |
||
560 | .L8 LD (vars.cmd),A |
||
561 | .L9 LD A,(usbstack_endpoint) |
||
562 | OR A |
||
563 | JR NZ,.L10 |
||
564 | LD A,(usbstack_pid) |
||
565 | CP PID_SETUP |
||
566 | JR Z,.L10 |
||
567 | LD HL,vars.cmd |
||
568 | SET 6,(HL) |
||
569 | .L10 LD HL,usbstack_pid |
||
570 | LD A,(usbstack_endpoint) |
||
571 | AND 0x0F |
||
572 | OR (HL) |
||
573 | LD L,A |
||
574 | LD H,EP0Status |
||
575 | CALL SL_WRITE |
||
576 | LD HL,(usbstack_usbaddr) |
||
577 | LD H,EP0Counter |
||
578 | CALL SL_WRITE |
||
579 | LD HL,(vars.data0) |
||
580 | LD H,EP0Address |
||
581 | CALL SL_WRITE |
||
582 | LD HL,(vars.xferLen) |
||
583 | LD H,EP0XferLen |
||
584 | CALL SL_WRITE |
||
585 | CALL S_0178 |
||
586 | .L11 LD H,IntStatus |
||
587 | CALL SL_READ |
||
588 | LD (vars.intr),A |
||
589 | BIT 6,A |
||
590 | JR NZ,.L12 |
||
591 | BIT 5,A |
||
592 | JR Z,.L13 |
||
593 | .L12 LD HL,vars.bFlags |
||
594 | SET B_DATA_STOP,(HL) |
||
595 | XOR A |
||
596 | RET |
||
597 | |||
598 | .L13 BIT 0,A |
||
599 | JR Z,.L11 |
||
600 | LD HL,IntStatus << 8 + INT_CLEAR |
||
601 | CALL SL_WRITE |
||
602 | LD H,EP0Status |
||
603 | CALL SL_READ |
||
604 | LD (vars.result),A |
||
605 | LD H,EP0Counter |
||
606 | CALL SL_READ |
||
607 | LD (vars.remainder),A |
||
608 | LD A,(vars.result) |
||
609 | BIT 0,A |
||
610 | JP Z,.L20 |
||
611 | LD A,(usbstack_pid) |
||
612 | CP PID_SETUP |
||
613 | JP Z,.L25 |
||
614 | CP PID_OUT |
||
615 | JP Z,.L25 |
||
616 | CP PID_IN |
||
617 | JP NZ,.L20 |
||
618 | LD HL,(usbstack_wLen) |
||
619 | LD BC,(vars.xferLen) |
||
620 | XOR A |
||
621 | LD B,A |
||
622 | SBC HL,BC |
||
623 | LD (usbstack_wLen),HL |
||
624 | LD HL,vars.cmd |
||
625 | LD A,0x40 |
||
626 | XOR (HL) |
||
627 | LD (HL),A |
||
628 | LD HL,vars.dataX |
||
629 | INC (HL) |
||
630 | LD HL,vars.xferLen |
||
631 | LD BC,vars.remainder |
||
632 | LD A,(BC) |
||
633 | CP (HL) |
||
634 | LD A,(HL) |
||
635 | JR NZ,.L14 |
||
636 | XOR A |
||
637 | .L14 LD (vars.bufLen),A |
||
638 | LD A,(BC) |
||
639 | OR A |
||
640 | JR NZ,.L17 |
||
641 | LD HL,(usbstack_wLen) |
||
642 | LD A,H |
||
643 | OR L |
||
644 | JR Z,.L17 |
||
645 | LD A,(vars.dataX) |
||
646 | BIT 0,A |
||
647 | LD A,(vars.data0) |
||
648 | JR Z,.L15 |
||
649 | LD A,(vars.data1) |
||
650 | .L15 LD (vars.addr),A |
||
651 | LD BC,(usbstack_wPayload) |
||
652 | XOR A |
||
653 | LD B,A |
||
654 | SBC HL,BC |
||
655 | LD A,(usbstack_wLen) |
||
656 | JR C,.L16 |
||
657 | LD A,(usbstack_wPayload) |
||
658 | .L16 LD (vars.xferLen),A |
||
659 | LD HL,vars.cmd |
||
660 | SET 5,(HL) |
||
661 | LD L,A |
||
662 | LD H,EP0XferLen |
||
663 | CALL SL_WRITE |
||
664 | LD HL,(vars.addr) |
||
665 | LD H,EP0Address |
||
666 | CALL SL_WRITE |
||
667 | CALL S_0178 |
||
668 | .L17 LD A,(vars.bufLen) |
||
669 | OR A |
||
670 | JR Z,.L19 |
||
671 | LD D,A |
||
672 | LD A,(vars.dataX) |
||
673 | BIT 0,A |
||
674 | LD HL,vars.data1 |
||
675 | JR Z,.L18 |
||
676 | LD HL,vars.data0 |
||
677 | .L18 LD E,(HL) |
||
678 | LD HL,(usbstack_buffer) |
||
679 | PUSH HL |
||
680 | CALL SL_READBUF |
||
681 | POP HL |
||
682 | LD BC,(vars.bufLen) |
||
683 | LD B,0 |
||
684 | ADD HL,BC |
||
685 | LD (usbstack_buffer),HL |
||
686 | .L19 LD A,(vars.remainder) |
||
687 | OR A |
||
688 | JR NZ,.L25 |
||
689 | LD HL,(usbstack_wLen) |
||
690 | LD A,H |
||
691 | OR L |
||
692 | JR Z,.L25 |
||
693 | .L20 LD A,(vars.result) |
||
694 | BIT 6,A |
||
695 | JR Z,.L21 |
||
696 | CALL S_0178 |
||
697 | XOR A |
||
698 | LD (vars.result),A |
||
699 | .L21 BIT 2,A |
||
700 | JR Z,.L24 |
||
701 | LD A,(usbstack_endpoint) |
||
702 | OR A |
||
703 | JR NZ,.L23 |
||
704 | LD HL,vars.timeout |
||
705 | INC (HL) |
||
706 | LD A,(HL) |
||
707 | CP TIMEOUT_RETRY |
||
708 | JR C,.L22 |
||
709 | DEC (HL) |
||
710 | JR .L25 |
||
711 | |||
712 | .L23 LD HL,vars.bFlags |
||
713 | SET B_TIMEOUT_ERR,(HL) |
||
714 | JR .L25 |
||
715 | |||
716 | .L22 CALL S_0178 |
||
717 | .L24 LD A,(vars.result) |
||
718 | LD B,A |
||
719 | OR A |
||
720 | LD A,TRUE |
||
721 | RET M |
||
722 | BIT 5,B |
||
723 | JP Z,.L11 |
||
724 | .L25 LD A,(vars.result) |
||
725 | BIT 0,A |
||
726 | RET Z |
||
727 | LD A,TRUE |
||
728 | RET |
||
729 | |||
730 | S_0178: LD HL,IntStatus << 8 + INT_CLEAR |
||
731 | CALL SL_WRITE |
||
732 | LD HL,(vars.cmd) |
||
733 | LD H,EP0Control |
||
734 | JP SL_WRITE |
||
735 | |||
736 | ;input: |
||
737 | ;none |
||
738 | ep0Xfer: XOR A |
||
739 | LD (usbstack_endpoint),A |
||
740 | LD A,PID_SETUP |
||
741 | LD (usbstack_pid),A |
||
742 | LD HL,8 |
||
743 | LD (usbstack_wLen),HL |
||
744 | CALL usbXfer |
||
745 | OR A |
||
746 | RET Z |
||
747 | LD A,PID_IN |
||
748 | LD (usbstack_pid),A |
||
749 | LD HL,(usbstack_setup_wLength) |
||
750 | LD (usbstack_wLen),HL |
||
751 | LD A,H |
||
752 | OR L |
||
753 | JR Z,.L1 |
||
754 | LD A,(usbstack_setup_bmRequest) |
||
755 | OR A |
||
756 | JP P,.L2 |
||
757 | LD A,PID_IN |
||
758 | LD (usbstack_pid),A |
||
759 | CALL usbXfer |
||
760 | OR A |
||
761 | RET Z |
||
762 | LD A,PID_OUT |
||
763 | JR .L3 |
||
764 | |||
765 | .L2 LD A,PID_OUT |
||
766 | LD (usbstack_pid),A |
||
767 | CALL usbXfer |
||
768 | OR A |
||
769 | RET Z |
||
770 | LD A,PID_IN |
||
771 | .L3 LD (usbstack_pid),A |
||
772 | .L1 LD HL,0 |
||
773 | LD (usbstack_wLen),HL |
||
774 | CALL usbXfer |
||
775 | OR A |
||
776 | RET Z |
||
777 | LD A,TRUE |
||
778 | RET |
||
779 | |||
780 | ;input: |
||
781 | ;BC - |
||
782 | ;DE - |
||
783 | epBulkSend: LD A,1 |
||
784 | LD (usbstack_usbaddr),A |
||
785 | LD A,(usbstack_epbulkout) |
||
786 | LD (usbstack_endpoint),A |
||
787 | LD A,PID_OUT |
||
788 | LD (usbstack_pid),A |
||
789 | LD A,64 |
||
790 | LD (usbstack_wPayload),A |
||
791 | LD (usbstack_wLen),BC ; । |
||
792 | LD (usbstack_buffer),DE ; |
||
793 | LD D,B |
||
794 | LD E,C |
||
795 | .L2 LD A,D |
||
796 | OR E |
||
797 | LD A,TRUE |
||
798 | RET Z |
||
799 | LD HL,(usbstack_wPayload) |
||
800 | XOR A |
||
801 | LD H,A |
||
802 | LD (usbstack_wLen),HL |
||
803 | SBC HL,DE |
||
804 | JR C,.L1 |
||
805 | LD (usbstack_wLen),BC |
||
806 | .L1 PUSH DE |
||
807 | CALL usbXfer |
||
808 | POP HL |
||
809 | AND A |
||
810 | RET Z |
||
811 | LD BC,(usbstack_wLen) |
||
812 | SBC HL,BC |
||
813 | EX DE,HL |
||
814 | LD HL,(usbstack_buffer) |
||
815 | ADD HL,BC |
||
816 | LD (usbstack_buffer),HL |
||
817 | JR .L2 |
||
818 | |||
819 | ;input: |
||
820 | ;BC - |
||
821 | ;DE - |
||
822 | epBulkRcv: LD A,1 |
||
823 | LD (usbstack_usbaddr),A |
||
824 | LD A,(usbstack_epbulkin) |
||
825 | LD (usbstack_endpoint),A |
||
826 | LD A,PID_IN |
||
827 | LD (usbstack_pid),A |
||
828 | LD A,64 |
||
829 | LD (usbstack_wPayload),A |
||
830 | LD (usbstack_wLen),BC ; । |
||
831 | LD (usbstack_buffer),DE ; |
||
832 | LD A,B |
||
833 | OR C |
||
834 | LD A,TRUE |
||
835 | RET Z |
||
836 | CALL usbXfer |
||
837 | AND A |
||
838 | RET Z |
||
839 | LD A,TRUE |
||
840 | RET |
||
841 | |||
842 | ;input: |
||
843 | ;E- |
||
844 | SetAddress: LD A,SET_ADDRESS |
||
845 | LD (usbstack_setup_bRequest),A |
||
846 | XOR A |
||
847 | LD (usbstack_usbaddr),A |
||
848 | LD (usbstack_setup_bmRequest),A |
||
849 | LD L,E |
||
850 | LD H,A |
||
851 | LD (usbstack_setup_wValue),HL |
||
852 | LD L,A |
||
853 | LD (usbstack_setup_wIndex),HL |
||
854 | LD (usbstack_setup_wLength),HL |
||
855 | JR CALL_EP0XFER |
||
856 | |||
857 | ;input: |
||
858 | ;none |
||
859 | Set_Configuration: |
||
860 | LD A,SET_CONFIG |
||
861 | LD (usbstack_setup_bRequest),A |
||
862 | XOR A |
||
863 | LD (usbstack_setup_bmRequest),A |
||
864 | LD H,A |
||
865 | LD L,A |
||
866 | LD (usbstack_setup_wIndex),HL |
||
867 | LD (usbstack_setup_wLength),HL |
||
868 | LD (usbstack_buffer),HL |
||
869 | JR CALL_EP0XFER |
||
870 | |||
871 | ;input: |
||
872 | ;none |
||
873 | GetDesc: LD A,0x80 |
||
874 | LD (usbstack_setup_bmRequest),A |
||
875 | LD A,GET_DESCRIPTOR |
||
876 | LD (usbstack_setup_bRequest),A |
||
877 | LD A,(uDev_wPayLoad) |
||
878 | LD (usbstack_wPayload),A |
||
879 | LD HL,(usbstack_setup_wValue) |
||
880 | LD A,L |
||
881 | LD L,H |
||
882 | LD H,A |
||
883 | LD (usbstack_setup_wValue),HL |
||
884 | CALL_EP0XFER PUSH DE |
||
885 | CALL ep0Xfer |
||
886 | POP DE |
||
887 | RET |
||
888 | |||
889 | ;input: |
||
890 | ;E - usbaddr |
||
891 | EnumUsbDev: LD HL,0x40 |
||
892 | LD (uDev_wPayLoad),HL |
||
893 | DEC E |
||
894 | INC E |
||
895 | CALL Z,USBReset |
||
896 | XOR A |
||
897 | LD (usbstack_usbaddr),A |
||
898 | LD HL,1 |
||
899 | LD (usbstack_setup_wValue),HL |
||
900 | DEC L |
||
901 | LD (usbstack_setup_wIndex),HL |
||
902 | LD L,0x12 |
||
903 | LD (usbstack_setup_wLength),HL |
||
904 | LD HL,vars.DBUF |
||
905 | LD (usbstack_buffer),HL |
||
906 | CALL GetDesc |
||
907 | OR A |
||
908 | RET Z |
||
909 | LD HL,(vars.DBUF+7) |
||
910 | LD H,0 |
||
911 | LD (uDev_wPayLoad),HL |
||
912 | CALL SetAddress |
||
913 | OR A |
||
914 | RET Z |
||
915 | LD A,E |
||
916 | LD (usbstack_usbaddr),A |
||
917 | LD HL,(vars.DBUF) |
||
918 | LD H,0 |
||
919 | LD (usbstack_setup_wLength),HL |
||
920 | LD L,1 |
||
921 | LD (usbstack_setup_wValue),HL |
||
922 | DEC L |
||
923 | LD (usbstack_setup_wIndex),HL |
||
924 | LD HL,vars.DBUF |
||
925 | LD (usbstack_buffer),HL |
||
926 | LD IXH,A |
||
927 | CALL GetDesc |
||
928 | OR A |
||
929 | RET Z |
||
930 | LD A,(vars.DBUF+14) |
||
931 | LD (uDev_iMfg),A |
||
932 | LD A,(vars.DBUF+15) |
||
933 | LD (uDev_iPdt),A |
||
934 | LD HL,vars.DBUF+8 |
||
935 | LD C,(HL) |
||
936 | INC HL |
||
937 | LD B,(HL) |
||
938 | INC HL |
||
939 | LD (uDev_wVID),BC |
||
940 | LD C,(HL) |
||
941 | INC HL |
||
942 | LD B,(HL) |
||
943 | LD (uDev_wPID),BC |
||
944 | LD A,IXH |
||
945 | LD (usbstack_usbaddr),A |
||
946 | LD HL,2 |
||
947 | LD (usbstack_setup_wValue),HL |
||
948 | LD L,H |
||
949 | LD (usbstack_setup_wIndex),HL |
||
950 | LD L,0x40 |
||
951 | LD (usbstack_setup_wLength),HL |
||
952 | LD HL,vars.DBUF |
||
953 | LD (usbstack_buffer),HL |
||
954 | CALL GetDesc |
||
955 | OR A |
||
956 | RET Z |
||
957 | LD HL,vars.DBUF+14 |
||
958 | LD A,(HL) |
||
959 | LD (uDev_bClass),A |
||
960 | DEC HL |
||
961 | LD A,MAX_EP |
||
962 | CP (HL) |
||
963 | JR C,.L1 |
||
964 | LD A,(HL) |
||
965 | .L1 LD (uDev_bNumOfEPs),A |
||
966 | LD A,(uDev_bClass) |
||
967 | CP 8 |
||
968 | JR NZ,.L2 |
||
969 | LD HL,vars.bFlags |
||
970 | SET B_bMassDevice,(HL) |
||
971 | .L2 LD A,IXH |
||
972 | LD (usbstack_usbaddr),A |
||
973 | LD HL,1 |
||
974 | LD (usbstack_setup_wValue),HL |
||
975 | CALL Set_Configuration |
||
976 | OR A |
||
977 | RET Z |
||
978 | LD IXL,0 |
||
979 | LD D,1 |
||
980 | .L3 LD A,(uDev_bNumOfEPs) |
||
981 | CP D |
||
982 | LD A,TRUE |
||
983 | RET C |
||
984 | LD HL,vars.DBUF+20 |
||
985 | LD C,IXL |
||
986 | LD B,0 |
||
987 | ADD HL,BC |
||
988 | LD A,(HL) |
||
989 | LD HL,uDev_bEPAddr |
||
990 | LD C,D |
||
991 | ADD HL,BC |
||
992 | LD (HL),A |
||
993 | LD HL,vars.DBUF+21 |
||
994 | LD C,IXL |
||
995 | ADD HL,BC |
||
996 | LD A,(HL) |
||
997 | LD HL,uDev_bAttr |
||
998 | LD C,D |
||
999 | ADD HL,BC |
||
1000 | LD (HL),A |
||
1001 | LD HL,uDev_wPayLoad |
||
1002 | LD C,D |
||
1003 | ADD HL,BC |
||
1004 | ADD HL,BC |
||
1005 | PUSH HL |
||
1006 | LD HL,vars.DBUF+23 |
||
1007 | LD C,IXL |
||
1008 | ADD HL,BC |
||
1009 | POP BC |
||
1010 | INC BC |
||
1011 | LD A,(HL) |
||
1012 | LD (BC),A |
||
1013 | INC HL |
||
1014 | DEC BC |
||
1015 | LD A,(HL) |
||
1016 | LD (BC),A |
||
1017 | LD HL,vars.DBUF+24 |
||
1018 | LD C,IXL |
||
1019 | ADD HL,BC |
||
1020 | LD A,(HL) |
||
1021 | LD HL,uDev_bInterval |
||
1022 | LD C,D |
||
1023 | LD B,0 |
||
1024 | ADD HL,BC |
||
1025 | ADD HL,BC |
||
1026 | LD (HL),A |
||
1027 | INC HL |
||
1028 | LD (HL),B |
||
1029 | LD HL,uDev_bData1 |
||
1030 | LD C,D |
||
1031 | ADD HL,BC |
||
1032 | LD (HL),B |
||
1033 | LD A,IXL |
||
1034 | ADD A,7 |
||
1035 | LD IXL,A |
||
1036 | INC D |
||
1037 | LD HL,uDev_bAttr |
||
1038 | ADD HL,BC |
||
1039 | LD B,(HL) |
||
1040 | DEC B |
||
1041 | DEC B |
||
1042 | JP NZ,.L3 |
||
1043 | LD HL,uDev_bEPAddr |
||
1044 | ADD HL,BC |
||
1045 | LD A,(HL) |
||
1046 | OR A |
||
1047 | LD HL,uDev_bEPAddr |
||
1048 | ADD HL,BC |
||
1049 | LD A,(HL) |
||
1050 | LD (usbstack_epbulkout),A |
||
1051 | JP P,.L3 |
||
1052 | LD (usbstack_epbulkin),A |
||
1053 | JP .L3 |
||
1054 | |||
1055 | T_DATA0: DB "USBC",0x60,0xA6,0x24,0xDE |
||
1056 | DB 0x24,0,0,0,0x80,0,6 |
||
1057 | DB SPC_CMD_INQUIRY |
||
1058 | DB 0,0,0,0x24,0,0,0,0 |
||
1059 | |||
1060 | IF 0 |
||
1061 | vars |
||
1062 | |||
1063 | .bFlags DW 0 |
||
1064 | |||
1065 | .xferLen DB 0 |
||
1066 | .data0 DB 0 |
||
1067 | .data1 DB 0 |
||
1068 | .cmd DB 0 |
||
1069 | .intr DB 0 |
||
1070 | .result DB 0 |
||
1071 | .remainder DB 0 |
||
1072 | .dataX DB 0 |
||
1073 | .bufLen DB 0 |
||
1074 | .addr DB 0 |
||
1075 | .timeout DB 0 |
||
1076 | |||
1077 | .SL_OUT DB 0 dup (8) |
||
1078 | .DBUF DB 0 dup (64);512;1024 |
||
1079 | .T_OUT DB 0 dup (32) |
||
1080 | |||
1081 | uDev pUSBDEV |
||
1082 | usbstack PKG |
||
1083 | ENDIF |
||
1084 | ECOMUSBF |
||
1085 |