Commodore 128D and CP/M

I shall be away for the beginning of this year’s Retrochallenge, so in order to hit the ground running when I get back I thought I’d make sure all my machines were primed and ready for action.  To that end I’ve recently sorted out the batteries in my PX-8’s and today my attention turned to my Commodore 128D.

The machine is in pretty good condition, the cassette port is a bit flaky and the built in 1571 drive seems to read and write to disks reasonably successfully.  My interest lies in using CP/M on the C128 and I really needed to secure a way of getting data into the machine in this mode.

This has caused me some considerable headaches, in its native or C64 mode the machine uses Group Character Recognition (GCR) to write data to the disks in the 1571.  The 1571 is also capable of writing Modified Frequency Modulation (MFM) disks as used by CP/M and under CP/M disks using the following formats can be read:-

With third party software such as Juggler even more formats are supported.

Armed with Big Blue Reader, the original CP/M system disk, a clutch of DSDD disks and my bridge machine running DOS and 22Disk I thought I was well prepared.  However no matter which combination of disks and formats I use I cannot successfully format a disk with the 1571 nor the 1581.  I’m pretty sure the disks are OK, they seem to work without problems with the Epson TF-20 and PX-8 and the 1581 and 1571 drives appear happy to do everything except format.

More in desperation than hope of success I put one of the disks that I’d formatted with the TF-20 and PX-8 in the C128, typed DIR.  To my surprise and excitement the C128 came up with some text at the bottom of the screen reading Epson QX-10.  I pressed return and the drive chugged away, thought about it for a while and came back with ‘No file.’ uh, there were definitely files on the disk.

I had a search around and discovered that when the format description comes up at the bottom of the screen you can cycle through different options.  So I tried again and using the right arrow key found the next selection was ‘Epson Euro’ I pressed return, the drive chugged away and up popped the disk contents, yipeee!

I loaded PIP quickly just to check it worked, which it did and I then formatted a fresh disk in the TF-20, copied the text adventure Snowball onto it and put it into the C128.  On the first attempt I got a BDOS error but on the second attempt it loaded.

So I now have a way of getting software downloaded from the Internet into the C128 in CP/M mode, albeit a somewhat circuitous route via the PX-8 but a way nonetheless.

I currently have the C128 hooked up to an IIyama LCD panel via the s-video port which means I can only run in 40 column mode however I do have a cable that will allow me to connect via Scart and run in 80 column mode which I shall try next as much of the software I’ve tried assumes this mode.

So now hopefully I’ll be able to get on with things as soon as I return, try some CP/M software on the C128, hopefully get it talking to the Epson PX-8 via RS232 and I have some unused 3.5″ DSDD disks on the way which I’m hoping I’ll be able to format successfully with the 1581.

Retrochallenge Winter Warmup 2011 Entry

Well here it is, the first installment of Silent Running, a text adventure created using Inform.  The initial idea was to create something that would run on my Epson PX-8 which is a CP/M based machine. The first speed bump was locating a Z-machine interpreter for CP/M until it was pointed out to me that as I had the original Zork games for CP/M I had a suitable interpreter.

The Zork games typically came as two files, for instance, and Zork1.dat, the .com file being the interpreter and the .dat file the story file.  The interpreter supports version 3 story files and if you create a compatible story file you can rename it Zork1.dat then run and your game will load and run.

Needing to create version 3 story files I opted for Inform 5 as the compiler and was of course free to write the source code in any suitable text editor.  Thus development has taken place on a variety of machines including the Atari Portfolio, Epson PX-8, Epson Equity LT and some more modern machines.  I had hoped to compile the code on the Equity but I still haven’t had any success.

The game itself is heavily influenced in tone by Snowball from Level 9 which remains my fondest memory of text adventuring, that and Melbourne House’s The Hobbit.  I would estimate that I’ve completed about a quarter of what I’d hoped, therefore there are a number of elements within the game that may currently seem like red herrings.  The current goal is to achieve access to the biodome area of the freighter.

There will of course be many bugs, not the crash your system type, but responses to player input that are not catered for and the like.  Once you’re in the world creating it it’s difficult to jump outside and imagine how others are going to interact with it, reports would be welcome.

I’ve been quite absorbed by this process which has been enjoyable although it has meant I haven’t had as much time to keep up with all the other entries as I’d have liked and I’m looking forward to doing that now.

You’ll need an interpreter should you wish to try the game, you should be able to find one here:-

Link to Interpreters

Download Silent Running Story File

If like me you need an interpreter for CP/M you can download Zork and the included interpreter here.

General Retrochallenge Update

Finally resolved the issue that I’d passed on a few days ago.  With some help from the chaps over at the interactive fiction forum I finally found a method to return the location of Huey, Dewey and Louie to the player when the player examines some monitors that are found around the Valley Forge.  The final code was:-

Object monitors “bank of monitors”
with name “monitors” “monitor”,
description “There are three monitors, each one showing a live feed from the freighter’s maintenance drones.”,
found_in droneroom crewsmess,
[; examine: Print “^Huey is in:-  “;Print (name)parent(drone1);Print “^Dewey is in:-  “;Print (name)parent(drone2);Print “^Louie is in:-  “;Print (name)parent(drone3);
has static controlled;

The next thing I’d like to resolve is having the drones follow you when instructed rather and having to ‘take’ them which is the current situation.  Apart from that I realise I probably don’t have enough time left to sort out the various bugs and weird behaviour resulting from unexpected player input.

I’ve been reading creator of Inform Graham Nelson’s Craft of Adventure which is an interesting essay with five articles on the craft of creating interactive fiction.  In it he writes:-

It’s Never Finished

Games are never finished.  There’s always one more bug, or one more message which could be improved, or one more little cute reply to put it.  Debugging is a creative process that adds to the life of the game.

In the case of his own game Curses he writes:-

The play-testing process has increased the code size of ‘Curses’ by about 50%: in other words, over a third of a game is devoted to ‘irrelvant’ features, blind alleys, flippant replies and the like.

I’ve learnt just how much I’d underestimated the time required for this stage of the development and it’s given me a new appreciation for how tightly coded the original Infocom games must have been.