smpc_intback: improve/fix data_size handling
keyboard works (as intended) if it is plugged in to controller port 2.
This commit is contained in:
parent
e15f0a9eaf
commit
9db0c570d9
@ -200,9 +200,9 @@ void smpc_int(void) {
|
|||||||
- up to 2 controllers may be connected
|
- up to 2 controllers may be connected
|
||||||
- multitaps are not parsed correctly
|
- multitaps are not parsed correctly
|
||||||
*/
|
*/
|
||||||
while (oreg_ix < 31) {
|
while (oreg_ix < 32) {
|
||||||
reg8 const& oreg = smpc.reg.oreg[oreg_ix++];
|
reg8 const& oreg = smpc.reg.oreg[oreg_ix++];
|
||||||
switch (intback.fsm++) {
|
switch (intback.fsm) {
|
||||||
case PORT_STATUS:
|
case PORT_STATUS:
|
||||||
port_connected = (PORT_STATUS__CONNECTORS(oreg) == 1);
|
port_connected = (PORT_STATUS__CONNECTORS(oreg) == 1);
|
||||||
if (port_connected) {
|
if (port_connected) {
|
||||||
@ -274,11 +274,10 @@ void smpc_int(void) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
assert(0);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((intback.fsm >= PERIPHERAL_ID && (data_size--) < 0) || intback.fsm == FSM_NEXT) {
|
if ((intback.fsm >= PERIPHERAL_ID && data_size <= 0) || intback.fsm == FSM_NEXT) {
|
||||||
if (intback.port_ix == 1)
|
if (intback.port_ix == 1)
|
||||||
break;
|
break;
|
||||||
else {
|
else {
|
||||||
@ -286,6 +285,9 @@ void smpc_int(void) {
|
|||||||
intback.controller_ix++;
|
intback.controller_ix++;
|
||||||
intback.fsm = PORT_STATUS;
|
intback.fsm = PORT_STATUS;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
intback.fsm++;
|
||||||
|
data_size--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,9 +89,9 @@ void smpc_int(void) {
|
|||||||
- multitaps are not parsed correctly
|
- multitaps are not parsed correctly
|
||||||
*/
|
*/
|
||||||
|
|
||||||
while (oreg_ix < 31) {
|
while (oreg_ix < 32) {
|
||||||
reg8 const& oreg = smpc.reg.oreg[oreg_ix++];
|
reg8 const& oreg = smpc.reg.oreg[oreg_ix++];
|
||||||
switch (intback.fsm++) {
|
switch (intback.fsm) {
|
||||||
case PORT_STATUS:
|
case PORT_STATUS:
|
||||||
port_connected = (PORT_STATUS__CONNECTORS(oreg) == 1);
|
port_connected = (PORT_STATUS__CONNECTORS(oreg) == 1);
|
||||||
if (port_connected) {
|
if (port_connected) {
|
||||||
@ -142,11 +142,10 @@ void smpc_int(void) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
assert(0);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((intback.fsm >= PERIPHERAL_ID && (data_size--) < 0) || intback.fsm == FSM_NEXT) {
|
if ((intback.fsm >= PERIPHERAL_ID && data_size <= 0) || intback.fsm == FSM_NEXT) {
|
||||||
if (intback.port_ix == 1)
|
if (intback.port_ix == 1)
|
||||||
break;
|
break;
|
||||||
else {
|
else {
|
||||||
@ -154,6 +153,9 @@ void smpc_int(void) {
|
|||||||
intback.controller_ix++;
|
intback.controller_ix++;
|
||||||
intback.fsm = PORT_STATUS;
|
intback.fsm = PORT_STATUS;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
intback.fsm++;
|
||||||
|
data_size--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user