The SDL forums have moved to
This is just a read-only archive of the previous forums, to keep old links working.

SDL Forum Index
Simple Directmedia Layer Forums
ClassicVCom HD Project

Joined: 10 Oct 2013
Posts: 11
I thought it would be time to announce the project I've been working on since April 2015. It is currently called the ClassicVCom HD, which will be a virtual computer/machine utilizing SDL 2.0 for various features such as rendering, audio, etc.

The whole purpose of this project is to introduce retro-styled gaming (from the 80s) into a modern world of HD resolution. You will be able to make games or even other programs for it that can run from resolutions of 320x240 (One of MS-DOS's Nostalgic resolutions) to 1920x1080 (Full-HD resolution of 1080p). Idea came about when I was thinking about an idea involving making a 1-bit (monochrome) or 2-bit (basic grayscale) game on a very high resolution. That hit me with an idea of making a virtual computer that would enable making games with fewer bits of graphics support. Initially, my plan to was to enable up to 4 bits (You can use any color from the 24-bit to 32-bit library of colors.). I eventually extended it to 6-bit for 64 color support.

Early on when the project was first started, I was using a console application for handling ClassicVDOS (which is it's own DOS environment). My initial plan for that was to transfer to a GUI application when you run programs through it. However, I came up with a better idea of making it more full-fledged by actually turning the whole into a GUI or graphical interface. Basically, it comes with it's very own environment. That made it actually possible to port to other platforms due to far less dependence on any console window.

Here is even a screenshot of what currently works:

There are few commands for the DOS environment at the moment. They are Cd (Changes directories), Clear (mainly used to clear the screen), Del (Deletes files. This delete allows you to specify a type of file to delete in the event there are executable programs or regular files.), Dir (Views the current directory), Format (Actually doesn't work yet, but will display a message.), Mem (Views the amount of RAM available.), Mkdir (Creates directories.), Rmdir (Removes existing directories.), Run (Allows you to run programs. This will work soon as I'm beginning to work on executing instructions.), and Shutdown (Shuts down the virtual system.)

There is no audio support yet, but I have plenty of plans for this. It will utilize 8-bit audio, but have support for up to 5.1 channel audio. I thought it would be cool to utilize chip-tuned audio through multiple channels if desired. Heck, I actually came up with possible new plans in reference to audio support. I have no idea on how to do it yet since audio handling isn't in yet (probably will be handled through a nice virtual Audio Chip). As for frequency support, I'm thinking from a selection of 11025 Hz, 22050 Hz, 44100 Hz, and 48000 Hz in the event one wants to utilize higher fidelity audio.

In terms of a virtual hard drive, it will create a 256MB hard drive at present if it's your first time using it. Mounting features are currently under planning so one can bring programs made by others into their own virtual hard drive. CPU wise, it will be 32-bit (so it can utilize 16MB of RAM effectively and it can utilize 32-bit registers). For input, it will support keyboard and two game controllers/joysticks. However, I might add mouse support in the near future to make it niftier if need to be. Network support is currently being planned, which may enable online support for retro-styled modern games.

When the time is right, I may make it open-source or even come up with a special plan in that regard. One nifty perk I have for this project is you can eventually release programs or games for the virtual computer/machine for free or commercially. There are no conditions in that regard. No need to pay royalties since whatever programs you make it for it since they're your own work.

For anyone who wants to test it out, I have binary version floating around:

And here is also an Emscripten-produced Test Version (This version is slightly outdated compared to the binary version as I haven't added support for some of the changes yet on it):

Also for the curious, I actually have a partially working assembler for it at the moment. However, that won't be released till it can run programs. In fact, one of my first goals is to make a ROM version of ClassicVDOS to see if it works. When the time is right, I might start inviting anyone of y'all to contribute. Right now, I've been doing this on my own time to make sure it works up to quality.

Joined: 10 Oct 2013
Posts: 11
First update in a couple months on here and thought I would mention that ClassicVDOS now currently starts up from a ROM (though the main execution is still performed inside the C++ code). In fact, this is the first execution of a working program (though most of the instruction set still haven't been implemented yet). Cycle-based execution doesn't work yet to control the speed.

As for a more recent update in terms of code structure, I'm now going to implement virtual disk images that the virtual machine supports. It will load up similarly to a hard drive, but with less of a header than such. No space limitations either (except of course for your real hard drive). It will work similarly to an archive file (though uncompressed). I have also come up with plans for more system calls that could change the way ClassicVDOS works. That's about all I have to say for now.

Joined: 10 Oct 2013
Posts: 11
Been a long while since I mentioned about my project on here. That's because I've been doing other things besides the project. However, I have made a lot of interesting progress over the past few months. Months ago, I implemented the ability to mount the local directory the virtual computer resides in. You can mount it to HD0-9 (just by specifying a number). With that feature, it became possible to run programs for the first time. Since then, I have added more instructions, system calls, and even cycle simulation (just like cycle emulation for emulators).

Various other features have popped up as well. One being some of the older commands have been upgraded to handle multiple levels. A 'copy' command has been implemented just recently, which has become a very important piece to utilize virtual hard drives and virtual disk images. With that in mind, I plan on moving ClassicVDOS away from ROM and straight to a virtual disk image (possibly a way to install ClassicVDOS to a virtual hard drive). Another interesting feature that has been added (though incomplete) is the ability to add and even override existing commands relying on binary programs made with the assembler. Just store them in the 'CMDS' directory and they will automatically work. Currently, overriding 'run' and a few other commands are not recommended. Sooner or later, you'll be able to customize booting (possibly a form of BIOS or something else entirely). There is a good chance either late this year or next year that my assembler will go public for the first time. I figured that once it becomes more useful to the point you can start making games and/or other useful programs, you can benefit from the assembler.

No plans yet of what higher level languages to utilize. As for system support, I have achieved success with getting it to work on a Raspberry Pi 3 I got for Christmas a few months ago. This project was planned to be cross-platform from the start, but never thought about trying it on a Raspberry Pi before. Since I plan on turning it into a very portable virtual computer/machine that should run on most devices (ranging from full-fledged PCs down to even small computers like the Raspberry Pi and others); I figured why not. Should be usable on TVs as well if one wants to use it like say a Commodore 64 or certain Atari computers. That's about all I have to say for now. One extra note is in the near future, I'll release the virtual machine code as open source.