GBHawk 4x: cleaan up the 2x2 connections
This commit is contained in:
parent
c9621eff19
commit
e87a0edb01
|
@ -110,7 +110,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink4x
|
||||||
if (_cableconnected_UD | _cableconnected_LR | _cableconnected_X | _cableconnected_4x)
|
if (_cableconnected_UD | _cableconnected_LR | _cableconnected_X | _cableconnected_4x)
|
||||||
{
|
{
|
||||||
_cableconnected_UD = _cableconnected_LR = _cableconnected_X = _cableconnected_4x = false;
|
_cableconnected_UD = _cableconnected_LR = _cableconnected_X = _cableconnected_4x = false;
|
||||||
do_2_next = false;
|
do_2_next_1 = false;
|
||||||
|
do_2_next_2 = false;
|
||||||
}
|
}
|
||||||
else if (controller.IsPressed("Toggle Cable UD"))
|
else if (controller.IsPressed("Toggle Cable UD"))
|
||||||
{
|
{
|
||||||
|
@ -655,47 +656,45 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink4x
|
||||||
if (_cableconnected_UD)
|
if (_cableconnected_UD)
|
||||||
{
|
{
|
||||||
// the signal to shift out a bit is when serial_clock = 1
|
// the signal to shift out a bit is when serial_clock = 1
|
||||||
if (((A.serialport.serial_clock == 1) || (A.serialport.serial_clock == 2)) && (A.serialport.clk_rate > 0) && !do_2_next)
|
if (((A.serialport.serial_clock == 1) || (A.serialport.serial_clock == 2)) && (A.serialport.clk_rate > 0) && !do_2_next_1)
|
||||||
{
|
{
|
||||||
A.serialport.going_out = (byte)(A.serialport.serial_data >> 7);
|
A.serialport.going_out = (byte)(A.serialport.serial_data >> 7);
|
||||||
|
|
||||||
if ((C.serialport.clk_rate == -1) && C.serialport.serial_start && A.serialport.can_pulse)
|
if ((B.serialport.clk_rate == -1) && B.serialport.serial_start && A.serialport.can_pulse)
|
||||||
{
|
{
|
||||||
C.serialport.serial_clock = A.serialport.serial_clock;
|
B.serialport.serial_clock = A.serialport.serial_clock;
|
||||||
C.serialport.going_out = (byte)(C.serialport.serial_data >> 7);
|
B.serialport.going_out = (byte)(B.serialport.serial_data >> 7);
|
||||||
C.serialport.coming_in = A.serialport.going_out;
|
B.serialport.coming_in = A.serialport.going_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
A.serialport.coming_in = C.serialport.going_out;
|
A.serialport.coming_in = B.serialport.going_out;
|
||||||
A.serialport.can_pulse = false;
|
A.serialport.can_pulse = false;
|
||||||
}
|
}
|
||||||
else if (((C.serialport.serial_clock == 1) || (C.serialport.serial_clock == 2)) && (C.serialport.clk_rate > 0))
|
else if (((B.serialport.serial_clock == 1) || (B.serialport.serial_clock == 2)) && (B.serialport.clk_rate > 0))
|
||||||
{
|
{
|
||||||
do_2_next = false;
|
do_2_next_1 = false;
|
||||||
|
|
||||||
C.serialport.going_out = (byte)(C.serialport.serial_data >> 7);
|
B.serialport.going_out = (byte)(B.serialport.serial_data >> 7);
|
||||||
|
|
||||||
if ((A.serialport.clk_rate == -1) && A.serialport.serial_start && C.serialport.can_pulse)
|
if ((A.serialport.clk_rate == -1) && A.serialport.serial_start && B.serialport.can_pulse)
|
||||||
{
|
{
|
||||||
A.serialport.serial_clock = C.serialport.serial_clock;
|
A.serialport.serial_clock = B.serialport.serial_clock;
|
||||||
A.serialport.going_out = (byte)(A.serialport.serial_data >> 7);
|
A.serialport.going_out = (byte)(A.serialport.serial_data >> 7);
|
||||||
A.serialport.coming_in = C.serialport.going_out;
|
A.serialport.coming_in = B.serialport.going_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
C.serialport.coming_in = A.serialport.going_out;
|
B.serialport.coming_in = A.serialport.going_out;
|
||||||
C.serialport.can_pulse = false;
|
B.serialport.can_pulse = false;
|
||||||
|
|
||||||
if (C.serialport.serial_clock == 2) { do_2_next = true; }
|
if (B.serialport.serial_clock == 2) { do_2_next_1 = true; }
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
do_2_next = false;
|
do_2_next_1 = false;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else if (_cableconnected_LR)
|
|
||||||
{
|
|
||||||
// the signal to shift out a bit is when serial_clock = 1
|
// the signal to shift out a bit is when serial_clock = 1
|
||||||
if (((C.serialport.serial_clock == 1) || (C.serialport.serial_clock == 2)) && (C.serialport.clk_rate > 0) && !do_2_next)
|
if (((C.serialport.serial_clock == 1) || (C.serialport.serial_clock == 2)) && (C.serialport.clk_rate > 0) && !do_2_next_2)
|
||||||
{
|
{
|
||||||
C.serialport.going_out = (byte)(C.serialport.serial_data >> 7);
|
C.serialport.going_out = (byte)(C.serialport.serial_data >> 7);
|
||||||
|
|
||||||
|
@ -711,7 +710,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink4x
|
||||||
}
|
}
|
||||||
else if (((D.serialport.serial_clock == 1) || (D.serialport.serial_clock == 2)) && (D.serialport.clk_rate > 0))
|
else if (((D.serialport.serial_clock == 1) || (D.serialport.serial_clock == 2)) && (D.serialport.clk_rate > 0))
|
||||||
{
|
{
|
||||||
do_2_next = false;
|
do_2_next_2 = false;
|
||||||
|
|
||||||
D.serialport.going_out = (byte)(D.serialport.serial_data >> 7);
|
D.serialport.going_out = (byte)(D.serialport.serial_data >> 7);
|
||||||
|
|
||||||
|
@ -725,34 +724,18 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink4x
|
||||||
D.serialport.coming_in = C.serialport.going_out;
|
D.serialport.coming_in = C.serialport.going_out;
|
||||||
D.serialport.can_pulse = false;
|
D.serialport.can_pulse = false;
|
||||||
|
|
||||||
if (D.serialport.serial_clock == 2) { do_2_next = true; }
|
if (D.serialport.serial_clock == 2) { do_2_next_2 = true; }
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
do_2_next = false;
|
do_2_next_2 = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (_cableconnected_X)
|
else if (_cableconnected_LR)
|
||||||
{
|
{
|
||||||
// the signal to shift out a bit is when serial_clock = 1
|
// the signal to shift out a bit is when serial_clock = 1
|
||||||
if (((D.serialport.serial_clock == 1) || (D.serialport.serial_clock == 2)) && (D.serialport.clk_rate > 0) && !do_2_next)
|
if (((A.serialport.serial_clock == 1) || (A.serialport.serial_clock == 2)) && (A.serialport.clk_rate > 0) && !do_2_next_1)
|
||||||
{
|
{
|
||||||
D.serialport.going_out = (byte)(D.serialport.serial_data >> 7);
|
|
||||||
|
|
||||||
if ((A.serialport.clk_rate == -1) && A.serialport.serial_start && D.serialport.can_pulse)
|
|
||||||
{
|
|
||||||
A.serialport.serial_clock = D.serialport.serial_clock;
|
|
||||||
A.serialport.going_out = (byte)(A.serialport.serial_data >> 7);
|
|
||||||
A.serialport.coming_in = D.serialport.going_out;
|
|
||||||
}
|
|
||||||
|
|
||||||
D.serialport.coming_in = A.serialport.going_out;
|
|
||||||
D.serialport.can_pulse = false;
|
|
||||||
}
|
|
||||||
else if (((A.serialport.serial_clock == 1) || (A.serialport.serial_clock == 2)) && (A.serialport.clk_rate > 0))
|
|
||||||
{
|
|
||||||
do_2_next = false;
|
|
||||||
|
|
||||||
A.serialport.going_out = (byte)(A.serialport.serial_data >> 7);
|
A.serialport.going_out = (byte)(A.serialport.serial_data >> 7);
|
||||||
|
|
||||||
if ((D.serialport.clk_rate == -1) && D.serialport.serial_start && A.serialport.can_pulse)
|
if ((D.serialport.clk_rate == -1) && D.serialport.serial_start && A.serialport.can_pulse)
|
||||||
|
@ -764,12 +747,144 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink4x
|
||||||
|
|
||||||
A.serialport.coming_in = D.serialport.going_out;
|
A.serialport.coming_in = D.serialport.going_out;
|
||||||
A.serialport.can_pulse = false;
|
A.serialport.can_pulse = false;
|
||||||
|
}
|
||||||
|
else if (((D.serialport.serial_clock == 1) || (D.serialport.serial_clock == 2)) && (D.serialport.clk_rate > 0))
|
||||||
|
{
|
||||||
|
do_2_next_1 = false;
|
||||||
|
|
||||||
if (A.serialport.serial_clock == 2) { do_2_next = true; }
|
D.serialport.going_out = (byte)(D.serialport.serial_data >> 7);
|
||||||
|
|
||||||
|
if ((A.serialport.clk_rate == -1) && A.serialport.serial_start && D.serialport.can_pulse)
|
||||||
|
{
|
||||||
|
A.serialport.serial_clock = D.serialport.serial_clock;
|
||||||
|
A.serialport.going_out = (byte)(A.serialport.serial_data >> 7);
|
||||||
|
A.serialport.coming_in = D.serialport.going_out;
|
||||||
|
}
|
||||||
|
|
||||||
|
D.serialport.coming_in = A.serialport.going_out;
|
||||||
|
D.serialport.can_pulse = false;
|
||||||
|
|
||||||
|
if (D.serialport.serial_clock == 2) { do_2_next_1 = true; }
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
do_2_next = false;
|
do_2_next_1 = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// the signal to shift out a bit is when serial_clock = 1
|
||||||
|
if (((B.serialport.serial_clock == 1) || (B.serialport.serial_clock == 2)) && (B.serialport.clk_rate > 0) && !do_2_next_2)
|
||||||
|
{
|
||||||
|
B.serialport.going_out = (byte)(B.serialport.serial_data >> 7);
|
||||||
|
|
||||||
|
if ((C.serialport.clk_rate == -1) && C.serialport.serial_start && B.serialport.can_pulse)
|
||||||
|
{
|
||||||
|
C.serialport.serial_clock = B.serialport.serial_clock;
|
||||||
|
C.serialport.going_out = (byte)(C.serialport.serial_data >> 7);
|
||||||
|
C.serialport.coming_in = B.serialport.going_out;
|
||||||
|
}
|
||||||
|
|
||||||
|
B.serialport.coming_in = C.serialport.going_out;
|
||||||
|
B.serialport.can_pulse = false;
|
||||||
|
}
|
||||||
|
else if (((C.serialport.serial_clock == 1) || (C.serialport.serial_clock == 2)) && (C.serialport.clk_rate > 0))
|
||||||
|
{
|
||||||
|
do_2_next_2 = false;
|
||||||
|
|
||||||
|
C.serialport.going_out = (byte)(C.serialport.serial_data >> 7);
|
||||||
|
|
||||||
|
if ((B.serialport.clk_rate == -1) && B.serialport.serial_start && C.serialport.can_pulse)
|
||||||
|
{
|
||||||
|
B.serialport.serial_clock = C.serialport.serial_clock;
|
||||||
|
B.serialport.going_out = (byte)(B.serialport.serial_data >> 7);
|
||||||
|
B.serialport.coming_in = C.serialport.going_out;
|
||||||
|
}
|
||||||
|
|
||||||
|
C.serialport.coming_in = B.serialport.going_out;
|
||||||
|
C.serialport.can_pulse = false;
|
||||||
|
|
||||||
|
if (C.serialport.serial_clock == 2) { do_2_next_2 = true; }
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
do_2_next_2 = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (_cableconnected_X)
|
||||||
|
{
|
||||||
|
// the signal to shift out a bit is when serial_clock = 1
|
||||||
|
if (((C.serialport.serial_clock == 1) || (C.serialport.serial_clock == 2)) && (C.serialport.clk_rate > 0) && !do_2_next_1)
|
||||||
|
{
|
||||||
|
C.serialport.going_out = (byte)(C.serialport.serial_data >> 7);
|
||||||
|
|
||||||
|
if ((A.serialport.clk_rate == -1) && A.serialport.serial_start && C.serialport.can_pulse)
|
||||||
|
{
|
||||||
|
A.serialport.serial_clock = C.serialport.serial_clock;
|
||||||
|
A.serialport.going_out = (byte)(A.serialport.serial_data >> 7);
|
||||||
|
A.serialport.coming_in = C.serialport.going_out;
|
||||||
|
}
|
||||||
|
|
||||||
|
C.serialport.coming_in = A.serialport.going_out;
|
||||||
|
C.serialport.can_pulse = false;
|
||||||
|
}
|
||||||
|
else if (((A.serialport.serial_clock == 1) || (A.serialport.serial_clock == 2)) && (A.serialport.clk_rate > 0))
|
||||||
|
{
|
||||||
|
do_2_next_1 = false;
|
||||||
|
|
||||||
|
A.serialport.going_out = (byte)(A.serialport.serial_data >> 7);
|
||||||
|
|
||||||
|
if ((C.serialport.clk_rate == -1) && C.serialport.serial_start && A.serialport.can_pulse)
|
||||||
|
{
|
||||||
|
C.serialport.serial_clock = A.serialport.serial_clock;
|
||||||
|
C.serialport.going_out = (byte)(C.serialport.serial_data >> 7);
|
||||||
|
C.serialport.coming_in = A.serialport.going_out;
|
||||||
|
}
|
||||||
|
|
||||||
|
A.serialport.coming_in = C.serialport.going_out;
|
||||||
|
A.serialport.can_pulse = false;
|
||||||
|
|
||||||
|
if (A.serialport.serial_clock == 2) { do_2_next_1 = true; }
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
do_2_next_1 = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// the signal to shift out a bit is when serial_clock = 1
|
||||||
|
if (((B.serialport.serial_clock == 1) || (B.serialport.serial_clock == 2)) && (B.serialport.clk_rate > 0) && !do_2_next_2)
|
||||||
|
{
|
||||||
|
B.serialport.going_out = (byte)(B.serialport.serial_data >> 7);
|
||||||
|
|
||||||
|
if ((D.serialport.clk_rate == -1) && D.serialport.serial_start && B.serialport.can_pulse)
|
||||||
|
{
|
||||||
|
D.serialport.serial_clock = B.serialport.serial_clock;
|
||||||
|
D.serialport.going_out = (byte)(D.serialport.serial_data >> 7);
|
||||||
|
D.serialport.coming_in = B.serialport.going_out;
|
||||||
|
}
|
||||||
|
|
||||||
|
B.serialport.coming_in = D.serialport.going_out;
|
||||||
|
B.serialport.can_pulse = false;
|
||||||
|
}
|
||||||
|
else if (((D.serialport.serial_clock == 1) || (D.serialport.serial_clock == 2)) && (D.serialport.clk_rate > 0))
|
||||||
|
{
|
||||||
|
do_2_next_2 = false;
|
||||||
|
|
||||||
|
D.serialport.going_out = (byte)(D.serialport.serial_data >> 7);
|
||||||
|
|
||||||
|
if ((B.serialport.clk_rate == -1) && B.serialport.serial_start && D.serialport.can_pulse)
|
||||||
|
{
|
||||||
|
B.serialport.serial_clock = D.serialport.serial_clock;
|
||||||
|
B.serialport.going_out = (byte)(B.serialport.serial_data >> 7);
|
||||||
|
B.serialport.coming_in = D.serialport.going_out;
|
||||||
|
}
|
||||||
|
|
||||||
|
D.serialport.coming_in = B.serialport.going_out;
|
||||||
|
D.serialport.can_pulse = false;
|
||||||
|
|
||||||
|
if (D.serialport.serial_clock == 2) { do_2_next_2 = true; }
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
do_2_next_2 = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink4x
|
||||||
ser.Sync(nameof(_cableconnected_LR), ref _cableconnected_LR);
|
ser.Sync(nameof(_cableconnected_LR), ref _cableconnected_LR);
|
||||||
ser.Sync(nameof(_cableconnected_X), ref _cableconnected_X);
|
ser.Sync(nameof(_cableconnected_X), ref _cableconnected_X);
|
||||||
ser.Sync(nameof(_cableconnected_4x), ref _cableconnected_4x);
|
ser.Sync(nameof(_cableconnected_4x), ref _cableconnected_4x);
|
||||||
ser.Sync(nameof(do_2_next), ref do_2_next);
|
ser.Sync(nameof(do_2_next_1), ref do_2_next_1);
|
||||||
|
ser.Sync(nameof(do_2_next_2), ref do_2_next_2);
|
||||||
ser.Sync(nameof(A_controller), ref A_controller);
|
ser.Sync(nameof(A_controller), ref A_controller);
|
||||||
ser.Sync(nameof(B_controller), ref B_controller);
|
ser.Sync(nameof(B_controller), ref B_controller);
|
||||||
ser.Sync(nameof(C_controller), ref C_controller);
|
ser.Sync(nameof(C_controller), ref C_controller);
|
||||||
|
|
|
@ -23,7 +23,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink4x
|
||||||
private bool _cableconnected_X = false;
|
private bool _cableconnected_X = false;
|
||||||
private bool _cableconnected_4x = true;
|
private bool _cableconnected_4x = true;
|
||||||
|
|
||||||
private bool do_2_next = false;
|
private bool do_2_next_1 = false;
|
||||||
|
private bool do_2_next_2 = false;
|
||||||
|
|
||||||
// 4 player adapter variables
|
// 4 player adapter variables
|
||||||
public bool is_pinging, is_transmitting;
|
public bool is_pinging, is_transmitting;
|
||||||
|
|
Loading…
Reference in New Issue