Statistics
| Branch: | Revision:

root / hw / dummy_m68k.c @ d46ccfce

History | View | Annotate | Download (2.2 kB)

1
/*
2
 * Dummy board with just RAM and CPU for use as an ISS.
3
 *
4
 * Copyright (c) 2007 CodeSourcery.
5
 *
6
 * This code is licensed under the GPL
7
 */
8

    
9
#include "hw.h"
10
#include "boards.h"
11
#include "loader.h"
12
#include "elf.h"
13
#include "exec-memory.h"
14

    
15
#define KERNEL_LOAD_ADDR 0x10000
16

    
17
/* Board init.  */
18

    
19
static void dummy_m68k_init(ram_addr_t ram_size,
20
                     const char *boot_device,
21
                     const char *kernel_filename, const char *kernel_cmdline,
22
                     const char *initrd_filename, const char *cpu_model)
23
{
24
    CPUState *env;
25
    MemoryRegion *address_space_mem =  get_system_memory();
26
    MemoryRegion *ram = g_new(MemoryRegion, 1);
27
    int kernel_size;
28
    uint64_t elf_entry;
29
    target_phys_addr_t entry;
30

    
31
    if (!cpu_model)
32
        cpu_model = "cfv4e";
33
    env = cpu_init(cpu_model);
34
    if (!env) {
35
        fprintf(stderr, "Unable to find m68k CPU definition\n");
36
        exit(1);
37
    }
38

    
39
    /* Initialize CPU registers.  */
40
    env->vbr = 0;
41

    
42
    /* RAM at address zero */
43
    memory_region_init_ram(ram, NULL, "dummy_m68k.ram", ram_size);
44
    memory_region_add_subregion(address_space_mem, 0, ram);
45

    
46
    /* Load kernel.  */
47
    if (kernel_filename) {
48
        kernel_size = load_elf(kernel_filename, NULL, NULL, &elf_entry,
49
                               NULL, NULL, 1, ELF_MACHINE, 0);
50
        entry = elf_entry;
51
        if (kernel_size < 0) {
52
            kernel_size = load_uimage(kernel_filename, &entry, NULL, NULL);
53
        }
54
        if (kernel_size < 0) {
55
            kernel_size = load_image_targphys(kernel_filename,
56
                                              KERNEL_LOAD_ADDR,
57
                                              ram_size - KERNEL_LOAD_ADDR);
58
            entry = KERNEL_LOAD_ADDR;
59
        }
60
        if (kernel_size < 0) {
61
            fprintf(stderr, "qemu: could not load kernel '%s'\n",
62
                    kernel_filename);
63
            exit(1);
64
        }
65
    } else {
66
        entry = 0;
67
    }
68
    env->pc = entry;
69
}
70

    
71
static QEMUMachine dummy_m68k_machine = {
72
    .name = "dummy",
73
    .desc = "Dummy board",
74
    .init = dummy_m68k_init,
75
};
76

    
77
static void dummy_m68k_machine_init(void)
78
{
79
    qemu_register_machine(&dummy_m68k_machine);
80
}
81

    
82
machine_init(dummy_m68k_machine_init);