blob: 5ab918dcf93aa3a05ade9875392d2dd5c5bbc0a5 [file] [log] [blame]
swissChili6c61a792020-07-28 16:29:20 -07001#include "cpu.h"
swissChili62d6d5d2020-07-30 20:12:47 -07002#include "dbg.h"
swissChili6c61a792020-07-28 16:29:20 -07003
swissChili62d6d5d2020-07-30 20:12:47 -07004#include <bits/getopt_core.h>
swissChili6c61a792020-07-28 16:29:20 -07005#include <ctype.h>
6#include <stdio.h>
7#include <stdlib.h>
8#include <unistd.h>
9
10int main(int argc, char **argv)
11{
swissChili62d6d5d2020-07-30 20:12:47 -070012 bool disflag = 0,
swissChili6c61a792020-07-28 16:29:20 -070013 runflag = 0,
swissChili62d6d5d2020-07-30 20:12:47 -070014 helpflag = 0,
15 debugflag = 0,
16 should_read = 0;
17
18 FILE *input = stdin;
swissChili6c61a792020-07-28 16:29:20 -070019
20 char c;
21
swissChili62d6d5d2020-07-30 20:12:47 -070022 while ((c = getopt(argc, argv, "Ddrhi:")) != -1)
swissChili6c61a792020-07-28 16:29:20 -070023 {
24 switch (c)
25 {
swissChili62d6d5d2020-07-30 20:12:47 -070026 case 'd':
27 disflag = true;
28 should_read = true;
29 break;
30 case 'r':
31 runflag = true;
32 should_read = true;
33 break;
34 case 'D':
35 debugflag = true;
36 should_read = true;
37 break;
38 case 'i':
39 input = fopen(optarg, "r");
40 break;
41 case 'h':
42 case '?':
43 helpflag = 1;
44 break;
swissChili6c61a792020-07-28 16:29:20 -070045 }
46 }
47
48 if (helpflag)
49 {
swissChili62d6d5d2020-07-30 20:12:47 -070050 printf("6502 emulator, disassembler and debugger\n"
51 "Usage:\n"
52 " -d disassemble input\n"
53 " -r run input\n"
54 " -D debug input (open debug prompt)\n"
55 " -i <input> set input file, defaults to standard input\n"
56 " -h, -? show this help page\n");
swissChili6c61a792020-07-28 16:29:20 -070057 return 0;
58 }
59
swissChili62d6d5d2020-07-30 20:12:47 -070060 cpu_t cpu;
61
62 if (should_read)
63 {
64 cpu = new_cpu();
65 fread(cpu.mem, 0xFFFF, 1, input);
66 }
swissChili6c61a792020-07-28 16:29:20 -070067
68 if (disflag)
69 {
70 disas(&cpu);
71 }
swissChili62d6d5d2020-07-30 20:12:47 -070072 else if (debugflag)
73 {
74 debug(&cpu);
75 }
76
77 if (should_read)
78 free_cpu(&cpu);
swissChili6c61a792020-07-28 16:29:20 -070079}