Booting DOS Games DirectlyI have added a good degree of usefulness and capability to use this boot sector by making it possible to boot COM files directly. Several DOS COM programs boot and run, and several don't. Some run but don't respond to the keyboard.
It will be good to find out which existing DOS programs are the simplest and make little or no use of third-party services (BIOS and above) to the point where they can boot and run without OS; group them, and learn from them.
Probably the authors of those games didn't want to buy a DOS license and just created the program so it could boot as a stand-alone gaming system or program, or under DOS.
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
Configuring Bochs to Run at the Speed of an 8088To run the old games, it will most likely be necessary to slow down the emulator. For Bochs, it can be done like the following (adjust the value if it's too fast or too slow to be playable):
Code:
# set up IPS value and clock sync
cpu: ips=100000
clock: sync=slowdown
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
Boot Sector/Floppy Image UpdateThe new boot code is here:
LowEST_Basics/Volume_0001/BootKern__FAT12_BootSect16.asmThis is the first floppy image I have done based on it, in the following URL, much more interesting than other previous examples I have made:
LowEST_Basics_Volume_0001.imgIt contains several COM programs that you can also assemble with NASM (there are old games without the source code, only the binary).
All you have to do is copy the COM file you want to test and rename it to
BOOTKERN.BIN in the root directory.
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
Included ProgramsI plan to stop including programs to this floppy image or other in the future until there's no more room left to include them and copy them to the root directory for booting:
Bootable Games without DOS- Cross Fire
- Pac Man
- Paratrooper
- Zaxxon
Bootable Demos without DOS- 16-bit boot program example that prints a string to text memory ("Hello Z86!!!")
- 2D and 3D rotation of simple points (BIOS 13h 320x200x256)
- "Jans Flame", "Jan's Flame", "jansflame". Fire effect (BIOS 13h 320x200x256)
Currently Creating: Direct standard VGA programming demonstration for modes 3h, 4h, 12h, 13h, and Mode X (not finished, doesn't do anything yet).
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
How to Boot COM Programs Without DOSThey have to support it, but we must also boot to an address compatible with DOS COM programs assembling to 100h.
I just adjusted the segment:offset address. I load the program binary at 700h physical, so to use it from base address 100h like a common COM DOS program, I just needed to do a far jump to 600h:100h:
Code:
;9. Jump to the 16-bit Real Mode bootup image
; (it's intended to jump to 70h:0000h or 700h physical):
;;
;Now jump to the kernel image we loaded into
;address 0x500, 0x600 or 0x700 physical (just like DOS).
;
;Here we will jump to a segment:offset address compatible
;with DOS COM programs loaded at 100h.
;
;With this, we will be able to boot directly into
;many old games and demos in COM format
;assembled for DOS segment 100h:
;;
jmp _kern16seg_minus_100h:100h
Code:
;13. Program variables here:
;;
;All of the variables below are 16-bit.
;
;They are outside of the boot code to make
;more room and only _FileBuffSegment is better off
;if we define and initialize it:
;;
_kern16seg equ 0x70
_kern16seg_minus_100h equ 0x60
_FileBuffSegment dw _kern16seg
_RootDirSect equ 8200h+0
_RootDirSectCount equ 8200h+2
_CurrFileClust equ 8200h+4
_ClustAreaSect equ 8200h+8
I guess that by digging these details it will be much easier to identify the simplest programs around for 16-bit.
An by the way, all of those games and demos are obviously independent from any DOS services for being able to run, and probably independent from some BIOS services (using direct hardware instead).