PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:27 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:16:27 page: 2 PC Machine Code I Line File: 82930AA.inc 00000085 B 38 DPXL: EQU 85h B 39 000000FF B 40 SBTM: EQU 0FFH 000000F1 B 41 EPINDEX: EQU 0F1H B 42 000000F2 B 43 TXSTAT: EQU 0F2H 000000F2 B 44 TXSTAT0: EQU 0F2H 000000F2 B 45 TXSTAT1: EQU 0F2H 000000F2 B 46 TXSTAT2: EQU 0F2H 000000F2 B 47 TXSTAT3: EQU 0F2H 000000F2 B 48 HTXSTAT0: EQU 0F2H B 49 000000F3 B 50 TXDAT: EQU 0F3H 000000F3 B 51 TXDAT0: EQU 0F3H 000000F3 B 52 TXDAT1: EQU 0F3H 000000F3 B 53 TXDAT2: EQU 0F3H 000000F3 B 54 TXDAT3: EQU 0F3H 000000F3 B 55 FTXDAT0: EQU 0F3H 000000F3 B 56 FTXDAT1: EQU 0F3H 000000F3 B 57 FTXDAT2: EQU 0F3H 000000F3 B 58 FTXDAT3: EQU 0F3H 000000F3 B 59 HTXDAT0: EQU 0F3H 000000F3 B 60 HTXDAT1: EQU 0F3H B 61 000000F4 B 62 TXCON: EQU 0F4H 000000F4 B 63 TXCON0: EQU 0F4H 000000F4 B 64 TXCON1: EQU 0F4H 000000F4 B 65 TXCON2: EQU 0F4H 000000F4 B 66 TXCON3: EQU 0F4H B 67 000000F4 B 68 FTXCON0: EQU 0F4H 000000F4 B 69 FTXCON1: EQU 0F4H 000000F4 B 70 FTXCON2: EQU 0F4H 000000F4 B 71 FTXCON3: EQU 0F4H 000000F4 B 72 HTXCON0: EQU 0F4H B 73 000000F5 B 74 TXFLG: EQU 0F5H 000000F5 B 75 TXFLG0: EQU 0F5H 000000F5 B 76 TXFLG1: EQU 0F5H 000000F5 B 77 TXFLG2: EQU 0F5H 000000F5 B 78 TXFLG3: EQU 0F5H 000000F5 B 79 FTXFLG0: EQU 0F5H 000000F5 B 80 FTXFLG1: EQU 0F5H 000000F5 B 81 FTXFLG2: EQU 0F5H 000000F5 B 82 FTXFLG3: EQU 0F5H 000000F5 B 83 HTXFLG0: EQU 0F5H B 84 B 85 B 86 000000F6 B 87 TXCNT0: EQU 0F6h 000000F6 B 88 TXCNT1: EQU 0F6h 000000F6 B 89 TXCNT2: EQU 0F6h PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:27 page: 3 PC Machine Code I Line File: 82930AA.inc 000000F6 B 90 TXCNT3: EQU 0F6h B 91 000000F6 B 92 TXCNT: EQU 0F6H 000000F6 B 93 FTXCNTO: EQU 0F6H 000000F6 B 94 FTXCNT1: EQU 0F6H 000000F6 B 95 FTXCNT2: EQU 0F6H 000000F6 B 96 FTXCNT3: EQU 0F6H 000000F6 B 97 HTXCNTO: EQU 0F6H 000000F6 B 98 TXCNTL: EQU 0F6H 000000F7 B 99 TXCNTH: EQU 0F7H B 100 000000E8 B 101 HIS: EQU 0E8H B 102 000000EF B 103 UICECON: EQU 0EFH B 104 000000E1 B 105 EPCON: EQU 0E1H 000000E1 B 106 EPCON0: EQU 0E1H 000000E1 B 107 EPCON1: EQU 0E1H 000000E1 B 108 EPCON2: EQU 0E1H 000000E1 B 109 EPCON3: EQU 0E1H 000000E1 B 110 HEPCON0: EQU 0E1H B 111 000000E2 B 112 RXSTAT: EQU 0E2H 000000E2 B 113 RXSTAT0: EQU 0E2H 000000E2 B 114 RXSTAT1: EQU 0E2H 000000E2 B 115 RXSTAT2: EQU 0E2H 000000E2 B 116 RXSTAT3: EQU 0E2H 000000E2 B 117 HRXSTAT0: EQU 0E2H B 118 000000E3 B 119 RXDAT: EQU 0E3H 000000E3 B 120 RXDAT0: EQU 0E3H 000000E3 B 121 RXDAT1: EQU 0E3H 000000E3 B 122 RXDAT2: EQU 0E3H 000000E3 B 123 RXDAT3: EQU 0E3H B 124 000000E3 B 125 FRXDAT0: EQU 0E3H 000000E3 B 126 FRXDAT1: EQU 0E3H 000000E3 B 127 FRXDAT2: EQU 0E3H 000000E3 B 128 FRXDAT3: EQU 0E3H 000000E3 B 129 HRXDAT0: EQU 0E3H B 130 000000E4 B 131 RXCON: EQU 0E4H 000000E4 B 132 RXCON0: EQU 0E4H 000000E4 B 133 RXCON1: EQU 0E4H 000000E4 B 134 RXCON2: EQU 0E4H 000000E4 B 135 RXCON3: EQU 0E4H B 136 000000E4 B 137 FRXCON0: EQU 0E4H 000000E4 B 138 FRXCON1: EQU 0E4H 000000E4 B 139 FRXCON2: EQU 0E4H 000000E4 B 140 FRXCON3: EQU 0E4H 000000E4 B 141 HRXCON0: EQU 0E4H PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:27 page: 4 PC Machine Code I Line File: 82930AA.inc B 142 000000E5 B 143 RXFLG: EQU 0E5H 000000E5 B 144 RXFLG0: EQU 0E5H 000000E5 B 145 RXFLG1: EQU 0E5H 000000E5 B 146 RXFLG2: EQU 0E5H 000000E5 B 147 RXFLG3: EQU 0E5H B 148 B 149 000000E5 B 150 FRXFLG: EQU 0E5H 000000E5 B 151 FRXFLG0: EQU 0E5H 000000E5 B 152 FRXFLG1: EQU 0E5H 000000E5 B 153 FRXFLG2: EQU 0E5H 000000E5 B 154 FRXFLG3: EQU 0E5H 000000E5 B 155 HRXFLG0: EQU 0E5H B 156 B 157 000000E6 B 158 RXCNT0: EQU 0E6h 000000E6 B 159 RXCNT1: EQU 0E6h 000000E6 B 160 RXCNT2: EQU 0E6h 000000E6 B 161 RXCNT3: EQU 0E6h B 162 000000E6 B 163 RXCNT: EQU 0E6H 000000E6 B 164 FRXCNT0: EQU 0E6H 000000E6 B 165 FRXCNT1: EQU 0E6H 000000E6 B 166 FR2XCNT2: EQU 0E6H 000000E6 B 167 FRXCNT3: EQU 0E6H 000000E6 B 168 HRXCNT0: EQU 0E6H 000000E6 B 169 RXCNTL: EQU 0E6H 000000E7 B 170 RXCNTH: EQU 0E7H B 171 000000DF B 172 UPWCON: EQU 0DFH 000000D2 B 173 SOFL: EQU 0D2H 000000D3 B 174 SOFH: EQU 0D3H 000000D4 B 175 UPINDEX: EQU 0D4H B 176 000000D5 B 177 UPSTCH: EQU 0D5H 000000D5 B 178 UPSTCH1: EQU 0D5H 000000D5 B 179 UPSTCH2: EQU 0D5H 000000D5 B 180 UPSTCH3: EQU 0D5H 000000D5 B 181 UPSTCH4: EQU 0D5H B 182 000000D7 B 183 UPSTAT: EQU 0D7H 000000D7 B 184 UPSTAT1: EQU 0D7H 000000D7 B 185 UPSTAT2: EQU 0D7H 000000D7 B 186 UPSTAT3: EQU 0D7H 000000D7 B 187 UPSTAT4: EQU 0D7H B 188 000000CF B 189 UPCON: EQU 0CFH 000000CF B 190 UPCON1: EQU 0CFH 000000CF B 191 UPCON2: EQU 0CFH 000000CF B 192 UPCON3: EQU 0CFH 000000CF B 193 UPCON4: EQU 0CFH PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:27 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:16:27 page: 6 PC Machine Code I Line File: 82930AA.inc B 246 B 247 ;---------------------------------- B 248 ;- PCON1 B 249 ;---------------------------------- B 250 000000DF B 251 PCON1 EQU 0DFh B 252 RWU EQU PCON1.2 B 253 ;G_RSM EQU PCON1.1 B 254 ;G_SUS EQU PCON1.0 B 255 GRSM EQU PCON1.1 B 256 GSUS EQU PCON1.0 B 257 B 258 ;---------------------------------- B 259 ;- SOFH B 260 ;---------------------------------- B 261 SFACK EQU SOFH.7 B 262 ASOF EQU SOFH.6 B 263 SOFIE EQU SOFH.5 B 264 FLOCK EQU SOFH.4 B 265 SOFDIS EQU SOFH.3 B 266 B 267 ;---------------------------------- B 268 ;- EPCON B 269 ;---------------------------------- B 270 RXSTL EQU EPCON.7 B 271 TXSTL EQU EPCON.6 B 272 CTLEP EQU EPCON.5 B 273 RXSPM EQU EPCON.4 B 274 RXIE EQU EPCON.3 B 275 RXEPEN EQU EPCON.2 B 276 TXOE EQU EPCON.1 B 277 TXEPEN EQU EPCON.7 B 278 B 279 ;---------------------------------- B 280 ;- RXSTAT B 281 ;---------------------------------- B 282 RXSEQ EQU RXSTAT.7 B 283 RXSETUP EQU RXSTAT.6 B 284 STOVW EQU RXSTAT.5 B 285 EDOVW EQU RXSTAT.4 B 286 RXDTO EQU RXSTAT.3 B 287 RXVOID EQU RXSTAT.2 B 288 RXERR EQU RXSTAT.1 B 289 RXACK EQU RXSTAT.0 B 290 B 291 ;---------------------------------- B 292 ;- TXSTAT B 293 ;---------------------------------- B 294 TXSEQ EQU TXSTAT.7 B 295 ;-- B 296 ;-- B 297 TXFLUSH EQU TXSTAT.4 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:27 page: 7 PC Machine Code I Line File: 82930AA.inc B 298 TXDTO EQU TXSTAT.3 B 299 TXVOID EQU TXSTAT.2 B 300 TXERR EQU TXSTAT.1 B 301 TXACK EQU TXSTAT.0 B 302 B 303 B 304 B 305 ;---------------------------------- B 306 ;- RXCON B 307 ;---------------------------------- B 308 RXCLR EQU RXCON.7 B 309 ;- B 310 RXWS EQU RXCON.5 B 311 RXFFRC EQU RXCON.4 B 312 RXISO EQU RXCON.3 B 313 ARM EQU RXCON.2 B 314 ADVWM EQU RXCON.1 B 315 REVWP EQU RXCON.0 B 316 B 317 ;---------------------------------- B 318 ;- TXCON B 319 ;---------------------------------- B 320 TXCLR EQU TXCON.7 B 321 ;- B 322 TXWS EQU TXCON.5 B 323 TXFFRC EQU TXCON.4 B 324 TXISO EQU TXCON.3 B 325 ATM EQU TXCON.2 B 326 ADVRM EQU TXCON.1 B 327 REVRP EQU TXCON.0 B 328 B 329 B 330 ;---------------------------------- B 331 ;- FIE B 332 ;---------------------------------- B 333 FTXIE0 EQU FIE.0 B 334 FRXIE0 EQU FIE.1 B 335 FTXIE1 EQU FIE.2 B 336 FRXIE1 EQU FIE.3 B 337 FTXIE2 EQU FIE.4 B 338 FRXIE2 EQU FIE.5 B 339 FTXIE3 EQU FIE.6 B 340 FRXIE3 EQU FIE.7 B 341 B 342 ;---------------------------------- B 343 ;- FIFLG B 344 ;---------------------------------- 000000C0 B 345 FIFLG EQU 0C0H B 346 FTXD0 EQU FIFLG.0 B 347 FRXD0 EQU FIFLG.1 B 348 FTXD1 EQU FIFLG.2 B 349 FRXD1 EQU FIFLG.3 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:27 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:16:27 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:16:27 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:16:27 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:16:27 page: 12 PC Machine Code I Line File: c:\usb\930code\outonly\outonly.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 07FB A 76 lCall INIT_VARIABLES ; Initi 00FF0112 12 06D4 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:16:27 page: 13 PC Machine Code I Line File: c:\usb\930code\outonly\outonly.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 018F 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 01E9 A 131 lCall IN_TOKEN A 132 00FF016B A 133 EP1_RX: 00FF016B 75F101 A 134 mov EPINDEX, #1 00FF016E A5A936E5 03 A 135 jnb RXFIF0,EP2_RX 00FF0173 12 0567 A 136 lCall ServiceEP1RX A 137 00FF0176 A 138 EP2_RX: 00FF0176 75F102 A 139 mov EPINDEX, #2 00FF0179 A5A936E5 03 A 140 jnb RXFIF0,EP3_RX 00FF017E 12 0567 A 141 lCall ServiceEP1RX A 142 00FF0181 A 143 EP3_RX: 00FF0181 75F103 A 144 mov EPINDEX, #3 00FF0184 A5A936E5 03 A 145 jnb RXFIF0,EP_Done 00FF0189 12 0567 A 146 lCall ServiceEP1RX A 147 00FF018C A 148 EP_Done: 00FF018C 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:16:27 page: 14 PC Machine Code I Line File: c:\usb\930code\outonly\outonly.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 00FF018F A 176 OUT_TOKEN1: A 177 00FF018F 53C0FD A 178 anl SBI,#EP0_RX_CLR ; Clear t A 179 A 180 ;Check sequence bit for the stat 00FF0192 A57EE4 0000 A 181 mov WR28, #00 ; point t 00FF0197 A57EF4 9000 A 182 mov WR30, #LOW16(SetupSeq) 00FF019C A57E7BB0 A 183 mov R11, @DR28 00FF01A0 A5BEB000 A 184 cmp R11, #0 ; Is this 00FF01A4 A578 06 A 185 jne ?l1 ; If not, 00FF01A7 12 0229 A 186 lcall SETUP_TOKEN ; If yes, 00FF01AA 02 01E8 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 00FF01AD A5BEB001 A 193 ?l1: cmp R11, #1 ; Is this the 00FF01B1 A578 1B A 194 jne ?l2 ; No, so check 00FF01B4 A5A9D4E4 A 195 SETB RXCON0.4 ;Update receive 00FF01B8 A5A9D7F4 A 196 SETB TXCON0.7 ;Flush the Tran 00FF01BC A5A9C1E1 A 197 CLR EPCON0.1 ;disable Tx Out A 198 ;with "NAK" 00FF01C0 A57EF4 9000 A 199 mov WR30,#LOW16(SetupSeq) ;Up 00FF01C5 A57EB000 A 200 mov r11,#0 00FF01C9 A57A7BB0 A 201 mov @DR28, R11 00FF01CD 80 19 A 202 sjmp ?lx A 203 A 204 ;jb RXSTAT0.6, ?l1 ; If not SE A 205 00FF01CF A5BEB002 A 206 ?l2: cmp R11, #2 ; Are we proces 00FF01D3 A578 05 A 207 jne ?l3 00FF01D6 12 0530 A 208 lcall OUT_TOKEN ; If we are con 00FF01D9 80 0D A 209 SJMP ?lx A 210 00FF01DB A5BEB003 A 211 ?l3: cmp R11, #3 ;If 3, then we PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:27 page: 15 PC Machine Code I Line File: c:\usb\930code\outonly\outonly.asm A 212 ;all outs are t A 213 ;the control tr 00FF01DF A578 06 A 214 jne ?l4 00FF01E2 A5A9D4E4 A 215 SETB RXCON0.4 ;Clear the rece 00FF01E6 80 00 A 216 sjmp ?lx A 217 00FF01E8 A 218 ?l4: A 219 00FF01E8 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 00FF01E9 A 249 IN_TOKEN: 00FF01E9 53C0FE A 250 anl SBI, #EP0_TX_CLR 00FF01EC A57EB3 9000 A 251 mov R11, 00:SetupSeq 00FF01F1 A5BEB002 A 252 cmp R11, #02h 00FF01F5 A578 0B A 253 jne InTokenCheckSA A 254 00FF01F8 A 255 ?StatusPhaseDone: 00FF01F8 A57EB000 A 256 mov R11, #00h 00FF01FC A57AB3 9000 A 257 mov 00:SetupSeq, R11 00FF0201 80 25 A 258 jmp ?Return A 259 00FF0203 A 260 InTokenCheckSA: 00FF0203 A5BEB003 A 261 cmp R11, #03h 00FF0207 A578 14 A 262 jne ?SendDataBack 00FF020A A57EA3 9006 A 263 mov R10, 00:new_addr PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:27 page: 16 PC Machine Code I Line File: c:\usb\930code\outonly\outonly.asm 00FF020F A57AA18F A 264 mov FADDR, R10 00FF0213 A57EB000 A 265 mov R11, #00h 00FF0217 A57AB3 9000 A 266 mov 00:SetupSeq, R11 00FF021C 80 0A A 267 jmp ?Return A 268 00FF021E A 269 ?SendDataBack: 00FF021E A5BEB001 A 270 cmp R11, #01h 00FF0222 A578 03 A 271 jne ?Return A 272 00FF0225 12 0665 A 273 lCall DoControlOutput A 274 00FF0228 A 275 ?Return: 00FF0228 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. 00FF0229 A 286 SETUP_TOKEN: 00FF0229 A57EE4 0000 A 287 MOV WR28, #0 ; USE DR2 00FF022E A57EF4 9100 A 288 mov WR30, #LOW16(COMMAND_BUFFER) 00FF0233 A57E81E6 A 289 mov R8, RXCNT0 ; Use R8 00FF0237 A57A7B80 A 290 mov @DR28, R8 ; Store 00FF023B A52EF4 0001 A 291 add WR30, #1 ; Increme 00FF0240 A54C88 A 292 orl R8, R8 ; Set fl 00FF0243 A568 22 A 293 je ?k2 ; Zero le A 294 ;(KLS) 00FF0246 A5A9C4E2 A 295 clr EDOVW ; Release A 296 ; Read FI 00FF024A A57EB1E3 A 297 ?k1: mov R11, RXDAT0 ; Read by 00FF024E A57A7BB0 A 298 mov @DR28, R11 ; Store i 00FF0252 A52EF4 0001 A 299 ADD WR30, #1 ; Increm 00FF0257 A59E8001 A 300 sub R8, #1 ; Decreme 00FF025B A578 EC A 301 jne ?k1 ; Read un A 302 00FF025E A5A9D4E4 A 303 setb RXCON0.4 ; Set FFR A 304 ;(KLS) 00FF0262 A5A9C6E2 A 305 clr RXSETUP ; Release 00FF0266 80 07 A 306 sjmp PROCESS_SETUP A 307 00FF0268 A 308 ?k2: ;Should nev 00FF0268 A5A9D4E4 A 309 setb RXCON0.4 ;Clear the 00FF026C 02 052F 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:16:27 page: 17 PC Machine Code I Line File: c:\usb\930code\outonly\outonly.asm A 316 SCOPE 00FF026F 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 00FF026F A57EE4 0000 A 323 mov WR28, #0 00FF0274 A57EF4 9101 A 324 mov WR30, #LOW16(bmRequestType) 00FF0279 A57E7BB0 A 325 mov R11, @DR28 A 326 00FF027D A55EB080 A 327 anl R11, #80h; Get/Set ?? 00FF0281 A578 03 A 328 jne DO_GET_COMMAND A 329 00FF0284 02 0363 A 330 LJMP DO_SET_COMMAND A 331 A 332 ;======================================= A 333 ; Routines to process a get descriptor/c A 334 ;======================================= A 335 00FF0287 A 336 DO_GET_COMMAND: 00FF0287 A57EF4 9102 A 337 mov WR30, #LOW16(bRequest) 00FF028C A57E7BB0 A 338 mov R11, @DR28 00FF0290 A5BEB006 A 339 cmp R11, #GET_DESCRIPTOR 00FF0294 A578 03 A 340 jne CheckGetConfig 00FF0297 02 0445 A 341 ljmp GET_DESCR_Request ; A 342 00FF029A A 343 CheckGetConfig: 00FF029A A5BEB008 A 344 cmp R11, #GET_CONFIGURATION 00FF029E A578 25 A 345 jne CheckGetStatus A 346 A 347 ;; Setup the pointers in in 00FF02A1 7A00 A 348 mov R2, #00h 00FF02A3 A57A23 A004 A 349 mov in_rd_pntr, R2 ;Se A 350 00FF02A8 7A01 A 351 mov R2, #01h 00FF02AA A57A23 A005 A 352 mov in_bytes_left, R2 ;po A 353 00FF02AF A57E23 A008 A 354 mov R2, MyConfigVal 00FF02B4 A57A23 B000 A 355 mov IN_BUFFERS, R2 A 356 00FF02B9 7A01 A 357 mov R2, #01h 00FF02BB A57A23 9000 A 358 mov SetupSeq , R2 A 359 00FF02C0 12 0665 A 360 lcall DoControlOutput A 361 00FF02C3 02 052F A 362 ljmp EXIT_SETUP A 363 A 364 ; code for other types of bRequests 00FF02C6 A 365 CheckGetStatus: 00FF02C6 A5BEB000 A 366 cmp R11, #GET_STATUS 00FF02CA A578 5D A 367 jne CheckGetInterface PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:27 page: 18 PC Machine Code I Line File: c:\usb\930code\outonly\outonly.asm A 368 00FF02CD A57E04 0000 A 369 mov WR0, #0 ; preloa A 370 00FF02D2 A57E23 9101 A 371 mov R2,bmRequestType 00FF02D7 A55E2003 A 372 anl R2, #3 ; Get th 00FF02DB A5BE2000 A 373 cmp R2, #0 00FF02DF A568 34 A 374 je GSDevice A 375 00FF02E2 A5BE2001 A 376 cmp R2, #1 00FF02E6 A568 31 A 377 je GSInterface A 378 00FF02E9 A 379 GSEndpoint: ; We get A 380 ; to and A 381 ; it is A 382 ; is sta 00FF02E9 C0F1 A 383 push EPINDEX ; Save c 00FF02EB A57E23 9105 A 384 mov R2, wIndex 00FF02F0 A55E2003 A 385 anl R2, #3 ; Get ep A 386 00FF02F4 8AF1 A 387 mov EPINDEX, R2 ; and se A 388 ;; Now we have the correct EP nu A 389 ;; and IN or an OUT 00FF02F6 A57E23 9105 A 390 mov R2, wIndex 00FF02FB A55E2080 A 391 anl R2, #80h 00FF02FF A578 09 A 392 jne GS_IN_Endpoint A 393 00FF0302 A 394 GS_OUT_Endpoint: 00FF0302 A5A937E1 0B A 395 jnb RXSTL, GSEndpointDone 00FF0307 7801 A 396 mov R0, #1 ; Set th 00FF0309 80 07 A 397 jmp GSEndpointDone A 398 00FF030B A 399 GS_IN_Endpoint: 00FF030B A5A936E1 02 A 400 jnb TXSTL, GSEndpointDone 00FF0310 7801 A 401 mov R0, #1 ; Set th A 402 00FF0312 A 403 GSEndpointDone: 00FF0312 D0F1 A 404 pop EPINDEX 00FF0314 80 04 A 405 jmp GSFinish A 406 00FF0316 A 407 GSDevice: 00FF0316 7801 A 408 mov R0,#1 00FF0318 80 00 A 409 jmp GSFinish A 410 00FF031A A 411 GSInterface: A 412 ;; Interface is always zero and A 413 ;; we do nothing A 414 00FF031A A 415 GSFinish: 00FF031A 7A01 A 416 mov R2, #01h 00FF031C A57A23 9000 A 417 mov SetupSeq , R2 A 418 00FF0321 12 064D A 419 lCall SetStatusData PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:27 page: 19 PC Machine Code I Line File: c:\usb\930code\outonly\outonly.asm 00FF0324 12 0665 A 420 lCall DoControlOutput A 421 00FF0327 02 052F A 422 ljmp EXIT_SETUP A 423 00FF032A A 424 CheckGetInterface: 00FF032A A5BEB00A A 425 cmp R11, #GET_INTERFACE 00FF032E A578 25 A 426 jne CheckSynchFrame A 427 ;; Setup the pointers in in 00FF0331 7A00 A 428 mov R2, #00h 00FF0333 A57A23 A004 A 429 mov in_rd_pntr, R2 ;Se A 430 00FF0338 7A01 A 431 mov R2, #01h 00FF033A A57A23 A005 A 432 mov in_bytes_left, R2 ;po A 433 00FF033F A57E23 A009 A 434 mov R2, MyInterfaceVal 00FF0344 A57A23 B000 A 435 mov IN_BUFFERS, R2 A 436 00FF0349 7A01 A 437 mov R2, #01h 00FF034B A57A23 9000 A 438 mov SetupSeq , R2 A 439 00FF0350 12 0665 A 440 lcall DoControlOutput A 441 00FF0353 02 052F A 442 ljmp EXIT_SETUP A 443 00FF0356 A 444 CheckSynchFrame: 00FF0356 A5BEB00C A 445 cmp R11, #SYCH_FRAME 00FF035A A578 03 A 446 jne GetCommandExit 00FF035D 02 052F A 447 ljmp GET_CONFIG_Request ; A 448 00FF0360 A 449 GetCommandExit: 00FF0360 02 052F 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 00FF0363 A 458 DO_SET_COMMAND: 00FF0363 A57EF4 9102 A 459 mov WR30, #LOW16(bRequest) 00FF0368 A57E7BB0 A 460 mov R11, @DR28 A 461 00FF036C A5BEB007 A 462 cmp R11, #SET_DESCRIPTOR ; W 00FF0370 A578 02 A 463 jne ?CheckSetConfig 00FF0373 80 30 A 464 jmp DO_SET_DESCRIPTOR A 465 00FF0375 A 466 ?CheckSetConfig: 00FF0375 A5BEB009 A 467 cmp R11, #SET_CONFIGURATION 00FF0379 A578 02 A 468 jne ?CheckSetInterface 00FF037C 80 29 A 469 jmp DO_SET_CONFIGURATION A 470 00FF037E A 471 ?CheckSetInterface: PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:27 page: 20 PC Machine Code I Line File: c:\usb\930code\outonly\outonly.asm 00FF037E A5BEB00B A 472 cmp R11, #SET_INTERFACE 00FF0382 A578 02 A 473 jne ?CheckClearFeature 00FF0385 80 2C A 474 jmp DO_SET_INTERFACE A 475 00FF0387 A 476 ?CheckClearFeature: 00FF0387 A5BEB001 A 477 cmp R11, #CLEAR_FEATURE 00FF038B A578 02 A 478 jne ?CheckSetAddress 00FF038E 80 2F A 479 jmp DO_CLEAR_FEATURE A 480 00FF0390 A 481 ?CheckSetAddress: 00FF0390 A5BEB005 A 482 cmp R11, #SET_ADDRESS ; Wa 00FF0394 A578 03 A 483 jne ?CheckSetFeature 00FF0397 02 041B A 484 jmp DO_SET_ADDRESS A 485 00FF039A A 486 ?CheckSetFeature: 00FF039A A5BEB003 A 487 cmp R11, #SET_FEATURE ; Wa 00FF039E A578 02 A 488 jne ?CheckExit 00FF03A1 80 1C A 489 jmp DO_SET_FEATURE A 490 00FF03A3 A 491 ?CheckExit: 00FF03A3 81 3C A 492 ajmp DO_SET_COMMAND_EXIT A 493 00FF03A5 A 494 DO_SET_DESCRIPTOR: A 495 ; 00FF03A5 81 3C A 496 ajmp DO_SET_COMMAND_EXIT A 497 00FF03A7 A 498 DO_SET_CONFIGURATION: A 499 ; 00FF03A7 A57E23 9103 A 500 mov R2, wValue 00FF03AC A57A23 A008 A 501 mov MyConfigVal, R2 00FF03B1 81 3C A 502 ajmp DO_SET_COMMAND_EXIT A 503 00FF03B3 A 504 DO_SET_INTERFACE: A 505 ; 00FF03B3 A57E23 9103 A 506 mov R2, wValue 00FF03B8 A57A23 A009 A 507 mov MyInterfaceVal, R2 00FF03BD 81 3C A 508 ajmp DO_SET_COMMAND_EXIT A 509 00FF03BF A 510 DO_CLEAR_FEATURE: 00FF03BF A 511 DO_SET_FEATURE: 00FF03BF A57E23 9101 A 512 mov R2, bmRequestType 00FF03C4 A5BE2002 A 513 cmp R2, #2; Check to see if 00FF03C8 A578 71 A 514 jne DO_SET_COMMAND_EXIT; If A 515 00FF03CB A57E17 9103 A 516 mov WR2, wValue 00FF03D0 A5BE14 0000 A 517 cmp WR2, #0 00FF03D5 A578 64 A 518 jne DO_SET_COMMAND_EXIT; Not A 519 00FF03D8 C0F1 A 520 push EPINDEX 00FF03DA A57E23 9105 A 521 mov R2, wIndex ; Get th 00FF03DF A55E2003 A 522 anl R2, #3 ; Get ep A 523 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:27 page: 21 PC Machine Code I Line File: c:\usb\930code\outonly\outonly.asm 00FF03E3 8AF1 A 524 mov EPINDEX, R2 ; and se A 525 ;; Now we have the correct EP nu A 526 ;; and IN or an OUT 00FF03E5 A57E23 9105 A 527 mov R2, wIndex 00FF03EA A55E2080 A 528 anl R2, #80h 00FF03EE A578 13 A 529 jne SF_IN_Endpoint A 530 00FF03F1 A 531 SF_OUT_Endpoint: 00FF03F1 A5BEB003 A 532 cmp R11,#SET_FEATURE 00FF03F5 A578 06 A 533 jne SF_OUT_CLR 00FF03F8 A5A9D7E1 A 534 setb RXSTL ; Set th 00FF03FC 80 19 A 535 jmp SFEndpointDone 00FF03FE A 536 SF_OUT_CLR: 00FF03FE A5A9C7E1 A 537 clr RXSTL ; Clear 00FF0402 80 13 A 538 jmp SFEndpointDone A 539 00FF0404 A 540 SF_IN_Endpoint: 00FF0404 A5BEB003 A 541 cmp R11,#SET_FEATURE 00FF0408 A578 06 A 542 jne SF_IN_CLR 00FF040B A5A9D6E1 A 543 setb TXSTL ; Set th 00FF040F 80 06 A 544 jmp SFEndpointDone A 545 00FF0411 A 546 SF_IN_CLR: 00FF0411 A5A9C6E1 A 547 clr TXSTL ; Clear 00FF0415 80 00 A 548 jmp SFEndpointDone A 549 00FF0417 A 550 SFEndpointDone: 00FF0417 D0F1 A 551 pop EPINDEX 00FF0419 80 21 A 552 jmp DO_SET_COMMAND_EXIT A 553 00FF041B A 554 DO_SET_ADDRESS: 00FF041B A57EF4 9103 A 555 mov WR30, #LOW16(wValue) ; Get 00FF0420 A50B7A40 A 556 mov WR8, @DR28 ; It do 00FF0424 A57EF4 9006 A 557 mov WR30, #LOW16(new_addr) ;statu 00FF0429 A57A7B80 A 558 mov @DR28, R8 00FF042D A57EF4 9000 A 559 mov WR30, #LOW16(SetupSeq) 00FF0432 A57EA003 A 560 mov R10, #3 ; This 00FF0436 A57A7BA0 A 561 mov @DR28, R10 ;Set s 00FF043A 81 3C A 562 ajmp DO_SET_COMMAND_EXIT A 563 00FF043C A 564 DO_SET_COMMAND_EXIT: A 565 00FF043C 75F600 A 566 mov TXCNT0, #0 ; Prime F 00FF043F A5A9D1E1 A 567 setb EPCON0.1 ; Set the 00FF0443 A1 2F A 568 ajmp EXIT_SETUP A 569 A 570 A 571 ; ********************** GET DES 00FF0445 A 572 GET_DESCR_Request: A 573 00FF0445 A57EF4 9103 A 574 mov WR30, #LOW16(wValue) 00FF044A A50B7A50 A 575 mov WR10, @DR28 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:27 page: 22 PC Machine Code I Line File: c:\usb\930code\outonly\outonly.asm 00FF044E A5BEB001 A 576 cmp R11, #DEVICE_DESCR ;Low By 00FF0452 A578 20 A 577 jne ?c1 A 578 A 579 A 580 ; ********************** GET DESC A 581 00FF0455 A57EF4 9000 A 582 mov WR30, #LOW16(SetupSeq) ;Adv 00FF045A A57EA001 A 583 mov R10, #1 ;Set 00FF045E A57A7BA0 A 584 mov @DR28, R10 ; A 585 00FF0462 A57EE4 00FF A 586 mov WR28, #0ffh; 00FF0467 A57EF4 0729 A 587 mov WR30, #LOW16(DEVICE_DESCRIPTO 00FF046C 12 0582 A 588 LCALL BufferControlData 00FF046F 12 0665 A 589 LCALL DoControlOutput 00FF0472 02 052F A 590 ljmp EXIT_SETUP A 591 A 592 00FF0475 A5BEB002 A 593 ?c1: cmp R11, #CONFIG_DESCR 00FF0479 A578 20 A 594 jne ?c2 A 595 ; ********************** GET DESC A 596 00FF047C A57EF4 9000 A 597 mov WR30, #LOW16(SetupSeq) ;Up 00FF0481 A57EA001 A 598 mov R10, #1 00FF0485 A57A7BA0 A 599 mov @DR28, R10 A 600 00FF0489 A57EE4 00FF A 601 mov WR28, #0ffh; 00FF048E A57EF4 073C A 602 mov WR30, #LOW16(CONFIGURATION_DE 00FF0493 12 0582 A 603 LCALL BufferControlData 00FF0496 12 0665 A 604 LCALL DoControlOutput A 605 00FF0499 02 052F A 606 ljmp EXIT_SETUP A 607 00FF049C A5BEB003 A 608 ?c2: cmp R11, #STRING_DESCR 00FF04A0 A568 03 A 609 je ?c23 00FF04A3 02 052F A 610 ljmp EXIT_SETUP A 611 ; ********************** GET DESC 00FF04A6 A 612 ?c23: 00FF04A6 A57EF4 9000 A 613 mov WR30, #LOW16(SetupSeq) ;Up 00FF04AB A57E9001 A 614 mov R9, #1 00FF04AF A57A7B90 A 615 mov @DR28, R9 A 616 00FF04B3 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 00FF04B8 A5BEA000 A 623 cmp R10, #0 00FF04BC A578 0E A 624 jne ?cs1 00FF04BF A57EF4 0764 A 625 mov WR30, #LOW16(STRING0) 00FF04C4 12 0582 A 626 lcall BufferControlData 00FF04C7 12 0665 A 627 lcall DoControlOutput PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:27 page: 23 PC Machine Code I Line File: c:\usb\930code\outonly\outonly.asm 00FF04CA 02 052F A 628 ljmp EXIT_SETUP A 629 00FF04CD A5BEA001 A 630 ?cs1: cmp R10, #1 00FF04D1 A578 07 A 631 jne ?cs2 00FF04D4 A57EF4 0769 A 632 mov WR30, #LOW16(STRING1) 00FF04D9 80 4B A 633 jmp ?csms A 634 00FF04DB A5BEA002 A 635 ?cs2: cmp R10, #2 00FF04DF A578 07 A 636 jne ?cs3 00FF04E2 A57EF4 0790 A 637 mov WR30, #LOW16(STRING2) 00FF04E7 80 3D A 638 jmp ?csms A 639 00FF04E9 A5BEA003 A 640 ?cs3: cmp R10, #3 00FF04ED A578 07 A 641 jne ?cs4 00FF04F0 A57EF4 07A5 A 642 mov WR30, #LOW16(STRING3) 00FF04F5 80 2F A 643 jmp ?csms A 644 00FF04F7 A5BEA004 A 645 ?cs4: cmp R10, #4 00FF04FB A578 07 A 646 jne ?cs5 00FF04FE A57EF4 07AF A 647 mov WR30, #LOW16(STRING4) 00FF0503 80 21 A 648 jmp ?csms A 649 00FF0505 A5BEA005 A 650 ?cs5: cmp R10, #5 00FF0509 A578 07 A 651 jne ?cs6 00FF050C A57EF4 07D7 A 652 mov WR30, #LOW16(STRING5) 00FF0511 80 13 A 653 jmp ?csms A 654 00FF0513 A5BEA006 A 655 ?cs6: cmp R10, #6 00FF0517 A578 07 A 656 jne ?cs0 00FF051A A57EF4 07F9 A 657 mov WR30, #LOW16(STRING6) 00FF051F 80 05 A 658 jmp ?csms A 659 00FF0521 A57EF4 07FA A 660 ?cs0: mov WR30, #LOW16(STRING_END) A 661 00FF0526 12 05CC A 662 ?csms: LCALL BufferStringData 00FF0529 12 0665 A 663 LCALL DoControlOutput A 664 A 665 00FF052C 02 052F A 666 ?c3: ljmp EXIT_SETUP A 667 00FF052F A 668 GET_CONFIG_Request: A 669 A 670 A 671 00FF052F A 672 EXIT_SETUP: 00FF052F 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:16:27 page: 24 PC Machine Code I Line File: c:\usb\930code\outonly\outonly.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 00FF0530 A 687 OUT_TOKEN: ; Get the 00FF0530 53C0FD A 688 anl SBI, #EP0_RX_CLR ; Cle 00FF0533 A57EC4 0000 A 689 MOV WR24, #0 ; USE DR2 00FF0538 A57ED4 C000 A 690 mov WR26, #LOW16(OUT_BUFFERS) 00FF053D A57E81E6 A 691 mov R8, RXCNT0 ; Read co 00FF0541 A57A6B80 A 692 mov @DR24, R8 ; Store t 00FF0545 A52ED4 0001 A 693 add WR26, #1 ; Increme 00FF054A A54C88 A 694 orl R8, R8 ; Set fla 00FF054D A568 12 A 695 je ?k2 A 696 00FF0550 AFE3 A 697 ?k1: mov R7, RXDAT0 ; Read lo 00FF0552 A57A6B70 A 698 mov @DR24, R7 00FF0556 A52ED4 0001 A 699 ADD WR26, #1 00FF055B A59E8001 A 700 sub R8, #1 00FF055F A578 EE A 701 jne ?k1 A 702 00FF0562 A5A9D4E4 A 703 ?k2: setb RXCON0.4 ; Clear t A 704 ; We now A 705 ; Transmi 00FF0566 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 00FF0567 A 715 ServiceEP1RX: 00FF0567 A5A920E2 02 A 716 jb RXACK, ?GoodReceive A 717 00FF056C 80 13 A 718 jmp ?Return A 719 00FF056E A 720 ?GoodReceive: 00FF056E AFE6 A 721 mov R7, RXCNT1 00FF0570 A5BE7000 A 722 cmp R7, #00h 00FF0574 A568 06 A 723 je ?NullPacketRecd A 724 00FF0577 A 725 ?CopyDataToBuffer: 00FF0577 A57EC1E3 A 726 mov R12, RXDAT1 00FF057B DF FA A 727 djnz R7, ?CopyDataToBuffer A 728 00FF057D A 729 ?NullPacketRecd: 00FF057D A5A9D4E4 A 730 setb RXFFRC A 731 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:27 page: 25 PC Machine Code I Line File: c:\usb\930code\outonly\outonly.asm 00FF0581 A 732 ?Return: 00FF0581 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 00FF0582 A 743 BufferControlData: A 744 ;DR28 has address of data 00FF0582 7E00 A 745 mov R6, #00h 00FF0584 A57E7B70 A 746 mov R7, @DR28 00FF0588 A52EF4 0001 A 747 add WR30, #01h 00FF058D A57E9000 A 748 mov R9, #00h A 749 00FF0591 A57A93 A004 A 750 mov in_rd_pntr, R9 A 751 A 752 00FF0596 A57E57 9107 A 753 mov WR10, wLength A 754 SWAP_BYTES R10,R11,R12 00FF05A4 A5BD35 A 755 cmp WR6, WR10 00FF05A7 A528 03 A 756 jle ?Continue A 757 00FF05AA A57D35 A 758 mov WR6, WR10 A 759 A 760 A 761 A 762 00FF05AD A 763 ?Continue: 00FF05AD A57A73 A005 A 764 mov in_bytes_left, R7 A 765 00FF05B2 A57ED4 B000 A 766 mov WR26, #LOW16(IN_BUFFERS) A 767 00FF05B7 A 768 ?MoveMemory: 00FF05B7 A57E7B90 A 769 mov R9, @DR28 00FF05BB A57AD990 A 770 mov @WR26, R9 00FF05BF A52ED4 0001 A 771 add WR26, #01h 00FF05C4 A52EF4 0001 A 772 add WR30, #01h 00FF05C9 DF EC A 773 djnz R7, ?MoveMemory A 774 00FF05CB 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:16:27 page: 26 PC Machine Code I Line File: c:\usb\930code\outonly\outonly.asm A 784 ;####################################### A 785 A 786 SCOPE 00FF05CC A 787 BufferStringData: A 788 ;DR28 has address of data 00FF05CC 7E00 A 789 mov R6, #00h 00FF05CE A57E7B70 A 790 mov R7, @DR28 00FF05D2 A5BE7000 A 791 cmp R7, #0 00FF05D6 A568 73 A 792 je BSD_Ret A 793 00FF05D9 A5CA78 A 794 push R7 ; To sav 00FF05DC A52EF4 0001 A 795 add WR30, #01h A 796 00FF05E1 A57E9000 A 797 mov R9, #00h 00FF05E5 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 00FF05EA A52C77 A 804 add R7,R7 00FF05ED A52E7002 A 805 add R7,#2 A 806 00FF05F1 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 00FF05F6 A57AD970 A 811 mov @WR26, R7 00FF05FA A52ED4 0001 A 812 add WR26,#1 A 813 ;; The next value is the string 00FF05FF A57E9003 A 814 mov R9, #STRING_DESCR 00FF0603 A57AD990 A 815 mov @WR26, R9 00FF0607 A52ED4 0001 A 816 add WR26,#1 A 817 A 818 00FF060C A57E57 9107 A 819 mov WR10, wLength A 820 SWAP_BYTES R10,R11,R12 00FF061A A5BD35 A 821 cmp WR6, WR10 00FF061D A528 03 A 822 jle BSD_Continue A 823 00FF0620 A57D35 A 824 mov WR6, WR10 A 825 A 826 A 827 A 828 00FF0623 A 829 BSD_Continue: 00FF0623 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:16:27 page: 27 PC Machine Code I Line File: c:\usb\930code\outonly\outonly.asm A 836 ;; loop below, we first put a ze A 837 ;; the character from the string A 838 ;; 00FF0628 A5DA78 A 839 pop R7 ; Restore the st 00FF062B A57E8000 A 840 mov R8,#0 ; will always cr A 841 ; descriptor eve A 842 ; be returned. 00FF062F A 843 BSD_MoveMemory: 00FF062F A57AD980 A 844 mov @WR26, R8 00FF0633 A52ED4 0001 A 845 add WR26, #01h 00FF0638 A57E7B90 A 846 mov R9, @DR28 00FF063C A57AD990 A 847 mov @WR26, R9 00FF0640 A52ED4 0001 A 848 add WR26, #01h 00FF0645 A52EF4 0001 A 849 add WR30, #01h 00FF064A DF E3 A 850 djnz R7, BSD_MoveMemory 00FF064C A 851 BSD_Ret: 00FF064C 22 A 852 Ret A 853 A 854 ; -------------------------------------- A 855 ; A 856 ; A 857 ; -------------------------------------- 00FF064D A 858 SetStatusData: 00FF064D 7A00 A 859 mov R2, #00h 00FF064F A57A23 A004 A 860 mov in_rd_pntr, R2 ;Se A 861 00FF0654 7A02 A 862 mov R2, #02h 00FF0656 A57A23 A005 A 863 mov in_bytes_left, R2 ;po A 864 00FF065B A57ED4 B000 A 865 mov WR26, #LOW16(IN_BUFFERS) 00FF0660 A51BD800 A 866 mov @WR26, WR0 A 867 00FF0664 22 A 868 Ret A 869 A 870 ;####################################### A 871 ;################# DoControlOutput ##### A 872 ;####################################### A 873 A 874 SCOPE 00FF0665 A 875 DoControlOutput: 00FF0665 A5A9C1E1 A 876 clr EPCON0.1 A 877 00FF0669 A57EA3 A005 A 878 mov R10, in_bytes_left 00FF066E A5BEA000 A 879 cmp R10, #00h 00FF0672 A578 07 A 880 jne CntlDataAvail 00FF0675 A57E8000 A 881 mov R8, #00h 00FF0679 02 06CB A 882 ljmp ControlArmTx A 883 00FF067C A 884 CntlDataAvail: 00FF067C A57ED4 B000 A 885 mov WR26, #LOW16(IN_BUFFERS) 00FF0681 A57EC000 A 886 mov R12, #00h 00FF0685 A57ED3 A004 A 887 mov R13, in_rd_pntr PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:27 page: 28 PC Machine Code I Line File: c:\usb\930code\outonly\outonly.asm A 888 00FF068A A52DD6 A 889 add WR26, WR12 00FF068D A57E8000 A 890 mov R8, #00h 00FF0691 A5CAA8 A 891 push R10 A 892 00FF0694 A 893 ?WriteToFifo: 00FF0694 A57ED9B0 A 894 mov R11, @WR26 00FF0698 A57AB1F3 A 895 mov TXDAT0, R11 00FF069C A52ED4 0001 A 896 add WR26, #01h 00FF06A1 A52E8001 A 897 add R8,#01h 00FF06A5 A59EA001 A 898 sub R10, #01h 00FF06A9 A568 07 A 899 je ControlTxUpd A 900 00FF06AC A5BE8008 A 901 cmp R8, #FIFO_SIZE 00FF06B0 A578 E1 A 902 jne ?WriteToFifo A 903 00FF06B3 A 904 ControlTxUpd: 00FF06B3 A5DAA8 A 905 pop R10 00FF06B6 A57EC3 A004 A 906 mov R12, in_rd_pntr 00FF06BB A52CC8 A 907 add R12, R8 00FF06BE A57AC3 A004 A 908 mov in_rd_pntr, R12 00FF06C3 A59CA8 A 909 sub R10, R8 00FF06C6 A57AA3 A005 A 910 mov in_bytes_left, R10 A 911 00FF06CB A 912 ControlArmTx: 00FF06CB A57A81F6 A 913 mov TXCNT0, R8 00FF06CF A5A9D1E1 A 914 setb EPCON0.1 A 915 00FF06D3 A 916 ?Return: 00FF06D3 22 A 917 Ret A 918 A 919 SCOPE A 920 ;*************************************** A 921 ;***************** INIT_USB *********** A 922 ;*************************************** A 923 00FF06D4 A 924 INIT_USB: A 925 ;(KLS) 00FF06D4 75F100 A 926 mov EPINDEX, #00h 00FF06D7 75F484 A 927 mov TXCON0,#84h ;/* Flush FIFO, 00FF06DA 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. 00FF06DD 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:16:27 page: 29 PC Machine Code I Line File: c:\usb\930code\outonly\outonly.asm A 940 ; set a configuration for this A 941 ; Endpoint enable and Transmit A 942 ; but not the input and output A 943 00FF06E0 75F101 A 944 mov EPINDEX, #01h 00FF06E3 75F484 A 945 mov TXCON1,#84h ;/* Flush FIFO, 00FF06E6 75E484 A 946 mov RXCON1,#84h ;/* Flush FIFO, 00FF06E9 75E10F A 947 mov EPCON1,#0Fh; ;/* Enable rece 00FF06EC A5A9D4E1 A 948 setb RXSPM ; Turn o A 949 00FF06F0 75F102 A 950 mov EPINDEX, #02h 00FF06F3 75F484 A 951 mov TXCON2,#84h ;/* Flush FIFO, 00FF06F6 75E484 A 952 mov RXCON2,#84h ;/* Flush FIFO, 00FF06F9 75E10F A 953 mov EPCON2,#0Fh; ;/* Enable rece 00FF06FC A5A9D4E1 A 954 setb RXSPM ; Turn o A 955 00FF0700 75F103 A 956 mov EPINDEX, #03h 00FF0703 75F484 A 957 mov TXCON3,#84h ;/* Flush FIFO, 00FF0706 75E484 A 958 mov RXCON3,#84h ;/* Flush FIFO, 00FF0709 75E10F A 959 mov EPCON3,#0Fh; ;/* Enable rece 00FF070C A5A9D4E1 A 960 setb RXSPM ; Turn o 00FF0710 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:16:27 page: 30 PC Machine Code I Line File: c:\usb\930code\outonly\outonly.asm A 992 A 993 SCOPE A 994 ;*************************************** A 995 ;***************** INIT_UART *********** A 996 ;*************************************** A 997 00FF0711 A 998 INIT_UART: 00FF0711 759850 A 999 mov SCON, #050h A 1000 ;Timer 2 is being used to genera 00FF0714 75CAD9 A 1001 mov RCAP2L, #0D9h ; USB EVAL 9 00FF0717 75CBFF A 1002 mov RCAP2H, #0FFh ; 00FF071A 75C834 A 1003 mov T2CON, #034h ; Set TIMER 00FF071D C299 A 1004 clr TI ; Clear Transmit A 1005 ;; mov IE0, #0 ; KIL 00FF071F 12 08D6 A 1006 LCALL Lng_Delay 00FF0722 759900 A 1007 mov SBUF, #00 00FF0725 12 08D6 A 1008 LCALL Lng_Delay 00FF0728 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 00FF0729 A 1022 DEVICE_DESCRIPTOR: 00FF0729 12 A 1023 gDLength: db 00FF072A 12 A 1024 gDevice_bLength: db 00FF072B 01 A 1025 gDevice_bDescriptorType: db 00FF072C 0001 A 1026 gDevice_bcdUSB: dw 00FF072E DC A 1027 gDevice_bDeviceClass: db 00FF072F 00 A 1028 gDevice_bDeviceSubClass: db 00FF0730 00 A 1029 gDevice_bDeviceProtocol: db 00FF0731 08 A 1030 gDevice_wMaxPacketSize0: db 00FF0732 8680 A 1031 gDevice_widVendor: dw 00FF0734 1199 A 1032 gDevice_widProduct: dw 00FF0736 3001 A 1033 gDevice_bcdDevice: dw 00FF0738 01 A 1034 gDevice_iManufacturer: db 00FF0739 02 A 1035 gDevice_iProduct: db 00FF073A 03 A 1036 gDevice_iSerialNumber: db 00FF073B 01 A 1037 gDevice_bNumConfigurations: db A 1038 A 1039 ;/*--------------- Initialize global Con 00FF073C A 1040 CONFIGURATION_DESCRIPTOR: 00FF073C 27 A 1041 gCLength: d A 1042 A 1043 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:27 page: 31 PC Machine Code I Line File: c:\usb\930code\outonly\outonly.asm 00FF073D 09 A 1044 gConfig_bLength: d 00FF073E 02 A 1045 gConfig_bDescriptorType: d 00FF073F 27 A 1046 gConfig_bTotalLength: d 00FF0740 00 A 1047 gConfig_bCorrection: d 00FF0741 01 A 1048 gConfig_bNumInterfaces: d 00FF0742 01 A 1049 gConfig_bConfigurationValue: d 00FF0743 04 A 1050 gConfig_iConfiguration: d A 1051 ; gConfig_bmAttributes: d 00FF0744 60 A 1052 gConfig_bmAttributes: d A 1053 00FF0745 19 A 1054 gConfig_MaxPower: d A 1055 A 1056 ; /*------------- Initialize globa 00FF0746 A 1057 gInterfaceDescriptorA: 00FF0746 09 A 1058 gInterfaceA_bLength: 00FF0747 04 A 1059 gInterfaceA_bDescriptorType: 00FF0748 00 A 1060 gInterfaceA_bInterfaceNumber: 00FF0749 00 A 1061 gInterfaceA_bAlternateSetting: 00FF074A 03 A 1062 gInterfaceA_bNumEndpoints: 00FF074B DC A 1063 gInterfaceA_bInterfaceClass: 00FF074C 30 A 1064 gInterfaceA_bInterfaceSubClass: 00FF074D 10 A 1065 gInterfaceA_bInterfaceProtocol: 00FF074E 05 A 1066 gInterfaceA_iInterface: 00FF074F A 1067 gInterfaceDescriptorA_End: A 1068 A 1069 ; /*------------- Initialize Endpoi A 1070 ; /*------------- Initialize Endpoi 00FF074F A 1071 gEndPoint1B: 00FF074F 07 A 1072 gEP1B_bLength: db 07h 00FF0750 05 A 1073 gEP1B_bDescriptorType: db END 00FF0751 01 A 1074 gEP1B_bEndPointAddress: db 01h 00FF0752 02 A 1075 gEP1B_bmAtrributes: db 02h 00FF0753 4000 A 1076 gEP1B_wMaxPacketSize: dw 400 00FF0755 00 A 1077 gEP1B_bInterval: db 0h A 1078 A 1079 ; /*------------- Initialize Endpoi 00FF0756 A 1080 gEndPoint2B: 00FF0756 07 A 1081 gEP2B_bLength: db 07 00FF0757 05 A 1082 gEP2B_bDescriptorType: db EN 00FF0758 02 A 1083 gEP2B_bEndPointAddress: db 02 00FF0759 02 A 1084 gEP2B_bmAtrributes: db 02 00FF075A 0800 A 1085 gEP2B_wMaxPacketSize: dw 08 00FF075C 00 A 1086 gEP2B_bInterval: db 00 A 1087 A 1088 ; /*------------- Initialize Endpoi 00FF075D A 1089 gEndPoint3B: 00FF075D 07 A 1090 gEP3B_bLength: db 07 00FF075E 05 A 1091 gEP3B_bDescriptorType: db EN 00FF075F 03 A 1092 gEP3B_bEndPointAddress: db 03 00FF0760 02 A 1093 gEP3B_bmAtrributes: db 02 00FF0761 0800 A 1094 gEP3B_wMaxPacketSize: dw 08 00FF0763 04 A 1095 gEP3B_bInterval: db 4h PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:27 page: 32 PC Machine Code I Line File: c:\usb\930code\outonly\outonly.asm 00FF0764 A 1096 gEndDescriptorLabel: A 1097 00FF0764 A 1098 STRING0: 00FF0764 04 A 1099 db 04h ; Four f 00FF0765 04 A 1100 db 04h ; Four b 00FF0766 03 A 1101 db 03h ; String 00FF0767 09 A 1102 db 09h ; This i 00FF0768 01 A 1103 db 01h 00FF0769 A 1104 STRING1: 00FF0769 26 A 1105 db STRING2 - STRING1 - 1 00FF076A 496E7465 6C204172 A 1106 db "Intel Architecture Labs 00FF0772 63686974 65637475 00FF077A 7265204C 61627320 00FF0782 28432920 496E7465 00FF078A 6C203139 3936 00FF0790 A 1107 STRING2: 00FF0790 14 A 1108 db STRING3 - STRING2 - 1 00FF0791 5374616E 64617264 A 1109 db "Standard Bulk Output" 00FF0799 2042756C 6B204F75 00FF07A1 74707574 00FF07A5 A 1110 STRING3: 00FF07A5 09 A 1111 db STRING4 - STRING3 - 1 00FF07A6 49414C2D 30303032 A 1112 db "IAL-00021" 00FF07AE 31 00FF07AF A 1113 STRING4: 00FF07AF 27 A 1114 db STRING5 - STRING4 - 1 00FF07B0 53696E67 6C652043 A 1115 db "Single Configuration wi 00FF07B8 6F6E6669 67757261 00FF07C0 74696F6E 20776974 00FF07C8 68206F6E 6520696E 00FF07D0 74657266 616365 00FF07D7 A 1116 STRING5: 00FF07D7 21 A 1117 db STRING6 - STRING5 - 1 00FF07D8 5374616E 64617264 A 1118 db "Standard Output: No dat 00FF07E0 204F7574 7075743A 00FF07E8 204E6F20 64617461 00FF07F0 20636865 636B696E 00FF07F8 67 00FF07F9 A 1119 STRING6: 00FF07F9 00 A 1120 db STRING_END - STRING6 - 1 00FF07FA A 1121 STRING_END: 00FF07FA 00 A 1122 db 00h A 1123 SCOPE 00FF07FB A 1124 INIT_VARIABLES: A 1125 ;Init SETUP VARIABLES 00FF07FB A57EB000 A 1126 mov R11,#0 ; Zer 00FF07FF A57EE4 0000 A 1127 mov WR28,#0 ; Acc 00FF0804 A57EF4 9000 A 1128 mov WR30,#LOW16(SetupSeq) ; Off 00FF0809 A57A7BB0 A 1129 mov @DR28,R11 ; Ini A 1130 A 1131 ; 00FF080D A57E54 0000 A 1132 mov WR10, #00h ; PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:27 page: 33 PC Machine Code I Line File: c:\usb\930code\outonly\outonly.asm 00FF0812 A57EF4 D800 A 1133 mov WR30, #LOW16(_EP1RxPtr); 00FF0817 A51B7A50 A 1134 mov @DR28, WR10 ; 00FF081B A52EF4 0002 A 1135 add WR30, #02h ; 00FF0820 A51B7A50 A 1136 mov @DR28, WR10 ; 00FF0824 A52EF4 0002 A 1137 add WR30, #02h ; 00FF0829 A51B7A50 A 1138 mov @DR28, WR10 ; A 1139 ;init 00FF082D A57EF4 E800 A 1140 mov WR30, #LOW16(_EP2RxPtr);the 00FF0832 A51B7A50 A 1141 mov @DR28, WR10 ; 00FF0836 A52EF4 0002 A 1142 add WR30, #02h ; 00FF083B A51B7A50 A 1143 mov @DR28, WR10 ; 00FF083F A52EF4 0002 A 1144 add WR30, #02h ; 00FF0844 A51B7A50 A 1145 mov @DR28, WR10 ; A 1146 ; 00FF0848 A57EF4 F800 A 1147 mov WR30, #LOW16(_EP3RxPtr); 00FF084D A51B7A50 A 1148 mov @DR28, WR10 ; 00FF0851 A52EF4 0002 A 1149 add WR30, #02h ; 00FF0856 A51B7A50 A 1150 mov @DR28, WR10 ; 00FF085A A52EF4 0002 A 1151 add WR30, #02h ; 00FF085F A51B7A50 A 1152 mov @DR28, WR10 ; A 1153 A 1154 A 1155 00FF0863 A57EA4 0000 A 1156 mov WR20,#0 00FF0868 A57EB4 A000 A 1157 mov WR22, #low16(out_var_table) 00FF086D A57E54 0000 A 1158 mov WR10, #0 00FF0872 A57E44 0000 A 1159 mov WR8,#0 00FF0877 A57A5BB0 A 1160 ?l1: mov @DR20,R11 ;This loo 00FF087B A52EB4 0001 A 1161 add WR22,#1 ;at out_v 00FF0880 A52E8001 A 1162 add R8,#1 00FF0884 A5BE8040 A 1163 cmp R8,#64 00FF0888 A578 EC A 1164 jne ?l1 A 1165 A 1166 ;Zero out the output buffer area. A 1167 00FF088B A57EA4 0000 A 1168 mov WR20, #0 00FF0890 A57EB4 C000 A 1169 mov WR22, #low16(OUT_BUFFERS) 00FF0895 A57E54 0000 A 1170 mov WR10, #0 00FF089A A57E44 0000 A 1171 mov WR8,#0 00FF089F A57A5BB0 A 1172 ?l2: mov @DR20,R11 00FF08A3 A52EB4 0001 A 1173 add WR22,#1 00FF08A8 A52E44 0001 A 1174 add WR8,#1 A 1175 ; cmp WR8,#1000 00FF08AD A5BE44 0010 A 1176 cmp WR8,#10h 00FF08B2 A578 EA A 1177 jne ?l2 00FF08B5 A57E54 0000 A 1178 mov WR10, #00h 00FF08BA A57EB4 A00A A 1179 mov WR22, #LOW16(DATA_PENDING) 00FF08BF A57A5BA0 A 1180 mov @DR20, R10 00FF08C3 A57EB4 A00D A 1181 mov WR22, #LOW16(DIRECTION_ERRO 00FF08C8 A57A5BA0 A 1182 mov @DR20, R10 00FF08CC A57EB4 A00B A 1183 mov WR22, #LOW16(PENDING_START_ 00FF08D1 A51B5A50 A 1184 mov @DR20, WR10 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:27 page: 34 PC Machine Code I Line File: c:\usb\930code\outonly\outonly.asm 00FF08D5 22 A 1185 RET A 1186 SCOPE A 1187 A 1188 00FF08D6 A 1189 Lng_Delay: 00FF08D6 A5CAC9 A 1190 push WR24 00FF08D9 A5CAD9 A 1191 push WR26 00FF08DC A57EC4 0082 A 1192 MOV WR24, #082H 00FF08E1 80 10 A 1193 JMP DE2 A 1194 A 1195 00FF08E3 A 1196 Delay_X: ;MOV 00FF08E3 A5CAC9 A 1197 push WR24 ;5 stat 00FF08E6 A5CAD9 A 1198 push WR26 ;5 stat 00FF08E9 A57EC4 0001 A 1199 MOV WR24, #001H ;3 stat 00FF08EE A 1200 DE1: 00FF08EE A57ED4 04FF A 1201 MOV WR26, #004FFH ;3 stat 00FF08F3 A 1202 DE2: 00FF08F3 A51BD4 A 1203 DEC WR26, #1 ;2 stat 00FF08F6 A5BED4 0000 A 1204 CMP WR26, #00H ;4 stat 00FF08FB A578 F5 A 1205 JNE DE2 ;5 stat 00FF08FE A51BC4 A 1206 DEC WR24, #1 ;2 stat 00FF0901 A5BEC4 0000 A 1207 CMP WR24, #00H ;4 stat 00FF0906 A578 E5 A 1208 JNE DE1 ;5 stat 00FF0909 A5DAD9 A 1209 POP WR26 ;5 stat 00FF090C A5DAC9 A 1210 POP WR24 ;5 stat 00FF090F 22 A 1211 QUICK1: RET ; A 1212 A 1213 A 1214 A 1215 A 1216 ;####################################### A 1217 ;####### RAM MEMORY MAP ################ A 1218 ;####################################### A 1219 A 1220 ; org 00:0000h ;0-4ff Res A 1221 A 1222 ; org 00:0500h ; Variable A 1223 A 1224 ; org 00:0600h ; Variable A 1225 A 1226 ;; A 1227 ;; Data block for EP1. Contains buffer s A 1228 ;; A 1229 A 1230 define OUR_DATA_SEG, SPACE=pdata A 1231 segment OUR_DATA_SEG A 1232 0000D000 A 1233 org 00:D000h 0000D000 A 1234 EP_1_Buffer: ds 1 A 1235 0000D800 A 1236 org 00:D800h PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:27 page: 35 PC Machine Code I Line File: c:\usb\930code\outonly\outonly.asm 0000D800 A 1237 _EP1RxPtr: ds 2 0000D802 A 1238 _EP1TxPtr: ds 2 0000D804 A 1239 _EP1DataCount: ds 2 A 1240 A 1241 ;; A 1242 ;; Data block for EP2. Contains buffer s A 1243 ;; A 1244 0000E000 A 1245 org 00:E000h 0000E000 A 1246 EP_2_Buffer: ds 1 A 1247 0000E800 A 1248 org 00:E800h 0000E800 A 1249 _EP2RxPtr: ds 2 0000E802 A 1250 _EP2TxPtr: ds 2 0000E804 A 1251 _EP2DataCount: ds 2 A 1252 A 1253 ;; A 1254 ;; Data block for EP3. Contains buffer s A 1255 ;; A 1256 0000F000 A 1257 org 00:F000h 0000F000 A 1258 EP_3_Buffer: ds 1 A 1259 0000F800 A 1260 org 00:F800h 0000F800 A 1261 _EP3RxPtr: ds 2 0000F802 A 1262 _EP3TxPtr: ds 2 0000F804 A 1263 _EP3DataCount: ds 2 A 1264 A 1265 00009000 A 1266 org 00:9000h A 1267 00009000 A 1268 SETUP_VARS: 00009000 A 1269 SetupSeq: ds 1 00009001 A 1270 heart_pat: ds 1 00009002 A 1271 heart_bt0: ds 2 00009004 A 1272 heart_bt1: ds 2 00009006 A 1273 new_addr: ds 1 A 1274 00009100 A 1275 org 00:9100h A 1276 00009100 A 1277 COMMAND_BUFFER: 00009100 A 1278 ds 1 ; Byte Count 00009101 A 1279 StandardDeviceRequest: 00009101 A 1280 bmRequestType: ds 1 00009102 A 1281 bRequest: ds 1 00009103 A 1282 wValue: ds 2 00009105 A 1283 wIndex: ds 2 00009107 A 1284 wLength: ds 2 A 1285 A 1286 A 1287 ; define OUR_DATA_SEG, SPACE=data, A 1288 ; segment OUR_DATA_SEG PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:16:27 page: 36 PC Machine Code I Line File: c:\usb\930code\outonly\outonly.asm A 1289 0000A000 A 1290 org 00:A000h A 1291 A 1292 0000A000 A 1293 out_var_table: 0000A000 A 1294 out_cur_buf: ds 2 0000A002 A 1295 out_cnt: ds 2 A 1296 0000A004 A 1297 in_var_table: A 1298 0000A004 A 1299 in_rd_pntr: ds 1 0000A005 A 1300 in_bytes_left: ds 1 0000A006 A 1301 in_FIFO_size: ds 1 0000A007 A 1302 in_FIFO_empty: ds 1 A 1303 0000A008 A 1304 MyConfigVal: ds 1 0000A009 A 1305 MyInterfaceVal: ds 1 A 1306 0000A00A A 1307 DATA_PENDING: ds 1 0000A00B A 1308 PENDING_START_TIME: ds 2 0000A00D A 1309 DIRECTION_ERROR_COUNT: ds 1 A 1310 A 1311 0000B000 A 1312 org 00:B000h ; A 1313 0000B000 A 1314 IN_BUFFERS: A 1315 0000C000 A 1316 org 00:C000h ; A 1317 0000C000 A 1318 OUT_BUFFERS: A 1319 A 1320 A 1321 A 1322 END Errors: 0 Warnings: 0 Lines Assembled: 1844