The Amiga Package Builder

The Amiga was a range of 16 and 32 bit computers that was market leading and extremely popular between 1986 and 1993. It was the number one computer in Europe, especially in Scandinavia, used for both business and entertainment alike. With its multimedia capable custom chipset it struck an instant a chord with young developers who could express their creativity and explore the frontier of computing; there simply were no other computers on the market with that level of excellence.

In europe the Amiga home computer became the foundation of what today is called “the demo scene”, where groups of programmers, graphics artists and musicians experiment and produce audio-visual demonstrations. A competition of creative skill rather than destructive hacking.

The demo scene and their competitions (often called copy-parties) were unique to europe and still is; In the US it never really caught on. Primarily due to Commodore’s failed marketing strategy. The US still to this day regard computing skills in an odd, white hat, black hat mentality where you are either good at protecting a system, or good breaking into it. Which is a very limited view.

Going from this to Windows 3.11 was a horrible experience. There was no doubt who should have won the computer war of the 80's and 90's

Going from THIS to Windows 3.11 after Commodore went bankrupt in 1994 was a horrible experience. There was no doubt who should have won the computer war of the 80’s and 90’s. Windows 95 that launched the following year was a joke.

The Amiga was already at its launch back in 1985 a desktop centric, multi-tasking and window oriented computer. It delivered an experience closer to Windows XP or ppc Mac os almost a decade before Microsoft “invented” Windows. Being forced to move from Amiga OS to Windows was a horrible experience for most Amiga users when Commodore went bankrupt. It literally was taking 10 steps backwards in terms of features.

Virtual machine, not emulator

While many Amiga enthusiasts today still own, use and enjoy real Amiga machines (myself included), the majority of enthusiasts use emulators. The only emulator for the Amiga is uae (short for Unix Amiga Emulator), and even though there are a ton of different variations out there (even one blatantly sold by Cloanto which would in all other situations be called theft) – they are all based on UAE in one form or another.

Uae has grown considerably in the past years. It has gone from being a traditional emulator, like those you can download to run Nintendo games, into something that can only be called a virtual machine. A terminology used by developers when referring to program run-time environments like Java or CLR (dot net).

VMware virtualization of x86 (left), Amiga forever virtualization of 68k and PPC based Amiga systems (right). The only difference is terminology.

VMware virtualization of x86 (left), Amiga forever virtualization of 68k and PPC based Amiga systems (right). The only difference is terminology.

As a developer I look at software differently than a typical user. I have intimate knowledge of how software is built since I work as a professional software developer. And just like a musician will listen to a track and recognize things we consumers wont notice at all (like their ability to single out the separate tracks mentally while listening), I will naturally look at uae and its codebase from a different vantage point than average Amiga users (read: non programmers).

One of the first things that struck me when I studied the latest uae source-code, was how similar it has become to the Java virtual machine. I also couldn’t help notice that there were elements similar to mono’s native bootstrap (mono is a free, open-source alternative to Microsoft’s CLR technology. Originally sponsored by Novell Linux) in there as well.

bytecodes

There are only so many ways to execute bytecodes

When I write elements, im not proposing that something has been copied. Far from it. I’m simply stating that there are only so many ways you can read, decode and execute a bytecode instruction. Uae is a remarkable piece of engineering. I mean, one thing is chewing bytecodes and emulating a “make-believe” processor and instruction-set like Java and dot net does. Any programmer with enough experience can do that.

But it’s something else entirely to implement a real processor (a whole family of processors to be exact) as software; and even more impressive: to include support for connecting with real hardware. Just stop and think for a second about all the complex modules uae includes. Implementing accelerator boards, custom chips, the way storage devices works — the scope of the uae project is astronomical. It deals with topics far more complex than the Java virtual machine ever did; which comes across as is a childish exercise in lookup tables in comparison.

A different point of view

So, what happens if you stop looking at uae as just another emulator?

What happens if you instead look at it as a virtual machine implementation – side by side with Sun Java or Microsoft dot net? The way you look at things is very important. In many cases it defines what you can or cannot (or will not) do. Some will even refuse to see things differently because it can have a cascading effect on their world view.

Now the first thing that happens when you regard uae as a virtual machine (which is exactly what it is, in a true sense of the phrase) is that the whole age issue just goes away. The speed and elegance of the runtime environment (uae) and the Amiga operative system – is way beyond both Java and CLR (the common language runtime) combined.

