Resurrected Entertainment

DOOM 3: BFG Edition on Steam

March 28, 2024

My advice would be to avoid it. I tried playing it tonight on Steam, but it crashes too regularly to invest any more time in it. It’s a shame because it looks great and seems to have a nice feel to it.

FreeDOS on an eBox 2300SX-JSK

December 16, 2023

If you want USB thumb drives to work on FreeDOS out of the box on this hardware platform, make sure that the BIOS boot order has the USB drive before the Compact Flash drive. There is also no hot plug support, so insert your thumb drive into the device before you boot. Lastly, I would hazard guess that not every thumb drive will work. I used a Kingston DataTraveler 1GB USB stick.

Gamemaker: Resize and Center Window

November 10, 2023

If you have configured the default camera and view-port to be a small size, but you want to resize and center your OS window to more closely match your display resolution, throw this code into an object script and put it in your start-up room.

var _base_w = 640;
var _base_h = 384;

var _display_w = display_get_width();
var _display_h = display_get_height();
var _aspect = _display_w / _display_h;

var _ww, _hh;
if (_display_w < _display_h) {
    //portrait
    _ww = min(_base_w, _display_w);
    _hh = _ww / _aspect;
} else {
    //landscape
    _hh = min(_base_h, _display_h);
    _ww = _hh * _aspect;
}

var _window_size_w = _ww * 2
var _window_size_h = _hh * 2
window_set_size(_window_size_w, _window_size_h)

var _x = (_display_w - _window_size_w) / 2;
var _y = (_display_h - _window_size_h) / 2;

window_set_position(_x, _y)

Vectrex Upgrades

October 7, 2023

I recently installed all new capacitors, a couple of new voltage regulators, new thermal paste, and a Buzz-Off Kit by Obtainium Gaming. That new kit works a treat. It really reduced the buzzing noise coming from the speaker. It works by introducing a new audio amplification circuit that can be installed further away from the power board. You don’t use the old audio amplifier once you are done.

However, I have a new issue, and I have no idea where it is coming from. Whenever I move the analog stick on my controller in any direction, audio feedback is produced. The audio feedback increases as you move your controller further towards the direction you are pushing. If you are aware of the problem and know how to fix it, or if you even know the cause, then please leave a comment!

I am also getting a bit of curving to the graphics towards the top of tube. I think this can be adjusted, but I am not sure how to go about doing it yet.

Amiga 500 Resurrected

October 1, 2023

Some months ago I had purchased an Amiga 500 from eBay. It was a modded Amiga which was advertised to be “tested and working!”, so I was hopeful I would be getting something fun to use. I eventually received the package, unboxed it, and turned it on; it booted and I played around with the Amiga desktop and a few games. It was late in the evening and I was tired, so I shut it down and returned to it the next day. After booting it up the second time, the screen went black. Uh-oh. Repeating the process a few times, the result was the same. I knew next to nothing about the details around how to use an Amiga, let alone the common faults exhibited by the hardware. I was disheartened. I wanted to mess around with my recent purchase and get familiar with its features. I wanted to do some exploratory testing, and have a bit of fun in the process.

I had to make sense of this problem, so I turned to the Internet for help. I did a bit of searching, read up on the hardware, and then a whole lot more of the same over the next several days. As with any great technical mystery, there are numerous possibilities that could lead to a black screen of death. Little did I know, that I would be seeing many different screen colours on my journey to resurrect this classic machine. In order to understand the steps involved, it is important to set the context and get a generalized feel of the environment.

Let’s start at the beginning…

There are some things you should know about the Amiga before deciding to buy a machine for yourself. As with many things in computing, there may be more than one way to do something, and there can be many, many exceptions to a given statement. It’s important to understand that there are several revisions to the Amiga 500 motherboard available, and the hardware involved can change depending on the revision. I own a Revison 6A. Thus, the problems I encountered and the solutions I investigated will focus around that board. The board you own may exhibit the same symptoms for similar problems. I do not have enough experience to comment on other boards, but there are large communities of Amiga users on the Internet who have the technical chops to help with most issue. Finding that person or digging up the right information will take time.

Related to the subject of hardware revisions, it is also important to note that the Amiga uses several custom computer chips. They are named: Denise, Paula, Agnus, and Gary. It also has a couple of less interestingly labelled chips: CIA (ODD and EVEN), and the CPU. The CPU is a Motorola 68000, or one of its pin compatible relatives. I won’t go into the technical details of the chips here, since there is in-depth information available elsewhere. When attempting to source parts for your machine, if you suspect that one of your chips is damaged for example, be aware that the form of the chips can change across the set of system board revisions (“Fat” Agnus vs “Thin” Agnus, for example). There are also different manufacturers of the various chips and different revisions of the same chip. It is important to understand what chips are available and which ones are compatible with your system board. The chips are becoming more scarce with every passing year, so expect to pay higher prices on sites like eBay. If you are lucky enough to encounter a machine at a garage sale, snatch it up if it seems like a good deal; machines that no longer work and still have their original chips sell for higher than expected prices on-line.

