PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 1 PC Machine Code I Line File: A 1 COMMENT /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A 2 (C) Copyright Intel Corp., 1996 A 3 A 4 File: newloop.asm A 5 A 6 Universal Serial Bus 930 Test firmware A 7 A 8 Revision History A 9 --------------------------------------------- A 10 0.3 08-07-96 Myngoc Le A 11 0.2 05-27-96 Abdul Rahman Ismail A 12 0.1 02-13-96 Joe DrAgony A 13 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ A 14 B 0 INCLUDE "82930AA.inc" B 1 ;####################################################################### B 2 ;# $Source: q:/include/82930hx.inc $ # B 3 ;# $Revision: 1.0 $ # B 4 ;# # B 5 ;# $Date: 1996/04/18 20:02:32 $ # B 6 ;# # B 7 ;# Author: Joe Murray # B 8 ;# $Locker: $ # B 9 ;# # B 10 ;# Platform: 82930AA DUT on ISA SV Board # B 11 ;# # B 12 ;# Description: # B 13 ;# This file contains EQUates for HUB SFRs. # B 14 ;# B 15 ;# * * * Do NOT Include this file directly! * * * # B 16 ;# You should define PROC equ "something" and include 82930.inc # B 17 ;# # B 18 ;# ------------------------------------------------------------------- # B 19 ;# REVISION HISTORY: # B 20 ;# ------------------------------------------------------------------- # B 21 ;# $Log: hello.asm,v $ B 22 ;# Revision 1.0 1996/06/20 20:02:32 Joe Murray B 23 ;# Initial revision B 24 ;# B 25 ;####################################################################### B 26 B 27 ;############################################################################## B 28 ;# Filename: hub_def.asm B 29 ;# B 30 ;# Author: Joe Murray. B 31 ;# B 32 ;# Date: 22/Feb/96 B 33 ;# B 34 ;# Description: EQUates for the 82930AA SFRs B 35 ;# B 36 ;############################################################################## B 37 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 2 PC Machine Code I Line File: 82930AA.inc 00000085 B 38 DPXL: EQU 85h B 39 000000FF B 40 SBTM: EQU 0FFH 000000F1 B 41 EPINDEX: EQU 0F1H B 42 000000F2 B 43 TXSTAT: EQU 0F2H 000000F2 B 44 TXSTAT0: EQU 0F2H 000000F2 B 45 TXSTAT1: EQU 0F2H 000000F2 B 46 TXSTAT2: EQU 0F2H 000000F2 B 47 TXSTAT3: EQU 0F2H 000000F2 B 48 HTXSTAT0: EQU 0F2H B 49 000000F3 B 50 TXDAT: EQU 0F3H 000000F3 B 51 TXDAT0: EQU 0F3H 000000F3 B 52 TXDAT1: EQU 0F3H 000000F3 B 53 TXDAT2: EQU 0F3H 000000F3 B 54 TXDAT3: EQU 0F3H 000000F3 B 55 FTXDAT0: EQU 0F3H 000000F3 B 56 FTXDAT1: EQU 0F3H 000000F3 B 57 FTXDAT2: EQU 0F3H 000000F3 B 58 FTXDAT3: EQU 0F3H 000000F3 B 59 HTXDAT0: EQU 0F3H 000000F3 B 60 HTXDAT1: EQU 0F3H B 61 000000F4 B 62 TXCON: EQU 0F4H 000000F4 B 63 TXCON0: EQU 0F4H 000000F4 B 64 TXCON1: EQU 0F4H 000000F4 B 65 TXCON2: EQU 0F4H 000000F4 B 66 TXCON3: EQU 0F4H B 67 000000F4 B 68 FTXCON0: EQU 0F4H 000000F4 B 69 FTXCON1: EQU 0F4H 000000F4 B 70 FTXCON2: EQU 0F4H 000000F4 B 71 FTXCON3: EQU 0F4H 000000F4 B 72 HTXCON0: EQU 0F4H B 73 000000F5 B 74 TXFLG: EQU 0F5H 000000F5 B 75 TXFLG0: EQU 0F5H 000000F5 B 76 TXFLG1: EQU 0F5H 000000F5 B 77 TXFLG2: EQU 0F5H 000000F5 B 78 TXFLG3: EQU 0F5H 000000F5 B 79 FTXFLG0: EQU 0F5H 000000F5 B 80 FTXFLG1: EQU 0F5H 000000F5 B 81 FTXFLG2: EQU 0F5H 000000F5 B 82 FTXFLG3: EQU 0F5H 000000F5 B 83 HTXFLG0: EQU 0F5H B 84 B 85 B 86 000000F6 B 87 TXCNT0: EQU 0F6h 000000F6 B 88 TXCNT1: EQU 0F6h 000000F6 B 89 TXCNT2: EQU 0F6h PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 3 PC Machine Code I Line File: 82930AA.inc 000000F6 B 90 TXCNT3: EQU 0F6h B 91 000000F6 B 92 TXCNT: EQU 0F6H 000000F6 B 93 FTXCNTO: EQU 0F6H 000000F6 B 94 FTXCNT1: EQU 0F6H 000000F6 B 95 FTXCNT2: EQU 0F6H 000000F6 B 96 FTXCNT3: EQU 0F6H 000000F6 B 97 HTXCNTO: EQU 0F6H 000000F6 B 98 TXCNTL: EQU 0F6H 000000F7 B 99 TXCNTH: EQU 0F7H B 100 000000E8 B 101 HIS: EQU 0E8H B 102 000000EF B 103 UICECON: EQU 0EFH B 104 000000E1 B 105 EPCON: EQU 0E1H 000000E1 B 106 EPCON0: EQU 0E1H 000000E1 B 107 EPCON1: EQU 0E1H 000000E1 B 108 EPCON2: EQU 0E1H 000000E1 B 109 EPCON3: EQU 0E1H 000000E1 B 110 HEPCON0: EQU 0E1H B 111 000000E2 B 112 RXSTAT: EQU 0E2H 000000E2 B 113 RXSTAT0: EQU 0E2H 000000E2 B 114 RXSTAT1: EQU 0E2H 000000E2 B 115 RXSTAT2: EQU 0E2H 000000E2 B 116 RXSTAT3: EQU 0E2H 000000E2 B 117 HRXSTAT0: EQU 0E2H B 118 000000E3 B 119 RXDAT: EQU 0E3H 000000E3 B 120 RXDAT0: EQU 0E3H 000000E3 B 121 RXDAT1: EQU 0E3H 000000E3 B 122 RXDAT2: EQU 0E3H 000000E3 B 123 RXDAT3: EQU 0E3H B 124 000000E3 B 125 FRXDAT0: EQU 0E3H 000000E3 B 126 FRXDAT1: EQU 0E3H 000000E3 B 127 FRXDAT2: EQU 0E3H 000000E3 B 128 FRXDAT3: EQU 0E3H 000000E3 B 129 HRXDAT0: EQU 0E3H B 130 000000E4 B 131 RXCON: EQU 0E4H 000000E4 B 132 RXCON0: EQU 0E4H 000000E4 B 133 RXCON1: EQU 0E4H 000000E4 B 134 RXCON2: EQU 0E4H 000000E4 B 135 RXCON3: EQU 0E4H B 136 000000E4 B 137 FRXCON0: EQU 0E4H 000000E4 B 138 FRXCON1: EQU 0E4H 000000E4 B 139 FRXCON2: EQU 0E4H 000000E4 B 140 FRXCON3: EQU 0E4H 000000E4 B 141 HRXCON0: EQU 0E4H PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 4 PC Machine Code I Line File: 82930AA.inc B 142 000000E5 B 143 RXFLG: EQU 0E5H 000000E5 B 144 RXFLG0: EQU 0E5H 000000E5 B 145 RXFLG1: EQU 0E5H 000000E5 B 146 RXFLG2: EQU 0E5H 000000E5 B 147 RXFLG3: EQU 0E5H B 148 B 149 000000E5 B 150 FRXFLG: EQU 0E5H 000000E5 B 151 FRXFLG0: EQU 0E5H 000000E5 B 152 FRXFLG1: EQU 0E5H 000000E5 B 153 FRXFLG2: EQU 0E5H 000000E5 B 154 FRXFLG3: EQU 0E5H 000000E5 B 155 HRXFLG0: EQU 0E5H B 156 B 157 000000E6 B 158 RXCNT0: EQU 0E6h 000000E6 B 159 RXCNT1: EQU 0E6h 000000E6 B 160 RXCNT2: EQU 0E6h 000000E6 B 161 RXCNT3: EQU 0E6h B 162 000000E6 B 163 RXCNT: EQU 0E6H 000000E6 B 164 FRXCNT0: EQU 0E6H 000000E6 B 165 FRXCNT1: EQU 0E6H 000000E6 B 166 FR2XCNT2: EQU 0E6H 000000E6 B 167 FRXCNT3: EQU 0E6H 000000E6 B 168 HRXCNT0: EQU 0E6H 000000E6 B 169 RXCNTL: EQU 0E6H 000000E7 B 170 RXCNTH: EQU 0E7H B 171 000000DF B 172 UPWCON: EQU 0DFH 000000D2 B 173 SOFL: EQU 0D2H 000000D3 B 174 SOFH: EQU 0D3H 000000D4 B 175 UPINDEX: EQU 0D4H B 176 000000D5 B 177 UPSTCH: EQU 0D5H 000000D5 B 178 UPSTCH1: EQU 0D5H 000000D5 B 179 UPSTCH2: EQU 0D5H 000000D5 B 180 UPSTCH3: EQU 0D5H 000000D5 B 181 UPSTCH4: EQU 0D5H B 182 000000D7 B 183 UPSTAT: EQU 0D7H 000000D7 B 184 UPSTAT1: EQU 0D7H 000000D7 B 185 UPSTAT2: EQU 0D7H 000000D7 B 186 UPSTAT3: EQU 0D7H 000000D7 B 187 UPSTAT4: EQU 0D7H B 188 000000CF B 189 UPCON: EQU 0CFH 000000CF B 190 UPCON1: EQU 0CFH 000000CF B 191 UPCON2: EQU 0CFH 000000CF B 192 UPCON3: EQU 0CFH 000000CF B 193 UPCON4: EQU 0CFH PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 5 PC Machine Code I Line File: 82930AA.inc B 194 B 195 B 196 000000B5 B 197 HFRTMRL: EQU 0B5H 000000B6 B 198 HFRTMRH: EQU 0B6H 000000AE B 199 HSTAT: EQU 0AEH 000000A1 B 200 HIE: EQU 0A1H 000000A2 B 201 FIE: EQU 0A2H B 202 ;FIS: EQU 0C0h 000000C0 B 203 SBI: EQU 0C0H ; Backward COmpatible 0000009A B 204 UPPWR: EQU 09AH 00000097 B 205 HADDR: EQU 097H 0000008F B 206 FADDR: EQU 08FH B 207 B 208 ;---------------------------------- B 209 ;- INTERRUPT REGISTERS B 210 ;---------------------------------- 000000B1 B 211 IEA: EQU 0B1H B 212 000000A8 B 213 IEN0 EQU 0A8H 000000B2 B 214 IPA: EQU 0B2H 000000B3 B 215 IPA1: EQU 0B3H B 216 000000B1 B 217 AA_IE1: EQU 0B1H B 218 B 219 ;IE0: EQU 0A8H B 220 ;IPH0: EQU 0B7H B 221 ;IPL0: EQU 0B8H 000000B3 B 222 IPH1: EQU 0B3H 000000B2 B 223 IPL1: EQU 0B2H B 224 ;SBIE: EQU 0A2H B 225 B 226 B 227 ;---------------------------------- B 228 ;- USB INTERRUPT ENABLES B 229 ;---------------------------------- 000000B1 B 230 IEN1: EQU 0B1H B 231 B 232 ESOF: EQU IEN1.0 B 233 ;EF: EQU IEN1.1 B 234 ESR: EQU IEN1.2 B 235 B 236 ;---------------------------------- B 237 ;- PCON B 238 ;---------------------------------- B 239 ;PCON EQU 087h B 240 LC EQU PCON.5 B 241 POF EQU PCON.4 B 242 PD EQU PCON.1 B 243 IDL EQU PCON.0 B 244 B 245 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 6 PC Machine Code I Line File: 82930AA.inc B 246 B 247 ;---------------------------------- B 248 ;- PCON1 B 249 ;---------------------------------- B 250 000000DF B 251 PCON1 EQU 0DFh B 252 RWU EQU PCON1.2 B 253 ;G_RSM EQU PCON1.1 B 254 ;G_SUS EQU PCON1.0 B 255 GRSM EQU PCON1.1 B 256 GSUS EQU PCON1.0 B 257 B 258 ;---------------------------------- B 259 ;- SOFH B 260 ;---------------------------------- B 261 SFACK EQU SOFH.7 B 262 ASOF EQU SOFH.6 B 263 SOFIE EQU SOFH.5 B 264 FLOCK EQU SOFH.4 B 265 SOFDIS EQU SOFH.3 B 266 B 267 ;---------------------------------- B 268 ;- EPCON B 269 ;---------------------------------- B 270 RXSTL EQU EPCON.7 B 271 TXSTL EQU EPCON.6 B 272 CTLEP EQU EPCON.5 B 273 RXSPM EQU EPCON.4 B 274 RXIE EQU EPCON.3 B 275 RXEPEN EQU EPCON.2 B 276 TXOE EQU EPCON.1 B 277 TXEPEN EQU EPCON.7 B 278 B 279 ;---------------------------------- B 280 ;- RXSTAT B 281 ;---------------------------------- B 282 RXSEQ EQU RXSTAT.7 B 283 RXSETUP EQU RXSTAT.6 B 284 STOVW EQU RXSTAT.5 B 285 EDOVW EQU RXSTAT.4 B 286 RXDTO EQU RXSTAT.3 B 287 RXVOID EQU RXSTAT.2 B 288 RXERR EQU RXSTAT.1 B 289 RXACK EQU RXSTAT.0 B 290 B 291 ;---------------------------------- B 292 ;- TXSTAT B 293 ;---------------------------------- B 294 TXSEQ EQU TXSTAT.7 B 295 ;-- B 296 ;-- B 297 TXFLUSH EQU TXSTAT.4 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 7 PC Machine Code I Line File: 82930AA.inc B 298 TXDTO EQU TXSTAT.3 B 299 TXVOID EQU TXSTAT.2 B 300 TXERR EQU TXSTAT.1 B 301 TXACK EQU TXSTAT.0 B 302 B 303 B 304 B 305 ;---------------------------------- B 306 ;- RXCON B 307 ;---------------------------------- B 308 RXCLR EQU RXCON.7 B 309 ;- B 310 RXWS EQU RXCON.5 B 311 RXFFRC EQU RXCON.4 B 312 RXISO EQU RXCON.3 B 313 ARM EQU RXCON.2 B 314 ADVWM EQU RXCON.1 B 315 REVWP EQU RXCON.0 B 316 B 317 ;---------------------------------- B 318 ;- TXCON B 319 ;---------------------------------- B 320 TXCLR EQU TXCON.7 B 321 ;- B 322 TXWS EQU TXCON.5 B 323 TXFFRC EQU TXCON.4 B 324 TXISO EQU TXCON.3 B 325 ATM EQU TXCON.2 B 326 ADVRM EQU TXCON.1 B 327 REVRP EQU TXCON.0 B 328 B 329 B 330 ;---------------------------------- B 331 ;- FIE B 332 ;---------------------------------- B 333 FTXIE0 EQU FIE.0 B 334 FRXIE0 EQU FIE.1 B 335 FTXIE1 EQU FIE.2 B 336 FRXIE1 EQU FIE.3 B 337 FTXIE2 EQU FIE.4 B 338 FRXIE2 EQU FIE.5 B 339 FTXIE3 EQU FIE.6 B 340 FRXIE3 EQU FIE.7 B 341 B 342 ;---------------------------------- B 343 ;- FIFLG B 344 ;---------------------------------- 000000C0 B 345 FIFLG EQU 0C0H B 346 FTXD0 EQU FIFLG.0 B 347 FRXD0 EQU FIFLG.1 B 348 FTXD1 EQU FIFLG.2 B 349 FRXD1 EQU FIFLG.3 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 8 PC Machine Code I Line File: 82930AA.inc B 350 FTXD2 EQU FIFLG.4 B 351 FRXD2 EQU FIFLG.5 B 352 FTXD3 EQU FIFLG.6 B 353 FRXD3 EQU FIFLG.7 B 354 B 355 ;---------------------------------- B 356 ;- RXFLG B 357 ;---------------------------------- B 358 RXFIF1 EQU RXFLG.7 B 359 RXFIF0 EQU RXFLG.6 B 360 ;--- B 361 ;--- B 362 RXEMP EQU RXFLG.3 B 363 RXFULL EQU RXFLG.2 B 364 RXURF EQU RXFLG.1 B 365 RXOVF EQU RXFLG.0 B 366 B 367 B 368 ;---------------------------------- B 369 ;- TXFLG B 370 ;---------------------------------- B 371 TXFIF1 EQU TXFLG.7 B 372 TXFIF0 EQU TXFLG.6 B 373 ;--- B 374 ;--- B 375 TXEMP EQU TXFLG.3 B 376 TXFULL EQU TXFLG.2 B 377 TXURF EQU TXFLG.1 B 378 TXOVF EQU TXFLG.0 B 379 B 380 B 381 B 382 B 0 INCLUDE "swap.inc" B 1 COMMENT /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ B 2 (C) Copyright Intel Corp., 1996 B 3 B 4 File: swap.inc B 5 B 6 Universal Serial Bus 930 Test firmware B 7 B 8 Revision History B 9 --------------------------------------------- B 10 0.1 05-27-96 Abdul Rahman Ismail B 11 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ B 12 B 13 SWAP_BYTES: MACRO Reg1, Reg2, Reg3 B 14 mov Reg3, Reg1 B 15 mov Reg1, Reg2 B 16 mov Reg2, Reg3 B 17 ENDMAC SWAP_BYTES B 18 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 9 PC Machine Code I Line File: swap.inc B 19 DEBUG_PORT: MACRO Reg1, Immeadiate B 20 mov Reg1, gbDebugMess B 21 orl Reg1, #Immeadiate B 22 mov gbDebugMess, Reg1 B 23 mov P1, Reg1 B 24 ENDMAC DEBUG_PORT B 25 B 26 A 17 B 0 INCLUDE "ONE_OH.INC" B 1 COMMENT /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ B 2 (C) Copyright Intel Corp., 1996 B 3 B 4 File: one_oh.inc B 5 B 6 Universal Serial Bus 930 Test firmware B 7 B 8 Revision History B 9 --------------------------------------------- B 10 0.3 B 11 0.2 05-27-96 Abdul Rahman Ismail B 12 0.1 02-13-96 Joe DrAgony B 13 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ B 14 ; B 15 ; ONE_OH.INC: This file contains equates related to the operations under USB Spec. rev 1.0 B 16 ; It also includes equates for 82930 register manipulation B 17 ; B 18 B 19 ;<<<<<<<<<<<<<< B 20 ;bRequest Types B 21 ;>>>>>>>>>>>>>> B 22 00000000 B 23 GET_STATUS equ 00h 00000001 B 24 CLEAR_FEATURE equ 01h 00000002 B 25 RESERVED1 equ 02h 00000003 B 26 SET_FEATURE equ 03h 00000004 B 27 RESERVED2 equ 04h 00000005 B 28 SET_ADDRESS equ 05h 00000006 B 29 GET_DESCRIPTOR equ 06h 00000007 B 30 SET_DESCRIPTOR equ 07h 00000008 B 31 GET_CONFIGURATION equ 08h 00000009 B 32 SET_CONFIGURATION equ 09h 0000000A B 33 GET_INTERFACE equ 0Ah 0000000B B 34 SET_INTERFACE equ 0Bh 0000000C B 35 SYCH_FRAME equ 0Ch B 36 B 37 ; B 38 ;Descriptor Types B 39 ; 00000001 B 40 DEVICE_DESCR equ 01h 00000002 B 41 CONFIG_DESCR equ 02h 00000003 B 42 STRING_DESCR equ 03h PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 10 PC Machine Code I Line File: ONE_OH.INC 00000004 B 43 INTERFACE_DESCR equ 04h 00000005 B 44 ENDPOINT_DESCR equ 05h 00000006 B 45 SUSPEND_DESCR equ 06h B 46 B 47 ; B 48 ;HID specific descriptor types 00000021 B 49 HID_DESCR equ 021h 00000022 B 50 ENTITY_DESCR equ 022h B 51 B 52 ; B 53 ;Feature Selectors B 54 ; B 55 B 56 00000001 B 57 DEVICE_REMOTE_WAKEUP equ 01h 00000000 B 58 ENDPOINT_STALL equ 00h B 59 B 60 B 61 B 62 B 63 ; B 64 ;Equates for clearing bits in SBI register B 65 ; B 66 B 67 000000FE B 68 EP0_TX_CLR equ 0FEh 000000FD B 69 EP0_RX_CLR equ 0FDh B 70 000000FB B 71 EP1_TX_CLR equ 0FBh 000000F7 B 72 EP1_RX_CLR equ 0F7h B 73 000000EF B 74 EP2_TX_CLR equ 0EFh 000000DF B 75 EP2_RX_CLR equ 0DFh B 76 000000BF B 77 EP3_TX_CLR equ 0BFh 0000007F B 78 EP3_RX_CLR equ 07Fh B 79 B 80 B 81 ; B 82 ;Equates to access EP management variables B 83 ; B 84 00000800 B 85 EPRXPTROFFSET equ 0800h 00000802 B 86 EPTXPTROFFSET equ 0802h 00000804 B 87 EPDATACNTOFFSET equ 0804h B 88 B 89 ; B 90 ; Ring buffer size (actually one less...) B 91 ; 000007FF B 92 RINGBUFFSIZE equ 07FFh B 93 B 94 ; PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 11 PC Machine Code I Line File: ONE_OH.INC B 95 ;Equates for masking registers, addresses, and counters B 96 ; 0000F7FF B 97 RINGBUFFMASK equ 0F7FFh 000007FF B 98 RINGWORDMASK equ 07FFh 000000C0 B 99 FIFBITMASK equ 0C0h B 100 00000008 B 101 EP0MAXPACKET equ 08h 00000400 B 102 EP1MAXPACKET equ 0400h 00000008 B 103 EP2MAXPACKET equ 08h 00000008 B 104 EP3MAXPACKET equ 08h B 105 00000001 B 106 R_ACK equ 01h 00000002 B 107 R_ERR equ 02h 00000004 B 108 R_VOID equ 04h 00000040 B 109 R_SETUP equ 40h 00000080 B 110 R_SEQ equ 80h B 111 00000012 B 112 DEVICE_DESCRIPTOR_LENGTH equ 012h 00000019 B 113 CONFIG_DESCRIPTOR_LENGTH equ 019h B 114 00000004 B 115 GET_REQUEST_TYPE_OFFSET equ 004h B 116 00000008 B 117 SETUP_PACKET_LENGTH equ 008h A 19 A 20 ;------------- External functions - process.c A 21 ;EXTERN _SetFeature:CODE A 22 ;EXTERN _ClearFeature:CODE A 23 ;EXTERN _GetStatus:CODE A 24 A 25 ;------------- Global variables. A 26 XDEF _EP1RxPtr, _EP1TxPtr, _EP1DataCount A 27 A 28 XDEF _EP2RxPtr, _EP2TxPtr, _EP2DataCount A 29 A 30 XDEF _EP3RxPtr, _EP3TxPtr, _EP3DataCount A 31 A 32 DEFINE CCB_SEGMENT, SPACE=CODE, ORG=0ff7ff8H A 33 SEGMENT CCB_SEGMENT A 34 ; CCB0 A 35 ; - WSA1# WSA0# XALE# RD1 RD0 PAGE# SRC A 36 ; CCB1 A 37 ; - - - INTR - WSB1# WSB0# EMAP# A 38 00FF7FF8 92 A 39 db 092h ; D2 Original Binary Mode-Paged Mode 00FF7FF9 F1 A 40 db 0F1h ; F7 Normal A 41 A 42 ;TO DO A 43 ; Change Packet Transfer to use Words not bytes. 00000008 A 44 FIFO_SIZE equ 8 A 45 A 46 CSEG AT FF:0000H 00FF0000 02 0100 A 47 LJMP main PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 12 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm A 48 A 49 CSEG AT FF:0003H ; INT0# A 50 ; LJMP INT0_ISR 00FF0003 02 01FE A 51 LJMP Remote_WKup A 52 A 53 CSEG AT FF:0013H ; INT1# A 54 ; LJMP INT1_ISR 00FF0013 02 01FE A 55 LJMP Remote_WKup A 56 A 57 CSEG AT FF:0043H ; Any SOF (ISO Endpoint) 00FF0043 02 0132 A 58 LJMP SOF_ISR A 59 A 60 CSEG AT FF:004BH ; USB Function (FTXDx,FRXDx)x=0,1,2,3 00FF004B 02 0131 A 61 LJMP EPx_ISR A 62 A 63 CSEG AT FF:0053H ;USB Global Suspend/Resume 00FF0053 02 01FD A 64 LJMP SusRsm_ISR A 65 A 66 CSEG AT FF:0080H 00FF0080 28432920 31393936 A 67 CopyRight: DB '(C) 1996 Copyright Intel Corporation' 00FF0088 20436F70 79726967 00FF0090 68742049 6E74656C 00FF0098 20436F72 706F7261 00FF00A0 74696F6E A 68 A 69 CSEG AT FF:0100H 00FF0100 A 70 main: 00FF0100 758100 A 71 mov SP, #00h 00FF0103 75BE05 A 72 mov SPH, #05h ; Set the stack to start @ 00:0500h 00FF0106 75A800 A 73 mov IE0, #00h ; Disable all interrupts 00FF0109 759033 A 74 mov P1, #33h 00FF010C 7585FF A 75 mov DPXL, #0ffh ; Set DPXL to point at the FLASH device to access constants 00FF010F 12 0DFF A 76 lCall INIT_VARIABLES ; Initialize the RAM space as required 00FF0112 12 0B00 A 77 lCall INIT_USB ; Initialize the USB subsystem A 78 00FF0115 A57E8008 A 79 mov R8, #8 ; same as 00:gEP_wMaxPacketSize 00FF0119 A57A83 D806 A 80 mov 00:_gbMPSEndPoint1, R8 A 81 00FF011E A57E8008 A 82 mov R8, #8 ; same as 00:gEPB_wMaxPacketSize 00FF0122 A57A83 D807 A 83 mov 00:_gbMPSEndPoint2, R8 A 84 00FF0127 12 01A9 A 85 call _SOF_Init_FIFOs A 86 00FF012A A5A9D5D3 A 87 setb SOFIE ; Enable SOF interrupts A 88 00FF012E 02 0221 A 89 ljmp ActiveLoop ;Jump over the ISR stubs to the main loop. A 90 A 91 ;Interrupts 00FF0131 A 92 EPx_ISR: 00FF0131 32 A 93 RetI A 94 00FF0132 A 95 SOF_ISR: PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 13 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF0132 A5CA78 A 96 push R7 00FF0135 A5CA88 A 97 push R8 00FF0138 C0F1 A 98 push EPINDEX A 99 A 100 ;; Put the counter on to see something working 00FF013A A57E81D3 A 101 mov R8, SOFH A 102 ; mov R8, _gbMPSEndPoint1 00FF013E A55E8007 A 103 anl R8, #07h 00FF0142 A57A8190 A 104 mov P1, R8 A 105 A 106 ;; FOr testing only A 107 ; push R8 A 108 ; lcall _SetLEDs A 109 ; pop R8 A 110 ;; End for testing only A 111 00FF0146 A5A9C6D3 A 112 clr ASOF A 113 A 114 ; jmp SOF_ISR_exit ; ### for test only A 115 A 116 ;; First check to see if there were any overflows. If so, then A 117 ;; Just re-init the fifos and start over. This should never happen A 118 ;; for transmits 00FF014A 75F102 A 119 mov EPINDEX, #2 00FF014D A5A930F5 09 A 120 jnb TXOVF, ?SOF_Check_EP2 00FF0152 A5A9C0F5 A 121 clr TXOVF 00FF0156 12 01A9 A 122 call _SOF_Init_FIFOs 00FF0159 80 45 A 123 jmp SOF_ISR_exit A 124 00FF015B A 125 ?SOF_Check_EP2: 00FF015B 75F103 A 126 mov EPINDEX, #3 00FF015E A5A930F5 09 A 127 jnb TXOVF, ?SOF_Check_FIFOs 00FF0163 A5A9C0F5 A 128 clr TXOVF 00FF0167 12 01A9 A 129 call _SOF_Init_FIFOs 00FF016A 80 34 A 130 jmp SOF_ISR_exit A 131 A 132 00FF016C A 133 ?SOF_Check_FIFOs: 00FF016C A57E81D2 A 134 mov R8, SOFL ; preload R8 with the right value A 135 00FF0170 75F102 A 136 mov EPINDEX, #2 00FF0173 AFF5 A 137 mov R7, TXFLG 00FF0175 A55E70C0 A 138 anl R7, #0C0h ; Check if both bits are set 00FF0179 A5BE70C0 A 139 cmp R7, #0C0h 00FF017D A568 08 A 140 je ?SOF_Check_FIFO2 ; and if so, skip to next A 141 00FF0180 A57E73 D806 A 142 mov R7,_gbMPSEndPoint1 00FF0185 12 01EE A 143 call SOF_Load_FIFO A 144 00FF0188 A 145 ?SOF_Check_FIFO2: 00FF0188 75F103 A 146 mov EPINDEX, #3 00FF018B AFF5 A 147 mov R7, TXFLG PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 14 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF018D A55E70C0 A 148 anl R7, #0C0h ; Check if both bits are set 00FF0191 A5BE70C0 A 149 cmp R7, #0C0h 00FF0195 A568 08 A 150 je SOF_ISR_exit ; and if so, no room so return A 151 00FF0198 A57E73 D807 A 152 mov R7,_gbMPSEndPoint2 00FF019D 12 01EE A 153 call SOF_Load_FIFO A 154 00FF01A0 A 155 SOF_ISR_exit: 00FF01A0 D0F1 A 156 pop EPINDEX 00FF01A2 A5DA88 A 157 pop R8 00FF01A5 A5DA78 A 158 pop R7 A 159 00FF01A8 32 A 160 RetI A 161 A 162 ;; This routine will init the FIFOs for both pipes. 00FF01A9 A 163 _SOF_Init_FIFOs: 00FF01A9 A5CA88 A 164 push R8 00FF01AC A5CA78 A 165 push R7 00FF01AF C0F1 A 166 push EPINDEX A 167 00FF01B1 75F102 A 168 mov EPINDEX, #2 00FF01B4 A5A9D7F4 A 169 setb TXCLR 00FF01B8 A57E8000 A 170 mov R8, #0 00FF01BC A57E73 D806 A 171 mov R7, 00: _gbMPSEndPoint1 00FF01C1 12 01EE A 172 call SOF_Load_FIFO 00FF01C4 A57E8001 A 173 mov R8, #1 00FF01C8 12 01EE A 174 call SOF_Load_FIFO A 175 00FF01CB 75F103 A 176 mov EPINDEX, #3 00FF01CE A5A9D7F4 A 177 setb TXCLR 00FF01D2 A57E8000 A 178 mov R8, #0 00FF01D6 A57E73 D807 A 179 mov R7, 00: _gbMPSEndPoint2 00FF01DB 12 01EE A 180 call SOF_Load_FIFO 00FF01DE A57E8001 A 181 mov R8, #1 00FF01E2 12 01EE A 182 call SOF_Load_FIFO A 183 00FF01E5 D0F1 A 184 pop EPINDEX 00FF01E7 A5DA78 A 185 pop R7 00FF01EA A5DA88 A 186 pop R8 00FF01ED 22 A 187 ret A 188 A 189 A 190 ;; This routine assumes that R7 holds the number of bytes to write A 191 ;; into the FIFO, and that R8 holds the value, and that EPINDEX is A 192 ;; setup properly. Registers are preserved. 00FF01EE A 193 SOF_Load_FIFO: 00FF01EE A5CA78 A 194 push R7 A 195 00FF01F1 A 196 ?Fill_SOF_FIFO: 00FF01F1 A57A81F3 A 197 mov TXDAT, R8 00FF01F5 DF FA A 198 djnz R7, ?Fill_SOF_FIFO A 199 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 15 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF01F7 A5DA78 A 200 pop R7 00FF01FA 8FF6 A 201 mov TXCNTL, R7 00FF01FC 22 A 202 Ret A 203 00FF01FD A 204 SusRsm_ISR: 00FF01FD 32 A 205 RetI A 206 00FF01FE A 207 Remote_WKup: 00FF01FE 759020 A 208 MOV P1, #20h ; clear Suspend LED 00FF0201 A5A921DF 10 A 209 jb GRSM, resume_l ; GSUS or GRSM flag. 00FF0206 A5A9D2DF A 210 setb RWU ; Set remote_wakeup bit. 00FF020A A5A9C0DF A 211 clr GSUS ; Clear the suspend bit. 00FF020E 32 A 212 RetI A 213 00FF020F A 214 pw_down: 00FF020F 759008 A 215 MOV P1, #08h ; set LED for Suspend 00FF0212 A5A9D187 A 216 setb PD ; set Powerdown Mode bit to meet 500uA. 00FF0216 A 217 resume_l: 00FF0216 A5A9C0DF A 218 clr GSUS ; Clear Suspend bit 00FF021A A5A9C1DF A 219 clr GRSM ; Clear Resume bit 00FF021E 759020 A 220 MOV P1, #20h ; clear Suspend LED A 221 A 222 A 223 COMMENT *------------------------------------------------------------ A 224 Function name : ActiveLoop A 225 Brief Description : Monitors RX and TX on all EPs A 226 Regs preserved : No reg. is saved A 227 --------------------------------------------------------------------* A 228 SCOPE 00FF0221 A 229 ActiveLoop: 00FF0221 75A884 A 230 MOV IE0, #84h ; Enable INT1# interrupts 00FF0224 C28A A 231 CLR IT1 ; set INT1# level sensitive A 232 00FF0226 A5A921DF EB A 233 jb GRSM, resume_l ; Check for GRSM flag. 00FF022B A5A920DF DF A 234 jb GSUS, pw_down ; Check for GSUS flag. A 235 A 236 ; mov R8, SOFH A 237 ; mov P1, R8 A 238 ; clr SOFH.6 A 239 00FF0230 A 240 EP0_RX: 00FF0230 30C1 06 A 241 jnb FRXD0, EP0_TX 00FF0233 75F100 A 242 mov EPINDEX, #0 00FF0236 12 0260 A 243 lCall OUT_TOKEN1 ;82930 has received a packet from HC A 244 00FF0239 A 245 EP0_TX: 00FF0239 30C0 06 A 246 jnb FTXD0, EP1_RX 00FF023C 75F100 A 247 mov EPINDEX, #0 00FF023F 12 02BA A 248 lCall IN_TOKEN ;82930 has sent a packet to HC A 249 00FF0242 A 250 EP1_RX: 00FF0242 75F101 A 251 mov EPINDEX, #1 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 16 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF0245 A5A936E5 03 A 252 jnb RXFIF0,EP1_TX 00FF024A 12 0709 A 253 lCall ServiceEP1RX A 254 00FF024D A 255 EP1_TX: 00FF024D 75F101 A 256 mov EPINDEX, #1 00FF0250 A5A937F5 05 A 257 jnb TXFIF1, doit1t ; If bit is not set then there is room 00FF0255 A5A926F5 03 A 258 jb TXFIF0, EP2_RX ; If this bit is also set then there is no room 00FF025A 12 0769 A 259 doit1t: lCall ServiceEP1TX A 260 00FF025D A 261 EP2_RX: 00FF025D A 262 EP_Done: 00FF025D 02 0221 A 263 ljmp ActiveLoop A 264 A 265 A 266 SCOPE A 267 ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< A 268 ; This is the block that services EP0 events. A 269 ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< A 270 ;####################### FAKE INTERUPT ROUTINE ####################### A 271 ; A 272 ; SetupSeq Meaning A 273 ; 0 No Setup command pending. Any out received is treated as a A 274 ; DeviceRequest. Later steppings will actually detect a SETUP A 275 ; packet and set a status flag telling us SETUP was received. A 276 ; A 277 ; 1 DeviceRequest Received, Processing Get Request. An IN Will A 278 ; transfer data. An Out will end the transfer and set A 279 ; SetupSeq to 0 A 280 ; A 281 ; 2 DeviceRequest Received, Processing Set Request. An OUT Will A 282 ; transfer data to the buffer. An IN will end the transfer and A 283 ; set SetupSeq to 0 A 284 ; A 285 ; 3 Done bit SetRequest. Ignore all data sent until an IN A 286 ; Used for Set Address A 287 A 288 ; This block of code deals with Endpoint 0 getting a transmit event interrupt. A 289 00FF0260 A 290 OUT_TOKEN1: A 291 00FF0260 53C0FD A 292 anl SBI,#EP0_RX_CLR ; Clear the interrupt bit. A 293 A 294 ;Check sequence bit for the state that we are in. 00FF0263 A57EE4 0000 A 295 mov WR28, #00 ; point to page 00 00FF0268 A57EF4 9000 A 296 mov WR30, #LOW16(SetupSeq) 00FF026D A57E7BB0 A 297 mov R11, @DR28 00FF0271 A5BEB000 A 298 cmp R11, #0 ; Is this a setup packet?? 00FF0275 A578 06 A 299 jne ?l1 ; If not, then deal with the data phase. 00FF0278 12 02FA A 300 lcall SETUP_TOKEN ; If yes, then parse the setup command. 00FF027B 02 02B9 A 301 ljmp ?lx ; Return to caller. A 302 A 303 ; If this is not a setup command then it must be one of two things PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 17 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm A 304 ; 0 or more data packets for a set command (Seq=2) or an A 305 ; status result if Seq=1 A 306 00FF027E A5BEB001 A 307 ?l1: cmp R11, #1 ; Is this the status phase of a "GET" command? 00FF0282 A578 1B A 308 jne ?l2 ; No, so check next 00FF0285 A5A9D4E4 A 309 SETB RXCON0.4 ;Update receive FIFO state 00FF0289 A5A9D7F4 A 310 SETB TXCON0.7 ;Flush the Transmit FIFOS 00FF028D A5A9C1E1 A 311 CLR EPCON0.1 ;disable Tx Output on EP0. Respond to "IN" A 312 ;with "NAK" 00FF0291 A57EF4 9000 A 313 mov WR30,#LOW16(SetupSeq) ;Update the state machine-Expect a setup token 00FF0296 A57EB000 A 314 mov r11,#0 00FF029A A57A7BB0 A 315 mov @DR28, R11 00FF029E 80 19 A 316 sjmp ?lx A 317 A 318 ;jb RXSTAT0.6, ?l1 ; If not SETUP then must be a standard out A 319 00FF02A0 A5BEB002 A 320 ?l2: cmp R11, #2 ; Are we processing a Control Write, i.e. Set Descr... 00FF02A4 A578 05 A 321 jne ?l3 00FF02A7 12 06D2 A 322 lcall OUT_TOKEN ; If we are continue to read in the data. 00FF02AA 80 0D A 323 SJMP ?lx A 324 00FF02AC A5BEB003 A 325 ?l3: cmp R11, #3 ;If 3, then we are done setting the address and A 326 ;all outs are to be ignored until an IN terminates A 327 ;the control transfer 00FF02B0 A578 06 A 328 jne ?l4 00FF02B3 A5A9D4E4 A 329 SETB RXCON0.4 ;Clear the receive FIFO 00FF02B7 80 00 A 330 sjmp ?lx A 331 00FF02B9 A 332 ?l4: A 333 00FF02B9 22 A 334 ?lx: ret A 335 A 336 A 337 A 338 SCOPE A 339 ;##################################################################### A 340 ;#################### IN TOKEN ###################################### A 341 ;##################################################################### A 342 ; SetupSeq Meaning A 343 ; 0 No Setup command pending. Any out received is a DeviceRequest A 344 ; A 345 ; 1 DeviceRequest Received, Processing Get Request. An IN Will A 346 ; transfer data. An Out will end the transfer and set A 347 ; SetupSeq to 0 A 348 ; A 349 ; 2 DeviceRequest Received, Processing Set Request. An OUT Will A 350 ; transfer data to the buffer. An IN will end the transfer and A 351 ; set SetupSeq to 0 A 352 ; A 353 ; 3 Done SetADDRESS Request. Ignore all data sent until an IN A 354 ; Used for Set Address A 355 ; PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 18 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm A 356 ; A 357 ; For in tokens we can do 2 things. A 358 ; A 359 ; If SetupSeq = 2,3 then a IN will terminate the control transfer. A 360 A 361 A 362 SCOPE 00FF02BA A 363 IN_TOKEN: 00FF02BA 53C0FE A 364 anl SBI, #EP0_TX_CLR ; clear the interrupt bit 00FF02BD A57EB3 9000 A 365 mov R11, 00:SetupSeq ; read state variable 00FF02C2 A5BEB002 A 366 cmp R11, #02h ; Should this be the end to a setup sequence? 00FF02C6 A578 0B A 367 jne InTokenCheckSA ; If no,check for end of set address A 368 00FF02C9 A 369 ?StatusPhaseDone: 00FF02C9 A57EB000 A 370 mov R11, #00h 00FF02CD A57AB3 9000 A 371 mov 00:SetupSeq, R11 ; Set state var. to expect setup. 00FF02D2 80 25 A 372 jmp ?Return A 373 00FF02D4 A 374 InTokenCheckSA: 00FF02D4 A5BEB003 A 375 cmp R11, #03h ; Prev. Setup was SetAddress??? 00FF02D8 A578 14 A 376 jne ?SendDataBack 00FF02DB A57EA3 9006 A 377 mov R10, 00:new_addr 00FF02E0 A57AA18F A 378 mov FADDR, R10 00FF02E4 A57EB000 A 379 mov R11, #00h 00FF02E8 A57AB3 9000 A 380 mov 00:SetupSeq, R11 00FF02ED 80 0A A 381 jmp ?Return A 382 00FF02EF A 383 ?SendDataBack: 00FF02EF A5BEB001 A 384 cmp R11, #01h 00FF02F3 A578 03 A 385 jne ?Return A 386 00FF02F6 12 0A93 A 387 lCall DoControlOutput A 388 00FF02F9 A 389 ?Return: 00FF02F9 22 A 390 Ret A 391 A 392 SCOPE A 393 A 394 ;***************** SETUP_TOKEN ************************* A 395 ;***** Gets and saves SETUP DATA ************************ A 396 ;****************************************************** A 397 A 398 ;Procedure that takes SETUP data from the FIFO, Puts it in memory A 399 ;and then updates writes it to the fifo. 00FF02FA A 400 SETUP_TOKEN: 00FF02FA A57EE4 0000 A 401 MOV WR28, #0 ; USE DR28 for our data pointer 00FF02FF A57EF4 9100 A 402 mov WR30, #LOW16(COMMAND_BUFFER) 00FF0304 A57E81E6 A 403 mov R8, RXCNT0 ; Use R8 for our count register 00FF0308 A57A7B80 A 404 mov @DR28, R8 ; Store the count in the buffer 00FF030C A52EF4 0001 A 405 add WR30, #1 ; Increment mem pointer 00FF0311 A54C88 A 406 orl R8, R8 ; Set flags 00FF0314 A568 22 A 407 je ?k2 ; Zero length SETUP, error out.... PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 19 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm A 408 ;(KLS) 00FF0317 A5A9C4E2 A 409 clr EDOVW ; Release the SETUP Fifo to be read. A 410 ; Read FIFO loop 00FF031B A57EB1E3 A 411 ?k1: mov R11, RXDAT0 ; Read byte from FIFO into R11 00FF031F A57A7BB0 A 412 mov @DR28, R11 ; Store it in the buffer 00FF0323 A52EF4 0001 A 413 ADD WR30, #1 ; Increment the pointer 00FF0328 A59E8001 A 414 sub R8, #1 ; Decrement the counter 00FF032C A578 EC A 415 jne ?k1 ; Read until FIFO empty A 416 00FF032F A5A9D4E4 A 417 setb RXCON0.4 ; Set FFRC bit to update RX FIFO state A 418 ;(KLS) 00FF0333 A5A9C6E2 A 419 clr RXSETUP ; Release the FIFO to no longer NAK data. 00FF0337 80 07 A 420 sjmp PROCESS_SETUP A 421 00FF0339 A 422 ?k2: ;Should never get a zero length setup. 00FF0339 A5A9D4E4 A 423 setb RXCON0.4 ;Clear the fifo 00FF033D 02 06D1 A 424 LJMP EXIT_SETUP ;leave. A 425 SCOPE A 426 A 427 ;***************** PROCESS_SETUP ********************** A 428 ;***** PROCESS THE SETUP ****************************** A 429 ;****************************************************** A 430 SCOPE 00FF0340 A 431 PROCESS_SETUP: A 432 A 433 ;Compare bmRequest Type A 434 ;If it's it 1xxxxxxb - Get Descriptor/Get Configuration A 435 ;If it's it 0xxxxxxb - Set Address/Configuration/Set Feature/Clear Feature. A 436 00FF0340 A57EE4 0000 A 437 mov WR28, #0 00FF0345 A57EF4 9101 A 438 mov WR30, #LOW16(bmRequestType) 00FF034A A57E7BB0 A 439 mov R11, @DR28 A 440 00FF034E A55EB080 A 441 anl R11, #80h; Get/Set ?? 00FF0352 A578 03 A 442 jne DO_GET_COMMAND A 443 00FF0355 02 0440 A 444 LJMP DO_SET_COMMAND A 445 A 446 ;=================================================== A 447 ; Routines to process a get descriptor/configuration A 448 ;=================================================== A 449 00FF0358 A 450 DO_GET_COMMAND: ;Is this a get_config or a Get_Descrip. 00FF0358 A57EF4 9102 A 451 mov WR30, #LOW16(bRequest) 00FF035D A57E7BB0 A 452 mov R11, @DR28 00FF0361 A5BEB006 A 453 cmp R11, #GET_DESCRIPTOR 00FF0365 A578 03 A 454 jne CheckGetConfig 00FF0368 02 05E7 A 455 ljmp GET_DESCR_Request ;Go get Descriptor (Device & Config) A 456 00FF036B A 457 CheckGetConfig: 00FF036B A5BEB008 A 458 cmp R11, #GET_CONFIGURATION 00FF036F A578 2B A 459 jne CheckGetStatus PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 20 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm A 460 A 461 ;; Setup the pointers in in 00FF0372 A57E14 0000 A 462 mov WR2, #00h 00FF0377 A57A17 A004 A 463 mov in_rd_pntr, WR2 ;Set buffer pointer to zero A 464 00FF037C A57E14 0001 A 465 mov WR2, #01h 00FF0381 A57A17 A006 A 466 mov in_bytes_left, WR2 ;point to count variable A 467 00FF0386 A57E23 A00A A 468 mov R2, MyConfigVal 00FF038B A57A23 B000 A 469 mov IN_BUFFERS, R2 A 470 00FF0390 7A01 A 471 mov R2, #01h 00FF0392 A57A23 9000 A 472 mov SetupSeq , R2 ;Advance State Machine to next state A 473 00FF0397 12 0A93 A 474 lcall DoControlOutput A 475 00FF039A 02 06D1 A 476 ljmp EXIT_SETUP A 477 A 478 ; code for other types of bRequests 00FF039D A 479 CheckGetStatus: 00FF039D A5BEB000 A 480 cmp R11, #GET_STATUS 00FF03A1 A578 5D A 481 jne CheckGetInterface A 482 00FF03A4 A57E04 0000 A 483 mov WR0, #0 ; preload with zero A 484 00FF03A9 A57E23 9101 A 485 mov R2,bmRequestType 00FF03AE A55E2003 A 486 anl R2, #3 ; Get the recipient bits 00FF03B2 A5BE2000 A 487 cmp R2, #0 00FF03B6 A568 34 A 488 je GSDevice A 489 00FF03B9 A5BE2001 A 490 cmp R2, #1 00FF03BD A568 31 A 491 je GSInterface A 492 00FF03C0 A 493 GSEndpoint: ; We get here if this is a GetStatus to A 494 ; to and enpoint. Figure out which endpoint A 495 ; it is and then check to see if that endpoint A 496 ; is stalled 00FF03C0 C0F1 A 497 push EPINDEX ; Save current value 00FF03C2 A57E23 9105 A 498 mov R2, wIndex 00FF03C7 A55E2003 A 499 anl R2, #3 ; Get epnumber A 500 00FF03CB 8AF1 A 501 mov EPINDEX, R2 ; and select it. A 502 ;; Now we have the correct EP number. We have to see if it is A 503 ;; and IN or an OUT 00FF03CD A57E23 9105 A 504 mov R2, wIndex 00FF03D2 A55E2080 A 505 anl R2, #80h 00FF03D6 A578 09 A 506 jne GS_IN_Endpoint A 507 00FF03D9 A 508 GS_OUT_Endpoint: 00FF03D9 A5A937E1 0B A 509 jnb RXSTL, GSEndpointDone 00FF03DE 7801 A 510 mov R0, #1 ; Set the stall bit 00FF03E0 80 07 A 511 jmp GSEndpointDone PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 21 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm A 512 00FF03E2 A 513 GS_IN_Endpoint: 00FF03E2 A5A936E1 02 A 514 jnb TXSTL, GSEndpointDone 00FF03E7 7801 A 515 mov R0, #1 ; Set the stall bit A 516 00FF03E9 A 517 GSEndpointDone: 00FF03E9 D0F1 A 518 pop EPINDEX 00FF03EB 80 04 A 519 jmp GSFinish A 520 00FF03ED A 521 GSDevice: 00FF03ED 7801 A 522 mov R0,#1 00FF03EF 80 00 A 523 jmp GSFinish A 524 00FF03F1 A 525 GSInterface: A 526 ;; Interface is always zero and since we already primed with that A 527 ;; we do nothing A 528 00FF03F1 A 529 GSFinish: 00FF03F1 7A01 A 530 mov R2, #01h 00FF03F3 A57A23 9000 A 531 mov SetupSeq , R2 ;Advance State Machine to next state A 532 00FF03F8 12 0A75 A 533 lCall SetStatusData 00FF03FB 12 0A93 A 534 lCall DoControlOutput ;primes fifo A 535 00FF03FE 02 06D1 A 536 ljmp EXIT_SETUP A 537 00FF0401 A 538 CheckGetInterface: 00FF0401 A5BEB00A A 539 cmp R11, #GET_INTERFACE 00FF0405 A578 2B A 540 jne CheckSynchFrame A 541 ;; Setup the pointers in in 00FF0408 A57E14 0000 A 542 mov WR2, #00h 00FF040D A57A17 A004 A 543 mov in_rd_pntr, WR2 ;Set buffer pointer to zero A 544 00FF0412 A57E14 0001 A 545 mov WR2, #01h 00FF0417 A57A17 A006 A 546 mov in_bytes_left, WR2 ;point to count variable A 547 00FF041C A57E23 A00B A 548 mov R2, MyInterfaceVal 00FF0421 A57A23 B000 A 549 mov IN_BUFFERS, R2 A 550 00FF0426 7A01 A 551 mov R2, #01h 00FF0428 A57A23 9000 A 552 mov SetupSeq , R2 ;Advance State Machine to next state A 553 00FF042D 12 0A93 A 554 lcall DoControlOutput A 555 00FF0430 02 06D1 A 556 ljmp EXIT_SETUP A 557 00FF0433 A 558 CheckSynchFrame: 00FF0433 A5BEB00C A 559 cmp R11, #SYCH_FRAME 00FF0437 A578 03 A 560 jne GetCommandExit 00FF043A 02 06D1 A 561 ljmp GET_CONFIG_Request ;Go get config request A 562 00FF043D A 563 GetCommandExit: PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 22 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF043D 02 06D1 A 564 ljmp EXIT_SETUP A 565 A 566 A 567 A 568 ;=================================================== A 569 ; Routines to process a set descriptor/configuration A 570 ;=================================================== A 571 00FF0440 A 572 DO_SET_COMMAND: 00FF0440 A57EF4 9102 A 573 mov WR30, #LOW16(bRequest) 00FF0445 A57E7BB0 A 574 mov R11, @DR28 A 575 00FF0449 A5BEB007 A 576 cmp R11, #SET_DESCRIPTOR ; Was this a Set_Descriptor? 00FF044D A578 02 A 577 jne ?CheckSetConfig 00FF0450 80 32 A 578 jmp DO_SET_DESCRIPTOR A 579 00FF0452 A 580 ?CheckSetConfig: 00FF0452 A5BEB009 A 581 cmp R11, #SET_CONFIGURATION ; Was this a Set_Configuration? 00FF0456 A578 02 A 582 jne ?CheckSetInterface 00FF0459 80 2B A 583 jmp DO_SET_CONFIGURATION A 584 00FF045B A 585 ?CheckSetInterface: 00FF045B A5BEB00B A 586 cmp R11, #SET_INTERFACE ; Was this a Set_Interface? 00FF045F A578 02 A 587 jne ?CheckClearFeature 00FF0462 80 2E A 588 jmp DO_SET_INTERFACE A 589 00FF0464 A 590 ?CheckClearFeature: 00FF0464 A5BEB001 A 591 cmp R11, #CLEAR_FEATURE 00FF0468 A578 03 A 592 jne ?CheckSetAddress 00FF046B 02 0561 A 593 jmp DO_CLEAR_FEATURE A 594 00FF046E A 595 ?CheckSetAddress: 00FF046E A5BEB005 A 596 cmp R11, #SET_ADDRESS ; Was this a Set_Address? 00FF0472 A578 03 A 597 jne ?CheckSetFeature 00FF0475 02 05BD A 598 jmp DO_SET_ADDRESS A 599 00FF0478 A 600 ?CheckSetFeature: 00FF0478 A5BEB003 A 601 cmp R11, #SET_FEATURE ; Was this a Set_Feature? 00FF047C A578 03 A 602 jne ?CheckExit 00FF047F 02 0561 A 603 jmp DO_SET_FEATURE A 604 00FF0482 A 605 ?CheckExit: 00FF0482 A1 DE A 606 ajmp DO_SET_COMMAND_EXIT A 607 00FF0484 A 608 DO_SET_DESCRIPTOR: A 609 ; 00FF0484 A1 DE A 610 ajmp DO_SET_COMMAND_EXIT A 611 00FF0486 A 612 DO_SET_CONFIGURATION: A 613 ; 00FF0486 A57E23 9103 A 614 mov R2, wValue 00FF048B A57A23 A00A A 615 mov MyConfigVal, R2 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 23 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF0490 A1 DE A 616 ajmp DO_SET_COMMAND_EXIT A 617 00FF0492 A 618 DO_SET_INTERFACE: A 619 ; 00FF0492 A57E67 9105 A 620 mov WR12, wIndex ; First see what interface they are talking about. In A 621 ; this case, if it is not interface 1 then we just return. A 622 00FF0497 A5BEC001 A 623 cmp R12,#1 00FF049B A568 03 A 624 je ?SI0 ; Leave if not interface 1 00FF049E 02 0552 A 625 jmp SI_leave1 ; Leave if not interface 1 00FF04A1 A 626 ?SI0: 00FF04A1 A57E67 9103 A 627 mov WR12, wValue ; Loads the 'word' value R12 actually holds A 628 ; what we want A 629 00FF04A6 A5BEC000 A 630 cmp R12,#0 00FF04AA A578 15 A 631 jne ?SI1 A 632 00FF04AD A57E8008 A 633 mov R8, #8 ; Alt setting 0 - MPS1=8 MPS2=8 00FF04B1 A57A83 D806 A 634 mov _gbMPSEndPoint1,R8 00FF04B6 A57E8008 A 635 mov R8, #8 00FF04BA A57A83 D807 A 636 mov _gbMPSEndPoint2,R8 00FF04BF 02 0547 A 637 jmp SI_leave A 638 00FF04C2 A5BEC001 A 639 ?SI1: cmp R12,#1 00FF04C6 A578 14 A 640 jne ?SI2 A 641 00FF04C9 A57E8007 A 642 mov R8, #7 ; Alt setting 1 - MPS1=7 MPS2=2 00FF04CD A57A83 D806 A 643 mov _gbMPSEndPoint1,R8 00FF04D2 A57E8002 A 644 mov R8, #2 00FF04D6 A57A83 D807 A 645 mov _gbMPSEndPoint2,R8 00FF04DB 80 6A A 646 jmp SI_leave A 647 00FF04DD A5BEC002 A 648 ?SI2: cmp R12,#2 00FF04E1 A578 14 A 649 jne ?SI3 A 650 00FF04E4 A57E8005 A 651 mov R8, #5 ; Alt setting 2 - MPS1=5 MPS2=6 00FF04E8 A57A83 D806 A 652 mov _gbMPSEndPoint1,R8 00FF04ED A57E8006 A 653 mov R8, #6 00FF04F1 A57A83 D807 A 654 mov _gbMPSEndPoint2,R8 00FF04F6 80 4F A 655 jmp SI_leave A 656 00FF04F8 A5BEC003 A 657 ?SI3: cmp R12,#3 00FF04FC A578 14 A 658 jne ?SI4 A 659 00FF04FF A57E8004 A 660 mov R8, #4 ; Alt setting 3 - MPS1=4 MPS2=1 00FF0503 A57A83 D806 A 661 mov _gbMPSEndPoint1,R8 00FF0508 A57E8001 A 662 mov R8, #1 00FF050C A57A83 D807 A 663 mov _gbMPSEndPoint2,R8 00FF0511 80 34 A 664 jmp SI_leave A 665 00FF0513 A5BEC004 A 666 ?SI4: cmp R12,#4 00FF0517 A578 14 A 667 jne ?SI5 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 24 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm A 668 00FF051A A57E8002 A 669 mov R8, #2 ; Alt setting 4 - MPS1=2 MPS2=7 00FF051E A57A83 D806 A 670 mov _gbMPSEndPoint1,R8 00FF0523 A57E8007 A 671 mov R8, #7 00FF0527 A57A83 D807 A 672 mov _gbMPSEndPoint2,R8 00FF052C 80 19 A 673 jmp SI_leave A 674 00FF052E A5BEC005 A 675 ?SI5: cmp R12,#5 00FF0532 A578 12 A 676 jne SI_leave A 677 00FF0535 A57E8001 A 678 mov R8, #1 ; Alt setting 5 - MPS1=1 MPS2=2 00FF0539 A57A83 D806 A 679 mov _gbMPSEndPoint1,R8 00FF053E A57E8001 A 680 mov R8, #1 00FF0542 A57A83 D807 A 681 mov _gbMPSEndPoint2,R8 A 682 00FF0547 A 683 SI_leave: 00FF0547 A5A9C5D3 A 684 clr SOFIE ; Disable SOF interrupts A 685 00FF054B 12 01A9 A 686 call _SOF_Init_FIFOs ; Set the FIFOs back to startup A 687 00FF054E A5A9D5D3 A 688 setb SOFIE ; Enable SOF interrupts A 689 00FF0552 A 690 SI_leave1: 00FF0552 A57EF4 9000 A 691 mov WR30, #LOW16(SetupSeq) 00FF0557 A57EA002 A 692 mov R10, #2 ; This was a Set with do data phase. 00FF055B A57A7BA0 A 693 mov @DR28, R10 ;Set state to look for status phase. A 694 00FF055F A1 DE A 695 ajmp DO_SET_COMMAND_EXIT A 696 00FF0561 A 697 DO_CLEAR_FEATURE: 00FF0561 A 698 DO_SET_FEATURE: 00FF0561 A57E23 9101 A 699 mov R2, bmRequestType 00FF0566 A5BE2002 A 700 cmp R2, #2; Check to see if it for 'endpoint' 00FF056A A578 71 A 701 jne DO_SET_COMMAND_EXIT; If not to endpoint then just finish A 702 00FF056D A57E17 9103 A 703 mov WR2, wValue 00FF0572 A5BE14 0000 A 704 cmp WR2, #0 00FF0577 A578 64 A 705 jne DO_SET_COMMAND_EXIT; Not something we understand A 706 00FF057A C0F1 A 707 push EPINDEX 00FF057C A57E23 9105 A 708 mov R2, wIndex ; Get the EP number 00FF0581 A55E2003 A 709 anl R2, #3 ; Get epnumber A 710 00FF0585 8AF1 A 711 mov EPINDEX, R2 ; and select it. A 712 ;; Now we have the correct EP number. We have to see if it is A 713 ;; and IN or an OUT 00FF0587 A57E23 9105 A 714 mov R2, wIndex 00FF058C A55E2080 A 715 anl R2, #80h 00FF0590 A578 13 A 716 jne SF_IN_Endpoint A 717 00FF0593 A 718 SF_OUT_Endpoint: 00FF0593 A5BEB003 A 719 cmp R11,#SET_FEATURE PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 25 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF0597 A578 06 A 720 jne SF_OUT_CLR 00FF059A A5A9D7E1 A 721 setb RXSTL ; Set the stall bit 00FF059E 80 19 A 722 jmp SFEndpointDone 00FF05A0 A 723 SF_OUT_CLR: 00FF05A0 A5A9C7E1 A 724 clr RXSTL ; Clear the stall bit 00FF05A4 80 13 A 725 jmp SFEndpointDone A 726 00FF05A6 A 727 SF_IN_Endpoint: 00FF05A6 A5BEB003 A 728 cmp R11,#SET_FEATURE 00FF05AA A578 06 A 729 jne SF_IN_CLR 00FF05AD A5A9D6E1 A 730 setb TXSTL ; Set the stall bit 00FF05B1 80 06 A 731 jmp SFEndpointDone A 732 00FF05B3 A 733 SF_IN_CLR: 00FF05B3 A5A9C6E1 A 734 clr TXSTL ; Clear the stall bit 00FF05B7 80 00 A 735 jmp SFEndpointDone A 736 00FF05B9 A 737 SFEndpointDone: 00FF05B9 D0F1 A 738 pop EPINDEX 00FF05BB 80 21 A 739 jmp DO_SET_COMMAND_EXIT A 740 00FF05BD A 741 DO_SET_ADDRESS: 00FF05BD A57EF4 9103 A 742 mov WR30, #LOW16(wValue) ; Get the address from wValue and store it. 00FF05C2 A50B7A40 A 743 mov WR8, @DR28 ; It doesn't actually get changed until the 00FF05C6 A57EF4 9006 A 744 mov WR30, #LOW16(new_addr) ;status phase completes successfully. 00FF05CB A57A7B80 A 745 mov @DR28, R8 00FF05CF A57EF4 9000 A 746 mov WR30, #LOW16(SetupSeq) 00FF05D4 A57EA003 A 747 mov R10, #3 ; This was a Set Address command. 00FF05D8 A57A7BA0 A 748 mov @DR28, R10 ;Set state to look for status phase. 00FF05DC A1 DE A 749 ajmp DO_SET_COMMAND_EXIT A 750 00FF05DE A 751 DO_SET_COMMAND_EXIT: A 752 00FF05DE 75F600 A 753 mov TXCNT0, #0 ; Prime FIFO for response to status phase 00FF05E1 A5A9D1E1 A 754 setb EPCON0.1 ; Set the Tx output enable bit. 00FF05E5 C1 D1 A 755 ajmp EXIT_SETUP A 756 A 757 A 758 ; ********************** GET DESCRIPTOR ******************* 00FF05E7 A 759 GET_DESCR_Request: A 760 00FF05E7 A57EF4 9103 A 761 mov WR30, #LOW16(wValue) 00FF05EC A50B7A50 A 762 mov WR10, @DR28 00FF05F0 A5BEB001 A 763 cmp R11, #DEVICE_DESCR ;Low Byte in Rll 00FF05F4 A578 20 A 764 jne ?c1 A 765 A 766 A 767 ; ********************** GET DESCRIPTOR, DEVICE ******************* A 768 00FF05F7 A57EF4 9000 A 769 mov WR30, #LOW16(SetupSeq) ;Advance State Machine to next state 00FF05FC A57EA001 A 770 mov R10, #1 ;Set state to doing a "GET" command 00FF0600 A57A7BA0 A 771 mov @DR28, R10 ; PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 26 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm A 772 00FF0604 A57EE4 00FF A 773 mov WR28, #0ffh; ; Located in ROM->Page=0ff 00FF0609 A57EF4 0B55 A 774 mov WR30, #LOW16(DEVICE_DESCRIPTOR); 00FF060E 12 09A6 A 775 LCALL BufferControlData 00FF0611 12 0A93 A 776 LCALL DoControlOutput 00FF0614 02 06D1 A 777 ljmp EXIT_SETUP A 778 A 779 00FF0617 A5BEB002 A 780 ?c1: cmp R11, #CONFIG_DESCR 00FF061B A578 20 A 781 jne ?c2 A 782 ; ********************** GET DESCRIPTOR, CONFIGURATION ************ A 783 00FF061E A57EF4 9000 A 784 mov WR30, #LOW16(SetupSeq) ;Update state machine 00FF0623 A57EA001 A 785 mov R10, #1 00FF0627 A57A7BA0 A 786 mov @DR28, R10 A 787 00FF062B A57EE4 00FF A 788 mov WR28, #0ffh; ;Located in ROM 00FF0630 A57EF4 0B69 A 789 mov WR30, #LOW16(CONFIGURATION_DESCRIPTOR); 00FF0635 12 09A6 A 790 LCALL BufferControlData 00FF0638 12 0A93 A 791 LCALL DoControlOutput A 792 00FF063B 02 06D1 A 793 ljmp EXIT_SETUP A 794 00FF063E A5BEB003 A 795 ?c2: cmp R11, #STRING_DESCR 00FF0642 A568 03 A 796 je ?c23 00FF0645 02 06D1 A 797 ljmp EXIT_SETUP A 798 ; ********************** GET DESCRIPTOR, STRING ************ 00FF0648 A 799 ?c23: 00FF0648 A57EF4 9000 A 800 mov WR30, #LOW16(SetupSeq) ;Update state machine 00FF064D A57E9001 A 801 mov R9, #1 00FF0651 A57A7B90 A 802 mov @DR28, R9 A 803 00FF0655 A57EE4 00FF A 804 mov WR28, #0ffh ;String is located in ROM A 805 A 806 ; First check to see if the index is zero. If A 807 ; so, then we treat this like a normal data A 808 ; buffer and not a string, since we need to A 809 ; return the language ID table 00FF065A A5BEA000 A 810 cmp R10, #0 00FF065E A578 0E A 811 jne ?cs1 00FF0661 A57EF4 0D1D A 812 mov WR30, #LOW16(STRING0) 00FF0666 12 09A6 A 813 lcall BufferControlData 00FF0669 12 0A93 A 814 lcall DoControlOutput 00FF066C 02 06D1 A 815 ljmp EXIT_SETUP A 816 00FF066F A5BEA001 A 817 ?cs1: cmp R10, #1 00FF0673 A578 07 A 818 jne ?cs2 00FF0676 A57EF4 0D23 A 819 mov WR30, #LOW16(STRING1) 00FF067B 80 4B A 820 jmp ?csms A 821 00FF067D A5BEA002 A 822 ?cs2: cmp R10, #2 00FF0681 A578 07 A 823 jne ?cs3 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 27 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF0684 A57EF4 0D4A A 824 mov WR30, #LOW16(STRING2) 00FF0689 80 3D A 825 jmp ?csms A 826 00FF068B A5BEA003 A 827 ?cs3: cmp R10, #3 00FF068F A578 07 A 828 jne ?cs4 00FF0692 A57EF4 0D79 A 829 mov WR30, #LOW16(STRING3) 00FF0697 80 2F A 830 jmp ?csms A 831 00FF0699 A5BEA004 A 832 ?cs4: cmp R10, #4 00FF069D A578 07 A 833 jne ?cs5 00FF06A0 A57EF4 0D83 A 834 mov WR30, #LOW16(STRING4) 00FF06A5 80 21 A 835 jmp ?csms A 836 00FF06A7 A5BEA005 A 837 ?cs5: cmp R10, #5 00FF06AB A578 07 A 838 jne ?cs6 00FF06AE A57EF4 0DA7 A 839 mov WR30, #LOW16(STRING5) 00FF06B3 80 13 A 840 jmp ?csms A 841 00FF06B5 A5BEA006 A 842 ?cs6: cmp R10, #6 00FF06B9 A578 07 A 843 jne ?cs0 00FF06BC A57EF4 0DD2 A 844 mov WR30, #LOW16(STRING6) 00FF06C1 80 05 A 845 jmp ?csms A 846 00FF06C3 A57EF4 0DFE A 847 ?cs0: mov WR30, #LOW16(STRING_END) A 848 00FF06C8 12 09F3 A 849 ?csms: LCALL BufferStringData 00FF06CB 12 0A93 A 850 LCALL DoControlOutput A 851 A 852 00FF06CE 02 06D1 A 853 ?c3: ljmp EXIT_SETUP A 854 00FF06D1 A 855 GET_CONFIG_Request: A 856 A 857 A 858 00FF06D1 A 859 EXIT_SETUP: 00FF06D1 22 A 860 ret A 861 A 862 SCOPE A 863 A 864 A 865 ;***************** OUT_TOKEN ************************* A 866 ;***** Gets and saves OUT DATA ************************ A 867 ;****************************************************** A 868 A 869 ;Program that takes data from the FIFO, Puts it in memory A 870 ;and then updates writes it to the fifo. A 871 A 872 A 873 00FF06D2 A 874 OUT_TOKEN: ; Get the data and place it in the in_buffers 00FF06D2 53C0FD A 875 anl SBI, #EP0_RX_CLR ; Clear the bit PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 28 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF06D5 A57EC4 0000 A 876 MOV WR24, #0 ; USE DR24 00FF06DA A57ED4 C000 A 877 mov WR26, #LOW16(OUT_BUFFERS) 00FF06DF A57E81E6 A 878 mov R8, RXCNT0 ; Read count of bytes rec'd into R8 00FF06E3 A57A6B80 A 879 mov @DR24, R8 ; Store the count in the OUT_BUFFERS space. 00FF06E7 A52ED4 0001 A 880 add WR26, #1 ; Increment mem pointer 00FF06EC A54C88 A 881 orl R8, R8 ; Set flags 00FF06EF A568 12 A 882 je ?k2 A 883 00FF06F2 AFE3 A 884 ?k1: mov R7, RXDAT0 ; Read loop 00FF06F4 A57A6B70 A 885 mov @DR24, R7 00FF06F8 A52ED4 0001 A 886 ADD WR26, #1 00FF06FD A59E8001 A 887 sub R8, #1 00FF0701 A578 EE A 888 jne ?k1 A 889 00FF0704 A5A9D4E4 A 890 ?k2: setb RXCON0.4 ; Clear the fifo A 891 ; We now have the data in the buffer. A 892 ; Transmit it to the xmit fifo 00FF0708 22 A 893 ret A 894 A 895 COMMENT *------------------------------------------------------------ A 896 Function name : ServiceEP1RX A 897 Brief Description : Copies data recd. on EP 1 and stores the same in A 898 : a buffer. A 899 Regs preserved : No reg. is saved A 900 --------------------------------------------------------------------* A 901 SCOPE 00FF0709 A 902 ServiceEP1RX: 00FF0709 A5A920E2 02 A 903 jb RXACK, ?GoodReceive ; If R_ACK set then a good reception A 904 00FF070E 80 58 A 905 jmp ?Return ; else leave A 906 00FF0710 A 907 ?GoodReceive: 00FF0710 7E00 A 908 mov R6, #00h 00FF0712 AFE6 A 909 mov R7, RXCNT1 ; Get the no. of bytes recd. 00FF0714 A5BE7000 A 910 cmp R7, #00h ; Check whether a null data packet was recd. 00FF0718 A568 49 A 911 je ?NullPacketRecd ; 00FF071B A57E57 D800 A 912 mov WR10, _EP1RxPtr ; Get offset of next free location in the buffer 00FF0720 A57EF4 D000 A 913 mov WR30, #EP_1_Buffer ; get address of start of buffer. 00FF0725 A52DF5 A 914 add WR30, WR10 ; get to next free locaion. A 915 00FF0728 A52D53 A 916 add WR10, WR6 00FF072B A55E54 F7FF A 917 anl WR10, #RINGBUFFMASK ; do modulo 800h rollover 00FF0730 A57A57 D800 A 918 mov _EP1RxPtr, WR10 ; update the RXPtr offset in buffer. A 919 00FF0735 A57E57 D804 A 920 mov WR10, _EP1DataCount ; get current data count 00FF073A A52D53 A 921 add WR10, WR6 ; add no. of bytes recd. 00FF073D A57A57 D804 A 922 mov _EP1DataCount, WR10 ; update the data count A 923 00FF0742 A 924 ?CopyDataToBuffer: 00FF0742 A57EC1E3 A 925 mov R12, RXDAT1 ; Read data from FIFO 00FF0746 A57AF9C0 A 926 mov @WR30, R12 ; store in data buffer 00FF074A A50BF4 A 927 inc WR30, #01h ; incr. ptr into buffer PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 29 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF074D A55EF4 F7FF A 928 anl WR30, #RINGBUFFMASK ; do modulo 800h rollover 00FF0752 DF EE A 929 djnz R7, ?CopyDataToBuffer A 930 00FF0754 A 931 ?ReadyForAnotherRX: 00FF0754 A52E54 0400 A 932 add WR10, #EP1MAXPACKET ; The next packet can ba a max of MPS 00FF0759 A5BE54 07FF A 933 cmp WR10, #RINGBUFFSIZE ; If this is < than the total buffer sapce, return 00FF075E 40 04 A 934 jl ?NullPacketRecd A 935 00FF0760 A5A9C3E1 A 936 clr RXIE ; Set not ready to RX till a enuf space is available A 937 00FF0764 A 938 ?NullPacketRecd: 00FF0764 A5A9D4E4 A 939 setb RXFFRC ; signal FIFO read complete to trigger ARM A 940 ; logic for FIFO management 00FF0768 A 941 ?Return: 00FF0768 22 A 942 Ret A 943 A 944 COMMENT *------------------------------------------------------------ A 945 Function name : ServiceEP1TX A 946 Brief Description : Deals with a transmit event on endpoint 1 It A 947 : checks to be sure a FIFO is available. It then A 948 : checks for data availability. If the no. of bytes A 949 : of data is greater than the MaxPacket size, then A 950 : MaxPacket bytes are sent. Otherwise all the A 951 : available data is sent. In either case the data A 952 : count and TxPtr are adjusted after the move. A 953 : It can be called as the result of a Tx or an Rx A 954 : interrupt. If its a Tx interrupt it enters at A 955 : ServiceEP1TX. If its from an Rx interrupt it A 956 : enters at PrimeEP1Fifo. A 957 Regs preserved : No reg. is saved A 958 --------------------------------------------------------------------* A 959 SCOPE 00FF0769 A 960 ServiceEP1TX: A 961 ; anl SBI, #EP1_TX_CLR ; Clear the interrupt bit. A 962 00FF0769 A 963 PrimeEP1Fifo: 00FF0769 A5A937F5 07 A 964 jnb TXFIF1, ?FifoAvailable ; Make sure a fifo is available 00FF076E A5A936F5 02 A 965 jnb TXFIF0, ?FifoAvailable ; Make sure a fifo is available A 966 00FF0773 80 72 A 967 jmp ?Return A 968 00FF0775 A 969 ?FifoAvailable: 00FF0775 A57E37 D804 A 970 mov WR6, _EP1DataCount ; Get data count in WR6 00FF077A A5BE34 0000 A 971 cmp WR6, #00h ; is data count == 0? 00FF077F A578 02 A 972 jne ?Continue A 973 00FF0782 80 63 A 974 jmp ?Return A 975 00FF0784 A 976 ?Continue: 00FF0784 A5BE34 0400 A 977 cmp WR6, #EP1MAXPACKET ; cmp with MPS 00FF0789 40 05 A 978 jl ?LessThanMPS A 979 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 30 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF078B A 980 ?MoreThanMPS: 00FF078B A57E34 0400 A 981 mov WR6, #EP1MAXPACKET ; Set NoOfBytes to transfer to MPS A 982 00FF0790 A 983 ?LessThanMPS: 00FF0790 A57E57 D802 A 984 mov WR10, _EP1TxPtr ; Get offset of first full location A 985 ; in the endpoint buffer 00FF0795 A57EF4 D000 A 986 mov WR30, #EP_1_Buffer ; set WR30 back to buffer start 00FF079A A52DF5 A 987 add WR30, WR10 ; get to first full location A 988 00FF079D A52D53 A 989 add WR10, WR6 00FF07A0 A55E54 07FF A 990 anl WR10, #RINGWORDMASK ; do modulo 800h rollover 00FF07A5 A57A57 D802 A 991 mov _EP1TxPtr, WR10 A 992 00FF07AA A57E57 D804 A 993 mov WR10, _EP1DataCount 00FF07AF A59D53 A 994 sub WR10, WR6 00FF07B2 A57A57 D804 A 995 mov _EP1DataCount, WR10 A 996 00FF07B7 A5CA78 A 997 push R7 00FF07BA A 998 ?ArmTXFifo: 00FF07BA A57EF9C0 A 999 mov R12, @WR30 ; Read data from buffer 00FF07BE A57AC1F3 A 1000 mov TXDAT1, R12 ; store in Tx FIFO 00FF07C2 A50BF4 A 1001 inc WR30, #01h ; inc. the pointer 00FF07C5 A55EF4 F7FF A 1002 anl WR30, #RINGBUFFMASK ; do modulo 800h rollover 00FF07CA DF EE A 1003 djnz R7, ?ArmTXFifo 00FF07CC A5DA78 A 1004 pop R7 A 1005 00FF07CF 8FF6 A 1006 mov TXCNT1, R7 ; Write the transmit count A 1007 00FF07D1 A 1008 ?ReadyForRX: 00FF07D1 A5A923E1 11 A 1009 jb RXIE , ?Return A 1010 00FF07D6 A 1011 ?RXWasDisabled: 00FF07D6 A52E54 0400 A 1012 add WR10, #EP1MAXPACKET ; The next packet can be a max of MPS 00FF07DB A5BE54 07FF A 1013 cmp WR10, #RINGBUFFSIZE ; If this is > than the total buffer sapce 00FF07E0 A538 04 A 1014 jg ?Return ; return A 1015 00FF07E3 A5A9D3E1 A 1016 setb RXIE ; Set ready to RX as enuf buffer space is A 1017 ; now available. 00FF07E7 A 1018 ?Return: 00FF07E7 22 A 1019 Ret A 1020 A 1021 COMMENT *------------------------------------------------------------ A 1022 Function name : ServiceEP2RX A 1023 Brief Description : Copies data recd. on EP 2 and stores the same in A 1024 : a buffer. A 1025 Regs preserved : No reg. is saved A 1026 --------------------------------------------------------------------* A 1027 SCOPE 00FF07E8 A 1028 ServiceEP2RX: 00FF07E8 A5A920E2 02 A 1029 jb RXACK, ?GoodReceive ; If R_ACK set then a good reception A 1030 00FF07ED 80 58 A 1031 jmp ?Return ; else leave PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 31 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm A 1032 00FF07EF A 1033 ?GoodReceive: 00FF07EF 7E00 A 1034 mov R6, #00h 00FF07F1 AFE6 A 1035 mov R7, RXCNT2 ; Get the no. of bytes recd. 00FF07F3 A5BE7000 A 1036 cmp R7, #00h ; Check whether a null data packet was recd. 00FF07F7 A568 49 A 1037 je ?NullPacketRecd ; 00FF07FA A57E57 E800 A 1038 mov WR10, _EP2RxPtr ; Get offset of next free location in the buffer 00FF07FF A57EF4 E000 A 1039 mov WR30, #EP_2_Buffer ; get address of start of buffer. 00FF0804 A52DF5 A 1040 add WR30, WR10 ; get to next free locaion. A 1041 00FF0807 A52D53 A 1042 add WR10, WR6 00FF080A A55E54 F7FF A 1043 anl WR10, #RINGBUFFMASK ; do modulo 800h rollover 00FF080F A57A57 E800 A 1044 mov _EP2RxPtr, WR10 ; update the RXPtr offset in buffer. A 1045 00FF0814 A57E57 E804 A 1046 mov WR10, _EP2DataCount ; get current data count 00FF0819 A52D53 A 1047 add WR10, WR6 ; add no. of bytes recd. 00FF081C A57A57 E804 A 1048 mov _EP2DataCount, WR10 ; update the data count A 1049 00FF0821 A 1050 ?CopyDataToBuffer: 00FF0821 A57EC1E3 A 1051 mov R12, RXDAT2 ; Read data from FIFO 00FF0825 A57AF9C0 A 1052 mov @WR30, R12 ; store in data buffer 00FF0829 A50BF4 A 1053 inc WR30, #01h ; incr. ptr into buffer 00FF082C A55EF4 F7FF A 1054 anl WR30, #RINGBUFFMASK ; do modulo 800h rollover 00FF0831 DF EE A 1055 djnz R7, ?CopyDataToBuffer A 1056 00FF0833 A 1057 ?ReadyForAnotherRX: 00FF0833 A52E54 0008 A 1058 add WR10, #EP2MAXPACKET ; The next packet can ba a max of MPS 00FF0838 A5BE54 07FF A 1059 cmp WR10, #RINGBUFFSIZE ; If this is < than the total buffer sapce, return 00FF083D 40 04 A 1060 jl ?NullPacketRecd A 1061 00FF083F A5A9C3E1 A 1062 clr RXIE ; Set not ready to RX till a enuf space is available A 1063 00FF0843 A 1064 ?NullPacketRecd: 00FF0843 A5A9D4E4 A 1065 setb RXFFRC ; signal FIFO read complete to trigger ARM A 1066 ; logic for FIFO management 00FF0847 A 1067 ?Return: 00FF0847 22 A 1068 Ret A 1069 A 1070 COMMENT *------------------------------------------------------------ A 1071 Function name : ServiceEP2TX A 1072 Brief Description : Deals with a transmit event on endpoint 1 It A 1073 : checks to be sure a FIFO is available. It then A 1074 : checks for data availability. If the no. of bytes A 1075 : of data is greater than the MaxPacket size, then A 1076 : MaxPacket bytes are sent. Otherwise all the A 1077 : available data is sent. In either case the data A 1078 : count and TxPtr are adjusted after the move. A 1079 : It can be called as the result of a Tx or an Rx A 1080 : interrupt. If its a Tx interrupt it enters at A 1081 : ServiceEP2TX. If its from an Rx interrupt it A 1082 : enters at PrimeEP2Fifo. A 1083 Regs preserved : No reg. is saved PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 32 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm A 1084 --------------------------------------------------------------------* A 1085 SCOPE 00FF0848 A 1086 ServiceEP2TX: A 1087 ; anl SBI, #EP2_TX_CLR ; Clear the interrupt bit. A 1088 00FF0848 A 1089 PrimeEP2Fifo: 00FF0848 A5A937F5 07 A 1090 jnb TXFIF1 , ?FifoAvailable ; Make sure a fifo is available 00FF084D A5A936F5 02 A 1091 jnb TXFIF0 , ?FifoAvailable ; Make sure a fifo is available A 1092 00FF0852 80 72 A 1093 jmp ?Return A 1094 00FF0854 A 1095 ?FifoAvailable: 00FF0854 A57E37 E804 A 1096 mov WR6, _EP2DataCount ; Get data count in WR6 00FF0859 A5BE34 0000 A 1097 cmp WR6, #00h ; is data count == 0? 00FF085E A578 02 A 1098 jne ?Continue A 1099 00FF0861 80 63 A 1100 jmp ?Return A 1101 00FF0863 A 1102 ?Continue: 00FF0863 A5BE34 0008 A 1103 cmp WR6, #EP2MAXPACKET ; cmp with MPS 00FF0868 40 05 A 1104 jl ?LessThanMPS A 1105 00FF086A A 1106 ?MoreThanMPS: 00FF086A A57E34 0008 A 1107 mov WR6, #EP2MAXPACKET ; Set NoOfBytes to transfer to MPS A 1108 00FF086F A 1109 ?LessThanMPS: 00FF086F A57E57 E802 A 1110 mov WR10, _EP2TxPtr ; Get offset of first full location A 1111 ; in the endpoint buffer 00FF0874 A57EF4 E000 A 1112 mov WR30, #EP_2_Buffer ; set WR30 back to buffer start 00FF0879 A52DF5 A 1113 add WR30, WR10 ; get to first full location A 1114 00FF087C A52D53 A 1115 add WR10, WR6 00FF087F A55E54 07FF A 1116 anl WR10, #RINGWORDMASK ; do modulo 800h rollover 00FF0884 A57A57 E802 A 1117 mov _EP2TxPtr, WR10 A 1118 00FF0889 A57E57 E804 A 1119 mov WR10, _EP2DataCount 00FF088E A59D53 A 1120 sub WR10, WR6 00FF0891 A57A57 E804 A 1121 mov _EP2DataCount, WR10 A 1122 00FF0896 A5CA78 A 1123 push R7 00FF0899 A 1124 ?ArmTXFifo: 00FF0899 A57EF9C0 A 1125 mov R12, @WR30 ; Read data from buffer 00FF089D A57AC1F3 A 1126 mov TXDAT2, R12 ; store in Tx FIFO 00FF08A1 A50BF4 A 1127 inc WR30, #01h ; inc. the pointer 00FF08A4 A55EF4 F7FF A 1128 anl WR30, #RINGBUFFMASK ; do modulo 800h rollover 00FF08A9 DF EE A 1129 djnz R7, ?ArmTXFifo 00FF08AB A5DA78 A 1130 pop R7 A 1131 00FF08AE 8FF6 A 1132 mov TXCNT2, R7 ; Write the transmit count A 1133 00FF08B0 A 1134 ?ReadyForRX: 00FF08B0 A5A923E1 11 A 1135 jb RXIE, ?Return PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 33 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm A 1136 00FF08B5 A 1137 ?RXWasDisabled: 00FF08B5 A52E54 0008 A 1138 add WR10, #EP2MAXPACKET ; The next packet can be a max of MPS 00FF08BA A5BE54 07FF A 1139 cmp WR10, #RINGBUFFSIZE ; If this is > than the total buffer sapce 00FF08BF A538 04 A 1140 jg ?Return ; return A 1141 00FF08C2 A5A9D3E1 A 1142 setb RXIE ; Set ready to RX as enuf buffer sp A 1143 ; now available. 00FF08C6 A 1144 ?Return: 00FF08C6 22 A 1145 Ret A 1146 A 1147 COMMENT *------------------------------------------------------------ A 1148 Function name : ServiceEP3RX A 1149 Brief Description : Copies data recd. on EP 3 and stores the same in A 1150 : a buffer. A 1151 Regs preserved : No reg. is saved A 1152 --------------------------------------------------------------------* A 1153 SCOPE 00FF08C7 A 1154 ServiceEP3RX: 00FF08C7 A5A920E2 02 A 1155 jb RXACK, ?GoodReceive ; If R_ACK set then a good reception A 1156 00FF08CC 80 58 A 1157 jmp ?Return ; else leave A 1158 00FF08CE A 1159 ?GoodReceive: 00FF08CE 7E00 A 1160 mov R6, #00h 00FF08D0 AFE6 A 1161 mov R7, RXCNT3 ; Get the no. of bytes recd. 00FF08D2 A5BE7000 A 1162 cmp R7, #00h ; Check whether a null data packet was recd. 00FF08D6 A568 49 A 1163 je ?NullPacketRecd ; 00FF08D9 A57E57 F800 A 1164 mov WR10, _EP3RxPtr ; Get offset of next free location in the buffer 00FF08DE A57EF4 F000 A 1165 mov WR30, #EP_3_Buffer ; get address of start of buffer. 00FF08E3 A52DF5 A 1166 add WR30, WR10 ; get to next free locaion. A 1167 00FF08E6 A52D53 A 1168 add WR10, WR6 00FF08E9 A55E54 F7FF A 1169 anl WR10, #RINGBUFFMASK ; do modulo 800h rollover 00FF08EE A57A57 F800 A 1170 mov _EP3RxPtr, WR10 ; update the RXPtr offset in buffer. A 1171 00FF08F3 A57E57 F804 A 1172 mov WR10, _EP3DataCount ; get current data count 00FF08F8 A52D53 A 1173 add WR10, WR6 ; add no. of bytes recd. 00FF08FB A57A57 F804 A 1174 mov _EP3DataCount, WR10 ; update the data count A 1175 00FF0900 A 1176 ?CopyDataToBuffer: 00FF0900 A57EC1E3 A 1177 mov R12, RXDAT3 ; Read data from FIFO 00FF0904 A57AF9C0 A 1178 mov @WR30, R12 ; store in data buffer 00FF0908 A50BF4 A 1179 inc WR30, #01h ; incr. ptr into buffer 00FF090B A55EF4 F7FF A 1180 anl WR30, #RINGBUFFMASK ; do modulo 800h rollover 00FF0910 DF EE A 1181 djnz R7, ?CopyDataToBuffer A 1182 00FF0912 A 1183 ?ReadyForAnotherRX: 00FF0912 A52E54 0008 A 1184 add WR10, #EP3MAXPACKET ; The next packet can ba a max of MPS 00FF0917 A5BE54 07FF A 1185 cmp WR10, #RINGBUFFSIZE ; If this is < than the total buffer sapce, return 00FF091C 40 04 A 1186 jl ?NullPacketRecd A 1187 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 34 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF091E A5A9C3E1 A 1188 clr RXIE ; Set not ready to RX till a enuf space is available A 1189 00FF0922 A 1190 ?NullPacketRecd: 00FF0922 A5A9D4E4 A 1191 setb RXFFRC ; signal FIFO read complete to trigger ARM A 1192 ; logic for FIFO management 00FF0926 A 1193 ?Return: 00FF0926 22 A 1194 Ret A 1195 A 1196 COMMENT *------------------------------------------------------------ A 1197 Function name : ServiceEP3TX A 1198 Brief Description : Deals with a transmit event on endpoint 1 It A 1199 : checks to be sure a FIFO is available. It then A 1200 : checks for data availability. If the no. of bytes A 1201 : of data is greater than the MaxPacket size, then A 1202 : MaxPacket bytes are sent. Otherwise all the A 1203 : available data is sent. In either case the data A 1204 : count and TxPtr are adjusted after the move. A 1205 : It can be called as the result of a Tx or an Rx A 1206 : interrupt. If its a Tx interrupt it enters at A 1207 : ServiceEP3TX. If its from an Rx interrupt it A 1208 : enters at PrimeEP3Fifo. A 1209 Regs preserved : No reg. is saved A 1210 --------------------------------------------------------------------* A 1211 SCOPE 00FF0927 A 1212 ServiceEP3TX: 00FF0927 A 1213 PrimeEP3Fifo: 00FF0927 A5A937F5 07 A 1214 jnb TXFIF1, ?FifoAvailable ; Make sure a fifo is available 00FF092C A5A936F5 02 A 1215 jnb TXFIF0, ?FifoAvailable ; Make sure a fifo is available A 1216 00FF0931 80 72 A 1217 jmp ?Return A 1218 00FF0933 A 1219 ?FifoAvailable: 00FF0933 A57E37 F804 A 1220 mov WR6, _EP3DataCount ; Get data count in WR6 00FF0938 A5BE34 0000 A 1221 cmp WR6, #00h ; is data count == 0? 00FF093D A578 02 A 1222 jne ?Continue A 1223 00FF0940 80 63 A 1224 jmp ?Return A 1225 00FF0942 A 1226 ?Continue: 00FF0942 A5BE34 0008 A 1227 cmp WR6, #EP3MAXPACKET ; cmp with MPS 00FF0947 40 05 A 1228 jl ?LessThanMPS A 1229 00FF0949 A 1230 ?MoreThanMPS: 00FF0949 A57E34 0008 A 1231 mov WR6, #EP3MAXPACKET ; Set NoOfBytes to transfer to MPS A 1232 00FF094E A 1233 ?LessThanMPS: 00FF094E A57E57 F802 A 1234 mov WR10, _EP3TxPtr ; Get offset of first full location A 1235 ; in the endpoint buffer 00FF0953 A57EF4 F000 A 1236 mov WR30, #EP_3_Buffer ; set WR30 back to buffer start 00FF0958 A52DF5 A 1237 add WR30, WR10 ; get to first full location A 1238 00FF095B A52D53 A 1239 add WR10, WR6 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 35 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF095E A55E54 07FF A 1240 anl WR10, #RINGWORDMASK ; do modulo 800h rollover 00FF0963 A57A57 F802 A 1241 mov _EP3TxPtr, WR10 A 1242 00FF0968 A57E57 F804 A 1243 mov WR10, _EP3DataCount 00FF096D A59D53 A 1244 sub WR10, WR6 00FF0970 A57A57 F804 A 1245 mov _EP3DataCount, WR10 A 1246 00FF0975 A5CA78 A 1247 push R7 00FF0978 A 1248 ?ArmTXFifo: 00FF0978 A57EF9C0 A 1249 mov R12, @WR30 ; Read data from buffer 00FF097C A57AC1F3 A 1250 mov TXDAT3, R12 ; store in Tx FIFO 00FF0980 A50BF4 A 1251 inc WR30, #01h ; inc. the pointer 00FF0983 A55EF4 F7FF A 1252 anl WR30, #RINGBUFFMASK ; do modulo 800h rollover 00FF0988 DF EE A 1253 djnz R7, ?ArmTXFifo 00FF098A A5DA78 A 1254 pop R7 A 1255 00FF098D 8FF6 A 1256 mov TXCNT3, R7 ; Write the transmit count A 1257 00FF098F A 1258 ?ReadyForRX: 00FF098F A5A923E1 11 A 1259 jb RXIE , ?Return A 1260 00FF0994 A 1261 ?RXWasDisabled: 00FF0994 A52E54 0008 A 1262 add WR10, #EP3MAXPACKET ; The next packet can be a max of MPS 00FF0999 A5BE54 07FF A 1263 cmp WR10, #RINGBUFFSIZE ; If this is > than the total buffer sapce 00FF099E A538 04 A 1264 jg ?Return ; return A 1265 00FF09A1 A5A9D3E1 A 1266 setb RXIE ; Set ready to RX as enuf buffer space is A 1267 ; now available. 00FF09A5 A 1268 ?Return: 00FF09A5 22 A 1269 Ret A 1270 A 1271 SCOPE A 1272 ;################################################################### A 1273 ;################### BufferControlData ############################ A 1274 ;## Transfers the data pointed to by DR28 into the IN Buffer ####### A 1275 ;################################################################### A 1276 A 1277 SCOPE 00FF09A6 A 1278 BufferControlData: A 1279 ;DR28 has address of data A 1280 ; mov R6, #00h A 1281 ; mov R7, @DR28 ; Move Count 00FF09A6 A50B7A30 A 1282 mov WR6, @DR28 ; Move Count 00FF09AA A52EF4 0002 A 1283 add WR30, #02h ; increment pointer to first byte of data 00FF09AF A57E44 0000 A 1284 mov WR8, #00h A 1285 00FF09B4 A57A47 A004 A 1286 mov in_rd_pntr, WR8 ;Set buffer pointer to zero A 1287 ;for new transfer A 1288 00FF09B9 A57E57 9107 A 1289 mov WR10, wLength ; cmp no of bytes asked for with the A 1290 SWAP_BYTES R10,R11,R12 ; no. of bytes that the descriptor 00FF09C7 A5BD35 A 1291 cmp WR6, WR10 ; contains. PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 36 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF09CA A528 03 A 1292 jle ?Continue A 1293 00FF09CD A57D35 A 1294 mov WR6, WR10 ; If the no. of bytes in the descriptor A 1295 ; is greater than the no. of bytes asked for A 1296 ; send back only the no. of bytes as per A 1297 ; the Setup packet. A 1298 00FF09D0 A 1299 ?Continue: 00FF09D0 A57A37 A006 A 1300 mov in_bytes_left, WR6 ;Store Count A 1301 00FF09D5 A57ED4 B000 A 1302 mov WR26, #LOW16(IN_BUFFERS) A 1303 00FF09DA A 1304 ?MoveMemory: 00FF09DA A57E7B90 A 1305 mov R9, @DR28 ; Get data 00FF09DE A57AD990 A 1306 mov @WR26, R9 ; Store data 00FF09E2 A52ED4 0001 A 1307 add WR26, #01h 00FF09E7 A52EF4 0001 A 1308 add WR30, #01h 00FF09EC A51B34 A 1309 dec WR6,#1 00FF09EF A578 E8 A 1310 jne ?MoveMemory A 1311 00FF09F2 22 A 1312 Ret A 1313 A 1314 ;################################################################### A 1315 ;################### BufferStringData ############################ A 1316 ;## Transfers the string data pointed to by DR28 into the IN Buffer. A 1317 ;## The first byte in this data area is the length of the string. A 1318 ;## The following 'length' bytes are the string itself. This routine A 1319 ;## will load IN_BUFFERS with a string descriptor with the ASCII string A 1320 ;## converted to a UNICODE string. A 1321 ;################################################################### A 1322 A 1323 SCOPE 00FF09F3 A 1324 BufferStringData: A 1325 ;DR28 has address of data 00FF09F3 7E00 A 1326 mov R6, #00h 00FF09F5 A57E7B70 A 1327 mov R7, @DR28 ; Ascii string length in R7 00FF09F9 A5BE7000 A 1328 cmp R7, #0 00FF09FD A568 74 A 1329 je BSD_Ret A 1330 00FF0A00 A5CA78 A 1331 push R7 ; To save for later 00FF0A03 A52EF4 0001 A 1332 add WR30, #01h ; increment pointer to first byte of string A 1333 00FF0A08 A57E44 0000 A 1334 mov WR8, #00h 00FF0A0D A57A47 A004 A 1335 mov in_rd_pntr, WR8 ;Set buffer pointer to zero A 1336 ;for new transfer A 1337 A 1338 ;; Calculate that actual length of the descriptor. The equation is: A 1339 ;; DescLength = 2 * (Ascii length) + 2 A 1340 ;; The + 2 is for bLength and bDescriptorType 00FF0A12 A52C77 A 1341 add R7,R7 00FF0A15 A52E7002 A 1342 add R7,#2 A 1343 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 37 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF0A19 A57ED4 B000 A 1344 mov WR26, #LOW16(IN_BUFFERS) A 1345 A 1346 ;; The first vale to go in IN_BUFFERS is the total length of the A 1347 ;; string descriptor 00FF0A1E A57AD970 A 1348 mov @WR26, R7 00FF0A22 A52ED4 0001 A 1349 add WR26,#1 A 1350 ;; The next value is the string descriptor encoding 00FF0A27 A57E9003 A 1351 mov R9, #STRING_DESCR 00FF0A2B A57AD990 A 1352 mov @WR26, R9 00FF0A2F A52ED4 0001 A 1353 add WR26,#1 A 1354 A 1355 00FF0A34 A57E57 9107 A 1356 mov WR10, wLength ; cmp no of bytes asked for with the A 1357 SWAP_BYTES R10,R11,R12 ; no. of bytes that the descriptor 00FF0A42 A5BD35 A 1358 cmp WR6, WR10 ; contains. 00FF0A45 A528 03 A 1359 jle BSD_Continue A 1360 00FF0A48 A57D35 A 1361 mov WR6, WR10 ; If the no. of bytes in the descriptor A 1362 ; is greater than the no. of bytes asked for A 1363 ; send back only the no. of bytes as per A 1364 ; the Setup packet. A 1365 00FF0A4B A 1366 BSD_Continue: 00FF0A4B A57A37 A006 A 1367 mov in_bytes_left, WR6 ;Store Count A 1368 A 1369 ;; Now we can start moving the string itself. If you view a A 1370 ;; unicode string as a sequence of 'words' (two byte A 1371 ;; quantities), the low order byte of each word is a zero and A 1372 ;; the upper order byte is the ascii character. So in the A 1373 ;; loop below, we first put a zero in the buffer, followed by A 1374 ;; the character from the string. A 1375 ;; 00FF0A50 A5DA78 A 1376 pop R7 ; Restore the string length. Note that we 00FF0A53 A57E8000 A 1377 mov R8,#0 ; will always create the whole string A 1378 ; descriptor even though only part of it may A 1379 ; be returned. 00FF0A57 A 1380 BSD_MoveMemory: 00FF0A57 A57AD980 A 1381 mov @WR26, R8 00FF0A5B A52ED4 0001 A 1382 add WR26, #01h 00FF0A60 A57E7B90 A 1383 mov R9, @DR28 ; Get data 00FF0A64 A57AD990 A 1384 mov @WR26, R9 ; Store data 00FF0A68 A52ED4 0001 A 1385 add WR26, #01h 00FF0A6D A52EF4 0001 A 1386 add WR30, #01h 00FF0A72 DF E3 A 1387 djnz R7, BSD_MoveMemory 00FF0A74 A 1388 BSD_Ret: 00FF0A74 22 A 1389 Ret A 1390 A 1391 ; --------------------------------------------------------- A 1392 ; A 1393 ; A 1394 ; --------------------------------------------------------- 00FF0A75 A 1395 SetStatusData: PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 38 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF0A75 A57E14 0000 A 1396 mov WR2, #00h 00FF0A7A A57A17 A004 A 1397 mov in_rd_pntr, WR2 ;Set buffer pointer to zero A 1398 00FF0A7F A57E14 0002 A 1399 mov WR2, #02h 00FF0A84 A57A17 A006 A 1400 mov in_bytes_left, WR2 ;point to count variable A 1401 00FF0A89 A57ED4 B000 A 1402 mov WR26, #LOW16(IN_BUFFERS) 00FF0A8E A51BD800 A 1403 mov @WR26, WR0 A 1404 00FF0A92 22 A 1405 Ret A 1406 A 1407 ;################################################################### A 1408 ;################# DoControlOutput ################################## A 1409 ;################################################################### A 1410 A 1411 SCOPE 00FF0A93 A 1412 DoControlOutput: 00FF0A93 A5A9C1E1 A 1413 clr EPCON0.1 ; Set it up so that data is not Xmitted A 1414 ; while were are filling up the fifo. 00FF0A97 A57E47 A006 A 1415 mov WR8, in_bytes_left 00FF0A9C A5BE44 0000 A 1416 cmp WR8, #00h ;check for none 00FF0AA1 A578 08 A 1417 jne CntlDataAvail ;if ther is data do normal flow 00FF0AA4 A57E34 0000 A 1418 mov WR6, #00h ;if none, do null packet 00FF0AA9 02 0AF9 A 1419 ljmp ControlArmTx A 1420 00FF0AAC A 1421 CntlDataAvail: 00FF0AAC A57ED4 B000 A 1422 mov WR26, #LOW16(IN_BUFFERS) ;Get the address of the first char 00FF0AB1 A57E67 A004 A 1423 mov WR12, in_rd_pntr ; A 1424 00FF0AB6 A52DD6 A 1425 add WR26, WR12 ;Add the read_pointer to the buffer location 00FF0AB9 A57E34 0000 A 1426 mov WR6, #00h ;initialize FIFO full counter 00FF0ABE A5CA49 A 1427 push WR8 ;save starting bytes avail count A 1428 00FF0AC1 A 1429 ?WriteToFifo: 00FF0AC1 A57ED9B0 A 1430 mov R11, @WR26 ;Get the data 00FF0AC5 A57AB1F3 A 1431 mov TXDAT0, R11 ;write it into the FIFO 00FF0AC9 A52ED4 0001 A 1432 add WR26, #01h ;Increment buffer pointer 00FF0ACE A52E7001 A 1433 add R7,#01h ;Increment FIFO count 00FF0AD2 A59E44 0001 A 1434 sub WR8, #01h ;Are we done with the buffer 00FF0AD7 A568 07 A 1435 je ControlTxUpd A 1436 00FF0ADA A5BE7008 A 1437 cmp R7, #FIFO_SIZE ;FIFO FULL? 00FF0ADE A578 E0 A 1438 jne ?WriteToFifo A 1439 00FF0AE1 A 1440 ControlTxUpd: 00FF0AE1 A5DA49 A 1441 pop WR8 ;restore starting count 00FF0AE4 A57E67 A004 A 1442 mov WR12, in_rd_pntr ;Get the offset into IN_BUFFER 00FF0AE9 A52D63 A 1443 add WR12, WR6 ;add amount we consumed 00FF0AEC A57A67 A004 A 1444 mov in_rd_pntr, WR12 ;store the new offset 00FF0AF1 A59D43 A 1445 sub WR8, WR6 ;subtract amount we just consumed 00FF0AF4 A57A47 A006 A 1446 mov in_bytes_left, WR8 ;store new count A 1447 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 39 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF0AF9 A 1448 ControlArmTx: 00FF0AF9 8FF6 A 1449 mov TXCNT0, R7 ;Write count into TXCNT register 00FF0AFB A5A9D1E1 A 1450 setb EPCON0.1 ;Enable data transmit A 1451 00FF0AFF A 1452 ?Return: 00FF0AFF 22 A 1453 Ret A 1454 A 1455 SCOPE A 1456 ;***************************************************** A 1457 ;***************** INIT_USB ************************* A 1458 ;***************************************************** A 1459 00FF0B00 A 1460 INIT_USB: A 1461 ;(KLS) 00FF0B00 75F100 A 1462 mov EPINDEX, #00h 00FF0B03 75F484 A 1463 mov TXCON0,#84h ;/* Flush FIFO, sets Empty bit in TXFLG0, enable ATM. */ 00FF0B06 75E484 A 1464 mov RXCON0,#84h ;/* Flush FIFO, sets Empty bit in RXFLG0, enable ARM. */ A 1465 ; Enable endpoint 0 as a control endpoint. We need to set the A 1466 ; Transmit Endpoint enable, Receive Endpoint enable, and the A 1467 ; Receive Input enable. We do not set the Transmit Output enable A 1468 ; until we have determined what type of response we need to send A 1469 ; back, i.e., NULL packet for status phase or data for a "GET" A 1470 ; command. 00FF0B09 75E12D A 1471 mov EPCON0,#2Dh; A 1472 A 1473 ; The non-zero endpoints are being enabled here just so they will A 1474 ; NAK any tokens sent to them. This is really not correct, since A 1475 ; by the spec they should not respond at all until the host has A 1476 ; set a configuration for this endpoint. We will set the Receive A 1477 ; Endpoint enable and Transmit Endpoint enable bits for these guys A 1478 ; but not the input and output enables. A 1479 00FF0B0C 75F101 A 1480 mov EPINDEX, #01h 00FF0B0F 75F484 A 1481 mov TXCON1,#84h ;/* Flush FIFO, sets Empty bit in TXFLG1, enable ATM. */ 00FF0B12 75E484 A 1482 mov RXCON1,#84h ;/* Flush FIFO, sets Empty bit in RXFLG1, enable ARM. */ 00FF0B15 75E10F A 1483 mov EPCON1,#0Fh; ;/* Enable receive and transmit on endpoint 1 */ 00FF0B18 A5A9D4E1 A 1484 setb RXSPM ; Turn on single packet mode A 1485 00FF0B1C 75F102 A 1486 mov EPINDEX, #02h 00FF0B1F 75F484 A 1487 mov TXCON2,#84h ;/* Flush FIFO, sets Empty bit in TXFLG2, enable ATM. */ 00FF0B22 A5A9D3F4 A 1488 setb TXISO ; Make it an ISO endpoint 00FF0B26 75E484 A 1489 mov RXCON2,#84h ;/* Flush FIFO, sets Empty bit in RXFLG2, enable ARM. */ 00FF0B29 75E103 A 1490 mov EPCON2,#03h; ;/* Transmit only */ A 1491 00FF0B2C 75F103 A 1492 mov EPINDEX, #03h 00FF0B2F 75F484 A 1493 mov TXCON2,#84h ;/* Flush FIFO, sets Empty bit in TXFLG2, enable ATM. */ 00FF0B32 A5A9D3F4 A 1494 setb TXISO ; Make it an ISO endpoint 00FF0B36 75E484 A 1495 mov RXCON2,#84h ;/* Flush FIFO, sets Empty bit in RXFLG2, enable ARM. */ 00FF0B39 75E103 A 1496 mov EPCON2,#03h; ;/* Transmit only */ A 1497 00FF0B3C 22 A 1498 RET A 1499 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 40 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm A 1500 SCOPE A 1501 A 1502 ;***************************************************** A 1503 ;***************** INIT_UART ************************* A 1504 ;***************************************************** A 1505 00FF0B3D A 1506 INIT_UART: 00FF0B3D 759850 A 1507 mov SCON, #050h A 1508 ;Timer 2 is being used to generate baud rates. 00FF0B40 75CAD9 A 1509 mov RCAP2L, #0D9h ; USB EVAL 9600 ?==? 9600/19200 16-bit reload value for baud 00FF0B43 75CBFF A 1510 mov RCAP2H, #0FFh ; 00FF0B46 75C834 A 1511 mov T2CON, #034h ; Set TIMER 2 into baud rate generator WORKS(A) 00FF0B49 C299 A 1512 clr TI ; Clear Transmit interrupt A 1513 ;; mov IE0, #0 ; KILL ALL INTERUPTS 00FF0B4B 12 0EDA A 1514 LCALL Lng_Delay 00FF0B4E 759900 A 1515 mov SBUF, #00 00FF0B51 12 0EDA A 1516 LCALL Lng_Delay 00FF0B54 22 A 1517 ret A 1518 A 1519 A 1520 A 1521 ;************************************************************************ A 1522 ;************* DEVICE DESCRIPTOR **************************************** A 1523 ;************************************************************************ A 1524 A 1525 ; A 1526 ; NOTE!!!!! '251 is a Big Endian machine. Words and DWords are stored with the A 1527 ; LSB in the numerically higher address. A 1528 ; A 1529 A 1530 00FF0B55 A 1531 DEVICE_DESCRIPTOR: 00FF0B55 0012 A 1532 gDLength: dw 012h ;Used by packet transfer routines. 00FF0B57 12 A 1533 gDevice_bLength: db 012h 00FF0B58 01 A 1534 gDevice_bDescriptorType: db DEVICE_DESCR 00FF0B59 0001 A 1535 gDevice_bcdUSB: dw 0001h ; Version 1.00 compliant 00FF0B5B DC A 1536 gDevice_bDeviceClass: db 0DCh 00FF0B5C 00 A 1537 gDevice_bDeviceSubClass: db 00h 00FF0B5D 00 A 1538 gDevice_bDeviceProtocol: db 00h 00FF0B5E 08 A 1539 gDevice_wMaxPacketSize0: db 08h ;8 byte max for EP0 00FF0B5F 8680 A 1540 gDevice_widVendor: dw 8680h ;Intel Vendor ID (8086) 00FF0B61 2399 A 1541 gDevice_widProduct: dw 2399h ;product ID 9923h 00FF0B63 3001 A 1542 gDevice_bcdDevice: dw 3001h ;device version 1.30 00FF0B65 01 A 1543 gDevice_iManufacturer: db 1h ;These three fields are supposed 00FF0B66 02 A 1544 gDevice_iProduct: db 2h ;to contain the index of strings 00FF0B67 03 A 1545 gDevice_iSerialNumber: db 3h ;describing device. 00FF0B68 01 A 1546 gDevice_bNumConfigurations: db 1 A 1547 A 1548 ;/*--------------- Initialize global Config descriptor ----------------*/ 00FF0B69 A 1549 CONFIGURATION_DESCRIPTOR: 00FF0B69 01B2 A 1550 gCLength: dw gEndDescriptorLabel-gConfig_bLength A 1551 ; ^^^^ Used by packet transfer routines. PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 41 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm A 1552 00FF0B6B 09 A 1553 gConfig_bLength: db 09h 00FF0B6C 02 A 1554 gConfig_bDescriptorType: db CONFIG_DESCR 00FF0B6D B2 A 1555 gConfig_bTotalLength: db LOW(gEndDescriptorLabel-gConfig_bLength) 00FF0B6E 01 A 1556 gConfig_bCorrection: db HIGH(gEndDescriptorLabel-gConfig_bLength) 00FF0B6F 03 A 1557 gConfig_bNumInterfaces: db 3 ; NUM_OF_INTERFACES; 00FF0B70 01 A 1558 gConfig_bConfigurationValue: db 1 00FF0B71 04 A 1559 gConfig_iConfiguration: db 4 A 1560 ; gConfig_bmAttributes: db 040h 00FF0B72 60 A 1561 gConfig_bmAttributes: db 060h ;support Remote_Wakeup A 1562 00FF0B73 19 A 1563 gConfig_MaxPower: db 025 ;50ma A 1564 A 1565 ; /*------------- Initialize global Interface descriptor A--------------*/ 00FF0B74 A 1566 gInterfaceDescriptorA: 00FF0B74 09 A 1567 gInterfaceA_bLength: db gEndPoint1- gInterfaceDescriptorA 00FF0B75 04 A 1568 gInterfaceA_bDescriptorType: db INTERFACE_DESCR 00FF0B76 00 A 1569 gInterfaceA_bInterfaceNumber: db 0 00FF0B77 00 A 1570 gInterfaceA_bAlternateSetting: db 0 00FF0B78 02 A 1571 gInterfaceA_bNumEndpoints: db 2h 00FF0B79 DC A 1572 gInterfaceA_bInterfaceClass: db 0DCh 00FF0B7A 10 A 1573 gInterfaceA_bInterfaceSubClass: db 10h 00FF0B7B 11 A 1574 gInterfaceA_bInterfaceProtocol: db 11h 00FF0B7C 04 A 1575 gInterfaceA_iInterface: db 4 A 1576 A 1577 ; /*------------- Initialize Endpoint 1 descriptor ---------------*/ 00FF0B7D A 1578 gEndPoint1: 00FF0B7D 07 A 1579 gEP1_bLength: db 07h 00FF0B7E 05 A 1580 gEP1_bDescriptorType: db ENDPOINT_DESCR 00FF0B7F 81 A 1581 gEP1_bEndpointAddress: db 81h ;EP address 1, in 00FF0B80 02 A 1582 gEP1_bmAtrributes: db 02h ;BULK 00FF0B81 4000 A 1583 gEP1_wMaxPacketSize: dw 4000h ;Max Packet 64 bytes 00FF0B83 00 A 1584 gEP1_bInterval: db 0h A 1585 A 1586 ; /*------------- Initialize Endpoint 1B descriptor ---------------*/ 00FF0B84 A 1587 gEndPoint1B: 00FF0B84 07 A 1588 gEP1B_bLength: db 07h 00FF0B85 05 A 1589 gEP1B_bDescriptorType: db ENDPOINT_DESCR 00FF0B86 01 A 1590 gEP1B_bEndPointAddress: db 01h ;EP address 1,out 00FF0B87 02 A 1591 gEP1B_bmAtrributes: db 02h ;BULK 00FF0B88 4000 A 1592 gEP1B_wMaxPacketSize: dw 4000h ;Max Packet 64 bytes 00FF0B8A 00 A 1593 gEP1B_bInterval: db 0h A 1594 A 1595 ; /*------------- Initialize global Interface descriptor ---------------*/ 00FF0B8B A 1596 gInterfaceDescriptor: 00FF0B8B 09 A 1597 gInterface_bLength: db 09h 00FF0B8C 04 A 1598 gInterface_bDescriptorType: db INTERFACE_DESCR 00FF0B8D 01 A 1599 gInterface_bInterfaceNumber: db 01h 00FF0B8E 00 A 1600 gInterface_bAlternateSetting: db 00h 00FF0B8F 02 A 1601 gInterface_bNumEndpoints: db 02h 00FF0B90 DC A 1602 gInterface_bInterfaceClass: db 0DCh 00FF0B91 50 A 1603 gInterface_bInterfaceSubClass: db 50h PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 42 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF0B92 10 A 1604 gInterface_bInterfaceProtocol: db 10h 00FF0B93 00 A 1605 gInterface_iInterface: db 0 A 1606 A 1607 ; /*------------- Initialize Endpoint 2 descriptor ---------------*/ 00FF0B94 A 1608 gEndPoint: 00FF0B94 07 A 1609 gEP_bLength: db 07h 00FF0B95 05 A 1610 gEP_bDescriptorType: db ENDPOINT_DESCR 00FF0B96 82 A 1611 gEP_bEndpointAddress: db 82h ;EP address 3, in 00FF0B97 01 A 1612 gEP_bmAtrributes: db 01h ;ISOC 00FF0B98 0800 A 1613 gEP_wMaxPacketSize: dw 0800h ;Max Packet 8 bytes 00FF0B9A 00 A 1614 gEP_bInterval: db 0h A 1615 A 1616 ; /*------------- Initialize Endpoint 3 descriptor ---------------*/ 00FF0B9B A 1617 gEndPointB: 00FF0B9B 07 A 1618 gEPB_bLength: db 07h 00FF0B9C 05 A 1619 gEPB_bDescriptorType: db ENDPOINT_DESCR 00FF0B9D 83 A 1620 gEPB_bEndPointAddress: db 83h ;EP address 3, in 00FF0B9E 01 A 1621 gEPB_bmAtrributes: db 01h ;ISOC 00FF0B9F 0800 A 1622 gEPB_wMaxPacketSize: dw 0800h ;Max Packet 8 bytes 00FF0BA1 00 A 1623 gEPB_bInterval: db 0h A 1624 A 1625 ; /*------------- Initialize Alternate Interface descriptor 1---------------*/ 00FF0BA2 A 1626 gAltXface1Descriptor: 00FF0BA2 09 A 1627 gAltXface1_bLength: db 09h 00FF0BA3 04 A 1628 gAltXface1_bDescriptorType: db INTERFACE_DESCR 00FF0BA4 01 A 1629 gAltXface1_bInterfaceNumber: db 1h 00FF0BA5 01 A 1630 gAltXface1_bAlternateSetting: db 01h 00FF0BA6 02 A 1631 gAltXface1_bNumEndpoints: db 2h 00FF0BA7 DC A 1632 gAltXface1_bInterfaceClass: db 0DCh 00FF0BA8 50 A 1633 gAltXface1_bInterfaceSubClass: db 50h 00FF0BA9 10 A 1634 gAltXface1_bInterfaceProtocol: db 10h 00FF0BAA 00 A 1635 gAltXface1_iInterface: db 0 A 1636 A 1637 ; /*------------- Initialize Endpoints in Alternate interface 1 ---------------*/ 00FF0BAB A 1638 gEndPointAX1: 00FF0BAB 07 A 1639 gEPAX1_bLength: db 07h 00FF0BAC 05 A 1640 gEPAX1_bDescriptorType: db ENDPOINT_DESCR 00FF0BAD 82 A 1641 gEPAX1_bEndpointAddress: db 82h ;EP address 2, in 00FF0BAE 01 A 1642 gEPAX1_bmAtrributes: db 01h ;ISOC 00FF0BAF 0700 A 1643 gEPAX1_wMaxPacketSize: dw 0700h ;Max Packet 7 bytes 00FF0BB1 00 A 1644 gEPAX1_bInterval: db 0h A 1645 00FF0BB2 A 1646 gEndPointAX1B: 00FF0BB2 07 A 1647 gEPAX1B_bLength: db 07h 00FF0BB3 05 A 1648 gEPAX1B_bDescriptorType: db ENDPOINT_DESCR 00FF0BB4 83 A 1649 gEPAX1B_bEndPointAddress: db 83h ;EP address 3,in 00FF0BB5 01 A 1650 gEPAX1B_bmAtrributes: db 01h ;ISOC 00FF0BB6 0200 A 1651 gEPAX1B_wMaxPacketSize: dw 0200h ;Max Packet 2 bytes 00FF0BB8 00 A 1652 gEPAX1B_bInterval: db 0h A 1653 A 1654 ; /*------------- Initialize Alternate Interface descriptor 2---------------*/ 00FF0BB9 A 1655 gAltXface2Descriptor: PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 43 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF0BB9 09 A 1656 gAltXface2_bLength: db 09h 00FF0BBA 04 A 1657 gAltXface2_bDescriptorType: db INTERFACE_DESCR 00FF0BBB 01 A 1658 gAltXface2_bInterfaceNumber: db 01h 00FF0BBC 02 A 1659 gAltXface2_bAlternateSetting: db 02h 00FF0BBD 02 A 1660 gAltXface2_bNumEndpoints: db 2h 00FF0BBE DC A 1661 gAltXface2_bInterfaceClass: db 0DCh 00FF0BBF 50 A 1662 gAltXface2_bInterfaceSubClass: db 50h 00FF0BC0 90 A 1663 gAltXface2_bInterfaceProtocol: db 90h 00FF0BC1 00 A 1664 gAltXface2_iInterface: db 0 A 1665 A 1666 ; /*------------- Initialize Endpoints in Alternate interface 2 ---------------*/ 00FF0BC2 A 1667 gEndPointAX2: 00FF0BC2 07 A 1668 gEPAX2_bLength: db 07h 00FF0BC3 05 A 1669 gEPAX2_bDescriptorType: db ENDPOINT_DESCR 00FF0BC4 82 A 1670 gEPAX2_bEndpointAddress: db 82h ;EP address 2, in 00FF0BC5 01 A 1671 gEPAX2_bmAtrributes: db 01h ;ISOC 00FF0BC6 0500 A 1672 gEPAX2_wMaxPacketSize: dw 0500h ;Max Packet 5 bytes 00FF0BC8 00 A 1673 gEPAX2_bInterval: db 0h A 1674 00FF0BC9 A 1675 gEndPointAX2B: 00FF0BC9 07 A 1676 gEPAX2B_bLength: db 07h 00FF0BCA 05 A 1677 gEPAX2B_bDescriptorType: db ENDPOINT_DESCR 00FF0BCB 83 A 1678 gEPAX2B_bEndPointAddress: db 83h ;EP address 3,in 00FF0BCC 01 A 1679 gEPAX2B_bmAtrributes: db 01h ;ISOC 00FF0BCD 0600 A 1680 gEPAX2B_wMaxPacketSize: dw 0600h ;Max Packet 6 bytes 00FF0BCF 00 A 1681 gEPAX2B_bInterval: db 0h A 1682 A 1683 ; /*------------- Initialize Alternate Interface descriptor 3---------------*/ 00FF0BD0 A 1684 gAltXface3Descriptor: 00FF0BD0 09 A 1685 gAltXface3_bLength: db 09h 00FF0BD1 04 A 1686 gAltXface3_bDescriptorType: db INTERFACE_DESCR 00FF0BD2 01 A 1687 gAltXface3_bInterfaceNumber: db 01h 00FF0BD3 03 A 1688 gAltXface3_bAlternateSetting: db 03h 00FF0BD4 02 A 1689 gAltXface3_bNumEndpoints: db 2h 00FF0BD5 DC A 1690 gAltXface3_bInterfaceClass: db 0DCh 00FF0BD6 50 A 1691 gAltXface3_bInterfaceSubClass: db 50h 00FF0BD7 00 A 1692 gAltXface3_bInterfaceProtocol: db 00h 00FF0BD8 00 A 1693 gAltXface3_iInterface: db 0 A 1694 A 1695 ; /*------------- Initialize Endpoints in Alternate interface 3 ---------------*/ 00FF0BD9 A 1696 gEndPointAX3: 00FF0BD9 07 A 1697 gEPAX3_bLength: db 07h 00FF0BDA 05 A 1698 gEPAX3_bDescriptorType: db ENDPOINT_DESCR 00FF0BDB 82 A 1699 gEPAX3_bEndpointAddress: db 82h ;EP address 2, in 00FF0BDC 01 A 1700 gEPAX3_bmAtrributes: db 01h ;ISOC 00FF0BDD 0400 A 1701 gEPAX3_wMaxPacketSize: dw 0400h ;Max Packet 4 bytes 00FF0BDF 00 A 1702 gEPAX3_bInterval: db 0h A 1703 00FF0BE0 A 1704 gEndPointAX3B: 00FF0BE0 07 A 1705 gEPAX3B_bLength: db 07h 00FF0BE1 05 A 1706 gEPAX3B_bDescriptorType: db ENDPOINT_DESCR 00FF0BE2 83 A 1707 gEPAX3B_bEndPointAddress: db 83h ;EP address 3,in PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 44 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF0BE3 01 A 1708 gEPAX3B_bmAtrributes: db 01h ;ISOC 00FF0BE4 0100 A 1709 gEPAX3B_wMaxPacketSize: dw 0100h ;Max Packet 1 bytes 00FF0BE6 00 A 1710 gEPAX3B_bInterval: db 0h A 1711 A 1712 ; /*------------- Initialize Alternate Interface descriptor 4---------------*/ 00FF0BE7 A 1713 gAltXface4Descriptor: 00FF0BE7 09 A 1714 gAltXface4_bLength: db 09h 00FF0BE8 04 A 1715 gAltXface4_bDescriptorType: db INTERFACE_DESCR 00FF0BE9 01 A 1716 gAltXface4_bInterfaceNumber: db 01h 00FF0BEA 04 A 1717 gAltXface4_bAlternateSetting: db 04h 00FF0BEB 02 A 1718 gAltXface4_bNumEndpoints: db 2h 00FF0BEC DC A 1719 gAltXface4_bInterfaceClass: db 0DCh 00FF0BED 50 A 1720 gAltXface4_bInterfaceSubClass: db 50h 00FF0BEE 00 A 1721 gAltXface4_bInterfaceProtocol: db 00h 00FF0BEF 00 A 1722 gAltXface4_iInterface: db 0 A 1723 A 1724 ; /*------------- Initialize Endpoints in Alternate interface 4 ---------------*/ 00FF0BF0 A 1725 gEndPointAX4: 00FF0BF0 07 A 1726 gEPAX4_bLength: db 07h 00FF0BF1 05 A 1727 gEPAX4_bDescriptorType: db ENDPOINT_DESCR 00FF0BF2 82 A 1728 gEPAX4_bEndpointAddress: db 82h ;EP address 2, in 00FF0BF3 01 A 1729 gEPAX4_bmAtrributes: db 01h ;ISOC 00FF0BF4 0200 A 1730 gEPAX4_wMaxPacketSize: dw 0200h ;Max Packet 2 bytes 00FF0BF6 00 A 1731 gEPAX4_bInterval: db 0h A 1732 00FF0BF7 A 1733 gEndPointAX4B: 00FF0BF7 07 A 1734 gEPAX4B_bLength: db 07h 00FF0BF8 05 A 1735 gEPAX4B_bDescriptorType: db ENDPOINT_DESCR 00FF0BF9 83 A 1736 gEPAX4B_bEndPointAddress: db 83h ;EP address 3,in 00FF0BFA 01 A 1737 gEPAX4B_bmAtrributes: db 01h ;ISOC 00FF0BFB 0700 A 1738 gEPAX4B_wMaxPacketSize: dw 0700h ;Max Packet 7 bytes 00FF0BFD 00 A 1739 gEPAX4B_bInterval: db 0h A 1740 A 1741 ; /*------------- Initialize Alternate Interface descriptor 5---------------*/ 00FF0BFE A 1742 gAltXface5Descriptor: 00FF0BFE 09 A 1743 gAltXface5_bLength: db 09h 00FF0BFF 04 A 1744 gAltXface5_bDescriptorType: db INTERFACE_DESCR 00FF0C00 01 A 1745 gAltXface5_bInterfaceNumber: db 01h 00FF0C01 05 A 1746 gAltXface5_bAlternateSetting: db 05h 00FF0C02 02 A 1747 gAltXface5_bNumEndpoints: db 2h 00FF0C03 DC A 1748 gAltXface5_bInterfaceClass: db 0DCh 00FF0C04 50 A 1749 gAltXface5_bInterfaceSubClass: db 50h 00FF0C05 00 A 1750 gAltXface5_bInterfaceProtocol: db 00h 00FF0C06 00 A 1751 gAltXface5_iInterface: db 0 A 1752 A 1753 ; /*------------- Initialize Endpoints in Alternate interface 5 ---------------*/ 00FF0C07 A 1754 gEndPointAX5: 00FF0C07 07 A 1755 gEPAX5_bLength: db 07h 00FF0C08 05 A 1756 gEPAX5_bDescriptorType: db ENDPOINT_DESCR 00FF0C09 82 A 1757 gEPAX5_bEndpointAddress: db 82h ;EP address 2, in 00FF0C0A 01 A 1758 gEPAX5_bmAtrributes: db 01h ;ISOC 00FF0C0B 0100 A 1759 gEPAX5_wMaxPacketSize: dw 100h ;Max Packet 1 bytes PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 45 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF0C0D 00 A 1760 gEPAX5_bInterval: db 0h A 1761 00FF0C0E A 1762 gEndPointAX5B: 00FF0C0E 07 A 1763 gEPAX5B_bLength: db 07h 00FF0C0F 05 A 1764 gEPAX5B_bDescriptorType: db ENDPOINT_DESCR 00FF0C10 83 A 1765 gEPAX5B_bEndPointAddress: db 83h ;EP address 3,in 00FF0C11 01 A 1766 gEPAX5B_bmAtrributes: db 01h ;ISOC 00FF0C12 0100 A 1767 gEPAX5B_wMaxPacketSize: dw 0100h ;Max Packet 1 bytes 00FF0C14 00 A 1768 gEPAX5B_bInterval: db 0h A 1769 A 1770 ; /*------------- Initialize global Interface descriptor ---------------*/ 00FF0C15 A 1771 gbInterfaceDescriptor: 00FF0C15 09 A 1772 gbInterface_bLength: db 09h 00FF0C16 04 A 1773 gbInterface_bDescriptorType: db INTERFACE_DESCR 00FF0C17 02 A 1774 gbInterface_bInterfaceNumber: db 02h 00FF0C18 00 A 1775 gbInterface_bAlternateSetting: db 00h 00FF0C19 05 A 1776 gbInterface_bNumEndpoints: db 05h 00FF0C1A DC A 1777 gbInterface_bInterfaceClass: db 0DCh 00FF0C1B 50 A 1778 gbInterface_bInterfaceSubClass: db 50h 00FF0C1C 10 A 1779 gbInterface_bInterfaceProtocol: db 10h 00FF0C1D 00 A 1780 gbInterface_iInterface: db 0 A 1781 A 1782 ; /*------------- Initialize Endpoint 1 descriptor ---------------*/ 00FF0C1E A 1783 gbEndPointA: 00FF0C1E 07 A 1784 gbEP_bLength: db 07h 00FF0C1F 05 A 1785 gbEP_bDescriptorType: db ENDPOINT_DESCR 00FF0C20 0F A 1786 gbEP_bEndpointAddress: db 0Fh ;EP address 15, in 00FF0C21 01 A 1787 gbEP_bmAtrributes: db 01h ;ISOC 00FF0C22 0004 A 1788 gbEP_wMaxPacketSize: dw 0004h ;Max Packet 1024 bytes 00FF0C24 00 A 1789 gbEP_bInterval: db 0h A 1790 A 1791 ; /*------------- Initialize Endpoint 2 descriptor ---------------*/ 00FF0C25 A 1792 gbEndPointB: 00FF0C25 07 A 1793 gbEPB_bLength: db 07h 00FF0C26 05 A 1794 gbEPB_bDescriptorType: db ENDPOINT_DESCR 00FF0C27 0D A 1795 gbEPB_bEndPointAddress: db 0dh ;EP address 13, in 00FF0C28 01 A 1796 gbEPB_bmAtrributes: db 01h ;ISOC 00FF0C29 0004 A 1797 gbEPB_wMaxPacketSize: dw 0004h ;Max Packet 512 bytes 00FF0C2B 00 A 1798 gbEPB_bInterval: db 0h A 1799 A 1800 ; /*------------- Initialize Endpoint 3 descriptor ---------------*/ 00FF0C2C A 1801 gbEndPointC: 00FF0C2C 07 A 1802 gbEPC_bLength: db 07h 00FF0C2D 05 A 1803 gbEPC_bDescriptorType: db ENDPOINT_DESCR 00FF0C2E 09 A 1804 gbEPC_bEndPointAddress: db 09h ;EP address 9, in 00FF0C2F 01 A 1805 gbEPC_bmAtrributes: db 01h ;ISOC 00FF0C30 0001 A 1806 gbEPC_wMaxPacketSize: dw 0001h ;Max Packet 256 bytes 00FF0C32 00 A 1807 gbEPC_bInterval: db 0h A 1808 A 1809 ; /*------------- Initialize Endpoint 4 descriptor ---------------*/ 00FF0C33 A 1810 gbEndPointD: 00FF0C33 07 A 1811 gbEPD_bLength: db 07h PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 46 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF0C34 05 A 1812 gbEPD_bDescriptorType: db ENDPOINT_DESCR 00FF0C35 0E A 1813 gbEPD_bEndPointAddress: db 0Eh ;EP address 14, in 00FF0C36 01 A 1814 gbEPD_bmAtrributes: db 01h ;ISOC 00FF0C37 7601 A 1815 gbEPD_wMaxPacketSize: dw 7601h ;Max Packet 374 bytes 00FF0C39 00 A 1816 gbEPD_bInterval: db 0h A 1817 A 1818 ; /*------------- Initialize Endpoint 5 descriptor ---------------*/ 00FF0C3A A 1819 gbEndPointE: 00FF0C3A 07 A 1820 gbEPE_bLength: db 07h 00FF0C3B 05 A 1821 gbEPE_bDescriptorType: db ENDPOINT_DESCR 00FF0C3C 05 A 1822 gbEPE_bEndPointAddress: db 05h ;EP address 5, in 00FF0C3D 01 A 1823 gbEPE_bmAtrributes: db 01h ;ISOC 00FF0C3E D302 A 1824 gbEPE_wMaxPacketSize: dw 0D302h ;Max Packet 723 bytes 00FF0C40 00 A 1825 gbEPE_bInterval: db 0h A 1826 A 1827 ; /*------------- Initialize Alternate Interface descriptor 1---------------*/ 00FF0C41 A 1828 gbAltXface1Descriptor: 00FF0C41 09 A 1829 gbAltXface1_bLength: db 09h 00FF0C42 04 A 1830 gbAltXface1_bDescriptorType: db INTERFACE_DESCR 00FF0C43 01 A 1831 gbAltXface1_bInterfaceNumber: db 1h 00FF0C44 01 A 1832 gbAltXface1_bAlternateSetting: db 01h 00FF0C45 05 A 1833 gbAltXface1_bNumEndpoints: db 5h 00FF0C46 DC A 1834 gbAltXface1_bInterfaceClass: db 0DCh 00FF0C47 50 A 1835 gbAltXface1_bInterfaceSubClass: db 50h 00FF0C48 00 A 1836 gbAltXface1_bInterfaceProtocol: db 00h 00FF0C49 00 A 1837 gbAltXface1_iInterface: db 0 A 1838 A 1839 ; /*------------- Initialize Endpoints in Alternate interface 1 ---------------*/ 00FF0C4A A 1840 gbEndPointAX1: 00FF0C4A 07 A 1841 gbEPAX1_bLength: db 07h 00FF0C4B 05 A 1842 gbEPAX1_bDescriptorType: db ENDPOINT_DESCR 00FF0C4C 05 A 1843 gbEPAX1_bEndpointAddress: db 05h ;EP address 5, in 00FF0C4D 01 A 1844 gbEPAX1_bmAtrributes: db 01h ;ISOC 00FF0C4E E703 A 1845 gbEPAX1_wMaxPacketSize: dw 0E703h ;Max Packet 999 bytes 00FF0C50 00 A 1846 gbEPAX1_bInterval: db 0h A 1847 00FF0C51 A 1848 gbEndPointAX1B: 00FF0C51 07 A 1849 gbEPAX1B_bLength: db 07h 00FF0C52 05 A 1850 gbEPAX1B_bDescriptorType: db ENDPOINT_DESCR 00FF0C53 07 A 1851 gbEPAX1B_bEndPointAddress: db 07h ;EP address 7,in 00FF0C54 01 A 1852 gbEPAX1B_bmAtrributes: db 01h ;ISOC 00FF0C55 1700 A 1853 gbEPAX1B_wMaxPacketSize: dw 1700h ;Max Packet 23 bytes 00FF0C57 00 A 1854 gbEPAX1B_bInterval: db 0h A 1855 00FF0C58 A 1856 gbEndPointAX1C: 00FF0C58 07 A 1857 gbEPAX1C_bLength: db 07h 00FF0C59 05 A 1858 gbEPAX1C_bDescriptorType: db ENDPOINT_DESCR 00FF0C5A 09 A 1859 gbEPAX1C_bEndPointAddress: db 09h ;EP address 9,in 00FF0C5B 01 A 1860 gbEPAX1C_bmAtrributes: db 01h ;ISOC 00FF0C5C 6103 A 1861 gbEPAX1C_wMaxPacketSize: dw 6103h ;Max Packet 865 bytes 00FF0C5E 00 A 1862 gbEPAX1C_bInterval: db 0h A 1863 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 47 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF0C5F A 1864 gbEndPointAX1D: 00FF0C5F 07 A 1865 gbEPAX1D_bLength: db 07h 00FF0C60 05 A 1866 gbEPAX1D_bDescriptorType: db ENDPOINT_DESCR 00FF0C61 0B A 1867 gbEPAX1D_bEndPointAddress: db 0Bh ;EP address 11,in 00FF0C62 01 A 1868 gbEPAX1D_bmAtrributes: db 01h ;ISOC 00FF0C63 B001 A 1869 gbEPAX1D_wMaxPacketSize: dw 0B001h ;Max Packet 432 bytes 00FF0C65 00 A 1870 gbEPAX1D_bInterval: db 0h A 1871 00FF0C66 A 1872 gbEndPointAX1E: 00FF0C66 07 A 1873 gbEPAX1E_bLength: db 07h 00FF0C67 05 A 1874 gbEPAX1E_bDescriptorType: db ENDPOINT_DESCR 00FF0C68 0D A 1875 gbEPAX1E_bEndPointAddress: db 0Dh ;EP address 13,in 00FF0C69 01 A 1876 gbEPAX1E_bmAtrributes: db 01h ;ISOC 00FF0C6A B702 A 1877 gbEPAX1E_wMaxPacketSize: dw 0B702h ;Max Packet 695 bytes 00FF0C6C 00 A 1878 gbEPAX1E_bInterval: db 0h A 1879 A 1880 ; /*------------- Initialize Alternate Interface descriptor 2---------------*/ 00FF0C6D A 1881 gbAltXface2Descriptor: 00FF0C6D 09 A 1882 gbAltXface2_bLength: db 09h 00FF0C6E 04 A 1883 gbAltXface2_bDescriptorType: db INTERFACE_DESCR 00FF0C6F 02 A 1884 gbAltXface2_bInterfaceNumber: db 02h 00FF0C70 02 A 1885 gbAltXface2_bAlternateSetting: db 02h 00FF0C71 05 A 1886 gbAltXface2_bNumEndpoints: db 5h 00FF0C72 DC A 1887 gbAltXface2_bInterfaceClass: db 0DCh 00FF0C73 50 A 1888 gbAltXface2_bInterfaceSubClass: db 50h 00FF0C74 00 A 1889 gbAltXface2_bInterfaceProtocol: db 00h 00FF0C75 00 A 1890 gbAltXface2_iInterface: db 0 A 1891 A 1892 ; /*------------- Initialize Endpoints in Alternate interface 2 ---------------*/ 00FF0C76 A 1893 gbEndPointAX2: 00FF0C76 07 A 1894 gbEPAX2_bLength: db 07h 00FF0C77 05 A 1895 gbEPAX2_bDescriptorType: db ENDPOINT_DESCR 00FF0C78 0B A 1896 gbEPAX2_bEndpointAddress: db 0Bh ;EP address 11, in 00FF0C79 01 A 1897 gbEPAX2_bmAtrributes: db 01h ;ISOC 00FF0C7A EC01 A 1898 gbEPAX2_wMaxPacketSize: dw 0EC01h ;Max Packet 492 bytes 00FF0C7C 00 A 1899 gbEPAX2_bInterval: db 0h A 1900 00FF0C7D A 1901 gbEndPointAX2B: 00FF0C7D 07 A 1902 gbEPAX2B_bLength: db 07h 00FF0C7E 05 A 1903 gbEPAX2B_bDescriptorType: db ENDPOINT_DESCR 00FF0C7F 0F A 1904 gbEPAX2B_bEndPointAddress: db 0Fh ;EP address 15,in 00FF0C80 01 A 1905 gbEPAX2B_bmAtrributes: db 01h ;ISOC 00FF0C81 0004 A 1906 gbEPAX2B_wMaxPacketSize: dw 0004h ;Max Packet 1024 bytes 00FF0C83 00 A 1907 gbEPAX2B_bInterval: db 0h A 1908 00FF0C84 A 1909 gbEndPointAX2C: 00FF0C84 07 A 1910 gbEPAX2C_bLength: db 07h 00FF0C85 05 A 1911 gbEPAX2C_bDescriptorType: db ENDPOINT_DESCR 00FF0C86 0E A 1912 gbEPAX2C_bEndPointAddress: db 0Eh ;EP address 14,in 00FF0C87 01 A 1913 gbEPAX2C_bmAtrributes: db 01h ;ISOC 00FF0C88 2000 A 1914 gbEPAX2C_wMaxPacketSize: dw 2000h ;Max Packet 32 bytes 00FF0C8A 00 A 1915 gbEPAX2C_bInterval: db 0h PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 48 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm A 1916 00FF0C8B A 1917 gbEndPointAX2D: 00FF0C8B 07 A 1918 gbEPAX2D_bLength: db 07h 00FF0C8C 05 A 1919 gbEPAX2D_bDescriptorType: db ENDPOINT_DESCR 00FF0C8D 0D A 1920 gbEPAX2D_bEndPointAddress: db 0Dh ;EP address 13 00FF0C8E 01 A 1921 gbEPAX2D_bmAtrributes: db 01h ;ISOC 00FF0C8F 3100 A 1922 gbEPAX2D_wMaxPacketSize: dw 3100h ;Max Packet 49 bytes 00FF0C91 00 A 1923 gbEPAX2D_bInterval: db 0h A 1924 00FF0C92 A 1925 gbEndPointAX2E: 00FF0C92 07 A 1926 gbEPAX2E_bLength: db 07h 00FF0C93 05 A 1927 gbEPAX2E_bDescriptorType: db ENDPOINT_DESCR 00FF0C94 0C A 1928 gbEPAX2E_bEndPointAddress: db 0Ch ;EP address 12 00FF0C95 01 A 1929 gbEPAX2E_bmAtrributes: db 01h ;ISOC 00FF0C96 0002 A 1930 gbEPAX2E_wMaxPacketSize: dw 0002h ;Max Packet 512 bytes 00FF0C98 00 A 1931 gbEPAX2E_bInterval: db 0h A 1932 A 1933 ; /*------------- Initialize Alternate Interface descriptor 3---------------*/ 00FF0C99 A 1934 gbAltXface3Descriptor: 00FF0C99 09 A 1935 gbAltXface3_bLength: db 09h 00FF0C9A 04 A 1936 gbAltXface3_bDescriptorType: db INTERFACE_DESCR 00FF0C9B 02 A 1937 gbAltXface3_bInterfaceNumber: db 02h 00FF0C9C 03 A 1938 gbAltXface3_bAlternateSetting: db 03h 00FF0C9D 05 A 1939 gbAltXface3_bNumEndpoints: db 5h 00FF0C9E DC A 1940 gbAltXface3_bInterfaceClass: db 0DCh 00FF0C9F 50 A 1941 gbAltXface3_bInterfaceSubClass: db 50h 00FF0CA0 00 A 1942 gbAltXface3_bInterfaceProtocol: db 00h 00FF0CA1 00 A 1943 gbAltXface3_iInterface: db 0 A 1944 A 1945 ; /*------------- Initialize Endpoints in Alternate interface 3 ---------------*/ 00FF0CA2 A 1946 gbEndPointAX3: 00FF0CA2 07 A 1947 gbEPAX3_bLength: db 07h 00FF0CA3 05 A 1948 gbEPAX3_bDescriptorType: db ENDPOINT_DESCR 00FF0CA4 04 A 1949 gbEPAX3_bEndpointAddress: db 04h ;EP address 4 00FF0CA5 01 A 1950 gbEPAX3_bmAtrributes: db 01h ;ISOC 00FF0CA6 6C03 A 1951 gbEPAX3_wMaxPacketSize: dw 06C03h ;Max Packet 876 bytes 00FF0CA8 00 A 1952 gbEPAX3_bInterval: db 0h A 1953 00FF0CA9 A 1954 gbEndPointAX3B: 00FF0CA9 07 A 1955 gbEPAX3B_bLength: db 07h 00FF0CAA 05 A 1956 gbEPAX3B_bDescriptorType: db ENDPOINT_DESCR 00FF0CAB 05 A 1957 gbEPAX3B_bEndPointAddress: db 05h ;EP address 5 00FF0CAC 01 A 1958 gbEPAX3B_bmAtrributes: db 01h ;ISOC 00FF0CAD 0002 A 1959 gbEPAX3B_wMaxPacketSize: dw 0002h ;Max Packet 512 bytes 00FF0CAF 00 A 1960 gbEPAX3B_bInterval: db 0h A 1961 00FF0CB0 A 1962 gbEndPointAX3C: 00FF0CB0 07 A 1963 gbEPAX3C_bLength: db 07h 00FF0CB1 05 A 1964 gbEPAX3C_bDescriptorType: db ENDPOINT_DESCR 00FF0CB2 06 A 1965 gbEPAX3C_bEndPointAddress: db 06h ;EP address 6,in 00FF0CB3 01 A 1966 gbEPAX3C_bmAtrributes: db 01h ;ISOC 00FF0CB4 0004 A 1967 gbEPAX3C_wMaxPacketSize: dw 0004h ;Max Packet 1024 bytes PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 49 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF0CB6 00 A 1968 gbEPAX3C_bInterval: db 0h A 1969 00FF0CB7 A 1970 gbEndPointAX3D: 00FF0CB7 07 A 1971 gbEPAX3D_bLength: db 07h 00FF0CB8 05 A 1972 gbEPAX3D_bDescriptorType: db ENDPOINT_DESCR 00FF0CB9 07 A 1973 gbEPAX3D_bEndPointAddress: db 07h ;EP address 7 00FF0CBA 01 A 1974 gbEPAX3D_bmAtrributes: db 01h ;ISOC 00FF0CBB 3801 A 1975 gbEPAX3D_wMaxPacketSize: dw 03801h ;Max Packet 312 bytes 00FF0CBD 00 A 1976 gbEPAX3D_bInterval: db 0h A 1977 00FF0CBE A 1978 gbEndPointAX3E: 00FF0CBE 07 A 1979 gbEPAX3E_bLength: db 07h 00FF0CBF 05 A 1980 gbEPAX3E_bDescriptorType: db ENDPOINT_DESCR 00FF0CC0 08 A 1981 gbEPAX3E_bEndPointAddress: db 08h ;EP address 8 00FF0CC1 01 A 1982 gbEPAX3E_bmAtrributes: db 01h ;ISOC 00FF0CC2 0902 A 1983 gbEPAX3E_wMaxPacketSize: dw 0902h ;Max Packet 521 bytes 00FF0CC4 00 A 1984 gbEPAX3E_bInterval: db 0h A 1985 A 1986 ; /*------------- Initialize Alternate Interface descriptor 4---------------*/ 00FF0CC5 A 1987 gbAltXface4Descriptor: 00FF0CC5 09 A 1988 gbAltXface4_bLength: db 09h 00FF0CC6 04 A 1989 gbAltXface4_bDescriptorType: db INTERFACE_DESCR 00FF0CC7 02 A 1990 gbAltXface4_bInterfaceNumber: db 02h 00FF0CC8 04 A 1991 gbAltXface4_bAlternateSetting: db 04h 00FF0CC9 05 A 1992 gbAltXface4_bNumEndpoints: db 5h 00FF0CCA DC A 1993 gbAltXface4_bInterfaceClass: db 0DCh 00FF0CCB 50 A 1994 gbAltXface4_bInterfaceSubClass: db 50h 00FF0CCC 00 A 1995 gbAltXface4_bInterfaceProtocol: db 00h 00FF0CCD 00 A 1996 gbAltXface4_iInterface: db 0 A 1997 A 1998 ; /*------------- Initialize Endpoints in Alternate interface 4 ---------------*/ 00FF0CCE A 1999 gbEndPointAX4: 00FF0CCE 07 A 2000 gbEPAX4_bLength: db 07h 00FF0CCF 05 A 2001 gbEPAX4_bDescriptorType: db ENDPOINT_DESCR 00FF0CD0 0D A 2002 gbEPAX4_bEndpointAddress: db 0Dh ;EP address 13 00FF0CD1 01 A 2003 gbEPAX4_bmAtrributes: db 01h ;ISOC 00FF0CD2 0903 A 2004 gbEPAX4_wMaxPacketSize: dw 00903h ;Max Packet 777 bytes 00FF0CD4 00 A 2005 gbEPAX4_bInterval: db 0h A 2006 00FF0CD5 A 2007 gbEndPointAX4B: 00FF0CD5 07 A 2008 gbEPAX4B_bLength: db 07h 00FF0CD6 05 A 2009 gbEPAX4B_bDescriptorType: db ENDPOINT_DESCR 00FF0CD7 0C A 2010 gbEPAX4B_bEndPointAddress: db 0Ch ;EP address 12 00FF0CD8 01 A 2011 gbEPAX4B_bmAtrributes: db 01h ;ISOC 00FF0CD9 7302 A 2012 gbEPAX4B_wMaxPacketSize: dw 07302h ;Max Packet 627 bytes 00FF0CDB 00 A 2013 gbEPAX4B_bInterval: db 0h A 2014 00FF0CDC A 2015 gbEndPointAX4C: 00FF0CDC 07 A 2016 gbEPAX4C_bLength: db 07h 00FF0CDD 05 A 2017 gbEPAX4C_bDescriptorType: db ENDPOINT_DESCR 00FF0CDE 0B A 2018 gbEPAX4C_bEndPointAddress: db 0Bh ;EP address 11 00FF0CDF 01 A 2019 gbEPAX4C_bmAtrributes: db 01h ;ISOC PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 50 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF0CE0 0002 A 2020 gbEPAX4C_wMaxPacketSize: dw 0002h ;Max Packet 512 bytes 00FF0CE2 00 A 2021 gbEPAX4C_bInterval: db 0h A 2022 00FF0CE3 A 2023 gbEndPointAX4D: 00FF0CE3 07 A 2024 gbEPAX4D_bLength: db 07h 00FF0CE4 05 A 2025 gbEPAX4D_bDescriptorType: db ENDPOINT_DESCR 00FF0CE5 0A A 2026 gbEPAX4D_bEndPointAddress: db 0Ah ;EP address 10 00FF0CE6 01 A 2027 gbEPAX4D_bmAtrributes: db 01h ;ISOC 00FF0CE7 0004 A 2028 gbEPAX4D_wMaxPacketSize: dw 0004h ;Max Packet 1024 bytes 00FF0CE9 00 A 2029 gbEPAX4D_bInterval: db 0h A 2030 00FF0CEA A 2031 gbEndPointAX4E: 00FF0CEA 07 A 2032 gbEPAX4E_bLength: db 07h 00FF0CEB 05 A 2033 gbEPAX4E_bDescriptorType: db ENDPOINT_DESCR 00FF0CEC 09 A 2034 gbEPAX4E_bEndPointAddress: db 09h ;EP address 8 00FF0CED 01 A 2035 gbEPAX4E_bmAtrributes: db 01h ;ISOC 00FF0CEE 4003 A 2036 gbEPAX4E_wMaxPacketSize: dw 04003h ;Max Packet 832 bytes 00FF0CF0 00 A 2037 gbEPAX4E_bInterval: db 0h A 2038 A 2039 ; /*------------- Initialize Alternate Interface descriptor 5---------------*/ 00FF0CF1 A 2040 gbAltXface5Descriptor: 00FF0CF1 09 A 2041 gbAltXface5_bLength: db 09h 00FF0CF2 04 A 2042 gbAltXface5_bDescriptorType: db INTERFACE_DESCR 00FF0CF3 02 A 2043 gbAltXface5_bInterfaceNumber: db 02h 00FF0CF4 05 A 2044 gbAltXface5_bAlternateSetting: db 05h 00FF0CF5 05 A 2045 gbAltXface5_bNumEndpoints: db 5h 00FF0CF6 DC A 2046 gbAltXface5_bInterfaceClass: db 0DCh 00FF0CF7 50 A 2047 gbAltXface5_bInterfaceSubClass: db 50h 00FF0CF8 00 A 2048 gbAltXface5_bInterfaceProtocol: db 00h 00FF0CF9 00 A 2049 gbAltXface5_iInterface: db 0 A 2050 A 2051 ; /*------------- Initialize Endpoints in Alternate interface 5 ---------------*/ 00FF0CFA A 2052 gbEndPointAX5: 00FF0CFA 07 A 2053 gbEPAX5_bLength: db 07h 00FF0CFB 05 A 2054 gbEPAX5_bDescriptorType: db ENDPOINT_DESCR 00FF0CFC 0E A 2055 gbEPAX5_bEndpointAddress: db 0Eh ;EP address 14 00FF0CFD 01 A 2056 gbEPAX5_bmAtrributes: db 01h ;ISOC 00FF0CFE 9A02 A 2057 gbEPAX5_wMaxPacketSize: dw 09A02h ;Max Packet 666 bytes 00FF0D00 00 A 2058 gbEPAX5_bInterval: db 0h A 2059 00FF0D01 A 2060 gbEndPointAX5B: 00FF0D01 07 A 2061 gbEPAX5B_bLength: db 07h 00FF0D02 05 A 2062 gbEPAX5B_bDescriptorType: db ENDPOINT_DESCR 00FF0D03 0C A 2063 gbEPAX5B_bEndPointAddress: db 0Ch ;EP address 12 00FF0D04 01 A 2064 gbEPAX5B_bmAtrributes: db 01h ;ISOC 00FF0D05 0002 A 2065 gbEPAX5B_wMaxPacketSize: dw 0002h ;Max Packet 512 bytes 00FF0D07 00 A 2066 gbEPAX5B_bInterval: db 0h A 2067 00FF0D08 A 2068 gbEndPointAX5C: 00FF0D08 07 A 2069 gbEPAX5C_bLength: db 07h 00FF0D09 05 A 2070 gbEPAX5C_bDescriptorType: db ENDPOINT_DESCR 00FF0D0A 0A A 2071 gbEPAX5C_bEndPointAddress: db 0Ah ;EP address 10 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 51 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF0D0B 01 A 2072 gbEPAX5C_bmAtrributes: db 01h ;ISOC 00FF0D0C A501 A 2073 gbEPAX5C_wMaxPacketSize: dw 0A501h ;Max Packet 421 bytes 00FF0D0E 00 A 2074 gbEPAX5C_bInterval: db 0h A 2075 00FF0D0F A 2076 gbEndPointAX5D: 00FF0D0F 07 A 2077 gbEPAX5D_bLength: db 07h 00FF0D10 05 A 2078 gbEPAX5D_bDescriptorType: db ENDPOINT_DESCR 00FF0D11 08 A 2079 gbEPAX5D_bEndPointAddress: db 08h ;EP address 8 00FF0D12 01 A 2080 gbEPAX5D_bmAtrributes: db 01h ;ISOC 00FF0D13 BE03 A 2081 gbEPAX5D_wMaxPacketSize: dw 0BE03h ;Max Packet 958 bytes 00FF0D15 00 A 2082 gbEPAX5D_bInterval: db 0h A 2083 00FF0D16 A 2084 gbEndPointAX5E: 00FF0D16 07 A 2085 gbEPAX5E_bLength: db 07h 00FF0D17 05 A 2086 gbEPAX5E_bDescriptorType: db ENDPOINT_DESCR 00FF0D18 06 A 2087 gbEPAX5E_bEndPointAddress: db 06h ;EP address 6 00FF0D19 01 A 2088 gbEPAX5E_bmAtrributes: db 01h ;ISOC 00FF0D1A 0004 A 2089 gbEPAX5E_wMaxPacketSize: dw 0004h ;Max Packet 1024 bytes 00FF0D1C 00 A 2090 gbEPAX5E_bInterval: db 0h A 2091 A 2092 00FF0D1D A 2093 gEndDescriptorLabel: A 2094 00FF0D1D A 2095 STRING0: 00FF0D1D 0004 A 2096 dw 04h ; Four for the BufferControlData routine 00FF0D1F 04 A 2097 db 04h ; Four bytes long 00FF0D20 03 A 2098 db 03h ; String descriptor type 00FF0D21 09 A 2099 db 09h ; This is the unicode identifier for English 00FF0D22 01 A 2100 db 01h 00FF0D23 A 2101 STRING1: 00FF0D23 26 A 2102 db STRING2 - STRING1 - 1 00FF0D24 496E7465 6C204172 A 2103 db "Intel Architecture Labs (C) Intel 1996" 00FF0D2C 63686974 65637475 00FF0D34 7265204C 61627320 00FF0D3C 28432920 496E7465 00FF0D44 6C203139 3936 00FF0D4A A 2104 STRING2: 00FF0D4A 2E A 2105 db STRING3 - STRING2 - 1 00FF0D4B 4D756C74 692D496E A 2106 db "Multi-Interface: Loopback & ISO with Suspend" 00FF0D53 74657266 6163653A 00FF0D5B 20204C6F 6F706261 00FF0D63 636B2026 2049534F 00FF0D6B 20207769 74682053 00FF0D73 75737065 6E64 00FF0D79 A 2107 STRING3: 00FF0D79 09 A 2108 db STRING4 - STRING3 - 1 00FF0D7A 49414C2D 30303030 A 2109 db "IAL-00002" 00FF0D82 32 00FF0D83 A 2110 STRING4: 00FF0D83 23 A 2111 db STRING5 - STRING4 - 1 00FF0D84 4C6F6F70 6261636B A 2112 db "Loopback Interface, 1 endpoint pair" 00FF0D8C 20496E74 65726661 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 52 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF0D94 63652C20 3120656E 00FF0D9C 64706F69 6E742070 00FF0DA4 616972 00FF0DA7 A 2113 STRING5: 00FF0DA7 2A A 2114 db STRING6 - STRING5 - 1 00FF0DA8 49534F20 494E2069 A 2115 db "ISO IN interface with 6 alternate settings" 00FF0DB0 6E746572 66616365 00FF0DB8 20776974 68203620 00FF0DC0 616C7465 726E6174 00FF0DC8 65207365 7474696E 00FF0DD0 6773 00FF0DD2 A 2116 STRING6: 00FF0DD2 2B A 2117 db STRING_END - STRING6 - 1 00FF0DD3 49534F20 4F555420 A 2118 db "ISO OUT interface with 6 alternate settings" 00FF0DDB 696E7465 72666163 00FF0DE3 65207769 74682036 00FF0DEB 20616C74 65726E61 00FF0DF3 74652073 65747469 00FF0DFB 6E6773 00FF0DFE A 2119 STRING_END: 00FF0DFE 00 A 2120 db 00h A 2121 SCOPE 00FF0DFF A 2122 INIT_VARIABLES: A 2123 ;Init SETUP VARIABLES 00FF0DFF A57EB000 A 2124 mov R11,#0 ; Zero out R11 to represent initial state 00FF0E03 A57EE4 0000 A 2125 mov WR28,#0 ; Access in page 00h 00FF0E08 A57EF4 9000 A 2126 mov WR30,#LOW16(SetupSeq) ; Offset of SetupSeq var 00FF0E0D A57A7BB0 A 2127 mov @DR28,R11 ; Initial state is wait for SETUP A 2128 A 2129 ; 00FF0E11 A57E54 0000 A 2130 mov WR10, #00h ; 00FF0E16 A57EF4 D800 A 2131 mov WR30, #LOW16(_EP1RxPtr); 00FF0E1B A51B7A50 A 2132 mov @DR28, WR10 ; 00FF0E1F A52EF4 0002 A 2133 add WR30, #02h ; 00FF0E24 A51B7A50 A 2134 mov @DR28, WR10 ; 00FF0E28 A52EF4 0002 A 2135 add WR30, #02h ; 00FF0E2D A51B7A50 A 2136 mov @DR28, WR10 ; A 2137 ;initialize the buffer variables for 00FF0E31 A57EF4 E800 A 2138 mov WR30, #LOW16(_EP2RxPtr);the three endpoints 00FF0E36 A51B7A50 A 2139 mov @DR28, WR10 ; 00FF0E3A A52EF4 0002 A 2140 add WR30, #02h ; 00FF0E3F A51B7A50 A 2141 mov @DR28, WR10 ; 00FF0E43 A52EF4 0002 A 2142 add WR30, #02h ; 00FF0E48 A51B7A50 A 2143 mov @DR28, WR10 ; A 2144 ; 00FF0E4C A57EF4 F800 A 2145 mov WR30, #LOW16(_EP3RxPtr); 00FF0E51 A51B7A50 A 2146 mov @DR28, WR10 ; 00FF0E55 A52EF4 0002 A 2147 add WR30, #02h ; 00FF0E5A A51B7A50 A 2148 mov @DR28, WR10 ; 00FF0E5E A52EF4 0002 A 2149 add WR30, #02h ; 00FF0E63 A51B7A50 A 2150 mov @DR28, WR10 ; A 2151 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 53 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm A 2152 A 2153 00FF0E67 A57EA4 0000 A 2154 mov WR20,#0 00FF0E6C A57EB4 A000 A 2155 mov WR22, #low16(out_var_table) 00FF0E71 A57E54 0000 A 2156 mov WR10, #0 00FF0E76 A57E44 0000 A 2157 mov WR8,#0 00FF0E7B A57A5BB0 A 2158 ?l1: mov @DR20,R11 ;This loop zeroes out the 64 byte area 00FF0E7F A52EB4 0001 A 2159 add WR22,#1 ;at out_var_table. I'm not sure why. 00FF0E84 A52E8001 A 2160 add R8,#1 00FF0E88 A5BE8040 A 2161 cmp R8,#64 00FF0E8C A578 EC A 2162 jne ?l1 A 2163 A 2164 ;Zero out the output buffer area. A 2165 00FF0E8F A57EA4 0000 A 2166 mov WR20, #0 00FF0E94 A57EB4 C000 A 2167 mov WR22, #low16(OUT_BUFFERS) 00FF0E99 A57E54 0000 A 2168 mov WR10, #0 00FF0E9E A57E44 0000 A 2169 mov WR8,#0 00FF0EA3 A57A5BB0 A 2170 ?l2: mov @DR20,R11 00FF0EA7 A52EB4 0001 A 2171 add WR22,#1 00FF0EAC A52E44 0001 A 2172 add WR8,#1 A 2173 ; cmp WR8,#1000 00FF0EB1 A5BE44 0010 A 2174 cmp WR8,#10h 00FF0EB6 A578 EA A 2175 jne ?l2 00FF0EB9 A57E54 0000 A 2176 mov WR10, #00h 00FF0EBE A57EB4 A00C A 2177 mov WR22, #LOW16(DATA_PENDING) 00FF0EC3 A57A5BA0 A 2178 mov @DR20, R10 00FF0EC7 A57EB4 A00F A 2179 mov WR22, #LOW16(DIRECTION_ERROR_COUNT) 00FF0ECC A57A5BA0 A 2180 mov @DR20, R10 00FF0ED0 A57EB4 A00D A 2181 mov WR22, #LOW16(PENDING_START_TIME) 00FF0ED5 A51B5A50 A 2182 mov @DR20, WR10 00FF0ED9 22 A 2183 RET A 2184 SCOPE A 2185 A 2186 00FF0EDA A 2187 Lng_Delay: 00FF0EDA A5CAC9 A 2188 push WR24 00FF0EDD A5CAD9 A 2189 push WR26 00FF0EE0 A57EC4 0082 A 2190 MOV WR24, #082H 00FF0EE5 80 10 A 2191 JMP DE2 A 2192 A 2193 00FF0EE7 A 2194 Delay_X: ;MOV P1,DPXL 00FF0EE7 A5CAC9 A 2195 push WR24 ;5 states 00FF0EEA A5CAD9 A 2196 push WR26 ;5 states 00FF0EED A57EC4 0001 A 2197 MOV WR24, #001H ;3 states 00FF0EF2 A 2198 DE1: 00FF0EF2 A57ED4 04FF A 2199 MOV WR26, #004FFH ;3 states cfffh original ;0fff works 00FF0EF7 A 2200 DE2: 00FF0EF7 A51BD4 A 2201 DEC WR26, #1 ;2 states 00FF0EFA A5BED4 0000 A 2202 CMP WR26, #00H ;4 states 00FF0EFF A578 F5 A 2203 JNE DE2 ;5 states T ; 2 states NT PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 54 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 00FF0F02 A51BC4 A 2204 DEC WR24, #1 ;2 states 00FF0F05 A5BEC4 0000 A 2205 CMP WR24, #00H ;4 states 00FF0F0A A578 E5 A 2206 JNE DE1 ;5 states T ; 2 states NT 00FF0F0D A5DAD9 A 2207 POP WR26 ;5 states 00FF0F10 A5DAC9 A 2208 POP WR24 ;5 states 00FF0F13 22 A 2209 QUICK1: RET ; A 2210 A 2211 A 2212 A 2213 A 2214 ;############################################################# A 2215 ;####### RAM MEMORY MAP ###################################### A 2216 ;############################################################# A 2217 A 2218 ; org 00:0000h ;0-4ff Reserved A 2219 A 2220 ; org 00:0500h ; Variables A 2221 A 2222 ; org 00:0600h ; Variables for the IN token buffers A 2223 A 2224 ;; A 2225 ;; Data block for EP1. Contains buffer space and some management variables. A 2226 ;; A 2227 A 2228 define OUR_DATA_SEG, SPACE=pdata A 2229 segment OUR_DATA_SEG A 2230 0000D000 A 2231 org 00:D000h 0000D000 A 2232 EP_1_Buffer: ds 1 A 2233 0000D800 A 2234 org 00:D800h 0000D800 A 2235 _EP1RxPtr: ds 2 0000D802 A 2236 _EP1TxPtr: ds 2 0000D804 A 2237 _EP1DataCount: ds 2 0000D806 A 2238 _gbMPSEndPoint1: ds 1 0000D807 A 2239 _gbMPSEndPoint2: ds 1 A 2240 A 2241 ;; A 2242 ;; Data block for EP2. Contains buffer space and some management variables. A 2243 ;; A 2244 0000E000 A 2245 org 00:E000h 0000E000 A 2246 EP_2_Buffer: ds 1 A 2247 0000E800 A 2248 org 00:E800h 0000E800 A 2249 _EP2RxPtr: ds 2 0000E802 A 2250 _EP2TxPtr: ds 2 0000E804 A 2251 _EP2DataCount: ds 2 A 2252 A 2253 ;; A 2254 ;; Data block for EP3. Contains buffer space and some management variables. A 2255 ;; PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 55 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm A 2256 0000F000 A 2257 org 00:F000h 0000F000 A 2258 EP_3_Buffer: ds 1 A 2259 0000F800 A 2260 org 00:F800h 0000F800 A 2261 _EP3RxPtr: ds 2 0000F802 A 2262 _EP3TxPtr: ds 2 0000F804 A 2263 _EP3DataCount: ds 2 A 2264 A 2265 00009000 A 2266 org 00:9000h A 2267 00009000 A 2268 SETUP_VARS: 00009000 A 2269 SetupSeq: ds 1 00009001 A 2270 heart_pat: ds 1 00009002 A 2271 heart_bt0: ds 2 00009004 A 2272 heart_bt1: ds 2 00009006 A 2273 new_addr: ds 1 A 2274 00009100 A 2275 org 00:9100h A 2276 00009100 A 2277 COMMAND_BUFFER: 00009100 A 2278 ds 1 ; Byte Count 00009101 A 2279 StandardDeviceRequest: 00009101 A 2280 bmRequestType: ds 1 00009102 A 2281 bRequest: ds 1 00009103 A 2282 wValue: ds 2 00009105 A 2283 wIndex: ds 2 00009107 A 2284 wLength: ds 2 A 2285 A 2286 A 2287 ; define OUR_DATA_SEG, SPACE=data, ORG=00:A000h A 2288 ; segment OUR_DATA_SEG A 2289 0000A000 A 2290 org 00:A000h A 2291 A 2292 0000A000 A 2293 out_var_table: 0000A000 A 2294 out_cur_buf: ds 2 0000A002 A 2295 out_cnt: ds 2 A 2296 0000A004 A 2297 in_var_table: A 2298 0000A004 A 2299 in_rd_pntr: ds 2 0000A006 A 2300 in_bytes_left: ds 2 0000A008 A 2301 in_FIFO_size: ds 1 0000A009 A 2302 in_FIFO_empty: ds 1 A 2303 0000A00A A 2304 MyConfigVal: ds 1 0000A00B A 2305 MyInterfaceVal: ds 1 A 2306 0000A00C A 2307 DATA_PENDING: ds 1 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:06 page: 56 PC Machine Code I Line File: c:\usb\930code\bulk&iso\bulk&iso.asm 0000A00D A 2308 PENDING_START_TIME: ds 2 0000A00F A 2309 DIRECTION_ERROR_COUNT: ds 1 A 2310 A 2311 0000B000 A 2312 org 00:B000h ; A 2313 0000B000 A 2314 IN_BUFFERS: A 2315 0000C000 A 2316 org 00:C000h ; A 2317 0000C000 A 2318 OUT_BUFFERS: A 2319 A 2320 A 2321 A 2322 END Errors: 0 Warnings: 0 Lines Assembled: 2856