From 146dd7150f34c4d24ee303d758bea1045c9f9ca2 Mon Sep 17 00:00:00 2001 From: grinvader <> Date: Tue, 1 Feb 2005 15:30:50 +0000 Subject: [PATCH] No more 100% CPU use in GUI for real this time [SDL]. Hopefully fixed netplay - at least, the code makes sense now [Win, SDL]. --- zsnes/src/linux/sdlintrf.asm | 30 ++--- zsnes/src/linux/sdllink.c | 6 +- zsnes/src/linux/ztcp.c | 210 ++++++++++++++++++++++++++++++++++ zsnes/src/win/winintrf.asm | 28 ++--- zsnes/src/win/ztcp.c | 212 +++++++++++++++++++++++++++++++++++ 5 files changed, 442 insertions(+), 44 deletions(-) diff --git a/zsnes/src/linux/sdlintrf.asm b/zsnes/src/linux/sdlintrf.asm index 04c2b5c7..6ca64348 100644 --- a/zsnes/src/linux/sdlintrf.asm +++ b/zsnes/src/linux/sdlintrf.asm @@ -111,9 +111,9 @@ EXTSYM acceptzuser EXTSYM TCPIPAddress EXTSYM ConnectServer EXTSYM WaitForServer -EXTSYM SendData -EXTSYM SendDataUDP -EXTSYM GetData +EXTSYM SendDataNop +EXTSYM SendDataUDPNop +EXTSYM GetDataNop EXTSYM DeInitTCP EXTSYM StopServer EXTSYM Disconnect @@ -1608,12 +1608,8 @@ NEWSYM TCPIPSendPacket je .nopacket pushad ; Send PacketSendArray with size of PacketSendSize - ; SendData(int dsize,char *dptr) - mov eax,PacketSendArray - push eax - mov eax,[PacketSendSize] - push eax - call SendData + ; SendData(int [PacketSendSize],char *PacketSendArray) + call SendDataNop or eax,eax jnz .failed add esp,8 @@ -1632,12 +1628,8 @@ NEWSYM TCPIPSendPacketUDP je .nopacket pushad ; Send PacketSendArray with size of PacketSendSize - ; SendData(int dsize,char *dptr) - mov eax,PacketSendArray - push eax - mov eax,[PacketSendSize] - push eax - call SendDataUDP + ; SendData(int [PacketSendSize],char *PacketSendArray) + call SendDataUDPNop or eax,eax jnz .failed add esp,8 @@ -1654,12 +1646,8 @@ NEWSYM TCPIPSendPacketUDP NEWSYM TCPIPRecvPacket pushad ; Store packet to PacketRecvArray, size at PacketRecvSize - ; int GetData(int dsize,char *dptr) - mov eax,PacketRecvArray - push eax - mov eax,2048 - push eax - call GetData + ; int GetData(int 2048,char *PacketRecvArray) + call GetDataNop cmp eax,-1 je .failed mov [PacketRecvSize],eax diff --git a/zsnes/src/linux/sdllink.c b/zsnes/src/linux/sdllink.c index 6fef6a9c..f5978a69 100644 --- a/zsnes/src/linux/sdllink.c +++ b/zsnes/src/linux/sdllink.c @@ -756,9 +756,6 @@ void Start36HZ(void) update_ticks_pc2 = UPDATE_TICKS_UDP; update_ticks_pc = UPDATE_TICKS_GUI; - //Quick fix for GUI CPU usage - if (GUIOn2) usleep(1000); - start = sem_GetTicks(); start2 = sem_GetTicks(); T60HZEnabled = 0; @@ -1048,6 +1045,9 @@ void UpdateVFrame(void) const int SPCSize = 256; int i; + //Quick fix for GUI CPU usage + if (GUIOn2) usleep(1000); + CheckTimers(); Main_Proc(); diff --git a/zsnes/src/linux/ztcp.c b/zsnes/src/linux/ztcp.c index c80870f5..fd777880 100644 --- a/zsnes/src/linux/ztcp.c +++ b/zsnes/src/linux/ztcp.c @@ -949,6 +949,65 @@ int SendData(int dsize,unsigned char *dptr) return(0); } +extern int PacketSendSize; +extern unsigned char PacketSendArray[2048+256]; + +int SendDataNop() +{ + int retval, dsize=PacketSendSize; + unsigned char *dptr=PacketSendArray; + + if (UDPEnable){ +/* retval = sendto(ugamesocket,dptr,dsize,0,(struct sockaddr *)&ugameaddress,sizeof(ugameaddress)); + if (retval == SOCKET_ERROR) + { + closesocket(gamesocket); + return(-1); + } + return(0); */ + + if (((packetnum-packetnumhead) & 0xFF) >= 15){ +// sprintf(message1,"Packet Overflow."); +// MessageBox (NULL, message1, "Init Error" , MB_ICONERROR ); + + // wait for receive packet, call JoyRead while waiting + while (((packetnum-packetnumhead) & 0xFF) >= 15){ + PacketResend(); + PacketReceive(); + UpdateVFrame(); + while ((packetconfirm[packetnumhead]) && (packetnum!=packetnumhead)) + packetnumhead=(packetnumhead+1) & 0xFF; + } + } + CopyMemory(&(cpacketdata[2]),dptr,dsize); + CopyMemory(&(packetdata[2048*(packetnum & 0x0F)]),dptr,dsize); + packetsize[packetnum]=dsize; + packetconfirm[packetnum]=0; + cpacketdata[0]=1; + cpacketdata[1]=(char)packetnum; + retval = sendto(ugamesocket,cpacketdata,dsize+2,0,(struct sockaddr *)&ugameaddress,sizeof(ugameaddress)); + packettimeleft[packetnum]=60; + if (dsize>512) packettimeleft[packetnum]=90; + packetresent[packetnum]=1; + packetnum=(packetnum+1) & 0xFF; + if (retval == SOCKET_ERROR) + { + closesocket(ugamesocket); + return(-1); + } + return(0); + } + + /* send data with the socket */ + retval = send(gamesocket,dptr,dsize,0); + if (retval == SOCKET_ERROR) + { + closesocket(gamesocket); + return(-1); + } + return(0); +} + /**********************************************************\ * Send data UDP * @@ -1088,6 +1147,93 @@ char SendBufferSize[256];*/ return(0); } +int SendDataUDPNop() +{ + int retval,i; + int packetsize, dsize=PacketSendSize; + unsigned char *dptr=PacketSendArray; + +// return (SendData(dsize,dptr)); + + if (UDPEnable){ + +/*int SendPtr; +char SendBuffer[256*32]; +char SendBufferSize[256];*/ + blahblahblah++; + + packetsize = 0; + + for (i=0;i= 15){ +// sprintf(message1,"Packet Overflow."); +// MessageBox (NULL, message1, "Init Error" , MB_ICONERROR ); + + // wait for receive packet, call JoyRead while waiting + while (((packetnum-packetnumhead) & 0xFF) >= 15){ + PacketResend(); + PacketReceive(); + UpdateVFrame(); + while ((packetconfirm[packetnumhead]) && (packetnum!=packetnumhead)) + packetnumhead=(packetnumhead+1) & 0xFF; + } + } + CopyMemory(&(cpacketdata[2]),dptr,dsize); + CopyMemory(&(packetdata[2048*(packetnum & 0x0F)]),dptr,dsize); + packetsize[packetnum]=dsize; + packetconfirm[packetnum]=0; + cpacketdata[0]=1; + cpacketdata[1]=(char)packetnum; + retval = sendto(ugamesocket,cpacketdata,dsize+2,0,(struct sockaddr *)&ugameaddress,sizeof(ugameaddress)); + packettimeleft[packetnum]=60; + if (dsize>512) packettimeleft[packetnum]=90; + packetresent[packetnum]=1; + packetnum=(packetnum+1) & 0xFF; + if (retval == SOCKET_ERROR) + { + closesocket(ugamesocket); + return(-1); + } + return(0); + } + + /* send data with the socket */ + retval = send(gamesocket,dptr,dsize,0); + if (retval == SOCKET_ERROR) + { + closesocket(gamesocket); + return(-1); + } + return(0); +} /**********************************************************\ * Send data UDP * @@ -938,6 +998,94 @@ int SendDataUDP(int dsize,unsigned char *dptr) +// return (SendData(dsize,dptr)); + + if (UDPEnable){ + +/*int SendPtr; +char SendBuffer[256*32]; +char SendBufferSize[256];*/ + blahblahblah++; + + packetsize = 0; + + for (i=0;i