Changeset b909777 in buchla-emu for emu/main.c
- Timestamp:
- 07/20/2017 04:19:40 PM (7 years ago)
- Branches:
- master
- Children:
- 51b6cfd
- Parents:
- a06aa8b
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
emu/main.c
ra06aa8b rb909777 18 18 #include <all.h> 19 19 20 typedef struct { 21 const char *name; 22 bool *flag; 23 } verb_flag_t; 24 25 static verb_flag_t verb_flags[] = { 26 { "sdl", &sdl_verbose }, 27 { "cpu", &cpu_verbose }, 28 { "fpu", &fpu_verbose }, 29 { "vid", &vid_verbose }, 30 { "tim", &tim_verbose }, 31 { "lcd", &lcd_verbose }, 32 { "ser", &ser_verbose }, 33 { "mid", &mid_verbose }, 34 { "fdd", &fdd_verbose }, 35 { "snd", &snd_verbose }, 36 { "led", &led_verbose }, 37 { "kbd", &kbd_verbose } 38 }; 39 40 static const char *bios = "bios.abs"; 41 42 static void usage(FILE *fh) 43 { 44 fprintf(fh, "usage: buchla [-h] [-v comp [-v comp [...]]] [-b bios]\n"); 45 fprintf(fh, "where comp is one of: "); 46 47 for (int32_t i = 0; i < ARRAY_COUNT(verb_flags); ++i) { 48 fprintf(fh, "%s, ", verb_flags[i].name); 49 } 50 51 fprintf(fh, "all\n"); 52 } 53 54 static void parse_args(int32_t argc, char *argv[]) 55 { 56 for (int32_t i = 0; i < argc; ++i) { 57 if (strcmp(argv[i], "-h") == 0) { 58 usage(stdout); 59 exit(0); 60 } 61 62 if (strcmp(argv[i], "-b") == 0) { 63 if (++i == argc) { 64 usage(stderr); 65 fprintf(stderr, "missing argument to -b\n"); 66 exit(1); 67 } 68 69 bios = argv[i]; 70 continue; 71 } 72 73 if (strcmp(argv[i], "-v") == 0) { 74 if (++i == argc) { 75 usage(stderr); 76 fprintf(stderr, "missing argument to -v\n"); 77 exit(1); 78 } 79 80 int32_t k; 81 82 if (strcmp(argv[i], "all") == 0) { 83 for (k = 0; k < ARRAY_COUNT(verb_flags); ++k) { 84 *verb_flags[k].flag = true; 85 } 86 87 continue; 88 } 89 90 for (k = 0; k < ARRAY_COUNT(verb_flags); ++k) { 91 if (strcmp(argv[i], verb_flags[k].name) == 0) { 92 *verb_flags[k].flag = true; 93 break; 94 } 95 } 96 97 if (k == ARRAY_COUNT(verb_flags)) { 98 usage(stderr); 99 fprintf(stderr, "invalid argument to -v: %s\n", argv[i]); 100 exit(1); 101 } 102 103 continue; 104 } 105 } 106 } 107 20 108 int32_t main(int32_t argc, char *argv[]) 21 109 { 22 (void)argc; 23 (void)argv; 24 110 parse_args(argc, argv); 25 111 sdl_init(); 26 112 27 cpu_verbose = true; 28 cpu_loop(); 113 cpu_loop(bios); 29 114 30 115 sdl_quit();
Note:
See TracChangeset
for help on using the changeset viewer.