The second thing to go, is how you look at machine code. When all is said and done, a machine code instruction is just a few bytes, and a program is a large collection of these bytes organized in a particular way. It’s not magic and it doesn’t really matter if you understand what happens on hardware level or not. All that matters is that you understand the following:

68k machine code is to uae, what an “assembly” is to dot net;
68k machine code is to uae, what a compiled unit is to Java.

Just contemplate the implications of that for a few minutes.

  • A virtual machine is designed to execute programs safely within a sandboxed environment. The runtime controls things like memory, disk access, display, input ports and audio.
  • A virtual machine, like Java or CLR (common language runtime for dot net) has to be installed. Only the bytecodes or assemblies ship with the final product.

Amiga as a virtual platform

If you spend a few minutes comparing what uae does to what systems like VMWare or Parallels does, combined with the what Java or CLR brings to the table –  you should quickly realize that indeed: uae and modern virtual machines are practically identical and indistinguishable except for a few, fundamental deployment differences.

Aeros

Aros on Raspberry PI 3 flies. It rivals desktop PC’s costing 30 times more. It is so lightweight that with a little bit of work, it would revolutionize the embedded market.

Once you look at the Amiga technology from this vantage point, it should dawn on you that the Amiga has not yet played its final card. Because the only real difference here is terminology, not technology. Uae has the exact same technology as Java, dot net and other bytecode based run-time systems. So it’s all the same, right down to the sandboxed memory management, restrictions surrounding the file system, owner drawn visual controls and portable media.

