DICE C Compiler for the Amiga

So on my last adventure through some disk corruption on my Amiga, the natural thing to do is find some kind of MD5 checksum program to then compare signatures of files being copies to ensure that they are being copied correctly.

While there were several great C compilers for the Amiga when it was a viable platform, the one left standing today is GCC.  Which is fine and all, but it is rather large, and unwieldy.  And won’t run on a computer with 2MB of RAM (In the off chance that I want to run it on the 600).  But that is when I found out that the source code (dice.com has moved!)  to old DICE compiler is available!  DICE, was originally a public domain compiler then turned commercial then finally turned freeware.  For its time it was thought as a highly capable compiler as reviewed here. Also of note is that is was written by  Matt Dillon, who later went on to DragonFLY BSD fame.

So I thought I’d try something completely different.

So after extracting the 3.15 binary distribution (which also included cross compiling from linux/i386), and following the install notes I tried to build a md5 program that I had found into an AmigaDOS binary.  And it didn’t work.  It turns out that it is missing include files related to AmigaDOS.  And I was further unable to build DICE C from within DICE C.

So after a lot of searching, I came across this, a cut down “Mini DICE” that was bundled with Amiga Shopper, meaning it has the following limitations:

  • Only small library modules are included.
  • No Bitfields
  • No floating point
  • No pragmas
  • No register variables/arguments
  • The maximun executable program size is 40K
  • Each source file can only have up to 4 procedures
MiniDice

MiniDice

Wow that is.. limiting.  But it does have several of the needed include files, and a nice setup program to get going.  At first I tried doing a full-sale overlay of the ‘3.15 binary’ version but I broke something to do with REXX and how DICE links.  So instead I just overlaid the core compiler, namely dcc, dc1, dccp, das, dlink, dmake, fdtolib & fdtopragma.

I was then finally able to compile md5.  I went ahead and started to build some of the source, and so far using a combination of dmake & vmake I was able to rebuild das, dcc, dlink, dc1 and dccp.  I went ahead and created backups of my somewhat improved dice, and dice with source code.  Some programs build fine from the command line, others you need to invoke the visual build tool.

So how is the environment?  I tried to build Dungeon (dung27s.zip) for the heck of it, but the visual makefile tool couldn’t handle a project with 33 files.  I suppose I could have made a library and gone through with some linking hell but that seemed like work.  Instead I just typed in all the C files from the command line, and compiled it that way.  Taking care of a warning and a few errors and I actually got a binary!

Dungeon on the Amiga

Dungeon on the Amiga

Even better, it runs!

So while I’m on this Amiga kick

Screen Shot 2013-01-05 at 9.29.43 PMI came across this great site, commodore.me, which includes PDF’s of Amiga Format magazine!

And on the same kick, now that Frontier Dangerous got its funding, I ordered a copy of the awesome Elite II: Frontier. And there is another site, amr.abime.net which includes just about every review of the game, along with some page scans! I do look forward to being able to play this game again.. It just isn’t the same with analog sticks, or the PC version.

And speaking of a Commodore overload, they are still doing the “World of Commodore” shows, here is the last from 2012..

It would be cool to go to this in 2013, I would assume it will be held in Toronto, again by the TPUG?

A Commodore 64 vs the exciting world of tapes…

Ah, yes who doesn’t love the old world of the mid 1980’s that was dominated by the Commodore 64?  Naturally I had one, and like many people in North America, I had the incredibly “fast” and reliable 1541 floppy disk drive. Unfortunately, in Europe it seems that the floppy drive addon was actually quite rare.  Many of the systems opted to go with the substantially cheaper, and slower 1530 tape drive.

My only real exposure to the Commodore tape drives was with old PET computers in my grade school library where I’d write meaningless BASIC programs, and save them to tape.  But at home I had a floppy drive, so moving programs around never was possible.  Not that it really matters.

So while on vacation in Europe, Lorenzo managed to find this awesome score, a Commodore 64 with a tape drive, joysticks and BOXES, yes boxes of tapes!  All for €20!

