PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 1 PC Machine Code I Line File: A 1 COMMENT /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A 2 (C) Copyright Intel Corp., 1996 A 3 A 4 File: outonly.asm based from newloop A 5 A 6 Universal Serial Bus 930 Test firmwar 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 Rahm A 12 0.1 02-13-96 Joe DrAgon 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 HU B 14 ;# B 15 ;# * * * Do NOT Include thi B 16 ;# You should define PROC equ "somethin 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 Jo 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 B 35 ;# B 36 ;####################################### B 37 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 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:17:24 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:17:24 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:17:24 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 COmpat 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:17:24 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:17:24 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:17:24 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 firmwar B 7 B 8 Revision History B 9 ------------------------------------- B 10 0.1 05-27-96 Abdul Rahm 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:17:24 page: 9 PC Machine Code I Line File: swap.inc B 19 DEBUG_PORT: MACRO Reg1, Immeadiate B 20 mov Reg1, gbDebugMes B 21 orl Reg1, #Immeadiat B 22 mov gbDebugMess, Reg B 23 mov P1, Reg1 B 24 ENDMAC DEBUG_PORT B 25 B 26 A 17 B 0 INCLUDE "ONE_OH.INC" B 1 ; B 2 ; ONE_OH.INC: This file contains equates B 3 ; It also includes equates f B 4 ; B 5 B 6 B 7 ;<<<<<<<<<<<<<< B 8 ;bRequest Types B 9 ;>>>>>>>>>>>>>> B 10 00000000 B 11 GET_STATUS equ 00h 00000001 B 12 CLEAR_FEATURE equ 01h 00000002 B 13 RESERVED1 equ 02h 00000003 B 14 SET_FEATURE equ 03h 00000004 B 15 RESERVED2 equ 04h 00000005 B 16 SET_ADDRESS equ 05h 00000006 B 17 GET_DESCRIPTOR equ 06h 00000007 B 18 SET_DESCRIPTOR equ 07h 00000008 B 19 GET_CONFIGURATION equ 08h 00000009 B 20 SET_CONFIGURATION equ 09h 0000000A B 21 GET_INTERFACE equ 0Ah 0000000B B 22 SET_INTERFACE equ 0Bh 0000000C B 23 SYCH_FRAME equ 0Ch B 24 B 25 ; B 26 ;Descriptor Types B 27 ; 00000001 B 28 DEVICE_DESCR equ 01h 00000002 B 29 CONFIG_DESCR equ 02h 00000003 B 30 STRING_DESCR equ 03h 00000004 B 31 INTERFACE_DESCR equ 04h 00000005 B 32 ENDPOINT_DESCR equ 05h B 33 B 34 ; B 35 ;Feature Selectors B 36 ; B 37 B 38 00000001 B 39 DEVICE_REMOTE_WAKEUP equ 01h 00000000 B 40 ENDPOINT_STALL equ 00h B 41 B 42 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 10 PC Machine Code I Line File: ONE_OH.INC B 43 B 44 B 45 ; B 46 ;Equates for clearing bits in SBI regist B 47 ; B 48 B 49 000000FE B 50 EP0_TX_CLR equ 0FEh 000000FD B 51 EP0_RX_CLR equ 0FDh B 52 000000FB B 53 EP1_TX_CLR equ 0FBh 000000F7 B 54 EP1_RX_CLR equ 0F7h B 55 000000EF B 56 EP2_TX_CLR equ 0EFh 000000DF B 57 EP2_RX_CLR equ 0DFh B 58 000000BF B 59 EP3_TX_CLR equ 0BFh 0000007F B 60 EP3_RX_CLR equ 07Fh B 61 B 62 B 63 ; B 64 ;Equates to access EP management variabl B 65 ; B 66 00000800 B 67 EPRXPTROFFSET equ 0800h 00000802 B 68 EPTXPTROFFSET equ 0802h 00000804 B 69 EPDATACNTOFFSET equ 0804h B 70 B 71 ; B 72 ; Ring buffer size (actually one less... B 73 ; 000007FF B 74 RINGBUFFSIZE equ 07FFh B 75 B 76 ; B 77 ;Equates for masking registers, addresse B 78 ; 0000F7FF B 79 RINGBUFFMASK equ 0F7FFh 000007FF B 80 RINGWORDMASK equ 07FFh 000000C0 B 81 FIFBITMASK equ 0C0h B 82 00000008 B 83 EP0MAXPACKET equ 08h 00000040 B 84 EP1MAXPACKET equ 40h 00000008 B 85 EP2MAXPACKET equ 08h 00000008 B 86 EP3MAXPACKET equ 08h B 87 00000001 B 88 R_ACK equ 01h 00000002 B 89 R_ERR equ 02h 00000004 B 90 R_VOID equ 04h 00000040 B 91 R_SETUP equ 40h 00000080 B 92 R_SEQ equ 80h B 93 00000012 B 94 DEVICE_DESCRIPTOR_LENGTH equ PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 11 PC Machine Code I Line File: ONE_OH.INC B 95 00000004 B 96 GET_REQUEST_TYPE_OFFSET equ B 97 00000008 B 98 SETUP_PACKET_LENGTH equ B 99 B 100 B 101 ;; Vendor Set commands... 00000003 B 102 CLR_DTR equ 00000004 B 103 CLR_RTS equ 00000005 B 104 SET_DTR equ 00000006 B 105 SET_RTS equ A 19 A 20 ;------------- External functions - proc 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, _EP1DataCo A 27 A 28 XDEF _EP2RxPtr, _EP2TxPtr, _EP2DataCo A 29 A 30 XDEF _EP3RxPtr, _EP3TxPtr, _EP3DataCo A 31 A 32 DEFINE CCB_SEGMENT, SPACE=CODE, ORG=0ff7 A 33 SEGMENT CCB_SEGMENT A 34 ; CCB0 A 35 ; - WSA1# WSA0# XALE# RD1 A 36 ; CCB1 A 37 ; - - - INTR - A 38 00FF7FF8 92 A 39 db 092h ; D2 Original Bina 00FF7FF9 F1 A 40 db 0F1h ; F7 Normal A 41 A 42 ;TO DO A 43 ; Change Packet Transfer to use Words no 00000008 A 44 FIFO_SIZE equ 8 A 45 A 46 CSEG AT FF:0000H 00FF0000 02 0100 A 47 LJMP main A 48 A 49 CSEG AT FF:0003H ; INT0# A 50 ; LJMP INT0_ISR 00FF0003 02 011B A 51 LJMP Remote_WKup A 52 A 53 CSEG AT FF:0013H ; INT1# A 54 ; LJMP INT1_ISR 00FF0013 02 011B A 55 LJMP Remote_WKup A 56 A 57 CSEG AT FF:0043H ; Any SOF (ISO E 00FF0043 02 0119 A 58 LJMP SOF_ISR A 59 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 12 PC Machine Code I Line File: c:\usb\930code\outonly\outonly1\outonly1.asm A 60 CSEG AT FF:004BH ; USB Function ( 00FF004B 02 0118 A 61 LJMP EPx_ISR A 62 A 63 CSEG AT FF:0053H ;USB Global Susp 00FF0053 02 011A A 64 LJMP SusRsm_ISR A 65 A 66 CSEG AT FF:0080H 00FF0080 28432920 31393936 A 67 CopyRight: DB '(C) 1996 Copyri 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 t 00FF0106 75A800 A 73 mov IE0, #00h ; Disab 00FF0109 759033 A 74 mov P1, #33h 00FF010C 7585FF A 75 mov DPXL, #0ffh ; Set D 00FF010F 12 07D3 A 76 lCall INIT_VARIABLES ; Initi 00FF0112 12 06B3 A 77 lCall INIT_USB ; Initi 00FF0115 02 013E A 78 ljmp ActiveLoop ;Jump o A 79 A 80 ;Interrupts 00FF0118 A 81 EPx_ISR: 00FF0118 32 A 82 RetI A 83 00FF0119 A 84 SOF_ISR: 00FF0119 32 A 85 RetI A 86 00FF011A A 87 SusRsm_ISR: 00FF011A 32 A 88 RetI A 89 00FF011B A 90 Remote_WKup: 00FF011B 759020 A 91 MOV P1, #20h ; cl 00FF011E A5A921DF 10 A 92 jb GRSM, resume_l ; GS 00FF0123 A5A9D2DF A 93 setb RWU ; Se 00FF0127 A5A9C0DF A 94 clr GSUS ; Cl 00FF012B 32 A 95 RetI A 96 00FF012C A 97 pw_down: 00FF012C 759008 A 98 MOV P1, #08h ; s 00FF012F A5A9D187 A 99 setb PD ; s 00FF0133 A 100 resume_l: 00FF0133 A5A9C0DF A 101 clr GSUS ; Clear 00FF0137 A5A9C1DF A 102 clr GRSM ; Clear 00FF013B 759020 A 103 MOV P1, #20h ; clear A 104 A 105 A 106 COMMENT *------------------------------- A 107 Function name : ActiveLoop PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 13 PC Machine Code I Line File: c:\usb\930code\outonly\outonly1\outonly1.asm A 108 Brief Description : Monitors RX and TX o A 109 Regs preserved : No reg. is saved A 110 ---------------------------------------- A 111 SCOPE 00FF013E A 112 ActiveLoop: 00FF013E 75A884 A 113 MOV IE0, #84h ; Enable INT 00FF0141 C28A A 114 CLR IT1 ; set INT1# A 115 00FF0143 A5A921DF EB A 116 jb GRSM, resume_l ; Check for 00FF0148 A5A920DF DF A 117 jb GSUS, pw_down ; Check for A 118 00FF014D A57E81D3 A 119 mov R8, SOFH 00FF0151 A57A8190 A 120 mov P1, R8 00FF0155 A5A9C6D3 A 121 clr SOFH.6 A 122 00FF0159 A 123 EP0_RX: 00FF0159 30C1 06 A 124 jnb FRXD0, EP0_TX 00FF015C 75F100 A 125 mov EPINDEX, #0 00FF015F 12 016E A 126 lCall OUT_TOKEN1 A 127 00FF0162 A 128 EP0_TX: 00FF0162 30C0 06 A 129 jnb FTXD0, EP1_RX 00FF0165 75F100 A 130 mov EPINDEX, #0 00FF0168 12 01C8 A 131 lCall IN_TOKEN A 132 00FF016B A 133 EP1_RX: A 134 ; mov EPINDEX, #1 A 135 ; jnb RXFIF0,EP2_RX A 136 ; lCall ServiceEP1RX A 137 ; A 138 ;EP2_RX: A 139 ; mov EPINDEX, #2 A 140 ; jnb RXFIF0,EP3_RX A 141 ; lCall ServiceEP1RX A 142 ; A 143 ;EP3_RX: A 144 ; mov EPINDEX, #3 A 145 ; jnb RXFIF0,EP_Done A 146 ; lCall ServiceEP1RX A 147 ; 00FF016B A 148 EP_Done: 00FF016B 02 013E A 149 ljmp ActiveLoop A 150 A 151 A 152 SCOPE A 153 ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< A 154 ; This is the block that services EP0 ev A 155 ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< A 156 ;####################### FAKE INTERUPT R A 157 ; A 158 ; SetupSeq Meaning A 159 ; 0 No Setup command pending. PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 14 PC Machine Code I Line File: c:\usb\930code\outonly\outonly1\outonly1.asm A 160 ; DeviceRequest. Later step A 161 ; packet and set a status f A 162 ; A 163 ; 1 DeviceRequest Received, P A 164 ; transfer data. An Out wi A 165 ; SetupSeq to 0 A 166 ; A 167 ; 2 DeviceRequest Received, P A 168 ; transfer data to the buff A 169 ; set SetupSeq to 0 A 170 ; A 171 ; 3 Done bit SetRequest. Ign A 172 ; Used for Set Address A 173 A 174 ; This block of code deals with Endpoint A 175 00FF016E A 176 OUT_TOKEN1: A 177 00FF016E 53C0FD A 178 anl SBI,#EP0_RX_CLR ; Clear t A 179 A 180 ;Check sequence bit for the stat 00FF0171 A57EE4 0000 A 181 mov WR28, #00 ; point t 00FF0176 A57EF4 9000 A 182 mov WR30, #LOW16(SetupSeq) 00FF017B A57E7BB0 A 183 mov R11, @DR28 00FF017F A5BEB000 A 184 cmp R11, #0 ; Is this 00FF0183 A578 06 A 185 jne ?l1 ; If not, 00FF0186 12 0208 A 186 lcall SETUP_TOKEN ; If yes, 00FF0189 02 01C7 A 187 ljmp ?lx ; Return A 188 A 189 ; If this is not a setup command A 190 ; 0 or more data packets for a s A 191 ; status result if Seq=1 A 192 00FF018C A5BEB001 A 193 ?l1: cmp R11, #1 ; Is this the 00FF0190 A578 1B A 194 jne ?l2 ; No, so check 00FF0193 A5A9D4E4 A 195 SETB RXCON0.4 ;Update receive 00FF0197 A5A9D7F4 A 196 SETB TXCON0.7 ;Flush the Tran 00FF019B A5A9C1E1 A 197 CLR EPCON0.1 ;disable Tx Out A 198 ;with "NAK" 00FF019F A57EF4 9000 A 199 mov WR30,#LOW16(SetupSeq) ;Up 00FF01A4 A57EB000 A 200 mov r11,#0 00FF01A8 A57A7BB0 A 201 mov @DR28, R11 00FF01AC 80 19 A 202 sjmp ?lx A 203 A 204 ;jb RXSTAT0.6, ?l1 ; If not SE A 205 00FF01AE A5BEB002 A 206 ?l2: cmp R11, #2 ; Are we proces 00FF01B2 A578 05 A 207 jne ?l3 00FF01B5 12 050F A 208 lcall OUT_TOKEN ; If we are con 00FF01B8 80 0D A 209 SJMP ?lx A 210 00FF01BA A5BEB003 A 211 ?l3: cmp R11, #3 ;If 3, then we PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 15 PC Machine Code I Line File: c:\usb\930code\outonly\outonly1\outonly1.asm A 212 ;all outs are t A 213 ;the control tr 00FF01BE A578 06 A 214 jne ?l4 00FF01C1 A5A9D4E4 A 215 SETB RXCON0.4 ;Clear the rece 00FF01C5 80 00 A 216 sjmp ?lx A 217 00FF01C7 A 218 ?l4: A 219 00FF01C7 22 A 220 ?lx: ret A 221 A 222 A 223 A 224 SCOPE A 225 ;####################################### A 226 ;#################### IN TOKEN ######## A 227 ;####################################### A 228 ; SetupSeq Meaning A 229 ; 0 No Setup command pending. A 230 ; A 231 ; 1 DeviceRequest Received, P A 232 ; transfer data. An Out wi A 233 ; SetupSeq to 0 A 234 ; A 235 ; 2 DeviceRequest Received, P A 236 ; transfer data to the buff A 237 ; set SetupSeq to 0 A 238 ; A 239 ; 3 Done SetADDRESS Request. A 240 ; Used for Set Address A 241 ; A 242 ; A 243 ; For in tokens we can do 2 things. A 244 ; A 245 ; If SetupSeq = 2,3 then a IN will termi A 246 A 247 A 248 SCOPE 00FF01C8 A 249 IN_TOKEN: 00FF01C8 53C0FE A 250 anl SBI, #EP0_TX_CLR 00FF01CB A57EB3 9000 A 251 mov R11, 00:SetupSeq 00FF01D0 A5BEB002 A 252 cmp R11, #02h 00FF01D4 A578 0B A 253 jne InTokenCheckSA A 254 00FF01D7 A 255 ?StatusPhaseDone: 00FF01D7 A57EB000 A 256 mov R11, #00h 00FF01DB A57AB3 9000 A 257 mov 00:SetupSeq, R11 00FF01E0 80 25 A 258 jmp ?Return A 259 00FF01E2 A 260 InTokenCheckSA: 00FF01E2 A5BEB003 A 261 cmp R11, #03h 00FF01E6 A578 14 A 262 jne ?SendDataBack 00FF01E9 A57EA3 9006 A 263 mov R10, 00:new_addr PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 16 PC Machine Code I Line File: c:\usb\930code\outonly\outonly1\outonly1.asm 00FF01EE A57AA18F A 264 mov FADDR, R10 00FF01F2 A57EB000 A 265 mov R11, #00h 00FF01F6 A57AB3 9000 A 266 mov 00:SetupSeq, R11 00FF01FB 80 0A A 267 jmp ?Return A 268 00FF01FD A 269 ?SendDataBack: 00FF01FD A5BEB001 A 270 cmp R11, #01h 00FF0201 A578 03 A 271 jne ?Return A 272 00FF0204 12 0644 A 273 lCall DoControlOutput A 274 00FF0207 A 275 ?Return: 00FF0207 22 A 276 Ret A 277 A 278 SCOPE A 279 A 280 ;***************** SETUP_TOKEN ******** A 281 ;***** Gets and saves SETUP DATA ******* A 282 ;*************************************** A 283 A 284 ;Procedure that takes SETUP data from th A 285 ;and then updates writes it to the fifo. 00FF0208 A 286 SETUP_TOKEN: 00FF0208 A57EE4 0000 A 287 MOV WR28, #0 ; USE DR2 00FF020D A57EF4 9100 A 288 mov WR30, #LOW16(COMMAND_BUFFER) 00FF0212 A57E81E6 A 289 mov R8, RXCNT0 ; Use R8 00FF0216 A57A7B80 A 290 mov @DR28, R8 ; Store 00FF021A A52EF4 0001 A 291 add WR30, #1 ; Increme 00FF021F A54C88 A 292 orl R8, R8 ; Set fl 00FF0222 A568 22 A 293 je ?k2 ; Zero le A 294 ;(KLS) 00FF0225 A5A9C4E2 A 295 clr EDOVW ; Release A 296 ; Read FI 00FF0229 A57EB1E3 A 297 ?k1: mov R11, RXDAT0 ; Read by 00FF022D A57A7BB0 A 298 mov @DR28, R11 ; Store i 00FF0231 A52EF4 0001 A 299 ADD WR30, #1 ; Increm 00FF0236 A59E8001 A 300 sub R8, #1 ; Decreme 00FF023A A578 EC A 301 jne ?k1 ; Read un A 302 00FF023D A5A9D4E4 A 303 setb RXCON0.4 ; Set FFR A 304 ;(KLS) 00FF0241 A5A9C6E2 A 305 clr RXSETUP ; Release 00FF0245 80 07 A 306 sjmp PROCESS_SETUP A 307 00FF0247 A 308 ?k2: ;Should nev 00FF0247 A5A9D4E4 A 309 setb RXCON0.4 ;Clear the 00FF024B 02 050E A 310 LJMP EXIT_SETUP ;leave. A 311 SCOPE A 312 A 313 ;***************** PROCESS_SETUP ******* A 314 ;***** PROCESS THE SETUP *************** A 315 ;*************************************** PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 17 PC Machine Code I Line File: c:\usb\930code\outonly\outonly1\outonly1.asm A 316 SCOPE 00FF024E A 317 PROCESS_SETUP: A 318 A 319 ;Compare bmRequest Type A 320 ;If it's it 1xxxxxxb - Get Descri A 321 ;If it's it 0xxxxxxb - Set Addres A 322 00FF024E A57EE4 0000 A 323 mov WR28, #0 00FF0253 A57EF4 9101 A 324 mov WR30, #LOW16(bmRequestType) 00FF0258 A57E7BB0 A 325 mov R11, @DR28 A 326 00FF025C A55EB080 A 327 anl R11, #80h; Get/Set ?? 00FF0260 A578 03 A 328 jne DO_GET_COMMAND A 329 00FF0263 02 0342 A 330 LJMP DO_SET_COMMAND A 331 A 332 ;======================================= A 333 ; Routines to process a get descriptor/c A 334 ;======================================= A 335 00FF0266 A 336 DO_GET_COMMAND: 00FF0266 A57EF4 9102 A 337 mov WR30, #LOW16(bRequest) 00FF026B A57E7BB0 A 338 mov R11, @DR28 00FF026F A5BEB006 A 339 cmp R11, #GET_DESCRIPTOR 00FF0273 A578 03 A 340 jne CheckGetConfig 00FF0276 02 0424 A 341 ljmp GET_DESCR_Request ; A 342 00FF0279 A 343 CheckGetConfig: 00FF0279 A5BEB008 A 344 cmp R11, #GET_CONFIGURATION 00FF027D A578 25 A 345 jne CheckGetStatus A 346 A 347 ;; Setup the pointers in in 00FF0280 7A00 A 348 mov R2, #00h 00FF0282 A57A23 A004 A 349 mov in_rd_pntr, R2 ;Se A 350 00FF0287 7A01 A 351 mov R2, #01h 00FF0289 A57A23 A005 A 352 mov in_bytes_left, R2 ;po A 353 00FF028E A57E23 A008 A 354 mov R2, MyConfigVal 00FF0293 A57A23 B000 A 355 mov IN_BUFFERS, R2 A 356 00FF0298 7A01 A 357 mov R2, #01h 00FF029A A57A23 9000 A 358 mov SetupSeq , R2 A 359 00FF029F 12 0644 A 360 lcall DoControlOutput A 361 00FF02A2 02 050E A 362 ljmp EXIT_SETUP A 363 A 364 ; code for other types of bRequests 00FF02A5 A 365 CheckGetStatus: 00FF02A5 A5BEB000 A 366 cmp R11, #GET_STATUS 00FF02A9 A578 5D A 367 jne CheckGetInterface PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 18 PC Machine Code I Line File: c:\usb\930code\outonly\outonly1\outonly1.asm A 368 00FF02AC A57E04 0000 A 369 mov WR0, #0 ; preloa A 370 00FF02B1 A57E23 9101 A 371 mov R2,bmRequestType 00FF02B6 A55E2003 A 372 anl R2, #3 ; Get th 00FF02BA A5BE2000 A 373 cmp R2, #0 00FF02BE A568 34 A 374 je GSDevice A 375 00FF02C1 A5BE2001 A 376 cmp R2, #1 00FF02C5 A568 31 A 377 je GSInterface A 378 00FF02C8 A 379 GSEndpoint: ; We get A 380 ; to and A 381 ; it is A 382 ; is sta 00FF02C8 C0F1 A 383 push EPINDEX ; Save c 00FF02CA A57E23 9105 A 384 mov R2, wIndex 00FF02CF A55E2003 A 385 anl R2, #3 ; Get ep A 386 00FF02D3 8AF1 A 387 mov EPINDEX, R2 ; and se A 388 ;; Now we have the correct EP nu A 389 ;; and IN or an OUT 00FF02D5 A57E23 9105 A 390 mov R2, wIndex 00FF02DA A55E2080 A 391 anl R2, #80h 00FF02DE A578 09 A 392 jne GS_IN_Endpoint A 393 00FF02E1 A 394 GS_OUT_Endpoint: 00FF02E1 A5A937E1 0B A 395 jnb RXSTL, GSEndpointDone 00FF02E6 7801 A 396 mov R0, #1 ; Set th 00FF02E8 80 07 A 397 jmp GSEndpointDone A 398 00FF02EA A 399 GS_IN_Endpoint: 00FF02EA A5A936E1 02 A 400 jnb TXSTL, GSEndpointDone 00FF02EF 7801 A 401 mov R0, #1 ; Set th A 402 00FF02F1 A 403 GSEndpointDone: 00FF02F1 D0F1 A 404 pop EPINDEX 00FF02F3 80 04 A 405 jmp GSFinish A 406 00FF02F5 A 407 GSDevice: 00FF02F5 7801 A 408 mov R0,#1 00FF02F7 80 00 A 409 jmp GSFinish A 410 00FF02F9 A 411 GSInterface: A 412 ;; Interface is always zero and A 413 ;; we do nothing A 414 00FF02F9 A 415 GSFinish: 00FF02F9 7A01 A 416 mov R2, #01h 00FF02FB A57A23 9000 A 417 mov SetupSeq , R2 A 418 00FF0300 12 062C A 419 lCall SetStatusData PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 19 PC Machine Code I Line File: c:\usb\930code\outonly\outonly1\outonly1.asm 00FF0303 12 0644 A 420 lCall DoControlOutput A 421 00FF0306 02 050E A 422 ljmp EXIT_SETUP A 423 00FF0309 A 424 CheckGetInterface: 00FF0309 A5BEB00A A 425 cmp R11, #GET_INTERFACE 00FF030D A578 25 A 426 jne CheckSynchFrame A 427 ;; Setup the pointers in in 00FF0310 7A00 A 428 mov R2, #00h 00FF0312 A57A23 A004 A 429 mov in_rd_pntr, R2 ;Se A 430 00FF0317 7A01 A 431 mov R2, #01h 00FF0319 A57A23 A005 A 432 mov in_bytes_left, R2 ;po A 433 00FF031E A57E23 A009 A 434 mov R2, MyInterfaceVal 00FF0323 A57A23 B000 A 435 mov IN_BUFFERS, R2 A 436 00FF0328 7A01 A 437 mov R2, #01h 00FF032A A57A23 9000 A 438 mov SetupSeq , R2 A 439 00FF032F 12 0644 A 440 lcall DoControlOutput A 441 00FF0332 02 050E A 442 ljmp EXIT_SETUP A 443 00FF0335 A 444 CheckSynchFrame: 00FF0335 A5BEB00C A 445 cmp R11, #SYCH_FRAME 00FF0339 A578 03 A 446 jne GetCommandExit 00FF033C 02 050E A 447 ljmp GET_CONFIG_Request ; A 448 00FF033F A 449 GetCommandExit: 00FF033F 02 050E A 450 ljmp EXIT_SETUP A 451 A 452 A 453 A 454 ;======================================= A 455 ; Routines to process a set descriptor/c A 456 ;======================================= A 457 00FF0342 A 458 DO_SET_COMMAND: 00FF0342 A57EF4 9102 A 459 mov WR30, #LOW16(bRequest) 00FF0347 A57E7BB0 A 460 mov R11, @DR28 A 461 00FF034B A5BEB007 A 462 cmp R11, #SET_DESCRIPTOR ; W 00FF034F A578 02 A 463 jne ?CheckSetConfig 00FF0352 80 30 A 464 jmp DO_SET_DESCRIPTOR A 465 00FF0354 A 466 ?CheckSetConfig: 00FF0354 A5BEB009 A 467 cmp R11, #SET_CONFIGURATION 00FF0358 A578 02 A 468 jne ?CheckSetInterface 00FF035B 80 29 A 469 jmp DO_SET_CONFIGURATION A 470 00FF035D A 471 ?CheckSetInterface: PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 20 PC Machine Code I Line File: c:\usb\930code\outonly\outonly1\outonly1.asm 00FF035D A5BEB00B A 472 cmp R11, #SET_INTERFACE 00FF0361 A578 02 A 473 jne ?CheckClearFeature 00FF0364 80 2C A 474 jmp DO_SET_INTERFACE A 475 00FF0366 A 476 ?CheckClearFeature: 00FF0366 A5BEB001 A 477 cmp R11, #CLEAR_FEATURE 00FF036A A578 02 A 478 jne ?CheckSetAddress 00FF036D 80 2F A 479 jmp DO_CLEAR_FEATURE A 480 00FF036F A 481 ?CheckSetAddress: 00FF036F A5BEB005 A 482 cmp R11, #SET_ADDRESS ; Wa 00FF0373 A578 03 A 483 jne ?CheckSetFeature 00FF0376 02 03FA A 484 jmp DO_SET_ADDRESS A 485 00FF0379 A 486 ?CheckSetFeature: 00FF0379 A5BEB003 A 487 cmp R11, #SET_FEATURE ; Wa 00FF037D A578 02 A 488 jne ?CheckExit 00FF0380 80 1C A 489 jmp DO_SET_FEATURE A 490 00FF0382 A 491 ?CheckExit: 00FF0382 81 1B A 492 ajmp DO_SET_COMMAND_EXIT A 493 00FF0384 A 494 DO_SET_DESCRIPTOR: A 495 ; 00FF0384 81 1B A 496 ajmp DO_SET_COMMAND_EXIT A 497 00FF0386 A 498 DO_SET_CONFIGURATION: A 499 ; 00FF0386 A57E23 9103 A 500 mov R2, wValue 00FF038B A57A23 A008 A 501 mov MyConfigVal, R2 00FF0390 81 1B A 502 ajmp DO_SET_COMMAND_EXIT A 503 00FF0392 A 504 DO_SET_INTERFACE: A 505 ; 00FF0392 A57E23 9103 A 506 mov R2, wValue 00FF0397 A57A23 A009 A 507 mov MyInterfaceVal, R2 00FF039C 81 1B A 508 ajmp DO_SET_COMMAND_EXIT A 509 00FF039E A 510 DO_CLEAR_FEATURE: 00FF039E A 511 DO_SET_FEATURE: 00FF039E A57E23 9101 A 512 mov R2, bmRequestType 00FF03A3 A5BE2002 A 513 cmp R2, #2; Check to see if 00FF03A7 A578 71 A 514 jne DO_SET_COMMAND_EXIT; If A 515 00FF03AA A57E17 9103 A 516 mov WR2, wValue 00FF03AF A5BE14 0000 A 517 cmp WR2, #0 00FF03B4 A578 64 A 518 jne DO_SET_COMMAND_EXIT; Not A 519 00FF03B7 C0F1 A 520 push EPINDEX 00FF03B9 A57E23 9105 A 521 mov R2, wIndex ; Get th 00FF03BE A55E2003 A 522 anl R2, #3 ; Get ep A 523 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 21 PC Machine Code I Line File: c:\usb\930code\outonly\outonly1\outonly1.asm 00FF03C2 8AF1 A 524 mov EPINDEX, R2 ; and se A 525 ;; Now we have the correct EP nu A 526 ;; and IN or an OUT 00FF03C4 A57E23 9105 A 527 mov R2, wIndex 00FF03C9 A55E2080 A 528 anl R2, #80h 00FF03CD A578 13 A 529 jne SF_IN_Endpoint A 530 00FF03D0 A 531 SF_OUT_Endpoint: 00FF03D0 A5BEB003 A 532 cmp R11,#SET_FEATURE 00FF03D4 A578 06 A 533 jne SF_OUT_CLR 00FF03D7 A5A9D7E1 A 534 setb RXSTL ; Set th 00FF03DB 80 19 A 535 jmp SFEndpointDone 00FF03DD A 536 SF_OUT_CLR: 00FF03DD A5A9C7E1 A 537 clr RXSTL ; Clear 00FF03E1 80 13 A 538 jmp SFEndpointDone A 539 00FF03E3 A 540 SF_IN_Endpoint: 00FF03E3 A5BEB003 A 541 cmp R11,#SET_FEATURE 00FF03E7 A578 06 A 542 jne SF_IN_CLR 00FF03EA A5A9D6E1 A 543 setb TXSTL ; Set th 00FF03EE 80 06 A 544 jmp SFEndpointDone A 545 00FF03F0 A 546 SF_IN_CLR: 00FF03F0 A5A9C6E1 A 547 clr TXSTL ; Clear 00FF03F4 80 00 A 548 jmp SFEndpointDone A 549 00FF03F6 A 550 SFEndpointDone: 00FF03F6 D0F1 A 551 pop EPINDEX 00FF03F8 80 21 A 552 jmp DO_SET_COMMAND_EXIT A 553 00FF03FA A 554 DO_SET_ADDRESS: 00FF03FA A57EF4 9103 A 555 mov WR30, #LOW16(wValue) ; Get 00FF03FF A50B7A40 A 556 mov WR8, @DR28 ; It do 00FF0403 A57EF4 9006 A 557 mov WR30, #LOW16(new_addr) ;statu 00FF0408 A57A7B80 A 558 mov @DR28, R8 00FF040C A57EF4 9000 A 559 mov WR30, #LOW16(SetupSeq) 00FF0411 A57EA003 A 560 mov R10, #3 ; This 00FF0415 A57A7BA0 A 561 mov @DR28, R10 ;Set s 00FF0419 81 1B A 562 ajmp DO_SET_COMMAND_EXIT A 563 00FF041B A 564 DO_SET_COMMAND_EXIT: A 565 00FF041B 75F600 A 566 mov TXCNT0, #0 ; Prime F 00FF041E A5A9D1E1 A 567 setb EPCON0.1 ; Set the 00FF0422 A1 0E A 568 ajmp EXIT_SETUP A 569 A 570 A 571 ; ********************** GET DES 00FF0424 A 572 GET_DESCR_Request: A 573 00FF0424 A57EF4 9103 A 574 mov WR30, #LOW16(wValue) 00FF0429 A50B7A50 A 575 mov WR10, @DR28 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 22 PC Machine Code I Line File: c:\usb\930code\outonly\outonly1\outonly1.asm 00FF042D A5BEB001 A 576 cmp R11, #DEVICE_DESCR ;Low By 00FF0431 A578 20 A 577 jne ?c1 A 578 A 579 A 580 ; ********************** GET DESC A 581 00FF0434 A57EF4 9000 A 582 mov WR30, #LOW16(SetupSeq) ;Adv 00FF0439 A57EA001 A 583 mov R10, #1 ;Set 00FF043D A57A7BA0 A 584 mov @DR28, R10 ; A 585 00FF0441 A57EE4 00FF A 586 mov WR28, #0ffh; 00FF0446 A57EF4 0708 A 587 mov WR30, #LOW16(DEVICE_DESCRIPTO 00FF044B 12 0561 A 588 LCALL BufferControlData 00FF044E 12 0644 A 589 LCALL DoControlOutput 00FF0451 02 050E A 590 ljmp EXIT_SETUP A 591 A 592 00FF0454 A5BEB002 A 593 ?c1: cmp R11, #CONFIG_DESCR 00FF0458 A578 20 A 594 jne ?c2 A 595 ; ********************** GET DESC A 596 00FF045B A57EF4 9000 A 597 mov WR30, #LOW16(SetupSeq) ;Up 00FF0460 A57EA001 A 598 mov R10, #1 00FF0464 A57A7BA0 A 599 mov @DR28, R10 A 600 00FF0468 A57EE4 00FF A 601 mov WR28, #0ffh; 00FF046D A57EF4 071B A 602 mov WR30, #LOW16(CONFIGURATION_DE 00FF0472 12 0561 A 603 LCALL BufferControlData 00FF0475 12 0644 A 604 LCALL DoControlOutput A 605 00FF0478 02 050E A 606 ljmp EXIT_SETUP A 607 00FF047B A5BEB003 A 608 ?c2: cmp R11, #STRING_DESCR 00FF047F A568 03 A 609 je ?c23 00FF0482 02 050E A 610 ljmp EXIT_SETUP A 611 ; ********************** GET DESC 00FF0485 A 612 ?c23: 00FF0485 A57EF4 9000 A 613 mov WR30, #LOW16(SetupSeq) ;Up 00FF048A A57E9001 A 614 mov R9, #1 00FF048E A57A7B90 A 615 mov @DR28, R9 A 616 00FF0492 A57EE4 00FF A 617 mov WR28, #0ffh ;String A 618 A 619 ; First check to A 620 ; so, then we tr A 621 ; buffer and not A 622 ; return the lan 00FF0497 A5BEA000 A 623 cmp R10, #0 00FF049B A578 0E A 624 jne ?cs1 00FF049E A57EF4 073C A 625 mov WR30, #LOW16(STRING0) 00FF04A3 12 0561 A 626 lcall BufferControlData 00FF04A6 12 0644 A 627 lcall DoControlOutput PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 23 PC Machine Code I Line File: c:\usb\930code\outonly\outonly1\outonly1.asm 00FF04A9 02 050E A 628 ljmp EXIT_SETUP A 629 00FF04AC A5BEA001 A 630 ?cs1: cmp R10, #1 00FF04B0 A578 07 A 631 jne ?cs2 00FF04B3 A57EF4 0741 A 632 mov WR30, #LOW16(STRING1) 00FF04B8 80 4B A 633 jmp ?csms A 634 00FF04BA A5BEA002 A 635 ?cs2: cmp R10, #2 00FF04BE A578 07 A 636 jne ?cs3 00FF04C1 A57EF4 0768 A 637 mov WR30, #LOW16(STRING2) 00FF04C6 80 3D A 638 jmp ?csms A 639 00FF04C8 A5BEA003 A 640 ?cs3: cmp R10, #3 00FF04CC A578 07 A 641 jne ?cs4 00FF04CF A57EF4 077D A 642 mov WR30, #LOW16(STRING3) 00FF04D4 80 2F A 643 jmp ?csms A 644 00FF04D6 A5BEA004 A 645 ?cs4: cmp R10, #4 00FF04DA A578 07 A 646 jne ?cs5 00FF04DD A57EF4 0787 A 647 mov WR30, #LOW16(STRING4) 00FF04E2 80 21 A 648 jmp ?csms A 649 00FF04E4 A5BEA005 A 650 ?cs5: cmp R10, #5 00FF04E8 A578 07 A 651 jne ?cs6 00FF04EB A57EF4 07AF A 652 mov WR30, #LOW16(STRING5) 00FF04F0 80 13 A 653 jmp ?csms A 654 00FF04F2 A5BEA006 A 655 ?cs6: cmp R10, #6 00FF04F6 A578 07 A 656 jne ?cs0 00FF04F9 A57EF4 07D1 A 657 mov WR30, #LOW16(STRING6) 00FF04FE 80 05 A 658 jmp ?csms A 659 00FF0500 A57EF4 07D2 A 660 ?cs0: mov WR30, #LOW16(STRING_END) A 661 00FF0505 12 05AB A 662 ?csms: LCALL BufferStringData 00FF0508 12 0644 A 663 LCALL DoControlOutput A 664 A 665 00FF050B 02 050E A 666 ?c3: ljmp EXIT_SETUP A 667 00FF050E A 668 GET_CONFIG_Request: A 669 A 670 A 671 00FF050E A 672 EXIT_SETUP: 00FF050E 22 A 673 ret A 674 A 675 SCOPE A 676 A 677 A 678 ;***************** OUT_TOKEN ********** A 679 ;***** Gets and saves OUT DATA ********* PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 24 PC Machine Code I Line File: c:\usb\930code\outonly\outonly1\outonly1.asm A 680 ;*************************************** A 681 A 682 ;Program that takes data from the FIFO, A 683 ;and then updates writes it to the fifo. A 684 A 685 A 686 00FF050F A 687 OUT_TOKEN: ; Get the 00FF050F 53C0FD A 688 anl SBI, #EP0_RX_CLR ; Cle 00FF0512 A57EC4 0000 A 689 MOV WR24, #0 ; USE DR2 00FF0517 A57ED4 C000 A 690 mov WR26, #LOW16(OUT_BUFFERS) 00FF051C A57E81E6 A 691 mov R8, RXCNT0 ; Read co 00FF0520 A57A6B80 A 692 mov @DR24, R8 ; Store t 00FF0524 A52ED4 0001 A 693 add WR26, #1 ; Increme 00FF0529 A54C88 A 694 orl R8, R8 ; Set fla 00FF052C A568 12 A 695 je ?k2 A 696 00FF052F AFE3 A 697 ?k1: mov R7, RXDAT0 ; Read lo 00FF0531 A57A6B70 A 698 mov @DR24, R7 00FF0535 A52ED4 0001 A 699 ADD WR26, #1 00FF053A A59E8001 A 700 sub R8, #1 00FF053E A578 EE A 701 jne ?k1 A 702 00FF0541 A5A9D4E4 A 703 ?k2: setb RXCON0.4 ; Clear t A 704 ; We now A 705 ; Transmi 00FF0545 22 A 706 ret A 707 A 708 COMMENT *------------------------------- A 709 Function name : ServiceEP1RX A 710 Brief Description : Copies data recd. on A 711 : a buffer. A 712 Regs preserved : No reg. is saved A 713 ---------------------------------------- A 714 SCOPE 00FF0546 A 715 ServiceEP1RX: 00FF0546 A5A920E2 02 A 716 jb RXACK, ?GoodReceive A 717 00FF054B 80 13 A 718 jmp ?Return A 719 00FF054D A 720 ?GoodReceive: 00FF054D AFE6 A 721 mov R7, RXCNT1 00FF054F A5BE7000 A 722 cmp R7, #00h 00FF0553 A568 06 A 723 je ?NullPacketRecd A 724 00FF0556 A 725 ?CopyDataToBuffer: 00FF0556 A57EC1E3 A 726 mov R12, RXDAT1 00FF055A DF FA A 727 djnz R7, ?CopyDataToBuffer A 728 00FF055C A 729 ?NullPacketRecd: 00FF055C A5A9D4E4 A 730 setb RXFFRC A 731 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 25 PC Machine Code I Line File: c:\usb\930code\outonly\outonly1\outonly1.asm 00FF0560 A 732 ?Return: 00FF0560 22 A 733 Ret A 734 A 735 A 736 SCOPE A 737 ;####################################### A 738 ;################### BufferControlData # A 739 ;## Transfers the data pointed to by DR2 A 740 ;####################################### A 741 A 742 SCOPE 00FF0561 A 743 BufferControlData: A 744 ;DR28 has address of data 00FF0561 7E00 A 745 mov R6, #00h 00FF0563 A57E7B70 A 746 mov R7, @DR28 00FF0567 A52EF4 0001 A 747 add WR30, #01h 00FF056C A57E9000 A 748 mov R9, #00h A 749 00FF0570 A57A93 A004 A 750 mov in_rd_pntr, R9 A 751 A 752 00FF0575 A57E57 9107 A 753 mov WR10, wLength A 754 SWAP_BYTES R10,R11,R12 00FF0583 A5BD35 A 755 cmp WR6, WR10 00FF0586 A528 03 A 756 jle ?Continue A 757 00FF0589 A57D35 A 758 mov WR6, WR10 A 759 A 760 A 761 A 762 00FF058C A 763 ?Continue: 00FF058C A57A73 A005 A 764 mov in_bytes_left, R7 A 765 00FF0591 A57ED4 B000 A 766 mov WR26, #LOW16(IN_BUFFERS) A 767 00FF0596 A 768 ?MoveMemory: 00FF0596 A57E7B90 A 769 mov R9, @DR28 00FF059A A57AD990 A 770 mov @WR26, R9 00FF059E A52ED4 0001 A 771 add WR26, #01h 00FF05A3 A52EF4 0001 A 772 add WR30, #01h 00FF05A8 DF EC A 773 djnz R7, ?MoveMemory A 774 00FF05AA 22 A 775 Ret A 776 A 777 ;####################################### A 778 ;################### BufferControlData # A 779 ;## Transfers the string data pointed to A 780 ;## The first byte in this data area is A 781 ;## The following 'length' bytes are the A 782 ;## will load IN_BUFFERS with a string d A 783 ;## converted to a UNICODE string. PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 26 PC Machine Code I Line File: c:\usb\930code\outonly\outonly1\outonly1.asm A 784 ;####################################### A 785 A 786 SCOPE 00FF05AB A 787 BufferStringData: A 788 ;DR28 has address of data 00FF05AB 7E00 A 789 mov R6, #00h 00FF05AD A57E7B70 A 790 mov R7, @DR28 00FF05B1 A5BE7000 A 791 cmp R7, #0 00FF05B5 A568 73 A 792 je BSD_Ret A 793 00FF05B8 A5CA78 A 794 push R7 ; To sav 00FF05BB A52EF4 0001 A 795 add WR30, #01h A 796 00FF05C0 A57E9000 A 797 mov R9, #00h 00FF05C4 A57A93 A004 A 798 mov in_rd_pntr, R9 A 799 A 800 A 801 ;; Calculate that actual length A 802 ;; DescLength = 2 * (Ascii A 803 ;; The + 2 is for bLength and bD 00FF05C9 A52C77 A 804 add R7,R7 00FF05CC A52E7002 A 805 add R7,#2 A 806 00FF05D0 A57ED4 B000 A 807 mov WR26, #LOW16(IN_BUFFERS) A 808 A 809 ;; The first vale to go in IN_BU A 810 ;; string descriptor 00FF05D5 A57AD970 A 811 mov @WR26, R7 00FF05D9 A52ED4 0001 A 812 add WR26,#1 A 813 ;; The next value is the string 00FF05DE A57E9003 A 814 mov R9, #STRING_DESCR 00FF05E2 A57AD990 A 815 mov @WR26, R9 00FF05E6 A52ED4 0001 A 816 add WR26,#1 A 817 A 818 00FF05EB A57E57 9107 A 819 mov WR10, wLength A 820 SWAP_BYTES R10,R11,R12 00FF05F9 A5BD35 A 821 cmp WR6, WR10 00FF05FC A528 03 A 822 jle BSD_Continue A 823 00FF05FF A57D35 A 824 mov WR6, WR10 A 825 A 826 A 827 A 828 00FF0602 A 829 BSD_Continue: 00FF0602 A57A73 A005 A 830 mov in_bytes_left, R7 A 831 A 832 ;; Now we can start moving the s A 833 ;; unicode string as a sequence A 834 ;; quantities), the low order by A 835 ;; the upper order byte is the a PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 27 PC Machine Code I Line File: c:\usb\930code\outonly\outonly1\outonly1.asm A 836 ;; loop below, we first put a ze A 837 ;; the character from the string A 838 ;; 00FF0607 A5DA78 A 839 pop R7 ; Restore the st 00FF060A A57E8000 A 840 mov R8,#0 ; will always cr A 841 ; descriptor eve A 842 ; be returned. 00FF060E A 843 BSD_MoveMemory: 00FF060E A57AD980 A 844 mov @WR26, R8 00FF0612 A52ED4 0001 A 845 add WR26, #01h 00FF0617 A57E7B90 A 846 mov R9, @DR28 00FF061B A57AD990 A 847 mov @WR26, R9 00FF061F A52ED4 0001 A 848 add WR26, #01h 00FF0624 A52EF4 0001 A 849 add WR30, #01h 00FF0629 DF E3 A 850 djnz R7, BSD_MoveMemory 00FF062B A 851 BSD_Ret: 00FF062B 22 A 852 Ret A 853 A 854 ; -------------------------------------- A 855 ; A 856 ; A 857 ; -------------------------------------- 00FF062C A 858 SetStatusData: 00FF062C 7A00 A 859 mov R2, #00h 00FF062E A57A23 A004 A 860 mov in_rd_pntr, R2 ;Se A 861 00FF0633 7A02 A 862 mov R2, #02h 00FF0635 A57A23 A005 A 863 mov in_bytes_left, R2 ;po A 864 00FF063A A57ED4 B000 A 865 mov WR26, #LOW16(IN_BUFFERS) 00FF063F A51BD800 A 866 mov @WR26, WR0 A 867 00FF0643 22 A 868 Ret A 869 A 870 ;####################################### A 871 ;################# DoControlOutput ##### A 872 ;####################################### A 873 A 874 SCOPE 00FF0644 A 875 DoControlOutput: 00FF0644 A5A9C1E1 A 876 clr EPCON0.1 A 877 00FF0648 A57EA3 A005 A 878 mov R10, in_bytes_left 00FF064D A5BEA000 A 879 cmp R10, #00h 00FF0651 A578 07 A 880 jne CntlDataAvail 00FF0654 A57E8000 A 881 mov R8, #00h 00FF0658 02 06AA A 882 ljmp ControlArmTx A 883 00FF065B A 884 CntlDataAvail: 00FF065B A57ED4 B000 A 885 mov WR26, #LOW16(IN_BUFFERS) 00FF0660 A57EC000 A 886 mov R12, #00h 00FF0664 A57ED3 A004 A 887 mov R13, in_rd_pntr PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 28 PC Machine Code I Line File: c:\usb\930code\outonly\outonly1\outonly1.asm A 888 00FF0669 A52DD6 A 889 add WR26, WR12 00FF066C A57E8000 A 890 mov R8, #00h 00FF0670 A5CAA8 A 891 push R10 A 892 00FF0673 A 893 ?WriteToFifo: 00FF0673 A57ED9B0 A 894 mov R11, @WR26 00FF0677 A57AB1F3 A 895 mov TXDAT0, R11 00FF067B A52ED4 0001 A 896 add WR26, #01h 00FF0680 A52E8001 A 897 add R8,#01h 00FF0684 A59EA001 A 898 sub R10, #01h 00FF0688 A568 07 A 899 je ControlTxUpd A 900 00FF068B A5BE8008 A 901 cmp R8, #FIFO_SIZE 00FF068F A578 E1 A 902 jne ?WriteToFifo A 903 00FF0692 A 904 ControlTxUpd: 00FF0692 A5DAA8 A 905 pop R10 00FF0695 A57EC3 A004 A 906 mov R12, in_rd_pntr 00FF069A A52CC8 A 907 add R12, R8 00FF069D A57AC3 A004 A 908 mov in_rd_pntr, R12 00FF06A2 A59CA8 A 909 sub R10, R8 00FF06A5 A57AA3 A005 A 910 mov in_bytes_left, R10 A 911 00FF06AA A 912 ControlArmTx: 00FF06AA A57A81F6 A 913 mov TXCNT0, R8 00FF06AE A5A9D1E1 A 914 setb EPCON0.1 A 915 00FF06B2 A 916 ?Return: 00FF06B2 22 A 917 Ret A 918 A 919 SCOPE A 920 ;*************************************** A 921 ;***************** INIT_USB *********** A 922 ;*************************************** A 923 00FF06B3 A 924 INIT_USB: A 925 ;(KLS) 00FF06B3 75F100 A 926 mov EPINDEX, #00h 00FF06B6 75F484 A 927 mov TXCON0,#84h ;/* Flush FIFO, 00FF06B9 75E484 A 928 mov RXCON0,#84h ;/* Flush FIFO, A 929 ; Enable endpoint 0 as a contro A 930 ; Transmit Endpoint enable, Rec A 931 ; Receive Input enable. We do n A 932 ; until we have determined what A 933 ; back, i.e., NULL packet for s A 934 ; command. 00FF06BC 75E12D A 935 mov EPCON0,#2Dh; A 936 A 937 ; The non-zero endpoints are be A 938 ; NAK any tokens sent to them. A 939 ; by the spec they should not r PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 29 PC Machine Code I Line File: c:\usb\930code\outonly\outonly1\outonly1.asm A 940 ; set a configuration for this A 941 ; Endpoint enable and Transmit A 942 ; but not the input and output A 943 00FF06BF 75F101 A 944 mov EPINDEX, #01h 00FF06C2 75F484 A 945 mov TXCON1,#84h ;/* Flush FIFO, 00FF06C5 75E484 A 946 mov RXCON1,#84h ;/* Flush FIFO, 00FF06C8 75E10F A 947 mov EPCON1,#0Fh; ;/* Enable rece 00FF06CB A5A9D4E1 A 948 setb RXSPM ; Turn o A 949 00FF06CF 75F102 A 950 mov EPINDEX, #02h 00FF06D2 75F484 A 951 mov TXCON2,#84h ;/* Flush FIFO, 00FF06D5 75E484 A 952 mov RXCON2,#84h ;/* Flush FIFO, 00FF06D8 75E10F A 953 mov EPCON2,#0Fh; ;/* Enable rece 00FF06DB A5A9D4E1 A 954 setb RXSPM ; Turn o A 955 00FF06DF 75F103 A 956 mov EPINDEX, #03h 00FF06E2 75F484 A 957 mov TXCON3,#84h ;/* Flush FIFO, 00FF06E5 75E484 A 958 mov RXCON3,#84h ;/* Flush FIFO, 00FF06E8 75E10F A 959 mov EPCON3,#0Fh; ;/* Enable rece 00FF06EB A5A9D4E1 A 960 setb RXSPM ; Turn o 00FF06EF 22 A 961 RET A 962 A 963 ; mov TXCON0,#84h ;/* Flush FIFO A 964 ; mov TXCON1,#84h ;/* Flush FIFO A 965 ; mov TXCON2,#84h ;/* Flush FIFO A 966 ; mov TXCON3,#84h ;/* Flush FIFO A 967 A 968 ; mov RXCON0,#84h ;/* Flush FIFO A 969 ; mov RXCON1,#84h ;/* Flush FIFO A 970 ; mov RXCON2,#84h ;/* Flush FIFO A 971 ; mov RXCON3,#84h ;/* Flush FIFO A 972 A 973 A 974 ; Enable endpoint 0 as a contro A 975 ; Transmit Endpoint enable, Rec A 976 ; Receive Input enable. We do n A 977 ; until we have determined what A 978 ; back, i.e., NULL packet for s A 979 ; command. A 980 ; mov EPCON0,#2Dh; A 981 A 982 ; The non-zero endpoints are be A 983 ; NAK any tokens sent to them. A 984 ; by the spec they should not r A 985 ; set a configuration for this A 986 ; Endpoint enable and Transmit A 987 ; but not the input and output A 988 ; mov EPCON1,#1Fh; ;/* Enable rece A 989 ; mov EPCON2,#1Fh; ;/* Enable rece A 990 ; mov EPCON3,#1Fh; ;/* Enable rece A 991 ; RET PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 30 PC Machine Code I Line File: c:\usb\930code\outonly\outonly1\outonly1.asm A 992 A 993 SCOPE A 994 ;*************************************** A 995 ;***************** INIT_UART *********** A 996 ;*************************************** A 997 00FF06F0 A 998 INIT_UART: 00FF06F0 759850 A 999 mov SCON, #050h A 1000 ;Timer 2 is being used to genera 00FF06F3 75CAD9 A 1001 mov RCAP2L, #0D9h ; USB EVAL 9 00FF06F6 75CBFF A 1002 mov RCAP2H, #0FFh ; 00FF06F9 75C834 A 1003 mov T2CON, #034h ; Set TIMER 00FF06FC C299 A 1004 clr TI ; Clear Transmit A 1005 ;; mov IE0, #0 ; KIL 00FF06FE 12 08AE A 1006 LCALL Lng_Delay 00FF0701 759900 A 1007 mov SBUF, #00 00FF0704 12 08AE A 1008 LCALL Lng_Delay 00FF0707 22 A 1009 ret A 1010 A 1011 A 1012 A 1013 ;*************************************** A 1014 ;************* DEVICE DESCRIPTOR ******* A 1015 ;*************************************** A 1016 A 1017 ; A 1018 ; NOTE!!!!! '251 is a Big Endian machine A 1019 ; LSB in the numerically higher address. A 1020 ; A 1021 00FF0708 A 1022 DEVICE_DESCRIPTOR: 00FF0708 12 A 1023 gDLength: db 00FF0709 12 A 1024 gDevice_bLength: db 00FF070A 01 A 1025 gDevice_bDescriptorType: db 00FF070B 0001 A 1026 gDevice_bcdUSB: dw 00FF070D DC A 1027 gDevice_bDeviceClass: db 00FF070E 00 A 1028 gDevice_bDeviceSubClass: db 00FF070F 00 A 1029 gDevice_bDeviceProtocol: db 00FF0710 08 A 1030 gDevice_wMaxPacketSize0: db 00FF0711 8680 A 1031 gDevice_widVendor: dw 00FF0713 1199 A 1032 gDevice_widProduct: dw 00FF0715 3001 A 1033 gDevice_bcdDevice: dw 00FF0717 01 A 1034 gDevice_iManufacturer: db 00FF0718 02 A 1035 gDevice_iProduct: db 00FF0719 03 A 1036 gDevice_iSerialNumber: db 00FF071A 01 A 1037 gDevice_bNumConfigurations: db A 1038 A 1039 ;/*--------------- Initialize global Con 00FF071B A 1040 CONFIGURATION_DESCRIPTOR: 00FF071B 20 A 1041 gCLength: d A 1042 A 1043 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 31 PC Machine Code I Line File: c:\usb\930code\outonly\outonly1\outonly1.asm 00FF071C 09 A 1044 gConfig_bLength: d 00FF071D 02 A 1045 gConfig_bDescriptorType: d 00FF071E 20 A 1046 gConfig_bTotalLength: d 00FF071F 00 A 1047 gConfig_bCorrection: d 00FF0720 01 A 1048 gConfig_bNumInterfaces: d 00FF0721 01 A 1049 gConfig_bConfigurationValue: d 00FF0722 04 A 1050 gConfig_iConfiguration: d A 1051 ; gConfig_bmAttributes: d 00FF0723 60 A 1052 gConfig_bmAttributes: d A 1053 00FF0724 19 A 1054 gConfig_MaxPower: d A 1055 A 1056 ; /*------------- Initialize globa 00FF0725 A 1057 gInterfaceDescriptorA: 00FF0725 09 A 1058 gInterfaceA_bLength: 00FF0726 04 A 1059 gInterfaceA_bDescriptorType: 00FF0727 00 A 1060 gInterfaceA_bInterfaceNumber: 00FF0728 00 A 1061 gInterfaceA_bAlternateSetting: 00FF0729 02 A 1062 gInterfaceA_bNumEndpoints: 00FF072A DC A 1063 gInterfaceA_bInterfaceClass: 00FF072B 30 A 1064 gInterfaceA_bInterfaceSubClass: 00FF072C 10 A 1065 gInterfaceA_bInterfaceProtocol: 00FF072D 05 A 1066 gInterfaceA_iInterface: 00FF072E A 1067 gInterfaceDescriptorA_End: A 1068 A 1069 ; /*------------- Initialize Endpoi 00FF072E A 1070 gEndPoint1: 00FF072E 07 A 1071 gEP1_bLength: db 07h 00FF072F 05 A 1072 gEP1_bDescriptorType: db END 00FF0730 81 A 1073 gEP1_bEndpointAddress: db 81h 00FF0731 02 A 1074 gEP1_bmAtrributes: db 02h 00FF0732 4000 A 1075 gEP1_wMaxPacketSize: dw 400 00FF0734 00 A 1076 gEP1_bInterval: db 0h A 1077 A 1078 ; /*------------- Initialize Endpoi 00FF0735 A 1079 gEndPoint1B: 00FF0735 07 A 1080 gEP1B_bLength: db 07h 00FF0736 05 A 1081 gEP1B_bDescriptorType: db END 00FF0737 01 A 1082 gEP1B_bEndPointAddress: db 01h 00FF0738 02 A 1083 gEP1B_bmAtrributes: db 02h 00FF0739 4000 A 1084 gEP1B_wMaxPacketSize: dw 400 00FF073B 00 A 1085 gEP1B_bInterval: db 0h A 1086 A 1087 ; /*------------- Initialize Endpoi A 1088 ;gEndPoint2B: A 1089 ; gEP2B_bLength: db 0 A 1090 ; gEP2B_bDescriptorType: db E A 1091 ; gEP2B_bEndPointAddress: db 0 A 1092 ; gEP2B_bmAtrributes: db 0 A 1093 ; gEP2B_wMaxPacketSize: dw 0 A 1094 ; gEP2B_bInterval: db 0 A 1095 ; PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 32 PC Machine Code I Line File: c:\usb\930code\outonly\outonly1\outonly1.asm A 1096 ; /*------------- Initialize Endpoi A 1097 ;gEndPoint3B: A 1098 ; gEP3B_bLength: db 0 A 1099 ; gEP3B_bDescriptorType: db E A 1100 ; gEP3B_bEndPointAddress: db 0 A 1101 ; gEP3B_bmAtrributes: db 0 A 1102 ; gEP3B_wMaxPacketSize: dw 0 A 1103 ; gEP3B_bInterval: db 4 00FF073C A 1104 gEndDescriptorLabel: A 1105 00FF073C A 1106 STRING0: 00FF073C 04 A 1107 db 04h ; Four f 00FF073D 04 A 1108 db 04h ; Four b 00FF073E 03 A 1109 db 03h ; String 00FF073F 09 A 1110 db 09h ; This i 00FF0740 01 A 1111 db 01h 00FF0741 A 1112 STRING1: 00FF0741 26 A 1113 db STRING2 - STRING1 - 1 00FF0742 496E7465 6C204172 A 1114 db "Intel Architecture Labs 00FF074A 63686974 65637475 00FF0752 7265204C 61627320 00FF075A 28432920 496E7465 00FF0762 6C203139 3936 00FF0768 A 1115 STRING2: 00FF0768 14 A 1116 db STRING3 - STRING2 - 1 00FF0769 5374616E 64617264 A 1117 db "Standard Bulk Output" 00FF0771 2042756C 6B204F75 00FF0779 74707574 00FF077D A 1118 STRING3: 00FF077D 09 A 1119 db STRING4 - STRING3 - 1 00FF077E 49414C2D 30303032 A 1120 db "IAL-00021" 00FF0786 31 00FF0787 A 1121 STRING4: 00FF0787 27 A 1122 db STRING5 - STRING4 - 1 00FF0788 53696E67 6C652043 A 1123 db "Single Configuration wi 00FF0790 6F6E6669 67757261 00FF0798 74696F6E 20776974 00FF07A0 68206F6E 6520696E 00FF07A8 74657266 616365 00FF07AF A 1124 STRING5: 00FF07AF 21 A 1125 db STRING6 - STRING5 - 1 00FF07B0 5374616E 64617264 A 1126 db "Standard Output: No dat 00FF07B8 204F7574 7075743A 00FF07C0 204E6F20 64617461 00FF07C8 20636865 636B696E 00FF07D0 67 00FF07D1 A 1127 STRING6: 00FF07D1 00 A 1128 db STRING_END - STRING6 - 1 00FF07D2 A 1129 STRING_END: 00FF07D2 00 A 1130 db 00h A 1131 SCOPE 00FF07D3 A 1132 INIT_VARIABLES: PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 33 PC Machine Code I Line File: c:\usb\930code\outonly\outonly1\outonly1.asm A 1133 ;Init SETUP VARIABLES 00FF07D3 A57EB000 A 1134 mov R11,#0 ; Zer 00FF07D7 A57EE4 0000 A 1135 mov WR28,#0 ; Acc 00FF07DC A57EF4 9000 A 1136 mov WR30,#LOW16(SetupSeq) ; Off 00FF07E1 A57A7BB0 A 1137 mov @DR28,R11 ; Ini A 1138 A 1139 ; 00FF07E5 A57E54 0000 A 1140 mov WR10, #00h ; 00FF07EA A57EF4 D800 A 1141 mov WR30, #LOW16(_EP1RxPtr); 00FF07EF A51B7A50 A 1142 mov @DR28, WR10 ; 00FF07F3 A52EF4 0002 A 1143 add WR30, #02h ; 00FF07F8 A51B7A50 A 1144 mov @DR28, WR10 ; 00FF07FC A52EF4 0002 A 1145 add WR30, #02h ; 00FF0801 A51B7A50 A 1146 mov @DR28, WR10 ; A 1147 ;init 00FF0805 A57EF4 E800 A 1148 mov WR30, #LOW16(_EP2RxPtr);the 00FF080A A51B7A50 A 1149 mov @DR28, WR10 ; 00FF080E A52EF4 0002 A 1150 add WR30, #02h ; 00FF0813 A51B7A50 A 1151 mov @DR28, WR10 ; 00FF0817 A52EF4 0002 A 1152 add WR30, #02h ; 00FF081C A51B7A50 A 1153 mov @DR28, WR10 ; A 1154 ; 00FF0820 A57EF4 F800 A 1155 mov WR30, #LOW16(_EP3RxPtr); 00FF0825 A51B7A50 A 1156 mov @DR28, WR10 ; 00FF0829 A52EF4 0002 A 1157 add WR30, #02h ; 00FF082E A51B7A50 A 1158 mov @DR28, WR10 ; 00FF0832 A52EF4 0002 A 1159 add WR30, #02h ; 00FF0837 A51B7A50 A 1160 mov @DR28, WR10 ; A 1161 A 1162 A 1163 00FF083B A57EA4 0000 A 1164 mov WR20,#0 00FF0840 A57EB4 A000 A 1165 mov WR22, #low16(out_var_table) 00FF0845 A57E54 0000 A 1166 mov WR10, #0 00FF084A A57E44 0000 A 1167 mov WR8,#0 00FF084F A57A5BB0 A 1168 ?l1: mov @DR20,R11 ;This loo 00FF0853 A52EB4 0001 A 1169 add WR22,#1 ;at out_v 00FF0858 A52E8001 A 1170 add R8,#1 00FF085C A5BE8040 A 1171 cmp R8,#64 00FF0860 A578 EC A 1172 jne ?l1 A 1173 A 1174 ;Zero out the output buffer area. A 1175 00FF0863 A57EA4 0000 A 1176 mov WR20, #0 00FF0868 A57EB4 C000 A 1177 mov WR22, #low16(OUT_BUFFERS) 00FF086D A57E54 0000 A 1178 mov WR10, #0 00FF0872 A57E44 0000 A 1179 mov WR8,#0 00FF0877 A57A5BB0 A 1180 ?l2: mov @DR20,R11 00FF087B A52EB4 0001 A 1181 add WR22,#1 00FF0880 A52E44 0001 A 1182 add WR8,#1 A 1183 ; cmp WR8,#1000 00FF0885 A5BE44 0010 A 1184 cmp WR8,#10h PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 34 PC Machine Code I Line File: c:\usb\930code\outonly\outonly1\outonly1.asm 00FF088A A578 EA A 1185 jne ?l2 00FF088D A57E54 0000 A 1186 mov WR10, #00h 00FF0892 A57EB4 A00A A 1187 mov WR22, #LOW16(DATA_PENDING) 00FF0897 A57A5BA0 A 1188 mov @DR20, R10 00FF089B A57EB4 A00D A 1189 mov WR22, #LOW16(DIRECTION_ERRO 00FF08A0 A57A5BA0 A 1190 mov @DR20, R10 00FF08A4 A57EB4 A00B A 1191 mov WR22, #LOW16(PENDING_START_ 00FF08A9 A51B5A50 A 1192 mov @DR20, WR10 00FF08AD 22 A 1193 RET A 1194 SCOPE A 1195 A 1196 00FF08AE A 1197 Lng_Delay: 00FF08AE A5CAC9 A 1198 push WR24 00FF08B1 A5CAD9 A 1199 push WR26 00FF08B4 A57EC4 0082 A 1200 MOV WR24, #082H 00FF08B9 80 10 A 1201 JMP DE2 A 1202 A 1203 00FF08BB A 1204 Delay_X: ;MOV 00FF08BB A5CAC9 A 1205 push WR24 ;5 stat 00FF08BE A5CAD9 A 1206 push WR26 ;5 stat 00FF08C1 A57EC4 0001 A 1207 MOV WR24, #001H ;3 stat 00FF08C6 A 1208 DE1: 00FF08C6 A57ED4 04FF A 1209 MOV WR26, #004FFH ;3 stat 00FF08CB A 1210 DE2: 00FF08CB A51BD4 A 1211 DEC WR26, #1 ;2 stat 00FF08CE A5BED4 0000 A 1212 CMP WR26, #00H ;4 stat 00FF08D3 A578 F5 A 1213 JNE DE2 ;5 stat 00FF08D6 A51BC4 A 1214 DEC WR24, #1 ;2 stat 00FF08D9 A5BEC4 0000 A 1215 CMP WR24, #00H ;4 stat 00FF08DE A578 E5 A 1216 JNE DE1 ;5 stat 00FF08E1 A5DAD9 A 1217 POP WR26 ;5 stat 00FF08E4 A5DAC9 A 1218 POP WR24 ;5 stat 00FF08E7 22 A 1219 QUICK1: RET ; A 1220 A 1221 A 1222 A 1223 A 1224 ;####################################### A 1225 ;####### RAM MEMORY MAP ################ A 1226 ;####################################### A 1227 A 1228 ; org 00:0000h ;0-4ff Res A 1229 A 1230 ; org 00:0500h ; Variable A 1231 A 1232 ; org 00:0600h ; Variable A 1233 A 1234 ;; A 1235 ;; Data block for EP1. Contains buffer s A 1236 ;; PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 35 PC Machine Code I Line File: c:\usb\930code\outonly\outonly1\outonly1.asm A 1237 A 1238 define OUR_DATA_SEG, SPACE=pdata A 1239 segment OUR_DATA_SEG A 1240 0000D000 A 1241 org 00:D000h 0000D000 A 1242 EP_1_Buffer: ds 1 A 1243 0000D800 A 1244 org 00:D800h 0000D800 A 1245 _EP1RxPtr: ds 2 0000D802 A 1246 _EP1TxPtr: ds 2 0000D804 A 1247 _EP1DataCount: ds 2 A 1248 A 1249 ;; A 1250 ;; Data block for EP2. Contains buffer s A 1251 ;; A 1252 0000E000 A 1253 org 00:E000h 0000E000 A 1254 EP_2_Buffer: ds 1 A 1255 0000E800 A 1256 org 00:E800h 0000E800 A 1257 _EP2RxPtr: ds 2 0000E802 A 1258 _EP2TxPtr: ds 2 0000E804 A 1259 _EP2DataCount: ds 2 A 1260 A 1261 ;; A 1262 ;; Data block for EP3. Contains buffer s A 1263 ;; A 1264 0000F000 A 1265 org 00:F000h 0000F000 A 1266 EP_3_Buffer: ds 1 A 1267 0000F800 A 1268 org 00:F800h 0000F800 A 1269 _EP3RxPtr: ds 2 0000F802 A 1270 _EP3TxPtr: ds 2 0000F804 A 1271 _EP3DataCount: ds 2 A 1272 A 1273 00009000 A 1274 org 00:9000h A 1275 00009000 A 1276 SETUP_VARS: 00009000 A 1277 SetupSeq: ds 1 00009001 A 1278 heart_pat: ds 1 00009002 A 1279 heart_bt0: ds 2 00009004 A 1280 heart_bt1: ds 2 00009006 A 1281 new_addr: ds 1 A 1282 00009100 A 1283 org 00:9100h A 1284 00009100 A 1285 COMMAND_BUFFER: 00009100 A 1286 ds 1 ; Byte Count 00009101 A 1287 StandardDeviceRequest: 00009101 A 1288 bmRequestType: ds 1 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:17:24 page: 36 PC Machine Code I Line File: c:\usb\930code\outonly\outonly1\outonly1.asm 00009102 A 1289 bRequest: ds 1 00009103 A 1290 wValue: ds 2 00009105 A 1291 wIndex: ds 2 00009107 A 1292 wLength: ds 2 A 1293 A 1294 A 1295 ; define OUR_DATA_SEG, SPACE=data, A 1296 ; segment OUR_DATA_SEG A 1297 0000A000 A 1298 org 00:A000h A 1299 A 1300 0000A000 A 1301 out_var_table: 0000A000 A 1302 out_cur_buf: ds 2 0000A002 A 1303 out_cnt: ds 2 A 1304 0000A004 A 1305 in_var_table: A 1306 0000A004 A 1307 in_rd_pntr: ds 1 0000A005 A 1308 in_bytes_left: ds 1 0000A006 A 1309 in_FIFO_size: ds 1 0000A007 A 1310 in_FIFO_empty: ds 1 A 1311 0000A008 A 1312 MyConfigVal: ds 1 0000A009 A 1313 MyInterfaceVal: ds 1 A 1314 0000A00A A 1315 DATA_PENDING: ds 1 0000A00B A 1316 PENDING_START_TIME: ds 2 0000A00D A 1317 DIRECTION_ERROR_COUNT: ds 1 A 1318 A 1319 0000B000 A 1320 org 00:B000h ; A 1321 0000B000 A 1322 IN_BUFFERS: A 1323 0000C000 A 1324 org 00:C000h ; A 1325 0000C000 A 1326 OUT_BUFFERS: A 1327 A 1328 A 1329 A 1330 END Errors: 0 Warnings: 0 Lines Assembled: 1852