Return to Home
Below is a compilation of some things I've worked on over the years. Feel free to put to use anything you find interesting!

3D Models

Status: Updated as needed.

Assembly (x86) Library

Status: Updated as needed.


Status: Updated as needed.

Name Released
A Proposed Implementation of Shared Libraries on DOS Platforms 05/25/2021

DOS Library

Status: Updated as needed.

Existing software I've packaged up in ZIP / FreeDOS package format.

All work was done under Linux Mint and a VirtualBox FreeDOS machine, text files are created/edited using Sublime Text with Windows "CR, LF" line endings, and archives are packaged using InfoZip 3.0 with the following recipe:

find -exec touch -t date {} \;
zip * -9 -k -r


Debug and DebugX are extended versions of the old MS DEBUG tool.

Version Size Released MD5
1.27 262.2 kB 11/08/2020 7FAADCDE19668D4DA970B2382497C057


This collection of drivers by Jack Ellis includes CC, RDisk, RDiskOn, UDVD2, UHDD, UIDE, and XMgr. This is a ZIP archive; individual package files are also available.

Version Size Released MD5
2020-07-14a 154.9 kB 04/29/2020 3CB9995D091F0280745E3D5ECF03105E
2020-04-15 154.2 kB 04/15/2020 4EE70D2099B155719EB5FA72C673C114


HimemSX is an XMS manager forked from FreeDOS Himem, but with the ability to handle extended memory above the traditional 4 GiB mark. These packages are built from items made available at Japheth's GitHub.

Version Size Released MD5
3.52 35.4 kB 12/17/2020 0EDC9CF1271C36A9087EDEE8689E227D
Bugfix: set RW page flag for page 0, else, if CR0.WP is set, a reboot occurs.
3.51 35.2 kB 11/12/2020 CF0EAA9F54AFBBBD244D5BF1668E60E0
Bugfixes include: xms block move function speed-up, optionally place page dir at the end of first memory block, return DX=0 if emb allocation fails (XMS spec), debug version: exceptions in protected-mode caught, printf() did assume SS==DS, restore rm CS after SX Protected Mode.
3.50 41.5 kB 11/01/2020 8E8C21028ED8424C012E553D527B47C2
Initial verison. Implements XMS v3.5, allowing access to memory beyond the 4 GiB barrier.


HimemX is an XMS manager derived from FreeDOS Himem, but with additional bugfixes, optimizations and extensions. These packages are built from items made available at Japheth's GitHub.

Version Size Released MD5
3.36 45.8 kB 10/29/2020 EDC60D0B65569033D7DD456A66E7B3F8
Bugfixes include: block moves >= 2GB failed due to signed comparison, remove unused and undocumented option /INT15:xx, removed useless option /NOX2MAX32, cleaned source code.
3.35a2 46.1 kB 05/19/2020 315B44C7AC0A24EFCF16D64EDB4C78D1
No binary change, but corrects a slight error in the directory structure in the previous version.
3.35a 45.9 kB 04/16/2020 7AAF5B907652D3A24ACB0E52E7D71013
This version includes a bugfix for an issue where, if no free handles were available, shrinking an EMB erroneously modified the block's size even though the call returned with a failure error.
3.35 45.7 kB 03/27/2020 E59CC47A19DDBD4BECBF4FC6063DA38C
This version of HiMemX implements an alternative memory (re)alloc method that may work better if extended memory consists of multiple blocks.
3.34b 32.6 kB 03/23/2020 0751FB0AC4B5C0A1CBC572CD45B03BFB
Fresh build of the existing version from the author's source code.


JWasm is a MASM-compatible assembler created by Andreas "Japheth" Grech.

Version Size Released MD5
2.14 1.9 MiB 12/20/2020 01BAF130479355B9812B524351F6E1AA
2.13 2.8 MiB 11/02/2020 77047F5ED539D134DA406E32E25952AF


ListPCI is a PCI device listing utility which scans the PCI bus of the system on which its running and displays data on all PCI devices it finds. It provides more verbose data than other comparable applications and is more flexible in its command line options. Using these, you may filter the devices reported to only those of a specified vendor ID or of a specified class. ListPCI can also return the number of matching devices in the DOS system variable ERRORLEVEL, making it easy to integrate into batch scripts.
Note: This application requires a 386 or higher CPU.

