⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcpip.lst

📁 msp430 cs8900a msp430 servermsp430 servermsp430 servermsp430 servermsp430 server
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \                     ??DoNetworkStuff_11:
   \   0001D0   E2C3....     BIC.B   #0x2, &TransmitControl
    300            }
    301          
    302            if (TransmitControl & SEND_FRAME1)
   \                     ??DoNetworkStuff_9:
   \   0001D4   D2B3....     BIT.B   #0x1, &TransmitControl
   \   0001D8   1A28         JNC     ??DoNetworkStuff_12
    303            {
    304              PrepareTCP_DATA_FRAME();                     // build frame w/ actual SEQ, ACK....
   \   0001DA   B012....     CALL    #PrepareTCP_DATA_FRAME
    305              RequestSend(TxFrame1Size);
   \   0001DE   1C42....     MOV.W   &TxFrame1Size, R12
   \   0001E2   B012....     CALL    #RequestSend
    306            
    307              if (Rdy4Tx())                                // CS8900 ready to accept our frame?
   \   0001E6   B012....     CALL    #Rdy4Tx
   \   0001EA   0C93         CMP.W   #0x0, R12
   \   0001EC   0724         JEQ     ??DoNetworkStuff_13
    308              {                                            // (see note above)
    309                CopyToFrame8900((unsigned char *)TxFrame1Mem, TxFrame1Size);
   \   0001EE   1E42....     MOV.W   &TxFrame1Size, R14
   \   0001F2   3C40....     MOV.W   #TxFrame1Mem, R12
   \   0001F6   B012....     CALL    #CopyToFrame8900
   \   0001FA   073C         JMP     ??DoNetworkStuff_14
    310              }
    311              else
    312              {
    313                TCPStateMachine = CLOSED;
   \                     ??DoNetworkStuff_13:
   \   0001FC   C243....     MOV.B   #0x0, &TCPStateMachine
    314                SocketStatus = SOCK_ERR_ETHERNET;          // indicate an error to user
   \   000200   F2405000.... MOV.B   #0x50, &SocketStatus
    315                TCPFlags = 0;                              // clear all flags, stop timers etc.
   \   000206   C243....     MOV.B   #0x0, &TCPFlags
    316              }
    317          
    318              TransmitControl &= ~SEND_FRAME1;             // clear tx-flag
   \                     ??DoNetworkStuff_14:
   \   00020A   D2C3....     BIC.B   #0x1, &TransmitControl
    319            }
    320          }
   \                     ??DoNetworkStuff_12:
   \   00020E   3A41         POP.W   R10
   \   000210   3041         RET
    321          //------------------------------------------------------------------------------
    322          // easyWEB internal function
    323          // handles an incoming broadcast frame
    324          //------------------------------------------------------------------------------

   \                                 In segment CODE, align 2
    325          static void ProcessEthBroadcastFrame(void)
   \                     ProcessEthBroadcastFrame:
    326          {
   \   000000   2182         SUB.W   #0x4, SP
    327            unsigned int TargetIP[2];
    328          
    329            // next two words MUST be read with High-Byte 1st (CS8900 AN181 Page 2)
    330            ReadHB1ST8900(RX_FRAME_PORT);                  // ignore RxStatus Word
   \   000002   4C43         MOV.B   #0x0, R12
   \   000004   B012....     CALL    #ReadHB1ST8900
    331            RecdFrameLength = ReadHB1ST8900(RX_FRAME_PORT);// get real length of frame 
   \   000008   4C43         MOV.B   #0x0, R12
   \   00000A   B012....     CALL    #ReadHB1ST8900
   \   00000E   824C....     MOV.W   R12, &RecdFrameLength
    332              
    333            DummyReadFrame8900(6);                         // ignore DA (FF-FF-FF-FF-FF-FF)
   \   000012   3C400600     MOV.W   #0x6, R12
   \   000016   B012....     CALL    #DummyReadFrame8900
    334            CopyFromFrame8900(&RecdFrameMAC, 6);           // store SA (for our answer)
   \   00001A   3E400600     MOV.W   #0x6, R14
   \   00001E   3C40....     MOV.W   #RecdFrameMAC, R12
   \   000022   B012....     CALL    #CopyFromFrame8900
    335          
    336            if (ReadFrameBE8900() == FRAME_ARP)            // get frame type, check for ARP
   \   000026   B012....     CALL    #ReadFrameBE8900
   \   00002A   3C900608     CMP.W   #0x806, R12
   \   00002E   2C20         JNE     ??ProcessEthBroadcastFrame_0
    337              if (ReadFrameBE8900() == HARDW_ETH10)        // Ethernet frame
   \   000030   B012....     CALL    #ReadFrameBE8900
   \   000034   1C93         CMP.W   #0x1, R12
   \   000036   2820         JNE     ??ProcessEthBroadcastFrame_0
    338                if (ReadFrameBE8900() == FRAME_IP)         // check protocol
   \   000038   B012....     CALL    #ReadFrameBE8900
   \   00003C   3C900008     CMP.W   #0x800, R12
   \   000040   2320         JNE     ??ProcessEthBroadcastFrame_0
    339                  if (ReadFrameBE8900() == IP_HLEN_PLEN)   // check HLEN, PLEN
   \   000042   B012....     CALL    #ReadFrameBE8900
   \   000046   3C900406     CMP.W   #0x604, R12
   \   00004A   1E20         JNE     ??ProcessEthBroadcastFrame_0
    340                    if (ReadFrameBE8900() == OP_ARP_REQUEST)
   \   00004C   B012....     CALL    #ReadFrameBE8900
   \   000050   1C93         CMP.W   #0x1, R12
   \   000052   1A20         JNE     ??ProcessEthBroadcastFrame_0
    341                    {
    342                      DummyReadFrame8900(6);               // ignore sender's hardware address
   \   000054   3C400600     MOV.W   #0x6, R12
   \   000058   B012....     CALL    #DummyReadFrame8900
    343                      CopyFromFrame8900(&RecdFrameIP, 4);  // read sender's protocol address
   \   00005C   2E42         MOV.W   #0x4, R14
   \   00005E   3C40....     MOV.W   #RecdFrameIP, R12
   \   000062   B012....     CALL    #CopyFromFrame8900
    344                      DummyReadFrame8900(6);               // ignore target's hardware address
   \   000066   3C400600     MOV.W   #0x6, R12
   \   00006A   B012....     CALL    #DummyReadFrame8900
    345                      CopyFromFrame8900(&TargetIP, 4);     // read target's protocol address
   \   00006E   2E42         MOV.W   #0x4, R14
   \   000070   0C41         MOV.W   SP, R12
   \   000072   B012....     CALL    #CopyFromFrame8900
    346                      if ((MyIP[0] == TargetIP[0]) && (MyIP[1] == TargetIP[1]))  // is it for us?
   \   000076   A291....     CMP.W   0x0(SP), &MyIP
   \   00007A   0620         JNE     ??ProcessEthBroadcastFrame_0
   \   00007C   92910200.... CMP.W   0x2(SP), &MyIP + 2
   \   000082   0220         JNE     ??ProcessEthBroadcastFrame_0
    347                        PrepareARP_ANSWER();               // yes->create ARP_ANSWER frame
   \   000084   B012....     CALL    #PrepareARP_ANSWER
    348                    }
    349          }
   \                     ??ProcessEthBroadcastFrame_0:
   \   000088   2152         ADD.W   #0x4, SP
   \   00008A   3041         RET
    350          //------------------------------------------------------------------------------
    351          // easyWEB internal function
    352          // handles an incoming frame that passed CS8900's address filter
    353          // (individual addressed = IA)
    354          //------------------------------------------------------------------------------

   \                                 In segment CODE, align 2
    355          static void ProcessEthIAFrame(void)
   \                     ProcessEthIAFrame:
    356          {
   \   000000   0A12         PUSH.W  R10
   \   000002   2182         SUB.W   #0x4, SP
    357            unsigned int TargetIP[2];
    358            unsigned char ProtocolType;
    359          
    360            // next two words MUST be read with High-Byte 1st (CS8900 AN181 Page 2)
    361            ReadHB1ST8900(RX_FRAME_PORT);                  // ignore RxStatus Word
   \   000004   4C43         MOV.B   #0x0, R12
   \   000006   B012....     CALL    #ReadHB1ST8900
    362            RecdFrameLength = ReadHB1ST8900(RX_FRAME_PORT);// get real length of frame 
   \   00000A   4C43         MOV.B   #0x0, R12
   \   00000C   B012....     CALL    #ReadHB1ST8900
   \   000010   824C....     MOV.W   R12, &RecdFrameLength
    363            
    364            DummyReadFrame8900(6);                         // ignore DA
   \   000014   3C400600     MOV.W   #0x6, R12
   \   000018   B012....     CALL    #DummyReadFrame8900
    365            CopyFromFrame8900(&RecdFrameMAC, 6);           // store SA (for our answer)
   \   00001C   3E400600     MOV.W   #0x6, R14
   \   000020   3C40....     MOV.W   #RecdFrameMAC, R12
   \   000024   B012....     CALL    #CopyFromFrame8900
    366          
    367            switch (ReadFrameBE8900())                     // get frame type
   \   000028   B012....     CALL    #ReadFrameBE8900
   \   00002C   3C800008     SUB.W   #0x800, R12
   \   000030   2624         JEQ     ??ProcessEthIAFrame_2
   \   000032   3C800600     SUB.W   #0x6, R12
   \   000036   5C20         JNE     ??ProcessEthIAFrame_1
    368            {
    369              case FRAME_ARP :                             // check for ARP
    370                if ((TCPFlags & (TCP_ACTIVE_OPEN | IP_ADDR_RESOLVED)) == TCP_ACTIVE_OPEN)
   \   000038   5E42....     MOV.B   &TCPFlags, R14
   \   00003C   7EF00300     AND.B   #0x3, R14
   \   000040   5E93         CMP.B   #0x1, R14
   \   000042   5620         JNE     ??ProcessEthIAFrame_1
    371                  if (ReadFrameBE8900() == HARDW_ETH10)         // check for the right prot. etc.
   \   000044   B012....     CALL    #ReadFrameBE8900
   \   000048   1C93         CMP.W   #0x1, R12
   \   00004A   5220         JNE     ??ProcessEthIAFrame_1
    372                    if (ReadFrameBE8900() == FRAME_IP)
   \   00004C   B012....     CALL    #ReadFrameBE8900
   \   000050   3C900008     CMP.W   #0x800, R12
   \   000054   4D20         JNE     ??ProcessEthIAFrame_1
    373                      if (ReadFrameBE8900() == IP_HLEN_PLEN)
   \   000056   B012....     CALL    #ReadFrameBE8900
   \   00005A   3C900406     CMP.W   #0x604, R12
   \   00005E   4820         JNE     ??ProcessEthIAFrame_1
    374                        if (ReadFrameBE8900() == OP_ARP_ANSWER)
   \   000060   B012....     CALL    #ReadFrameBE8900
   \   000064   2C93         CMP.W   #0x2, R12
   \   000066   4420         JNE     ??ProcessEthIAFrame_1
    375                        {
    376                          TCPStopTimer();                       // OK, now we've the MAC we wanted ;-)
   \   000068   B012....     CALL    #TCPStopTimer
    377                          CopyFromFrame8900(&RemoteMAC, 6);     // extract opponents MAC
   \   00006C   3E400600     MOV.W   #0x6, R14
   \   000070   3C40....     MOV.W   #RemoteMAC, R12
   \   000074   B012....     CALL    #CopyFromFrame8900
    378                          TCPFlags |= IP_ADDR_RESOLVED;
   \   000078   E2D3....     BIS.B   #0x2, &TCPFlags
   \   00007C   393C         JMP     ??ProcessEthIAFrame_1
    379                        }
    380                break;
    381              case FRAME_IP :                                        // check for IP-type
    382                if ((ReadFrameBE8900() & 0xff00 ) == IP_VER_IHL)     // IPv4, IHL=5 (20 Bytes Header)
   \                     ??ProcessEthIAFrame_2:
   \   00007E   B012....     CALL    #ReadFrameBE8900
   \   000082   3CF000FF     AND.W   #0xff00, R12
   \   000086   3C900045     CMP.W   #0x4500, R12
   \   00008A   3220         JNE     ??ProcessEthIAFrame_1
    383                {                                                    // ignore Type Of Service
    384                  RecdIPFrameLength = ReadFrameBE8900();             // get IP frame's length
   \   00008C   B012....     CALL    #ReadFrameBE8900
   \   000090   824C....     MOV.W   R12, &RecdIPFrameLength
    385                  ReadFrameBE8900();                                 // ignore identification
   \   000094   B012....     CALL    #ReadFrameBE8900
    386          
    387                  if (!(ReadFrameBE8900() & (IP_FLAG_MOREFRAG | IP_FRAGOFS_MASK)))  // only unfragm. frames
   \   000098   B012....     CALL    #ReadFrameBE8900
   \   00009C   3CB0FF3F     BIT.W   #0x3fff, R12
   \   0000A0   2720         JNE     ??ProcessEthIAFrame_1
    388                  {
    389                    ProtocolType = ReadFrameBE8900();                // get protocol, ignore TTL
   \   0000A2   B012....     CALL    #ReadFrameBE8900
   \   0000A6   4A4C         MOV.B   R12, R10
    390                    ReadFrameBE8900();                               // ignore checksum
   \   0000A8   B012....     CALL    #ReadFrameBE8900
    391                    RecdFrameIP[0] = ReadFrame8900();                // get source IP
   \   0000AC   B012....     CALL    #ReadFrame8900
   \   0000B0   824C....     MOV.W   R12, &RecdFrameIP
    392                    RecdFrameIP[1] = ReadFrame8900();
   \   0000B4   B012....     CALL    #ReadFrame8900
   \   0000B8   824C....     MOV.W   R12, &RecdFrameIP + 2
    393                    TargetIP[0] = ReadFrame8900();                   // get destination IP
   \   0000BC   B012....     CALL    #ReadFrame8900
   \   0000C0   814C0000     MOV.W   R12, 0x0(SP)
    394                    TargetIP[1] = ReadFrame8900();
   \   0000C4   B012....     CALL    #ReadFrame8900
   \   0000C8   814C0200     MOV.W   R12, 0x2(SP)
    395          
    396                    if ((MyIP[0] == TargetIP[0]) && (MyIP[1] == TargetIP[1]))  // is it for us?
   \   0000CC   A291....     CMP.W   0x0(SP), &MyIP
   \   0000D0   0F20         JNE     ??ProcessEthIAFrame_1
   \   0000D2   92910200.... CMP.W   0x2(SP), &MyIP + 2
   \   0000D8   0B20         JNE     ??ProcessEthIAFrame_1
    397                      switch (ProtocolType)
   \   0000DA   5A83         SUB.B   #0x1, R10
   \   0000DC   0424         JEQ     ??ProcessEthIAFrame_3
   \   0000DE   7A800500     SUB.B   #0x5, R10

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -