Commit Graph
26 Commits
Author SHA1 Message Date
Hermès Bélusca-Maïto 7a52bcd33a [NTVDM]: Add a common helper to sync the BIOS cursor for the active display page, with VGA.
svn path=/branches/ntvdm/; revision=62409
2014-03-03 00:09:22 +00:00
Hermès Bélusca-Maïto b9b4ce1df4 [NTVDM]
Refactor more code to move common BIOS code from our bios32 into /bios/ .

svn path=/branches/ntvdm/; revision=62406
2014-03-02 22:50:31 +00:00
Hermès Bélusca-Maïto b960a23921 [NTVDM]: Fix INT 10h, AH=8h,9h,Ah ; remove AH=12h because it corresponds to video "alternate function select" (and not scroll window). Stubplement INT 10h, AH=13h.
svn path=/branches/ntvdm/; revision=62381
2014-03-02 18:41:22 +00:00
Hermès Bélusca-Maïto ab9978f190 [NTVDM]
- Finally get rid of console output handles in the BIOS.
- Move console text buffer copy from BIOS back into VGA memory (~= revert part of r61542), but do it ONLY when attaching the VGA emulation to the console.
- Fix cursor positioning in BIOS & VGA (work in progress).

- Initialize PS/2 after having setting basic console modes.
- Showing/hiding mouse cursor (see the option in the console menu) is done in while() loops to be sure the cursor is really shown/hidden (based on the return value of ShowConsoleCursor).

svn path=/branches/ntvdm/; revision=62373
2014-03-02 01:45:57 +00:00
Hermès Bélusca-Maïto 9e1ba5c534 [NTVDM]
Get rid of ConsoleInput handles in the BIOS; setting input console modes should be done in the emulator.c module itself (when setting user interface modes), and if a mouse is present, handle it in the ps2.c module.
Next step will be to get rid of ConsoleOutput handle in the BIOS.

svn path=/branches/ntvdm/; revision=62359
2014-02-28 21:21:41 +00:00
Hermès Bélusca-Maïto cb45ae15fa [NTVDM]
- Add BOP 0x12 "BiosGetMemorySize" (same number as the corresponding INTerrupt). Needed by ntio.sys when initializing (see next commit).
- Use ASCII names for bios image and dos kernel files names.
- Use the file helper functions committed before for implementing ROM image file loading.

svn path=/branches/ntvdm/; revision=62342
2014-02-27 03:05:42 +00:00
Hermès Bélusca-Maïto ae22dab753 [NTVDM]
- BIOS32: As a demonstration, load a BIOS expansion ROM (the one I've tested is the "OS in PCI expansion ROM" from: https://sites.google.com/site/pinczakko/building-a-kernel-in-pci-expansion-rom ; we don't support PCI thingies at all, but the bootstrap code works correctly).
- Initialize the BIOS32 stack for the callbacks.
- In the common BIOS functions, if we try to load the Windows NTVDM (SoftPC) BIOS (file: bios4.rom), we immediately hit a BOP 0x00 followed by INT 0x19 (bootstrap to run an OS). The BOP 0x00 is the function used by the BIOS to ask NTVDM to initialize the hardware, the IVT with data and so on. Also we finish to load the low part of the NTVDM BIOS in it (file: bios1.rom).
It's work-in-progress, nothing is done, there are lots of debugging code...

Have fun!

(to load a custom bios you need to put its filename as the first parameter of the BiosInitialize call, in the main() function in ntvdm.c).

svn path=/branches/ntvdm/; revision=62333
2014-02-26 01:16:56 +00:00
Hermès Bélusca-Maïto e03a6d7ebb [NTVDM]
- Add utility functions for loading ROM images from files, and running them.
- Add a missing PVOID in the MEM_ALIGN_DOWN macro.

svn path=/branches/ntvdm/; revision=62332
2014-02-26 01:07:09 +00:00
Hermès Bélusca-Maïto 9542b86934 [NTVDM]
- Move an "enable interrupts" command to where it belongs (i.e. in the BIOS32 initialization code; we do it at the very end). Otherwise some problems appears when trying to load 16-bit bios images.
- Use the new macro REAL_TO_PHYS to convert "real-mode" pointers (valid inside the VM only) into "physical" ones (valid in ROS/Windows/whatever).
- Add BIG HACKs (thanks Aleksander ;) ) in EmulatorRead/WriteMemory for wrapping up high memory addresses to low ones, so that we can load bios images (when you start running code at F000:FFF0).

To test 16-bit bios images: in ntvdm.c, put a valid bios file name in the BiosInitialize(...) call, and disable all DOS calls that happen before EmulatorSimulate().

svn path=/branches/ntvdm/; revision=62314
2014-02-24 00:33:21 +00:00
Hermès Bélusca-Maïto 679980a06c [NTVDM]
- BIOS location must be aligned on 32bit boundaries (or 16, I have to check). This fixes BIOS images loading when they miss a (null) byte to make them (e.g.) 8192 bytes long (example: the BIOS image of windows ntvdm).
- Add useful alignment (and others) macros.

svn path=/branches/ntvdm/; revision=62312
2014-02-23 20:40:09 +00:00
Hermès Bélusca-Maïto 6f5166457c [NTVDM]: We can call now directly the interrupts instead of the internal functions BiosPeekCharacter and VidBiosPrintCharacter (so that if some program hooks them, we behave correctly).
svn path=/branches/ntvdm/; revision=62311
2014-02-23 19:43:31 +00:00
Hermès Bélusca-Maïto b33a34bec1 [NTVDM]
- Use callbacks in BIOS/DOS (and disable int32.c)
- Move DOS bops to dem.c