Version Size Released MD5
1.02 85.0 kB 07/11/2021 D2CA9DA733ACA0B9392722C1B83596FA
Added email address to application banner.
1.01 84.9 kB 07/09/2021 08A14DB07B6D2E3C7D6F50513D14676C
Improved string handling, added readme and scripts to package for building under DOS and Linux.
1.00 83.2 kB 07/01/2021 0F68D52928F377DB92FA266D7B34ECBF
Initial release.


ListVESA is a utility to report which VESA video modes are supported by the system's hardware. You can use command line options to tailor information listed to one specific mode, modes supporting a specific color bit depth, modes supporting linear frame buffer, or simply general information on the video adapter itself with no detailed screen mode data.
Note: This application requires a 386 or higher CPU.

Version Size Released MD5
1.01 16.5 kB 07/11/2021 FCACCEA595E2937C62E30A4206503F72
Added column and row figures for character widths and heights, added email address to application banner.
1.00 16.4 kB 07/10/2021 FD40BC28E609C93C34C47DB2616D3C74
Initial release.


RDisk is a driver which creates a RAM-disk from up to 2 GB of XMS memory.

Version Size Released MD5
2015-03-05d 17.3 kB 01/14/2021 E78205D005773A270CDE8B9641A34986
Updated documentation, no binary change.
2015-03-05c 18.5 kB 05/19/2020 218FCDE322793B76A3A12A95910EB9C5
No binary change, but corrects a slight error in the directory structure in the previous version.
2015-03-05b 18.3 kB 03/24/2020 07B638E543DBF825D3654AB1320F8E19
This package contains the existing 2015-03-05 binary but with more tailored documentation.


UDVD2 is a CD/DVD UltraDMA device driver. UDVD2 itself is now only useful for people who do not want caching or fast hard disk I/O, instead opting for a no-nonsense CD/DVD driver only. For any other situation, UIDE is preferred as it contains all the functionality of UDVD2 with the added benefit of read-ahead caching.

Version Size Released MD5
2015-03-05d 32.1 kB 01/14/2021 230AC320FF2F9F784E19F2D97C9E4C0D
Updated documentation, no binary change.
2015-03-05c 33.5 kB 05/19/2020 C8720C2825517C435FAD3A6BD19CE8B9
No binary change, but corrects a slight error in the directory structure in the previous version.
2015-03-05b 33.3 kB 03/24/2020 221E74477EB8CBC8CBA0F1C7020423BC
Same binary as the prevailing existing package but with extra LSM file keywords and the stray row of 0x1A bytes at the bottom of the original source code file has been removed to avoid potentially choking the compiler.


UHDD is a disk-only caching driver for up to ten BIOS disks using up to four UltraDMA controllers.

Version Size Released MD5
2021-06-08 42.8 kB 06/29/2021 404A1B3306BD764E458629241DE23C22
Supports Read-Ahead and DMA/Caching Overlap (with /O) for all cache sizes from 5 to 4093 MiB. UHDD now runs up to 10 BIOS disks instead of the previous 20.
2020-07-14 41.3 kB 01/11/2021 1A447C1EFCC23E451DFDC9AFE8C8CEB9
Now supports DMA/Caching Overlap; due to this, UHDD now runs up to 20 BIOS disks (instead of the previous 22).
2020-07-06 42.0 kB 07/28/2020 0C53143A4A5D4CEE63BC1FBD7D230B2A
Fixes bugs with controller masks and LBA48 flags.
2019-03-31b 42.2 kB 05/19/2020 3AE642E10AE62654EF0A37F94D90756D
No binary change, but corrects a slight error in the directory structure in the previous version.
2019-03-31 42.0 kB 03/24/2020 EB170504989295066E194F753140BD91
Contains the same UHDD and CC binaries as the existing FreeDOS UIDE package but tailored to UHDD specifically (UIDE has been removed as it already has a separate package), with extra LSM file keywords, and the stray row of 0x1A bytes at the bottom of the original source code removed to avoid potentially choking the compiler.


UIDE is a general-purpose caching driver for DOS drives, Floppy, CD/DVD, SATA and UltraDMA disks. The author notes that UIDE is better to save disk space, while UHDD + UDVD2 together allow for read-ahead, resulting in a faster experience.

Version Size Released MD5
2020-07-04b 55.5 kB 06/05/2021 467A6B83ED094E36998972FF4008535A
Updated documentation, again no binary change.
2020-07-04a 55.5 kB 01/14/2021 496F67A040854A62BCBF23A6311D8FEA
Updated documentation, no binary change.
2020-07-04 57.7 kB 07/28/2020 0E4F938BE4DA4F2C800DFB2EE2DA479B
As of this version, UIDE now contains all features of UDVD2 as well, allowing it to work in a standalone fashion, superseding situations where UDVD2 or UHDD or both were used in the past.
2015-03-05b 55.1 kB 05/19/2020 C5B01CC25096A45FE251807C20A06AFD
No binary change, but corrects a slight error in the directory structure in the previous version.
2015-03-05 54.9 kB 03/24/2020 6AEA726DAC710352997B1D988582F49B
This package contains the same UIDE and CC binaries as the existing FreeDOS UIDE package but tailored to UIDE specifically (UHDD has been removed and given its own package), with extra LSM file keywords, and the stray row of 0x1A bytes at the bottom of the original source code file has been removed to avoid potentially choking the compiler.


XMgr is an XMS manager which handles up to 4-GB of RAM and supports V3.70+ UMBPCI.

Version Size Released MD5
2020-04-15c 33.9 kB 01/14/2021 15F17F3C9A59E328FF9B38B0C3471564
Updated documentation, no binary change.
2020-04-15b 32.7 kB 05/19/2020 483D9083711D64D5D05838DC38A1C07D
No binary change, but corrects a slight error in the directory structure in the previous version.
2020-04-15 32.6 kB 04/15/2020 BB04B7C3FAE09539FA3011484E87C865
2015-03-05b 34.3 kB 03/24/2020 267A6B409A11A4B659AF9702EEC97BF3
Contains the same binary as the existing FreeDOS package but with more tailored documentation.


Status: Updated as needed.


Status: Cancelled

Kernel Series 2.0 Modules
Item Size Released MD5
Display Module 25.4 kB 07/17/2008 C58040756C84DF55130916A43A39FE06
This is the complete PowerBASIC source for the module that powers any and all things graphics related. It currently only supports 8 bit color, but future modifications will add 16 and 24 bit support as well.
File Module 15.2 kB 07/30/2008 5E7181C3197C382D53EACCE1D71B28BC
This module controls all manner of file access for the new kernel. Includes Windows-style LFN support.
Hardware Module 14.8 kB 09/02/2008 424CE41E4B9267DE565E318E64B481D0
The Hardware Module provides low level detailed interaction with the devices in the computer. Includes mouse support and drive probing.
Text Module 16.5 kB 09/18/2008 ADE3ADC2D2AE7592D091AA34763B5A0D
A collection of routines for manipulating text, entirely in XMS. Supports text objects up to 64MB in size.

Kernel Series 1.xx
Version Size Released MD5
1.40 140.7 kB 5B67D6032D97E890D9E93EE9923DD796
1.35 125.3 kB 0BC6FCFE6B9978A1B203EC1D7A1CE9A4
1.34 122.5 kB 9A73FE9AC8D4AE387BD06C26E60C6020
1.33 132.7 kB C3AF1221C3B1FB744B013BC8FF3964A7
1.00 98.2 kB 4D7007CF759C53182C41E1F6ED4E651E

Feature concept demos
Item Size Released MD5
CD interface demo 58.2 kB 10/04/2010 288621C627D144C35C10FD2864DF22DF
This is a demonstration of the audio CD support routines in the Sound Module.
MIDI demo 79.6 kB 4/28/2011 BB1A8022F04E4DA69A1568AFB9E9E016
A demo of the MIDI routines in the Sound Module.
sound_and_MIDI_drivers 17.3 kB 4/28/2011 530188B70B2D13C952D3D52B33C84944
These are hard to find [out of production] drivers for DOS which enable sound and MIDI support.

