User Tools

Site Tools


11/1/20 - Emulator Progress

Greetings Patreon Supporters! As with every update, I want to thank everyone for their continued direct support of this project. ❤️

There has been a ton of great progress on MBBSEmu in the past couple weeks, so let's jump right into it!

Hello SQLite!

One of the most exciting developments of MBBSEmu recently is the implementation of SQLite as the backend for Btrieve queries!

Previously MBBSEmu had been loading the Btrieve data directly from the DAT files and saving the information into a JSON file. There were a couple downsides to this process:

First - It didn't enforce any key constraints on inserted/updated data, so it was possible for duplicate records to be inserted into a file that shouldn't allow them.

Second - Every Update/Insert operation would write an entire JSON file back to disk. This means on large Btrieve files in modules such as MajorMUD, it would be writing a ~1MB file 10,000 times during startup as records were updated or inserted. This caused a ton of I/O latency for Btrieve heavy modules.

Contributor and general coding Wizard @paladine completely re-wrote the Btrieve engine to use a SQLite backend for all the Btrieve queries! This is a huge performance boost to Btrieve operations and makes the information that was formerly squirreled away in the Btrieve files easily accessible using any SQLite client! What's even cooler is the SQLite Engine in MBBSEmu extracts the key values from the struct being written, so you can easily query by key values.

Example of BBSGEN.DB SQLite Database:

Example of Btrieve Data loaded into SQLite Database

You can read more about the SQLite implementation on the project Wiki here: SQLite Database Specification

MajorMUD Update

Work continued on bringing additional MajorMUD functionality online. With the latest release we've done a ton of work fixing small display issues, known crashes, and other weird data related issues.

One thing we're running into is that the MajorMUD Recovery Utility (WCCMMUTL.EXE) needs to do its magic to get the Btrieve .DAT files in working order. We've had the most success so far using MajorMUD on the MajorBBS Free Edition and exporting the “fixed” DAT files for MBBSEmu to use. On the list of enhancements upcoming in MBBSEmu, we'll be looking into loading and running MZ format EXE files through the emulator. This should allow the MajorMUD Recovery Utility to also “access” Btrieve through emulated interrupt calls.

More to come on this!

Long List of Recent Improvements

Since Open Sourcing MBBSEmu, we've 111 pull requests closed, and we're tagging new releases almost every two weeks! Everyone involved in the project has been very busy on every aspect of the system.

Emulator development isn't the easiest thing to do in the world – we're working backwards from software we know SHOULD work, and work backwards from it being completely broken to getting it working. Personally – I value continually delivering incrementally improving software. The progress tracked on GitHub from the entire team reflects this. If you haven't popped over to check out all the great information available, here are some easy links:

The Final Mountains to Climb

While the entire team continues to make daily improvements to MBBSEmu, supporting more and more MajorBBS / Worldgroup modules every day, there are still a couple large technical mountains to climb. In addition to the above MZ EXE support for MajorMUD, the other major technical hurdles are:

Multi-DLL Modules

These are modules which have multiple DLL files included with the modules, specifically Farwest Trivia. Farwest Trivia has the main game module (FW_TRIV.DLL) which makes calls to the Farwest Trivia Question Server (FW_QSERV.DLL).

Currently the only Imports supported by MBBSEmu are the functions exposed by MajorBBS & Worldgroup. To support DLL's referencing one another, we'll need to solve a couple items:

  • Loading all DLL's into Memory
  • Enhance the Relocation patching to support patching for Imports from other Modules
  • Enhance the x86 Core to support CALL FAR functions into other Modules

Additional DOS Interrupt Support

Several modules were compiled from their DOS C++ counterparts, or compiled using a compiler which used a ton of DOS macros. These macros usually call the DOS API (INT 21h) to perform things such as open a file for writing, getting the current directory, etc.

TradeWars 2002 and The Rose Council of Guardians both make extensive use of DOS Interrupts versus imported MAJORBBS Ordinals.

While not technically complicated, there are a ton of them that need to be implemented.

Stay tuned to GitHub or join the Discord if you're not already there to join the discussion!

Many great things released, even more great things to come!

mbbsemu/history/patreon/110120.txt · Last modified: 2023/10/06 23:41 by