├── 3c509.asm ├── 3c509.com ├── 3c5x9x ├── 3C5X9.COM ├── 3C5X9CFG.EXE ├── 3C5X9ENG.HLP ├── 3C5X9X.ZIP ├── 3ccfg.exe └── PNPDSABL.BAT ├── MAKEFILE ├── README.md ├── README.md.d └── 3Com_3C509BC_Ethernet_NIC.jpg ├── chrout.asm ├── crlf.asm ├── decout.asm ├── defs.asm ├── digout.asm ├── getdig.asm ├── getenv.asm ├── getnum.asm ├── head.asm ├── pkterr.asm ├── printea.asm ├── printnum.asm ├── read.me ├── skipblk.asm ├── tail.asm ├── timeout.asm └── verifypi.asm /3c509.asm: -------------------------------------------------------------------------------- 1 | version equ 6 2 | ;History:1,1 3 | ;Fri Mar 08 14:48:42 2002 Merge in Peter Tattum's 3c509b changes. 4 | ;Mon Jan 22 15:09:36 1996 we were rejecting frames with dribble set and accepting other errored frames. 5 | 6 | .8086 7 | 8 | ; Copyright, 1988-1992, Russell Nelson, Crynwr Software 9 | 10 | ; This program is free software; you can redistribute it and/or modify 11 | ; it under the terms of the GNU General Public License as published by 12 | ; the Free Software Foundation, version 1. 13 | ; 14 | ; This program is distributed in the hope that it will be useful, 15 | ; but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | ; GNU General Public License for more details. 18 | ; 19 | ; You should have received a copy of the GNU General Public License 20 | ; along with this program; if not, write to the Free Software 21 | ; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA 22 | 23 | include defs.asm 24 | 25 | code segment word public 26 | assume cs:code, ds:code 27 | 28 | ;----------------------------------------------------------------------------; 29 | ; ; 30 | ; This source file is the property of 3Com Corporation and may not be ; 31 | ; copied or distributed in any isomorphic form without an appropriate ; 32 | ; prior licensing arrangement with 3Com Corporation. ; 33 | ; ; 34 | ; Copyright (c) 1988 3Com Corporation ; 35 | ; ; 36 | ;------ Equates -------------------------------------------------------------; 37 | ; 38 | ; Command code masks 39 | ; 40 | CMD_CMDMASK equ 0F800h ; command bits 41 | CMD_ARGMASK equ 007FFh ; argument bits 42 | ; 43 | ; Command codes, word form 44 | ; 45 | CMD_GLOBALRESET equ 00000b shl 11 ; global reset 46 | CMD_SELECTWINDOW equ 00001B shl 11 ; select register window 47 | CMD_STARTINTXCVR equ 00010b shl 11 ; start internal transciver 48 | CMD_RXDISABLE equ 00011b shl 11 ; rx disable 49 | CMD_RXENABLE equ 00100b shl 11 ; rx enable 50 | CMD_RXRESET equ 00101b shl 11 ; rx reset 51 | CMD_RXDISCARD equ 01000b shl 11 ; rx discard top packet 52 | CMD_TXENABLE equ 01001b shl 11 ; tx enable 53 | CMD_TXDISABLE equ 01010b shl 11 ; tx disable 54 | CMD_TXRESET equ 01011b shl 11 ; tx reset 55 | CMD_REQUESTINT equ 01100b shl 11 ; request interrupt 56 | CMD_ACKNOWLEDGE equ 01101b shl 11 ; acknowledge interrupt 57 | CMD_SETINTMASK equ 01110b shl 11 ; set interrupt mask 58 | CMD_SETRZMASK equ 01111b shl 11 ; set read zero mask 59 | CMD_SETRXFILTER equ 10000b shl 11 ; set rx filter 60 | CMD_SETRXEARLY equ 10001b shl 11 ; set rx early threshold 61 | CMD_SETTXAVAILABLE equ 10010b shl 11 ; set tx available threshold 62 | CMD_SETTXSTART equ 10011b shl 11 ; set tx start threshold 63 | CMD_STATSENABLE equ 10101b shl 11 ; statistics enable 64 | CMD_STATSDISABLE equ 10110b shl 11 ; statistics disable 65 | CMD_STOPINTXCVR equ 10111b shl 11 ; start internal transciver 66 | ; 67 | ; Command codes, hibyte form (commands without operands only) 68 | ; 69 | CMDH_STARTINTXCVR equ CMD_STARTINTXCVR shr 8 70 | CMDH_RXDISABLE equ CMD_RXDISABLE shr 8 71 | CMDH_RXENABLE equ CMD_RXENABLE shr 8 72 | CMDH_RXDISCARD equ CMD_RXDISCARD shr 8 73 | CMDH_TXENABLE equ CMD_TXENABLE shr 8 74 | CMDH_TXDISABLE equ CMD_TXDISABLE shr 8 75 | CMDH_REQUESTINT equ CMD_REQUESTINT shr 8 76 | CMDH_STATSENABLE equ CMD_STATSENABLE shr 8 77 | CMDH_STATSDISABLE equ CMD_STATSDISABLE shr 8 78 | CMDH_STOPINTXCVR equ CMD_STOPINTXCVR shr 8 79 | ; 80 | ; Status register bits (INT for interrupt sources, ST for the rest) 81 | ; 82 | INT_LATCH equ 00001h ; interrupt latch 83 | INT_ADAPTERFAIL equ 00002h ; adapter failure 84 | INT_TXCOMPLETE equ 00004h ; tx complete 85 | INT_TXAVAILABLE equ 00008h ; tx available 86 | INT_RXCOMPLETE equ 00010h ; rx complete 87 | INT_RXEARLY equ 00020h ; rx early 88 | INT_REQUESTED equ 00040h ; interrupt requested 89 | INT_UPDATESTATS equ 00080h ; update statistics 90 | ST_FAILED equ 00800h ; command failed 91 | ST_BUSY equ 01000h ; command busy 92 | ST_WINDOW equ 0E000h ; window bits (13-15) 93 | 94 | STH_FAILED equ ST_FAILED shr 8 95 | STH_BUSY equ ST_BUSY shr 8 96 | STH_WINDOW equ ST_WINDOW shr 8 97 | 98 | ; 99 | ; RxStatus register bits 100 | ; 101 | RXS_INCOMPLETE equ 8000h ; not completely received 102 | RXS_ERROR equ 4000h ; error in packet 103 | RXS_LENGTH equ 07FFh ; bytes in RxFIFO 104 | RXS_ERRTYPE equ 3800h ; Rx error type, bit 13-11 105 | RXS_OVERRUN equ 0000h ; overrun error 106 | RXS_OVERSIZE equ 0800h ; oversize packet error 107 | RXS_DRIBBLE equ 1000h ; dribble bit (not an error) 108 | RXS_RUNT equ 1800h ; runt packet error 109 | RXS_CRC equ 2800h ; CRC error 110 | RXS_FRAMING equ 2000h ; framing error 111 | 112 | RXSH_INCOMPLETE equ RXS_INCOMPLETE shr 8 113 | RXSH_ERROR equ RXS_ERROR shr 8 114 | RXSH_ERRTYPE equ RXS_ERRTYPE shr 8 115 | RXSH_OVERRUN equ RXS_OVERRUN shr 8 116 | RXSH_DRIBBLE equ RXS_DRIBBLE shr 8 117 | RXSH_CRC equ RXS_CRC shr 8 118 | RXSH_RUNT equ RXS_RUNT shr 8 119 | RXSH_OVERSIZE equ RXS_OVERSIZE shr 8 120 | RXSH_FRAMING equ RXS_FRAMING shr 8 121 | ; 122 | ; TxStatus register bits 123 | ; 124 | TXS_COMPLETE equ 80h ; tx completed 125 | TXS_INTREQUESTED equ 40h ; interrupt on successfull tx 126 | TXS_ERRTYPE equ 38h ; error bits 127 | TXS_JABBERERROR equ 20h ; jabber error 128 | TXS_UNDERRUN equ 10h ; tx underrun error 129 | TXS_MAXCOLLISIONS equ 08h ; max collisions error 130 | TXS_STATUSOVERFLOW equ 04h ; TX status stack is full 131 | ; 132 | ; Window Numbers 133 | ; 134 | WNO_SETUP equ 0 ; setup/configuration 135 | WNO_OPERATING equ 1 ; operating set 136 | WNO_STATIONADDRESS equ 2 ; station address setup/read 137 | WNO_FIFO equ 3 ; FIFO management 138 | WNO_DIAGNOSTICS equ 4 ; diagnostics 139 | WNO_READABLE equ 5 ; registers set by commands 140 | WNO_STATISTICS equ 6 ; statistics 141 | ; 142 | ; Port offsets, Window 1 (WNO_OPERATING) 143 | ; 144 | PORT_CmdStatus equ 0Eh ; command/status 145 | PORT_TxFree equ 0Ch ; free transmit bytes 146 | PORT_TxStatus equ 0Bh ; transmit status (byte) 147 | PORT_Timer equ 0Ah ; latency timer (byte) 148 | PORT_RxStatus equ 08h ; receive status 149 | PORT_RxFIFO equ 00h ; RxFIFO read 150 | PORT_TxFIFO equ 00h ; TxFIFO write 151 | ; 152 | ; Port offsets, Window 0 (WNO_SETUP) 153 | ; 154 | PORT_EEData equ 0Ch ; EEProm data register 155 | PORT_EECmd equ 0Ah ; EEProm command register 156 | PORT_CfgResource equ 08h ; resource configuration 157 | PORT_CfgAddress equ 06h ; address configuration 158 | PORT_CfgControl equ 04h ; configuration control 159 | PORT_ProductID equ 02h ; product id (EISA) 160 | PORT_Manufacturer equ 00h ; Manufacturer code (EISA) 161 | ; 162 | ; Port offsets, Window 2 (WNO_STATIONADDRESS) 163 | ; 164 | PORT_SA0_1 equ 00h ; station address bytes 0,1 165 | PORT_SA2_3 equ 02h ; station address bytes 2,3 166 | PORT_SA4_5 equ 04h ; station address bytes 4,5 167 | ; 168 | ; Port offsets, Window 3 (WNO_FIFO) 169 | ; 170 | PORT_ALT_TxFree equ 0Ch ; free transmit bytes (dup) 171 | PORT_RxFree equ 0Ah ; free receive bytes 172 | ; 173 | ; Port offsets, Window 4 (WNO_DIAGNOSTICS) 174 | ; 175 | PORT_MediaStatus equ 0Ah ; media type/status 176 | PORT_SlingshotStatus equ 08h ; Slingshot status 177 | PORT_NetDiagnostic equ 06h ; net diagnostic 178 | PORT_FIFODiagnostic equ 04h ; FIFO diagnostic 179 | PORT_HostDiagnostic equ 02h ; host diagnostic 180 | PORT_TxDiagnostic equ 00h ; tx diagnostic 181 | ; 182 | ; Port offsets, Window 5 (WNO_READABLE) 183 | ; 184 | PORT_RZMask equ 0Ch ; read zero mask 185 | PORT_IntMask equ 0Ah ; interrupt mask 186 | PORT_RxFilter equ 08h ; receive filter 187 | PORT_RxEarly equ 06h ; rx early threshold 188 | PORT_TxAvailable equ 02h ; tx available threshold 189 | PORT_TxStart equ 00h ; tx start threshold 190 | ; 191 | ; Port offsets, Window 6 (WNO_STATISTICS) 192 | ; 193 | PORT_TXBYTES equ 0Ch ; tx bytes ok 194 | PORT_RXBYTES equ 0Ah ; rx bytes ok 195 | PORT_TXDEFER equ 08h ; tx frames deferred (byte) 196 | PORT_RXFRAMES equ 07h ; rx frames ok (byte) 197 | PORT_TXFRAMES equ 06h ; tx frames ok (byte) 198 | PORT_RXDISCARDED equ 05h ; rx frames discarded (byte) 199 | PORT_TXLATE equ 04h ; tx frames late coll. (byte) 200 | PORT_TXSINGLE equ 03h ; tx frames one coll. (byte) 201 | PORT_TXMULTIPLE equ 02h ; tx frames mult. coll. (byte) 202 | PORT_TXNOCD equ 01h ; tx frames no CDheartbt (byte) 203 | PORT_TXCARRIERLOST equ 00h ; tx frames carrier lost (byte) 204 | ; 205 | ; Various command arguments 206 | ; 207 | INT_ALLDISABLED equ 00000000000b ; all interrupts disabled 208 | INT_ALLENABLED equ 00011111110b ; all interrupts enabled 209 | 210 | FILTER_INDIVIDUAL equ 0001b ; individual address 211 | FILTER_MULTICAST equ 0010b ; multicast/group addresses 212 | FILTER_BROADCAST equ 0100b ; broadcast address 213 | FILTER_PROMISCUOUS equ 1000b ; promiscuous mode 214 | 215 | RXEARLY_DISABLED equ 2032 ; RxEarly to disable 216 | 217 | TXAVAIL_DISABLED equ 2040 ; TxAvailable to disable 218 | TXAVAIL_MIN equ 4 219 | 220 | TXSTART_DISABLED equ 2040 ; TxStart to disable 221 | TXSTART_MIN equ 0 222 | TXSTART_MAX equ TXSTART_DISABLED 223 | 224 | RXLENGTH_MAX equ 1792 ; maximum rxlength 225 | ; 226 | ; Transmit Preamble 227 | ; 228 | PREAMBLESIZE equ 4 ; transmit preamble size 229 | TXP_INTONSUCCESS equ 8000h ; interrupt on successful tx 230 | ; 231 | ; Bits in various diagnostics registers 232 | ; 233 | MEDIA_TP equ 8000h ; TP transciever 234 | MEDIA_BNC equ 4000h ; Thinnet transciever 235 | MEDIA_INTENDEC equ 2000h ; internal encoder/decoder 236 | MEDIA_SQE equ 1000h ; SQE present 237 | MEDIA_LBEAT equ 0800h ; link beat ok (TP) 238 | MEDIA_POLARITY equ 0400h ; polarity (TP) 239 | MEDIA_JABBER equ 0200h ; jabber (TP) 240 | MEDIA_UNSQUELCH equ 0100h ; unsquelch (TP) 241 | MEDIA_LBEATENABLE equ 0080h ; link beat enable (TP) 242 | MEDIA_JABBERENABLE equ 0040h ; jabber enable (TP) 243 | MEDIA_CRS equ 0020h ; carrier sense 244 | MEDIA_COLLISION equ 0010h ; collision 245 | MEDIA_SQEENABLE equ 0008h ; enable SQE statistics 246 | 247 | NETD_EXTLOOPBACK equ 8000h ; TP external loopback 248 | NETD_ENDECLOOPBACK equ 4000h ; ENDEC loopback 249 | NETD_CORELOOPBACK equ 2000h ; ethernet core loopback 250 | NETD_FIFOLOOPBACK equ 1000h ; FIFO loopback 251 | NETD_TXENABLED equ 0800h ; tx enabled 252 | NETD_RXENABLED equ 0400h ; rx enabled 253 | NETD_TXTRANSMITTING equ 0200h ; tx transmitting 254 | NETD_TXRESETREQD equ 0100h ; tx reset required 255 | 256 | FIFOD_RXRECEIVING equ 8000h ; rx receiveing 257 | FIFOD_RXUNDERRUN equ 2000h ; rx underrun 258 | FIFOD_RXSTATUSOVER equ 1000h ; rx status overrun 259 | FIFOD_RXOVERRUN equ 0800h ; rx overrun 260 | FIFOD_TXOVERRUN equ 0400h ; tx overrun 261 | FIFOD_BISTRESULTS equ 00FFh ; BIST results (mask) 262 | 263 | SLING_TXUNDERRUN equ 2000h ; Slingshot TxUnderrun bit 264 | ; 265 | ; board identification codes, byte swapped in Rev 0 266 | ; 267 | EISA_MANUFACTURER_ID equ 06D50h ; EISA manufacturer code 268 | ISA_PRODUCT_ID equ 09050h ; Product ID for ISA board 269 | PRODUCT_ID_MASK equ 0F0FFh ; Mask off revision nibble 270 | ; 271 | ; EEProm access 272 | ; 273 | EE_BUSY equ 8000h ; EEProm busy bit in EECmd 274 | EE_TCOM_NODE_ADDR_WORD0 equ 00h 275 | EE_TCOM_NODE_ADDR_WORD1 equ 01h 276 | EE_TCOM_NODE_ADDR_WORD2 equ 02h 277 | EE_VULCAN_PROD_ID equ 03h 278 | EE_MANUFACTURING_DATA equ 04h 279 | EE_SERIAL_NUMBER_WORD0 equ 05h 280 | EE_SERIAL_NUMBER_WORD1 equ 06h 281 | EE_MANUFACTURER_CODE equ 07h 282 | EE_ADDR_CONFIGURATION equ 08h 283 | EE_RESOURCE_CONFIGURATION equ 09h 284 | EE_OEM_NODE_ADDR_WORD0 equ 0Ah 285 | EE_OEM_NODE_ADDR_WORD1 equ 0Bh 286 | EE_OEM_NODE_ADDR_WORD2 equ 0Ch 287 | EE_SOFTWARE_CONFIG_INFO equ 0Dh 288 | EE_CWORD equ 0Eh 289 | ; 290 | ; contention logic 291 | ; 292 | READ_EEPROM equ 080h 293 | ID_GLOBAL_RESET equ 0C0h 294 | SET_TAG_REGISTER equ 0D0h 295 | TEST_TAG_REGISTER equ 0D8h 296 | ACTIVATE_AND_SET_IO equ 0E0h 297 | ACTIVATE_VULCAN equ 0FFh 298 | ; 299 | ; Resource Configuration Register bits 300 | ; 301 | RCONFIG_IRQ equ 0F000h 302 | ; 303 | ; Address Configuration Register bits 304 | ; 305 | ACONFIG_XCVR equ 0C000h 306 | ACONFIG_IOBASE equ 0001Fh 307 | 308 | IOBASE_EISA equ 0001Fh 309 | 310 | TP_XCVR equ 00000h 311 | BNC_XCVR equ 0C000h 312 | AUI_XCVR equ 04000h 313 | 314 | MIN_IO_BASE_ADDR equ 200h 315 | MAX_IO_BASE_ADDR equ 3F0h 316 | REGISTER_SET_SIZE equ 10h 317 | ; 318 | ; Software Configuration Register bits 319 | ; 320 | SW_OPTIMIZE equ 0030h 321 | SW_MAXCLI equ 3F00h 322 | SW_LINKBEAT equ 4000h 323 | ; 324 | ; Possibilities for SW_OPTIMIZE 325 | ; 326 | OPTIMIZE_DOS_CLIENT equ 0010h 327 | OPTIMIZE_WINDOWS_CLIENT equ 0020h 328 | OPTIMIZE_SERVER equ 0030h 329 | ; 330 | ; Configuration Control Register bits 331 | ; 332 | ENABLE_ADAPTER equ 01h 333 | 334 | setwin macro win 335 | setport PORT_CmdStatus 336 | mov ax,CMD_SELECTWINDOW+win 337 | out dx,ax 338 | endm 339 | 340 | extrn is_eisa: byte ;=0 if ISA, =1 if EISA 341 | extrn is_186: byte ;=0 if 808[68], =1 if 80[1234]86. 342 | extrn is_386: byte ;=0 if 80[12]8[68], =1 if 80[34]86. 343 | 344 | public int_no, io_addr 345 | int_no db 0,0,0,0 ;must be four bytes long for get_number. 346 | io_addr dw 0,0 ;must be four bytes long for get_number. 347 | 348 | public driver_class, driver_type, driver_name, driver_function, parameter_list 349 | driver_class db BLUEBOOK,IEEE8023,0 ;null terminated list of classes. 350 | driver_type db 94 351 | driver_name db '3c509',0 ;name of the driver. 352 | driver_function db 2 353 | parameter_list label byte 354 | db 1 ;major rev of packet driver specification 355 | db 9 ;minor rev of packet driver specification 356 | db 14 ;length of parameter list 357 | db EADDR_LEN ;length of MAC-layer address 358 | dw GIANT ;MTU, including MAC headers 359 | dw MAX_MULTICAST * EADDR_LEN ;buffer size of multicast addrs 360 | dw 0 ;(# of back-to-back MTU rcvs) - 1 361 | dw 0 ;(# of successive xmits) - 1 362 | int_num dw 0 ;Interrupt # to hook for post-EOI 363 | ;processing, 0 == none, 364 | 365 | public rcv_modes 366 | rcv_modes dw 7 ;number of receive modes in our table. 367 | dw 0 ;There is no mode zero 368 | dw rcv_mode_1 369 | dw rcv_mode_2 370 | dw rcv_mode_3 371 | dw 0 ;haven't set up perfect filtering yet. 372 | dw rcv_mode_5 373 | dw rcv_mode_6 374 | 375 | include timeout.asm 376 | 377 | public bad_command_intercept 378 | bad_command_intercept: 379 | ;called with ah=command, unknown to the skeleton. 380 | ;exit with nc if okay, cy, dh=error if not. 381 | mov dh,BAD_COMMAND 382 | stc 383 | ret 384 | 385 | public as_send_pkt 386 | ; The Asynchronous Transmit Packet routine. 387 | ; Enter with es:di -> i/o control block, ds:si -> packet, cx = packet length, 388 | ; interrupts possibly enabled. 389 | ; Exit with nc if ok, or else cy if error, dh set to error number. 390 | ; es:di and interrupt enable flag preserved on exit. 391 | as_send_pkt: 392 | ret 393 | 394 | public drop_pkt 395 | ; Drop a packet from the queue. 396 | ; Enter with es:di -> iocb. 397 | drop_pkt: 398 | assume ds:nothing 399 | ret 400 | 401 | public xmit 402 | ; Process a transmit interrupt with the least possible latency to achieve 403 | ; back-to-back packet transmissions. 404 | ; May only use ax and dx. 405 | xmit: 406 | assume ds:nothing 407 | ret 408 | 409 | tx_reset: 410 | push ax 411 | push dx 412 | loadport 413 | setport PORT_CmdStatus 414 | pushf 415 | cli 416 | mov ax,CMD_TXRESET 417 | out dx,ax 418 | tx_reset_1: 419 | in ax,dx ;wait for the command to finish. 420 | test ax,ST_BUSY 421 | jne tx_reset_1 422 | popf 423 | 424 | mov ax,CMD_TXENABLE ;yes, re-enable the transmitter. 425 | out dx,ax 426 | pop dx 427 | pop ax 428 | ret 429 | 430 | public send_pkt 431 | send_pkt: 432 | ;enter with es:di->upcall routine, (0:0) if no upcall is desired. 433 | ; (only if the high-performance bit is set in driver_function) 434 | ;enter with ds:si -> packet, cx = packet length. 435 | ;if we're a high-performance driver, es:di -> upcall. 436 | ;exit with nc if ok, or else cy if error, dh set to error number. 437 | assume ds:nothing 438 | cmp cx,GIANT ; Is this packet too large? 439 | ja send_pkt_toobig 440 | 441 | loadport 442 | setport PORT_TxStatus ;get the previous transmit status. 443 | in al,dx 444 | setport PORT_CmdStatus 445 | test al,TXS_UNDERRUN or TXS_JABBERERROR ;do we need to reset transmitter? 446 | je send_pkt_0 447 | call tx_reset 448 | send_pkt_0: 449 | ; test al,TXS_COMPLETE 450 | ; je send_pkt_0_1 451 | ; out dx,al 452 | ;send_pkt_0_1: 453 | 454 | test al,TXS_ERRTYPE ;any errors? 455 | je send_pkt_3 ;no. 456 | call count_out_err ;yes, count it. 457 | mov ax,CMD_TXENABLE ;yes, re-enable the transmitter. 458 | out dx,ax 459 | send_pkt_3: 460 | 461 | mov bx,cx ;adjust for the size of the preamble, 462 | add bx,4 + 3 ;and round BX up to dword boundary. 463 | and bx,not 3 464 | 465 | setport PORT_TxFree ;wait for enough bytes in transmit buffer. 466 | mov ax,18 467 | call set_timeout 468 | send_pkt_1: 469 | in ax,dx 470 | cmp ax,bx 471 | jae send_pkt_2 472 | call do_timeout 473 | jne send_pkt_1 474 | call tx_reset 475 | mov dh,CANT_SEND ;timed out, can't send. 476 | stc 477 | ret 478 | send_pkt_toobig: 479 | mov dh,NO_SPACE 480 | stc 481 | ret 482 | send_pkt_2: 483 | sub bx,4 ;reduce by the size of the preamble. 484 | 485 | setport PORT_TxFIFO 486 | mov ax,cx ;output the count 487 | out dx,ax ; (no interrupt requested) 488 | out dx,ax ;output the second reserved word. 489 | mov cx,bx ;output the rest of the packet. 490 | 491 | ; cmp is_386,0 ;can we output dwords? 492 | ; jne send_pkt_7 ;yes. 493 | shr cx,1 ;output 16 bits at a time. 494 | ; rep outsw 495 | 496 | ;start 8086 code 497 | send_8086: 498 | lodsw 499 | out dx,ax 500 | loop send_8086 501 | ;end 8086 code 502 | 503 | jmp short send_pkt_6 504 | ;send_pkt_7: 505 | ; .386 506 | ; shr cx,2 ;already rounded up. 507 | ; rep outsd ;output 32 bits at a time. 508 | ; .286 509 | send_pkt_6: 510 | 511 | clc 512 | ret 513 | 514 | 515 | public set_address 516 | set_address: 517 | ;enter with ds:si -> Ethernet address, CX = length of address. 518 | ;exit with nc if okay, or cy, dh=error if any errors. 519 | assume ds:nothing 520 | cmp cx,EADDR_LEN ;ensure that their address is okay. 521 | je set_address_4 522 | mov dh,BAD_ADDRESS 523 | stc 524 | jmp short set_address_done 525 | set_address_4: 526 | 527 | loadport 528 | setwin WNO_STATIONADDRESS 529 | setport PORT_SA0_1 530 | set_address_1: 531 | lodsb 532 | out dx,al 533 | inc dx 534 | loop set_address_1 535 | set_address_okay: 536 | mov cx,EADDR_LEN ;return their address length. 537 | clc 538 | set_address_done: 539 | push cs 540 | pop ds 541 | assume ds:code 542 | loadport 543 | setwin WNO_OPERATING 544 | ret 545 | 546 | 547 | ;skip past the following two bytes while destroying BX. 548 | skip2 macro 549 | db 0bbh ;opcode of "mov bx,0000" 550 | endm 551 | 552 | rcv_mode_1: 553 | mov al,0 ;receive nothing 554 | skip2 555 | rcv_mode_2: 556 | mov al,1 ;receive individual address 557 | skip2 558 | rcv_mode_3: 559 | mov al,5 ;receive individual address+broadcast 560 | skip2 561 | rcv_mode_5: 562 | mov al,3 ;receive individual address+group addr(multicast) 563 | skip2 564 | rcv_mode_6: 565 | mov al,8 ;receive all packets. 566 | mov ah,CMD_SETRXFILTER shr 8 ;set receive filter 567 | loadport 568 | setport PORT_CmdStatus 569 | out dx,ax 570 | ret 571 | 572 | 573 | public set_multicast_list 574 | set_multicast_list: 575 | ;enter with ds:si ->list of multicast addresses, ax = number of addresses, 576 | ; cx = number of bytes. 577 | ;return nc if we set all of them, or cy,dh=error if we didn't. 578 | mov dh,NO_MULTICAST 579 | stc 580 | ret 581 | 582 | 583 | public terminate 584 | terminate: 585 | loadport 586 | setport PORT_CmdStatus 587 | mov ax,CMD_GLOBALRESET 588 | out dx,ax 589 | ret 590 | 591 | 592 | public reset_interface 593 | reset_interface: 594 | ;reset the interface. 595 | assume ds:code 596 | ret 597 | 598 | 599 | ;decide if we know this packet's type. 600 | ;enter with es:di -> packet type, dl = packet class. 601 | ;exit with nc if we know it, cy if not. 602 | extrn recv_locate: near 603 | 604 | ;do the first upcall, get a pointer to the packet. 605 | ;enter with cx = packet length. 606 | ;exit with cx = packet length, es:di -> buffer for the packet. 607 | extrn recv_found: near 608 | 609 | ;called when we want to determine what to do with a received packet. 610 | ;enter with cx = packet length, es:di -> packet type, dl = packet class. 611 | extrn recv_find: near 612 | 613 | ;called after we have copied the packet into the buffer. 614 | ;enter with ds:si ->the packet, cx = length of the packet. 615 | extrn recv_copy: near 616 | 617 | ;call this routine to schedule a subroutine that gets run after the 618 | ;recv_isr. This is done by stuffing routine's address in place 619 | ;of the recv_isr iret's address. This routine should push the flags when it 620 | ;is entered, and should jump to recv_exiting_exit to leave. 621 | ;enter with ax = address of routine to run. 622 | extrn schedule_exiting: near 623 | 624 | ;recv_exiting jumps here to exit, after pushing the flags. 625 | extrn recv_exiting_exit: near 626 | 627 | extrn count_in_err: near 628 | extrn count_out_err: near 629 | 630 | ether_buff db EADDR_LEN dup(?) 631 | db EADDR_LEN dup(?) 632 | ether_type db 8 dup(?) 633 | ETHER_BUFF_LEN equ $ - ether_buff 634 | .erre (ETHER_BUFF_LEN and 3) eq 0 ;must be an even # of dwords. 635 | 636 | early_bytes dw 0 ;the early byte gets the worm. 637 | 638 | read_header: 639 | ;enter with dx -> PORT_RxFIFO 640 | ;exit with es:di -> packet type. 641 | 642 | mov ax,ds 643 | mov es,ax 644 | mov di,offset ether_buff 645 | mov cx,ETHER_BUFF_LEN/4 646 | repinsd: 647 | shl cx,1 ;*** this gets changed into "rep insd" 648 | ; rep insw ;*** "nop" on a 386 or 486. 649 | 650 | ;start 8086 code 651 | l_rep: 652 | in ax,dx 653 | stosw 654 | loop l_rep 655 | ;end 8086 code 656 | 657 | mov di,offset ether_type 658 | 659 | mov dl, BLUEBOOK ;assume bluebook Ethernet. 660 | mov ax, es:[di] 661 | xchg ah, al 662 | cmp ax, 1500 663 | ja read_header_1 664 | inc di ;set di to 802.2 header 665 | inc di 666 | mov dl, IEEE8023 667 | read_header_1: 668 | ret 669 | 670 | 671 | public recv 672 | recv: 673 | ;called from the recv isr. All registers have been saved, ds=cs, 674 | ;our interrupt has been acknowledged, and our interrupts have been 675 | ;masked at the interrupt controller. 676 | assume ds:code 677 | recv_another: 678 | loadport 679 | setport PORT_CmdStatus 680 | in ax,dx ;did we get a packet? 681 | or ax,CMD_ACKNOWLEDGE 682 | out dx,ax 683 | setport PORT_RxStatus 684 | test al,INT_RXCOMPLETE 685 | jne recv_complete 686 | test al,INT_RXEARLY ;are we getting it early? 687 | jne recv_early 688 | jmp recv_exit ;no. 689 | recv_early: 690 | in ax,dx ;get the amount we can read. 691 | and ax,RXS_LENGTH 692 | cmp ax,ETHER_BUFF_LEN ;do we have enough to read early? 693 | jb recv_early_1 ;no, give up. 694 | 695 | mov early_bytes,ETHER_BUFF_LEN 696 | 697 | setport PORT_RxFIFO 698 | call read_header 699 | call recv_locate ;see if this is a type we want. 700 | jnc recv_early_1 ;it is, just exit. 701 | jmp recv_discard ;it isn't. 702 | 703 | recv_early_1: 704 | jmp recv_another 705 | 706 | ;yes, this is dead code. It's only in here to ensure that the setport macro 707 | ;has the right value. 708 | setport PORT_RxStatus 709 | recv_complete: 710 | in ax,dx ;get the size. 711 | test ax,RXS_ERROR ;any errors? 712 | je recv_complete_2 ;no, it's fine. 713 | 714 | and ax,RXS_ERRTYPE ;get just the error type bits. 715 | cmp ax,RXS_DRIBBLE ;dribble is just a warning. 716 | je recv_complete_1 ;if only dribble is set, that's okay. 717 | 718 | recv_err: 719 | call count_in_err 720 | jmp recv_discard 721 | 722 | recv_complete_1: 723 | in ax,dx ;get the size again. 724 | recv_complete_2: 725 | ;Put it on the receive queue 726 | and ax,RXS_LENGTH 727 | mov cx,ax 728 | 729 | cmp early_bytes,0 ;did we read the header in already? 730 | jne recv_complete_3 ;yes, we've already got it. 731 | 732 | cmp cx,RUNT ;check legal packet size 733 | jb recv_err 734 | cmp cx,GIANT 735 | ja recv_err 736 | 737 | push cx 738 | setport PORT_RxFIFO 739 | call read_header 740 | pop cx 741 | 742 | push cx 743 | call recv_find 744 | pop cx 745 | jmp short recv_complete_4 746 | 747 | recv_complete_3: 748 | add cx,early_bytes ;add in the early bytes we got. 749 | 750 | cmp cx,RUNT ;check legal packet size 751 | jb recv_err 752 | cmp cx,GIANT 753 | ja recv_err 754 | 755 | push cx 756 | call recv_found ;do the first upcall. 757 | pop cx 758 | 759 | recv_complete_4: 760 | mov ax,es ;is this pointer null? 761 | or ax,di 762 | je recv_discard ;yes - just free the frame. 763 | 764 | push es ;remember where the buffer pointer is. 765 | push di 766 | 767 | mov bx,cx ;save the count. 768 | mov cx,ETHER_BUFF_LEN/2 ;move the data over. 769 | mov si,offset ether_buff 770 | rep movsw 771 | 772 | loadport ;restore the I/O port. 773 | setport PORT_RxFIFO 774 | mov cx,bx ;restore the count. 775 | sub cx,ETHER_BUFF_LEN ;but leave off what we've already copied. 776 | 777 | ; cmp is_386,0 778 | ; jne io_input_386 779 | io_input_286: 780 | push cx 781 | shr cx,1 782 | ; rep insw 783 | 784 | ;start 8086 code 785 | l_input: 786 | in ax, dx 787 | stosw 788 | loop l_input 789 | ;end 8086 code 790 | 791 | pop cx 792 | jnc io_input_286_1 ;go if the count was even. 793 | ; insb ;get that last byte. 794 | 795 | ;start 8086 code 796 | in al, dx 797 | stosb 798 | ;end 8086 code 799 | 800 | in al,dx ;and get the pad byte. 801 | test cx,2 ;even number of words? 802 | jne io_input_done ;no. 803 | in ax,dx ;yes, get the pad word. 804 | jmp short io_input_done 805 | io_input_286_1: 806 | test cx,2 ;odd number of words? 807 | je io_input_done ;no. 808 | in ax,dx ;yes, get the pad word. 809 | jmp short io_input_done 810 | 811 | ;io_input_386: 812 | ; .386 813 | ; push eax 814 | ; push cx ;first, get all the full words. 815 | ; shr cx,2 816 | ; rep insd 817 | ; pop cx 818 | ; test cx,3 ;even number of dwords? 819 | ; je io_input_386_one_byte ;yes. 820 | ; in eax,dx ;no, get the partial word. 821 | ; test cx,2 ;a full word to be stored? 822 | ; je io_input_386_one_word 823 | ; stosw ;yes, store it, 824 | ; shr eax,16 ;and move over by a word. 825 | ;io_input_386_one_word: 826 | 827 | ; test cx,1 ;a full byte to be stored? 828 | ; je io_input_386_one_byte 829 | ; stosb ;yes, store it. 830 | ;io_input_386_one_byte: 831 | ; pop eax 832 | ; .286 833 | 834 | io_input_done: 835 | 836 | mov cx,bx ;restore the count. 837 | pop si 838 | pop ds 839 | assume ds:nothing 840 | call recv_copy ;tell them that we copied it. 841 | 842 | mov ax,cs ;restore our ds. 843 | mov ds,ax 844 | assume ds:code 845 | 846 | recv_discard: 847 | loadport 848 | setport PORT_CmdStatus 849 | pushf 850 | cli 851 | mov ax,CMD_RXDISCARD 852 | out dx,ax 853 | recv_discard_1: 854 | in ax,dx ;wait for the command to finish. 855 | test ax,ST_BUSY 856 | jne recv_discard_1 857 | popf 858 | 859 | mov early_bytes,0 860 | 861 | jmp recv_another 862 | recv_exit: 863 | ret 864 | 865 | 866 | public timer_isr 867 | timer_isr: 868 | ;if the first instruction is an iret, then the timer is not hooked 869 | iret 870 | 871 | ;any code after this will not be kept. Buffers used by the program, if any, 872 | ;are allocated from the memory between end_resident and end_free_mem. 873 | public end_resident,end_free_mem 874 | end_resident label byte 875 | end_free_mem label byte 876 | 877 | 878 | public usage_msg, mca_usage_msg 879 | mca_usage_msg label byte 880 | usage_msg db "usage: 3c509 [options] [id_port]",CR,LF,'$' 881 | 882 | public copyright_msg 883 | copyright_msg db "Packet driver for a 3c509, version ",'0'+(majver / 10),'0'+(majver mod 10),".",'0'+version,CR,LF 884 | db "Portions Copyright 1992, Crynwr Software",CR,LF 885 | db "8088/8086 support by Nestor a.k.a. DistWave",CR,LF,'$' 886 | no_isa_msg db CR,LF 887 | db "No 3c509 found. Use a different id_port value. Default is 0x110.",CR,LF,'$' 888 | reading_msg db "Reading EEPROM.",'$' 889 | 890 | multiple_msg db "Multiple 3C509s found, specify i/o port",CR,LF,'$' 891 | wrong_port_msg db "No 3C509 board found at specified i/o port",CR,LF,'$' 892 | eisa_in_isa_msg db "EISA configured board in ISA slot",CR,LF,'$' 893 | 894 | int_no_name db "Interrupt number ",'$' 895 | io_addr_name db "I/O port ",'$' 896 | aui_xcvr_msg db "Using AUI transceiver",CR,LF,'$' 897 | bnc_xcvr_msg db "Using BNC (10Base2) transceiver",CR,LF,'$' 898 | tp_xcvr_msg db "Using Twisted Pair (10BaseT) transceiver",CR,LF,'$' 899 | id_port_name db "ID port ",'$' 900 | 901 | ;called when you're ready to receive interrupts. 902 | extrn set_recv_isr: near 903 | 904 | ;enter with si -> argument string, di -> dword to store. 905 | ;if there is no number, don't change the number. 906 | extrn get_number: near 907 | 908 | ;enter with dx -> argument string, di -> dword to print. 909 | extrn print_number: near 910 | 911 | ;-> the unique Ethernet address of the card. Filled in by the etopen routine. 912 | extrn rom_address: byte 913 | 914 | ;-> current address. Normally the same as rom_address, unless changed 915 | ;by the set_address() call. 916 | extrn my_address: byte 917 | 918 | address_configuration dw ? 919 | resource_configuration dw ? 920 | 921 | is_10base2 db 0 922 | is_10baseT db 0 923 | 924 | id_port dw 110h,0 925 | scratch dw 0,0 ;for multi-board support 926 | board_number db 0 927 | 928 | ;print the character in al. 929 | extrn chrout: near 930 | 931 | ;print a crlf 932 | extrn crlf: near 933 | 934 | ;parse_args is called with si -> first parameter (CR if none). 935 | public parse_args 936 | parse_args: 937 | ;exit with nc if all went well, cy otherwise. 938 | mov di,offset id_port 939 | call get_number 940 | clc 941 | ret 942 | 943 | 944 | public etopen 945 | etopen: 946 | ;initialize the driver. Fill in rom_address with the assigned address of 947 | ;the board. Exit with nc if all went well, or cy, dx -> $ terminated error msg. 948 | ;if all is okay, 949 | ; cmp is_186,0 ;this version requires a 186 or better. 950 | ; jne etopen_1 951 | ; mov dx,offset needs_186_msg 952 | ; stc 953 | ; ret 954 | ;etopen_1: 955 | 956 | ; cmp is_386,0 ;can we do a real insd? 957 | ; je etopen_2 958 | ;overlay the repinsd routine with a real "rep insd;nop" 959 | ; mov word ptr repinsd+0,066h+0f3h*256 960 | ; mov word ptr repinsd+2,06dh+090h*256 961 | ;etopen_2: 962 | 963 | cmp is_eisa,0 964 | jne etopen_eisa 965 | jmp etopen_isa 966 | etopen_eisa: 967 | mov cx,0fh 968 | eisa_search: 969 | mov dx,cx ;move it into the first nibble. 970 | shl dx,12 971 | or dx,0c80h 972 | in ax,dx ;look for the manufacturer's ID 973 | cmp ax,EISA_MANUFACTURER_ID 974 | jne eisa_search_1 975 | inc dx 976 | inc dx 977 | in ax,dx ;look for the product ID 978 | and ax,PRODUCT_ID_MASK 979 | cmp ax,ISA_PRODUCT_ID 980 | je eisa_found 981 | eisa_search_1: 982 | loop eisa_search 983 | jmp etopen_isa ;;; if it's not EISA-configured, try ISA. 984 | 985 | eisa_found: 986 | and dx,0f000h 987 | mov io_addr,dx 988 | 989 | loadport 990 | setwin WNO_SETUP 991 | 992 | setport PORT_CfgAddress 993 | in ax,dx 994 | mov address_configuration,ax 995 | 996 | setport PORT_CfgResource 997 | in ax,dx 998 | mov resource_configuration,ax 999 | 1000 | setport PORT_EECmd 1001 | mov si,offset read_ee_eisa 1002 | call read_eaddr 1003 | 1004 | jmp have_configuration 1005 | 1006 | etopen_isa: 1007 | and id_port,01f0h ;isolate only the bits we can use. 1008 | call write_id_pat 1009 | 1010 | mov al,ID_GLOBAL_RESET ;reset the adapter. 1011 | out dx,al 1012 | call delay_27_5ms ;wait for 310 us. 1013 | 1014 | call write_id_pat 1015 | 1016 | mov al,SET_TAG_REGISTER 1017 | out dx,al 1018 | 1019 | push dx 1020 | mov dx,offset reading_msg 1021 | mov ah,9 1022 | int 21h 1023 | pop dx 1024 | 1025 | xor al,al 1026 | xor di,di 1027 | mov cx,16 1028 | read_isa_checksum: 1029 | push ax 1030 | push cx 1031 | call read_ee_isa 1032 | mov bx,ax 1033 | mov al,'.' 1034 | call chrout 1035 | pop cx 1036 | pop ax 1037 | cmp al,3 1038 | jne read_isa_checksum_not_3 1039 | push bx 1040 | and bx,0f0ffh 1041 | cmp bx,09050h 1042 | pop bx 1043 | jne not_found_isa 1044 | read_isa_checksum_not_3: 1045 | cmp al,7 1046 | jne read_isa_checksum_not_7 1047 | cmp bx,6d50h 1048 | jne not_found_isa 1049 | read_isa_checksum_not_7: 1050 | cmp al,8 1051 | je read_isa_checksum_1 1052 | cmp al,9 1053 | je read_isa_checksum_1 1054 | cmp al,0dh 1055 | je read_isa_checksum_1 1056 | cmp al,0fh ;if it's the checksum itself, just xor. 1057 | je read_isa_checksum_2 1058 | xor bh,bl ;accumulate checksum in high byte. 1059 | xor bl,bl ;leave low byte alone. 1060 | jmp short read_isa_checksum_2 1061 | read_isa_checksum_1: 1062 | xor bl,bh ;accumulate checksum in low byte. 1063 | xor bh,bh ;leave high byte alone. 1064 | read_isa_checksum_2: 1065 | xor di,bx ;include previous checksum. 1066 | 1067 | inc al ;and go to the next register. 1068 | loop read_isa_checksum 1069 | 1070 | call crlf 1071 | 1072 | or di,di ;did the checksum compare? 1073 | je found_isa ;yes. 1074 | not_found_isa: 1075 | mov dx,offset no_isa_msg 1076 | stc 1077 | ret 1078 | 1079 | found_isa: 1080 | mov si,offset read_ee_isa 1081 | call read_eaddr 1082 | 1083 | mov al,EE_ADDR_CONFIGURATION 1084 | call read_ee_isa 1085 | mov address_configuration,ax 1086 | 1087 | mov al,EE_RESOURCE_CONFIGURATION 1088 | call read_ee_isa 1089 | mov resource_configuration,ax 1090 | 1091 | mov al,ACTIVATE_VULCAN 1092 | out dx,al 1093 | 1094 | mov ax,address_configuration 1095 | and ax,1fh 1096 | mov cl,4 1097 | shl ax,cl 1098 | add ax,MIN_IO_BASE_ADDR 1099 | mov io_addr,ax 1100 | 1101 | have_configuration: 1102 | mov ax,address_configuration 1103 | and ax,BNC_XCVR or TP_XCVR or AUI_XCVR ;include all the bits. 1104 | cmp ax,BNC_XCVR ;does it match BNC? 1105 | jne not_10base2 1106 | inc is_10base2 1107 | not_10base2: 1108 | cmp ax,TP_XCVR ;does it match TP? 1109 | jne not_10baseT 1110 | inc is_10baseT 1111 | not_10baseT: 1112 | 1113 | mov bx,resource_configuration 1114 | mov cl,12 ;move it over where we need it. 1115 | shr bx,cl 1116 | mov int_no,bl 1117 | 1118 | loadport 1119 | setwin WNO_DIAGNOSTICS 1120 | setport PORT_MediaStatus 1121 | in ax,dx 1122 | or ax,MEDIA_LBEATENABLE or MEDIA_JABBERENABLE 1123 | out dx,ax 1124 | 1125 | setwin WNO_SETUP ;select Window 0 1126 | 1127 | mov ax,CMD_TXENABLE ;Enable the transmitter 1128 | out dx,ax 1129 | 1130 | mov ax,CMD_RXENABLE ;Enable the receiver 1131 | out dx,ax 1132 | 1133 | ;Enable RX Complete interrupts 1134 | mov ax,CMD_SETINTMASK + INT_RXCOMPLETE 1135 | ;mov ax,CMD_SETINTMASK + INT_RXCOMPLETE + INT_RXEARLY 1136 | out dx,ax 1137 | 1138 | mov ax,CMD_SETRZMASK + 0feh ;Enable all the status bits. 1139 | out dx,ax 1140 | 1141 | mov ax,CMD_SETTXSTART + 0 ;start transmitting after this many bytes. 1142 | out dx,ax 1143 | 1144 | mov ax,CMD_SETRXEARLY + 0 ;receive after this many bytes. 1145 | out dx,ax 1146 | 1147 | cmp is_10base2,0 ;coax? 1148 | je not_10base2_1 ;no. 1149 | mov ax,CMD_STARTINTXCVR ;start internal transciever 1150 | out dx,ax 1151 | call delay_27_5ms 1152 | not_10base2_1: 1153 | 1154 | setport PORT_CfgControl ;position to the CCR 1155 | mov al,ENABLE_ADAPTER ;Enable the adapter. 1156 | out dx,al 1157 | 1158 | call rcv_mode_3 1159 | 1160 | mov si,offset rom_address ;set our address. 1161 | mov cx,EADDR_LEN 1162 | call set_address_4 1163 | ;sets the window to WNO_OPERATING. 1164 | 1165 | call set_recv_isr 1166 | 1167 | mov al, int_no ; Get board's interrupt vector 1168 | add al, 8 1169 | cmp al, 8+8 ; Is it a slave 8259 interrupt? 1170 | jb set_int_num ; No. 1171 | add al, 70h - 8 - 8 ; Map it to the real interrupt. 1172 | set_int_num: 1173 | xor ah, ah ; Clear high byte 1174 | mov int_num, ax ; Set parameter_list int num. 1175 | 1176 | clc 1177 | ret 1178 | ;if we got an error, 1179 | stc 1180 | ret 1181 | 1182 | 1183 | write_id_pat: 1184 | ;write the 3c509 ID pattern to the ID port. 1185 | mov dx,id_port 1186 | xor al,al 1187 | out dx,al ;select the ID port. 1188 | out dx,al ;reset hardware pattern generator 1189 | mov cx,0ffh 1190 | mov al,0ffh 1191 | write_id_pat_1: 1192 | out dx,al ;keep writing matching values... 1193 | shl al,1 1194 | jnc write_id_pat_2 1195 | xor al,0cfh 1196 | write_id_pat_2: 1197 | loop write_id_pat_1 1198 | ret 1199 | 1200 | read_eaddr: 1201 | ;enter with dx = eeprom register, si -> routine to read eeprom. 1202 | push cs 1203 | pop es 1204 | mov di,offset rom_address 1205 | 1206 | mov al,EE_TCOM_NODE_ADDR_WORD0 ;read the Ethernet address. 1207 | call si 1208 | xchg ah,al 1209 | stosw 1210 | mov al,EE_TCOM_NODE_ADDR_WORD1 1211 | call si 1212 | xchg ah,al 1213 | stosw 1214 | mov al,EE_TCOM_NODE_ADDR_WORD2 1215 | call si 1216 | xchg ah,al 1217 | stosw 1218 | ret 1219 | 1220 | 1221 | read_ee_eisa: 1222 | ;enter with al = EEPROM address to read, dx = PORT_EECmd 1223 | ;exit with ax = data. 1224 | or al,READ_EEPROM 1225 | out dx,al 1226 | read_ee_eisa_1: 1227 | in ax,dx 1228 | test ax,EE_BUSY 1229 | jnz read_ee_eisa_1 1230 | add dx,PORT_EEData - PORT_EECmd ;move to data register. 1231 | in ax,dx 1232 | add dx,PORT_EECmd - PORT_EEData ;move back to command register. 1233 | ret 1234 | 1235 | 1236 | read_ee_isa: 1237 | ;enter with al = EEPROM address to read, dx = address of ID port. 1238 | ;exit with ax = data, cx = 0. 1239 | push bx 1240 | or al,READ_EEPROM 1241 | out dx,al 1242 | ;wait 400 us here. 1243 | call delay_27_5ms 1244 | mov cx,16 1245 | read_ee_isa_1: 1246 | in al,dx 1247 | shr al,1 ;put it into the carry. 1248 | rcl bx,1 ;shift it into bx. 1249 | loop read_ee_isa_1 1250 | mov ax,bx 1251 | pop bx 1252 | ret 1253 | 1254 | 1255 | delay_27_5ms: 1256 | ;delay one timeout period, which is 27.5 ms. 1257 | mov ax,1 1258 | delay: 1259 | ;delay AX timeout periods, each of which is 27.5 ms. 1260 | call set_timeout 1261 | delay_1: 1262 | call do_timeout 1263 | jnz delay_1 1264 | ret 1265 | 1266 | 1267 | public print_parameters 1268 | print_parameters: 1269 | ;echo our command-line parameters 1270 | mov di,offset int_no 1271 | mov dx,offset int_no_name 1272 | call print_number 1273 | mov di,offset io_addr 1274 | mov dx,offset io_addr_name 1275 | call print_number 1276 | mov dx,offset aui_xcvr_msg 1277 | cmp is_10base2,0 ;coax? 1278 | je print_parameters_1 1279 | mov dx,offset bnc_xcvr_msg 1280 | print_parameters_1: 1281 | cmp is_10baseT,0 ;tp? 1282 | je print_parameters_2 1283 | mov dx,offset tp_xcvr_msg 1284 | print_parameters_2: 1285 | mov ah,9 1286 | int 21h 1287 | mov di,offset id_port 1288 | mov dx,offset id_port_name 1289 | call print_number 1290 | ret 1291 | 1292 | code ends 1293 | 1294 | end 1295 | -------------------------------------------------------------------------------- /3c509.com: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackerb9/3C509B-nestor/20384c78615159b9c5162fb1b71d4a55940efbcc/3c509.com -------------------------------------------------------------------------------- /3c5x9x/3C5X9.COM: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackerb9/3C509B-nestor/20384c78615159b9c5162fb1b71d4a55940efbcc/3c5x9x/3C5X9.COM -------------------------------------------------------------------------------- /3c5x9x/3C5X9CFG.EXE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackerb9/3C509B-nestor/20384c78615159b9c5162fb1b71d4a55940efbcc/3c5x9x/3C5X9CFG.EXE -------------------------------------------------------------------------------- /3c5x9x/3C5X9ENG.HLP: -------------------------------------------------------------------------------- 1 | 3C5X9,24,18,28,24,27,23,17,26,22,1,9,25,3,34,32,29,29,2,7,6,12,11,10,5,14 2 | 3C5X9,8,16,15,4,33,20,19,21,13 3 | 4 | ERROR 5 | 6 | 7 | Unable to locate topic. No information was found in the help file. 8 | 9 | This message appears because there is a problem in accessing the 10 | information in the help file. Press [Esc] and exit the program. 11 | Locate the original help file that came with the program. 12 | 13 | 14 | About the Program 15 | NIC Information 16 | NIC Statistics 17 | Boot PROM 18 | Command Line Help 19 | Configuring the NIC 20 | Echo Server 21 | EISA Configuration 22 | Exit 23 | File Options for NIC Configuration 24 | File Options for Test Results 25 | File Options for Test Setup 26 | Full Duplex 27 | Installing Network Drivers 28 | Interrupt Request Level 29 | I/O Base Address 30 | Load Configuration File 31 | Load Test Setup File 32 | Maximum Modem Speed 33 | Network Driver Optimization 34 | Plug and Play Capabilities 35 | Print Configuration Settings 36 | Print Test Results 37 | Print Test Setup File 38 | Run Tests 39 | Save Configuration File 40 | Save Test Results 41 | Save Test Setup File 42 | Select NIC 43 | Technical Support 44 | Test Definitions 45 | Test Setup 46 | Transceiver Type 47 | Troubleshooting 48 | 49 | About the Program 50 | 51 | The Configuration and Diagnostic program lets you software-configure 52 | the installed NICs and run various levels of diagnostic tests. 53 | 54 | The program is window-based and composed of dialog boxes. To move 55 | within the dialog boxes, you can use: 56 | 57 | - A mouse 58 | - Specific keys such as [Tab] and arrow keys 59 | - Speed keys (press [Alt]+[Highlighted Key]) 60 | - Function keys 61 | 62 | At the bottom of each dialog box are command buttons. Each command 63 | button performs an action within the dialog box, such as saving the 64 | information or exiting the dialog box. When you highlight a command 65 | button, it is defined at the bottom of the screen. 66 | 67 | For more information on any dialog box press [F1]. 68 | 69 | Command Buttons (for the help screens): 70 | --------------- 71 | : Displays all of the help information that is available in 72 | the program. Scroll through the list to highlight a title 73 | and press [Enter] to access help information. 74 | : Exits this help screen and returns to the main window. 75 | 76 | NIC Information 77 | 78 | This menu item lets you view specific NIC information. Only those 79 | settings that apply to the NIC are listed. For example, the 80 | settings for an ISA NIC will differ from those of an EISA or a 81 | Micro Channel NIC. 82 | 83 | Command Buttons: 84 | --------------- 85 | : Exits the dialog box and returns to the main window. 86 | 87 | NIC Statistics 88 | 89 | This menu item displays the network statistics maintained by the 90 | NIC. The definitions are: 91 | 92 | Packets transmitted: The number of packets transmitted by the 93 | NIC. 94 | 95 | Bytes transmitted: The number of bytes transmitted by the NIC. 96 | 97 | Transmit deferrals: The number of times the NIC deferred to 98 | another transmitting node while waiting to transmit. This number 99 | increases as other stations contend with this NIC for access 100 | to the Ethernet. 101 | 102 | Packets transmitted after exactly one collision: Collisions are a 103 | normal occurrence on an Ethernet; however, excessive collisions 104 | may indicate problems. If this occurs, contact your network 105 | administrator. 106 | 107 | Packets transmitted after multiple collisions: Collisions are a 108 | normal occurrence on an Ethernet; however, excessive collisions 109 | may indicate problems. If this occurs, contact your network 110 | administrator. 111 | 112 | Packets not transmitted after maximum collisions: Collisions are a 113 | normal occurrence on an Ethernet; however, excessive collisions 114 | may indicate problems. If this occurs, contact your network 115 | administrator. 116 | 117 | Late collisions: A late collision occurs when another node on the 118 | Ethernet does not properly defer once the NIC has started 119 | transmitting. If a large number of late collisions occur, 120 | contact your network administrator. 121 | 122 | Packets transmitted with no CD heartbeat: If you are using an 123 | external transceiver, a non-zero value for this number may 124 | mean the transceiver does not support CD (collision detect) 125 | heartbeat, or that the transceiver is not performing properly. 126 | Consult your network administrator. 127 | 128 | Packets transmitted with carrier sense loss: This normally occurs as 129 | a result of collisions. For more information, refer to an 130 | Ethernet reference guide. 131 | 132 | Packets received: The number of packets received by the NIC. 133 | 134 | Bytes received: The number of bytes received by the NIC. 135 | 136 | Packets received with CRC error: Each packet sent on an Ethernet 137 | has a calculated CRC (cyclic redundancy check) appended to it. 138 | When the packet is received, this CRC is compared against the 139 | calculated CRC. A difference in the CRC indicates the packet 140 | was corrupted, most likely by line noise. A large value for this 141 | statistic indicates noise on the network. 142 | 143 | Packets received with framing error: Similar to CRC error. A small 144 | number of these errors may be normal. 145 | 146 | Packets received with oversize error: Oversize packets are those 147 | greater than 1514 bytes. Even though such packets are 148 | theoretically illegal under Ethernet, they do occur on certain 149 | live Ethernet networks. 150 | 151 | Packets received with undersize error: Undersize packets are those 152 | less than 60 bytes. Typically these are simply collision 153 | fragments. There are no problems on the network. 154 | 155 | Packets not received: Packets may not be received if the 156 | NIC/protocol is still busy with previous packets. Normally 157 | the higher-level protocol will retransmit the packets with no 158 | ill effects other than some performance degradation. 159 | 160 | Command Button: 161 | -------------- 162 | : Exits the dialog box and returns to the main window. 163 | 164 | Boot PROM 165 | 166 | NOTE: This software option applies only to the EtherLink III 167 | ISA and EISA NICs. 168 | 169 | The boot PROM lets the computer start DOS operations through the 170 | network without using a local startup disk. The Disabled setting 171 | indicates that no boot PROM is installed or that you do not want it 172 | active. 173 | 174 | The other settings are sizes of the installed boot PROM. When you 175 | select a size, the boot PROM addresses appear in the second list box. 176 | A different group of addresses appears for each size. The base 177 | address specifies that portion of the computer's address space that 178 | will be used for the boot PROM. 179 | 180 | Command Line Help 181 | 182 | You can configure and test the NIC from the command line. To get 183 | help from the command line, exit this program and type: 184 | 185 | 3C5X9CFG HELP 186 | 187 | You can get help information for specific commands such as RUN by 188 | typing: 189 | 190 | 3C5X9CFG HELP RUN 191 | 192 | For more information, refer to the NIC user guide. 193 | 194 | Configuring the NIC 195 | 196 | This menu item lets you change the configuration settings on the 197 | selected NIC. 198 | 199 | Use the arrow keys to scroll through the list of options. To 200 | view all of the possible settings under each option, highlight one 201 | of the options and press [Enter]. Another dialog box appears for 202 | each separate option. Use the arrow keys to scroll through the 203 | settings. 204 | 205 | The available options and corresponding default settings for ISA 206 | NICs are: 207 | 208 | I/O Base Address [300h] 209 | Interrupt Request Level [10] 210 | Boot PROM [Disabled] 211 | Transceiver Type [On-board*] 212 | Network Driver Optimization [DOS Client] 213 | Maximum Modem Speed [9600 Baud] 214 | Plug and Play Capability** [Enabled] 215 | Full Duplex** [Disabled] 216 | 217 | *For 3C509, the default setting is either On-board Coax or 218 | On-board TP depending on which NIC you are configuring. 219 | For a Combo board, the default setting is On-board Coax. For 220 | 3C509B, the default setting is Auto Select for all boards 221 | except for TPO (stealth) board, which always uses On-board TP. 222 | 223 | **For 3C509B only. 224 | 225 | 226 | The available options and corresponding default settings for EISA and 227 | MCA NICs are: 228 | 229 | Network Driver Optimization [DOS Client] 230 | Maximum Modem Speed [9600 Baud] 231 | 232 | To save any changes to the NIC, press [Tab] to highlight 233 | and press [Enter]. All setting changes are saved automatically to 234 | the NIC. You can also save the settings to a file by using 235 | the save option in the File Options dialog box. 236 | 237 | Command Buttons: 238 | --------------- 239 | : Default action. Press [Enter]. Auto Configure 240 | automatically configures the board for ISA use. 241 | The program selects I/O Base Address, Interrupt 242 | Request Level, and Transceiver Type settings that 243 | will not conflict with other NICs or devices in 244 | your computer. 245 | : Use the arrow keys to highlight one of the options. 246 | Press [Tab] to highlight and press [Enter]. 247 | A second dialog box appears with the available 248 | settings for that option. 249 | : Press [Tab] to highlight this command button and 250 | press [Enter]. A second dialog box appears. For 251 | more information on the load, save, or print 252 | options, press [F1] after selecting this option. 253 | : Saves any setting changes to the NIC. 254 | : Ends this operation and returns to the main window. 255 | 256 | Echo Server 257 | 258 | To run the Group 3 test on your NIC you need a second computer 259 | set up as an echo server. The echo server receives packets from the 260 | NIC being tested and echoes them back. This menu item lets you set 261 | up an echo server. 262 | 263 | The second computer must contain a 3Com NIC. The diagnostic 264 | program that comes with the NIC supports the Configuration and 265 | Diagnostic program's echo server function. You can use any of the 266 | NICs listed below in the echo server: 267 | 268 | EtherLink II or II TP 269 | EtherLink Plus 270 | EtherLink 16 or 16 TP 271 | EtherLink/MC or MC TP 272 | EtherLink/MC 32 273 | EtherLink II/16 or II/16 TP 274 | EtherLink III 275 | 276 | For specific setup information refer to the user guide that accompanied 277 | the 3Com NIC. 278 | 279 | EISA Configuration 280 | 281 | NOTE: This software option does not apply to the EtherLink III 282 | EISA or Micro Channel NICs. 283 | 284 | The EISA configuration is an option setting under the I/O base address 285 | in the Configure NIC dialog box. 286 | 287 | Selecting the EISA setting means the NIC will behave as an EISA 288 | NIC and will identify itself to the EISA computer for automatic 289 | configuration. 290 | 291 | CAUTION: If you are installing the ISA NIC in an EISA computer, 292 | you must configure the NIC for the EISA computer. If you 293 | need to reinstall the NIC in an ISA computer, you must 294 | reconfigure the NIC BEFORE you physically install it in 295 | the ISA computer. 296 | 297 | For instructions on configuring the EISA NIC or reconfiguring the 298 | NIC for an ISA computer, refer to the NIC user guide. 299 | 300 | Exit 301 | 302 | To exit the program you can do one of the following: 303 | 304 | - Go to the Quit menu, highlight Exit, and press [Enter]. 305 | 306 | - Press [F3] while in the main window. 307 | 308 | - Press [Esc] while in the main window. A dialog box appears 309 | asking if you want to quit the program. The default response 310 | is , and it is already highlighted. Press [Enter]. 311 | 312 | File Options for NIC Configuration 313 | 314 | This dialog box lets you load, save, and print the NIC 315 | configuration file. Highlight one of the File Options command buttons 316 | and press [Enter]. Another dialog box appears. 317 | 318 | Command Buttons: 319 | --------------- 320 | : Loads a previously saved configuration file, and changes the 321 | current configuration to that in the file. 322 | : Saves the NIC's currently displayed software 323 | configuration settings to a file. 324 | : Prints the configuration information currently displayed 325 | on the screen. 326 | : Ends this operation and returns to the previous dialog box. 327 | 328 | File Options for Test Results 329 | 330 | This dialog box lets you save and print the current NIC's 331 | diagnostic test results. Highlight one of the File Options command 332 | buttons and press [Enter]. Another dialog box appears. 333 | 334 | Command Buttons: 335 | --------------- 336 | : Saves your diagnostic test results to a file. 337 | : Prints the diagnostic test results. 338 | : Ends this operation and returns to the previous dialog 339 | box. 340 | 341 | File Options for Test Setup 342 | 343 | This dialog box lets you load, save, and print the NIC's diagnostic 344 | test setup file. Highlight one of the File Options command buttons and 345 | press [Enter]. Another dialog box appears. 346 | 347 | Command Buttons: 348 | --------------- 349 | : Loads a previously saved test setup file. The test 350 | configuration previously saved can be run on the installed 351 | NIC. 352 | : Saves the test setup selections currently displayed on the 353 | screen to a file. 354 | : Prints the test setup currently displayed on the screen. 355 | : Ends this operation and returns to the previous dialog box. 356 | 357 | Full Duplex 358 | 359 | This option lets you disable or enable the full duplex feature on the 360 | NIC. Ensure the NIC is connected to hub/repeater which supports 361 | full duplex before enabling the full duplex feature of the NIC. 362 | Otherwise, it will bring down the whole network. 363 | 364 | Installing Network Drivers 365 | 366 | The EtherDisk diskette contains the network drivers for the NIC. 367 | The utility program that automatically installs the drivers is accessed 368 | through the EtherDisk main menu. Exit this program to return to the 369 | main menu of the EtherDisk diskette. 370 | 371 | Interrupt Request Level 372 | 373 | NOTE: This software option applies only to the EtherLink III ISA 374 | NICs. 375 | 376 | This option specifies the interrupt request level that is used by the 377 | NIC for communication between the NIC and the computer. The 378 | interrupt request level is the communications channel through which a 379 | device issues interrupts to the interrupt handler of your computer. 380 | Make sure that no other device is using the same setting. 381 | 382 | I/O Base Address 383 | 384 | NOTE: This software option applies only to the EtherLink III 385 | ISA NICs. 386 | 387 | This option specifies the portion of the computer's I/O address space 388 | that will be used by the NIC for communications between the NIC 389 | and the computer. The NIC uses 16 bytes of I/O space, starting at 390 | the I/O base address. Make sure that no other device is using any 391 | I/O addresses in the same range. 392 | 393 | If you select the EISA setting, the NIC will identify itself to 394 | the EISA computer for automatic configuration. In EISA mode, the 395 | NIC uses slot-specific I/O addressing. 396 | 397 | Load Configuration File 398 | 399 | The NIC configuration file contains the option settings that were 400 | previously selected and saved for the NIC. This option retrieves 401 | the configuration file. 402 | 403 | Definition of Fields: 404 | -------------------- 405 | Filename: Enter the NIC configuration filename. The default 406 | name is 3C5X9.SET. You can also enter *.* to list all 407 | the files in a specific directory. You can include the 408 | DRIVE\PATH\FILENAME. 409 | Directory is: Displays the current drive and directory. 410 | Files: Lists all the files in the current directory. 411 | Directories: Lists all directories visible in the current drive and 412 | all the drives on the computer. 413 | 414 | There are three methods available to load the configuration file. 415 | Once the file is loaded, the program returns to the NIC 416 | Configuration dialog box. 417 | 418 | - Method 1: Type in the filename in the Filename text edit box and 419 | press [Enter]. Your file is loaded. 420 | 421 | - Method 2: If you first need to locate the file: 422 | 423 | a. Type X:*.* in the Filename text edit box, where X is 424 | the drive the file is located in. For example: D:*.* 425 | b. Press [Tab] to highlight the Files list box. 426 | c. Use the arrow keys to highlight the file you want to 427 | load. Press [Enter]. Your file is loaded. 428 | 429 | - Method 3: With the third method you are changing the directory or 430 | drive to locate the file. 431 | 432 | a. Press [Tab] to highlight the Directories list box. 433 | b. Use the arrow keys to highlight the directory or drive 434 | your file is located in. Press [Enter]. 435 | c. Press [Tab] to highlight the Files list box. 436 | d. Use the arrow keys to highlight the file you want to 437 | load. Press [Enter]. Your file is loaded. 438 | 439 | Command Buttons: 440 | --------------- 441 | : Default action. Loads the NIC configuration file 442 | specified in the Filename text edit box. When the operation 443 | is completed, the program returns to the NIC 444 | Configuration dialog box. 445 | : Ends this operation and returns to the File Options dialog 446 | box. 447 | 448 | Load Test Setup File 449 | 450 | The test setup file contains the diagnostic test settings that were 451 | previously selected and saved for the NIC. This option retrieves 452 | the file. 453 | 454 | Definition of Fields: 455 | -------------------- 456 | Filename: Enter the test setup filename. The default name is 457 | 3C5X9.TST NIC. You can also enter *.* to list all 458 | the files in a specific directory. You can include 459 | the DRIVE\PATH\FILENAME. 460 | Directory is: Displays the current drive and directory. 461 | Files: Lists all the files in the current directory. 462 | Directories: Lists all directories visible in the current drive and 463 | all the drives on the computer. 464 | 465 | There are three methods available to load the test setup file. Once 466 | the file is loaded, the program returns you to the Test Setup dialog 467 | box. 468 | 469 | - Method 1: Type in the filename in the Filename text edit box and 470 | press [Enter]. Your file is loaded. 471 | 472 | - Method 2: If you first need to locate the file: 473 | 474 | a. Type X:*.* in the Filename text edit box, where X is 475 | the drive the file is located in. For example: D:*.* 476 | b. Press [Tab] to highlight the Files list box. 477 | c. Use the arrow keys to highlight the file you want to 478 | load. Press [Enter]. Your file is loaded. 479 | 480 | - Method 3: If you need to change the directory or drive to locate 481 | the file: 482 | 483 | a. Press [Tab] to highlight the Directories list box. 484 | b. Use the arrow keys to highlight the directory or drive 485 | the file is located in. Press [Enter]. 486 | c. Press [Tab] to highlight the Files list box. 487 | d. Use the arrow keys to highlight the file you want to 488 | load. Press [Enter]. Your file is loaded. 489 | 490 | To run the test setup file, go to the Run menu item. Highlight 491 | and press [Enter]. 492 | 493 | Command Buttons: 494 | --------------- 495 | : Default action. Loads the test setup file specified in the 496 | Filename text edit box. When the operation is completed, 497 | the program returns to the Test Setup dialog box. 498 | : Ends this operation and returns to the File Options dialog 499 | box. 500 | 501 | Maximum Modem Speed 502 | 503 | Selecting a modem speed tells the NIC how long it can disable 504 | interrupts without causing problems with the serial port. The lower 505 | the modem speed, the longer the NIC can keep interrupts disabled. 506 | On slower computers, running with longer disabled interrupts can 507 | improve network performance. On those computers, changing the option 508 | setting to 2400, 1200, or No Modem may improve performance. On faster 509 | computers, there is little performance difference among the settings. 510 | 511 | If you experience problems with your modem, such as dropped characters 512 | or excessive retries, selecting a higher option setting should help. 513 | If the problem is not due to the EtherLink III driver, changing the 514 | option setting will not make a difference. 515 | 516 | CAUTION: The default value (9600 baud) will work whether you have a 517 | modem or not, or even if the modem is slower than the default (for 518 | example, 2400 baud). Do not change the default option setting unless 519 | you experience problems. 520 | 521 | If you experience compatibility problems between your NIC and 522 | another device in the system other than a modem, selecting a higher 523 | option setting may help. 524 | 525 | Network Driver Optimization 526 | 527 | This option specifies whether to optimize the network driver for a 528 | DOS client, a Microsoft Windows or IBM OS/2 client, or a server 529 | environment. Changing this option to match your system may improve 530 | the network performance. The responsiveness of your system in 531 | performing network tasks may also improve. The driver will attempt 532 | to optimize various parameters, such as CPU utilization, to the 533 | environment specified. For example, it may use a larger percentage 534 | of the CPU under DOS in order to improve network throughput. On a 535 | server this may be inappropriate, so the driver will attempt to 536 | minimize CPU utilization in a server environment. 537 | 538 | Plug and Play Capabilities 539 | 540 | Enabling the Plug and Play Capabilities will use the ISA Plug and 541 | Play method to discover and configure the 3C509B card. If disabled, 542 | the old contention test will be used to discover the 3C509B card. 543 | 544 | Print Configuration Settings 545 | 546 | To print a copy of the currently displayed configuration settings, use 547 | the arrow keys to select the appropriate printer port and printer type. 548 | 549 | To print more than one copy, press [Tab] to access the Copies box. 550 | Type in the number of copies you want to print, up to a maximum of 99 551 | copies. 552 | 553 | To print the settings previously saved to a file, load the file so that 554 | the settings are the current ones displayed on the screen and then 555 | print. 556 | 557 | Command Buttons: 558 | --------------- 559 | : Default action. Prints the displayed NIC configuration 560 | settings. When the operation is completed, the program 561 | returns to the NIC Configuration dialog box. 562 | : Ends this operation and returns to the File Options dialog 563 | box. 564 | 565 | Print Test Results 566 | 567 | To print a copy of the diagnostic test results, use the arrow keys to 568 | select the appropriate printer port and printer type. 569 | 570 | To print more than one copy, press [Tab] to access the Copies box. 571 | Type in the number of copies you want to print, up to a maximum of 99 572 | copies. 573 | 574 | Command Buttons: 575 | --------------- 576 | : Default action. Prints the NIC diagnostic test 577 | results. When the operation is completed, the program 578 | returns to the Run dialog box. 579 | : Ends this operation and returns to the File Options 580 | dialog box. 581 | 582 | Print Test Setup File 583 | 584 | To print a copy of the currently displayed diagnostic test setup, use 585 | the arrow keys to select the appropriate printer port and printer 586 | type. 587 | 588 | To print more than one copy, press [Tab] to access the Copies box. 589 | Type in the number of copies you want to print, up to a maximum of 99 590 | copies. 591 | 592 | Command Buttons: 593 | --------------- 594 | : Default action. Prints the NIC diagnostic test 595 | settings. When the operation is completed, the program 596 | returns to the Test Setup dialog box. 597 | : Ends this operation and returns to the File Options dialog 598 | box. 599 | 600 | Run Tests 601 | 602 | This menu item displays the current status of the diagnostic tests. 603 | Use the command buttons to start or stop (abort) any of the test groups. 604 | 605 | Definition of Fields: 606 | -------------------- 607 | Test Results. Displays the diagnostic test results for the selected 608 | NIC. Each line in the list box contains: 609 | 610 | - The test name 611 | - The number of times the test was completed 612 | - The results of the test 613 | 614 | The test results field can change as the tests are run. The value of 615 | the test results field is one of the following: 616 | 617 | - Not Tested: the test was not run 618 | - Passed: the NIC passed the test 619 | - !Failed: the NIC failed the test 620 | - DISABLED: the test was not selected 621 | 622 | Diagnostic Tests Status. The responses to the current status of the 623 | diagnostic tests include: 624 | 625 | - Waiting for 626 | - Completed Successfully 627 | - Testing Halted 628 | - Error-Halted 629 | - Completed with Error 630 | - Testing in Progress 631 | - No Tests Are Enabled 632 | 633 | Command Buttons: 634 | --------------- 635 | : Begins the diagnostic tests. 636 | : Restarts the diagnostic tests without resetting the 637 | counters. 638 | : Stops the tests that are currently running. 639 | : Accesses the Test Setup dialog box, but only if the 640 | diagnostic tests are not being run. 641 | : Lists a test, the number of times the test completed 642 | successfully, the number of times the test failed, and 643 | the reasons it failed. 644 | : Lists the NIC's statistics. You can only access 645 | this window if the diagnostic tests are not being run. 646 | : Accesses the Test Results File Options dialog box. 647 | You can only access this window if the diagnostic 648 | tests are not being run. 649 | : Exits this dialog box and returns to the main window. 650 | 651 | Save Configuration File 652 | 653 | This option saves the NIC's software configuration settings to a 654 | file. When this information is saved, the same configuration can be used 655 | on other NICs. 656 | 657 | Definition of Fields: 658 | -------------------- 659 | Filename: Type in an NIC configuration filename. 660 | Directory is: Displays the current drive and directory. 661 | Directories: Lists all directories visible in the current drive and 662 | all of the drives on the computer. 663 | 664 | To save the configuration settings, type in a filename in the Filename 665 | text edit box and press [Enter]. The filename can be up to eight 666 | characters long. The recommended filename extension is .SET. The 667 | default name is 3C5X9.SET. You can also type in a path and save the 668 | file to another directory or drive (DRIVE\PATH\FILENAME). For example: 669 | 670 | D:\CONFIG\3C5X9.SET 671 | 672 | saves the file to the CONFIG directory in drive D. 673 | 674 | Command Buttons: 675 | --------------- 676 | : Default action. Saves the file created in the Filename 677 | text edit box to a specified directory/drive. When the 678 | operation is completed, the program returns to the NIC 679 | Configuration dialog box. 680 | : Ends this operation and returns to the File Options 681 | dialog box. 682 | 683 | Save Test Results 684 | 685 | This option saves the current diagnostic test results to a file. 686 | 687 | NOTE: If you quit the Configuration and Diagnostic program before 688 | saving the test results to a file, it will not be saved. 689 | 690 | Definition of Fields: 691 | -------------------- 692 | Filename: Type in a test results filename. 693 | Directory is: Displays the current drive and directory. 694 | Directories: Lists all directories visible in the current drive and 695 | all the drives on the computer. 696 | 697 | To save the test results, type in a filename in the Filename text 698 | edit box and press [Enter]. Your file will be saved to the current 699 | drive. The filename can be up to eight characters long. The 700 | recommended filename extension is .RPT. The default name is 701 | 3C5X9.RPT. You can also type in a path and save the file to another 702 | directory or drive (DRIVE\PATH\FILENAME). For example: 703 | 704 | D:\RESULTS\3C5X9.RPT 705 | 706 | saves the file to the RESULTS directory in drive D. 707 | 708 | Command Buttons: 709 | --------------- 710 | : Default action. Saves the file created in the Filename text 711 | edit box to the specified directory/drive. When the 712 | operation is completed the program returns to the Run dialog 713 | box. 714 | : Ends this operation and returns to the File Options dialog 715 | box. 716 | 717 | Save Test Setup File 718 | 719 | This option saves the current diagnostic test setup to a file. When 720 | this information is saved, the same diagnostic tests can be run on other 721 | NICs. 722 | 723 | Definition of Fields: 724 | -------------------- 725 | Filename: Type in a test setup filename. 726 | Directory is: Displays the current drive and directory. 727 | Directories: Lists all directories visible in the current drive and 728 | all the drives on the computer. 729 | 730 | To save a test setup file, type in a filename in the Filename text edit 731 | box and press [Enter]. The filename can be up to eight characters 732 | long. The recommended extension is .TST. The default name is 733 | 3C5X9.TST. You can also type in a path and save the file to another 734 | directory or drive (DRIVE\PATH\FILENAME). For example: 735 | 736 | D:\TESTS\3C5X9.TST 737 | 738 | saves the file to the TESTS directory in drive D. 739 | 740 | Command Buttons: 741 | --------------- 742 | : Default action. Saves the file created in the text edit 743 | box to the specified drive/directory. Once the file is 744 | saved, the program returns to the Test Setup dialog box. 745 | : Ends this operation and returns to the File Options menu. 746 | 747 | Select NIC 748 | 749 | The Installed NICs dialog box appears if you have more than one 750 | NIC installed in your computer. Select the NIC you want to 751 | configure and/or test and press [Enter]. 752 | 753 | If you need to change your selection at any time during the program, 754 | go to the Select menu item and choose "Select NIC" to access the 755 | Installed NICs dialog box. 756 | 757 | Command Buttons: 758 | --------------- 759 |