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 | 24 | /* |
2 | dpavlin | 28 | * $Id: rectangles.c,v 1.5 2006/07/09 07:53:33 debug Exp $ |
3 | dpavlin | 24 | * |
4 | * GXemul demo: Random rectangles | ||
5 | * | ||
6 | * This file is in the Public Domain. | ||
7 | */ | ||
8 | |||
9 | #include "dev_fb.h" | ||
10 | |||
11 | |||
12 | #ifdef MIPS | ||
13 | /* Note: The ugly cast to a signed int (32-bit) causes the address to be | ||
14 | sign-extended correctly on MIPS when compiled in 64-bit mode */ | ||
15 | #define PHYSADDR_OFFSET ((signed int)0xa0000000) | ||
16 | #else | ||
17 | #define PHYSADDR_OFFSET 0 | ||
18 | #endif | ||
19 | |||
20 | |||
21 | dpavlin | 28 | /* Framebuffer linear memory and controller base addresss: */ |
22 | dpavlin | 24 | #define FB_BASE (PHYSADDR_OFFSET + DEV_FB_ADDRESS) |
23 | dpavlin | 28 | #define FBCTRL_BASE (PHYSADDR_OFFSET + DEV_FBCTRL_ADDRESS) |
24 | dpavlin | 24 | |
25 | |||
26 | dpavlin | 28 | #define XRES 800 |
27 | #define YRES 600 | ||
28 | |||
29 | |||
30 | dpavlin | 24 | void my_memset(unsigned char *a, int x, int len) |
31 | { | ||
32 | while (len-- > 0) | ||
33 | *a++ = x; | ||
34 | } | ||
35 | |||
36 | |||
37 | void draw_rectangle(int x1, int y1, int x2, int y2, int c) | ||
38 | { | ||
39 | int y, len; | ||
40 | |||
41 | for (y=y1; y<=y2; y++) { | ||
42 | len = 3 * (x2-x1+1); | ||
43 | dpavlin | 28 | if (len > 0) { |
44 | my_memset((unsigned char *)FB_BASE + | ||
45 | 3 * (XRES * y + x1), c, len); | ||
46 | } | ||
47 | dpavlin | 24 | } |
48 | } | ||
49 | |||
50 | |||
51 | unsigned int my_random() | ||
52 | { | ||
53 | static int a = 0x124879b; | ||
54 | static int b = 0xb7856fa2; | ||
55 | int c = a ^ (b * 51); | ||
56 | a = 17 * c - (b * 171); | ||
57 | return c; | ||
58 | } | ||
59 | |||
60 | |||
61 | dpavlin | 28 | void fbctrl_write_port(int p) |
62 | { | ||
63 | *(volatile int *)(FBCTRL_BASE + DEV_FBCTRL_PORT) = p; | ||
64 | } | ||
65 | |||
66 | |||
67 | void fbctrl_write_data(int d) | ||
68 | { | ||
69 | *(volatile int *)(FBCTRL_BASE + DEV_FBCTRL_DATA) = d; | ||
70 | } | ||
71 | |||
72 | |||
73 | void fbctrl_set_x1(int v) | ||
74 | { | ||
75 | fbctrl_write_port(DEV_FBCTRL_PORT_X1); | ||
76 | fbctrl_write_data(v); | ||
77 | } | ||
78 | |||
79 | |||
80 | void fbctrl_set_y1(int v) | ||
81 | { | ||
82 | fbctrl_write_port(DEV_FBCTRL_PORT_Y1); | ||
83 | fbctrl_write_data(v); | ||
84 | } | ||
85 | |||
86 | |||
87 | void fbctrl_command(int c) | ||
88 | { | ||
89 | fbctrl_write_port(DEV_FBCTRL_PORT_COMMAND); | ||
90 | fbctrl_write_data(c); | ||
91 | } | ||
92 | |||
93 | |||
94 | void change_resolution(int xres, int yres) | ||
95 | { | ||
96 | fbctrl_set_x1(xres); | ||
97 | fbctrl_set_y1(yres); | ||
98 | fbctrl_command(DEV_FBCTRL_COMMAND_SET_RESOLUTION); | ||
99 | } | ||
100 | |||
101 | |||
102 | void f(void) | ||
103 | { | ||
104 | /* Change to the resolution we want: */ | ||
105 | change_resolution(XRES, YRES); | ||
106 | |||
107 | dpavlin | 24 | /* Draw random rectangles forever: */ |
108 | for (;;) { | ||
109 | dpavlin | 28 | draw_rectangle(my_random() % XRES, my_random() % YRES, |
110 | my_random() % XRES, my_random() % YRES, my_random()); | ||
111 | dpavlin | 24 | } |
112 | } | ||
113 |
ViewVC Help | |
Powered by ViewVC 1.1.26 |