From 9db0c570d9c3e421aa54120f3d7a9ef2b7ab6f5a Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Thu, 11 May 2023 07:59:36 -0700 Subject: [PATCH] smpc_intback: improve/fix data_size handling keyboard works (as intended) if it is plugged in to controller port 2. --- smpc/input_keyboard.cpp | 10 ++++++---- wordle/main_saturn.cpp | 10 ++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/smpc/input_keyboard.cpp b/smpc/input_keyboard.cpp index 51dbb24..825402a 100644 --- a/smpc/input_keyboard.cpp +++ b/smpc/input_keyboard.cpp @@ -200,9 +200,9 @@ void smpc_int(void) { - up to 2 controllers may be connected - multitaps are not parsed correctly */ - while (oreg_ix < 31) { + while (oreg_ix < 32) { reg8 const& oreg = smpc.reg.oreg[oreg_ix++]; - switch (intback.fsm++) { + switch (intback.fsm) { case PORT_STATUS: port_connected = (PORT_STATUS__CONNECTORS(oreg) == 1); if (port_connected) { @@ -274,11 +274,10 @@ void smpc_int(void) { } break; default: - assert(0); 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) break; else { @@ -286,6 +285,9 @@ void smpc_int(void) { intback.controller_ix++; intback.fsm = PORT_STATUS; } + } else { + intback.fsm++; + data_size--; } } diff --git a/wordle/main_saturn.cpp b/wordle/main_saturn.cpp index 44003ed..20aed35 100644 --- a/wordle/main_saturn.cpp +++ b/wordle/main_saturn.cpp @@ -89,9 +89,9 @@ void smpc_int(void) { - multitaps are not parsed correctly */ - while (oreg_ix < 31) { + while (oreg_ix < 32) { reg8 const& oreg = smpc.reg.oreg[oreg_ix++]; - switch (intback.fsm++) { + switch (intback.fsm) { case PORT_STATUS: port_connected = (PORT_STATUS__CONNECTORS(oreg) == 1); if (port_connected) { @@ -142,11 +142,10 @@ void smpc_int(void) { } break; default: - assert(0); 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) break; else { @@ -154,6 +153,9 @@ void smpc_int(void) { intback.controller_ix++; intback.fsm = PORT_STATUS; } + } else { + intback.fsm++; + data_size--; } }