comparison debug.c @ 2173:894c7873a2b1

Consume all expressions in debugger print command
author Michael Pavone <pavone@retrodev.com>
date Sat, 06 Aug 2022 15:22:30 -0700
parents a00773a336d8
children eff7bedfc838
comparison
equal deleted inserted replaced
2172:a00773a336d8 2173:894c7873a2b1
866 .resolve = resolve_genesis, 866 .resolve = resolve_genesis,
867 .read_mem = read_genesis, 867 .read_mem = read_genesis,
868 .system = context->system 868 .system = context->system
869 }; 869 };
870 char *after; 870 char *after;
871 expr *e = parse_expression(param, &after); 871 uint8_t at_least_one = 0;
872 if (e) { 872 while (*param && *param != '\n')
873 if (!eval_expr(&c, e, &value)) { 873 {
874 fprintf(stderr, "Failed to eval %s\n", param); 874 at_least_one = 1;
875 } 875 expr *e = parse_expression(param, &after);
876 free_expr(e); 876 if (e) {
877 } else { 877 if (!eval_expr(&c, e, &value)) {
878 fprintf(stderr, "Failed to parse %s\n", param); 878 fprintf(stderr, "Failed to eval %s\n", param);
879 } 879 }
880 /* 880 free_expr(e);
881 if (param[0] == 'd' && param[1] >= '0' && param[1] <= '7') {
882 value = context->dregs[param[1]-'0'];
883 if (param[2] == '.') {
884 if (param[3] == 'w') {
885 value &= 0xFFFF;
886 } else if (param[3] == 'b') {
887 value &= 0xFF;
888 }
889 }
890 } else if (param[0] == 'a' && param[1] >= '0' && param[1] <= '7') {
891 value = context->aregs[param[1]-'0'];
892 if (param[2] == '.') {
893 if (param[3] == 'w') {
894 value &= 0xFFFF;
895 } else if (param[3] == 'b') {
896 value &= 0xFF;
897 }
898 }
899 } else if (param[0] == 's' && param[1] == 'r') {
900 value = (context->status << 8);
901 for (int flag = 0; flag < 5; flag++) {
902 value |= context->flags[flag] << (4-flag);
903 }
904 } else if(param[0] == 'c') {
905 value = context->current_cycle;
906 } else if(param[0] == 'f') {
907 genesis_context *gen = context->system;
908 value = gen->vdp->frame;
909 } else if (param[0] == 'p' && param[1] == 'c') {
910 value = address;
911 } else if ((param[0] == '0' && param[1] == 'x') || param[0] == '$') {
912 char *after;
913 uint32_t p_addr = strtol(param+(param[0] == '0' ? 2 : 1), &after, 16);
914 if (after[0] == '.' && after[1] == 'l') {
915 value = m68k_read_long(p_addr, context);
916 } else if (after[0] == '.' && after[1] == 'b') {
917 value = m68k_read_byte(p_addr, context);
918 } else { 881 } else {
919 value = m68k_read_word(p_addr, context); 882 fprintf(stderr, "Failed to parse %s\n", param);
920 } 883 }
921 } else if(param[0] == '(' && (param[1] == 'a' || param[1] == 'd') && param[2] >= '0' && param[2] <= '7' && param[3] == ')') { 884 char *tmp_param = malloc(after-param+1);
922 uint8_t reg = param[2] - '0'; 885 memcpy(tmp_param, param, after-param);
923 uint32_t p_addr = param[1] == 'a' ? context->aregs[reg] : context->dregs[reg]; 886 tmp_param[after-param] = 0;
924 if (param[4] == '.' && param[5] == 'l') { 887 param = after;
925 value = m68k_read_long(p_addr, context); 888 if (format_char == 's') {
926 } else if (param[4] == '.' && param[5] == 'b') { 889 char tmp[128];
927 value = m68k_read_byte(p_addr, context); 890 int i;
891 for (i = 0; i < sizeof(tmp)-1; i++, value++)
892 {
893 char c = m68k_read_byte(value, context);
894 if (c < 0x20 || c > 0x7F) {
895 break;
896 }
897 tmp[i] = c;
898 }
899 tmp[i] = 0;
900 printf(format, tmp_param, tmp);
928 } else { 901 } else {
929 value = m68k_read_word(p_addr, context); 902 printf(format, tmp_param, value);
930 } 903 }
931 } else { 904 free(tmp_param);
932 fprintf(stderr, "Unrecognized parameter to p: %s\n", param); 905 while (*param && isblank(*param) && *param != '\n')
933 return;
934 }*/
935 if (format_char == 's') {
936 char tmp[128];
937 int i;
938 for (i = 0; i < sizeof(tmp)-1; i++, value++)
939 { 906 {
940 char c = m68k_read_byte(value, context); 907 ++param;
941 if (c < 0x20 || c > 0x7F) { 908 }
942 break; 909 }
943 } 910 if (!at_least_one) {
944 tmp[i] = c; 911 fprintf(stderr, "Missing argument to print/%c\n", format_char);
945 }
946 tmp[i] = 0;
947 printf(format, param, tmp);
948 } else {
949 printf(format, param, value);
950 } 912 }
951 } 913 }
952 914
953 #ifndef NO_Z80 915 #ifndef NO_Z80
954 916