I would also like to make special mention of the CIA chips. There are two of them in the Amiga 500. Over time, they are very prone to failure, more so than any of the other custom chips on the system board. If you suspect that one of those chips is not working correctly, one common diagnostic methods is to swap the EVEN chip with the ODD chip or vice versa. They are functionally identical. Once swapped, if the system makes it further into the boot sequence then that may point to faulty chip.

Interestingly, the system board is a bit of a marvel in system design. Major chips can be removed and the hardware will continue to function in limited ways. Naturally, some pieces of hardware are more critical than others, but it is fascinating to see how the computer behaves if one of the core chips is removed. Not surprisingly, this simple approach can be useful to help diagnose failing hardware.

Amiga computer were much more successful in Europe than in North America. From Wikipedia, “The machines were most popular in the UK and Germany, with about 1.5 million sold in each country, and sales in the high hundreds of thousands in other European nations. The machine was less popular in North America, where an estimated 700,000 were sold.” If you are experiencing video related issues, then be aware that some descriptions or solutions may be targeted around markets that use PAL instead of NTSC as a video standard. There are a couple of differences in how the machine is wired up, specifically around jumper settings and clock speeds, but for the most part, the machines will work the same in Europe or North America. If you do buy a European machine, you will need to convert the PAL signal into an NTSC signal, or learn how to modify the system board to produce the right video standard; the power supplies will also be different, so you will need to buy one that is compatible with your region.

Relating to power supplies specifically. These little workhorses can fail or degrade over time and produce voltages that are too low or that spike dangerously. It is always a good idea to test your power supply with a multi-meter first and ensure the voltage being produced is correct and doesn’t vary significantly over time. There are a variety of new power supplies available on the market that work differently, and produce stable, reliable power. They also are less heavy and are typically smaller in physical size that the original versions. Many older supplies can emit a distracting hum or other noises; buying a new one eliminates that problem.

The Kickstart software is used to bootstrap the system and prepare it to boot off of the system’s bootable volume. Originally, the software was provided via floppy disk for the Amiga 1000 and new versions could be easily made available by making new disks available for purchase and distribution. When the Amiga 500 shipped, the Kickstart software was put onto a ROM chip and boots automatically during start-up. Installing a new ROM chip is definitely not as simple as using a new floppy disk, so many people simply did not upgrade. As far as the Amiga 500 is concerned, Kickstart v1.2 and v1.3 are the most widely used versions.

It is also worth knowing about memory in an Amiga. Confusingly, there are three types: slow, fast, or chip RAM. In a nutshell, chip RAM was usable by the system’s chips directly, but not anywhere else. Slow and fast RAM could be used universally, but the former was only available via an expansion board, while the other lived on the system board.

There are many ways to modify your Amiga computer. Some product lines have more options than others, but the Amiga 500 line of computers is one of the most fortunate in terms of diversity for new and legacy products. I won’t go into specific products because there are many and their availability changes rapidly, but here is a short summary.

  • Display output can be changed to support HDMI;
  • Graphics output can be changed or replaced with new hardware;
  • CPUs can be replaced and new hardware features can be added;
  • Floppy drives can be replaced with USB or SD card alternatives;
  • Hard drives can be used with USB or SD card options;
  • Side car expansions;
  • ROM chips can be replaced with new versions;
  • Replacement cases in different colours;
  • New input devices;
  • Custom chips will eventually have FPGA replacements.

There are also numerous whole system replacement options, such as the Minimig or a system with a console flavour, such as the Amiga 500 Mini. If you want to leverage your computer and are only interested in running the software, using a licensed emulator such as Amiga Forever is also a fantastic option.

In my opinion, all of those options are very good for the Amiga community as a whole. Buying an original system isn’t in the cards for everyone and can come with a high price tag over time. More importantly, it is simply not possible or desirable for many Amiga users to try and repair their system when it eventually succumbs to the ravages of time, heat, and use.

With the context out of the way, we can now focus on the issues I was seeing with my system. My system had already been modded by the previous owners to support a few of the features I mentioned above:

  • HDMI support;
  • CPU had been enhanced with an accelerator board called Terrible Fire;
  • Memory board expansion;
  • Kickstart ROM had been replaced with one that could switch between versions via a physical toggle switch;
  • CompactFlash drive support.

