- tftp_send_optack() was not 64-bit clean (patch from SF bug #1787500)
[bochs-mirror.git] / TODO
blob3b6afe89f1a9990c35905b7d54360b51f72278c5
1 This is the "roadmap" posted in the mailing list, augmented by 
2 comments from the mailing list and the irc chat. 
3 Anybody is welcome to work on any of these issues. Some of
4 these items are rather simple and can be implemented by single 
5 individuals. Other items are quite complex and development needs 
6 to be coordonated. So, if you want to contribute, please drop 
7 us a note in the mailing list, so you can get help or exchange 
8 ideas.
9 Christophe Bothamy.
11 0. Donations
12 Source Forge recently set up a donation system for hosted projects.
13 Should we accept donations ? What could we do with the money ? 
14 - give to EFF, FSF or other 
15 - fund Kevin to continue the work on plex86 so we can use it
16 - bounties for somebody write optimized win9x/NT/XFree/linux/*BSD 
17   drivers for our vga/net/ide cards
18 - other ?
19 Status in Bochs 2.3:
20 No decisions about this yet.
22 1. Speed
23 Speed (well lack of) is one of the biggest criticism made by users
24 who'd like to see Bochs run as fast as Virtual PC.
25 Paths we can explore to get more speed :
26 4.1 virtualization : plex86
27 4.2 dynamic translation : qemu, patch from h.johansson
28 4.3 optimizations of instructions path / host asm (Conn Clark has been
29 working on this, and an anonymous patch for win32 
30 http://sourceforge.net/tracker/index.php?func=detail&aid=867044&group_id=12580&atid=312580
32 Status:
33 Not done yet.
35 2. Plugin architecture
36 2.1 The plugin architecture can be reworked if we want to support
37 multiple similar devices like seral net or vga cards.
38 We currently have two "types" of plugins: "core" and "optional". 
39 Maybe we could add "classes" of plugins. The current version of 
40 Bochs supports the classes "display_library" and "io_device". 
41 New classes can be "config_interface", "net_lowlevel" and 
42 "sound_lowlevel"
43 2.2 Stanislav wrote :
44 Plugin architecture should be rewritten like real plugin architecture s.t.
45 Bochs VGA plugin for example will be real plugin. I mean that replacement 
46 of plugin dll in already compiled Bochs will replace Bochs VGA card and 
47 the new card will be detected automatically.
48 This will allow for example developing of plugins separately from Bochs.
49 2.3 Michael Brown wrote :
50 If the configuration interface is to be reworked, could we also make it so 
51 that plugins are self-contained, rather than needing to pollute config.cc 
52 with code for defining and parsing plugin-specific options
53 Status:
54 A little bit of the basic work is done now: The config parameter handling has
55 been rewritten to a parameter tree and user-defined bochsrc options are now
56 supported. The main plugin architecture rewrite is not done yet.
58 3. PCI host<->guest proxy
59 Being able to use a real pci device from inside Bochs would be a 
60 great feature of Bochs. It would ease reverse engineering of non
61 documented cards, or one could even use a real spare vga card.
62 Frank Cornellis has done a great job on this subject, and we began
63 integrating his changes. 
64 Status:
65 The pcidev device is present in CVS and it has been updated for the new PCI
66 infrastructure, but the new code is untested yet.
68 4. Subdirectories in iodev
69 The iodev directory contains the various implemented iodevice.
70 With the new pci devices, new harddrives and new net access methods, 
71 it could be interesting to add new subdirectories like :
72 iodev/video/... --> for standard vga and new card emulation
73 iodev/disks/... --> for the ata/atapi classes, hd/cd classes and host accesses
74 iodev/net/...   --> for ne2k and host net access
75 isa and pci devices would be mixed in the directories, but this should
76 be manageable.
77 Status:
78 Not done yet.
80 5 multithreading. Conn Clark wrote :
81 Threading might be nice too, for those of us who have SMP/SMT machines. 
82 I have a patch from Mathis (who hangs out on the IRC channel all the 
83 time) that puts the video card interface in its own thread. It has 
84 troubles though that I have not resolved. It may also be easier to debug 
85 a threaded peripheral.
86 I also think that it might be possible to thread a chunk of the CPU 
87 emulation to improve performance on a SMP/SMT machine. Specificaly 
88 write_virtual_dword, write_virtual_word, write_virtual_byte, etc... 
89 might just be able to be threaded. I think the threading overhead might 
90 be less than the protection and address translation code. We would have 
91 to try it to find out. I'm also sure there can be some nasty hurdles to 
92 overcome.
93 Status:
94 Not done yet.
96 6. CPU
97 6.1 This was asked in the ml, and I believe it's a good idea to provide
98 a configure switch to set the cpu model, for example :
99 --with-cpu-386
100 --with-cpu-486dx
101 --with-cpu-pentium
102 --with-cpu-pentium-mmx
103 --with-cpu-k6-iii
104 --with-cpu-amd64
105 and so on. The main difficulty here is to set up the list of features
106 by cpu model. I started such a list, available at 
107 http://cbothamy.free.fr/projects/bochs/CPU_Features.sxc
108 The configure script will then set up constants on features to compile in,
109 ISA, FPU, MMX, 3DNOW, SSE, etc... Most of the feature flags already 
110 exists in config.h, so this should be easy. It would also be a good
111 idea to clean up the cpuid function beased on those flags.
112 We also have to keep in mind that some features are also enablable
113 by the guest os.
114 Please note the all features are still not supported/complete in Bochs.
115 6.2 Stanislav thinks that configure --with-cpu-pentium-mmx --enable-cpu-level-4 
116 would create lots of conflicts in the generated config.h. He suggests
117 that we should write an external GUI configure script that would propose 
118 standard or custom cpus and would detect conflicts.
119 Status:
120 Not done yet.
122 7. VGA
123 For SVGA emulation we have Bochs VBE and the Cirrus adapter. We should have
124 a look at the voodoo3 (specs http://v3tv.sourceforge.net/docs.php).
125 Status:
126 Not done yet.
128 8. Random thoughts on disk emulation improvements :
129 8.1 lba48 support
130 8.2 autodetection of disk size / geometry
131 8.3 uml cow disk image support
132 8.4 compressed disk image support
133 8.5 extend redolog-disk specification to add coherency check of the flat 
134 image file, by storing its fstat-mtime field in the redolog.
135 Status:
136 Autodetection now works for all image types created with bximage and vmware3
137 images. The other items are not done yet.
139 9. net
140 9.1 bootable ethernet rom ? 
141 see etherboot, Micheal Brown wrote :
142 This already works; you can build an Etherboot rom image with the pnic 
143 driver, specify it as an option ROM in bochsrc and it will boot.  I'm 
144 using this extensively at the moment in Etherboot development.
145 In the Etherboot project's CVS, in the contrib/bochs directory, you can
146 find a working bochsrc file and an up-to-date README with step-by-step 
147 instructions on getting this working.
148 Status:
149 The pnic device is present in CVS, but the status is unknown.
151 10. Bios
152 10.1 our bios is quite heavy on stack space (notably during int13 functions).
153 Some parts can be rewritten in assembler, to save stack space and 
154 make code smaller. A new BIOS project for Bochs has been started at
155 http://bcos.hopto.org/bios.html.
156 Status:
157 Under construction.
159 10.2 add "jump table placeholder" and log missing function calls in the bios. 
160 Check completness with Ralf Brown interrupt list.
161 Status:
162 Not done yet.
164 11. LGPL VGABios
165 11.1 Video parameters table
166 There is a very nice parameter table in 3dfx banshee document 
167 http://www2.lm-sensors.nu/~lm78/pdfs/Banshee_2d_spec.PDF
168 see also http://www.xyzzy.claranet.de/dos/vgacrt.c
169 Status:
170 The new version 0.6a of the LGPL'd VGABIOS has minimal support for the video
171 parameter table.
173 12. Optimized Guest drivers still needed : VGA, IDE, NET
174 We have a specific VGA driver for winNT/2K, but still
175 lack drivers for other OSes.
176 Status:
177 Not done yet.
179 13. USB support
180 Ben Lunt has been working on USB support. The USB mouse and keypad code
181 is present in Bochs and almost stable. USB flash disk support has been
182 started and the runtime device change support should be completed.
183 Status:
184 Under construction.
186 14. Patches / Bug reports
187 There are dozens of patches floating around. Some are outdated,
188 don't apply cleanly, are obsolete/unneeded. We could try to do 
189 some clean-up, and keep only relevent ones.
190 We should also clean up the SF bug tracker. Some bugreports are 
191 very old and we asked for more information with no response.
192 Status:
193 There is some progress, but still a lot of work to do.
195 15. Positions
196 If you want to help without coding, here are available positions :
197 16.1 Webmaster : update website (Jan Bruun Andersen offered to help)
198 16.2 patch coordonator : look at incoming patches (sourceforge and 
199 mailing list) and upload / update in the cvs patches directory.
200 16.3 platform maintainers for macos / win32 
201 16.4 disk image maintainer : create and maintain our collection
202 of disk images. Usually, only the configuration file needs to be
203 updated, and old bios files have to be removed.  Some packages 
204 still contain very old bios files, they should definitely have
205 to be removed.
206 Status:
207 More active developers are needed to do the things described above.
209 16. Bochs demo cd/dvd
210 With version 2.1, it is now technically possible to use disk images 
211 on a read-only media, with a journal files on a read/write media. 
212 It would be great to create a demo cd/dvd with executables for 
213 supported platforms, configuration files and read-only disk 
214 images, the journal files would be written in a temporary 
215 directory on the harddisk.
216 Status:
217 Not done yet.
219 17. Other CPU architectures : arm, ppc 
220 This has been asked in the mailing list. I'm not really
221 interested, but other people might be. Should we propose to 
222 host the new CPUs code in our source tree, or should we let 
223 people fork ?
224 Status:
225 Not done yet.
227 18. Config file and dynamic menu
228 18.1 Benjamen R. Meyer wrote :
229 I think we should rework the .bochsrc file to be more standard across all
230 devices. I like how the USB configuration is done in it, and think we should
231 put something similar together for everything else. In otherwords, create
232 something that can be easily used for everything, and make it easier to
233 configure in the process.
234 From what I can tell right now, most of the configuration lines are randomly
235 thrown together as each gets implemented or added, instead of having
236 something that is based on a standard approach to the configuration.
237 The result should be something that would be able to easily auto-configured
238 by another program (a configuration editor?) with minimal changes necessary
239 when new devices/features are added.
240 18.2  Franck Cornelis wrote : the config system needs some work... 
241 e.g. the main menu is static while it could be generated at run-time...
242 the main menu text lives somewhere in a file... while it should be generated 
243 at run-time by iterating the main menu objects
244 Status:
245 The config options handling has been rewritten to a parameter tree.
247 19. Save/Restore
248 We already have a specific branch in the cvs with a save/restore
249 framework. The work still needs to be completed.
250 I guess it would be useful to be able to stop and
251 restart the emulation, or create "checkpoints"  to restart the
252 emulation from a known state. We can also give a look on how
253 integrate commitable harddisks with the save/restore strategy.
254 Status:
255 Save/restore of config and log options and the hardware state is supported now.
256 Harddisk images are not handled yet.
258 20. ACPI support
259 Bochs 2.2.6 is the first real SMP release, with changes made in Bochs 2.2.6
260 we able to boot linux SMP or WinNT SMP systems. But all modern OS'es require
261 ACPI support even for single CPU configuration to boot up. The minimal ACPI
262 support contains generation of ACPI tables (i.e. APIC tables) similar to the
263 MP tables we have now. 
264 More about ACPI required changes: http://bcos.hopto.org/acpi.html
265 Status:
266 Not done yet.
268 21. add to the roadmap that we should find some ideas to check 
269 correctness of instructions emulation, especially system instructions.  
270 arithmetic instructions could be validated with simply random testing
271 Status:
272 Not done yet.
274 22. lowlevel serial support for Windows.
275 Volker is currently working on this.
276 Status:
277 Not yet complete (transmit works, receive is losing data).
279 23. Parallel port
280 Conn Clark wrote :
281 I would like to see better parallel port support so I can use a dongle. 
282 This is something I would find very useful as it would mean I wouldn't 
283 have to boot back into windows ever again. I also recognize that this 
284 may require a kernel module be written, which is beyond my current 
285 skills.  I know others will find this useful as I have had to tell a 
286 few people that their parallel port driven peripherals that require a 
287 bidirectional parallel port won't work.
288 Status:
289 Not done yet.