vgabios: Make sure exported structs use PACKED.

Commit ca668640 introduced structs for data returned from the
handle_101b and handle_101c calls.  However, the structs were not
declared as packed and that caused incorrect behavior for
handle_101b.  This was seen to break some old DOS programs (Win3 setup
and DISPLAY.SYS).  This patch adds in the necessary PACKED declaration
to the structs.

The 'struct saveBDAstate' remains un-packed, as it does not appear
that its contents are documented.  (And, its format already differs
from what was in the previous "lgpl vgabios".)

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
vgabios: Simplify the bios save state area.

The structure of the "bios save state area" as returned by
handle_101c() and vbe_104f04() does not follow any particular order.
(And there does not appear to be any documentation that would require
it to follow a particular order.)

So, rearrange the layout of the struct to make save and restore
simpler.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
vgabios: Simplify save/restore mechanism.

Reorganize the save/restore functions to eliminate some boilerplate
code.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
vgabios: Attempt to detect old x86emu and force a fault.

Check for cases where the leal instruction does not work.  This
instruction is known to not be emulated properly on old versions of
x86emu.  If a broken version of x86emu is found, force a fault that
x86emu will easily detect.  This should help prevent soft failures
when running old software.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
vgabios: Don't interpret TAB character.

Several sources document that the Bell, Backspace, newline, and
carriage return characters are interpreted by int 10/0e.  There does
not seem to be any references to that function interpreting tab.  The
original "lgpl vgabios" has code for interpreting tab, but the code is
incorrect.  Finally, tests on an ATI vgabios indicate that tab is not
interpreted.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
vgabios: Refactor write_teletype and write_chars.

Factor out the common code of writing to the screen and advancing the
cursor position to a new function write_char().  Eliminate
write_chars() and then simplify write_teletype().  Also, eliminate the
separate scroll_one() function as it no longer reduces stack space.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>