summaryrefslogtreecommitdiffstats
path: root/src/cli/menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cli/menu.c')
-rw-r--r--src/cli/menu.c37
1 files changed, 25 insertions, 12 deletions
diff --git a/src/cli/menu.c b/src/cli/menu.c
index 478fe2b..d57cbb1 100644
--- a/src/cli/menu.c
+++ b/src/cli/menu.c
@@ -22,6 +22,7 @@
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
+#include <ctype.h>
#include "common.h"
#include "cpu8051.h"
@@ -90,22 +91,34 @@ DisasmN(unsigned int Address, int NumberInst)
}
}
+/* Capitalize all letters in buffer */
+static void
+Capitalize(char *buffer)
+{
+ size_t k;
+
+ for (k = 0; k < strlen(buffer); k++)
+ buffer[k] = toupper(buffer[k]);
+}
+
/* Set NewValue to Register */
void
-SetRegister(char *Register, int NewValue)
+SetRegister(char *register_name, int new)
{
- if (STREQ(Register, "PC"))
- cpu8051.pc = NewValue;
- else if (STREQ(Register, "A"))
- cpu8051_WriteD(_ACC_, NewValue);
- else if (STREQ(Register, "B"))
- cpu8051_WriteD(_B_, NewValue);
- else if (STREQ(Register, "SP"))
- cpu8051_WriteD(_SP_, NewValue);
- else {
- printf("\nInvalid register name!\n");
- printf("Valid registers are A, B, PC and SP.\n");
+ struct regwin_infos_t *regwin_infos;
+
+ Capitalize(register_name);
+
+ log_debug(" Modify register %s to $%04X", register_name, new);
+
+ regwin_infos = sfr_get_infos(register_name);
+
+ if (regwin_infos == NULL) {
+ printf("Invalid register name\n");
+ return;
}
+
+ regwin_write(regwin_infos, new);
}
/* CPU reset and Console UI update */