diff --git a/core/hw/holly/sb.cpp b/core/hw/holly/sb.cpp index 28d4df457..a3f50bcf6 100644 --- a/core/hw/holly/sb.cpp +++ b/core/hw/holly/sb.cpp @@ -790,6 +790,9 @@ void sb_Init() void sb_Reset(bool Manual) { +#if DC_PLATFORM == DC_PLATFORM_DREAMCAST && defined(ENABLE_MODEM) + ModemTerm(); +#endif asic_reg_Reset(Manual); #if DC_PLATFORM == DC_PLATFORM_DREAMCAST gdrom_reg_Reset(Manual); @@ -803,6 +806,9 @@ void sb_Reset(bool Manual) void sb_Term() { +#if DC_PLATFORM == DC_PLATFORM_DREAMCAST && defined(ENABLE_MODEM) + ModemTerm(); +#endif aica_sb_Term(); maple_Term(); pvr_sb_Term(); diff --git a/core/hw/maple/maple_devs.cpp b/core/hw/maple/maple_devs.cpp index 714f4b526..f7acc5e38 100755 --- a/core/hw/maple/maple_devs.cpp +++ b/core/hw/maple/maple_devs.cpp @@ -1188,7 +1188,7 @@ struct maple_keyboard : maple_base return MDRS_DataTransfer; default: - DEBUG_LOG(MAPLE, "Keyboard: unknown MAPLE COMMAND %d", cmd); + INFO_LOG(MAPLE, "Keyboard: unknown MAPLE COMMAND %d", cmd); return MDRE_UnknownCmd; } } @@ -1295,7 +1295,7 @@ struct maple_mouse : maple_base return MDRS_DataTransfer; default: - DEBUG_LOG(MAPLE, "Mouse: unknown MAPLE COMMAND %d", cmd); + INFO_LOG(MAPLE, "Mouse: unknown MAPLE COMMAND %d", cmd); return MDRE_UnknownCmd; } } @@ -1375,7 +1375,7 @@ struct maple_lightgun : maple_base return MDRS_DataTransfer; default: - DEBUG_LOG(MAPLE, "Light gun: unknown MAPLE COMMAND %d", cmd); + INFO_LOG(MAPLE, "Light gun: unknown MAPLE COMMAND %d", cmd); return MDRE_UnknownCmd; } } @@ -2569,7 +2569,7 @@ u32 jvs_io_board::handle_jvs_message(u8 *buffer_in, u32 length_in, u8 *buffer_ou break; default: - INFO_LOG(MAPLE, "JVS: Unknown input type %x", buffer_in[cmdi]); + DEBUG_LOG(MAPLE, "JVS: Unknown input type %x", buffer_in[cmdi]); JVS_OUT(2); // report byte: command error cmdi = length_in; // Ignore subsequent commands break; diff --git a/core/hw/mem/vmem32.cpp b/core/hw/mem/vmem32.cpp index 90fb531ad..e40c89360 100644 --- a/core/hw/mem/vmem32.cpp +++ b/core/hw/mem/vmem32.cpp @@ -99,7 +99,7 @@ static void* vmem32_map_buffer(u32 dst, u32 addrsz, u32 offset, u32 size, bool w rv = mmap(&virt_ram_base[dst], size, prot, MAP_SHARED | MAP_NOSYNC | MAP_FIXED, vmem_fd, offset); if (MAP_FAILED == rv) { - printf("MAP1 failed %d\n", errno); + ERROR_LOG(VMEM, "MAP1 failed %d", errno); return NULL; } @@ -109,7 +109,7 @@ static void* vmem32_map_buffer(u32 dst, u32 addrsz, u32 offset, u32 size, bool w ptr = mmap(&virt_ram_base[dst], size, prot , MAP_SHARED | MAP_NOSYNC | MAP_FIXED, vmem_fd, offset); if (MAP_FAILED == ptr) { - printf("MAP2 failed %d\n", errno); + ERROR_LOG(VMEM, "MAP2 failed %d", errno); return NULL; } } @@ -346,7 +346,7 @@ bool vmem32_handle_signal(void *fault_addr, bool write, u32 exception_pc) //vmem32_page_faults++; u32 guest_addr = (u8*)fault_addr - virt_ram_base; u32 rv = vmem32_map_address(guest_addr, write); - //printf("vmem32_handle_signal handled signal %s @ %p -> %08x rv=%d\n", write ? "W" : "R", fault_addr, guest_addr, rv); + DEBUG_LOG(VMEM, "vmem32_handle_signal handled signal %s @ %p -> %08x rv=%d", write ? "W" : "R", fault_addr, guest_addr, rv); if (rv == MMU_ERROR_NONE) return true; if (rv == VMEM32_ERROR_NOT_MAPPED) diff --git a/core/hw/modem/modem.cpp b/core/hw/modem/modem.cpp index a5415af55..6ac7541fd 100644 --- a/core/hw/modem/modem.cpp +++ b/core/hw/modem/modem.cpp @@ -43,11 +43,7 @@ #define MODEM_DEVICE_TYPE_336K 0 -#ifdef RELEASE -#define LOG(...) -#else -#define LOG(...) do { printf("[%d.%03d] MODEM ", (int)os_GetSeconds(), (int)(os_GetSeconds() * 1000) % 1000); printf(__VA_ARGS__); putchar('\n'); } while (false); -#endif +#define LOG(...) DEBUG_LOG(MODEM, __VA_ARGS__) const static u32 MODEM_ID[2] = { @@ -142,7 +138,7 @@ static int modem_sched_func(int tag, int c, int j) { if (last_comm_stats != 0) { - printf("Stats sent %d (%.2f kB/s) received %d (%.2f kB/s) TDBE %d RDBF %d\n", sent_bytes, sent_bytes / 2000.0, + DEBUG_LOG(MODEM, "Stats sent %d (%.2f kB/s) received %d (%.2f kB/s) TDBE %d RDBF %d\n", sent_bytes, sent_bytes / 2000.0, recvd_bytes, recvd_bytes / 2000.0, modem_regs.reg1e.TDBE, modem_regs.reg1e.RDBF); sent_bytes = 0; @@ -211,7 +207,7 @@ static int modem_sched_func(int tag, int c, int j) break; case PRE_CONNECTED: - printf("MODEM Connected\n"); + INFO_LOG(MODEM, "MODEM Connected"); if (modem_regs.reg03.RLSDE) SET_STATUS_BIT(0x0f, modem_regs.reg0f.RLSD, 1); if (modem_regs.reg12 == 0xAA) @@ -319,6 +315,11 @@ void ModemInit() modem_sched = sh4_sched_register(0, &modem_sched_func); } +void ModemTerm() +{ + stop_pppd(); +} + static void schedule_callback(int ms) { sh4_sched_request(modem_sched, SH4_MAIN_CLOCK / 1000 * ms); @@ -428,7 +429,7 @@ static void modem_reset(u32 v) state=MS_RESETING; modem_regs.ptr[0x20]=1; ControllerTestStart(); - printf("MODEM Reset\n"); + INFO_LOG(MODEM, "MODEM Reset"); } } @@ -495,7 +496,7 @@ static void ModemNormalWrite(u32 reg, u32 data) //LOG("ModemNormalWrite : TBUFFER = %X", data); if (connect_state == DISCONNECTED) { - printf("MODEM Dialing\n"); + INFO_LOG(MODEM, "MODEM Dialing"); connect_state = DIALING; } schedule_callback(100); diff --git a/core/hw/modem/modem.h b/core/hw/modem/modem.h index 50e5af26c..32a72cc60 100644 --- a/core/hw/modem/modem.h +++ b/core/hw/modem/modem.h @@ -25,5 +25,6 @@ #include "types.h" void ModemInit(); +void ModemTerm(); u32 ModemReadMem_A0_006(u32 addr,u32 size); void ModemWriteMem_A0_006(u32 addr,u32 data,u32 size); diff --git a/core/hw/modem/net_platform.h b/core/hw/modem/net_platform.h index 8ec9ba9ee..264772076 100644 --- a/core/hw/modem/net_platform.h +++ b/core/hw/modem/net_platform.h @@ -24,13 +24,15 @@ typedef int sock_t; #define L_EAGAIN EAGAIN #define get_last_error() (errno) #define INVALID_SOCKET (-1) +#define perror(s) do { INFO_LOG(MODEM, "%s: %s", (s) != NULL ? (s) : "", strerror(get_last_error())); } while (false) #else typedef SOCKET sock_t; #define VALID(s) ((s) != INVALID_SOCKET) #define L_EWOULDBLOCK WSAEWOULDBLOCK #define L_EAGAIN WSAEWOULDBLOCK #define get_last_error() (WSAGetLastError()) -#define perror(s) do { if (s) printf("%s: ", s); printf("Winsock error: %d\n", WSAGetLastError()); } while (false) +#define perror(s) do { INFO_LOG(MODEM, "%s: Winsock error: %d\n", (s) != NULL ? (s) : "", WSAGetLastError()); } while (false) #endif + #endif diff --git a/core/hw/modem/picoppp.cpp b/core/hw/modem/picoppp.cpp index afdeb612c..e297e6c63 100644 --- a/core/hw/modem/picoppp.cpp +++ b/core/hw/modem/picoppp.cpp @@ -213,7 +213,7 @@ static void tcp_callback(uint16_t ev, struct pico_socket *s) if (it == tcp_sockets.end()) { if (tcp_connecting_sockets.find(s) == tcp_connecting_sockets.end()) - printf("Unknown socket: remote port %d\n", short_be(s->remote_port)); + INFO_LOG(MODEM, "Unknown socket: remote port %d", short_be(s->remote_port)); } else { @@ -234,7 +234,7 @@ static void tcp_callback(uint16_t ev, struct pico_socket *s) { // Also called for child sockets if (tcp_sockets.find(s) == tcp_sockets.end()) - printf("pico_socket_accept: %s\n", strerror(pico_err)); + INFO_LOG(MODEM, "pico_socket_accept: %s\n", strerror(pico_err)); } else { @@ -270,8 +270,7 @@ static void tcp_callback(uint16_t ev, struct pico_socket *s) if (get_last_error() != EINPROGRESS && get_last_error() != L_EWOULDBLOCK) { pico_ipv4_to_string(peer, sock_a->local_addr.ip4.addr); - printf("TCP connection to %s:%d failed: ", peer, short_be(sock_a->local_port)); - perror(NULL); + INFO_LOG(MODEM, "TCP connection to %s:%d failed: %s", peer, short_be(sock_a->local_port), strerror(get_last_error())); closesocket(sockfd); } else @@ -291,7 +290,7 @@ static void tcp_callback(uint16_t ev, struct pico_socket *s) auto it = tcp_sockets.find(s); if (it == tcp_sockets.end()) { - printf("PICO_SOCK_EV_FIN: Unknown socket: remote port %d\n", short_be(s->remote_port)); + INFO_LOG(MODEM, "PICO_SOCK_EV_FIN: Unknown socket: remote port %d", short_be(s->remote_port)); } else { @@ -301,11 +300,11 @@ static void tcp_callback(uint16_t ev, struct pico_socket *s) } if (ev & PICO_SOCK_EV_ERR) { - printf("Socket error received: %s\n", strerror(pico_err)); + INFO_LOG(MODEM, "Socket error received: %s", strerror(pico_err)); auto it = tcp_sockets.find(s); if (it == tcp_sockets.end()) { - printf("PICO_SOCK_EV_ERR: Unknown socket: remote port %d\n", short_be(s->remote_port)); + INFO_LOG(MODEM, "PICO_SOCK_EV_ERR: Unknown socket: remote port %d", short_be(s->remote_port)); } else { @@ -319,7 +318,7 @@ static void tcp_callback(uint16_t ev, struct pico_socket *s) auto it = tcp_sockets.find(s); if (it == tcp_sockets.end()) { - printf("PICO_SOCK_EV_CLOSE: Unknown socket: remote port %d\n", short_be(s->remote_port)); + INFO_LOG(MODEM, "PICO_SOCK_EV_CLOSE: Unknown socket: remote port %d", short_be(s->remote_port)); } else { @@ -374,7 +373,7 @@ static void udp_callback(uint16_t ev, struct pico_socket *s) if (r <= 0) { if (r < 0) - printf("%s: error UDP recv: %s\n", __FUNCTION__, strerror(pico_err)); + INFO_LOG(MODEM, "error UDP recv: %s", strerror(pico_err)); break; } @@ -394,7 +393,7 @@ static void udp_callback(uint16_t ev, struct pico_socket *s) } if (ev & PICO_SOCK_EV_ERR) { - printf("UDP Callback error received\n"); + INFO_LOG(MODEM, "UDP Callback error received"); } } @@ -420,7 +419,7 @@ static void read_native_sockets() struct pico_socket *ps = pico_socket_open(PICO_PROTO_IPV4, PICO_PROTO_TCP, &tcp_callback); if (ps == NULL) { - printf("pico_socket_open failed: error %d\n", pico_err); + INFO_LOG(MODEM, "pico_socket_open failed: error %d", pico_err); closesocket(sockfd); continue; } @@ -428,7 +427,7 @@ static void read_native_sockets() ps->local_port = src_addr.sin_port; if (pico_socket_connect(ps, &dcaddr.addr, it->first) != 0) { - printf("pico_socket_connect failed: error %d\n", pico_err); + INFO_LOG(MODEM, "pico_socket_connect failed: error %d", pico_err); closesocket(sockfd); pico_socket_close(ps); continue; @@ -469,8 +468,7 @@ static void read_native_sockets() { char peer[30]; pico_ipv4_to_string(peer, it->first->local_addr.ip4.addr); - printf("TCP connection to %s:%d failed: ", peer, short_be(it->first->local_port)); - perror(NULL); + INFO_LOG(MODEM, "TCP connection to %s:%d failed: %s", peer, short_be(it->first->local_port), strerror(get_last_error())); pico_socket_close(it->first); closesocket(it->second); } @@ -511,7 +509,7 @@ static void read_native_sockets() //printf("read_native_sockets UDP received %d bytes from %08x:%d\n", r, long_be(msginfo.local_addr.ip4.addr), short_be(msginfo.local_port)); int r2 = pico_socket_sendto_extended(pico_udp_socket, buf, r, &dcaddr, it->first, &msginfo); if (r2 < r) - printf("%s: error UDP sending to %d: %s\n", __FUNCTION__, short_be(it->first), strerror(pico_err)); + INFO_LOG(MODEM, "error UDP sending to %d: %s", short_be(it->first), strerror(pico_err)); } else if (r < 0 && get_last_error() != L_EAGAIN && get_last_error() != L_EWOULDBLOCK) { @@ -543,10 +541,10 @@ static void read_native_sockets() int r2 = pico_socket_send(it->first, buf, r); if (r2 < 0) - printf("%s: error TCP sending: %s\n", __FUNCTION__, strerror(pico_err)); + INFO_LOG(MODEM, "error TCP sending: %s", strerror(pico_err)); else if (r2 < r) // FIXME EAGAIN errors. Need to buffer data or wait for call back. - printf("%s: truncated send: %d -> %d\n", __FUNCTION__, r, r2); + INFO_LOG(MODEM, "truncated send: %d -> %d", r, r2); } else if (r == 0) { @@ -629,7 +627,7 @@ static void check_dns_entries() dns_query_start = 0; char myip[16]; pico_ipv4_to_string(myip, public_ip.addr); - printf("My IP is %s\n", myip); + INFO_LOG(MODEM, "My IP is %s", myip); } else { @@ -662,7 +660,7 @@ static void check_dns_entries() dns_query_start = 0; char afoip[16]; pico_ipv4_to_string(afoip, afo_ip.addr); - printf("AFO server IP is %s\n", afoip); + INFO_LOG(MODEM, "AFO server IP is %s", afoip); } else { @@ -698,7 +696,7 @@ static void *pico_thread_func(void *) #if _WIN32 static WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 0), &wsaData) != 0) - printf("WSAStartup failed\n"); + WARN_LOG(MODEM, "WSAStartup failed"); #endif } @@ -717,28 +715,28 @@ static void *pico_thread_func(void *) pico_udp_socket = pico_socket_open(PICO_PROTO_IPV4, PICO_PROTO_UDP, &udp_callback); if (pico_udp_socket == NULL) { - printf("%s: error opening UDP socket: %s\n", __FUNCTION__, strerror(pico_err)); + INFO_LOG(MODEM, "error opening UDP socket: %s", strerror(pico_err)); } int yes = 1; struct pico_ip4 inaddr_any = {0}; uint16_t listen_port = 0; int ret = pico_socket_bind(pico_udp_socket, &inaddr_any, &listen_port); if (ret < 0) - printf("%s: error binding UDP socket to port %u: %s\n", __FUNCTION__, short_be(listen_port), strerror(pico_err)); + INFO_LOG(MODEM, "error binding UDP socket to port %u: %s", short_be(listen_port), strerror(pico_err)); pico_tcp_socket = pico_socket_open(PICO_PROTO_IPV4, PICO_PROTO_TCP, &tcp_callback); if (pico_tcp_socket == NULL) { - printf("%s: error opening TCP socket: %s\n", __FUNCTION__, strerror(pico_err)); + INFO_LOG(MODEM, "error opening TCP socket: %s", strerror(pico_err)); } pico_socket_setoption(pico_tcp_socket, PICO_TCP_NODELAY, &yes); ret = pico_socket_bind(pico_tcp_socket, &inaddr_any, &listen_port); if (ret < 0) { - printf("%s: error binding TCP socket to port %u: %s\n", __FUNCTION__, short_be(listen_port), strerror(pico_err)); + INFO_LOG(MODEM, "error binding TCP socket to port %u: %s", short_be(listen_port), strerror(pico_err)); } else { if (pico_socket_listen(pico_tcp_socket, 10) != 0) - printf("%s: error listening on port %u\n", __FUNCTION__, short_be(listen_port)); + INFO_LOG(MODEM, "error listening on port %u", short_be(listen_port)); } ppp->proxied = 1; diff --git a/core/hw/sh4/sh4_mem.cpp b/core/hw/sh4/sh4_mem.cpp index e3a76f08f..a61a7f85d 100644 --- a/core/hw/sh4/sh4_mem.cpp +++ b/core/hw/sh4/sh4_mem.cpp @@ -214,8 +214,8 @@ void mem_Term() sh4_mmr_term(); sh4_area0_Term(); - //write back Flash/SRAM - SaveRomFiles(get_writable_data_path("/data/")); + // done by emulator thread + //SaveRomFiles(get_writable_data_path("/data/")); //mem_b.Term(); // handled by vmem diff --git a/core/log/Log.h b/core/log/Log.h index a0062c052..dc35e1615 100644 --- a/core/log/Log.h +++ b/core/log/Log.h @@ -56,7 +56,7 @@ __attribute__((format(printf, 5, 6))) #define MAX_LOGLEVEL LogTypes::LOG_LEVELS::LDEBUG #else #ifndef MAX_LOGLEVEL -#define MAX_LOGLEVEL LogTypes::LOG_LEVELS::LINFO +#define MAX_LOGLEVEL LogTypes::LOG_LEVELS::LWARNING #endif // loglevel #endif // logging diff --git a/core/nullDC.cpp b/core/nullDC.cpp index 5522915d2..6814addaf 100755 --- a/core/nullDC.cpp +++ b/core/nullDC.cpp @@ -499,6 +499,7 @@ void dc_term() naomi_cart_Close(); #endif plugins_Term(); + mem_Term(); _vmem_release(); mcfg_DestroyDevices();