IBM PC emulator[IMPORTANT UPDATE]...

edited March 2017 in Software
Latest Update:
The emulator is currently in process of being migrated to an SVN repository system. As of now, the latest source code is now available and is already being provided at the SVN link posted here. The remainder of the emulator will also be moved to the new SVN host. Please report any problems with the SVN host in this topic here.
As some of you may know, I have been developing an emulator for the IBM PC, known as The Virtual Computer Collection. The idea for it originally started when I was becoming more and more extremely displeased with the state (or more like lack thereof) of "emulation" that was being seen in most emulators, particularly for the IBM PC product line which many so-called historians and emulator developers prefer to ignore.

Originally, I had started work on an emulator that was based off of PCem, but when that didn't work out (not only due to emulator problems causing the particular PCem version's compiled binaries to crash on my machine but also due to other people's attitudes and even various "restrictions" on sharing binaries built with the code itself despite supposedly being "free and open source" software that was even supposed to have been released under the GNU Public License which explicitly states that free usage and sharing is required by the license as a fact), I instead started development on a completely new emulator for my projects, based off of PCE.

The idea was to take the already stable and functionally excellent PCE emulator code, and extend it further to support new features such as new machines and new CPUs. The first of these features was the Intel 80386 CPU, which would require a major overhaul of the CPU code in order to support the new CPU, with support for new machines planned.

While earlier releases of the emulator itself have been released previously, the emulator itself has changed significantly since then. The CPU code, for example, has gone through a major overhaul in order to support both the Intel 80186 and lower and the Intel 80386 at the same time, and will continue to change as more and more of the 80386 CPU-related features are added back and tested over time. The other areas of the system have also changed to accommodate for the new machines (in this case the IBM PS/2 Model 25/30). And finally, a new version of the configuration file format is currently in development which will allow the selection of advanced configuration settings while remaining completely compatible with the earlier releases and with PCE.

What you are seeing here is a pre-release of the next emulator release. There will likely be several more before this version is completed, as more and more features are tested and developed over time.

Here are the following changes as of the latest version of this release:
- IBM PS/2 Model 25/30 (work in progress; gate arrays still in development with floppy disk controller about to begin development shortly)
- COMPAQ Portable/Portable Plus system board is now enabled and compiled by default, though it is still a placeholder of the IBM PC system board (there appear to have been very few differences between the two system boards in terms of chipsets, which explains why the machines are compatible with each other)
- Intel 80386 CPU (heavily incomplete until more features are added back after being tested; currently has fully working support for instruction prefixes; CPU still restricted to Real Mode operation until more protected mode instructions and features start being added back and tested)
- Undefined CPU instructions no longer cause the machine to result in an undefined loop in most cases
- Power supply unit emulation (very basic; not used for anything currently until more power specifications are added to each component)
- Compile environment for Microsoft Visual Studio (interfaces into minimal Cygwin interface as a substitute for the Visual Studio compiler)
- All updates applied from latest release of PCE emulator

As a result of the above changes, the file size for the main binary is significantly larger than that of PCE or even earlier releases of The Virtual Computer Collection, mainly due to the major changes that have been made in order to support the Intel 80386 CPU. Users who are upgrading from PCE, for example, will notice that the file size for the main executable is now over 6 MB, compared to just over 400 KB for PCE itself. The new IBM PS/2 machines have also added to this size even further.

Here is a list of known problems in this release:
- IBM PS/2 clock cycles may not be updated in certain areas of the emulator itself
- Microsoft Windows 3.0 in Real Mode must still be run under the 8086 or 80186 due to relying on 32-bit instructions which are not yet fully emulated
- Compiling this emulator under the Visual Studio project will result in the other architectures being compiled first and then attempting to compile the RC759 architecture after finishing creation of the IBM PC emulator's executable, at which point an error is reported, which does not affect the compile process for the IBM PC emulator
- Certain source code comments may be incorrect
Please do not submit bug reports on these issues mentioned above, since they are already known issues and will be corrected in future updates.

Emulator download and development toolkit:
https://mega.nz/#!j9AUiSzZ!yaeC7R4eZl_vzjxcAvs080I_q1pKkyiEIn-cCZmd9bE