20€ of Amazement!

20€ of Amazement!

So we get the Commodore home, fire it up and.. none of the tapes work.  Well completely  many have these turbo boot loaders that load up, but from then on the screen flashes, the tape runs out and nothing happens.  Now granted all of this equipment has been stored in a garage for a decade (or two?) so it does look like the entire lot has bit rotted.  Going through some major effort we did find out that there were a few programs written to let you visualize the tape data to adjust the read/write heads, or even just determine if the tapes were just plain bad.

Then looking around some more online we pretty much come to the conclusion that we will need some kind of special cable to connect to the Commodore 64, and a Pentium 150-200Mhz class machine (no faster, no slower) to emulate a tape drive and feed the programs to the computer.

With everything looking down, we suddenly have a breakthrough by finding a Windows program that can convert a tap file, to an audio WAV(e).  Luckily Lorenzo has a working tape deck, new tapes, and a CD Player, so we burn the WAV to a CD-ROM, then record the CD Audio to a Tape, and amazingly, it worked!

Donkey Kong!

Donkey Kong!

So was it worth it?  For 20 Euros it was cool, it is kind of neat being able to play it on the old ‘iron’ again.  And a joystick was kind if a fun throwback vs the modern era of gamepads, I guess since we wound up using tap images converted, emulation would just be plain easier.  And it is worth noting that the majority of the joysticks that we got didn’t work properly.  Old things eventually die out.

But just as there is companies out there still making floppy drives, I’m sure someone is out there making a digital USB Joystick..

Compute!’s Gazette archive

Compute 33, March 1986

Back when I was a kid (was I ever a kid), anyways the first machine I was lucky enough to get was a Commodore 64! Unfortunately I was too young to understand what it was, or what I could even do with it.  Although they did have commodore computers in our grade school, the whole microcomputer revolution was so new to everyone that they pretty much just sat there until someone came by to show us how to load programs from diskette & tape.

But to be honest ‘educational games’ in 1983/4 really didn’t grab my interest and for the most part my C64 sat dormant.  However by 1986, I remember this magazine sticking out at some convenience store, and I was hooked! The whole program in a magazine seemed so awesome, and to be honest the idea of machine code, and having to type in a CRC’d editor was so far fetched to me, that I took MONTHS to get that typed in alone..But without a modem, I suddenly was connected to so many others who were now part of the microcomputer revolution.  I recently stumbled onto this great archive at commodore.ca that has the first forty five issues scanned into PDF.  Its all there, including the ads for things like ‘sublogic football‘ ..

Enjoy the history!

The Commodore Amiga

I was enjoying that great site, stumbleupon when I came across a commented listing of the Amiga 1.2 ROM. Then it hat hit me, I’ve never really written about some of the great emulators for the Commodore Amiga.

Back when I was in highschool I wanted a Commodore Amiga, as at the time I was stuck with a Commodore 64. However the world was starting to accept the IBM PC swing of things. Windows 3.0 was out, suddenly the protected mode of the 80286 could be exploited for only a few hundred dollars, vs the thousands for a UNIX port, or what OS/2 cost. And of course the big appeal at the time was that you could build your own PC in a kit fashion (well it still is!). So I was toying with the idea of buying this 286 8Mhz board for $30 CDN when I saw this program that a kid had brought in… It needed VGA, but it could apparently emulate a Commodore Amiga!

You can still download it here.

Running it just simply threw up a picture of the Amiga’s insert a workbench diskette, and clicked the drive madly.. Passing it through a hex editor showed a copy of an Amiga ROM tacked on the end, but it didn’t actually emulate anything.

But I didn’t realize it at the time, and it cemented my decision to buy the 286.

Years later and the topic of m68k emulation came up, as there were simple cross assemblers and simulators, and I can remember in college searching to see if anyone had started an Amiga emulator… And there was one project!

UAE