When diagnosing a problem with the a complex system, it is always useful to try and eliminate as many variables as possible. In my case, I needed to strip the system down to its core essentials and see how it was behaving. Unfortunately, I did not keep sufficient notes to know which steps I took in what order, but here are the various investigations I did over a couple of months:

  • Checked the NTSC/PAL jumper was configuration (JP4);
  • Re-flowed every chip on the system board (adding new solder or replacing old solder);
  • Replaced the ROM socket;
  • Replaced the CPU socket a couple of times (once with a cheaply made socket and the second with a much higher quality socket);
  • One of the legs of a resistor on the board was floating, which was preventing the Gary chip from getting power, so I soldered that down (I think I had mistakenly removed the solder);
  • Replaced all of the capacitors on the board with higher quality versions;
  • Replaced the CPU with a different version;
  • Swapped the CIA chips with each other;
  • Used the DiagROM to help me search for faults;
  • Tested composite output (RGB was not working at the time);
  • Replaced the various cables;
  • Did a “press-test” on all of the chips to try and find fault related to loose solder joints or sockets with oxidation on their wipers;
  • Used contact cleaner on all of the sockets and cleaned the legs for all of the chips using sockets;
  • Replaced several secondary chips, such as the multiplexers around the Agnus chip;
  • Replaced all off the RAM and added sockets to the system board;
  • Used a multi-meter and an oscilloscope to try and narrow down the electrical issues.
  • Fixed a few prior repair attempts by previous owners that had resulted in electrical traces being pulled off the board;
  • Traced many connections visually using a magnifying glass and a multi-meter – the Amiga 500 has many traces on the front and back of the board, so this process took a very long time;
  • Reviewed the data sheets for 90% of the chips on the board and verified voltages and signal flows – this also took a very long time;
  • Purchased working versions for most custom chips so that I could swap my versions out;
  • Purchased chip testers, such as the Retro Chip Tester Pro, to verify that a few of my secondary chips were good (very useful for RAM testing).
  • Fixed the JP2 configuration; this was causing a lot of memory-related symptoms!

In the end, I did get the system working; I had a couple of periods where I put the machine away for a week or two, just to clear my head or wait for parts. Overall, I found the process of debugging the issues to be enjoyable, but it was sometimes difficult to endure the ups and downs and I was tempted to recycle the unit and sell off the parts. Many times I was anticipating a working system once I had a resolved the most recent uncovered issue, only for a new problem to surface, and I needed to start again.

Over the course of the project, it was very expensive to get the machine up and running. If you repair these machines as a business or a hobby, then the various purchases I made could be seen as an investment. In my case, I only own one Amiga 500 machine, and I am unlikely to ever buy another one, so all of these purchases were essentially sunk costs. Some of the hardware may be useful in the future, depending on how the machine survives, but we shall have to wait and see what develops.

Today, my Amiga is essentially unmodified. I do use an SD card as a hard-drive , a floppy hardware emulator, a switchable Kickstart ROM, and a new game pad. In the future, I will also be using a wi-fi modem as well.

Epic Games Launcher Stuck

August 19, 2023

While downloading the update to Unreal Engine 5.2.1, the launcher appear to be stuck at 29%. Following these steps cleared that up.

Networking in DOS

August 16, 2023

Here is a great description / overview of networking in a DOS environment. It’s definitely worth a read if you cannot quite remember all of the details: https://dosdays.co.uk/topics/networking_in_dos.php

MatterControl 2.19 on Linux

August 8, 2023

If you are trying to run MatterControl 2.19 (I believe this impacts multiple versions) on Linux and the application crashes with an error about not being able to find Visual Basic, then it may be due to color, depth, or FSAA settings.

For example, this error:

exception inside UnhandledException handler: (null) assembly:/usr/lib/mono/4.5/mscorlib.dll type:FileNotFoundException member:(null)

[ERROR] FATAL UNHANDLED EXCEPTION: System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies.

Change the lines in this file (/usr/lib/mattercontrol/appsettings.json )to use 4 FSAA samples or 0 (zero). It could also be related to color depth, but unless you are running on an old machine with an old version of Linux, then it is probably going to be the anti-aliasing option.

{
  "Agg": {
    "GraphicsMode": {
      "Color": 32,
      "Depth": 24,
      "FSAASamples": 4
    },
    "ProviderTypes": {
      "DialogProvider": "MatterHackers.Agg.Platform.GtkFileDialogProvider, agg_platform_gtk"
    }
  },
  "MatterControl": {
    "Slicer": {
      "Debug": false
    }
  }
}

Book Review

May 8, 2023

Let’s talk about this book written by Bob Flanders and Michael Holmes in 1993 entitled “C LAB NOTES”.