svn path=/branches/ntvdm/; revision=62306
2014-02-23 16:09:35 +00:00
Hermès Bélusca-Maïto 9b24de4f64 [NTVDM]: Load a BIOS image in case its name is given in BiosInitialize.
svn path=/branches/ntvdm/; revision=62236
2014-02-17 22:50:41 +00:00
Hermès Bélusca-Maïto 574f922049 [NTVDM]
- Remove an unneeded assignment (cmos.c)
- Reorganize BIOS code: put our 32-bit bios in a dedicated directory; start to introduce a way to load other bioses (WIP).

svn path=/branches/ntvdm/; revision=62235
2014-02-17 22:20:03 +00:00
Hermès Bélusca-Maïto ac8e7f981c [NTVDM]: Silent few DPRINTs.
svn path=/branches/ntvdm/; revision=62018
2014-02-06 20:28:33 +00:00
Hermès Bélusca-Maïto 285d283861 [NTVDM]: Okay, let's clear the VGA memory everytime we change modes... (fixes VGA-->EGA transition in Dave).
svn path=/branches/ntvdm/; revision=61907
2014-02-01 20:55:57 +00:00
Hermès Bélusca-Maïto 951276a7d8 [NTVDM]: Remove erroneous comments.
svn path=/branches/ntvdm/; revision=61861
2014-01-28 17:26:26 +00:00
Hermès Bélusca-Maïto c98977184f [NTVDM]
- Start to refactor the DOS sources:
  Introduce the DEM (DOS Emulation) support library that is used by our built-in DOS, and that is used (via BOPs) by windows NT DOS (files: ntio.sys and ntdos.sys).
- Export some of DEM functions; stub most of them and implement the remaining ones (with existing code that we had in dos.c before).

svn path=/branches/ntvdm/; revision=61838
2014-01-26 18:25:59 +00:00
Hermès Bélusca-Maïto 1608c84d72 [NTVDM]: Implement a basic BIOS Wait interrupt INT 15h, AH=86h.
svn path=/branches/ntvdm/; revision=61821
2014-01-25 22:29:54 +00:00
Hermès Bélusca-Maïto f878b8abae [NTVDM]
Welcome sound in Advanced NetWars!
However it won't work totally due to problems in the PIT or in the sound emulation (and as a result, the emulator will "hang").

svn path=/branches/ntvdm/; revision=61809
2014-01-25 16:23:27 +00:00
Hermès Bélusca-Maïto 6ddfa7d2b8 [NTVDM]
- Move all the hardware initialization to EmulatorInitialize (since emulator.c can be viewed as support functions for emulating a PC motherboard) --> PS2 and VGA go there.
- Break bios.c into bios.c and kbdbios.c (the keyboard bios module) (according to the IBM documentation as well as other emulator sources or SeaBIOS or...).
- Move Exception handling from int32.c to emulator.c, because it's something tight to the emulator, not to the interrupt system by itself (yet it happens that INT 00h to 07h are commonly set to some exception handlers). In the bios.c, initialize those vectors with the default exception handler.
- Handling IRQs is done fully in bios.c now: introduce PicSetIRQMask and EnableHwIRQ helper functions (adapted from their equivalents from SeaBIOS) that allows the bios to set (and activate in the PIC) a given IRQ with its corresponding handler. Also introduce PicIRQComplete that serves as a PIC IRQ completer (i.e. sends the EOI to the right PIC(s)).
- Continuing on that, at the moment I set dumb default PIC IRQ handlers for IRQ 08h - 0Fh and IRQ 70h - 77h).
- By default I disable all the IRQs; there are then set on-demand with EnableHwIRQ.
- Rework the POST (aka. BiosInitialize function):
  * the memory size is now get from the CMOS (as well as the extended memory size via INT 12h, AH=88h),
  * then we initialize the interrupts,
  * then platform hardware (ie. the chips) are initialized,
  * and finally the keyboard and video bioses.
- As said before, move memory sizes into the CMOS.
- Simplify video bios initialization.

svn path=/branches/ntvdm/; revision=61796
2014-01-25 00:21:51 +00:00
Hermès Bélusca-Maïto 1d9208e0a3 [NTVDM]: Use EmulatorRead/WriteMemory instead of directly use the VgaXXXMemory helpers.
svn path=/branches/ntvdm/; revision=61786
2014-01-24 00:41:26 +00:00
Hermès Bélusca-Maïto f0466501fc [NTVDM]
- Do not export (for the PIC/PIT/Speaker) the port functions but use instead the common port interface.
- In bios.c : IOWriteB(PIC_MASTER_DATA, PIC_ICW4_8086 /* | PIC_ICW4_AEOI */); (line 377) : in NXVM they add PIC_ICW4_AEOI; [TheFlash], can you have a look at this and see whether it is required for the master PIC only, otherwise remove this comment.

svn path=/branches/ntvdm/; revision=61590
2014-01-11 21:45:01 +00:00
Hermès Bélusca-Maïto 40f773b96b [DDK:NT_VDD]
Declare some VDM memory services.

[NTVDM]
- Almost all of the XXXInitialize functions just return TRUE always, so VOIDify them instead (since they always succeed).
- Move almost all of the hardware initialization inside EmulatorInitialize.
- Move pure console initialization/mode-saving/cleanup code into ConsoleInit/Cleanup functions in ntvdm.c instead of in bios.c.

svn path=/branches/ntvdm/; revision=61588
2014-01-11 20:59:27 +00:00
Hermès Bélusca-Maïto 25105f6bec [NTVDM]: Break the BIOS into the BIOS and the video BIOS.
svn path=/branches/ntvdm/; revision=61586
2014-01-11 17:05:25 +00:00
Hermès Bélusca-Maïto 3d36bf4451 [NTVDM]: Start to organize the code...
svn path=/branches/ntvdm/; revision=61583
2014-01-11 15:27:18 +00:00