UPDATE: New emulator release with improved IBM PS/2 Model 25/30 and Intel 80386 CPU support:
https://mega.nz/#!awojAbRb!CKFs_UZ5mfarrWM6Fr4PIS0Gy1x3PPMj8JFHLV4-JJ0

UPDATE: Source code updates for new release:
https://mega.nz/#!y1YDVabJ!PmHZywgx3FIZXlZRf4eepmsJz62q6XJf7WVoWNZo7tc

NEW: SVN Repository for latest source code:
https://svn.riouxsvn.com/tvcc

Original source code for current release:
https://mega.nz/#!HgoBQKYD!X3OjbFKWjmsHOuDlfNTiud7_2lfBkAKZ2IU0vPpoKuY

Minimal Cygwin compatibility layer (required for building using Microsoft Visual Studio)
https://mega.nz/#!ishSTCwT!rCrpiWOrzBDv8ha_pdgIB1q-_6lerFZzA2pNLAHIgug
Please note that I am still looking for a BIOS ROM image for the 8086-based IBM PS/2 Model 25 or Model 30. All of the downloads that I could find were for the Model 30 286, yet I was not able to find any such copies of the original 8086-based model's ROM image file on the Internet. If anyone could find a copy that they could send to me, then it would be greatly appreciated if they did that, since it would be far more convenient for me then trying to recreate the image on my own IBM PS/2 Model 30 due to the fact that the latter specifically requires the use of floppy disks.

EDIT: Download links replaced and updated
EDIT 2: Minimal Cygwin layer added for building on Windows using the included Microsoft Visual Studio project
EDIT 3: Released latest source code to the public as well as starting work on migrating the entire project to the new SVN repository system
«1

