comparison debug.c @ 2360:053ba4551c62

Expose some more emu state via debugger array mechanism
author Michael Pavone <pavone@retrodev.com>
date Sat, 28 Oct 2023 16:04:58 -0700
parents 04d29635d238
children 3350b3c8faa8
comparison
equal deleted inserted replaced
2359:04d29635d238 2360:053ba4551c62
1056 return &regs; 1056 return &regs;
1057 } 1057 }
1058 return NULL; 1058 return NULL;
1059 } 1059 }
1060 1060
1061 static uint32_t debug_part1_get(debug_root *root, debug_array *array, uint32_t index)
1062 {
1063 m68k_context *m68k = root->cpu_context;
1064 genesis_context *gen = m68k->system;
1065 return gen->ym->part1_regs[index];
1066 }
1067
1068 static void debug_part1_set(debug_root *root, debug_array *array, uint32_t index, uint32_t value)
1069 {
1070 m68k_context *m68k = root->cpu_context;
1071 genesis_context *gen = m68k->system;
1072 uint8_t old_part = gen->ym->selected_part;
1073 uint8_t old_reg = gen->ym->selected_reg;
1074 gen->ym->selected_part = 0;
1075 gen->ym->selected_reg = index;
1076 ym_data_write(gen->ym, value);
1077 gen->ym->selected_part = old_part;
1078 gen->ym->selected_reg = old_reg;
1079 }
1080
1081 static uint32_t debug_part2_get(debug_root *root, debug_array *array, uint32_t index)
1082 {
1083 m68k_context *m68k = root->cpu_context;
1084 genesis_context *gen = m68k->system;
1085 return gen->ym->part2_regs[index];
1086 }
1087
1088 static void debug_part2_set(debug_root *root, debug_array *array, uint32_t index, uint32_t value)
1089 {
1090 m68k_context *m68k = root->cpu_context;
1091 genesis_context *gen = m68k->system;
1092 uint8_t old_part = gen->ym->selected_part;
1093 uint8_t old_reg = gen->ym->selected_reg;
1094 gen->ym->selected_part = 1;
1095 gen->ym->selected_reg = index;
1096 ym_data_write(gen->ym, value);
1097 gen->ym->selected_part = old_part;
1098 gen->ym->selected_reg = old_reg;
1099 }
1100
1101 static debug_array* resolve_ym2612_array(debug_root *root, const char *name)
1102 {
1103 static debug_array part1 = {
1104 .get = debug_part1_get, .set = debug_part1_set,
1105 .storage = YM_REG_END, .size = YM_REG_END
1106 };
1107 static debug_array part2 = {
1108 .get = debug_part2_get, .set = debug_part2_set,
1109 .storage = YM_REG_END, .size = YM_REG_END
1110 };
1111 if (!strcasecmp(name, "part1")) {
1112 return &part1;
1113 }
1114 if (!strcasecmp(name, "part2")) {
1115 return &part2;
1116 }
1117 return NULL;
1118 }
1119
1120 static uint32_t debug_psgfreq_get(debug_root *root, debug_array *array, uint32_t index)
1121 {
1122 m68k_context *m68k = root->cpu_context;
1123 genesis_context *gen = m68k->system;
1124 return gen->psg->counter_load[index];
1125 }
1126
1127 static void debug_psgfreq_set(debug_root *root, debug_array *array, uint32_t index, uint32_t value)
1128 {
1129 m68k_context *m68k = root->cpu_context;
1130 genesis_context *gen = m68k->system;
1131 gen->psg->counter_load[index] = value;
1132 }
1133
1134 static uint32_t debug_psgcount_get(debug_root *root, debug_array *array, uint32_t index)
1135 {
1136 m68k_context *m68k = root->cpu_context;
1137 genesis_context *gen = m68k->system;
1138 return gen->psg->counters[index];
1139 }
1140
1141 static void debug_psgcount_set(debug_root *root, debug_array *array, uint32_t index, uint32_t value)
1142 {
1143 m68k_context *m68k = root->cpu_context;
1144 genesis_context *gen = m68k->system;
1145 gen->psg->counters[index] = value;
1146 }
1147
1148 static uint32_t debug_psgvol_get(debug_root *root, debug_array *array, uint32_t index)
1149 {
1150 m68k_context *m68k = root->cpu_context;
1151 genesis_context *gen = m68k->system;
1152 return gen->psg->volume[index];
1153 }
1154
1155 static void debug_psgvol_set(debug_root *root, debug_array *array, uint32_t index, uint32_t value)
1156 {
1157 m68k_context *m68k = root->cpu_context;
1158 genesis_context *gen = m68k->system;
1159 gen->psg->volume[index] = value;
1160 }
1161
1162 static debug_array* resolve_psg_array(debug_root *root, const char *name)
1163 {
1164 static debug_array freq = {
1165 .get = debug_psgfreq_get, .set = debug_psgfreq_set,
1166 .storage = 4, .size = 4
1167 };
1168 static debug_array counter = {
1169 .get = debug_psgcount_get, .set = debug_psgcount_set,
1170 .storage = 4, .size = 4
1171 };
1172 static debug_array volume = {
1173 .get = debug_psgvol_get, .set = debug_psgvol_set,
1174 .storage = 4, .size = 4
1175 };
1176 if (!strcasecmp("frequency", name)) {
1177 return &freq;
1178 }
1179 if (!strcasecmp("counter", name)) {
1180 return &counter;
1181 }
1182 if (!strcasecmp("volume", name)) {
1183 return &volume;
1184 }
1185 return NULL;
1186 }
1187
1061 static debug_array* resolve_genesis_array(debug_root *root, const char *name) 1188 static debug_array* resolve_genesis_array(debug_root *root, const char *name)
1062 { 1189 {
1063 for (const char *cur = name; *cur; ++cur) 1190 for (const char *cur = name; *cur; ++cur)
1064 { 1191 {
1065 if (*cur == ':') { 1192 if (*cur == ':') {
1066 if (cur - name == 3 && !memcmp(name, "vdp", 3)) { 1193 if (cur - name == 3 && !memcmp(name, "vdp", 3)) {
1067 return resolve_vdp_array(root, cur + 1); 1194 return resolve_vdp_array(root, cur + 1);
1195 } else if (cur - name == 2 && !memcmp(name, "ym", 2)) {
1196 return resolve_ym2612_array(root, cur + 1);
1197 } else if (cur - name == 3 && !memcmp(name, "psg", 3)) {
1198 return resolve_psg_array(root, cur + 1);
1068 } /*else if (cur - name == 3 && !memcmp(name, "sub", 3)) { 1199 } /*else if (cur - name == 3 && !memcmp(name, "sub", 3)) {
1069 m68k_context *m68k = root->cpu_context; 1200 m68k_context *m68k = root->cpu_context;
1070 genesis_context *gen = m68k->system; 1201 genesis_context *gen = m68k->system;
1071 if (gen->expansion) { 1202 if (gen->expansion) {
1072 segacd_context *cd = gen->expansion; 1203 segacd_context *cd = gen->expansion;