summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authorTobias Klauser <tklauser@distanz.ch>2010-11-11 11:21:40 +0100
committerTobias Klauser <tklauser@distanz.ch>2010-11-11 11:21:40 +0100
commite0330d9534d8cfeffff81f426df1d3277702b835 (patch)
treeba90c33bf555a4921a1279105beb54e9a9064ce5 /main.c
parent556c8e0600546b4edf49d6a70adb5b831cd4e25a (diff)
Implement basic instruction handling
Diffstat (limited to 'main.c')
-rw-r--r--main.c59
1 files changed, 28 insertions, 31 deletions
diff --git a/main.c b/main.c
index 6403d7c..13526bf 100644
--- a/main.c
+++ b/main.c
@@ -31,6 +31,10 @@
#include "nios2sim-ng.h"
#include "image.h"
+/* XXX: TMP */
+#include "instruction.h"
+#include "nios2.h"
+
#define PROGRAM_NAME "nios2sim-ng"
#define PROGRAM_VERSION VERSION /* Set in Makefile */
@@ -45,11 +49,13 @@ static void usage(const int status)
" specify kernel command line\n"
" -m MEMSIZE, --memsize=MEMSIZE\n"
" set memory size for simulator (default %zu%s)\n"
- " -d, --debug enable debug mode\n"
+ " -M, --mmu simulate Nios II with MMU\n"
" -e, --elf image is in ELF format (default)\n"
" -s, --srec image is in SREC format\n"
- " -h, --help print this help and exit\n"
+ " -d, --debug enable debug mode\n"
+ " -v, --verbose enable verbose outputs\n"
" -V, --version print version information and exit\n"
+ " -h, --help print this help and exit\n"
"\n"
"Example:\n"
" %s -s -m 32M -d -c console=ttyJ0 init=/bin/sh\n"
@@ -60,22 +66,19 @@ static void usage(const int status)
exit(status);
}
static const struct option long_opts[] = {
+ { "cmdline", required_argument, NULL, 'c' },
+ { "memsize", required_argument, NULL, 'm' },
+ { "mmu", no_argument, NULL, 'M' },
{ "elf", no_argument, NULL, 'e' },
{ "srec", no_argument, NULL, 's' },
- { "mem_size", required_argument, NULL, 'm' },
{ "debug", no_argument, NULL, 'd' },
- { "base_addr", required_argument, NULL, 'b' },
- { "sys_map", required_argument, NULL, 'p' },
- { "cmdline", required_argument, NULL, 'c' },
- { "initrd", required_argument, NULL, 'r' },
- { "fs_image", required_argument, NULL, 'f' },
{ "verbose", no_argument, NULL, 'v' },
{ "version", no_argument, NULL, 'V' },
{ "help", no_argument, NULL, 'h' },
{ NULL, 0, NULL, 0 }
};
-static const char *short_opts = "sm:db:p:c:r:f:vVh";
+static const char *short_opts = "c:m:MesdvVh";
static size_t parse_mem_size(char *opt)
{
@@ -115,37 +118,28 @@ int main(int argc, char *argv[])
int image_format = FORMAT_ELF;
uint8_t *mem_base;
size_t mem_size = DEFAULT_MEM_SIZE;
+ bool has_mmu = false;
int c;
while ((c = getopt_long(argc, argv, short_opts, long_opts, NULL)) != -1) {
switch(c) {
+ case 'c':
+ cmdline = optarg;
+ break;
+ case 'm':
+ mem_size = parse_mem_size(optarg);
+ break;
+ case 'M':
+ has_mmu = true;
case 'e':
image_format = FORMAT_ELF;
break;
case 's':
image_format = FORMAT_SREC;
break;
- case 'm':
- mem_size = parse_mem_size(optarg);
- break;
case 'd':
// set_debug_mode(get_nios_cpu());
break;
- case 'b':
-// sscanf(addr, "0x%X\n", &image_info.base_addr);
- break;
- case 'p':
-// load_symbol_file(optarg);
- break;
- case 'c':
- cmdline = optarg;
- break;
- case 'r':
-// set_initrd(optarg);
- break;
- case 'f':
-// set_fs_image(optarg);
- break;
case 'v':
verbose = true;
break;
@@ -173,13 +167,16 @@ int main(int argc, char *argv[])
exit(EXIT_FAILURE);
}
+ memset(mem_base, 0x00, mem_size);
+
if (image_load(image_path, image_format, mem_base, mem_size))
exit(EXIT_FAILURE);
- vinfo(" Image file: %s\n", image_path);
- vinfo(" Image format: %s\n", image_format_str(image_format));
- vinfo(" Memory size: %zu %sbytes\n", size_scale(mem_size), size_postfix(mem_size));
- vinfo(" Memory base: %p\n", mem_base);
+ vinfo(" Image file: %s\n", image_path);
+ vinfo(" Image format: %s\n", image_format_str(image_format));
+ vinfo(" Memory size: %zu %sbytes\n", size_scale(mem_size), size_postfix(mem_size));
+ vinfo(" Memory base: %p\n", mem_base);
+ vinfo(" Kernel command line: %s\n", cmdline);
#if 0
printf("Base address:0x%08X, Entry address:0x%08X\n",image_info.base_addr,