Exelyx Applications
Item Size Released MD5
KClock 606 bytes 12/30/2007 A42CFD07DD48DDB6B3DB51F614C2F3EA
A simple clock which stays resident in the upper right corner of the screen. Originally made only to test the kernel's multitasking and priority level processing. Includes assembly source code.
KDate 597 bytes 12/30/2007 0ED36BFB84456ABAD32F2A986F21F083
A plain date display app for the Exelyx kernel. Uses the priority functions of kernel 1.40 and up. Includes assembly source code.
Speed 692 bytes 12/12/2007 73EC788AE52A60EDCEE13380D71C344E
A utility which constantly prints the number of instruction loops being executed per second on your computer. Also includes assembly source code.

Development Tools
Item Size Released MD5
TechRef.rtf 29.3 kB 12/30/2007 6FBA0B66F89C460BD1CC07F2E5C5367E
The Exelyx kernel technical manual, which details everything from the kernel's internal assembly opcode set to the complete error code list and more... full of intricate goodies! 46.9 kB 12/11/2007 367A78E937AF67180F773AA549B18316
The Exelyx Assembly Compiler. A program which compiles assembly code into an executable program. Includes 'pachelp.txt', a guide for use, incomplete as it might be. 41.2 kB 12/9/2007 E625FCEFA715603D0917D471663A80DA
This compiler will take a BASIC source code file and translate it into Exelyx assembly. It will be compatible with the BASIC programming language, and will support many of PowerBASIC's additional statements. Any programs you have which are written in QBASIC or PowerBASIC should be easy to compile and run under Exelyx, usually without modification. It will also support accessing the API functions of other applications and the kernel itself through interrupts.

JavaScript Library

Status: Updated as needed.

Item Version Size Released MD5
Browser Detection Demo.html 2020-05-24 2.4 kB 3/16/2020 A1E4B5F224CAC60444CA3B290227550F
A demo of the BrowserGet function.
BrowserGet.js 2020-04-26 1.6 kB 3/16/2020 D6A6482BABD0262255F58F32B8D9F66B
A quick-and-dirty function allowing basic detection of the browser in which it's running.
Files Demo.html 2020-05-24 878 bytes 7/2/2020 C137CEFA882833FB8F816321AC73667B
A demo of Files.js.
Files.js 2020-05-24 2.5 kB 7/2/2020 4D9AA6CAF1186CC4826A4520BA61699E
A simple file save and load interface.
Sorting Algorithm Demo.html 2020-04-26 6.3 kB 3/11/2020 A8162A90B89DB49319DD4DBE27481273
Illustrates the difference in execution time amongst the various sorting algorithms in Sorting.js.
Sorting.js 2020-04-26 9.1 kB 3/11/2020 0C06F22B2740D9EFC721054D0FAC0499
A variety of sorting algorithms in one handy library! Includes Binary, Bubble, Heap, Insertion, Merge (Top-down), Merge (Bottom-up), Quick, Quick (Lomuto partitioning), Quick (Hoare partitioning), Radix Bucket, Radix LSD, Selection, and Shell algorithms.
WordSplit Demo.html 2020-04-26 2.2 kB 3/11/2020 E32EFB1007069EA5DC01AB194AB69764
A demonstration of how WordSplit differs from JavaScript's built-in Split function.
WordSplit.js 2020-05-10 4.1 kB 3/11/2020 BBA8CF2D97F0890A3222BE2B69877282
WordSplit is a JavaScript port of my VBDOS ParseWord routine, which itself was a port of the original GETWORD.BAS with one significant enhancement - the ability to split a string into an array, eliminating the need to repeatedly call GetWord multiple times to retrieve whichever word is needed.

QBASIC Library

Status: Updated as needed.

Item Version Size Released MD5
GETWORD.BAS 1.00 1.7 kB 1999 FB969BD9880030492ADA999DAB4A6D0B
One of the most useful pieces of code I've ever written, it's found use in numerous situations. Back when I wrote it, the various BASICs I used (BASICA, QBASIC, VBDOS, PowerBASIC) had no function to split a string based on a certain character... so I made my own. Mind you, this was long before modern languages like JavaScript shipped with their own method for doing so. Even now it proves useful as it splits strings differently than the built-in offerings of JavaScript. 1.00 4.7 kB 1999 D78E7E0BF6CADD45BDCFBC63F3EA52F5
Ah, yes, the dreaded Y2K bug! Amidst the grandiose predictions of "experts" that application programs the globe over would collectively perform a lemming-style address jump to their deaths when their RTC overflowed to zero, I did what I always do: wrote a little code to probe, test, and solve. The result is a collection of four BASIC source files comprising an installer, uninstaller, a test to see if the computer in question is even affected by the Y2K bug to begin with, and a patch which fixes the issue if it is. Not an issue nowadays, granted, but back then it was awesome to see this code enable some pretty ancient MS-DOS systems suddenly have the correct date when before they could not manage to do so.