Comments

  • @SoftPCMuseum

    Thanks for introducting IBM PC emulator.
    By the way, can you upload it on Mega.nz or another URL?
    It seems to be very slow to download it.

    I have BIOS image of IBM PS/2 Model 30 (01-31-1989, 8086 based)

    P.S. I wonder you have Tandy 1000 HD.

    I want the BIOS of Tandy 1000 HD with HDC ROM.
  • ibmpc5150 wrote:
    @SoftPCMuseum

    Thanks for introducting IBM PC emulator.
    By the way, can you upload it on Mega.nz or another URL?
    It seems to be very slow to download it.

    I have BIOS image of IBM PS/2 Model 30 (01-31-1989, 8086 based)

    P.S. I wonder you have Tandy 1000 HD.

    I want the BIOS of Tandy 1000 HD with HDC ROM.
    If you could send me the ROM image then it would be appreciated, thanks.

    I also have access to Tandy laptop machine which is either the same as or similar to the one that you mentioned, however, I would need to recreate the ROM image file using the utility that John Elliott posted over at The Vintage Computer Forums, which would be much more difficult considering that I would need to set up a floppy disk drive with my PC if I wanted to copy the files back to it.

    Also, the download might be slower because the emulator also includes the hard disk images, which would result in significantly larger file sizes even when compressed. However, if other users also experience slow download speeds when downloading it then I'll try to find another host. The problem here was that most of the ones that I tried either required registration or deleted the files after a certain number of days, and still there were some websites that falsely claimed to be "uploading files" but which were most likely spam websites since they didn't even work at all.
  • @SoftPCMuseum

    Sent PM.

    You can use DUMP1000.EXE on Tandy 1000 MS-DOS.

    http://www.mess.org/_media/dumping:dump1000.zip
  • Chrome really didn't like that download site.

    Do you think this one would be able to run AIX 1.3?
  • VonOben wrote:
    Chrome really didn't like that download site.

    Do you think this one would be able to run AIX 1.3?
    IBM AIX 1.3 requires at least an Intel 80386 CPU or higher, so that would have to wait until the 80386 CPU emulation is more complete.

    Also, if you're having problems downloading this using Chrome, then you should also try another browser such as Internet Explorer or Edge and see if it works correctly there.
  • I've downloaded them. It takes over 3 hours to download completely.
    (downloaded it by Edge.)

    I don't recommend to download from "http://www.fast-files.com/" so much.

    I wonder your emulator can impement 80286 CPU.
  • ibmpc5150 wrote:
    I've downloaded them. It takes over 3 hours to download completely.
    (downloaded it by Edge.)

    I don't recommend to download from "http://www.fast-files.com/" so much.

    I wonder your emulator can impement 80286 CPU.
    I tried the download link, and I see exactly what you mean now. I'm going to re-upload the link to a temporary website, but it would still be far from permanent since all of the other sites that I tried either require registration or delete the files after a certain number of days.

    Thanks for finding this problem with the download links. I'll replace them immediately. The site also seems to be one of those "ad-filled" pages that I hate so much.

    Also, I received your ROM image files and will also be adding in a second configuration for the IBM PS/2 Model 25/30 with the new ROM image selected.
  • UPDATE: All download links have been replaced with new ones hosted by a different website. This is still not a permanent solution but it should at least solve the download problems that other users were reporting.

    Also, new IBM PS/2 Model 25/30 configurations were provided which now include the Collegiate Kit (which includes Microsoft Windows 1.04) as well as the IBM PS/2 Model 25/30 ROM BIOS which is provides as an option, along with slight updates which were made to the source code to separate the IBM PC and IBM PS/2 floppy disk controller operation for each command.

    The emulated IBM PS/2 Model 25/30 is sufficiently similar enough to run through the IBM PS/2 Model 25/30 ROM BIOS as far as the memory test, however, it is still far from complete which is why it fails on each of the component tests shortly afterwards. Over time, however, it should become more usable as more features are added into the emulator itself, which is why configurations for both ROM BIOS files are currently being provided. The files that launch the emulator using the latter will have the words "(new BIOS)" in the title and similarly, the configuration files being used with the new BIOS will begin with the name "icm" instead of "ibm".
  • @SoftPCMuseum

    Nice work.

    Also can you add 80286 support?

    I want to see the IBM PC 5162 or 5170 with 80286CPU on your emulator.
  • ibmpc5150 wrote:
    @SoftPCMuseum

    Nice work.

    Also can you add 80286 support?

    I want to see the IBM PC 5162 or 5170 with 80286CPU on your emulator.
    I'm currently working on the 80386 CPU first, though it can be enabled even with an IBM PC Model 5150/5160 which is equivalent to installing an Intel Inboard/386 PC accelerator board (I'm also using that as the test configuration for the CPU itself, since the new machines are still very much a work in progress). I'll probably start work on the 80286 CPU once the 80386 CPU is closer to completion. Note that it is still possible to select an 80286 CPU in the configuration file in this release, since it is automatically redirected to the 80386. Both products (the 80286 CPU and the IBM PC/AT) will definitely be added eventually.

    As far as the IBM PS/2 Model 25/30 is concerned, I'm also spending some time adding in support for the floppy disk controller that those machines used. Even in the archive provided in the original post, I have already separated the disk controller commands between the IBM PC and the IBM PS/2, and both machines continued to read floppy disks correctly.
  • It's been my experience that a lot of people slap the letters "GPL" on their software without understanding that that means. It's not unusual for me to find that someone wrote a supposedly "GPL'd" emulator, and used some of Marat Fayzullin's code in it, which is explicitly not GPL-compatible.

    (To be fair, I use Marat Fayzullin's code in several of my emulators - usually they're explicitly non-free, but in one case where I licensed the base code under a BSD-like license, I isolated his code out to a DLL specifically so that it could be replaced by free code at a later date!)
  • buricco wrote:
    It's been my experience that a lot of people slap the letters "GPL" on their software without understanding that that means. It's not unusual for me to find that someone wrote a supposedly "GPL'd" emulator, and used some of Marat Fayzullin's code in it, which is explicitly not GPL-compatible.

    (To be fair, I use Marat Fayzullin's code in several of my emulators - usually they're explicitly non-free, but in one case where I licensed the base code under a BSD-like license, I isolated his code out to a DLL specifically so that it could be replaced by free code at a later date!)
    If you're referring to my first post (specifically the part where I stated that the PCem developers wanted to impose restrictions on the free sharing of binaries despite supposedly being released under the GNU Public License), then I think that the main problem here is that people don't understand the difference between the source code being available and actually being open-source.

    While I do not agree with many of the GNU Project's policies (most notably their attitude towards users of other operating environments in particular), I will however agree with the fact that any software products released under their license are by definition freely available for unrestricted usage as long as they are not used to threaten anyone or any group of people with any type of criminal activities. The GNU Public License is by definition free as in freedom of use, meaning that the source code's availability only occurs as a consequence of these rights provided under the license itself. The whole point even of the license's existence is to promote complete freedom of usage of the software itself. That means therefore that any source code, compiled binaries, and derivative works may be freely modified, developed, and distributed to any party with no restrictions at all, provided that they are also released under what is either the same license or one that is completely compatible.

    There are many cases where the source code was available, in many cases even in its complete form, and yet was still heavily copyrighted nonetheless. The IBM PC Technical Reference Manual, for example, provided the complete source code listings for the IBM PC ROM BIOS as far as the IBM PC/AT, and yet IBM itself still won several court cases against manufacturers for the use of its copyrighted material. The source code for Microsoft Windows NT (and later Windows 2000) was provided by Microsoft to Mainsoft, and yet was still bound by the terms of the Microsoft End User License Agreement regardless of its availability to the company.

    I think that a lot of the issue here is that there seems to be some sort of "entitlement complex" among developers regarding the development and usage of their projects. They seem to have the idea that just because something is "free and open source" doesn't necessarily mean that everyone has the right to use the software in every way they can if the main developer happens to disapprove. But then, what is the point of it being "free and open source" then? If the source code has any such "restrictions" at all then on that basis alone I would not consider such software to be "free and open source".
    Also, yet another update: It seems that I forgot to include part of the Visual Studio project in the source code download. The project is designed to set up a configuration file and then load a minimal version of the Cygwin terminal that integrates itself into the Visual Studio editor (substituting for NMAKE) so that it can compile the software from there. However, the heavily cut-down version of Cygwin is missing from the downloads. I'm going to correct this as soon as possible by providing it as a separate download due to the increased file size.
  • UPDATE: Development is being continued on the floppy disk interface for the IBM PS/2 Model 25/30. The main issue here is with updating the code to support additional commands such as allowing the IBM PC floppy disk controller code to determine whether an inserted disk is write-protected or writeable in a way that could easily be accessed by the machine being emulated. The disk controller code now allows the write-protected status to be retrieved by itself, which is required by at least one of the system board's status register for the floppy disk controller.
  • UPDATE: The missing part of the Microsoft Visual Studio project has been added to the download links. Earlier, it was missing this portion, since I accidentally forgot to upload the heavily cut-down version of Cygwin that the project uses when building the emulator sources. Note that you will have to make sure that the "Cygwin" folder is in the same folder with the "IBM PC emulator" folder itself, otherwise, the batch files used for launching the build process won't be able to find that directory.

    I am also making some changes to the CPU code. Specifically, the source files for the Intel 80186 and higher CPUs are now built after the rest of the components (including the file with the Intel 8086 CPU instructions) rather than before. I am also going to change some of the instructions (such PUSH reg16 or reg32 and POP reg16 and reg32) so that they are instead executed as the "PC DOS Retro" page describes them (for example, having separate opcodes for PUSH AX/eAX and so on...).

    I have already finished transcribing the source code for the Intel 8272A floppy disk controller with quotes from the NEC uPD765 manual, so that it should be a lot easier now to work with the source code itself, since each function of the controller is now much easier to understand as a result.
  • UPDATE: Separating the opcodes for certain CPU instructions clearly wasn't going to work, since the PUSH reg16/32 and POP reg16/32 instructions would cause the machine to fail. Instead, as I later found out, the only area of the emulator that actually needed to be updated in that regard was for the instruction prefixes to allow the separate opcodes to point to the same subroutine for the instruction itself. The operation of the PUSH reg16/32 instruction when executed using an instruction prefix was also changed to match that of the code used for executing the instruction by itself.

    Since this change, both the PUSH and POP reg16/32 instructions can now be called from instruction prefixes for registers above eAX, and as such, Microsoft Windows 3.0 gets even further in its initialization when run in Real Mode (instead of hanging the machine with an "undefined operation: 66 5b" message in the emulator terminal, the system restarts, which is most likely the result of certain instructions needing to be updated for the 386).
  • I think a lot of people just don't "get" what the GPL means, and what it involves. Like all those emulator authors who use Marat Fayzullin's cores, and then put a GPL stamp on their program - doesn't work that way, Marat Fayzullin's code is for noncommercial use only and thus incompatible with the GPL.

    (I use Marat's 6502 core, heavily modified, in some of my programs. I either use a link-exception, or another license altogether.)
  • UPDATE: Development has continued further on the IBM PS/2 floppy disk interface. All of the floppy disk controller registers are currently being add into the emulator itself, again, using the IBM PS/2 Model 25 Technical Reference manual as the main reference source of information on that subject.

    For reference, here are some excellent articles from the OS/2 Museum regarding how the different IBM PC, IBM PC/AT, and IBM PS/2 floppy disk controllers worked and how they were designed:
    - The PC floppy subsystem: http://www.os2museum.com/wp/the-pc-floppy-subsystem/
    - The floppy controller evolution: http://www.os2museum.com/wp/the-floppy-controller-evolution/
    - Detecting floppy drive presence and type: http://www.os2museum.com/wp/detecting-floppy-drive-presence-and-type/
    - Detecting floppy drives and media: http://www.os2museum.com/wp/detecting-floppy-drives-and-media/
  • In case anyone sees that the main post has been "updated", no such changes have been made unless there was a new post about it. The reason why the last edit time changes is that each file is re-uploaded after 30 days to prevent them from going offline (since the download service deletes each file after 30 days of inactivity).

    As far as real updates are concerned, I am currently working more on the floppy disk controller. More specifically, I am adding in the capability to switch between different bit rates for different floppy disk types, as well as to simulate the use of write pre-compensation (both of which are recognized by the IBM PS/2's floppy disk controller).
  • UPDATE: Work on the IBM PS/2 Type 1 floppy disk controller appears to be complete. I might add in a few other minor changes in the future, but everything else seems to be in place, including the ability to switch between 250 BPS and 300 BPS which also required an update to the code for the NEC uPD765 and Intel 8272A floppy disk controllers to override the default disk drive speed.

    The next "phase" of development will most likely be spent with continuing work on the Intel 80386 CPU emulation, which was already being put aside as it is, due to the huge amount of work, time, and effort being spent in adding in support for the IBM PS/2's floppy disk controller. After that is the IBM PS/2 Model 25/30's hard disk controller.
  • IBM PS/2 Model 25/30 (8086) supports MCGA only on motherboard.
    (No VGA support without ISA VGA card.)
    Also Text font file for MCGA is on BIOS.

    I wonder it is possible to implement MCGA emulation only on PS/2 Model 25/30 (8088)
  • ibmpc5150 wrote:
    IBM PS/2 Model 25/30 (8086) supports MCGA only on motherboard.
    (No VGA support without ISA VGA card.)
    Also Text font file for MCGA is on BIOS.

    I wonder it is possible to implement MCGA emulation only on PS/2 Model 25/30 (8088)
    Currently I am working on finishing the rest of the machine before adding in MCGA support. Remember that there are still numerous remaining areas of the machine to add in first, before adding in MCGA support. One of those is going to be the IBM PS/2 Model 25/30 hard disk controller. And since all features of the MCGA adapter are available under VGA anyway, the more important issue at the moment is for me to be able to complete the rest of the machine first, before adding in the ability to select between MCGA or full-VGA. All of these features, however, will be added into the emulator eventually.
  • Currently, I am working more on the user interface portion of the emulator, which will be used for controlling the machine's functions (including disk drives).

    Originally, planning for the user interface portion started at the project's beginning, however, a lot of that had to be put on hold while I was working on the rest of the emulator as well as getting a stable development system working.

    The current version of the user interface started being developed, compiled, and even tested back in October. However, the user interface itself was so much incomplete that it was intended to be kept out of the public builds that are being released here until it is much more complete and usable.

    Currently, the user interface consists of a basic window with a menu bar used for modifying and replacing the machine's components (including CPU and even CPU steppings) as well as video adapter, disk controllers, and disk drives), as well as loading and saving configurations. More features are going to be added such as the ability to add and control disk drives as well as to add and control external peripherals. Once the user interface is complete enough to control most areas of the machine itself, then I'll start work on adding in the code necessary for each function to actually be usable.

    Over time, the user interface is going to become more and more functional, and will even include features similar to those found in IBMulator, however, the main issue at the moment is creating a user interface that is actually usable on a daily basis.

    Of course, one way how (exactly) NOT to design a user interface is that of the so-called "user interface" found in UniPCEmu. I have nothing more against that emulator than any other emulator, but the user interface to be quite honest looks like it came straight out of a video game machine (and therefore would look out of place even on most alternative operating systems, let alone Mac OS X or Windows), is EXTREMELY slow when navigating, is extremely limited in its configuration options, and is extremely difficult to navigate and use to say the least. I mean, come one now, even the PCem user interface is better than that. Thankfully, I am not going to repeat the same mistakes here.

  • >filedropper

    Bro, why aren't you using a source code repository like git?
  • Well, I'm actually considering a better source for my files, but believe me, it's going to take some time to set it up. So I suggest for you to be patient.
  • Well, I'm actually considering a better source for my files, but believe me, it's going to take some time to set it up. So I suggest for you to be patient.

    Is GitHub not an option?

    If not, what all do you specifically need for this? I might be able to get you some storage space to host these things.
  • Development is continuing on the Intel 80386 CPU. Currently, I am adding in support for the updated CMPSB (Compare String BYTE) and CMPSD (Compare String WORD)/CMPSW (Compare String DWORD) instructions (opcodes A6 and A7 respectively).

    One of the main problems that occurred however was the fact that even making the slightest change to the source code for the 80386 instructions would cause the machine to execute the undefined instruction FE F8, then jump to a lower address and execute 0F 04, both when attempting to load the operating system, and then hang completely from there. Since I already had issues with separating the instruction's "return" statements between the two CPUs and between each mode at that, I decided to make a slight change to the 8086 instruction's clock cycles to see if the emulator would continue working correctly there, and if it did, then I would know that the problem was having the instruction's functions separated. Finally, once this worked, I immediately restored the 80186 instruction's cycles and then changed the CPU code for the instruction to emulate all four behaviors (all three modes of the 80386 along with the single mode of the 80186) by merging them into the same function, which I did. This immediately corrected all of the problems that I had.
  • Nice work.

    Also I hope your Emulator supports PCjr / Tandy 1000.

    I have a few of PCjr / Tandy 1000 software with copy protected disk.
    PCE doesn't support this.
  • EDIT: The SVN repository is now officially online at the following link:
    https://svn.riouxsvn.com/tvcc
    The links in the first post have since been updated. Please report any problems with the repository. Note that content is still being added, which means that it will become more complete over time as the project's development is migrated. This will eventually include the source code revisions for the official releases, as well as the latest source code for the GUI interface.
  • UPDATE:
    A new release of the emulator is available. The IBM PS/2 Model 25/30 emulation is more complete due to the amount of work that was spent on it back in December (though it still needs more time before it can start using the new IBM PS/2 ROM BIOS), and major updates have since been made to the CPU.

    The most significant new "feature", however (aside from the IBM PS/2 improvements mentioned above), is the fact that the Intel 80386 CPU now identifies itself as being an Intel 80386. The PUSHF/PUSHFD and POPF/POPFD instructions have finally been updated to the 386 specifications described in the Intel 80386 Programmer's Reference Manual, and this particular instruction here is what applications typically will test for when checking for the presence of a 386 or higher CPU.

    Since programs are now able to identify the CPU as a 386 or higher, this will also cause certain issues since the programs will now try to execute instructions that were previously undefined on earlier CPUs, as well as to use instructions which still have yet to be updated to full 32-bit capability. This will obviously be corrected in the future as more and more 386 CPU instructions are added, so please be patient (or contribute to the project if you're interested).

    Since the CPU now identifies itself as an Intel 80386 CPU, I have also included a basic test environment for the real-mode (MS-DOS) portion of Microsoft Windows 95. Currently, the CPU code still needs much more work before it will actually be usable, though users will be able to watch it progress as more emulator builds are made available.

    The SVN repository has since been updated, and so have the official download links. The new release is provided as an update to the current one rather than actually being released as a complete build, and is intended to be applied over an existing installation of the current release.

    Screenshots:
    MSD identifying CPU as being a 386:
    Iw0lANB.png
    Windows 95 real-mode loader running (though more updates to the CPU will be needed before it finally reaches the command prompt):
    aljZhm0.png
  • Thanks.

    By the way, is it impossible to use any BIOS for 80386?
    Examole : Compaq's Deskpro 386 / IBM PS/2 Model 80 / AMI 386 / Award 386.
Sign In or Register to comment.