From e0330d9534d8cfeffff81f426df1d3277702b835 Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Thu, 11 Nov 2010 11:21:40 +0100 Subject: Implement basic instruction handling --- main.c | 59 ++++++++++++++++++++++++++++------------------------------- 1 file changed, 28 insertions(+), 31 deletions(-) (limited to 'main.c') 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, -- cgit v1.2.3-54-g00ecf