Warp OEM

The first (and only) smartphone ROM I ever made. It took a mediocre Android-based phone and turned it into a powerhouse, able to handle much more advanced apps than otherwise possible.

Status: Completed; no longer updated.

Version Size Released MD5
2.75 143.6 MiB n/a BF4AA84CD46F9EB37F3192EEEBD7494D
2.70 115.7 MiB 9/9/2013 4BEAF9D5CF9D80B69BB041E9B6CFE612
2.53 115.4 MiB 5/29/2013 B4031402B2BAF82881D768F985FE52BE
2.51 16.3 MiB 5/22/2013 8E80061361FCF8574C3305EDBABDFD82
2.50 116.3 MiB 5/20/2013 F4716DD5A9A2568DB2E53EC5260CBD30
2.10 128.8 MiB 5/8/2013 E48F1E21381B98A7588C49DD9B183B07
2.01 122.7 MiB 4/6/2013 FF6623610AEF72E3DB7C3A6860D9C297
2.00 122.3 MiB 3/15/2013 EDC225E3D4DF37380D476E085C844805
1.55 129.9 MiB 1/13/2013 71DBDE6B80507AA18CDA4F28D40C32DC
1.50 134.7 MiB 9/30/2012 30905D9C2360E983D2485E30B53CA419
1.42 115.1 MiB 9/15/2012 47D786434533830B297133474C9C5E4A
1.41 115.1 MiB 9/9/2012 DE8E388342BBD6015C04FD3B53401192
1.40 107.9 MiB 9/8/2012 9887A57FC700C33CC3666B5DBDF32D78
1.39 107.0 MiB 9/4/2012 CCFE292E0DA5B3A0BB8C49265A753F38

Name Size Released MD5
Warp OEM 2.xx Adreno Tweaks 376.9 kB 6/29/2013 84E6828A2C60B68E662E29EBD4289CEE
A flashable to add the Adreno Tweaks (by CosmicDan and Spizzy01 of XDA) into any version of Warp OEM from 2.00 through 2.53, which will majorly boost GPU performance. Special thanks to Dizzle1 for customizing the initial tweaks for the Warp and Blyss for confirming they work on WOEM 2.53! May work with some other ROMs as well, but this cannot be guaranteed.
Warp OEM 2.51 to 2.53 Update patch 3.2 MiB 5/31/2013 A62E863EED2C4E5D70C5B1B22553E757
For those who have just flashed version 2.51 and would like the security update included in Warp OEM 2.53. Note: Version 2.53 had some updated apps versus version 2.51, however this patch does not include these. For the sake of everyone's sanity, your app folders will not be touched when using this update.
PowerNap v2 1010 bytes 5/8/2013 9AC00A98B477507A787E03D4702729A6
Updated version which, compared to the original (above) doubles the maximum speed of the device during sleep. Use if the upon-wake lag in the original is too much to bear.
PowerNap 773 bytes 3/16/2013 9B4E3C7B0FA3EBC2F7024FACEA8B3803
The script powering one of the new features of Warp OEM. Now available separately! This must be used with a kernel which supports asynchronous init.d script execution, such as the Alien Kernel. Place this in the init.d2 folder to have it run upon startup.
Warp OEM 2.xx smoothness fix 188.0 kB 3/19/2013 5CF2FD57584BA372894BC49BED8E445E
Flash this after installing the ROM itself to remove graphical jumpiness by reinstating the FPS cap. For users who prefer smoothness over speed.
Mercury updater-script 12.7 kB 3/28/2013 881F83784B6BB05BD719A1E951084D76
A complete installer script solution which mounts, formats and sets permissions as necessary and also checks which type of custom recovery the user has and verifies the platform accordingly. For custom ROM devs who would like to use the installer found in WOEM.