📄 tcpip.lst
字号:
\ ??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 + -