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 |