Mercurial > repos > blastem
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 ®s; | 1056 return ®s; |
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; |