PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 1 PC Machine Code I Line File: A 1 COMMENT /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A 2 (C) Copyright Intel Corp., 1996 A 3 A 4 File: newloop.asm A 5 A 6 Universal Serial Bus 930 Test 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:15:45 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:15:45 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:15:45 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:15:45 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:15:45 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:15:45 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:15:45 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:15:45 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:15:45 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:15:45 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:15:45 page: 12 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.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 0AD8 A 76 lCall INIT_VARIABLES ; Initi 00FF0112 12 0986 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:15:45 page: 13 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.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 01BF 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 0219 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,EP1_TX 00FF0173 12 0597 A 136 lCall ServiceEP1RX A 137 00FF0176 A 138 EP1_TX: 00FF0176 75F101 A 139 mov EPINDEX, #1 00FF0179 A5A937F5 05 A 140 jnb TXFIF1, doit1t ; If bit 00FF017E A5A926F5 03 A 141 jb TXFIF0, EP2_RX ; If thi 00FF0183 12 05F7 A 142 doit1t: lCall ServiceEP1TX A 143 00FF0186 A 144 EP2_RX: 00FF0186 75F102 A 145 mov EPINDEX, #2 00FF0189 A5A936E5 03 A 146 jnb RXFIF0,EP2_TX 00FF018E 12 0676 A 147 lCall ServiceEP2RX A 148 00FF0191 A 149 EP2_TX: 00FF0191 75F102 A 150 mov EPINDEX, #2 00FF0194 A5A937F5 05 A 151 jnb TXFIF1, doit2 ; If bit 00FF0199 A5A926F5 03 A 152 jb TXFIF0, EP3_RX ; If thi 00FF019E 12 06D6 A 153 doit2: lCall ServiceEP2TX A 154 00FF01A1 A 155 EP3_RX: 00FF01A1 75F103 A 156 mov EPINDEX, #3 00FF01A4 A5A936E5 03 A 157 jnb RXFIF0,EP3_TX 00FF01A9 12 0755 A 158 lCall ServiceEP3RX A 159 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 14 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm 00FF01AC A 160 EP3_TX: 00FF01AC 75F103 A 161 mov EPINDEX, #3 00FF01AF A5A937F5 05 A 162 jnb TXFIF1, doit3 ; If bit 00FF01B4 A5A926F5 03 A 163 jb TXFIF0, EP_Done ; If thi 00FF01B9 12 07B5 A 164 doit3: lCall ServiceEP3TX A 165 00FF01BC A 166 EP_Done: 00FF01BC 02 013E A 167 ljmp ActiveLoop A 168 A 169 A 170 SCOPE A 171 ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< A 172 ; This is the block that services EP0 ev A 173 ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< A 174 ;####################### FAKE INTERUPT R A 175 ; A 176 ; SetupSeq Meaning A 177 ; 0 No Setup command pending. A 178 ; DeviceRequest. Later step A 179 ; packet and set a status f A 180 ; A 181 ; 1 DeviceRequest Received, P A 182 ; transfer data. An Out wi A 183 ; SetupSeq to 0 A 184 ; A 185 ; 2 DeviceRequest Received, P A 186 ; transfer data to the buff A 187 ; set SetupSeq to 0 A 188 ; A 189 ; 3 Done bit SetRequest. Ign A 190 ; Used for Set Address A 191 A 192 ; This block of code deals with Endpoint A 193 00FF01BF A 194 OUT_TOKEN1: A 195 00FF01BF 53C0FD A 196 anl SBI,#EP0_RX_CLR ; Clear t A 197 A 198 ;Check sequence bit for the stat 00FF01C2 A57EE4 0000 A 199 mov WR28, #00 ; point t 00FF01C7 A57EF4 9000 A 200 mov WR30, #LOW16(SetupSeq) 00FF01CC A57E7BB0 A 201 mov R11, @DR28 00FF01D0 A5BEB000 A 202 cmp R11, #0 ; Is this 00FF01D4 A578 06 A 203 jne ?l1 ; If not, 00FF01D7 12 0259 A 204 lcall SETUP_TOKEN ; If yes, 00FF01DA 02 0218 A 205 ljmp ?lx ; Return A 206 A 207 ; If this is not a setup command A 208 ; 0 or more data packets for a s A 209 ; status result if Seq=1 A 210 00FF01DD A5BEB001 A 211 ?l1: cmp R11, #1 ; Is this the PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 15 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm 00FF01E1 A578 1B A 212 jne ?l2 ; No, so check 00FF01E4 A5A9D4E4 A 213 SETB RXCON0.4 ;Update receive 00FF01E8 A5A9D7F4 A 214 SETB TXCON0.7 ;Flush the Tran 00FF01EC A5A9C1E1 A 215 CLR EPCON0.1 ;disable Tx Out A 216 ;with "NAK" 00FF01F0 A57EF4 9000 A 217 mov WR30,#LOW16(SetupSeq) ;Up 00FF01F5 A57EB000 A 218 mov r11,#0 00FF01F9 A57A7BB0 A 219 mov @DR28, R11 00FF01FD 80 19 A 220 sjmp ?lx A 221 A 222 ;jb RXSTAT0.6, ?l1 ; If not SE A 223 00FF01FF A5BEB002 A 224 ?l2: cmp R11, #2 ; Are we proces 00FF0203 A578 05 A 225 jne ?l3 00FF0206 12 0560 A 226 lcall OUT_TOKEN ; If we are con 00FF0209 80 0D A 227 SJMP ?lx A 228 00FF020B A5BEB003 A 229 ?l3: cmp R11, #3 ;If 3, then we A 230 ;all outs are t A 231 ;the control tr 00FF020F A578 06 A 232 jne ?l4 00FF0212 A5A9D4E4 A 233 SETB RXCON0.4 ;Clear the rece 00FF0216 80 00 A 234 sjmp ?lx A 235 00FF0218 A 236 ?l4: A 237 00FF0218 22 A 238 ?lx: ret A 239 A 240 A 241 A 242 SCOPE A 243 ;####################################### A 244 ;#################### IN TOKEN ######## A 245 ;####################################### A 246 ; SetupSeq Meaning A 247 ; 0 No Setup command pending. A 248 ; A 249 ; 1 DeviceRequest Received, P A 250 ; transfer data. An Out wi A 251 ; SetupSeq to 0 A 252 ; A 253 ; 2 DeviceRequest Received, P A 254 ; transfer data to the buff A 255 ; set SetupSeq to 0 A 256 ; A 257 ; 3 Done SetADDRESS Request. A 258 ; Used for Set Address A 259 ; A 260 ; A 261 ; For in tokens we can do 2 things. A 262 ; A 263 ; If SetupSeq = 2,3 then a IN will termi PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 16 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm A 264 A 265 A 266 SCOPE 00FF0219 A 267 IN_TOKEN: 00FF0219 53C0FE A 268 anl SBI, #EP0_TX_CLR 00FF021C A57EB3 9000 A 269 mov R11, 00:SetupSeq 00FF0221 A5BEB002 A 270 cmp R11, #02h 00FF0225 A578 0B A 271 jne InTokenCheckSA A 272 00FF0228 A 273 ?StatusPhaseDone: 00FF0228 A57EB000 A 274 mov R11, #00h 00FF022C A57AB3 9000 A 275 mov 00:SetupSeq, R11 00FF0231 80 25 A 276 jmp ?Return A 277 00FF0233 A 278 InTokenCheckSA: 00FF0233 A5BEB003 A 279 cmp R11, #03h 00FF0237 A578 14 A 280 jne ?SendDataBack 00FF023A A57EA3 9006 A 281 mov R10, 00:new_addr 00FF023F A57AA18F A 282 mov FADDR, R10 00FF0243 A57EB000 A 283 mov R11, #00h 00FF0247 A57AB3 9000 A 284 mov 00:SetupSeq, R11 00FF024C 80 0A A 285 jmp ?Return A 286 00FF024E A 287 ?SendDataBack: 00FF024E A5BEB001 A 288 cmp R11, #01h 00FF0252 A578 03 A 289 jne ?Return A 290 00FF0255 12 0917 A 291 lCall DoControlOutput A 292 00FF0258 A 293 ?Return: 00FF0258 22 A 294 Ret A 295 A 296 SCOPE A 297 A 298 ;***************** SETUP_TOKEN ******** A 299 ;***** Gets and saves SETUP DATA ******* A 300 ;*************************************** A 301 A 302 ;Procedure that takes SETUP data from th A 303 ;and then updates writes it to the fifo. 00FF0259 A 304 SETUP_TOKEN: 00FF0259 A57EE4 0000 A 305 MOV WR28, #0 ; USE DR2 00FF025E A57EF4 9100 A 306 mov WR30, #LOW16(COMMAND_BUFFER) 00FF0263 A57E81E6 A 307 mov R8, RXCNT0 ; Use R8 00FF0267 A57A7B80 A 308 mov @DR28, R8 ; Store 00FF026B A52EF4 0001 A 309 add WR30, #1 ; Increme 00FF0270 A54C88 A 310 orl R8, R8 ; Set fl 00FF0273 A568 22 A 311 je ?k2 ; Zero le A 312 ;(KLS) 00FF0276 A5A9C4E2 A 313 clr EDOVW ; Release A 314 ; Read FI 00FF027A A57EB1E3 A 315 ?k1: mov R11, RXDAT0 ; Read by PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 17 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm 00FF027E A57A7BB0 A 316 mov @DR28, R11 ; Store i 00FF0282 A52EF4 0001 A 317 ADD WR30, #1 ; Increm 00FF0287 A59E8001 A 318 sub R8, #1 ; Decreme 00FF028B A578 EC A 319 jne ?k1 ; Read un A 320 00FF028E A5A9D4E4 A 321 setb RXCON0.4 ; Set FFR A 322 ;(KLS) 00FF0292 A5A9C6E2 A 323 clr RXSETUP ; Release 00FF0296 80 07 A 324 sjmp PROCESS_SETUP A 325 00FF0298 A 326 ?k2: ;Should nev 00FF0298 A5A9D4E4 A 327 setb RXCON0.4 ;Clear the 00FF029C 02 055F A 328 LJMP EXIT_SETUP ;leave. A 329 SCOPE A 330 A 331 ;***************** PROCESS_SETUP ******* A 332 ;***** PROCESS THE SETUP *************** A 333 ;*************************************** A 334 SCOPE 00FF029F A 335 PROCESS_SETUP: A 336 A 337 ;Compare bmRequest Type A 338 ;If it's it 1xxxxxxb - Get Descri A 339 ;If it's it 0xxxxxxb - Set Addres A 340 00FF029F A57EE4 0000 A 341 mov WR28, #0 00FF02A4 A57EF4 9101 A 342 mov WR30, #LOW16(bmRequestType) 00FF02A9 A57E7BB0 A 343 mov R11, @DR28 A 344 00FF02AD A55EB080 A 345 anl R11, #80h; Get/Set ?? 00FF02B1 A578 03 A 346 jne DO_GET_COMMAND A 347 00FF02B4 02 0393 A 348 LJMP DO_SET_COMMAND A 349 A 350 ;======================================= A 351 ; Routines to process a get descriptor/c A 352 ;======================================= A 353 00FF02B7 A 354 DO_GET_COMMAND: 00FF02B7 A57EF4 9102 A 355 mov WR30, #LOW16(bRequest) 00FF02BC A57E7BB0 A 356 mov R11, @DR28 00FF02C0 A5BEB006 A 357 cmp R11, #GET_DESCRIPTOR 00FF02C4 A578 03 A 358 jne CheckGetConfig 00FF02C7 02 0475 A 359 ljmp GET_DESCR_Request ; A 360 00FF02CA A 361 CheckGetConfig: 00FF02CA A5BEB008 A 362 cmp R11, #GET_CONFIGURATION 00FF02CE A578 25 A 363 jne CheckGetStatus A 364 A 365 ;; Setup the pointers in in 00FF02D1 7A00 A 366 mov R2, #00h 00FF02D3 A57A23 A004 A 367 mov in_rd_pntr, R2 ;Se PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 18 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm A 368 00FF02D8 7A01 A 369 mov R2, #01h 00FF02DA A57A23 A005 A 370 mov in_bytes_left, R2 ;po A 371 00FF02DF A57E23 A008 A 372 mov R2, MyConfigVal 00FF02E4 A57A23 B000 A 373 mov IN_BUFFERS, R2 A 374 00FF02E9 7A01 A 375 mov R2, #01h 00FF02EB A57A23 9000 A 376 mov SetupSeq , R2 A 377 00FF02F0 12 0917 A 378 lcall DoControlOutput A 379 00FF02F3 02 055F A 380 ljmp EXIT_SETUP A 381 A 382 ; code for other types of bRequests 00FF02F6 A 383 CheckGetStatus: 00FF02F6 A5BEB000 A 384 cmp R11, #GET_STATUS 00FF02FA A578 5D A 385 jne CheckGetInterface A 386 00FF02FD A57E04 0000 A 387 mov WR0, #0 ; preloa A 388 00FF0302 A57E23 9101 A 389 mov R2,bmRequestType 00FF0307 A55E2003 A 390 anl R2, #3 ; Get th 00FF030B A5BE2000 A 391 cmp R2, #0 00FF030F A568 34 A 392 je GSDevice A 393 00FF0312 A5BE2001 A 394 cmp R2, #1 00FF0316 A568 31 A 395 je GSInterface A 396 00FF0319 A 397 GSEndpoint: ; We get A 398 ; to and A 399 ; it is A 400 ; is sta 00FF0319 C0F1 A 401 push EPINDEX ; Save c 00FF031B A57E23 9105 A 402 mov R2, wIndex 00FF0320 A55E2003 A 403 anl R2, #3 ; Get ep A 404 00FF0324 8AF1 A 405 mov EPINDEX, R2 ; and se A 406 ;; Now we have the correct EP nu A 407 ;; and IN or an OUT 00FF0326 A57E23 9105 A 408 mov R2, wIndex 00FF032B A55E2080 A 409 anl R2, #80h 00FF032F A578 09 A 410 jne GS_IN_Endpoint A 411 00FF0332 A 412 GS_OUT_Endpoint: 00FF0332 A5A937E1 0B A 413 jnb RXSTL, GSEndpointDone 00FF0337 7801 A 414 mov R0, #1 ; Set th 00FF0339 80 07 A 415 jmp GSEndpointDone A 416 00FF033B A 417 GS_IN_Endpoint: 00FF033B A5A936E1 02 A 418 jnb TXSTL, GSEndpointDone 00FF0340 7801 A 419 mov R0, #1 ; Set th PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 19 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm A 420 00FF0342 A 421 GSEndpointDone: 00FF0342 D0F1 A 422 pop EPINDEX 00FF0344 80 04 A 423 jmp GSFinish A 424 00FF0346 A 425 GSDevice: 00FF0346 7801 A 426 mov R0,#1 00FF0348 80 00 A 427 jmp GSFinish A 428 00FF034A A 429 GSInterface: A 430 ;; Interface is always zero and A 431 ;; we do nothing A 432 00FF034A A 433 GSFinish: 00FF034A 7A01 A 434 mov R2, #01h 00FF034C A57A23 9000 A 435 mov SetupSeq , R2 A 436 00FF0351 12 08FF A 437 lCall SetStatusData 00FF0354 12 0917 A 438 lCall DoControlOutput A 439 00FF0357 02 055F A 440 ljmp EXIT_SETUP A 441 00FF035A A 442 CheckGetInterface: 00FF035A A5BEB00A A 443 cmp R11, #GET_INTERFACE 00FF035E A578 25 A 444 jne CheckSynchFrame A 445 ;; Setup the pointers in in 00FF0361 7A00 A 446 mov R2, #00h 00FF0363 A57A23 A004 A 447 mov in_rd_pntr, R2 ;Se A 448 00FF0368 7A01 A 449 mov R2, #01h 00FF036A A57A23 A005 A 450 mov in_bytes_left, R2 ;po A 451 00FF036F A57E23 A009 A 452 mov R2, MyInterfaceVal 00FF0374 A57A23 B000 A 453 mov IN_BUFFERS, R2 A 454 00FF0379 7A01 A 455 mov R2, #01h 00FF037B A57A23 9000 A 456 mov SetupSeq , R2 A 457 00FF0380 12 0917 A 458 lcall DoControlOutput A 459 00FF0383 02 055F A 460 ljmp EXIT_SETUP A 461 00FF0386 A 462 CheckSynchFrame: 00FF0386 A5BEB00C A 463 cmp R11, #SYCH_FRAME 00FF038A A578 03 A 464 jne GetCommandExit 00FF038D 02 055F A 465 ljmp GET_CONFIG_Request ; A 466 00FF0390 A 467 GetCommandExit: 00FF0390 02 055F A 468 ljmp EXIT_SETUP A 469 A 470 A 471 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 20 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm A 472 ;======================================= A 473 ; Routines to process a set descriptor/c A 474 ;======================================= A 475 00FF0393 A 476 DO_SET_COMMAND: 00FF0393 A57EF4 9102 A 477 mov WR30, #LOW16(bRequest) 00FF0398 A57E7BB0 A 478 mov R11, @DR28 A 479 00FF039C A5BEB007 A 480 cmp R11, #SET_DESCRIPTOR ; W 00FF03A0 A578 02 A 481 jne ?CheckSetConfig 00FF03A3 80 30 A 482 jmp DO_SET_DESCRIPTOR A 483 00FF03A5 A 484 ?CheckSetConfig: 00FF03A5 A5BEB009 A 485 cmp R11, #SET_CONFIGURATION 00FF03A9 A578 02 A 486 jne ?CheckSetInterface 00FF03AC 80 29 A 487 jmp DO_SET_CONFIGURATION A 488 00FF03AE A 489 ?CheckSetInterface: 00FF03AE A5BEB00B A 490 cmp R11, #SET_INTERFACE 00FF03B2 A578 02 A 491 jne ?CheckClearFeature 00FF03B5 80 2C A 492 jmp DO_SET_INTERFACE A 493 00FF03B7 A 494 ?CheckClearFeature: 00FF03B7 A5BEB001 A 495 cmp R11, #CLEAR_FEATURE 00FF03BB A578 02 A 496 jne ?CheckSetAddress 00FF03BE 80 2F A 497 jmp DO_CLEAR_FEATURE A 498 00FF03C0 A 499 ?CheckSetAddress: 00FF03C0 A5BEB005 A 500 cmp R11, #SET_ADDRESS ; Wa 00FF03C4 A578 03 A 501 jne ?CheckSetFeature 00FF03C7 02 044B A 502 jmp DO_SET_ADDRESS A 503 00FF03CA A 504 ?CheckSetFeature: 00FF03CA A5BEB003 A 505 cmp R11, #SET_FEATURE ; Wa 00FF03CE A578 02 A 506 jne ?CheckExit 00FF03D1 80 1C A 507 jmp DO_SET_FEATURE A 508 00FF03D3 A 509 ?CheckExit: 00FF03D3 81 6C A 510 ajmp DO_SET_COMMAND_EXIT A 511 00FF03D5 A 512 DO_SET_DESCRIPTOR: A 513 ; 00FF03D5 81 6C A 514 ajmp DO_SET_COMMAND_EXIT A 515 00FF03D7 A 516 DO_SET_CONFIGURATION: A 517 ; 00FF03D7 A57E23 9103 A 518 mov R2, wValue 00FF03DC A57A23 A008 A 519 mov MyConfigVal, R2 00FF03E1 81 6C A 520 ajmp DO_SET_COMMAND_EXIT A 521 00FF03E3 A 522 DO_SET_INTERFACE: A 523 ; PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 21 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm 00FF03E3 A57E23 9103 A 524 mov R2, wValue 00FF03E8 A57A23 A009 A 525 mov MyInterfaceVal, R2 00FF03ED 81 6C A 526 ajmp DO_SET_COMMAND_EXIT A 527 00FF03EF A 528 DO_CLEAR_FEATURE: 00FF03EF A 529 DO_SET_FEATURE: 00FF03EF A57E23 9101 A 530 mov R2, bmRequestType 00FF03F4 A5BE2002 A 531 cmp R2, #2; Check to see if 00FF03F8 A578 71 A 532 jne DO_SET_COMMAND_EXIT; If A 533 00FF03FB A57E17 9103 A 534 mov WR2, wValue 00FF0400 A5BE14 0000 A 535 cmp WR2, #0 00FF0405 A578 64 A 536 jne DO_SET_COMMAND_EXIT; Not A 537 00FF0408 C0F1 A 538 push EPINDEX 00FF040A A57E23 9105 A 539 mov R2, wIndex ; Get th 00FF040F A55E2003 A 540 anl R2, #3 ; Get ep A 541 00FF0413 8AF1 A 542 mov EPINDEX, R2 ; and se A 543 ;; Now we have the correct EP nu A 544 ;; and IN or an OUT 00FF0415 A57E23 9105 A 545 mov R2, wIndex 00FF041A A55E2080 A 546 anl R2, #80h 00FF041E A578 13 A 547 jne SF_IN_Endpoint A 548 00FF0421 A 549 SF_OUT_Endpoint: 00FF0421 A5BEB003 A 550 cmp R11,#SET_FEATURE 00FF0425 A578 06 A 551 jne SF_OUT_CLR 00FF0428 A5A9D7E1 A 552 setb RXSTL ; Set th 00FF042C 80 19 A 553 jmp SFEndpointDone 00FF042E A 554 SF_OUT_CLR: 00FF042E A5A9C7E1 A 555 clr RXSTL ; Clear 00FF0432 80 13 A 556 jmp SFEndpointDone A 557 00FF0434 A 558 SF_IN_Endpoint: 00FF0434 A5BEB003 A 559 cmp R11,#SET_FEATURE 00FF0438 A578 06 A 560 jne SF_IN_CLR 00FF043B A5A9D6E1 A 561 setb TXSTL ; Set th 00FF043F 80 06 A 562 jmp SFEndpointDone A 563 00FF0441 A 564 SF_IN_CLR: 00FF0441 A5A9C6E1 A 565 clr TXSTL ; Clear 00FF0445 80 00 A 566 jmp SFEndpointDone A 567 00FF0447 A 568 SFEndpointDone: 00FF0447 D0F1 A 569 pop EPINDEX 00FF0449 80 21 A 570 jmp DO_SET_COMMAND_EXIT A 571 00FF044B A 572 DO_SET_ADDRESS: 00FF044B A57EF4 9103 A 573 mov WR30, #LOW16(wValue) ; Get 00FF0450 A50B7A40 A 574 mov WR8, @DR28 ; It do 00FF0454 A57EF4 9006 A 575 mov WR30, #LOW16(new_addr) ;statu PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 22 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm 00FF0459 A57A7B80 A 576 mov @DR28, R8 00FF045D A57EF4 9000 A 577 mov WR30, #LOW16(SetupSeq) 00FF0462 A57EA003 A 578 mov R10, #3 ; This 00FF0466 A57A7BA0 A 579 mov @DR28, R10 ;Set s 00FF046A 81 6C A 580 ajmp DO_SET_COMMAND_EXIT A 581 00FF046C A 582 DO_SET_COMMAND_EXIT: A 583 00FF046C 75F600 A 584 mov TXCNT0, #0 ; Prime F 00FF046F A5A9D1E1 A 585 setb EPCON0.1 ; Set the 00FF0473 A1 5F A 586 ajmp EXIT_SETUP A 587 A 588 A 589 ; ********************** GET DES 00FF0475 A 590 GET_DESCR_Request: A 591 00FF0475 A57EF4 9103 A 592 mov WR30, #LOW16(wValue) 00FF047A A50B7A50 A 593 mov WR10, @DR28 00FF047E A5BEB001 A 594 cmp R11, #DEVICE_DESCR ;Low By 00FF0482 A578 20 A 595 jne ?c1 A 596 A 597 A 598 ; ********************** GET DESC A 599 00FF0485 A57EF4 9000 A 600 mov WR30, #LOW16(SetupSeq) ;Adv 00FF048A A57EA001 A 601 mov R10, #1 ;Set 00FF048E A57A7BA0 A 602 mov @DR28, R10 ; A 603 00FF0492 A57EE4 00FF A 604 mov WR28, #0ffh; 00FF0497 A57EF4 09DB A 605 mov WR30, #LOW16(DEVICE_DESCRIPTO 00FF049C 12 0834 A 606 LCALL BufferControlData 00FF049F 12 0917 A 607 LCALL DoControlOutput 00FF04A2 02 055F A 608 ljmp EXIT_SETUP A 609 A 610 00FF04A5 A5BEB002 A 611 ?c1: cmp R11, #CONFIG_DESCR 00FF04A9 A578 20 A 612 jne ?c2 A 613 ; ********************** GET DESC A 614 00FF04AC A57EF4 9000 A 615 mov WR30, #LOW16(SetupSeq) ;Up 00FF04B1 A57EA001 A 616 mov R10, #1 00FF04B5 A57A7BA0 A 617 mov @DR28, R10 A 618 00FF04B9 A57EE4 00FF A 619 mov WR28, #0ffh; 00FF04BE A57EF4 09EE A 620 mov WR30, #LOW16(CONFIGURATION_DE 00FF04C3 12 0834 A 621 LCALL BufferControlData 00FF04C6 12 0917 A 622 LCALL DoControlOutput A 623 00FF04C9 02 055F A 624 ljmp EXIT_SETUP A 625 00FF04CC A5BEB003 A 626 ?c2: cmp R11, #STRING_DESCR 00FF04D0 A568 03 A 627 je ?c23 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 23 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm 00FF04D3 02 055F A 628 ljmp EXIT_SETUP A 629 ; ********************** GET DESC 00FF04D6 A 630 ?c23: 00FF04D6 A57EF4 9000 A 631 mov WR30, #LOW16(SetupSeq) ;Up 00FF04DB A57E9001 A 632 mov R9, #1 00FF04DF A57A7B90 A 633 mov @DR28, R9 A 634 00FF04E3 A57EE4 00FF A 635 mov WR28, #0ffh ;String A 636 A 637 ; First check to A 638 ; so, then we tr A 639 ; buffer and not A 640 ; return the lan 00FF04E8 A5BEA000 A 641 cmp R10, #0 00FF04EC A578 0E A 642 jne ?cs1 00FF04EF A57EF4 0A2B A 643 mov WR30, #LOW16(STRING0) 00FF04F4 12 0834 A 644 lcall BufferControlData 00FF04F7 12 0917 A 645 lcall DoControlOutput 00FF04FA 02 055F A 646 ljmp EXIT_SETUP A 647 00FF04FD A5BEA001 A 648 ?cs1: cmp R10, #1 00FF0501 A578 07 A 649 jne ?cs2 00FF0504 A57EF4 0A30 A 650 mov WR30, #LOW16(STRING1) 00FF0509 80 4B A 651 jmp ?csms A 652 00FF050B A5BEA002 A 653 ?cs2: cmp R10, #2 00FF050F A578 07 A 654 jne ?cs3 00FF0512 A57EF4 0A57 A 655 mov WR30, #LOW16(STRING2) 00FF0517 80 3D A 656 jmp ?csms A 657 00FF0519 A5BEA003 A 658 ?cs3: cmp R10, #3 00FF051D A578 07 A 659 jne ?cs4 00FF0520 A57EF4 0A76 A 660 mov WR30, #LOW16(STRING3) 00FF0525 80 2F A 661 jmp ?csms A 662 00FF0527 A5BEA004 A 663 ?cs4: cmp R10, #4 00FF052B A578 07 A 664 jne ?cs5 00FF052E A57EF4 0A80 A 665 mov WR30, #LOW16(STRING4) 00FF0533 80 21 A 666 jmp ?csms A 667 00FF0535 A5BEA005 A 668 ?cs5: cmp R10, #5 00FF0539 A578 07 A 669 jne ?cs6 00FF053C A57EF4 0AA8 A 670 mov WR30, #LOW16(STRING5) 00FF0541 80 13 A 671 jmp ?csms A 672 00FF0543 A5BEA006 A 673 ?cs6: cmp R10, #6 00FF0547 A578 07 A 674 jne ?cs0 00FF054A A57EF4 0AD6 A 675 mov WR30, #LOW16(STRING6) 00FF054F 80 05 A 676 jmp ?csms A 677 00FF0551 A57EF4 0AD7 A 678 ?cs0: mov WR30, #LOW16(STRING_END) A 679 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 24 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm 00FF0556 12 087E A 680 ?csms: LCALL BufferStringData 00FF0559 12 0917 A 681 LCALL DoControlOutput A 682 A 683 00FF055C 02 055F A 684 ?c3: ljmp EXIT_SETUP A 685 00FF055F A 686 GET_CONFIG_Request: A 687 A 688 A 689 00FF055F A 690 EXIT_SETUP: 00FF055F 22 A 691 ret A 692 A 693 SCOPE A 694 A 695 A 696 ;***************** OUT_TOKEN ********** A 697 ;***** Gets and saves OUT DATA ********* A 698 ;*************************************** A 699 A 700 ;Program that takes data from the FIFO, A 701 ;and then updates writes it to the fifo. A 702 A 703 A 704 00FF0560 A 705 OUT_TOKEN: ; Get the 00FF0560 53C0FD A 706 anl SBI, #EP0_RX_CLR ; Cle 00FF0563 A57EC4 0000 A 707 MOV WR24, #0 ; USE DR2 00FF0568 A57ED4 C000 A 708 mov WR26, #LOW16(OUT_BUFFERS) 00FF056D A57E81E6 A 709 mov R8, RXCNT0 ; Read co 00FF0571 A57A6B80 A 710 mov @DR24, R8 ; Store t 00FF0575 A52ED4 0001 A 711 add WR26, #1 ; Increme 00FF057A A54C88 A 712 orl R8, R8 ; Set fla 00FF057D A568 12 A 713 je ?k2 A 714 00FF0580 AFE3 A 715 ?k1: mov R7, RXDAT0 ; Read lo 00FF0582 A57A6B70 A 716 mov @DR24, R7 00FF0586 A52ED4 0001 A 717 ADD WR26, #1 00FF058B A59E8001 A 718 sub R8, #1 00FF058F A578 EE A 719 jne ?k1 A 720 00FF0592 A5A9D4E4 A 721 ?k2: setb RXCON0.4 ; Clear t A 722 ; We now A 723 ; Transmi 00FF0596 22 A 724 ret A 725 A 726 COMMENT *------------------------------- A 727 Function name : ServiceEP1RX A 728 Brief Description : Copies data recd. on A 729 : a buffer. A 730 Regs preserved : No reg. is saved A 731 ---------------------------------------- PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 25 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm A 732 SCOPE 00FF0597 A 733 ServiceEP1RX: 00FF0597 A5A920E2 02 A 734 jb RXACK, ?GoodReceive A 735 00FF059C 80 58 A 736 jmp ?Return A 737 00FF059E A 738 ?GoodReceive: 00FF059E 7E00 A 739 mov R6, #00h 00FF05A0 AFE6 A 740 mov R7, RXCNT1 00FF05A2 A5BE7000 A 741 cmp R7, #00h 00FF05A6 A568 49 A 742 je ?NullPacketRecd 00FF05A9 A57E57 D800 A 743 mov WR10, _EP1RxPtr 00FF05AE A57EF4 D000 A 744 mov WR30, #EP_1_Buffer 00FF05B3 A52DF5 A 745 add WR30, WR10 A 746 00FF05B6 A52D53 A 747 add WR10, WR6 00FF05B9 A55E54 F7FF A 748 anl WR10, #RINGBUFFMASK 00FF05BE A57A57 D800 A 749 mov _EP1RxPtr, WR10 A 750 00FF05C3 A57E57 D804 A 751 mov WR10, _EP1DataCount 00FF05C8 A52D53 A 752 add WR10, WR6 00FF05CB A57A57 D804 A 753 mov _EP1DataCount, WR10 A 754 00FF05D0 A 755 ?CopyDataToBuffer: 00FF05D0 A57EC1E3 A 756 mov R12, RXDAT1 00FF05D4 A57AF9C0 A 757 mov @WR30, R12 00FF05D8 A50BF4 A 758 inc WR30, #01h 00FF05DB A55EF4 F7FF A 759 anl WR30, #RINGBUFFMASK 00FF05E0 DF EE A 760 djnz R7, ?CopyDataToBuffer A 761 00FF05E2 A 762 ?ReadyForAnotherRX: 00FF05E2 A52E54 0040 A 763 add WR10, #EP1MAXPACKET 00FF05E7 A5BE54 07FF A 764 cmp WR10, #RINGBUFFSIZE 00FF05EC 40 04 A 765 jl ?NullPacketRecd A 766 00FF05EE A5A9C3E1 A 767 clr RXIE A 768 00FF05F2 A 769 ?NullPacketRecd: 00FF05F2 A5A9D4E4 A 770 setb RXFFRC A 771 00FF05F6 A 772 ?Return: 00FF05F6 22 A 773 Ret A 774 A 775 COMMENT *------------------------------- A 776 Function name : ServiceEP1TX A 777 Brief Description : Deals with a transmi A 778 : checks to be sure a A 779 : checks for data avai A 780 : of data is greater t A 781 : MaxPacket bytes are A 782 : available data is se A 783 : count and TxPtr are PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 26 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm A 784 : It can be called as A 785 : interrupt. If its a A 786 : ServiceEP1TX. If its A 787 : enters at PrimeEP1Fi A 788 Regs preserved : No reg. is saved A 789 ---------------------------------------- A 790 SCOPE 00FF05F7 A 791 ServiceEP1TX: A 792 ; anl SBI, #EP1_TX_CLR A 793 00FF05F7 A 794 PrimeEP1Fifo: 00FF05F7 A5A937F5 07 A 795 jnb TXFIF1, ?FifoAvailable 00FF05FC A5A936F5 02 A 796 jnb TXFIF0, ?FifoAvailable A 797 00FF0601 80 72 A 798 jmp ?Return A 799 00FF0603 A 800 ?FifoAvailable: 00FF0603 A57E37 D804 A 801 mov WR6, _EP1DataCount 00FF0608 A5BE34 0000 A 802 cmp WR6, #00h 00FF060D A578 02 A 803 jne ?Continue A 804 00FF0610 80 63 A 805 jmp ?Return A 806 00FF0612 A 807 ?Continue: 00FF0612 A5BE34 0040 A 808 cmp WR6, #EP1MAXPACKET 00FF0617 40 05 A 809 jl ?LessThanMPS A 810 00FF0619 A 811 ?MoreThanMPS: 00FF0619 A57E34 0040 A 812 mov WR6, #EP1MAXPACKET A 813 00FF061E A 814 ?LessThanMPS: 00FF061E A57E57 D802 A 815 mov WR10, _EP1TxPtr A 816 00FF0623 A57EF4 D000 A 817 mov WR30, #EP_1_Buffer 00FF0628 A52DF5 A 818 add WR30, WR10 A 819 00FF062B A52D53 A 820 add WR10, WR6 00FF062E A55E54 07FF A 821 anl WR10, #RINGWORDMASK 00FF0633 A57A57 D802 A 822 mov _EP1TxPtr, WR10 A 823 00FF0638 A57E57 D804 A 824 mov WR10, _EP1DataCount 00FF063D A59D53 A 825 sub WR10, WR6 00FF0640 A57A57 D804 A 826 mov _EP1DataCount, WR10 A 827 00FF0645 A5CA78 A 828 push R7 00FF0648 A 829 ?ArmTXFifo: 00FF0648 A57EF9C0 A 830 mov R12, @WR30 00FF064C A57AC1F3 A 831 mov TXDAT1, R12 00FF0650 A50BF4 A 832 inc WR30, #01h 00FF0653 A55EF4 F7FF A 833 anl WR30, #RINGBUFFMASK 00FF0658 DF EE A 834 djnz R7, ?ArmTXFifo 00FF065A A5DA78 A 835 pop R7 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 27 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm A 836 00FF065D 8FF6 A 837 mov TXCNT1, R7 A 838 00FF065F A 839 ?ReadyForRX: 00FF065F A5A923E1 11 A 840 jb RXIE , ?Return A 841 00FF0664 A 842 ?RXWasDisabled: 00FF0664 A52E54 0040 A 843 add WR10, #EP1MAXPACKET 00FF0669 A5BE54 07FF A 844 cmp WR10, #RINGBUFFSIZE 00FF066E A538 04 A 845 jg ?Return A 846 00FF0671 A5A9D3E1 A 847 setb RXIE A 848 00FF0675 A 849 ?Return: 00FF0675 22 A 850 Ret A 851 A 852 COMMENT *------------------------------- A 853 Function name : ServiceEP2RX A 854 Brief Description : Copies data recd. on A 855 : a buffer. A 856 Regs preserved : No reg. is saved A 857 ---------------------------------------- A 858 SCOPE 00FF0676 A 859 ServiceEP2RX: 00FF0676 A5A920E2 02 A 860 jb RXACK, ?GoodReceive A 861 00FF067B 80 58 A 862 jmp ?Return A 863 00FF067D A 864 ?GoodReceive: 00FF067D 7E00 A 865 mov R6, #00h 00FF067F AFE6 A 866 mov R7, RXCNT2 00FF0681 A5BE7000 A 867 cmp R7, #00h 00FF0685 A568 49 A 868 je ?NullPacketRecd 00FF0688 A57E57 E800 A 869 mov WR10, _EP2RxPtr 00FF068D A57EF4 E000 A 870 mov WR30, #EP_2_Buffer 00FF0692 A52DF5 A 871 add WR30, WR10 A 872 00FF0695 A52D53 A 873 add WR10, WR6 00FF0698 A55E54 F7FF A 874 anl WR10, #RINGBUFFMASK 00FF069D A57A57 E800 A 875 mov _EP2RxPtr, WR10 A 876 00FF06A2 A57E57 E804 A 877 mov WR10, _EP2DataCount 00FF06A7 A52D53 A 878 add WR10, WR6 00FF06AA A57A57 E804 A 879 mov _EP2DataCount, WR10 A 880 00FF06AF A 881 ?CopyDataToBuffer: 00FF06AF A57EC1E3 A 882 mov R12, RXDAT2 00FF06B3 A57AF9C0 A 883 mov @WR30, R12 00FF06B7 A50BF4 A 884 inc WR30, #01h 00FF06BA A55EF4 F7FF A 885 anl WR30, #RINGBUFFMASK 00FF06BF DF EE A 886 djnz R7, ?CopyDataToBuffer A 887 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 28 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm 00FF06C1 A 888 ?ReadyForAnotherRX: 00FF06C1 A52E54 0008 A 889 add WR10, #EP2MAXPACKET 00FF06C6 A5BE54 07FF A 890 cmp WR10, #RINGBUFFSIZE 00FF06CB 40 04 A 891 jl ?NullPacketRecd A 892 00FF06CD A5A9C3E1 A 893 clr RXIE A 894 00FF06D1 A 895 ?NullPacketRecd: 00FF06D1 A5A9D4E4 A 896 setb RXFFRC A 897 00FF06D5 A 898 ?Return: 00FF06D5 22 A 899 Ret A 900 A 901 COMMENT *------------------------------- A 902 Function name : ServiceEP2TX A 903 Brief Description : Deals with a transmi A 904 : checks to be sure a A 905 : checks for data avai A 906 : of data is greater t A 907 : MaxPacket bytes are A 908 : available data is se A 909 : count and TxPtr are A 910 : It can be called as A 911 : interrupt. If its a A 912 : ServiceEP2TX. If its A 913 : enters at PrimeEP2Fi A 914 Regs preserved : No reg. is saved A 915 ---------------------------------------- A 916 SCOPE 00FF06D6 A 917 ServiceEP2TX: A 918 ; anl SBI, #EP2_TX_CLR A 919 00FF06D6 A 920 PrimeEP2Fifo: 00FF06D6 A5A937F5 07 A 921 jnb TXFIF1 , ?FifoAvailable 00FF06DB A5A936F5 02 A 922 jnb TXFIF0 , ?FifoAvailable A 923 00FF06E0 80 72 A 924 jmp ?Return A 925 00FF06E2 A 926 ?FifoAvailable: 00FF06E2 A57E37 E804 A 927 mov WR6, _EP2DataCount 00FF06E7 A5BE34 0000 A 928 cmp WR6, #00h 00FF06EC A578 02 A 929 jne ?Continue A 930 00FF06EF 80 63 A 931 jmp ?Return A 932 00FF06F1 A 933 ?Continue: 00FF06F1 A5BE34 0008 A 934 cmp WR6, #EP2MAXPACKET 00FF06F6 40 05 A 935 jl ?LessThanMPS A 936 00FF06F8 A 937 ?MoreThanMPS: 00FF06F8 A57E34 0008 A 938 mov WR6, #EP2MAXPACKET A 939 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 29 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm 00FF06FD A 940 ?LessThanMPS: 00FF06FD A57E57 E802 A 941 mov WR10, _EP2TxPtr A 942 00FF0702 A57EF4 E000 A 943 mov WR30, #EP_2_Buffer 00FF0707 A52DF5 A 944 add WR30, WR10 A 945 00FF070A A52D53 A 946 add WR10, WR6 00FF070D A55E54 07FF A 947 anl WR10, #RINGWORDMASK 00FF0712 A57A57 E802 A 948 mov _EP2TxPtr, WR10 A 949 00FF0717 A57E57 E804 A 950 mov WR10, _EP2DataCount 00FF071C A59D53 A 951 sub WR10, WR6 00FF071F A57A57 E804 A 952 mov _EP2DataCount, WR10 A 953 00FF0724 A5CA78 A 954 push R7 00FF0727 A 955 ?ArmTXFifo: 00FF0727 A57EF9C0 A 956 mov R12, @WR30 00FF072B A57AC1F3 A 957 mov TXDAT2, R12 00FF072F A50BF4 A 958 inc WR30, #01h 00FF0732 A55EF4 F7FF A 959 anl WR30, #RINGBUFFMASK 00FF0737 DF EE A 960 djnz R7, ?ArmTXFifo 00FF0739 A5DA78 A 961 pop R7 A 962 00FF073C 8FF6 A 963 mov TXCNT2, R7 A 964 00FF073E A 965 ?ReadyForRX: 00FF073E A5A923E1 11 A 966 jb RXIE, ?Return A 967 00FF0743 A 968 ?RXWasDisabled: 00FF0743 A52E54 0008 A 969 add WR10, #EP2MAXPACKET 00FF0748 A5BE54 07FF A 970 cmp WR10, #RINGBUFFSIZE 00FF074D A538 04 A 971 jg ?Return A 972 00FF0750 A5A9D3E1 A 973 setb RXIE A 974 00FF0754 A 975 ?Return: 00FF0754 22 A 976 Ret A 977 A 978 COMMENT *------------------------------- A 979 Function name : ServiceEP3RX A 980 Brief Description : Copies data recd. on A 981 : a buffer. A 982 Regs preserved : No reg. is saved A 983 ---------------------------------------- A 984 SCOPE 00FF0755 A 985 ServiceEP3RX: 00FF0755 A5A920E2 02 A 986 jb RXACK, ?GoodReceive A 987 00FF075A 80 58 A 988 jmp ?Return A 989 00FF075C A 990 ?GoodReceive: 00FF075C 7E00 A 991 mov R6, #00h PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 30 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm 00FF075E AFE6 A 992 mov R7, RXCNT3 00FF0760 A5BE7000 A 993 cmp R7, #00h 00FF0764 A568 49 A 994 je ?NullPacketRecd 00FF0767 A57E57 F800 A 995 mov WR10, _EP3RxPtr 00FF076C A57EF4 F000 A 996 mov WR30, #EP_3_Buffer 00FF0771 A52DF5 A 997 add WR30, WR10 A 998 00FF0774 A52D53 A 999 add WR10, WR6 00FF0777 A55E54 F7FF A 1000 anl WR10, #RINGBUFFMASK 00FF077C A57A57 F800 A 1001 mov _EP3RxPtr, WR10 A 1002 00FF0781 A57E57 F804 A 1003 mov WR10, _EP3DataCount 00FF0786 A52D53 A 1004 add WR10, WR6 00FF0789 A57A57 F804 A 1005 mov _EP3DataCount, WR10 A 1006 00FF078E A 1007 ?CopyDataToBuffer: 00FF078E A57EC1E3 A 1008 mov R12, RXDAT3 00FF0792 A57AF9C0 A 1009 mov @WR30, R12 00FF0796 A50BF4 A 1010 inc WR30, #01h 00FF0799 A55EF4 F7FF A 1011 anl WR30, #RINGBUFFMASK 00FF079E DF EE A 1012 djnz R7, ?CopyDataToBuffer A 1013 00FF07A0 A 1014 ?ReadyForAnotherRX: 00FF07A0 A52E54 0008 A 1015 add WR10, #EP3MAXPACKET 00FF07A5 A5BE54 07FF A 1016 cmp WR10, #RINGBUFFSIZE 00FF07AA 40 04 A 1017 jl ?NullPacketRecd A 1018 00FF07AC A5A9C3E1 A 1019 clr RXIE A 1020 00FF07B0 A 1021 ?NullPacketRecd: 00FF07B0 A5A9D4E4 A 1022 setb RXFFRC A 1023 00FF07B4 A 1024 ?Return: 00FF07B4 22 A 1025 Ret A 1026 A 1027 COMMENT *------------------------------- A 1028 Function name : ServiceEP3TX A 1029 Brief Description : Deals with a transmi A 1030 : checks to be sure a A 1031 : checks for data avai A 1032 : of data is greater t A 1033 : MaxPacket bytes are A 1034 : available data is se A 1035 : count and TxPtr are A 1036 : It can be called as A 1037 : interrupt. If its a A 1038 : ServiceEP3TX. If its A 1039 : enters at PrimeEP3Fi A 1040 Regs preserved : No reg. is saved A 1041 ---------------------------------------- A 1042 SCOPE 00FF07B5 A 1043 ServiceEP3TX: PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 31 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm 00FF07B5 A 1044 PrimeEP3Fifo: 00FF07B5 A5A937F5 07 A 1045 jnb TXFIF1, ?FifoAvailable 00FF07BA A5A936F5 02 A 1046 jnb TXFIF0, ?FifoAvailable A 1047 00FF07BF 80 72 A 1048 jmp ?Return A 1049 00FF07C1 A 1050 ?FifoAvailable: 00FF07C1 A57E37 F804 A 1051 mov WR6, _EP3DataCount 00FF07C6 A5BE34 0000 A 1052 cmp WR6, #00h 00FF07CB A578 02 A 1053 jne ?Continue A 1054 00FF07CE 80 63 A 1055 jmp ?Return A 1056 00FF07D0 A 1057 ?Continue: 00FF07D0 A5BE34 0008 A 1058 cmp WR6, #EP3MAXPACKET 00FF07D5 40 05 A 1059 jl ?LessThanMPS A 1060 00FF07D7 A 1061 ?MoreThanMPS: 00FF07D7 A57E34 0008 A 1062 mov WR6, #EP3MAXPACKET A 1063 00FF07DC A 1064 ?LessThanMPS: 00FF07DC A57E57 F802 A 1065 mov WR10, _EP3TxPtr A 1066 00FF07E1 A57EF4 F000 A 1067 mov WR30, #EP_3_Buffer 00FF07E6 A52DF5 A 1068 add WR30, WR10 A 1069 00FF07E9 A52D53 A 1070 add WR10, WR6 00FF07EC A55E54 07FF A 1071 anl WR10, #RINGWORDMASK 00FF07F1 A57A57 F802 A 1072 mov _EP3TxPtr, WR10 A 1073 00FF07F6 A57E57 F804 A 1074 mov WR10, _EP3DataCount 00FF07FB A59D53 A 1075 sub WR10, WR6 00FF07FE A57A57 F804 A 1076 mov _EP3DataCount, WR10 A 1077 00FF0803 A5CA78 A 1078 push R7 00FF0806 A 1079 ?ArmTXFifo: 00FF0806 A57EF9C0 A 1080 mov R12, @WR30 00FF080A A57AC1F3 A 1081 mov TXDAT3, R12 00FF080E A50BF4 A 1082 inc WR30, #01h 00FF0811 A55EF4 F7FF A 1083 anl WR30, #RINGBUFFMASK 00FF0816 DF EE A 1084 djnz R7, ?ArmTXFifo 00FF0818 A5DA78 A 1085 pop R7 A 1086 00FF081B 8FF6 A 1087 mov TXCNT3, R7 A 1088 00FF081D A 1089 ?ReadyForRX: 00FF081D A5A923E1 11 A 1090 jb RXIE , ?Return A 1091 00FF0822 A 1092 ?RXWasDisabled: 00FF0822 A52E54 0008 A 1093 add WR10, #EP3MAXPACKET 00FF0827 A5BE54 07FF A 1094 cmp WR10, #RINGBUFFSIZE 00FF082C A538 04 A 1095 jg ?Return PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 32 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm A 1096 00FF082F A5A9D3E1 A 1097 setb RXIE A 1098 00FF0833 A 1099 ?Return: 00FF0833 22 A 1100 Ret A 1101 A 1102 SCOPE A 1103 ;####################################### A 1104 ;################### BufferControlData # A 1105 ;## Transfers the data pointed to by DR2 A 1106 ;####################################### A 1107 A 1108 SCOPE 00FF0834 A 1109 BufferControlData: A 1110 ;DR28 has address of data 00FF0834 7E00 A 1111 mov R6, #00h 00FF0836 A57E7B70 A 1112 mov R7, @DR28 00FF083A A52EF4 0001 A 1113 add WR30, #01h 00FF083F A57E9000 A 1114 mov R9, #00h A 1115 00FF0843 A57A93 A004 A 1116 mov in_rd_pntr, R9 A 1117 A 1118 00FF0848 A57E57 9107 A 1119 mov WR10, wLength A 1120 SWAP_BYTES R10,R11,R12 00FF0856 A5BD35 A 1121 cmp WR6, WR10 00FF0859 A528 03 A 1122 jle ?Continue A 1123 00FF085C A57D35 A 1124 mov WR6, WR10 A 1125 A 1126 A 1127 A 1128 00FF085F A 1129 ?Continue: 00FF085F A57A73 A005 A 1130 mov in_bytes_left, R7 A 1131 00FF0864 A57ED4 B000 A 1132 mov WR26, #LOW16(IN_BUFFERS) A 1133 00FF0869 A 1134 ?MoveMemory: 00FF0869 A57E7B90 A 1135 mov R9, @DR28 00FF086D A57AD990 A 1136 mov @WR26, R9 00FF0871 A52ED4 0001 A 1137 add WR26, #01h 00FF0876 A52EF4 0001 A 1138 add WR30, #01h 00FF087B DF EC A 1139 djnz R7, ?MoveMemory A 1140 00FF087D 22 A 1141 Ret A 1142 A 1143 ;####################################### A 1144 ;################### BufferControlData # A 1145 ;## Transfers the string data pointed to A 1146 ;## The first byte in this data area is A 1147 ;## The following 'length' bytes are the PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 33 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm A 1148 ;## will load IN_BUFFERS with a string d A 1149 ;## converted to a UNICODE string. A 1150 ;####################################### A 1151 A 1152 SCOPE 00FF087E A 1153 BufferStringData: A 1154 ;DR28 has address of data 00FF087E 7E00 A 1155 mov R6, #00h 00FF0880 A57E7B70 A 1156 mov R7, @DR28 00FF0884 A5BE7000 A 1157 cmp R7, #0 00FF0888 A568 73 A 1158 je BSD_Ret A 1159 00FF088B A5CA78 A 1160 push R7 ; To sav 00FF088E A52EF4 0001 A 1161 add WR30, #01h A 1162 00FF0893 A57E9000 A 1163 mov R9, #00h 00FF0897 A57A93 A004 A 1164 mov in_rd_pntr, R9 A 1165 A 1166 A 1167 ;; Calculate that actual length A 1168 ;; DescLength = 2 * (Ascii A 1169 ;; The + 2 is for bLength and bD 00FF089C A52C77 A 1170 add R7,R7 00FF089F A52E7002 A 1171 add R7,#2 A 1172 00FF08A3 A57ED4 B000 A 1173 mov WR26, #LOW16(IN_BUFFERS) A 1174 A 1175 ;; The first vale to go in IN_BU A 1176 ;; string descriptor 00FF08A8 A57AD970 A 1177 mov @WR26, R7 00FF08AC A52ED4 0001 A 1178 add WR26,#1 A 1179 ;; The next value is the string 00FF08B1 A57E9003 A 1180 mov R9, #STRING_DESCR 00FF08B5 A57AD990 A 1181 mov @WR26, R9 00FF08B9 A52ED4 0001 A 1182 add WR26,#1 A 1183 00FF08BE A57E57 9107 A 1184 mov WR10, wLength A 1185 SWAP_BYTES R10,R11,R12 00FF08CC A5BD35 A 1186 cmp WR6, WR10 00FF08CF A528 03 A 1187 jle BSD_Continue A 1188 00FF08D2 A57D35 A 1189 mov WR6, WR10 A 1190 A 1191 A 1192 A 1193 00FF08D5 A 1194 BSD_Continue: 00FF08D5 A57A73 A005 A 1195 mov in_bytes_left, R7 A 1196 A 1197 ;; Now we can start moving the s A 1198 ;; unicode string as a sequence A 1199 ;; quantities), the low order by PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 34 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm A 1200 ;; the upper order byte is the a A 1201 ;; loop below, we first put a ze A 1202 ;; the character from the string A 1203 ;; 00FF08DA A5DA78 A 1204 pop R7 ; Restore the st 00FF08DD A57E8000 A 1205 mov R8,#0 ; will always cr A 1206 ; descriptor eve A 1207 ; be returned. 00FF08E1 A 1208 BSD_MoveMemory: 00FF08E1 A57AD980 A 1209 mov @WR26, R8 00FF08E5 A52ED4 0001 A 1210 add WR26, #01h 00FF08EA A57E7B90 A 1211 mov R9, @DR28 00FF08EE A57AD990 A 1212 mov @WR26, R9 00FF08F2 A52ED4 0001 A 1213 add WR26, #01h 00FF08F7 A52EF4 0001 A 1214 add WR30, #01h 00FF08FC DF E3 A 1215 djnz R7, BSD_MoveMemory 00FF08FE A 1216 BSD_Ret: 00FF08FE 22 A 1217 Ret A 1218 A 1219 ; -------------------------------------- A 1220 ; A 1221 ; A 1222 ; -------------------------------------- 00FF08FF A 1223 SetStatusData: 00FF08FF 7A00 A 1224 mov R2, #00h 00FF0901 A57A23 A004 A 1225 mov in_rd_pntr, R2 ;Se A 1226 00FF0906 7A02 A 1227 mov R2, #02h 00FF0908 A57A23 A005 A 1228 mov in_bytes_left, R2 ;po A 1229 00FF090D A57ED4 B000 A 1230 mov WR26, #LOW16(IN_BUFFERS) 00FF0912 A51BD800 A 1231 mov @WR26, WR0 A 1232 00FF0916 22 A 1233 Ret A 1234 A 1235 ;####################################### A 1236 ;################# DoControlOutput ##### A 1237 ;####################################### A 1238 A 1239 SCOPE 00FF0917 A 1240 DoControlOutput: 00FF0917 A5A9C1E1 A 1241 clr EPCON0.1 A 1242 00FF091B A57EA3 A005 A 1243 mov R10, in_bytes_left 00FF0920 A5BEA000 A 1244 cmp R10, #00h 00FF0924 A578 07 A 1245 jne CntlDataAvail 00FF0927 A57E8000 A 1246 mov R8, #00h 00FF092B 02 097D A 1247 ljmp ControlArmTx A 1248 00FF092E A 1249 CntlDataAvail: 00FF092E A57ED4 B000 A 1250 mov WR26, #LOW16(IN_BUFFERS) 00FF0933 A57EC000 A 1251 mov R12, #00h PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 35 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm 00FF0937 A57ED3 A004 A 1252 mov R13, in_rd_pntr A 1253 00FF093C A52DD6 A 1254 add WR26, WR12 00FF093F A57E8000 A 1255 mov R8, #00h 00FF0943 A5CAA8 A 1256 push R10 A 1257 00FF0946 A 1258 ?WriteToFifo: 00FF0946 A57ED9B0 A 1259 mov R11, @WR26 00FF094A A57AB1F3 A 1260 mov TXDAT0, R11 00FF094E A52ED4 0001 A 1261 add WR26, #01h 00FF0953 A52E8001 A 1262 add R8,#01h 00FF0957 A59EA001 A 1263 sub R10, #01h 00FF095B A568 07 A 1264 je ControlTxUpd A 1265 00FF095E A5BE8008 A 1266 cmp R8, #FIFO_SIZE 00FF0962 A578 E1 A 1267 jne ?WriteToFifo A 1268 00FF0965 A 1269 ControlTxUpd: 00FF0965 A5DAA8 A 1270 pop R10 00FF0968 A57EC3 A004 A 1271 mov R12, in_rd_pntr 00FF096D A52CC8 A 1272 add R12, R8 00FF0970 A57AC3 A004 A 1273 mov in_rd_pntr, R12 00FF0975 A59CA8 A 1274 sub R10, R8 00FF0978 A57AA3 A005 A 1275 mov in_bytes_left, R10 A 1276 00FF097D A 1277 ControlArmTx: 00FF097D A57A81F6 A 1278 mov TXCNT0, R8 00FF0981 A5A9D1E1 A 1279 setb EPCON0.1 A 1280 00FF0985 A 1281 ?Return: 00FF0985 22 A 1282 Ret A 1283 A 1284 SCOPE A 1285 ;*************************************** A 1286 ;***************** INIT_USB *********** A 1287 ;*************************************** A 1288 00FF0986 A 1289 INIT_USB: A 1290 ;(KLS) 00FF0986 75F100 A 1291 mov EPINDEX, #00h 00FF0989 75F484 A 1292 mov TXCON0,#84h ;/* Flush FIFO, 00FF098C 75E484 A 1293 mov RXCON0,#84h ;/* Flush FIFO, A 1294 ; Enable endpoint 0 as a contro A 1295 ; Transmit Endpoint enable, Rec A 1296 ; Receive Input enable. We do n A 1297 ; until we have determined what A 1298 ; back, i.e., NULL packet for s A 1299 ; command. 00FF098F 75E12D A 1300 mov EPCON0,#2Dh; A 1301 A 1302 ; The non-zero endpoints are be A 1303 ; NAK any tokens sent to them. PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 36 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm A 1304 ; by the spec they should not r A 1305 ; set a configuration for this A 1306 ; Endpoint enable and Transmit A 1307 ; but not the input and output A 1308 00FF0992 75F101 A 1309 mov EPINDEX, #01h 00FF0995 75F484 A 1310 mov TXCON1,#84h ;/* Flush FIFO, 00FF0998 75E484 A 1311 mov RXCON1,#84h ;/* Flush FIFO, 00FF099B 75E10F A 1312 mov EPCON1,#0Fh; ;/* Enable rece 00FF099E A5A9D4E1 A 1313 setb RXSPM ; Turn o A 1314 00FF09A2 75F102 A 1315 mov EPINDEX, #02h 00FF09A5 75F484 A 1316 mov TXCON2,#84h ;/* Flush FIFO, 00FF09A8 75E484 A 1317 mov RXCON2,#84h ;/* Flush FIFO, 00FF09AB 75E10F A 1318 mov EPCON2,#0Fh; ;/* Enable rece 00FF09AE A5A9D4E1 A 1319 setb RXSPM ; Turn o A 1320 00FF09B2 75F103 A 1321 mov EPINDEX, #03h 00FF09B5 75F484 A 1322 mov TXCON3,#84h ;/* Flush FIFO, 00FF09B8 75E484 A 1323 mov RXCON3,#84h ;/* Flush FIFO, 00FF09BB 75E10F A 1324 mov EPCON3,#0Fh; ;/* Enable rece 00FF09BE A5A9D4E1 A 1325 setb RXSPM ; Turn o 00FF09C2 22 A 1326 RET A 1327 A 1328 ; mov TXCON0,#84h ;/* Flush FIFO A 1329 ; mov TXCON1,#84h ;/* Flush FIFO A 1330 ; mov TXCON2,#84h ;/* Flush FIFO A 1331 ; mov TXCON3,#84h ;/* Flush FIFO A 1332 A 1333 ; mov RXCON0,#84h ;/* Flush FIFO A 1334 ; mov RXCON1,#84h ;/* Flush FIFO A 1335 ; mov RXCON2,#84h ;/* Flush FIFO A 1336 ; mov RXCON3,#84h ;/* Flush FIFO A 1337 A 1338 A 1339 ; Enable endpoint 0 as a contro A 1340 ; Transmit Endpoint enable, Rec A 1341 ; Receive Input enable. We do n A 1342 ; until we have determined what A 1343 ; back, i.e., NULL packet for s A 1344 ; command. A 1345 ; mov EPCON0,#2Dh; A 1346 A 1347 ; The non-zero endpoints are be A 1348 ; NAK any tokens sent to them. A 1349 ; by the spec they should not r A 1350 ; set a configuration for this A 1351 ; Endpoint enable and Transmit A 1352 ; but not the input and output A 1353 ; mov EPCON1,#1Fh; ;/* Enable rece A 1354 ; mov EPCON2,#1Fh; ;/* Enable rece A 1355 ; mov EPCON3,#1Fh; ;/* Enable rece PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 37 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm A 1356 ; RET A 1357 A 1358 SCOPE A 1359 ;*************************************** A 1360 ;***************** INIT_UART *********** A 1361 ;*************************************** A 1362 00FF09C3 A 1363 INIT_UART: 00FF09C3 759850 A 1364 mov SCON, #050h A 1365 ;Timer 2 is being used to genera 00FF09C6 75CAD9 A 1366 mov RCAP2L, #0D9h ; USB EVAL 9 00FF09C9 75CBFF A 1367 mov RCAP2H, #0FFh ; 00FF09CC 75C834 A 1368 mov T2CON, #034h ; Set TIMER 00FF09CF C299 A 1369 clr TI ; Clear Transmit A 1370 ;; mov IE0, #0 ; KIL 00FF09D1 12 0BB3 A 1371 LCALL Lng_Delay 00FF09D4 759900 A 1372 mov SBUF, #00 00FF09D7 12 0BB3 A 1373 LCALL Lng_Delay 00FF09DA 22 A 1374 ret A 1375 A 1376 A 1377 A 1378 ;*************************************** A 1379 ;************* DEVICE DESCRIPTOR ******* A 1380 ;*************************************** A 1381 A 1382 ; A 1383 ; NOTE!!!!! '251 is a Big Endian machine A 1384 ; LSB in the numerically higher address. A 1385 ; A 1386 00FF09DB A 1387 DEVICE_DESCRIPTOR: 00FF09DB 12 A 1388 gDLength: db 00FF09DC 12 A 1389 gDevice_bLength: db 00FF09DD 01 A 1390 gDevice_bDescriptorType: db 00FF09DE 0001 A 1391 gDevice_bcdUSB: dw 00FF09E0 DC A 1392 gDevice_bDeviceClass: db 00FF09E1 00 A 1393 gDevice_bDeviceSubClass: db 00FF09E2 00 A 1394 gDevice_bDeviceProtocol: db 00FF09E3 08 A 1395 gDevice_wMaxPacketSize0: db 00FF09E4 8680 A 1396 gDevice_widVendor: dw 00FF09E6 1099 A 1397 gDevice_widProduct: dw 00FF09E8 3001 A 1398 gDevice_bcdDevice: dw 00FF09EA 01 A 1399 gDevice_iManufacturer: db 00FF09EB 02 A 1400 gDevice_iProduct: db 00FF09EC 03 A 1401 gDevice_iSerialNumber: db 00FF09ED 01 A 1402 gDevice_bNumConfigurations: db A 1403 A 1404 ;/*--------------- Initialize global Con 00FF09EE A 1405 CONFIGURATION_DESCRIPTOR: 00FF09EE 3C A 1406 gCLength: d A 1407 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 38 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm A 1408 00FF09EF 09 A 1409 gConfig_bLength: d 00FF09F0 02 A 1410 gConfig_bDescriptorType: d 00FF09F1 3C A 1411 gConfig_bTotalLength: d 00FF09F2 00 A 1412 gConfig_bCorrection: d 00FF09F3 01 A 1413 gConfig_bNumInterfaces: d 00FF09F4 01 A 1414 gConfig_bConfigurationValue: d 00FF09F5 04 A 1415 gConfig_iConfiguration: d A 1416 ; gConfig_bmAttributes: d 00FF09F6 60 A 1417 gConfig_bmAttributes: d A 1418 00FF09F7 19 A 1419 gConfig_MaxPower: d A 1420 A 1421 ; /*------------- Initialize globa 00FF09F8 A 1422 gInterfaceDescriptorA: 00FF09F8 09 A 1423 gInterfaceA_bLength: 00FF09F9 04 A 1424 gInterfaceA_bDescriptorType: 00FF09FA 00 A 1425 gInterfaceA_bInterfaceNumber: 00FF09FB 00 A 1426 gInterfaceA_bAlternateSetting: 00FF09FC 06 A 1427 gInterfaceA_bNumEndpoints: 00FF09FD DC A 1428 gInterfaceA_bInterfaceClass: 00FF09FE 10 A 1429 gInterfaceA_bInterfaceSubClass: 00FF09FF 11 A 1430 gInterfaceA_bInterfaceProtocol: 00FF0A00 05 A 1431 gInterfaceA_iInterface: A 1432 A 1433 ; /*------------- Initialize Endpoi 00FF0A01 A 1434 gEndPoint1: 00FF0A01 07 A 1435 gEP1_bLength: db 07h 00FF0A02 05 A 1436 gEP1_bDescriptorType: db END 00FF0A03 81 A 1437 gEP1_bEndpointAddress: db 81h 00FF0A04 02 A 1438 gEP1_bmAtrributes: db 02h 00FF0A05 4000 A 1439 gEP1_wMaxPacketSize: dw 400 00FF0A07 00 A 1440 gEP1_bInterval: db 0h A 1441 A 1442 ; /*------------- Initialize Endpoi 00FF0A08 A 1443 gEndPoint1B: 00FF0A08 07 A 1444 gEP1B_bLength: db 07h 00FF0A09 05 A 1445 gEP1B_bDescriptorType: db END 00FF0A0A 01 A 1446 gEP1B_bEndPointAddress: db 01h 00FF0A0B 02 A 1447 gEP1B_bmAtrributes: db 02h 00FF0A0C 4000 A 1448 gEP1B_wMaxPacketSize: dw 400 00FF0A0E 00 A 1449 gEP1B_bInterval: db 0h A 1450 A 1451 ; /*------------- Initialize Endpoi 00FF0A0F A 1452 gEndPoint2: 00FF0A0F 07 A 1453 gEP2_bLength: db 07h 00FF0A10 05 A 1454 gEP2_bDescriptorType: db END 00FF0A11 82 A 1455 gEP2_bEndPointAddress: db 82h 00FF0A12 03 A 1456 gEP2_bmAtrributes: db 03h 00FF0A13 0800 A 1457 gEP2_wMaxPacketSize: dw 080 00FF0A15 0A A 1458 gEP2_bInterval: db 00a A 1459 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 39 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm A 1460 ; /*------------- Initialize Endpoi 00FF0A16 A 1461 gEndPoint2B: 00FF0A16 07 A 1462 gEP2B_bLength: db 07 00FF0A17 05 A 1463 gEP2B_bDescriptorType: db EN 00FF0A18 02 A 1464 gEP2B_bEndPointAddress: db 02 00FF0A19 02 A 1465 gEP2B_bmAtrributes: db 02 00FF0A1A 0800 A 1466 gEP2B_wMaxPacketSize: dw 08 00FF0A1C 00 A 1467 gEP2B_bInterval: db 00 A 1468 A 1469 ; /*------------- Initialize Endpoi 00FF0A1D A 1470 gEndPoint3: 00FF0A1D 07 A 1471 gEP3_bLength: db 07h 00FF0A1E 05 A 1472 gEP3_bDescriptorType: db END 00FF0A1F 83 A 1473 gEP3_bEndPointAddress: db 83h 00FF0A20 02 A 1474 gEP3_bmAtrributes: db 02h 00FF0A21 0800 A 1475 gEP3_wMaxPacketSize: dw 080 00FF0A23 00 A 1476 gEP3_bInterval: db 0h A 1477 A 1478 ; /*------------- Initialize Endpoi 00FF0A24 A 1479 gEndPoint3B: 00FF0A24 07 A 1480 gEP3B_bLength: db 07 00FF0A25 05 A 1481 gEP3B_bDescriptorType: db EN 00FF0A26 03 A 1482 gEP3B_bEndPointAddress: db 03 00FF0A27 02 A 1483 gEP3B_bmAtrributes: db 02 00FF0A28 0800 A 1484 gEP3B_wMaxPacketSize: dw 08 00FF0A2A 04 A 1485 gEP3B_bInterval: db 4h 00FF0A2B A 1486 gEndDescriptorLabel: A 1487 00FF0A2B A 1488 STRING0: 00FF0A2B 04 A 1489 db 04h ; Four f 00FF0A2C 04 A 1490 db 04h ; Four b 00FF0A2D 03 A 1491 db 03h ; String 00FF0A2E 09 A 1492 db 09h ; This i 00FF0A2F 01 A 1493 db 01h 00FF0A30 A 1494 STRING1: 00FF0A30 26 A 1495 db STRING2 - STRING1 - 1 00FF0A31 496E7465 6C204172 A 1496 db "Intel Architecture Labs 00FF0A39 63686974 65637475 00FF0A41 7265204C 61627320 00FF0A49 28432920 496E7465 00FF0A51 6C203139 3936 00FF0A57 A 1497 STRING2: 00FF0A57 1E A 1498 db STRING3 - STRING2 - 1 00FF0A58 5374616E 64617264 A 1499 db "Standard Loopback with 00FF0A60 204C6F6F 70626163 00FF0A68 6B207769 74682053 00FF0A70 75737065 6E64 00FF0A76 A 1500 STRING3: 00FF0A76 09 A 1501 db STRING4 - STRING3 - 1 00FF0A77 49414C2D 30303030 A 1502 db "IAL-00001" 00FF0A7F 31 00FF0A80 A 1503 STRING4: PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 40 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm 00FF0A80 27 A 1504 db STRING5 - STRING4 - 1 00FF0A81 53696E67 6C652043 A 1505 db "Single Configuration wi 00FF0A89 6F6E6669 67757261 00FF0A91 74696F6E 20776974 00FF0A99 68206F6E 6520696E 00FF0AA1 74657266 616365 00FF0AA8 A 1506 STRING5: 00FF0AA8 2D A 1507 db STRING6 - STRING5 - 1 00FF0AA9 5374616E 64617264 A 1508 db "Standard Loopback Inter 00FF0AB1 204C6F6F 70626163 00FF0AB9 6B20496E 74657266 00FF0AC1 6163653A 20427566 00FF0AC9 66657220 6C656E67 00FF0AD1 74682031 4B 00FF0AD6 A 1509 STRING6: 00FF0AD6 00 A 1510 db STRING_END - STRING6 - 1 00FF0AD7 A 1511 STRING_END: 00FF0AD7 00 A 1512 db 00h A 1513 SCOPE 00FF0AD8 A 1514 INIT_VARIABLES: A 1515 ;Init SETUP VARIABLES 00FF0AD8 A57EB000 A 1516 mov R11,#0 ; Zer 00FF0ADC A57EE4 0000 A 1517 mov WR28,#0 ; Acc 00FF0AE1 A57EF4 9000 A 1518 mov WR30,#LOW16(SetupSeq) ; Off 00FF0AE6 A57A7BB0 A 1519 mov @DR28,R11 ; Ini A 1520 A 1521 ; 00FF0AEA A57E54 0000 A 1522 mov WR10, #00h ; 00FF0AEF A57EF4 D800 A 1523 mov WR30, #LOW16(_EP1RxPtr); 00FF0AF4 A51B7A50 A 1524 mov @DR28, WR10 ; 00FF0AF8 A52EF4 0002 A 1525 add WR30, #02h ; 00FF0AFD A51B7A50 A 1526 mov @DR28, WR10 ; 00FF0B01 A52EF4 0002 A 1527 add WR30, #02h ; 00FF0B06 A51B7A50 A 1528 mov @DR28, WR10 ; A 1529 ;init 00FF0B0A A57EF4 E800 A 1530 mov WR30, #LOW16(_EP2RxPtr);the 00FF0B0F A51B7A50 A 1531 mov @DR28, WR10 ; 00FF0B13 A52EF4 0002 A 1532 add WR30, #02h ; 00FF0B18 A51B7A50 A 1533 mov @DR28, WR10 ; 00FF0B1C A52EF4 0002 A 1534 add WR30, #02h ; 00FF0B21 A51B7A50 A 1535 mov @DR28, WR10 ; A 1536 ; 00FF0B25 A57EF4 F800 A 1537 mov WR30, #LOW16(_EP3RxPtr); 00FF0B2A A51B7A50 A 1538 mov @DR28, WR10 ; 00FF0B2E A52EF4 0002 A 1539 add WR30, #02h ; 00FF0B33 A51B7A50 A 1540 mov @DR28, WR10 ; 00FF0B37 A52EF4 0002 A 1541 add WR30, #02h ; 00FF0B3C A51B7A50 A 1542 mov @DR28, WR10 ; A 1543 A 1544 A 1545 00FF0B40 A57EA4 0000 A 1546 mov WR20,#0 PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 41 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm 00FF0B45 A57EB4 A000 A 1547 mov WR22, #low16(out_var_table) 00FF0B4A A57E54 0000 A 1548 mov WR10, #0 00FF0B4F A57E44 0000 A 1549 mov WR8,#0 00FF0B54 A57A5BB0 A 1550 ?l1: mov @DR20,R11 ;This loo 00FF0B58 A52EB4 0001 A 1551 add WR22,#1 ;at out_v 00FF0B5D A52E8001 A 1552 add R8,#1 00FF0B61 A5BE8040 A 1553 cmp R8,#64 00FF0B65 A578 EC A 1554 jne ?l1 A 1555 A 1556 ;Zero out the output buffer area. A 1557 00FF0B68 A57EA4 0000 A 1558 mov WR20, #0 00FF0B6D A57EB4 C000 A 1559 mov WR22, #low16(OUT_BUFFERS) 00FF0B72 A57E54 0000 A 1560 mov WR10, #0 00FF0B77 A57E44 0000 A 1561 mov WR8,#0 00FF0B7C A57A5BB0 A 1562 ?l2: mov @DR20,R11 00FF0B80 A52EB4 0001 A 1563 add WR22,#1 00FF0B85 A52E44 0001 A 1564 add WR8,#1 A 1565 ; cmp WR8,#1000 00FF0B8A A5BE44 0010 A 1566 cmp WR8,#10h 00FF0B8F A578 EA A 1567 jne ?l2 00FF0B92 A57E54 0000 A 1568 mov WR10, #00h 00FF0B97 A57EB4 A00A A 1569 mov WR22, #LOW16(DATA_PENDING) 00FF0B9C A57A5BA0 A 1570 mov @DR20, R10 00FF0BA0 A57EB4 A00D A 1571 mov WR22, #LOW16(DIRECTION_ERRO 00FF0BA5 A57A5BA0 A 1572 mov @DR20, R10 00FF0BA9 A57EB4 A00B A 1573 mov WR22, #LOW16(PENDING_START_ 00FF0BAE A51B5A50 A 1574 mov @DR20, WR10 00FF0BB2 22 A 1575 RET A 1576 SCOPE A 1577 A 1578 00FF0BB3 A 1579 Lng_Delay: 00FF0BB3 A5CAC9 A 1580 push WR24 00FF0BB6 A5CAD9 A 1581 push WR26 00FF0BB9 A57EC4 0082 A 1582 MOV WR24, #082H 00FF0BBE 80 10 A 1583 JMP DE2 A 1584 A 1585 00FF0BC0 A 1586 Delay_X: ;MOV 00FF0BC0 A5CAC9 A 1587 push WR24 ;5 stat 00FF0BC3 A5CAD9 A 1588 push WR26 ;5 stat 00FF0BC6 A57EC4 0001 A 1589 MOV WR24, #001H ;3 stat 00FF0BCB A 1590 DE1: 00FF0BCB A57ED4 04FF A 1591 MOV WR26, #004FFH ;3 stat 00FF0BD0 A 1592 DE2: 00FF0BD0 A51BD4 A 1593 DEC WR26, #1 ;2 stat 00FF0BD3 A5BED4 0000 A 1594 CMP WR26, #00H ;4 stat 00FF0BD8 A578 F5 A 1595 JNE DE2 ;5 stat 00FF0BDB A51BC4 A 1596 DEC WR24, #1 ;2 stat 00FF0BDE A5BEC4 0000 A 1597 CMP WR24, #00H ;4 stat 00FF0BE3 A578 E5 A 1598 JNE DE1 ;5 stat PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 42 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm 00FF0BE6 A5DAD9 A 1599 POP WR26 ;5 stat 00FF0BE9 A5DAC9 A 1600 POP WR24 ;5 stat 00FF0BEC 22 A 1601 QUICK1: RET ; A 1602 A 1603 A 1604 A 1605 A 1606 ;####################################### A 1607 ;####### RAM MEMORY MAP ################ A 1608 ;####################################### A 1609 A 1610 ; org 00:0000h ;0-4ff Res A 1611 A 1612 ; org 00:0500h ; Variable A 1613 A 1614 ; org 00:0600h ; Variable A 1615 A 1616 ;; A 1617 ;; Data block for EP1. Contains buffer s A 1618 ;; A 1619 A 1620 define OUR_DATA_SEG, SPACE=pdata A 1621 segment OUR_DATA_SEG A 1622 0000D000 A 1623 org 00:D000h 0000D000 A 1624 EP_1_Buffer: ds 1 A 1625 0000D800 A 1626 org 00:D800h 0000D800 A 1627 _EP1RxPtr: ds 2 0000D802 A 1628 _EP1TxPtr: ds 2 0000D804 A 1629 _EP1DataCount: ds 2 A 1630 A 1631 ;; A 1632 ;; Data block for EP2. Contains buffer s A 1633 ;; A 1634 0000E000 A 1635 org 00:E000h 0000E000 A 1636 EP_2_Buffer: ds 1 A 1637 0000E800 A 1638 org 00:E800h 0000E800 A 1639 _EP2RxPtr: ds 2 0000E802 A 1640 _EP2TxPtr: ds 2 0000E804 A 1641 _EP2DataCount: ds 2 A 1642 A 1643 ;; A 1644 ;; Data block for EP3. Contains buffer s A 1645 ;; A 1646 0000F000 A 1647 org 00:F000h 0000F000 A 1648 EP_3_Buffer: ds 1 A 1649 0000F800 A 1650 org 00:F800h PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 43 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm 0000F800 A 1651 _EP3RxPtr: ds 2 0000F802 A 1652 _EP3TxPtr: ds 2 0000F804 A 1653 _EP3DataCount: ds 2 A 1654 A 1655 00009000 A 1656 org 00:9000h A 1657 00009000 A 1658 SETUP_VARS: 00009000 A 1659 SetupSeq: ds 1 00009001 A 1660 heart_pat: ds 1 00009002 A 1661 heart_bt0: ds 2 00009004 A 1662 heart_bt1: ds 2 00009006 A 1663 new_addr: ds 1 A 1664 00009100 A 1665 org 00:9100h A 1666 00009100 A 1667 COMMAND_BUFFER: 00009100 A 1668 ds 1 ; Byte Count 00009101 A 1669 StandardDeviceRequest: 00009101 A 1670 bmRequestType: ds 1 00009102 A 1671 bRequest: ds 1 00009103 A 1672 wValue: ds 2 00009105 A 1673 wIndex: ds 2 00009107 A 1674 wLength: ds 2 A 1675 A 1676 A 1677 ; define OUR_DATA_SEG, SPACE=data, A 1678 ; segment OUR_DATA_SEG A 1679 0000A000 A 1680 org 00:A000h A 1681 A 1682 0000A000 A 1683 out_var_table: 0000A000 A 1684 out_cur_buf: ds 2 0000A002 A 1685 out_cnt: ds 2 A 1686 0000A004 A 1687 in_var_table: A 1688 0000A004 A 1689 in_rd_pntr: ds 1 0000A005 A 1690 in_bytes_left: ds 1 0000A006 A 1691 in_FIFO_size: ds 1 0000A007 A 1692 in_FIFO_empty: ds 1 A 1693 0000A008 A 1694 MyConfigVal: ds 1 0000A009 A 1695 MyInterfaceVal: ds 1 A 1696 0000A00A A 1697 DATA_PENDING: ds 1 0000A00B A 1698 PENDING_START_TIME: ds 2 0000A00D A 1699 DIRECTION_ERROR_COUNT: ds 1 A 1700 A 1701 0000B000 A 1702 org 00:B000h ; PLC 80251 Macro Assembler, Version 2.10 20-Jan-97 16:15:45 page: 44 PC Machine Code I Line File: c:\usb\930code\loopsusp\newloop1.asm A 1703 0000B000 A 1704 IN_BUFFERS: A 1705 0000C000 A 1706 org 00:C000h ; A 1707 0000C000 A 1708 OUT_BUFFERS: A 1709 A 1710 A 1711 A 1712 END Errors: 0 Warnings: 0 Lines Assembled: 2234