Hopefully your eyes have been opened to what uae really represents through reading this document. Some of the ideas I present here will require some changes to the uae codebase to be fully realized, but they are very small in terms of work. It’s not so much adding new stuff, as removing the built-in user interface and reducing uae to a *.dll/*.so library (one for each supported platform), usable from any language that supports the cdecl calling convention. The core uae engine should be pure, platform independent and simply deliver things like pixel-buffer, audio and media requests to the host application. The host application should also call an update() function on interval to drive the cpu.

It’s not revolutionary by any means, but it gives the Amiga a whole new role to play. Namely as a modern, highly efficient bytecode based software platform.

I don’t think people really understand how inefficient and bloated technologies like dot net or Java truly is. A single Java instruction is between 8 to 12 times larger than a 68k instruction. It depends on the code-alignment you pick when compiling, but either way – 4 bytes to represent what could be represented by a 8 bits?

Java is also register based, meaning that it will push parameter values onto the stack before it calls a routine. Considering Java is a high-level language, calling 100 routines just to perform something is not uncommon, which means hundreds of parameters on the stack. So running Java is the proverbial rape of the host stack while assaulting the cpu. There is a reason Java is being thrown out of businesses these days, it’s cracks are showing and the hype has faded. People are beginning to see what a piece of rubbish it really is.

The dot net CLR engine is much better, but where Java suffers from poor instruction architecture, the dot net framework suffers from bloat. It is by far the most resource hungry and wasteful runtime system ever invented. It’s also useless for embedded work because the garbage collector kicks in and cause cpu spikes – locking up hardware (which really sucks if your product is a cash machine) and doing serious damage.

All of this is just the beginning of a really long list. When you start to sum up what uae and the Amiga virtual machine delivers with just a fraction of the resources demanded by other systems, a terrible but exciting realization occurs.

We are talking about an operative system that not only survives on 1 megabyte of operational memory – but thrives!  Just let that sink in for a second. A system that is multi tasking by nature, desktop oriented, is fast and responsive even on older hardware, is readily available for just about every platform in existence: Windows, Linux, OS X, IOS; a system that has been compiled for every conceivable chipset on the market, from x86 to arm, mips to ppc. A system that can even be implemented as an fpga core and picked up for a fraction of the price of a high-end embedded board.

To say that uae could be a reliable, lucrative and interesting software deployment platform is the understatement of the century.

Companies are falling over themselves looking for affordable, resource efficient, advanced embedded runtime environments – paying up to $7000 per single developer license just to be allowed to program for these board. I know because I work with embedded hardware on a daily basis.

Yet here we have perhaps the most efficient portable software platform ever invented, spending its days running games for men and women in their 40’s (myself included). Talk about throwing potential out the window! This cannot be called anything but a lack of imagination, innovation and creativity.

Sorry if that is a harsh verdict, but this really boils down to utter lack of vision. Yeah I’m looking at you Cloanto, and you Hyperion Software!

But we have no modern development tools

This has been the response I have gotten whenever I have hinted at the idea. People seem to have forgotten just how good SAS C/C++ is, or how blistering fast BlitzBasic code runs at. But I get your point, these may be good but they are no where close to modern.

But it just so happens that both GCC, which is the most used, most up to date and most optimized C/C++ compiler toolchain in the world has been ported to Amiga. No other compiler in history has seen so much attention as GCC.

You can download a cross-compilation toolchain here:
https://github.com/cahirwpz/amigaos-cross-toolchain

It also happens that freepascal 3.1, which is the absolute latest version of what is without a doubt the most popular object pascal compiler in the world, has likewise been ported to 68k. This is identical to Embarcadero Delphi in almost every way, produces highly optimized code and support everything C++ has to offer but with a more friendly syntax.

Freepascal 3.1 for 68k Amiga. The most advanced object pascal compiler in the world, equal in features to the $6000 per license Embarcadero Delphi. It is platform independent and compiles for every architecture out there - and then some!

Freepascal 3.1 for 68k Amiga. The most advanced object pascal compiler in the world, equal in features to the $6000 per license Embarcadero Delphi. It is platform independent and compiles for every architecture out there – and then some!

Freepascal is even easier to use than GCC, you can compile directly inside the uae Amiga environment, or from the comfort of Linux. You can download a ready to use Lazarus VMWare image (usable with VMWare player) here:

https://blog.alb42.de/virtual-lazarus/

In short: the argument that the Amiga runtime is incapable of hosting modern development tools is now extinct. It had merit a few years ago, but right now it is false, narrow-minded rubbish. The uae virtual machine of today is more than capable of running modern, state of the art software. Software that can be executed on embedded boards or as a normal desktop application regardless of host operative system.

Where Windows Embedded and C# demands expensive hardware to run (without being haunted by CPU spikes), uae is capable of delivering a full desktop experience on something as trivial as a $35 Raspberry PI.

Classic Amiga Workbench

Amibian, Raspberry PI 3b. Uae delivers 4 times the power of a 68040 Amiga 4000

The Amiga package builder

TAPB is a humble step in the direction of using uae as a virtual machine deployment system. In other words, being able to define the environment for a particular Amiga program, including the ROM file required, it’s libraries and dependencies and other resources. All of this is built into a binary package file which is then injected and converted into a single, stand-alone executable for Windows.

It will bundle uae itself into the executable (optional), as well as the operative system files and library dependencies. Everything the virtual machine needs to execute your application. But when it executes, it does so right on your Windows desktop – side by side with other applications.

The Amiga Package Builder is a step in the right direction

The Amiga Package Builder is a step in the right direction

TAPB is also scriptable, allowing you to write code that should execute before, during or after deployment. This is extremely handy for applications that require files or folders to exist prior to executing (on the Windows side); or applications that wants to watch over the sandbox file-region and perform some task in response to activity.

Ultimately the goal is to establish a bridge between the Amiga side and Windows side, so you can write features in script that can be called from the Amiga. It actually works fine with UDP and sockets, but a dedicated pipe direct access via C/C++ is what I want to establish in the future.

All this sounds nice, but please explain exactly what TAPB does

Sure. TAPB allows you to do the following:

  • You to pick an Amiga program you want
  • You isolate the dependencies for that program
    • Library files
    • Data files
    • Commodities
  • You define the environment your program needs
    • Network access
    • Path assigns it expects
    • Startup-sequence conditions
    • Arexx scripts
    • The amount of memory
    • Display depth and color palette
    • Mouse speed and responsiveness
    • Keyboard layout
    • Language settings and locale
  • You pick the ROM file the program was written for
    • Always try to use the free Aros rom
  • You chose if UAE should be included in the package
  • You click “Build”

When you click the “Build” button, TAPB goes to work and puts together a disk-image with everything you need. It will copy the files it requires from the official workbench disks (you must provide these), generate a startup-sequence for you, copy over libraries and essentially “build” a fully functional, bootable Amiga environment designed for one purpose: to run the program you need as a Windows application.

Setting up an environment is now very easy

Setting up an environment is now very easy

Since I am a huge fan of Aros, and since we really want to get as far away from Cloanto and the official Commodore code as we possibly can – you can choose to use both the Aros ROM file and their 68k workbench replacement. Depending on the application and how well the programmers have followed the Commodore guidelines for workbench programming, the majority of programs will work just fine.

Sadly, some applications, for example BlitzBasic 2 that pounds the hardware directly and breaks every rule in the book – will need the original ROM and Workbench files to function properly.

When it comes to games, the wast majority will actually work just fine with the Aros rom. There are some workbench games that can be difficult, they are kind of hybrid creations; they start from workbench but hit the hardware directly at the same time. But again, just inform TABP that you want to use the original workbench files – and it wont be a problem.

To check if your game runs on the Aros rom, visit the Scriptable Amiga Emulator (yes UAE has been implemented in JavaScript, times are indeed changing) and upload/run the ADF file there. If it works, then you can safely use the Aros roms.

The Scriptable Amiga Emulator is excellent to check if your program runs on the Aros Rom. Just upload and run.

The Scriptable Amiga Emulator is excellent to check if your program runs on the Aros Rom. Just upload and run.

Can you give me some examples of what TAPB can do for me?

Let’s say you love to make music in protracker. It may be old and you might work with Protools, Reason or Sony Music Studio on a daily basis. But the sound and feel of this old gem simply cannot be replicated. People have tried again and again to replicate the old Amiga tracker programs, but they have all failed. It’s like the SID chip in the Commodore 64. It’s unique. And sometimes you just have to go back and use the original to get the results you need. Perhaps that “little extra vibe” that is going to make your next song hit the charts. Now wouldn’t it be great if you could run protracker directly on the windows desktop? Side by side with the other programs you use to make music? So instead of having to start UAE, boot into workbench and do a whole virtualization session – all you have to do is start it like any other windows program.

Or let’s say you just love to code in Amos Basic. Whenever you have some free time you whip out UAE, boot into workbench, start Amos basic – and continue writing that fun game. Perhaps a game you have been coding on for years. Not to make money or compete against the latest tech – but because you love Amiga and you enjoy Amos basic. Wouldnt it be nice if you could just start Amos basic directly on your Windows desktop? And wouldn’t it be nice if the actual PC harddisk was already mounted, so you could save your Amos projects directly to your PC?

Actually, a Amos for Windows already exists, you can download it here. It uses Aros and uae to boot and run, which more or less underlines my point. TAPB will automate this for you and allow you to do this with any program.

Or what about graphics like Deluxe Paint or Personal Paint? Let us not forget just how fantastic applications like PPaint and DPaint still are. If you have ever tried to pixel some 16×16 or 64×64 pixel icons for Windows applications – you know what I mean! Sure there are alternatives out there, but none of them comes close to the real deal. Pixel artwork is a dicipline it takes years to master. Photoshop is unsuitable (actually, its an insult to the craft). Paint that ships with Windows is a joke, and even though there are shareware clones out there – none of them are close to capturing the presicion, the feeling and quality of Deluxe Paint or Personal Paint.

Again, being able to fire up these as normal Windows applications, side by side with whatever modern tools you may use makes a lot of sense. While starting UAE is not exactly rocket science; and Workbench boots up in seconds. It would be nice to install and use timeless software just like you would Windows applications.

So when will it be ready?

This is actually a pretty substancial project. It has turned out to require a lot more work than I initially anticipated. The hard part is to find solid alternatives to the copyrighted Commodore software, so I spend a lot of time testing and going through the alternatives – like Aros, Scalos and various other tidbits.

I’m also looking at different versions of WinUAE. While bundling WinUAE as it is works just fine, I am looking at alternatives like lib-retro adapted versions, which essentially bakes UAE into a normal .dll file. This would mean that could compile it to .obj files and link it directly into your executable. In other words: UAE would be built-in to the package itself. With no external dependencies what so ever on Windows.

But we all have to start somewhere, so for now we will make due with a standard UAE emulator, Aros and the spanking new package format.

And yes, you can of course use backups of your Amiga rom files, and files from ordinary Workbench, providing you own a valid license. But packages produced using Cloanto or Hyperion Entertainment can not be distributed.

In short: Cloanto owns the Amiga ROMs (or at least the copyright, which means the right to copy and distribute), while Hyperion owns Workbench and the Operative System. The whole legal situation is a complete cluster-fuck, so I wont even pretend to know who owns what or how many players are involbed.

My advice is to stick with Aros as much as possible, and let these greedy old farts die. Harsh? Not really. It’s due to their greed and refusing to share and work together that the Amiga never came back. These assholes have stopped every chance of a revival and done everything in their power to keep the Amiga in limbo. They dont deserve a single dollar or euro.

More info on TAPB will be posted on this website in normal blog format. When the time comes download links etc. will be established.