From 68f107de6a10e72eab13cdc4ec5be1cfc6180f8f Mon Sep 17 00:00:00 2001 From: yz70s Date: Wed, 13 Jul 2016 19:24:21 +0200 Subject: [PATCH] chihiro.cpp: now jvs communication works, although there seems to be some little problem left (nw) --- src/mame/drivers/chihiro.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/mame/drivers/chihiro.cpp b/src/mame/drivers/chihiro.cpp index a02ac8ca796..10c14b95ad8 100644 --- a/src/mame/drivers/chihiro.cpp +++ b/src/mame/drivers/chihiro.cpp @@ -423,6 +423,7 @@ void jvs_master::send_packet(int destination, int length, UINT8 *data) { push((UINT8)destination); push((UINT8)length); + length--; while (length > 0) { push(*data); @@ -979,9 +980,9 @@ int ohci_hlean2131qc_device::handle_bulk_pid(int endpoint, int pid, UINT8 *buffe memcpy(endpoints[4].position, buffer, size); endpoints[4].position = endpoints[4].position + size; endpoints[4].remain = endpoints[4].remain - size; - printf("\n\r"); if (endpoints[4].remain == 0) { + printf("\n\r"); // extract packets int numpk = jvs.buffer_in[1]; int p = 2; @@ -996,7 +997,7 @@ int ohci_hlean2131qc_device::handle_bulk_pid(int endpoint, int pid, UINT8 *buffe p++; int len = jvs.buffer_in[p]; p++; - if ((p + len) >= jvs.buffer_in_expected) + if ((p + len) > jvs.buffer_in_expected) break; int chk = dest + len; for (int m = len - 1; m > 0; m--) @@ -1014,18 +1015,22 @@ int ohci_hlean2131qc_device::handle_bulk_pid(int endpoint, int pid, UINT8 *buffe // update buffer_out if (recv > 0) { + chk = 0; + for (int m = 0; m < recv; m++) + chk = chk + jvs.buffer_out[jvs.buffer_out_used + 5 + m]; + jvs.buffer_out[jvs.buffer_out_used + 5 + recv] = chk & 255; jvs.buffer_out_packets++; // jvs node address jvs.buffer_out[jvs.buffer_out_used] = jvs.buffer_out[jvs.buffer_out_used + 5]; // dummy jvs.buffer_out[jvs.buffer_out_used + 1] = 0; // length following - recv++; + recv += 2; jvs.buffer_out[jvs.buffer_out_used + 2] = recv & 255; jvs.buffer_out[jvs.buffer_out_used + 3] = (recv >> 8) & 255; // body - jvs.buffer_out[jvs.buffer_out_used + 4] = 0xa0; - jvs.buffer_out_used = jvs.buffer_out_used + recv + 5; + jvs.buffer_out[jvs.buffer_out_used + 4] = 0xe0; + jvs.buffer_out_used = jvs.buffer_out_used + recv + 5 - 1; jvs.buffer_out[1] = (UINT8)jvs.buffer_out_packets; } p = p + len;