DOS Tool to save the first Megabyte of RAM to disk
Posted: Mon Jul 25, 2016 6:05 pm
I made a tiny tool (currently a 560-byte executable) that is used to save the first Megabyte of RAM to disk.
This is mainly useful to inspect the BIOS and its data such as the Interrupt Vector Table.
I made it because somebody asked me to post the BIOS image from my 386DX.
Here is that BIOS image embedded in the main 1-Megabyte BIOS/DOS image (the BIOS is located at physical address 0xF0000-0xFFFFF) so that's the offset to inspect with a hex editor like HIEW:
SAVEMEG.DAT
README.TXT
DOS COM binary only:
SAVEMEG.COM
Full source code, development tools and binary:
savemeg-2016-07-25.zip
The source code is very easy to follow. It's made up of tiny tricks (one trick turned into a data structure or function per individual source code file), and the files and functions have ordinal names so it's obvious to see what I implemented first and what point of the implementation of the code I'm using for all lines of code.
Also, this is the directory structure of the program:
/ -- The main directory contains code specific to the intended OS, for each targeted platform (one per ZIP)
/app -- Portable Cross-platform application code
/arch/sw -- OS-specific functions and data
/arch/hw -- hardware-specific functions and data
/_TOOLS_ -- development tools
EDIT: Link to SAVEMEG.DAT removed by Brendan. It's very likely that AMI's BIOS is still under copyright.
This is mainly useful to inspect the BIOS and its data such as the Interrupt Vector Table.
I made it because somebody asked me to post the BIOS image from my 386DX.
Here is that BIOS image embedded in the main 1-Megabyte BIOS/DOS image (the BIOS is located at physical address 0xF0000-0xFFFFF) so that's the offset to inspect with a hex editor like HIEW:
SAVEMEG.DAT
README.TXT
DOS COM binary only:
SAVEMEG.COM
Full source code, development tools and binary:
savemeg-2016-07-25.zip
The source code is very easy to follow. It's made up of tiny tricks (one trick turned into a data structure or function per individual source code file), and the files and functions have ordinal names so it's obvious to see what I implemented first and what point of the implementation of the code I'm using for all lines of code.
Also, this is the directory structure of the program:
/ -- The main directory contains code specific to the intended OS, for each targeted platform (one per ZIP)
/app -- Portable Cross-platform application code
/arch/sw -- OS-specific functions and data
/arch/hw -- hardware-specific functions and data
/_TOOLS_ -- development tools
Code: Select all
Standard Memory Map:
0x00000000-0x000003FF -- Real Mode Interrupt Vector Table
0x00000400-0x000004FF -- BIOS Data Area
0x00007C00-0x00007DFF -- 512-byte Boot Sector
0x0009FC00-0x0009FFFF -- EBDA (Extended BIOS Data Area)
0x000A0000-0x000BFFFF -- VGA video RAM
0x000C0000-0x000C7FFF -- Video BIOS
0x000C8000-0x000EFFFF -- Miscellaneous reserved memory
0x000F0000-0x000FFFFF -- Motherboard ROM BIOS Image