The title hints that this may be a book about programming in the C language. Spoiler: it is not a book about how to program in C, even though it uses the C language. Instead, it provides you with several interesting, examples about how to tack real world problems (at least, problems that existed in 1993). Here is a run down of the topics being explored:

  1. Setting the system clock via modem and the United State Naval Observatory’s cesium clock.
  2. Collecting program statistics around interrupts used, video modes, disk access.
  3. Running programs on other nodes via Novell NetWare; sending messages is also explored.
  4. Interacting with laser printers.
  5. Phone dialing using a modem.
  6. Synchronizing directory contents.
  7. Automatically retrieving the latest files from multiple directories.
  8. Analyzing disk structure, such as clusters and sectors.
  9. Managing your appointments with a custom calendar.

This was such a fascinating book back in the day. I had limited income to spend on expensive computer programming texts. Many of the programming books that were available in my local bookstore tended to focus on abstract problems that served to introduce foundational concepts. It was so refreshing to see these sorts of problems being explored. Even today, so much literature is written around how a specific technology works, but so few products are written where the author just assumes you know something about the technologies being used. If they used those assumptions constructively, they could dive straight into interesting problems. It would imagine it might be more difficult to find a publisher who would back you on writing a book like this today; they may look at the material and say it would be too hard for most readers to understand, and therefore would not sell particularly well. They would probably be right on both counts.

In any case, I think we can all breathe a collective sigh of relief that advanced books like these are being quickly fazed out and replaced by much more mainstream titles. After all, once a programmer knows how to sort a linked list or draw a simple scene in OpenGL or Unity, there is really nothing else worth exploring.

MS-DOS is Cross Platform

May 2, 2023

Cross platform programming is a labour of love. It’s also requires a large time investment to get it right, so you should only do it if you really need to. There are many technologies available to help you on that journey; if you are building an application, then you’ll probably take a different path than if you are programming a game, and it’s the latter scenario that I would like to dig into a bit.

Let’s suppose you want to program a small game that doesn’t require easy access to 3D hardware, fancy input devices, or the Internet. Okay, I probably lost most of you right there, but for those that are a tiny bit intrigued, let’s continue.

I have a lot of nostalgia around the MS-DOS platform. It was not the first platform on which I began programming, that honour belongs to the Atari 800 XL, but it was still a lot of fun to use and explore. Compared to desktops nowadays, it is obscenely limited, but back in the 80s/90s it felt quite the opposite. MS-DOS is a 16-bit operating system and native access to memory beyond 640 kilobytes was the stuff of fantasy. Luckily, that limitation was relatively short lived, and you could access heaps of memory (get it?) by leveraging DOS extenders, such as DOS/4G, DOS/32, or CWSDPMI. If they packed the right set of low level features, these run-time utilities were all enabled by your friendly 386 CPU, and allowed the adventurous programmer to enter protected mode and access much more memory. It is worth mentioning that 286 CPUs did support protected mode but they lacked important features, so it was never heavily adopted

Once you jumped the hurdle of available memory, there were other lions that would be programmers needed to tame. They also had cope with performance differences between CPUs (with or without co-processors), sound hardware, hard-drive storage (or lack thereof), video hardware, and input device support. Phew. As a result of all this variability, many MS-DOS compatible games were faced with cross-platform challenges on the same, err, platform.

Unfairly, this wasn’t an issue when faced with game console development. The company promoting a console could always choose to add new hardware, such as steering wheel for racing games or new ways of visualizing content, or even additional performance, but it couldn’t do so in a way that would break existing applications. Note that this isn’t necessarily true for consoles built in the last 20 years. For these machines, the hardware remains compatible, but the software involved could change a lot, which would require game developers to retool their application from time to time. That train of thought is inconvenient right now, so we won’t talk about that messy bit of reality for now.

During the 8- and 16-bit era, game consoles provided a stable environment to build games. This stability lead to lower production costs and faster delivery times. In reality, many companies chose to release their games on several different platforms which dirties the delivery waters a bit. We will sweep these software development complexities under the rug as well since the porting strategies used did not impact their code-base in the same way as cross-platform development would affect their projects today. For example, many companies had distinct implementations for each platform, and code reuse was the exception rather than the rule.

Ironically, given the eccentric nature of MS-DOS in its heyday which lead to all sorts of programming headaches, it’s surprising that using a current incarnation of MS-DOS today produces such a stable environment. All you need is the right level of abstraction. Sure, you could always choose to support MS-DOS and all of its gory hardware configurations, or you could target one configuration and enjoy all of that sweet compatibility. What is this magical solution? Well, this paradise of splendour can be had by leveraging emulators like DOSBox. Yes, the solution to the fragmented environment that is an MS-DOS gaming machine is the venerable DOSBox. It is an excellent way to release your game on dozens of platforms without writing a lick of extra code. Want to run your game on Linux? No problem. What about Mac? No problem. Any console with an open development environment and suitable performance characteristics can (and likely does) support DOSBox, or one the excellent downstream projects like DOSBox-X. This means, your game can run on all of those supported platforms too. Go on, grab some MS-DOS development tools and get coding!