PLC 80251 Macro Assembler, Version 2.11 04-Mar-97 15:36:54 page: 1 PC Machine Code I Line File: A 1 ; ====================================== A 2 ; A 3 ; Usb_enum.ASM A 4 ; Firmware for the 8x930Ax. Ax2, Ax3 and A 5 ; enumeration. It is to be programmed A 6 ; of the Evaluation kit to be used as a A 7 ; A 8 ; rev 1.0 (3 Mar 97) A 9 ; A 10 ; ====================================== A 11 B 0 INCLUDE "8x930Ax.h" B 1 ; ====================================== B 2 ; B 3 ; 8x930Ax.h B 4 ; header file for usb_enum.asm B 5 ; B 6 ; ====================================== B 7 000000FF B 8 SBTM: EQU 0FFH 000000F1 B 9 EPINDEX: EQU 0F1H B 10 000000F2 B 11 TXSTAT: EQU 0F2H 000000F2 B 12 TXSTAT0: EQU 0F2H 000000F2 B 13 TXSTAT1: EQU 0F2H 000000F2 B 14 TXSTAT2: EQU 0F2H 000000F2 B 15 TXSTAT3: EQU 0F2H 000000F2 B 16 HTXSTAT0: EQU 0F2H B 17 000000F3 B 18 TXDAT: EQU 0F3H 000000F3 B 19 TXDAT0: EQU 0F3H 000000F3 B 20 TXDAT1: EQU 0F3H 000000F3 B 21 TXDAT2: EQU 0F3H 000000F3 B 22 TXDAT3: EQU 0F3H 000000F3 B 23 FTXDAT0: EQU 0F3H 000000F3 B 24 FTXDAT1: EQU 0F3H 000000F3 B 25 FTXDAT2: EQU 0F3H 000000F3 B 26 FTXDAT3: EQU 0F3H 000000F3 B 27 HTXDAT0: EQU 0F3H 000000F3 B 28 HTXDAT1: EQU 0F3H B 29 000000F4 B 30 TXCON: EQU 0F4H 000000F4 B 31 TXCON0: EQU 0F4H 000000F4 B 32 TXCON1: EQU 0F4H 000000F4 B 33 TXCON2: EQU 0F4H 000000F4 B 34 TXCON3: EQU 0F4H B 35 000000F4 B 36 FTXCON0: EQU 0F4H 000000F4 B 37 FTXCON1: EQU 0F4H 000000F4 B 38 FTXCON2: EQU 0F4H 000000F4 B 39 FTXCON3: EQU 0F4H 000000F4 B 40 HTXCON0: EQU 0F4H PLC 80251 Macro Assembler, Version 2.11 04-Mar-97 15:36:54 page: 2 PC Machine Code I Line File: 8x930Ax.h B 41 000000F5 B 42 TXFLG: EQU 0F5H 000000F5 B 43 TXFLG0: EQU 0F5H 000000F5 B 44 TXFLG1: EQU 0F5H 000000F5 B 45 TXFLG2: EQU 0F5H 000000F5 B 46 TXFLG3: EQU 0F5H 000000F5 B 47 FTXFLG0: EQU 0F5H 000000F5 B 48 FTXFLG1: EQU 0F5H 000000F5 B 49 FTXFLG2: EQU 0F5H 000000F5 B 50 FTXFLG3: EQU 0F5H 000000F5 B 51 HTXFLG0: EQU 0F5H B 52 B 53 B 54 000000F6 B 55 TXCNT0: EQU 0F6h 000000F6 B 56 TXCNT1: EQU 0F6h 000000F6 B 57 TXCNT2: EQU 0F6h 000000F6 B 58 TXCNT3: EQU 0F6h B 59 000000F6 B 60 TXCNT: EQU 0F6H 000000F6 B 61 FTXCNTO: EQU 0F6H 000000F6 B 62 FTXCNT1: EQU 0F6H 000000F6 B 63 FTXCNT2: EQU 0F6H 000000F6 B 64 FTXCNT3: EQU 0F6H 000000F6 B 65 HTXCNTO: EQU 0F6H 000000F6 B 66 TXCNTL: EQU 0F6H 000000F7 B 67 TXCNTH: EQU 0F7H B 68 000000E8 B 69 HIS: EQU 0E8H B 70 B 71 000000E1 B 72 EPCON: EQU 0E1H 000000E1 B 73 EPCON0: EQU 0E1H 000000E1 B 74 EPCON1: EQU 0E1H 000000E1 B 75 EPCON2: EQU 0E1H 000000E1 B 76 EPCON3: EQU 0E1H 000000E1 B 77 HEPCON0: EQU 0E1H B 78 000000E2 B 79 RXSTAT: EQU 0E2H 000000E2 B 80 RXSTAT0: EQU 0E2H 000000E2 B 81 RXSTAT1: EQU 0E2H 000000E2 B 82 RXSTAT2: EQU 0E2H 000000E2 B 83 RXSTAT3: EQU 0E2H 000000E2 B 84 HRXSTAT0: EQU 0E2H B 85 000000E3 B 86 RXDAT: EQU 0E3H 000000E3 B 87 RXDAT0: EQU 0E3H 000000E3 B 88 RXDAT1: EQU 0E3H 000000E3 B 89 RXDAT2: EQU 0E3H 000000E3 B 90 RXDAT3: EQU 0E3H B 91 000000E3 B 92 FRXDAT0: EQU 0E3H PLC 80251 Macro Assembler, Version 2.11 04-Mar-97 15:36:54 page: 3 PC Machine Code I Line File: 8x930Ax.h 000000E3 B 93 FRXDAT1: EQU 0E3H 000000E3 B 94 FRXDAT2: EQU 0E3H 000000E3 B 95 FRXDAT3: EQU 0E3H 000000E3 B 96 HRXDAT0: EQU 0E3H B 97 000000E4 B 98 RXCON: EQU 0E4H 000000E4 B 99 RXCON0: EQU 0E4H 000000E4 B 100 RXCON1: EQU 0E4H 000000E4 B 101 RXCON2: EQU 0E4H 000000E4 B 102 RXCON3: EQU 0E4H B 103 000000E4 B 104 FRXCON0: EQU 0E4H 000000E4 B 105 FRXCON1: EQU 0E4H 000000E4 B 106 FRXCON2: EQU 0E4H 000000E4 B 107 FRXCON3: EQU 0E4H 000000E4 B 108 HRXCON0: EQU 0E4H B 109 000000E5 B 110 RXFLG: EQU 0E5H 000000E5 B 111 RXFLG0: EQU 0E5H 000000E5 B 112 RXFLG1: EQU 0E5H 000000E5 B 113 RXFLG2: EQU 0E5H 000000E5 B 114 RXFLG3: EQU 0E5H B 115 B 116 000000E5 B 117 FRXFLG: EQU 0E5H 000000E5 B 118 FRXFLG0: EQU 0E5H 000000E5 B 119 FRXFLG1: EQU 0E5H 000000E5 B 120 FRXFLG2: EQU 0E5H 000000E5 B 121 FRXFLG3: EQU 0E5H 000000E5 B 122 HRXFLG0: EQU 0E5H B 123 B 124 000000E6 B 125 RXCNT0: EQU 0E6h 000000E6 B 126 RXCNT1: EQU 0E6h 000000E6 B 127 RXCNT2: EQU 0E6h 000000E6 B 128 RXCNT3: EQU 0E6h B 129 000000E6 B 130 RXCNT: EQU 0E6H 000000E6 B 131 FRXCNT0: EQU 0E6H 000000E6 B 132 FRXCNT1: EQU 0E6H 000000E6 B 133 FR2XCNT2: EQU 0E6H 000000E6 B 134 FRXCNT3: EQU 0E6H 000000E6 B 135 HRXCNT0: EQU 0E6H 000000E6 B 136 RXCNTL: EQU 0E6H 000000E7 B 137 RXCNTH: EQU 0E7H B 138 000000DF B 139 UPWCON: EQU 0DFH 000000D2 B 140 SOFL: EQU 0D2H 000000D3 B 141 SOFH: EQU 0D3H 000000D4 B 142 UPINDEX: EQU 0D4H B 143 000000D5 B 144 UPSTCH: EQU 0D5H PLC 80251 Macro Assembler, Version 2.11 04-Mar-97 15:36:54 page: 4 PC Machine Code I Line File: 8x930Ax.h 000000D5 B 145 UPSTCH1: EQU 0D5H 000000D5 B 146 UPSTCH2: EQU 0D5H 000000D5 B 147 UPSTCH3: EQU 0D5H 000000D5 B 148 UPSTCH4: EQU 0D5H B 149 000000D7 B 150 UPSTAT: EQU 0D7H 000000D7 B 151 UPSTAT1: EQU 0D7H 000000D7 B 152 UPSTAT2: EQU 0D7H 000000D7 B 153 UPSTAT3: EQU 0D7H 000000D7 B 154 UPSTAT4: EQU 0D7H B 155 000000CF B 156 UPCON: EQU 0CFH 000000CF B 157 UPCON1: EQU 0CFH 000000CF B 158 UPCON2: EQU 0CFH 000000CF B 159 UPCON3: EQU 0CFH 000000CF B 160 UPCON4: EQU 0CFH 000000AE B 161 HSTAT: EQU 0AEH B 162 0000009A B 163 UPPWR: EQU 09AH 00000097 B 164 HADDR: EQU 097H 0000008F B 165 FADDR: EQU 08FH B 166 ;;; for 3.06 DPXL EQU 084H B 167 ;---------------------------------- B 168 ;- INTERRUPT REGISTERS B 169 ;---------------------------------- 000000B1 B 170 IEA: EQU 0B1H 000000B1 B 171 IEN1 EQU 0B1H 000000A8 B 172 IEN0 EQU 0A8H 000000B2 B 173 IPA: EQU 0B2H 000000B3 B 174 IPA1: EQU 0B3H B 175 000000A1 B 176 HIE: EQU 0A1H 000000A2 B 177 FIE: EQU 0A2H 000000C0 B 178 FIS: EQU 0C0h 000000C0 B 179 SBI: EQU 0C0H ; Backward COmpat B 180 000000B1 B 181 AA_IE1: EQU 0B1H B 182 ;IE0: EQU 0A8H 000000B3 B 183 IPH1: EQU 0B3H 000000B2 B 184 IPL1: EQU 0B2H 000000A2 B 185 SBIE: EQU 0A2H B 186 B 187 ;---------------------------------- B 188 ;- PCON B 189 ;---------------------------------- B 190 B 191 LC EQU PCON.5 B 192 B 193 ;---------------------------------- B 194 ;- PCON1 B 195 ;---------------------------------- B 196 PLC 80251 Macro Assembler, Version 2.11 04-Mar-97 15:36:54 page: 5 PC Machine Code I Line File: 8x930Ax.h B 197 B 198 RWU EQU PCON1.2 B 199 GRSM EQU PCON1.1 B 200 GSUS EQU PCON1.0 B 201 B 202 ;---------------------------------- B 203 ;- SOFH B 204 ;---------------------------------- B 205 SFACK EQU SOFH.7 B 206 ASOF EQU SOFH.6 B 207 SOFIE EQU SOFH.5 B 208 FLOCK EQU SOFH.4 B 209 SOFDIS EQU SOFH.3 B 210 B 211 ;---------------------------------- B 212 ;- EPCON B 213 ;---------------------------------- B 214 RXSTL EQU EPCON.7 B 215 TXSTL EQU EPCON.6 B 216 CTLEP EQU EPCON.5 B 217 RXSPM EQU EPCON.4 B 218 RXIE EQU EPCON.3 B 219 RXEPEN EQU EPCON.2 B 220 TXOE EQU EPCON.1 B 221 TXEPEN EQU EPCON.7 B 222 B 223 ;---------------------------------- B 224 ;- RXSTAT B 225 ;---------------------------------- B 226 RXSEQ EQU RXSTAT.7 B 227 RXSETUP EQU RXSTAT.6 B 228 STOVW EQU RXSTAT.5 B 229 EDOVW EQU RXSTAT.4 B 230 RXDTO EQU RXSTAT.3 B 231 RXVOID EQU RXSTAT.2 B 232 RXERR EQU RXSTAT.1 B 233 RXACK EQU RXSTAT.0 B 234 B 235 ;---------------------------------- B 236 ;- TXSTAT B 237 ;---------------------------------- B 238 TXSEQ EQU TXSTAT.7 B 239 ;-- B 240 ;-- B 241 TXFLUSH EQU TXSTAT.4 B 242 TXDTO EQU TXSTAT.3 B 243 TXVOID EQU TXSTAT.2 B 244 TXERR EQU TXSTAT.1 B 245 TXACK EQU TXSTAT.0 B 246 B 247 B 248 PLC 80251 Macro Assembler, Version 2.11 04-Mar-97 15:36:54 page: 6 PC Machine Code I Line File: 8x930Ax.h B 249 ;---------------------------------- B 250 ;- RXCON B 251 ;---------------------------------- B 252 RXCLR EQU RXCON.7 B 253 ;- B 254 RXWS EQU RXCON.5 B 255 RXFFRC EQU RXCON.4 B 256 RXISO EQU RXCON.3 B 257 ARM EQU RXCON.2 B 258 ADVWM EQU RXCON.1 B 259 REVWP EQU RXCON.0 B 260 B 261 ;---------------------------------- B 262 ;- TXCON B 263 ;---------------------------------- B 264 TXCLR EQU TXCON.7 B 265 ;- B 266 TXWS EQU TXCON.5 B 267 TXFFRC EQU TXCON.4 B 268 TXISO EQU TXCON.3 B 269 ATM EQU TXCON.2 B 270 ADVRM EQU TXCON.1 B 271 REVRP EQU TXCON.0 B 272 B 273 B 274 ;---------------------------------- B 275 ;- FIE B 276 ;---------------------------------- B 277 FTXIE0 EQU FIE.0 B 278 FRXIE0 EQU FIE.1 B 279 FTXIE1 EQU FIE.2 B 280 FRXIE1 EQU FIE.3 B 281 FTXIE2 EQU FIE.4 B 282 FRXIE2 EQU FIE.5 B 283 FTXIE3 EQU FIE.6 B 284 FRXIE3 EQU FIE.7 B 285 B 286 ;---------------------------------- B 287 ;- FIFLG B 288 ;---------------------------------- 000000C0 B 289 FIFLG EQU 0C0H B 290 FTXD0 EQU FIFLG.0 B 291 FRXD0 EQU FIFLG.1 B 292 FTXD1 EQU FIFLG.2 B 293 FRXD1 EQU FIFLG.3 B 294 FTXD2 EQU FIFLG.4 B 295 FRXD2 EQU FIFLG.5 B 296 FTXD3 EQU FIFLG.6 B 297 FRXD3 EQU FIFLG.7 B 298 B 299 ;---------------------------------- B 300 ;- RXFLG PLC 80251 Macro Assembler, Version 2.11 04-Mar-97 15:36:54 page: 7 PC Machine Code I Line File: 8x930Ax.h B 301 ;---------------------------------- B 302 RXFIF1 EQU RXFLG.7 B 303 RXFIF0 EQU RXFLG.6 B 304 ;--- B 305 RXEMP EQU RXFLG.3 B 306 RXFULL EQU RXFLG.2 B 307 RXURF EQU RXFLG.1 B 308 RXOVF EQU RXFLG.0 B 309 B 310 B 311 ;---------------------------------- B 312 ; TXFLG B 313 TXFIF1 EQU TXFLG.7 B 314 TXFIF0 EQU TXFLG.6 B 315 ;--- B 316 ;--- B 317 TXEMP EQU TXFLG.3 B 318 TXFULL EQU TXFLG.2 B 319 TXURF EQU TXFLG.1 B 320 TXOVF EQU TXFLG.0 B 321 B 322 ; -------------------------------------- B 323 ; USB chapter 9 stuff B 324 ; B 325 ; ====================================== B 326 ;bRequest Types B 327 ; 00000000 B 328 GET_STATUS equ 00h 00000001 B 329 CLEAR_FEATURE equ 01h 00000002 B 330 GET_STATE equ 02h 00000003 B 331 SET_FEATURE equ 03h 00000004 B 332 RESERVED2 equ 04h 00000005 B 333 SET_ADDRESS equ 05h 00000006 B 334 GET_DESCRIPTOR equ 06h 00000007 B 335 SET_DESCRIPTOR equ 07h 00000008 B 336 GET_CONFIGURATION equ 08h 00000009 B 337 SET_CONFIGURATION equ 09h 0000000A B 338 GET_INTERFACE equ 0Ah 0000000B B 339 SET_INTERFACE equ 0Bh 0000000C B 340 SYCH_FRAME equ 0Ch B 341 B 342 ; ====================================== B 343 ;Descriptor Types B 344 ; 00000001 B 345 DEVICE_DESCR equ 0 00000002 B 346 CONFIG_DESCR equ 0 00000003 B 347 STRING_DESCR equ 0 00000004 B 348 INTERFACE_DESCR equ 0 00000005 B 349 ENDPOINT_DESCR equ 0 B 350 B 351 ; ====================================== B 352 ;Feature Selectors PLC 80251 Macro Assembler, Version 2.11 04-Mar-97 15:36:54 page: 8 PC Machine Code I Line File: 8x930Ax.h B 353 ; B 354 00000001 B 355 DEVICE_REMOTE_WAKEUP equ 0 00000000 B 356 ENDPOINT_STALL equ 0 B 357 B 358 ; ====================================== B 359 ;Recipient Selectors B 360 ; B 361 00000001 B 362 INTERFACE_TARGET equ 0 00000002 B 363 ENDPOINT_TARGET equ 0 00000003 B 364 OTHER_TARGET equ 0 00000003 B 365 PORT_TARGET equ 0 B 366 B 367 ; ====================================== B 368 ;Stall Masks B 369 ; 000000BF B 370 CLEAR_IN_STALL_MASK equ 0 0000007F B 371 CLEAR_OUT_STALL_MASK equ 0 00000040 B 372 SET_IN_STALL_MASK equ 0 00000080 B 373 SET_OUT_STALL_MASK equ 0 B 374 B 375 ; ====================================== B 376 ;Equates for clearing bits in SBI regist B 377 ; B 378 B 379 000000FE B 380 EP0_TX_CLR equ 0FEh 000000FD B 381 EP0_RX_CLR equ 0FDh B 382 000000FB B 383 EP1_TX_CLR equ 0FBh 000000F7 B 384 EP1_RX_CLR equ 0F7h B 385 000000EF B 386 EP2_TX_CLR equ 0EFh 000000DF B 387 EP2_RX_CLR equ 0DFh B 388 000000BF B 389 EP3_TX_CLR equ 0BFh 0000007F B 390 EP3_RX_CLR equ 07Fh B 391 00000001 B 392 SUSPEND_EVENT_PENDING_FLAG: equ 1h 00000002 B 393 SUSPEND_EVENT_EXECUTED_FLAG: equ 2h B 394 B 395 A 13 00000008 A 14 FIFO_SIZE equ 008h 00000080 A 15 GET_COMMAND equ 080h 00000000 A 16 SETUP_PHASE equ 000h 00000001 A 17 DATA_PHASE equ 001h 00000002 A 18 STATUS_PHASE equ 002h 00000008 A 19 EP0_MAX_PACKET_SIZE equ 08h 00000000 A 20 NULL_DATA_PACKET equ 000h A 21 PLC 80251 Macro Assembler, Version 2.11 04-Mar-97 15:36:54 page: 9 PC Machine Code I Line File: c:\device\usb_enum.asm 00FF7FF8 A 22 org 0ff:7ff8H 00FF7FF8 D6 A 23 db 0D6h ;congifuration byte 00FF7FF9 EF A 24 db 0EFh A 25 A 26 ;; org 00:4000H ; if use PLC and RISM 00FF0000 A 27 org 0ff:0000H 00FF0000 02 0080 A 28 ljmp main A 29 A 30 ;; org 00:4043H 00FF0043 A 31 org 0ff:0043H 00FF0043 02 011E A 32 ljmp SOF_ISR A 33 A 34 ;; org 00:404BH 00FF004B A 35 org 0ff:004BH 00FF004B 02 00FF A 36 ljmp FUNCTION_ISR A 37 A 38 ;; org 00:4080H 00FF0080 A 39 org 0ff:0080H A 40 ;======================================= A 41 ; Main A 42 ; 00FF0080 A 43 main: 00FF0080 758100 A 44 mov SP, #00h 00FF0083 75BE01 A 45 mov SPH, #01h 00FF0086 7584FF A 46 mov DPXL, #0ffh A 47 00FF0089 A 48 Init_Variables: 00FF0089 7800 A 49 mov R0, #00h 00FF008B A57A03 0018 A 50 mov Beat1, R0 00FF0090 A57A03 0019 A 51 mov Beat1+1, R0 ; A 52 00FF0095 A57A03 0001 A 53 mov SetupRxFlag, R0 00FF009A A57A03 0000 A 54 mov SetupTxFlag, R0 A 55 00FF009F A57A03 0013 A 56 mov ControlBuffLocation, R0 00FF00A4 A57A03 0014 A 57 mov ControlBuffLocation+1, R 00FF00A9 A57A03 0015 A 58 mov ControlBuffLocation+2, R A 59 00FF00AE A57A03 0016 A 60 mov ControlBuffBytesLeft, R0 A 61 00FF00B3 A57E04 0000 A 62 mov WR0, #0 00FF00B8 A57D10 A 63 mov WR2, WR0 A 64 A 65 00FF00BB A 66 Init_Usb: ; con 00FF00BB 75F100 A 67 mov EPINDEX, #00 ; sel 00FF00BE 00 A 68 nop 00FF00BF 00 A 69 nop 00FF00C0 75E13F A 70 mov EPCON, #3Fh ; ena A 71 ; sin A 72 ; and A 73 PLC 80251 Macro Assembler, Version 2.11 04-Mar-97 15:36:54 page: 10 PC Machine Code I Line File: c:\device\usb_enum.asm 00FF00C3 43A203 A 74 orl FIE, #03h ; enabl 00FF00C6 A5A9D1B1 A 75 setb IEN1.1 ; enabl A 76 00FF00CA A5A9D5D3 A 77 setb SOFIE ; enabl 00FF00CE A5A9D0B1 A 78 setb IEN1.0 ; enabl A 79 00FF00D2 D2AF A 80 setb EA ; enabl A 81 00FF00D4 759000 A 82 mov p1, #00H ; P1 is 00FF00D7 A5A9C587 A 83 CLR LC ; incre A 84 00FF00DB 02 00DE A 85 ljmp Idle_loop A 86 A 87 A 88 ;======================================= A 89 ; Idel_loop A 90 ; device looping here awating interrupts A 91 ; 00FF00DE A 92 Idle_loop: 00FF00DE 00 A 93 nop 00FF00DF 00 A 94 nop ; can implement user app 00FF00E0 00 A 95 nop A 96 00FF00E1 A 97 LedBeat: 00FF00E1 A57E07 0018 A 98 mov WR0, Beat1 00FF00E6 A50B04 A 99 inc WR0, #1 00FF00E9 A57A07 0018 A 100 mov Beat1, WR0 00FF00EE A5BE04 7FFF A 101 cmp WR0, #7FFFh 00FF00F3 40 05 A 102 jl ClrBit 00FF00F5 D290 A 103 setb P1.0 00FF00F7 02 00DE A 104 ljmp Idle_loop 00FF00FA A 105 ClrBit: 00FF00FA C290 A 106 clr P1.0 00FF00FC 02 00DE A 107 ljmp Idle_loop A 108 A 109 A 110 ; ====================================== A 111 ; FUNCTION_ISR A 112 ; device jumps here when a receive done A 113 ; occurs A 114 ; 00FF00FF A 115 FUNCTION_ISR: 00FF00FF C0E0 A 116 push ACC 00FF0101 C0F0 A 117 push B 00FF0103 C0F1 A 118 push EPINDEX A 119 00FF0105 A 120 CheckInterruptSource: 00FF0105 A 121 F_EP0_RX: A 122 00FF0105 30C1 06 A 123 jnb FRXD0, F_EP0_TX 00FF0108 75F100 A 124 mov EPINDEX,#00 00FF010B 12 0125 A 125 lCall SetupOutToken ; 930 PLC 80251 Macro Assembler, Version 2.11 04-Mar-97 15:36:54 page: 11 PC Machine Code I Line File: c:\device\usb_enum.asm A 126 00FF010E A 127 F_EP0_TX: 00FF010E 30C0 06 A 128 jnb FTXD0, F_EP1_TX 00FF0111 75F100 A 129 mov EPINDEX,#00 00FF0114 12 0377 A 130 lCall InReceived ; 930 A 131 00FF0117 A 132 F_EP1_TX: A 133 00FF0117 A 134 EXIT_FUNCTION_ISR: 00FF0117 D0F1 A 135 pop EPINDEX 00FF0119 D0F0 A 136 pop B 00FF011B D0E0 A 137 pop ACC 00FF011D 32 A 138 reti A 139 A 140 A 141 ; ====================================== A 142 ; SOF_ISR at every 1ms A 143 ; do nothing here for our example A 144 ; 00FF011E A 145 SOF_ISR: A 146 00FF011E A5A9C6D3 A 147 clr ASOF 00FF0122 B293 A 148 cpl p1.3 ; complement p1 A 149 00FF0124 32 A 150 reti A 151 A 152 ; ====================================== A 153 ; SetupOutToken A 154 ; check whether a Setup or an OUT token A 155 ; 00FF0125 A 156 SetupOutToken: A 157 00FF0125 53C0FD A 158 anl SBI, #EP0_RX_CLR 00FF0128 02 012B A 159 ljmp ProcCommand A 160 00FF012B A 161 ProcCommand: 00FF012B E5E2 A 162 mov A, RXSTAT 00FF012D 30E6 0C A 163 jnb ACC.6, CheckOutStatusPha A 164 00FF0130 E5F5 A 165 mov A, TXFLG 00FF0132 54C0 A 166 anl A, #0C0h 00FF0134 60 00 A 167 jZ NoEP0Error A 168 00FF0136 A 169 NoEP0Error: 00FF0136 12 0186 A 170 lCall SetupReceived A 171 A 172 ;; !!! moved setb RXFFRC A 173 ;; !!! moved clr RXSETUP A 174 00FF0139 02 0185 A 175 ljmp ReturnProcessOutToken A 176 00FF013C A 177 CheckOutStatusPhase: PLC 80251 Macro Assembler, Version 2.11 04-Mar-97 15:36:54 page: 12 PC Machine Code I Line File: c:\device\usb_enum.asm 00FF013C E5 01 A 178 mov A, SetupRxFlag 00FF013E B402 11 A 179 cjne A, #STATUS_PHASE, Ou A 180 00FF0141 A5A9D4E4 A 181 setb RXFFRC 00FF0145 A5A9D7F4 A 182 setb TXCLR A 183 A 184 00FF0149 7400 A 185 mov A, #SETUP_PHASE A 186 00FF014B F5 01 A 187 mov SetupRxFlag, A 00FF014D F5 00 A 188 mov SetupTxFlag, A 00FF014F 02 0185 A 189 ljmp ReturnProcessOutToken A 190 A 191 ;------------------------------- A 192 ; Control Write Data Stage A 193 ; A 194 ; If this is a control write com A 195 ; routine will be called on all A 196 ; When all the data has been col A 197 ; the actual routine is called. A 198 ; buffer length. A 199 ; The code must then call SetUpC A 200 ; the status stage to continue. A 201 00FF0152 A 202 OutReceived: 00FF0152 B401 30 A 203 cjne A, #DATA_PHASE, Retu A 204 ; Are we processing a Control Wr A 205 ; Added to handle control writes A 206 ; When a control Write with a da A 207 ; the data is placed in the buff A 208 00FF0155 A5CA08 A 209 push R0 00FF0158 74 0A A 210 mov A, #CntlWriteDataBuf A 211 00FF015A 25 12 A 212 add A, CntlWriteDataPntr 00FF015C F8 A 213 mov R0, A A 214 ; R0 now contains the location t A 215 A 216 00FF015D E5E6 A 217 mov A, RXCNT 00FF015F 25 12 A 218 add A, CntlWriteDataPnt 00FF0161 F5 12 A 219 mov CntlWriteDataPntr, A A 220 00FF0163 E5E6 A 221 mov A, RXCNT 00FF0165 60 09 A 222 JZ RdDone A 223 00FF0167 A 224 ReadData: 00FF0167 A6E3 A 225 mov @R0, RXDAT 00FF0169 08 A 226 inc R0 00FF016A D5E0 FA A 227 djnz ACC, ReadData 00FF016D A5DA08 A 228 pop R0 00FF0170 A 229 RdDone: PLC 80251 Macro Assembler, Version 2.11 04-Mar-97 15:36:54 page: 13 PC Machine Code I Line File: c:\device\usb_enum.asm 00FF0170 A5A9D4E4 A 230 setb RXFFRC A 231 A 232 A 233 00FF0174 E5 12 A 234 mov A, CntlWriteDataPntr 00FF0176 B5 09 0C A 235 cjne A, wLength+1, NeedMo A 236 00FF0179 A 237 ProcessControlWriteData: A 238 00FF0179 A5CAEB A 239 push DPX A 240 00FF017C 12 01DD A 241 lcall Ch9Decode A 242 00FF017F A5DAEB A 243 pop DPX 00FF0182 02 0185 A 244 ljmp ReturnProcessOutToken A 245 00FF0185 A 246 NeedMoreData: 00FF0185 A 247 CheckCommand2: 00FF0185 A 248 ReturnProcessOutToken: 00FF0185 22 A 249 Ret A 250 A 251 A 252 ; ====================================== A 253 ; SetupReceived A 254 ; device braches here when a setup token A 255 ; 00FF0186 A 256 SetupReceived: 00FF0186 E5E6 A 257 mov A, RXCNT0 00FF0188 C2D7 A 258 clr CY A 259 00FF018A 9408 A 260 subb A, #8 00FF018C 70 2D A 261 JNZ ReturnSetup A 262 00FF018E A5A9C4E2 A 263 clr EDOVW 00FF0192 85E3 02 A 264 mov COMMAND_BUFFER, RXDAT 00FF0195 85E3 03 A 265 mov COMMAND_BUFFER+1, RXDAT 00FF0198 85E3 05 A 266 mov COMMAND_BUFFER+3, RXDAT 00FF019B 85E3 04 A 267 mov COMMAND_BUFFER+2, RXDAT 00FF019E 85E3 07 A 268 mov COMMAND_BUFFER+5, RXDAT 00FF01A1 85E3 06 A 269 mov COMMAND_BUFFER+4, RXDAT 00FF01A4 85E3 09 A 270 mov COMMAND_BUFFER+7, RXDAT 00FF01A7 85E3 08 A 271 mov COMMAND_BUFFER+6, RXDAT A 272 00FF01AA A5CAEB A 273 push DPX A 274 A 275 00FF01AD A5A9D4E4 A 276 setb RXFFRC ;; !!! m 00FF01B1 A5A9C6E2 A 277 clr RXSETUP ;; !!! d A 278 00FF01B5 12 01BC A 279 lCall ProcessSetup 00FF01B8 A5DAEB A 280 pop DPX A 281 PLC 80251 Macro Assembler, Version 2.11 04-Mar-97 15:36:54 page: 14 PC Machine Code I Line File: c:\device\usb_enum.asm 00FF01BB A 282 ReturnSetup: 00FF01BB 22 A 283 Ret A 284 A 285 A 286 ; ====================================== A 287 ; Process Setup A 288 ; decode the setup packet received A 289 ; 00FF01BC A 290 ProcessSetup: A 291 00FF01BC 75 16 00 A 292 mov ControlBuffBytesLeft, 00FF01BF 75 17 00 A 293 mov ControlBuffBytesLeft + 1 00FF01C2 E5 02 A 294 mov A, bmRequestT 00FF01C4 20E7 10 A 295 jb ACC.7, SetupGetCo A 296 00FF01C7 A 297 SetupSetCommand: 00FF01C7 75 01 01 A 298 mov SetupRxFlag, #DATA_PHASE 00FF01CA 75 00 02 A 299 mov SetupTxFlag, #STATUS_PHA A 300 00FF01CD E5 08 A 301 mov A, wLength 00FF01CF 45 09 A 302 orl A, wLength+1 00FF01D1 60 0A A 303 jz Ch9Decode A 304 00FF01D3 75 12 00 A 305 mov CntlWriteDataPntr, #0 A 306 00FF01D6 22 A 307 ret A 308 A 309 A 310 00FF01D7 A 311 SetupGetCommand: 00FF01D7 75 01 02 A 312 mov SetupRxFlag, #STATUS_PHA 00FF01DA 75 00 01 A 313 mov SetupTxFlag, #DATA_PHASE A 314 A 315 A 316 ; ====================================== A 317 ; Ch9Decode A 318 ; to decode the bMRequestType according A 319 ; we decode the bmRequestType first A 320 ; 00FF01DD A 321 Ch9Decode: A 322 00FF01DD E5 02 A 323 mov A, bmRequestType A 324 A 325 ; check standards commands ?? 00FF01DF 20E6 42 A 326 jb ACC.6, OthersCommands 00FF01E2 20E5 3F A 327 jb ACC.5, OthersCommands A 328 A 329 ; divide into set or get command 00FF01E5 20E7 03 A 330 jb ACC.7, GetCommands 00FF01E8 02 0209 A 331 ljmp SetCommands A 332 00FF01EB A 333 GetCommands: PLC 80251 Macro Assembler, Version 2.11 04-Mar-97 15:36:54 page: 15 PC Machine Code I Line File: c:\device\usb_enum.asm 00FF01EB 53E01F A 334 anl ACC, #1FH ; ignore 00FF01EE B400 03 A 335 cjne A, #00H, next_c01 00FF01F1 02 0225 A 336 ljmp StandardGetDeviceCommand A 337 00FF01F4 A 338 next_c01: 00FF01F4 B401 03 A 339 cjne A, #01H, next_c02 00FF01F7 02 0376 A 340 ljmp StandardGetInterfaceComm A 341 00FF01FA A 342 next_c02: 00FF01FA B402 03 A 343 cjne A, #02H, next_c03 00FF01FD 02 02AE A 344 ljmp StandardGetEndpointComma A 345 00FF0200 A 346 next_c03: 00FF0200 B403 03 A 347 cjne A, #03H, next_c04 00FF0203 02 0376 A 348 ljmp StandardGetOtherCommand A 349 00FF0206 A 350 next_c04: 00FF0206 02 0224 A 351 ljmp OthersCommands A 352 00FF0209 A 353 SetCommands: 00FF0209 53E01F A 354 anl ACC, #1FH ; ignore 00FF020C B400 03 A 355 cjne A, #00H, next_c11 00FF020F 02 0354 A 356 ljmp StandardSetDeviceCommand A 357 00FF0212 A 358 next_c11: 00FF0212 B401 03 A 359 cjne A, #01H, next_c12 00FF0215 02 0376 A 360 ljmp StandardSetInterfaceComm A 361 00FF0218 A 362 next_c12: 00FF0218 B402 03 A 363 cjne A, #02H, next_c13 00FF021B 02 02FC A 364 ljmp StandardSetEndpointComma A 365 00FF021E A 366 next_c13: 00FF021E B403 03 A 367 cjne A, #03H, next_c14 00FF0221 02 0376 A 368 ljmp StandardSetOtherCommand A 369 00FF0224 A 370 next_c14: A 371 00FF0224 A 372 OthersCommands: A 373 ; not implemented yet 00FF0224 22 A 374 ret A 375 A 376 ; ====================================== A 377 ; STANDARD COMMANDS A 378 ; further decode the standards commands A 379 ; 00FF0225 A 380 StandardGetDeviceCommand: 00FF0225 E5 03 A 381 mov A, bRequest 00FF0227 B406 67 A 382 cjne A, #GET_DESCRIPTOR, A 383 00FF022A E5 04 A 384 mov A, bDescriptorType 00FF022C B401 11 A 385 cjne A, #DEVICE_DESCR, Ch PLC 80251 Macro Assembler, Version 2.11 04-Mar-97 15:36:54 page: 16 PC Machine Code I Line File: c:\device\usb_enum.asm A 386 A 387 ; ---- GET DESCRIPTOR, DEVICE 00FF022F 75 13 FF A 388 mov ControlBuffLocation, # 00FF0232 75 14 04 A 389 mov ControlBuffLocation+1, # 00FF0235 75 15 01 A 390 mov ControlBuffLocation+2, # 00FF0238 7412 A 391 mov A, #12h 00FF023A 75F000 A 392 mov B, #00h 00FF023D 02 0268 A 393 ljmp LoadBuffer A 394 00FF0240 A 395 CheckConfigDescriptor: 00FF0240 B402 11 A 396 cjne A, #CONFIG_DESCR, Ch A 397 A 398 ; ----- GET DESCRIPTOR, CONFIGUR 00FF0243 75 13 FF A 399 mov ControlBuffLocation, # 00FF0246 75 14 04 A 400 mov ControlBuffLocation+1, # 00FF0249 75 15 13 A 401 mov ControlBuffLocation+2, # 00FF024C 74 12 A 402 mov A, #LOW (END_CONFIG_DE 00FF024E 75F0 00 A 403 mov B, #HIGH (END_CONFIG_DE 00FF0251 02 0268 A 404 ljmp LoadBuffer A 405 00FF0254 A 406 CheckStringDescriptor: 00FF0254 B403 46 A 407 cjne A, #STRING_DESCR, Re A 408 ; -------- GET DESCRIPTOR, CONF 00FF0257 75 13 FF A 409 mov ControlBuffLocation, # 00FF025A 75 14 04 A 410 mov ControlBuffLocation+1, # 00FF025D 75 15 25 A 411 mov ControlBuffLocation+2, # A 412 00FF0260 74 13 A 413 mov A, #LOW (STRING_2-ST 00FF0262 75F0 00 A 414 mov B, #HIGH(STRING_2-ST 00FF0265 02 0268 A 415 ljmp LoadBuffer A 416 A 417 00FF0268 A 418 LoadBuffer: A 419 A 420 A 421 00FF0268 C0E0 A 422 push ACC 00FF026A C0F0 A 423 push B 00FF026C C2D7 A 424 clr CY 00FF026E 95 09 A 425 subb A, wLength+1 00FF0270 E5F0 A 426 mov A, B 00FF0272 95 08 A 427 subb A, wLength 00FF0274 40 0C A 428 jc AskedFor_IsLarger A 429 00FF0276 A 430 LengthsMatch: 00FF0276 A 431 wLengthIsSmaller: A 432 00FF0276 D0F0 A 433 pop B 00FF0278 D0E0 A 434 pop ACC 00FF027A 85 08 F0 A 435 mov B, wLength 00FF027D E5 09 A 436 mov A, wLength+1 00FF027F 02 0286 A 437 ljmp LoadIt PLC 80251 Macro Assembler, Version 2.11 04-Mar-97 15:36:54 page: 17 PC Machine Code I Line File: c:\device\usb_enum.asm A 438 00FF0282 A 439 AskedFor_IsLarger: 00FF0282 D0F0 A 440 pop B 00FF0284 D0E0 A 441 pop ACC 00FF0286 A 442 LoadIt: 00FF0286 85F0 16 A 443 mov ControlBuffBytesLeft, 00FF0289 F5 17 A 444 mov ControlBuffBytesLeft+1, 00FF028B 12 03A5 A 445 lCall LoadControlTXFifo 00FF028E 02 02AD A 446 ljmp ReturnSTDGetDeviceComma A 447 00FF0291 A 448 CheckGetConfiguration: 00FF0291 B408 03 A 449 cjne A, #GET_CONFIGURATIO A 450 ;------------------------------- A 451 ;- GET CONFIGURATION A 452 00FF0294 02 02AD A 453 ljmp ReturnSTDGetDeviceComma 00FF0297 A 454 CheckGetStatus: 00FF0297 B400 13 A 455 cjne A, #GET_STATUS, Retu A 456 ;------------------------------- A 457 ;- GET DEVICE STATUS A 458 00FF029A 02 02AD A 459 ljmp ReturnSTDGetDeviceComma A 460 00FF029D A 461 ReturnBADSTDGetDeviceCommand: 00FF029D C0F1 A 462 push EPINDEX 00FF029F 75F101 A 463 mov EPINDEX, #01 00FF02A2 75F312 A 464 mov TXDAT, #12h 00FF02A5 75F601 A 465 mov TXCNT, #01h 00FF02A8 D0F1 A 466 pop EPINDEX A 467 00FF02AA 43E1C0 A 468 orl EPCON0, #0C0h A 469 00FF02AD A 470 ReturnSTDGetDeviceCommand: 00FF02AD 22 A 471 ret A 472 A 473 ; ====================================== A 474 ; Standard Get Endpoint Commands A 475 ; 00FF02AE A 476 StandardGetEndpointCommand: A 477 00FF02AE E5 03 A 478 mov A, bRequest 00FF02B0 B400 27 A 479 cjne A, #GET_STATUS, R A 480 ;-------------------- A 481 ;- GET ENDPOINT STATU 00FF02B3 E5 07 A 482 mov A, wIndex + 1 00FF02B5 540F A 483 anl A, #0Fh 00FF02B7 42F1 A 484 orl EPINDEX,A A 485 00FF02B9 E5 07 A 486 mov A, wIndex + 1 00FF02BB 20E7 0A A 487 jb ACC.7, GetInStallStatus A 488 00FF02BE A 489 GetOutStallStatus: PLC 80251 Macro Assembler, Version 2.11 04-Mar-97 15:36:54 page: 18 PC Machine Code I Line File: c:\device\usb_enum.asm 00FF02BE E5E1 A 490 mov A, EPCON0 00FF02C0 30E6 0C A 491 jnb ACC.6, NotStalled 00FF02C3 7401 A 492 mov A, #01 00FF02C5 02 02CF A 493 ljmp DoneWithCommand A 494 00FF02C8 A 495 GetInStallStatus: 00FF02C8 E5E1 A 496 mov A, EPCON0 00FF02CA 30E7 02 A 497 jnb ACC.7, NotStalled 00FF02CD 7401 A 498 mov A, #01 A 499 A 500 00FF02CF A 501 DoneWithCommand: 00FF02CF A 502 NotStalled: 00FF02CF 53F180 A 503 anl EPINDEX,#80h 00FF02D2 F5F3 A 504 mov TXDAT0, A 00FF02D4 75F300 A 505 mov TXDAT0, #00h 00FF02D7 75F602 A 506 mov TXCNT0, #02 A 507 A 508 00FF02DA A 509 ReturnBadSTDGetEPCommand: 00FF02DA C0F1 A 510 push EPINDEX 00FF02DC 75F101 A 511 mov EPINDEX, #01 00FF02DF 75F313 A 512 mov TXDAT, #13h 00FF02E2 75F601 A 513 mov TXCNT, #01h 00FF02E5 D0F1 A 514 pop EPINDEX A 515 00FF02E7 43E1C0 A 516 orl EPCON0, #0C0h 00FF02EA A 517 ReturnSTDGetEPCommand: 00FF02EA 22 A 518 Ret A 519 A 520 ; ====================================== A 521 ; for single packer control read status A 522 ; 00FF02EB A 523 SetUpSinglePacketControlReadStatusStage: A 524 00FF02EB 75 08 00 A 525 mov wLength, #00 00FF02EE 75 09 00 A 526 mov wLength+1, #00 00FF02F1 75 01 02 A 527 mov SetupRxFlag, #STATUS_PHA 00FF02F4 75 00 01 A 528 mov SetupTxFlag, #DATA_PHASE 00FF02F7 A5A9D1E1 A 529 setb TXOE 00FF02FB 22 A 530 Ret A 531 A 532 A 533 ; ====================================== A 534 ; Standard Set Endpoint Command: A 535 ; 00FF02FC A 536 StandardSetEndpointCommand: 00FF02FC C0F1 A 537 push EPINDEX 00FF02FE E5 07 A 538 mov A, wIndex+1 00FF0300 540F A 539 anl A, #0Fh 00FF0302 42F1 A 540 orl EPINDEX,A A 541 PLC 80251 Macro Assembler, Version 2.11 04-Mar-97 15:36:54 page: 19 PC Machine Code I Line File: c:\device\usb_enum.asm A 542 00FF0304 E5 05 A 543 mov A, wValue+1 00FF0306 B400 36 A 544 cjne A, #ENDPOINT_STALL, A 545 00FF0309 E5 03 A 546 mov A, bRequest 00FF030B B401 1D A 547 cjne A, #CLEAR_FEATURE, A 548 00FF030E A 549 ClearEndpointFeature: A 550 ;-------------------- A 551 ;- CLEAR ENDPOINT STA 00FF030E A 552 ClearEndpointStall: 00FF030E E5 07 A 553 mov A, wIndex+1 00FF0310 540F A 554 anl A, #0Fh 00FF0312 70 06 A 555 JNZ ClearNonEP0Stall A 556 00FF0314 53E13F A 557 anl EPCON, #03Fh 00FF0317 02 034F A 558 ljmp ReturnSTDSetEPCommand A 559 00FF031A A 560 ClearNonEP0Stall: 00FF031A E5 07 A 561 mov A, wIndex+1 00FF031C 20E7 06 A 562 JB ACC.7, ClearInStall 00FF031F A 563 ClearOutStall: 00FF031F 53E17F A 564 anl EPCON0, #CLEAR_OUT_STALL 00FF0322 02 034F A 565 ljmp ReturnSTDSetEPCommand 00FF0325 A 566 ClearInStall: 00FF0325 53E1BF A 567 anl EPCON0, #CLEAR_IN_STALL_ 00FF0328 02 034F A 568 ljmp ReturnSTDSetEPCommand A 569 A 570 00FF032B A 571 CheckSetEndpointFeature: 00FF032B B403 11 A 572 cjne A, #SET_FEATURE, Re A 573 A 574 00FF032E A 575 SetEndpointFeature: A 576 ;-------------------- A 577 ;- SET ENDPOINT STALL 00FF032E A 578 SetEndpointStall: 00FF032E E5 07 A 579 mov A, wIndex+1 00FF0330 20E7 06 A 580 JB ACC.7, SetInStall 00FF0333 A 581 SetOutStall: 00FF0333 43E180 A 582 orl EPCON0, #SET_OUT_STALL_M 00FF0336 02 034F A 583 ljmp ReturnSTDSetEPCommand 00FF0339 A 584 SetInStall: 00FF0339 43E140 A 585 orl EPCON0, #SET_IN_STALL_MA 00FF033C 02 034F A 586 ljmp ReturnSTDSetEPCommand A 587 00FF033F A 588 ReturnBadSTDSetEPCommand: 00FF033F C0F1 A 589 push EPINDEX 00FF0341 75F101 A 590 mov EPINDEX, #01 00FF0344 75F314 A 591 mov TXDAT, #14h 00FF0347 75F601 A 592 mov TXCNT, #01h 00FF034A D0F1 A 593 pop EPINDEX PLC 80251 Macro Assembler, Version 2.11 04-Mar-97 15:36:54 page: 20 PC Machine Code I Line File: c:\device\usb_enum.asm A 594 00FF034C 43E1C0 A 595 orl EPCON0, #0C0h 00FF034F A 596 ReturnSTDSetEPCommand: 00FF034F D0F1 A 597 pop EPINDEX 00FF0351 02 03A1 A 598 ljmp SetUpControlWriteStatus A 599 A 600 A 601 ; ====================================== A 602 ; for standard set device commands A 603 ; 00FF0354 A 604 StandardSetDeviceCommand: A 605 00FF0354 E5 03 A 606 mov A, bRequest 00FF0356 B409 03 A 607 cjne A, #SET_CONFIGURATI 00FF0359 A 608 SetDeviceConfiguration: A 609 ;-------------------- A 610 ;- SET DEVICE CONFIGU A 611 00FF0359 02 0362 A 612 ljmp ReturnSTDSetDevice A 613 00FF035C A 614 CheckSetDeviceAddress: 00FF035C B405 06 A 615 cjne A, #SET_ADDRESS, Re A 616 ;-------------------- A 617 ;- SET DEVICE CONFIGU A 618 A 619 ; special case: Set Address shou A 620 ; the status stage 00FF035F 02 0362 A 621 ljmp ReturnSTDSetDevice 00FF0362 A 622 ReturnSTDSetDevice: 00FF0362 02 03A1 A 623 ljmp SetUpControlWriteStatus A 624 00FF0365 A 625 ReturnBadSetDeviceCommand: 00FF0365 C0F1 A 626 push EPINDEX 00FF0367 75F101 A 627 mov EPINDEX, #01 00FF036A 75F320 A 628 mov TXDAT, #20h 00FF036D 75F601 A 629 mov TXCNT, #01h 00FF0370 D0F1 A 630 pop EPINDEX A 631 00FF0372 43E1C0 A 632 orl EPCON0, #0C0h 00FF0375 22 A 633 ret A 634 00FF0376 A 635 StandardSetInterfaceCommand: 00FF0376 A 636 StandardGetInterfaceCommand: 00FF0376 A 637 StandardSetOtherCommand: 00FF0376 A 638 StandardGetOtherCommand: 00FF0376 22 A 639 ret A 640 A 641 ; ====================================== A 642 ; InReceived A 643 ; device branches here when IN token rec A 644 ; 00FF0377 A 645 InReceived: PLC 80251 Macro Assembler, Version 2.11 04-Mar-97 15:36:54 page: 21 PC Machine Code I Line File: c:\device\usb_enum.asm A 646 00FF0377 53C0FE A 647 anl FIS, #EP0_TX_CLR 00FF037A 02 037D A 648 ljmp CheckInStatusPhase A 649 00FF037D A 650 CheckInStatusPhase: A 651 00FF037D E5 00 A 652 mov A, SetupTxFlag 00FF037F B402 0C A 653 cjne A, #STATUS_PHASE,Se A 654 00FF0382 A 655 StatusPhaseDone: 00FF0382 12 0395 A 656 lCall CompleteSetCommand 00FF0385 75 00 00 A 657 mov SetupTxFlag, #SETUP_PHAS 00FF0388 75 01 00 A 658 mov SetupRxFlag, #SETUP_PHAS A 659 00FF038B 02 0394 A 660 ljmp ReturnProcessIn A 661 00FF038E A 662 SendDataBack: 00FF038E B401 03 A 663 cjne A, #DATA_PHASE, Ret 00FF0391 12 03A5 A 664 lcall LoadControlTXFifo A 665 00FF0394 A 666 ReturnProcessIn: 00FF0394 22 A 667 Ret A 668 A 669 ; ====================================== A 670 ; CompleteSetCommand A 671 ; 00FF0395 A 672 CompleteSetCommand: 00FF0395 E5 03 A 673 mov A, bRequest A 674 A 675 00FF0397 B405 06 A 676 cjne A, #SET_ADDRESS, Ch A 677 ;------------------------------------ A 678 ;- SET ADDRESS A 679 00FF039A A 680 DoSetFuncAddress: 00FF039A 85 05 8F A 681 mov FADDR, wValue+1 00FF039D 02 03A0 A 682 ljmp ReturnCompleteSet A 683 00FF03A0 A 684 CheckNextCommand: 00FF03A0 A 685 ReturnCompleteSet: 00FF03A0 22 A 686 ret A 687 A 688 ; ====================================== A 689 ; SetUpControlWriteStatusStage A 690 ; 00FF03A1 A 691 SetUpControlWriteStatusStage: 00FF03A1 75F600 A 692 mov TXCNT0, #00 A 693 ; setb TXOE0 00FF03A4 22 A 694 Ret A 695 A 696 ; ====================================== A 697 ; LoadControlTXFifo PLC 80251 Macro Assembler, Version 2.11 04-Mar-97 15:36:54 page: 22 PC Machine Code I Line File: c:\device\usb_enum.asm A 698 ; 00FF03A5 A 699 LoadControlTXFifo: 00FF03A5 A5CA08 A 700 push R0 00FF03A8 A5CAEB A 701 push DPX 00FF03AB 85 13 84 A 702 mov DPXL, ControlBuffLocat 00FF03AE 85 14 83 A 703 mov DPH, ControlBuffLocat 00FF03B1 85 15 82 A 704 mov DPL, ControlBuffLocat A 705 00FF03B4 E5 16 A 706 mov A, ControlBuffBytes 00FF03B6 45 17 A 707 orl A, ControlBuffBytes 00FF03B8 70 05 A 708 jnz CntlDataAvail A 709 00FF03BA 7800 A 710 mov R0, #0 00FF03BC 02 03F4 A 711 ljmp ControlArmTx A 712 00FF03BF A 713 CntlDataAvail 00FF03BF 7800 A 714 mov R0, #0 00FF03C1 E584 A 715 mov A, DPXL 00FF03C3 60 17 A 716 JZ DataInRAM A 717 A 718 ; ====================================== A 719 ; Data is in ROM, use instrcutions to pu A 720 ; 00FF03C5 A 721 DataInROM: 00FF03C5 7400 A 722 mov A, #00h A 723 00FF03C7 93 A 724 movc A, @A+DPTR A 725 00FF03C8 F5F3 A 726 mov TXDAT0, A 00FF03CA A3 A 727 inc DPTR 00FF03CB 08 A 728 inc R0 00FF03CC D5 17 07 A 729 djnz ControlBuffBytesLeft+1, A 730 00FF03CF A 731 ROMCheckUpper1: 00FF03CF E5 16 A 732 mov A, ControlBuffByte 00FF03D1 60 1B A 733 jz ControlTxUpd 00FF03D3 14 A 734 dec A 00FF03D4 F5 16 A 735 mov ControlBuffBytesLeft, A A 736 00FF03D6 A 737 ROMCheckMaxPacket: 00FF03D6 B808 EC A 738 cjne R0, #EP0_MAX_PACKET 00FF03D9 02 03EE A 739 ljmp ControlTxUpd A 740 A 741 A 742 ; ====================================== A 743 ; Data is in RAM, use instrcutions to pu A 744 ; 00FF03DC A 745 DataInRAM: 00FF03DC E0 A 746 movx A, @DPTR 00FF03DD F5F3 A 747 mov TXDAT0, A 00FF03DF A3 A 748 inc DPTR 00FF03E0 08 A 749 inc R0 PLC 80251 Macro Assembler, Version 2.11 04-Mar-97 15:36:54 page: 23 PC Machine Code I Line File: c:\device\usb_enum.asm 00FF03E1 D5 17 07 A 750 djnz ControlBuffBytesLeft+1, A 751 00FF03E4 A 752 RAMCheckUpper1: 00FF03E4 E5 16 A 753 mov A, ControlBuffByte 00FF03E6 60 06 A 754 jz ControlTxUpd 00FF03E8 14 A 755 dec A 00FF03E9 F5 16 A 756 mov ControlBuffBytesLeft, A A 757 00FF03EB A 758 RAMCheckMaxPacket: 00FF03EB B808 EE A 759 cjne R0, #EP0_MAX_PACKET A 760 A 761 00FF03EE A 762 ControlTxUpd 00FF03EE 8583 14 A 763 mov ControlBuffLocation+1, D 00FF03F1 8582 15 A 764 mov ControlBuffLocation+2, D A 765 00FF03F4 A 766 ControlArmTx: 00FF03F4 88F6 A 767 mov TXCNT0, R0 00FF03F6 A5A9D1E1 A 768 setb TXOE 00FF03FA A 769 ReturnLoadCntl: 00FF03FA A5DAEB A 770 pop DPX 00FF03FD A5DA08 A 771 pop R0 00FF0400 22 A 772 Ret A 773 A 774 A 775 ; ====================================== A 776 ; DEVICE DESCRIPTOR A 777 ; 8x930Ax is a Big Endian microcontrolle A 778 ; LSB in the numerically higher address. A 779 ; FUNCTION DESCRIPTOR A 780 ; A 781 ; *** Users are required to change the d A 782 ; A 783 00FF0401 A 784 BEGIN_DEVICE_DESCRIPTOR: 00FF0401 12 A 785 gDevice_bLength: db 00FF0402 01 A 786 gDevice_bDescriptorType: db 00FF0403 0001 A 787 gDevice_bcdUSB: dw A 788 A 789 ;; gDevice_bDeviceClass: d 00FF0405 04 A 790 gDevice_bDeviceClass: db A 791 00FF0406 01 A 792 gDevice_bDeviceSubClass: db 00FF0407 00 A 793 gDevice_bDeviceProtocol: db 00FF0408 08 A 794 gDevice_wMaxPacketSize0: db A 795 00FF0409 8680 A 796 gDevice_widVendor: dw 00FF040B 4956 A 797 gDevice_widProduct: dw A 798 ;; gDevice_widProduct: d A 799 00FF040D 0001 A 800 gDevice_bcdDevice: dw 00FF040F 00 A 801 gDevice_iManufacturer: db PLC 80251 Macro Assembler, Version 2.11 04-Mar-97 15:36:54 page: 24 PC Machine Code I Line File: c:\device\usb_enum.asm 00FF0410 00 A 802 gDevice_iProduct: db 00FF0411 00 A 803 gDevice_iSerialNumber: db 00FF0412 01 A 804 gDevice_bNumConfigurations: db 00FF0413 A 805 END_DEVICE_DESCRIPTOR: A 806 A 807 ;/*--------------- Initialize global Con 00FF0413 A 808 BEGIN_CONFIG_DESCRIPTOR: 00FF0413 09 A 809 gConfig_bLength: d 00FF0414 02 A 810 gConfig_bDescriptorType: d 00FF0415 12 A 811 gConfig_bTotalLength: d 00FF0416 00 A 812 gConfig_bCorrection: d 00FF0417 01 A 813 gConfig_bNumInterfaces: d 00FF0418 02 A 814 gConfig_bConfigurationValue: d 00FF0419 00 A 815 gConfig_iConfiguration: d 00FF041A 40 A 816 gConfig_bmAttributes: d 00FF041B 19 A 817 gConfig_MaxPower: d A 818 A 819 ; /*------------- Initialize globa 00FF041C A 820 BEGIN_INTERFACE_DESCRIPTOR: 00FF041C 09 A 821 gInterface_bLength: d 00FF041D 04 A 822 gInterface_bDescriptorType: d 00FF041E 00 A 823 gInterface_bInterfaceNumber: d 00FF041F 00 A 824 gInterface_bAlternateSetting: d 00FF0420 01 A 825 gInterface_bNumEndpoints: d 00FF0421 00 A 826 gInterface_bInterfaceClass: d 00FF0422 00 A 827 gInterface_bInterfaceSubClass: d 00FF0423 00 A 828 gInterface_bInterfaceProtocol: d 00FF0424 00 A 829 gInterface_iInterface: d 00FF0425 A 830 END_INTERFACE_DESCRIPTOR: A 831 00FF0425 A 832 END_CONFIG_DESCRIPTOR: A 833 00FF0425 A 834 STRING_LOC_TABLE: 00FF0425 13 A 835 STRING_1: db LOW(STRING_2-STRING_1 00FF0426 03 A 836 db STRING_DESCR 00FF0427 55534220 54657374 A 837 db "USB Test Firmware" 00FF042F 20466972 6D776172 00FF0437 65 00FF0438 A 838 STRING_2: A 839 A 840 ; ====================================== A 841 ; RAM MEMORY MAP A 842 ;- Control varaibles need to be placed b A 843 ;- If RISM is running, RISM needs 20h-3f A 844 ; A 845 DEFINE OUR_DATA_SEG, SPACE=DATA A 846 SEGMENT OUR_DATA_SEG A 847 A 848 ; A 849 ; Buffer and associated variables for Co A 850 ; 00000000 A 851 SetupTxFlag: ds 1 PLC 80251 Macro Assembler, Version 2.11 04-Mar-97 15:36:54 page: 25 PC Machine Code I Line File: c:\device\usb_enum.asm 00000001 A 852 SetupRxFlag: ds 1 A 853 00000002 A 854 COMMAND_BUFFER: 00000002 A 855 StandardDeviceRequest: 00000002 A 856 bmRequestType: ds 1 00000003 A 857 bRequest: ds 1 00000004 A 858 wValue: 00000004 A 859 wFeatureSelector: 00000004 A 860 bDescriptorType: ds 1 00000005 A 861 bDescriptorIndex: ds 1 00000006 A 862 wTargetSelector: 00000006 A 863 wIndex: ds 2 00000008 A 864 wLength: ds 2 0000000A A 865 CntlWriteDataBuffer: ds 8 A 866 00000012 A 867 CntlWriteDataPntr: ds 1 ; A 868 00000013 A 869 ControlBuffLocation ds 3 00000016 A 870 ControlBuffBytesLeft ds 2 A 871 00000018 A 872 Beat1: ds 2 A 873 A 874 END A 875 Errors: 0 Warnings: 0 Lines Assembled: 1270