DOSEMU Technical Guide

The DOSEMU team

Edited by

Alistair MacDonald

For DOSEMU v1.2 pl0.0

This document is the amalgamation of a series of technical README files which were created to deal with the lack of DOSEMU documentation.


Table of Contents
1. Introduction
2. Runtime Configuration Options
2.1. Format of /etc/dosemu.users
2.2. Format of global.conf ( (old) .dosrc, -I option)
2.2.1. Enviroment variables and configuration variables
2.2.2. Conditional statements
2.2.3. Include files
2.2.4. Macro substitution
2.2.5. Expressions
2.2.6. String expressions
2.2.7. `Dry' testing your configuration
2.2.8. Debug statement
2.2.9. Miscellaneous
2.2.10. Code page and character set
2.2.11. Keyboard settings
2.2.12. Serial stuff
2.2.13. Networking Support
2.2.14. Terminals
2.2.15. X Support settings
2.2.16. Video settings ( console only )
2.2.17. Memory settings
2.2.18. IRQ passing
2.2.19. Port Access
2.2.20. Speaker
2.2.21. Hard disks
2.2.22. DOSEMU boot
2.2.23. Floppy disks
2.2.24. Printers
2.2.25. Sound
3. Accessing ports with dosemu
3.1. General
3.2. Port I/O access
3.2.1. System Integrity
3.2.2. System Security
3.2.3. The port server
4. The Virtual Flags
5. New Keyboard Code
5.1. Whats New
5.2. Status
5.3. Known bugs & incompatibilites
5.4. TODO
6. Old Keyboard Code
6.1. Whats New
6.2. Status
6.3. Keyboard server interface
6.4. Keyboard server structure
6.4.1. queue handling functions
6.4.2. The Front End
6.4.3. The Back End
6.5. Known bugs & incompatibilites
6.6. Changes from 0.61.10
6.7. TODO
7. Setting HogThreshold
8. Privileges and Running as User
8.1. What we were suffering from
8.2. The new 'priv stuff'
9. Timing issues in dosemu
9.1. The 64-bit timers
9.2. DOS 'view of time' and time stretching
9.3. Non-periodic timer modes in PIT
9.4. Fast timing
9.5. PIC/PIT synchronization and interrupt delay
9.6. The RTC emulation
9.7. General warnings
10. Pentium-specific issues in dosemu
10.1. The pentium cycle counter
10.2. How to compile for pentium
10.3. Runtime calibration
10.4. Timer precision
10.5. Additional points
11. The DANG system
11.1. Description
11.2. Changes from last compiler release
11.3. Using DANG in your code
11.4. DANG Markers
11.4.1. DANG_BEGIN_MODULE / DANG_END_MODULE
11.4.2. DANG_BEGIN_FUNCTION / DANG_END_FUNCTION
11.4.3. DANG_BEGIN_REMARK / DANG_END_REMARK
11.4.4. DANG_BEGIN_NEWIDEA / DANG_END_NEWIDEA
11.4.5. DANG_FIXTHIS
11.4.6. DANG_BEGIN_CHANGELOG / DANG_END_CHANGELOG
11.5. Usage
11.6. Future
12. mkfatimage -- Make a FAT hdimage pre-loaded with files
13. mkfatimage16 -- Make a large FAT hdimage pre-loaded with files
14. Documenting DOSEMU
14.1. Sections
14.2. Emphasising text
14.3. Lists
14.4. Quoting stuff
14.5. Special Characters
14.6. Cross-References & URLs
14.6.1. Cross-References
14.6.2. URLs
14.6.3. Email addresses
14.7. References
15. Sound Code
15.1. Current DOSEMU sound code
15.2. Original DOSEMU sound code
15.2.1. Reference
16. DMA Code
16.1. Current DOSEMU DMA code
16.2. Original DOSEMU DMA code
16.2.1. Adding DMA devices to DOSEMU
16.2.2. References
17. DOSEMU Programmable Interrupt Controller
17.1. Other features
17.2. Caveats
17.3. Notes on theory of operation:
17.3.1. Functions supported from DOSEMU side
17.3.2. Other Functions
17.4. A (very) little technical information for the curious
18. DOSEMU debugger v0.6
18.1. Introduction
18.2. Usage
18.3. Commands
18.4. Performance
18.5. Wish List
18.6. BUGS
18.6.1. Known bugs
19. MARK REJHON'S 16550 UART EMULATOR
19.1. PROGRAMMING INFORMATION
19.2. DEBUGGING HELP
19.3. FOSSIL EMULATION
19.4. COPYRIGHTS
20. Recovering the console after a crash
20.1. The mail message
21. Net code
22. Software X386 emulation
22.1. The CPU emulator
23. MFS and National Language Support
23.1. MFS and National Language Support
23.2. Patching of MFS
23.3. TODO:

1. Introduction

This documentation is derived from a number of smaller documents. This makes it easier for individuals to maintain the documentation relevant to their area of expertise. Previous attempts at documenting DOSEMU failed because the documentation on a large project like this quickly becomes too much for one person to handle.

These are the technical READMEs. Many of these have traditionally been scattered around the source directories.