Originally it stood for “Unusable Amiga Emulator” and well it was unusable. But then with enough people starting to flock to the project it suddenly could boot AmigaDOS. I used to use this on MS-DOS back in the day for ‘maximum’ speed. I was able to find one ancient version of this 0.65 that still has an MS-DOS exe. And it runs great under DOSBOX. You can find it here.

And for the heck of it, here is a screen shot with a 1.3 ROM.

UAE 0.65 under DOSBOX

UAE 0.65 under DOSBOX

Naturally transferring disks was a major pain in the butt… I luckily had a friend with a working Amiga and cross dos for AmigaDOS all configured so I could transfer some terminal emulator to my poor Amiga 500 I had picked up at a used hardware store in college. Then I used what I could of ramdisks, compression programs and whatnot to upload via some 50 foot nullmodem cable I had to transfer ADF’s of my workbench disks and an old favorite game of mine, Captain Blood. Even back at the time, Commodore was bankrupt their future was bleak. Getting spare parts then was becoming hard for my Amiga 500. And my 486SX-20 could almost run at an acceptable speed in emulation..

But time marches on.

UAE was then ported to Linux & X11, and the SVGA lib. I had some old RS232 terminal so I could keep on using my machine to ‘work’ and still play console vga stuff like doom for SVGAlib and of course UAE. Now with CPUs in the GHz++ speed range, emulation of a 8Mhz machine with 3 custom chips is more in software then raw cpu speed. The UAE project kind of died off, there hasn’t been any big updates in years, but the CPU core work lives on in all kinds of m68k derived work.

There is no doubt that there is still a few closeted Amiga users out there, but I suspect that we don’t kick up UAE all that much these days.. But it’s still cool to watch it in action.

And of course the demos! One of my favorites was the fairlight 242 demo. Which UAE with a Kickstart 1.3 ROM will run. Even the MS-DOS version!

fairlight 242 UAE for DOS on DOSBOX

fairlight 242 UAE for DOS on DOSBOX

I should add you can find more demos here, and a Win32 version of UAE here.

TripOS / Cintsys

While I was reading the new part 4 ( http://arstechnica.com/articles/culture/amiga-history-4-commodore-years.ars ) on the history of the Commodore Amiga, it mentions that AmigaDOS was not the original Operating System that they had wanted, but due to difficulties they had to pick a ‘plan b’ as it were.. They went with TripOS a portable OS written in BCPL.

TripOS ran on PDP-11’s, NOVA’s, m68k’s, and probably other machine type… What is also interesting is that BCPL heavily influenced the development of C! Searching about I found this:

http://www.cl.cam.ac.uk/~mr10/BCPL.html

The homepage of Martin Richards, the author of TripOS & BCPL! What’s even cooler is that he’s cooked up an interpeted version of TripOS that will run on most anything! Downloading http://www.cl.cam.ac.uk/users/mr/Cintpos/cintpos.zip I was quickly able to setup the exe’s under Vista, and run TripOS. It’s very cool!

C:\temp\BCPL\cintcode>cintsys.exe -v
Boot tracing level is set to 1
Cintcode memory (upb=4000000) allocated
Boot’s stack allocated at 211
Boot’s global vector allocated at 727
Rootnode allocated at 100
syscin/boot loaded successfully
syscin/blib loaded successfully
syscin/syslib loaded successfully
syscin/dlib loaded successfully
BOOT stack is at 211
BOOT global vector is at 727
CLI stack allocated at 8551
CLI global vector allocated at 9067
BCPL Cintcode System (25 Jan 2007)
boot about to call the interpreter recursively
It should start executing the boot function: startrootboot: about to call sys(Sys_interpret,…)
startroot: can now use normal stream i/o
startroot: trying to load syscin/cli
startroot: loaded syscin/cli successfully
startroot: now entering the cli
cli: now entering the main CLI loop
0>

From here you can build various demonstration BCPL programs, and whatnot. Also looking at the code for TripOS it’s VERY small… But then the same could be said of UnixV6.. Things have gotten VERY complicated over the years..

Anyways, I thought you’d like a glimpse into the basis of AmigaDOS!