Parent Directory | Revision Log
++ trunk/HISTORY (local) $Id: HISTORY,v 1.1298 2006/07/22 11:27:46 debug Exp $ 20060626 Continuing on SPARC emulation (beginning on the 'save' instruction, register windows, etc). 20060629 Planning statistics gathering (new -s command line option), and renaming speed_tricks to allow_instruction_combinations. 20060630 Some minor manual page updates. Various cleanups. Implementing the -s command line option. 20060701 FINALLY found the bug which prevented Linux and Ultrix from running without the ugly hack in the R2000/R3000 cache isol code; it was the phystranslation hint array which was buggy. Removing the phystranslation hint code completely, for now. 20060702 Minor dyntrans cleanups; invalidation of physpages now only invalidate those parts of a page that have actually been translated. (32 parts per page.) Some MIPS non-R3000 speed fixes. Experimenting with MIPS instruction combination for some addiu+bne+sw loops, and sw+sw+sw. Adding support (again) for larger-than-4KB pages in MIPS tlbw*. Continuing on SPARC emulation: adding load/store instructions. 20060704 Fixing a virtual vs physical page shift bug in the new tlbw* implementation. Problem noticed by Jakub Jermar. (Many thanks.) Moving rfe and eret to cpu_mips_instr.c, since that is the only place that uses them nowadays. 20060705 Removing the BSD license from the "testmachine" include files, placing them in the public domain instead; this enables the testmachine stuff to be used from projects which are incompatible with the BSD license for some reason. 20060707 Adding instruction combinations for the R2000/R3000 L1 I-cache invalidation code used by NetBSD/pmax 3.0, lui+addiu, various branches followed by addiu or nop, and jr ra followed by addiu. The time it takes to perform a full NetBSD/pmax R3000 install on the laptop has dropped from 573 seconds to 539. :-) 20060708 Adding a framebuffer controller device (dev_fbctrl), which so far can be used to change the fb resolution during runtime, but in the future will also be useful for accelerated block fill/ copy, and possibly also simplified character output. Adding an instruction combination for NetBSD/pmax' strlen. 20060709 Minor fixes: reading raw files in src/file.c wasn't memblock aligned, removing buggy multi_sw MIPS instruction combination, etc. 20060711 Adding a machine_qemu.c, which contains a "qemu_mips" machine. (It mimics QEMU's MIPS machine mode, so that a test kernel made for QEMU_MIPS also can run in GXemul... at least to some extent.) Adding a short section about how to run this mode to doc/guestoses.html. 20060714 Misc. minor code cleanups. 20060715 Applying a patch which adds getchar() to promemul/yamon.c (from Oleksandr Tymoshenko). Adding yamon.h from NetBSD, and rewriting yamon.c to use it (instead of ugly hardcoded numbers) + some cleanup. 20060716 Found and fixed the bug which broke single-stepping of 64-bit programs between 0.4.0 and 0.4.0.1 (caused by too quick refactoring and no testing). Hopefully this fix will not break too many other things. 20060718 Continuing on the 8253 PIT; it now works with Linux/QEMU_MIPS. Re-adding the sw+sw+sw instr comb (the problem was that I had ignored endian issues); however, it doesn't seem to give any big performance gain. 20060720 Adding a dummy Transputer mode (T414, T800 etc) skeleton (only the 'j' and 'ldc' instructions are implemented so far). :-} 20060721 Adding gtreg.h from NetBSD, updating dev_gt.c to use it, plus misc. other updates to get Linux 2.6 for evbmips/malta working (thanks to Alec Voropay for the details). FINALLY found and fixed the bug which made tlbw* for non-R3000 buggy; it was a reference count problem in the dyntrans core. 20060722 Testing stuff; things seem stable enough for a new release. ============== RELEASE 0.4.1 ==============
1 | dpavlin | 14 | /* |
2 | dpavlin | 22 | * Copyright (C) 2005-2006 Anders Gavare. All rights reserved. |
3 | dpavlin | 14 | * |
4 | * Redistribution and use in source and binary forms, with or without | ||
5 | * modification, are permitted provided that the following conditions are met: | ||
6 | * | ||
7 | * 1. Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * 2. Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * 3. The name of the author may not be used to endorse or promote products | ||
13 | * derived from this software without specific prior written permission. | ||
14 | * | ||
15 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | ||
16 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
17 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
18 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | ||
19 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
20 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
21 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
22 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
23 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||
24 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||
25 | * SUCH DAMAGE. | ||
26 | * | ||
27 | * | ||
28 | dpavlin | 28 | * $Id: yamon.c,v 1.5 2006/07/16 13:51:55 debug Exp $ |
29 | dpavlin | 14 | * |
30 | dpavlin | 28 | * YAMON emulation. (Very basic, only what is needed to get NetBSD booting.) |
31 | dpavlin | 14 | */ |
32 | |||
33 | #include <stdio.h> | ||
34 | #include <stdlib.h> | ||
35 | #include <string.h> | ||
36 | #include <sys/types.h> | ||
37 | |||
38 | #include "console.h" | ||
39 | #include "cpu.h" | ||
40 | #include "cpu_mips.h" | ||
41 | #include "machine.h" | ||
42 | #include "memory.h" | ||
43 | #include "misc.h" | ||
44 | |||
45 | #ifdef ENABLE_MIPS | ||
46 | |||
47 | dpavlin | 28 | #include "yamon.h" |
48 | dpavlin | 14 | |
49 | |||
50 | /* | ||
51 | * yamon_emul(): | ||
52 | * | ||
53 | * YAMON emulation (for evbmips). | ||
54 | */ | ||
55 | int yamon_emul(struct cpu *cpu) | ||
56 | { | ||
57 | dpavlin | 28 | uint32_t ofs = (cpu->pc & 0xff) + YAMON_FUNCTION_BASE; |
58 | uint8_t ch; | ||
59 | dpavlin | 14 | int n; |
60 | |||
61 | switch (ofs) { | ||
62 | dpavlin | 28 | |
63 | case YAMON_PRINT_COUNT_OFS: | ||
64 | /* | ||
65 | * print count: | ||
66 | * a1 = string | ||
67 | * a2 = count | ||
68 | */ | ||
69 | dpavlin | 14 | n = 0; |
70 | dpavlin | 28 | while (n < (int32_t)cpu->cd.mips.gpr[MIPS_GPR_A2]) { |
71 | cpu->memory_rw(cpu, cpu->mem, (int32_t)cpu->cd.mips.gpr | ||
72 | [MIPS_GPR_A1] + n, &ch, sizeof(ch), MEM_READ, | ||
73 | CACHE_DATA | NO_EXCEPTIONS); | ||
74 | console_putchar(cpu->machine->main_console_handle, ch); | ||
75 | dpavlin | 14 | n++; |
76 | } | ||
77 | break; | ||
78 | dpavlin | 28 | |
79 | case YAMON_EXIT_OFS: | ||
80 | /* | ||
81 | * exit | ||
82 | */ | ||
83 | debug("[ yamon_emul(): exit ]\n"); | ||
84 | dpavlin | 14 | cpu->running = 0; |
85 | break; | ||
86 | dpavlin | 28 | |
87 | /* YAMON_FLUSH_CACHE_OFS: TODO */ | ||
88 | /* YAMON_PRINT_OFS: TODO */ | ||
89 | /* YAMON_REG_CPU_ISR_OFS: TODO */ | ||
90 | /* YAMON_DEREG_CPU_ISR_OFS: TODO */ | ||
91 | /* YAMON_REG_IC_ISR_OFS: TODO */ | ||
92 | /* YAMON_DEREG_IC_ISR_OFS: TODO */ | ||
93 | /* YAMON_REG_ESR_OFS: TODO */ | ||
94 | /* YAMON_DEREG_ESR_OFS: TODO */ | ||
95 | |||
96 | case YAMON_GETCHAR_OFS: | ||
97 | n = console_readchar(cpu->machine->main_console_handle); | ||
98 | /* Note: -1 (if no char was available) becomes 0xff: */ | ||
99 | ch = n; | ||
100 | cpu->memory_rw(cpu, cpu->mem, (int32_t)cpu->cd.mips.gpr[ | ||
101 | MIPS_GPR_A1], &ch, sizeof(ch), MEM_WRITE, | ||
102 | CACHE_DATA | NO_EXCEPTIONS); | ||
103 | break; | ||
104 | |||
105 | case YAMON_SYSCON_READ_OFS: | ||
106 | /* | ||
107 | * syscon | ||
108 | */ | ||
109 | dpavlin | 14 | fatal("[ yamon_emul(): syscon: TODO ]\n"); |
110 | dpavlin | 28 | |
111 | dpavlin | 14 | /* TODO. For now, return some kind of "failure": */ |
112 | cpu->cd.mips.gpr[MIPS_GPR_V0] = 1; | ||
113 | break; | ||
114 | dpavlin | 28 | |
115 | dpavlin | 14 | default:cpu_register_dump(cpu->machine, cpu, 1, 0); |
116 | printf("\n"); | ||
117 | dpavlin | 28 | fatal("[ yamon_emul(): unimplemented yamon function 0x%" |
118 | PRIx32" ]\n", ofs); | ||
119 | dpavlin | 14 | cpu->running = 0; |
120 | cpu->dead = 1; | ||
121 | } | ||
122 | |||
123 | return 1; | ||
124 | } | ||
125 | |||
126 | #endif /* ENABLE_MIPS */ |
ViewVC Help | |
Powered by ViewVC 1.1.26 |