Home| Sanos| RC702| Rita| Documents| Links| Contact| Search|

RC702 Diary


Sat, Jan 7, 2012

I found a box of program listings with my old COMAL programs back from 1981-1982 on the attic. COMAL (Common Algorithmic Language) was a computer programming language developed in Denmark by Benedict Løfstedt and Børge R. Christensen in 1973. COMAL is a mixture of BASIC and Pascal. It is an interpreted language like BASIC, but with structured programming constructs like IF/ELSE/ENDIF, PROCedures, FOR/ENDFOR etc, much like you know it from the much later Visual Basic. In Denmark, and in a few other places, it was used for teaching programming in schools. I learned COMAL in 8th grade. My first COMAL programs was for the RC7000, which was a Data General Nova 1200, produced under license by the Danish computer company Regnecentralen.

The box contained some of the very first programs I ever wrote: A program to compute factorials:

0010 INPUT "INTAST FAKULTET: ",FAK
0020 LET FAKULTETET=1
0030 FOR TÆLLER=1 TO FAK
0040   LET FAKULTETET=TÆLLER*FAKULTETET
0050 NEXT TÆLLER
0060 PRINT "FAKULTETET TIL ";FAK;" ER ";FAKULTETET

and a program to output Fibonacci numbers:

0010 INPUT "INTAST TAL: ",TAL
0020 LET TAL1=0
0030 LET TAL2=1
0040 FOR TÆLLER=1 TO TAL
0050   LET TAL3=TAL1+TAL2
0060   PRINT TAL3,
0070   LET TAL1=TAL2
0080   LET TAL2=TAL3
0090 NEXT TÆLLER

I found a free COMAL interpreter, OpenComal, and got it up and running. It is a COMAL-80 interpreter, so it is not quite compatible with the RC-COMAL dialect on the RC7000.

I also have a box of punched tapes, which contain many of these programs, but I don't have a punched tape reader, so I cannot read them into any modern computer at the time.

Sat, Jan 7, 2012My first program
Sun, Jan 8, 2012My old RC700 floppy disks
Mon, Jan 9, 2012RC700 technical documentation
Tue, Jan 10, 2012Boot loader ROM and floppy drives
Wed, Jan 11, 2012Floppy disk analysis tools
Thu, Jan 12, 2012Membership of DDHF
Fri, Jan 13, 2012Floppy disk drives and cables
Sat, Jan 14, 2012Boot ROMs and buying a floppy drive
Tue, Jan 17, 2012Z80-SIM emulator
Tue, Jan 18, 2012Interrupt handling in RC702
Sun, Jan 22, 2012RC700 font
Wed, Jan 25, 2012Compas Pascal
Sat, Jan 28, 2012RC logos
Wed, Apr 18, 2012Boot loader ROM and RC700 emulator first light
Wed, Jul 1, 2012ImageDisk
Sun, Jul 15, 2012Floppy disk images
Sun, Mar 9, 2014New floppy disk copy machine
Sun, Mar 16, 2014RC700 emulator booted up to the A> prompt
Tue, Mar 18, 2014RC700 emulator runs CP/M
Wed, Mar 19, 2014Public release of RC700 emulator
Mon, Mar 24, 2014DMA cascade for CRT
Tue, Mar 25, 2014SDL-based display for the RC700 emulator
Wed, Mar 26, 2014Floppy write support and RC702 software packages
Sun, Apr 13, 2014File transfer in emulator
Tue, Apr 15, 2014Windows version of RC700 emulator
Tue, Apr 15, 2014HDINST and RC700 harddisk support
Fri, Apr 18, 2014Patching CP/M for harddisk support
Fri, May 2, 2014RC700 COMAL backdoor
Sun, Jul 20, 2014RC763 Winchester disk
Wed, Jul 23, 2014Web-based version of the RC700 emulator
Sat, Jul 26, 2014Visit to DDHF
Sat, Nov 22, 2014COMPAS Pascal manuals
Sat, Jan 24, 2015Mac version of RC700 emulator
Thu, Jan 29, 2015COMAL 40-year anniversary and KV81
Sun, Feb 1, 2015RC700 series history
Tue, Feb 3, 2015RC700 articles
Tue, Feb 10, 2015RC700 emulator on bare metal
Mon, Apr 6, 2015RC700 CP/M BIOS source code
Wed, Oct 21, 2015Build CP/M for RC700 from source
Sat, Sep 15, 2018MATH48 package by Anders Hjelsberg
Tue, Mar 30, 20218" floppy disks

Sun, Jan 8, 2012

I also found a binder with my old 5 1/4" floppy disks on the attic. These contain software and some of my own programs for the RC702. The RC702 was a micro computer produced by Regnecentralen from 1980. At my school, Sofiendalskolen in Aalborg, we had a few RC700 systems, and I used these for programming in Pascal and COMAL. I have floppies with CP/M for RC702, RC-COMAL80, UCSD Pascal, RCTEKST, PROLOG, LOGO, WordStar, RcKalk, and a some floppies with my own programs.


Mon, Jan 9, 2012

I found a scanned copy of the complete technical specification for the RC702 system (local mirror). This contains complete circuit diagrams and descriptions of all components in the RC702 system. The RC702 had a Zilog Z-80A CPU and 64KB RAM, one or two 5 1/4" floppy disk drives, as well as serial and parallel I/O ports. I tried searching for an emulator for the RC702, but while there are a bunch of Z-80 and CP/M emulators, there are no emulators for the RC702. It should be possible to use an existing Z80 emulator and add support for the R702 hardware devices:

  • Zilog Z80-SIO/2 Serial I/O controller
  • Zilog Z80-PIO Parallel I/O controller
  • Zilog Z80-CTC Counter and Timer Controller
  • AMD Am9517A-4 (or Intel 8237-2) DMA Controller
  • Intel 8275 Programmable CRT Controller
  • NEC uPD765 (or Intel 8272) Floppy Disk Controller
  • 8 configuration switches
  • speaker
  • ROM/RAM selection logic

Technical documentation for the hardware:

A small note on terminology: RC700 refers to a complete stand-alone computer system consisting of a RC702 micro computer, a RC721/RC722 keyboard, a RC752 monitor, and one or two RC761/RC762 flexible disk drives. The RC700 was also often called RC Piccolo.

In order to be able to use a RC702 emulator I need to find some way of transferring the data from the 5 1/4" floppy disks to a modern computer. The disks are double-side double-density disks with 360K storage capacity. It should be possible to read these using a 5 1/4" floppy drive from a PC.

The RC702 also had a 2KB ROM with an autoloader program for booting the computer. When the RC702 was reset, the lower 2K of the memory was mapped to the boot ROM, enabling the system to start the autoloader program. The ROM can be disabled using an OUT 0x18,A instruction, making the full 64K RAM available.

I'll need a copy of the boot loader ROM to be able to run programs on the RC702 emulator. I don't have access to a physical RC702, so I have to find someone who either has a copy of this ROM or a working RC702 system, which I can copy the ROM from.


RC700 system (courtesy of Dansk Data-Historisk Forening)

Tue, Jan 10, 2012

Found a guy who has a RC700 system. The boot loader ROM in his system was defect, containing all 0xFFs. He has asked Dansk Data-Historisk Forening, and they have promissed to send him a new boot loader ROM. I sent an e-mail to him asking if I could get a dump of the ROM.

My first PC, a COPAM AT Computer (10 MHz 80286 with 640KB RAM from 1986), had a 5 1/4" TEAC floppy disk drive. I have installed this drive in a newer computer, a Zitech PC with a 1.67 GHz AMD Athlon 2000+ processor and 512MB RAM. The first problem is that the 5 1/4" drive uses a connector that is different from a normal floppy drive cable. It needs a Card Edge 34-pin Female connector instead of the usual IDC 34 Female connector, so I had to find an old floppy cable to be able to connect the 5 1/4" TEAC floppy drive to the motherboard. After messing around a bit I managed to get the BIOS set up correctly and set the DIP switches for Drive Select. I booted up into Windows and it could see the 5 1/4" floppy drive, but it could not read the floppy disk in the drive. I got a "Drive not ready" error.


Wed, Jan 11, 2012

Most floppy disk analysis tools seems to be for DOS, so I have created a FreeDOS boot disk, and I can start DOS on the Zitech PC. I have downloaded ANADISK for DOS so I can analyze the disks.


Thu, Jan 12, 2012

Applied for membership of Dansk Datahistorisk Forening, which is a society for Danish computer history. They have a working RC700 system, so maybe I can get a copy of the boot ROM from them.


Fri, Jan 13, 2012

The floppy cable I found had both a Card Edge connector for the 5 1/4" drive as well as a IDC-34 connector for the 3 1/2" drive. I got the 5 1/4" drive and 3 1/2" drive connected using the same cable, so now I can boot up in DOS on the 3 1/2" drive to run DOS floppy diagnostic programs on the 5 1/4" drive. The 5 1/4" drive is responding to the Floppy Seek command on boot up, and the motor responds to motor on/off requests. The drive arm also seems to respond, so the basic mechanical systems seems to be working. The motor can spin up my test floppy disk, and although the drive is a little noisy, it can spin the disk without doing any damage to the disk.

I tried using ANADISK to analyze a test floppy, but I still get a "Drive not ready" error when I try to read the disk. I tried cleaning the drive's heads using an alcohol swap. There was a bit of rust around the heads but otherwise the heads look intact. Even after cleaning, I was unable to read any disks.


Sat, Jan 14, 2012

I have gotten a reply from Jesper Henriksen. He will send me a hex dump of the boot EPROMS when he get them back from Dansk Datahistorisk Forening. That is fantastic news. Without a boot loader ROM I would be stuck.

I still cannot get my old floppy drive to work, so I've bought a TEAC FD-55B-01-U 5,25" Floppy Drive on eBay for $100. I have to wait for it to arrive from Poland.


Tue, Jan 17, 2012

The Polish floppy drive vendor called today and told he could not find the drive in his warehouse, so I had to find a new drive on eBay. I have ordered another drive (Panasonic JU-455-5) from a vendor in Ventura, CA, USA. It was a little cheaper ($37), but they claim they have tested the drive, and it is in good working condition.

The basis for a RC702 emulator is a Z80 emulator. I have downloaded the Z80-SIM emulator. It is written in ANSI C, and the code looks good. Although it is written for Unix it was quite simple to port it to Windows using the SOW library from Sanos. Z80-SIM is released under a BSD license, so there should be no licensing problems. The Z80-SIM emulator looks very complete with respect to Z80 emulation. However, it does not implement INT MODE 2, but it should be quite simple to implement.


Tue, Jan 18, 2012

After studying the RC702 Technical Specification I finally figured out how interrupts are handled in the RC702. The Z80 peripherals (SIO, PIO, and CTC) use the Z80 mode 2 interrupt mechanism, where an interrupt vector is programmed in a register in the controller. This interrupt vector together with the Z80 I register is used for computing the interrupt routine address. However, it took me a while to figure out how interrupts from the CRT and FDC controllers are handled, since these do not support the Z80 interrupt protocol. Looking at Figure 2.3.14 on page 27, you can see that the interrupt output from the CRT controller is connected to the TRG2 input of the CTC, and the interrupt output from the FDC is connected to TRG3. This means that you can program the CTC to generate an interrupt when TRG2 or TRG3 is signaled, so it is actually the CTC that generates the interrupt on behalf of the CRT and FDC controllers.


Sun, Jan 22, 2012

The RC702 Technical Specification Figure 2.5 and 2.6 contain diagrams of the ROA296 and ROA327 character ROMs, including the special semi-graphics character set used for low-resolution graphics on the RC702. I have made bitmaps for all the characters in the character ROMs. I hope that using the original font, together with the distinctive amber color of the RC752 monitor, will give the RC702 emulator "the right feel".


Wed, Jan 25, 2012

I learned to program in Pascal using Compas Pascal for CP/M-80 from a small Danish computer company called Poly-Data. Compas Pascal was written by Anders Hejlsberg (see his own story here), and was later to become Borland Turbo Pascal. Today I found someone who has an original copy of Compas Pascal for CP/M-80. It would be really cool to get this up and running again. I remember as a young teenager I attended the Mikro-Data 83 computer fair in Bella Centeret, Copenhagen, where Anders Hejlsberg himself demonstrated the new version of Compas Pascal. This was truly a revolutionary compiler. It was blazingly fast, even on a 4 MHz Z-80 computer, so the edit/compile/run cycle was much faster than with other compilers.


Sat, Jan 28, 2012

All the images of the RC logo I've been able to find are really poor quality, so I have scanned a logo from an old RC binder and cleaned it up in GIMP. I've created some high-quality Regnecentralen logos from this scan.



Wed, Apr 18, 2012

Poul-Henning Kamp has been very kind and made a copy of the boot loader ROM from one of the RC702 machines at DDHF. This means that I can now get started with my RC702 emulator project. I have taken the Z80-SIM emulator and added support for INT mode 2 and added skeleton code for the peripherals devices. The emulator can now boot up and write "RC700" on the screen (i.e. at RAM address 0x7800). Next step is to try to see if I can make disk images from some of my boot disks using the 5 1/4" floppy drive.

Wed, Jul 1, 2012

I've received a "regnecentralen rc702 cp/m 2.2" disk image from Jacob Dahl Pind. The image is in IMD format produced by the ImageDisk tool, which has support for "exotic" disk formats with different encodings, number of sectors and sector sizes per track. I have added support for reading IMD file in the emulator. Now I have the pieces needed to get the RC702 emulator to boot up into CP/M.

Sun, Jul 15, 2012

I have put together a PC for reading my old floppy disks. It is an old PC where I have installed a hard disk, a 3 1/2" floppy drive, and the 5 1/4" floppy drive I bought on eBay, and I have put DOS 5.0 and ImageDisk on the hard disk. I can then use ImageDisk for reading the disks and then copy the IMD files to 3 1/2" floppy disks, which I can read on my laptop using a USB floppy drive.

I have managed to read all my floppy disks using this setup. There is only one floppy I haven't been able to read without bad sectors. I'm amazed that these 30-year-old disks are still readable. I found that some of the floppies, that could not be read on the first try, often had fewer or no bad or missing sector on subsequent tries. It seems like just keeping the floppy spinning cleans the disk so it becomes easier to read. Almost all the disks had read errors, but by setting the number of read retries sufficiently high (100) it was possible to recover almost all the data. I have made the disk images available here.



Sun, Mar 9, 2014

I haven't been able to boot any of the floppy disk images in my RC702 emulator, so I have long suspected that there were some issues with them. Certain patterns in the data look suspicious to me. There seems to be some repeated garbage in the sectors. This could be an indication that I've captured some garbage from the gaps between the sectors or there is some timing issue with the DMA transfer between the floppy drive and RAM in the PC I have used for reading the data from the floppy disks.

I have configured a "new" old PC for reading my floppy disks. I moved the hard disk with DOS 5.0 and ImageDisk and the floppy drive I bought on eBay to the new PC and tried reading all my old floppy disks again. After doing some rudimentary inspection of the data it seems to look much better. The systematic garbage patterns in the data seem to be gone and the sectors of the text files on the floppies seem to be readable now. I have uploaded the new floppy images and you can download them here.


Sun, Mar 16, 2014

Today, my RC700 emulator booted up to the A> prompt in CP/M for the first time:
RC700   56k CP/M vers.2.2   rel.2.1

A>_

This is a major milestone in my RC700 emulator project. Now all the basic emulation is up and running, emulating the Z80 CPU, PIO, SIO, CRT, DMA, FDC, etc. It also shows that the new disk images are working as well as the boot loader ROM. I now need to tidy up the code and write a frontend for the emulator. I also need to implement support for writing to the virtual floppy disks.


Tue, Mar 18, 2014

The RC700 emulator can now run basic CP/M commands. I have made a virtual RC terminal for curses on Linux. I still need to implement keyboard and character set mapping to support the RC character set. While most of the character set is standard ASCII, there is special support for the Danish letters (Æ, Ø, and Å). These are mapped to the positions normally used by square brackets and backslash, which have then been mapped to character codes below 0x20.

Wed, Mar 19, 2014

Although the RC700 emulator is still work in progress, I have made it available for testing. You can take a look at the RC700 Emulator page for instructions for downloading and running it.

Mon, Mar 24, 2014

I have had problems getting the RC700 emulator display to work for RC700 COMAL. The screen drawing routine in the emulator pulls the screen buffer from DMA channel 2. This works fine for CP/M, but the display did not work properly when booting RC700 COMAL disks. After looking more closely at page 77 of the RC702 Technical Specification, I discovered that DMA channels 2 and 3 are cascaded in the video display controller. If DMA channel 2 terminates before reading a full screen buffer, it starts DMA transfer on channel 3. I have implemented this in the CRT emulator, and the display function in the emulator now also works for RC700 COMAL. Now I can run my 30-year old COMAL programs.

Tue, Mar 25, 2014

I have implemented a new SDL-based display for the RC700 emulator. This uses the ROA296 and ROA327 character ROMs for generating the characters on the screen. The emulator now uses the original RC font, which gives it a much more authentic feel. It also supports the semigraphics character set, including support for the SEM702 programmable character RAM.

Wed, Mar 26, 2014

I have added support for writing to floppy disks in the RC700 emulator. I have used this for producing a set of disk images with RC702 software packages from my old floppy disks.

Sun, Apr 13, 2014

It is useful to be able to transfer files between the RC700 virtual machine and the host machine, so I have implemented a simple file transfer port in the emulator to support this. This mechanism can potentially be used from all the different RC700 environments by using two special I/O ports for transferring files:
  • Port 0xe0: COMMAND (write) and STATUS (read)
  • Port 0xe1: DATA

To send a file from the RC700 virtual machine to the host machine the following protocol is used:

  1. Send RESET command (0x00) to the COMMAND port.
  2. Send FILENAME command (0x01) to the COMMAND port.
  3. Send filename by writing it to the DATA port one character at a time.
  4. Send CREATE command (0x03) to the COMMAND port and check that the STATUS port is 0.
  5. Send contents of file by writing it to the DATA port one byte at a time and checking that STATUS port is zero.
  6. Send CLOSE command (0x04) to the COMMAND port and check that the STATUS port is 0.

To retrieve a file from the host machine a similar protocol is used:

  1. Send RESET command (0x00) to the COMMAND port.
  2. Send FILENAME command (0x01) to the COMMAND port.
  3. Send filename by writing it to the DATA port one character at a time.
  4. Send OPEN command (0x02) to the COMMAND port and check that the STATUS port is 0.
  5. Read contents of file by reading it from the DATA port one byte at a time. The DATA port will return 0xFF in three different situations: If STATUS port is 0x00, the file contains a 0xFF byte and you can continue reading. If STATUS port is 0xFF, the end of the file has been reached, otherwise an error has occured.
  6. Send CLOSE command (0x04) to the COMMAND port and check that the STATUS port is 0.

I have implemented two utility programs for transferring files under CP/M using the file transfer port: FPUT.PAS and FGET.PAS. These are written in PASCAL and can be compiled with COMPAS PASCAL and you can download the SIMUTILS disk image with these from the RC702 software catalog.


Mon, April 14, 2014

The RC700 emulator now runs under Windows as well as Linux. You can download both versions here.

Tue, Apr 15, 2014

On the RC700 CP/M system disk there is a HDINST utility. If I try to run this program in the RC700 emulator, it outputs:
RC700   56k CP/M vers.2.2   rel.2.1

A>HDINST
RC700 - HARD DISK INSTALLATION - VERS.1.1 82.10.14

Error: Select disk C
A>

This seems to indicate that the RC700 had support for using a hard disk. Standard RC700 systems were equipped with one or two floppy drives, but usually not a hard disk. However, I remember having seen a RC700 with a hard disk back in the early 80ies. Maybe this was at the Mikro-Data 83 computer fair in Bella Centeret, Copenhagen, but I am not sure.

I have searched for any documentation on using a hard disk with RC700, but I have not been able to find anything. The standard RC700 did not have any hard disk controller, so I wondered how this could work. One clue is that during startup of RC CP/M, the boot loader reads from some undocumented ports, in particular port 0x61-0x67. To investigate this further, I disassembled the RC700 CP/M BIOS, and there are many places where these ports are used, and I could figure out that this had to do with the disk I/O routines. I also found out that DMA channel 0 seems to be used for hard disk transfers. In the RC702 Technical Specification, this DMA channel is described as being used by the external debugger, but maybe they designed a hard disk controller for the RC702 that used this spare DMA channel.

The RC750 Partner had hard disk support, so maybe they had retrofitted this to be used with the RC702. This used a modified Western Digital WD1002-SHD Winchester Controller with the RC internal product number WDC703 and a 10MB MiniScribe 3012 Winchester disk with the RC product number WDD703. The WD1002-SHD controller uses a SASI host interface, which is an early simplified version of SCSI. I found a data sheet for the WD1002-SHD controller, but the interface did not seem to match with the code in the RC CP/M BIOS. Port 0x67 seems to be the command and status register, but the command and status codes in the BIOS do not seem to match the SASI codes. The hard disk interface for the RC750 Partner also seems to have been designed in 1985, which is too late. I am looking for something that was available around 1983.

From the disassembly of the RC700 CP/M BIOS, I can see that ports 0x61-0x66 are being used as parameter registers, and port 0x67 is the command and status register. This is very similar to the IDE host interface for PC hard disks (today known as ATA). The parameter registers and commands seem to match and the IDE interface would have been available in 1983. However, there are some differences, most notable the lack of the IDE IDENTITY command that lets the host get the disk configuration through the IDE interface.

Around the same time, IBM was starting to sell hard disks for their IBM XT and AT Personal Computers. In 1983 Western Digital won the contract to provide IBM with controllers for the PC/AT, and the WD1003 controller was used for interfacing to Seagate ST-506 (5MB) and ST-412 (10MB) hard disks.

The WD1003 was designed for the PC/AT, so it was a 16-bit controller. It would have been a little difficult to interface to the 8-bit data bus in the RC702. However, Western Digital produced an earlier controller, WD-1002-05, which had an 8-bit interface, and matches the commands and parameters used in the RC700 CP/M BIOS.

Based on all this speculation and investigation, I believe that the RC702 could use a 10MB ST-412 hard drive with a Western Digital WD-1002-05 controller. I have no direct documentation for this, but the BIOS in RC700 56k CP/M vers.2.2 rel.2.1 seems to have support for this, and these items would have been available at the time.

In order to add support for a virtual hard disk in the RC700 emulator, I need to find a way to make the BIOS believe that there is a hard disk attached to the system. The "Error: Select disk C" message indicates the the BIOS thinks that there are only two disk drives in the machine. Maybe I need to patch the BIOS to get this to work, but I don't have any documentation on how to do this, and it is not obvious from the BIOS disassembly how to do this, so this is where am stuck right now.

The flexible disc drives for RC702 had product numbers RC761 and RC762. At address 0x04E2 in the RC700 CP/M boot sector there is a string containing "RC763". Maybe RC763 was the product number for the mysterious undocumented RC700 hard disk.


Fri, Apr 18, 2014

I have found a way to run the HDINST utility. If you patch the value 0x04 into memory location 0xF334, the RC CP/M BIOS thinks that there are four drives in the system. I have made a skeleton WD1002 device emulator, and I can now run the HDINST utility:

RC700   56k CP/M vers.2.2   rel.2.1

A>DDT
DDT VERS 2.2
-SF334
F334 01 04
F335 02 .
-^C
A>HDINST
RC700 - HARD DISK INSTALLATION - VERS.1.1  82.10.14

New configuration on hard disk? (Y/N)Y

WARNING! A new configuration will cause old data
         on the hard disk to be erased - OK? (Y/N)Y

   I Type of configuration   I Disk sizes                        I
   I-------------------------I-----------------------------------I
   I  1:  DISK C,D           I  0,3MB  7,9MB                     I
   I  2:       C,D,E         I  0,3MB  3,9MB 3,9MB               I
   I  3:       C,D,E,F       I  0,3MB  1,9MB 1,9MB 3,9MB         I
   I  4:       C,D,E,F,G     I  0,3MB  1,9MB 1,9MB 1,9MB 1,9MB   I
   I-------------------------I-----------------------------------I


Select type (1/2/3/4): 1

Drive A : 0,3 MB mini diskette
Drive B : 0,3 MB mini diskette
Drive C : 0,3 MB hard disk unit
Drive D : 7,9 MB hard disk unit

New configuration OK? (Y/N) Y

Writing CP/M format (E5's), track: 192
Function completed

Copy CP/M system to hard disk? (Y/N)Y

Select source drive (A/B) A
Insert CP/M system diskette in A and press <return>

CP/M system copied

Press <reset>  to initiate new system configuration
      <return> to warm boot
A>
After looking more closely at the WD1002 commands issued when running the HDINST utility, I have found out that it formats the RC763 hard disk with 192 cylinders, 6 heads per cylinder (i.e. three platters), 16 sectors per track, and 512 bytes per sector. This gives a total capacity of 9216 KB. This does not match with the Seagate ST-514 drive. The only hard disk I have been able to find that matches this geometry is a Rodime RO-103 produced by Rodime, Inc. This drive is from the early 80ies and has a ST-506 compatible interface. It has 17 sectors per track, but maybe the RC CP/M BIOS only uses the first 16 because this makes it easier to compute CSH values for a given block number.

Fri, May 2, 2014

While playing around with the RC700 COMAL system, I stumbled upon an undocumented backdoor: the command ej050253 will take you into a simple monitor that allows you to inspect and debug the system. I believe this command is a reference to one of the main authors of RC700 COMAL, Erik Jeppesen, who has used his initials and birthday to add a backdoor command to the system. You can use the following commands: Q (quit), R (run), S (show registers), J (jump to address), L (list memory), M (modify memory), and # (reboot). You can also type a hex address to change the memory location for the next command.

Sun, Jul 20, 2014

I have gotten some more information about the RC700 hard disk from Finn Verner Nielsen at DDHF and Erling Schmidt, my computer class teacher from back when I was in primary school. The product number for the hard disk for RC700 was RC763B, which can be seen in the image to the right. This shows a RC763 hard disk at DDHF. Apparently, only very few RC763s were ever produced, probably because it was introduced around the same time as the RC750 Partner, which had a hard disk.

Wed, Jul 23, 2014

I have made a Web-based version of the RC700 emulator. You can now run the RC700 directly in your browser without having to install anything on your own computer. The frontend is implemented using HTML and Javascript, and communicates with the RC700 emulator backend that runs on the web server. The frontend and backend communicates using WebSockets. You can try the emulator here.

Sat, Jul 26, 2014

I have just returned from my visit to DDHF where I talked with Peter Heinrich. He is working on getting the RC700 machines at DDHF up and running. I also saw their RC763 hard disk, and it turned out that I was right about the Rodime disk. I also finally figured out how the interrupts from the WD1000 is handled. The interface board for the RC763 has an extra Z-80 CTC that is used for HD interrupt handling in the same way as the FDC and DMA controllers. This explains the writes to port 0x44-0x47.

Peter Heinrich had a box full of floppy disks for RC700, which I have made copies of and I am in the process of getting these organized and put up on the web site. One of the disks contained a source code listing of the autoloader for the RC700. The ROB358 boot ROM is a never version than the ROA375 I have used so far. I have made a build disk for the ROB358 autoloader, so I can build it from source. ROB358 supports booting from the hard disk, so the emulator can now boot directly from the hard disk.


Sat, Nov 22, 2014

I have found a hardcopy of the manuals for the COMPAS Pascal system that I used back in the early 80ies. COMPAS Pascal ran under CP/M and was made by Anders Hejlsberg's Danish company, Poly-Data microcenter ApS, and would later evolve into Borland Turbo Pascal. I have disk images for running COMPAS on my RC700 emulator, but so far I have not been able to find the manuals for COMPAS Pascal anywhere. I have scanned the manuals and put them under the manuals section:

Sat, Jan 24, 2015

I have made a Mac OS X version of the RC700 emulator. Since I don't own a Mac myself, I have only been able to test it on a VMware virtual machine running Mac OS X 10.8. It required very few changes to the code to get it to compile and run, thanks to the cross-platform nature of SDL. Most of the changes was to fix compiler warning generated by the C++ compiler in Xcode.

Thu, Jan 29, 2015

In celebration of the 40th anniversary of COMAL, I have, in cooperation with Erling Schmidt, reconstructed the COMAL programs for the KV81 system, which was used for the local elections in Aalborg in 1981. See here for the story (in Danish). We now have a running system including all the data from the 1981 local election in Aalborg.

Sun, Feb 1, 2015

Erling Schmidt was the editor of RC-INFO, which was a regular feature in Datalærebladet. He has scanned a bunch of these, so I now have the information for reconstructing the overall timeline and history of the RC700.

RC701, the first computer in the RC700 series, was announced in November 1979 shortly after the reconstruction of Regnecentralen, which went bankrupt earlier that year. The new company, A/S Regnecentralen af 1979, continued the development of the RC line of computers, and the RC701 was the first micro computer from RC.

RC701 was developed by the development group in Aarhus, and when it was presented at a seminar in Esbjerg, it was still a prototype. It was not until the beginning of 1980 that the first RC701 systems were produced and sold. The price for the standard system, including a 12" TV monitor and a 180K floppy drive, was 16.000 DKK. This is approximately 45.000 DKK ($7000) in 2015 prices.

The RC701 had a 4 MHz Z-80 processor, 32K RAM, 2 serial ports, 2 parallel ports, floppy disc controller, TV video output, and a Kansas City Standard cassette interface. It had a gray cabinet (in contrast to the beige and brown cabinets used later), an 8" floppy disk drive, and it used an ordinary 12" television as monitor.

The RC702 was announced at the ISAK convention, Fredericia, in August 1980. This is the system that I am most familiar with, and have described elsewhere on this site. In May 1981, Regnecentralen offered to upgrade all RC701 systems to RC702 systems, which might explain why they are so rare today, even more rare than RC702 systems. RC702 was nicknamed Piccolo at the same time.

A number of extensions were produced for the RC702. The SEM702 programmable character generator was announced in 1981, and in September 1983, high-resolution graphics (540x275x1) for the RC702 became available based on the NEC uPD7220 graphics processor. Around the same time, the RC763 10MB Winchester disk was released, using an interface card based on WDC1002 from Western Digital. The RC700 emulator has support for both SEM702 and RC763, but I have not yet implemented support for NEC uPD7220, primarily because I don't have any software for the RC700 that supports it. It looks like Regnecentralen released a new version of RcComal80 for Piccolo in June 1984, which had support for graphics commands, as well as Mikro-LOGO. Maybe these supported highres graphics on RC700. I am very interested in getting a copy of any of these.

In April 1983, the last computer in the RC700 series was announced. The RC703 was a relatively minor upgrade of the RC702 system. It had improvements like a more silent cooling fan and the RESET button had been redesigned. The RC702 had an annoying design flaw. If you pushed the keyboard too close to the computer, it could trigger the RESET button on the front. More than once, I have lost code because of this problem. Most notable, the RC703 came with high-density floppy drives, doubling the floppy disk capacity to 780K. However, the RC703 was soon overshadowed by the announcement of the new RC759 Piccoline in March 1984. This was a new generation of 16-bit micro computers from Regnecentralen based on the Intel 80186 CPU, and this more or less marked the beginning of the end of the RC700 era.


Regnecentralen RC701 system (from RC-INFO February 1980)


Regnecentralen RC703 system (from RC-INFO April 1983)

Tue, Feb 3, 2015

I have received a lot of articles in Danish about RC700 from Erling Schmidt. He was the editor of RC-INFO, which was a regular newsletter from Regnecentralen in Datalærebladet. This contained the latest news about RC products with special focus on schools and education. This is an excellent source of historical information about the RC700.

Tue, Feb 10, 2015

The RC700 emulator now runs on Windows, Mac, Linux, and Web, but I thought it would be fun to also make a version that could run on "bare metal". I have made a floppy disk that you can put into a PC and turn it on. The PC then boots up and runs just like a RC702 Piccolo. This way, you can run RC700 programs on a PC, just like you would run them on a RC700. The floppy contains an embedded version of the emulator as well as a RC floppy disk in IMD format. This probably doesn't have any practical value, but it is fun!

The emulator uses my own small kernel, so both the kernel, the emulator, and the floppy disk IMD file can all fit onto one 3.5" floppy disk. This requires a PC with a 3.5" drive (rare these days) and 1024x768x16 VGA support (pretty common).

I have made a small video of a PC booting up into the emulator. This boots up into RC700 COMAL with the KV81 system. Reading from floppies is slow, so it takes almost a minute to boot up, but if you're patient, you will see the PC suddenly turn into a RC700 computer. The emulator runs at roughly realtime speed, emulating a 4 MHz Z80 CPU.


Mon, Apr 6, 2015

Last time I visited DDHF, I found a printout with a complete listing of the source code for the RC700 CP/M BIOS. It turned out to be a patched version of the BIOS, but most of the original source code was intact. I have scanned the listing and OCRed it. It required quite a bit of manual correction to reconstruct the code. My OCR program does not preserve the formatting of the source code text, so I had to manually correct this to match the printout. After removing the patches, I have compared the assembled version with the binary BIOS distributed with RC700 CP/M version 2.2 release 2.1. I now have a version of the source code that matches the official version, byte for byte. I had to do a little reverse engineering from a disassembly of the official 2.1 BIOS, but I think that 97% of the BIOS source code is original.

; RC COMPUTER 23.04.83 25.06.82 15.09.82
;             23.10.82 05.01.83
;
; SUBJECT:                     RC700 CP/M BASIS SOFTWARE
;
; AUTHOR:                      KARSTEN DINDORP & HUGO K.
;
; HARD DISK CORRECTIONS:       SC & VN JUNE 82
;
; This program consists of:
;
; 1. Hardware initiatization routines
;
; 2. CP/M BIOS
;
; and constitutes the basis software for the CP/M operating system
; on the RC700 micro computer.
;
; The program resides on cylinder 0 of a RC700 CP/M system discette,
; and is loaded into RAM from address 0000 and forward, when the ROM
; bootstrap loader is activated by a hardware reset.

Wed, Oct 21, 2015

I now have all the source code needed for building a new version of CP/M for RC700 from scratch. This is the first release of RC700 CP/M in more than 30 years, and this version is open source.


Sat, Sep 15, 2018

I found a copy of the source code for the MATH48 package by Anders Hjelsberg. This is a library for 48-bit floating point math in Z80 assembler.

It has functions for math operations like add, subtract, multiply, divide, and remainder. It also has functions for many mathematical fuctions like exponentiation, logarithms, square root, and trigonometric functions, as well as conversion to and from integers. There are also functions for formatting floating numbers as strings. All this only takes up 2.5 KB code!

This is a true programming pearl from the 80s. The author, Anders Hejlsberg, is probably better know as the author of COMPAS pascal (later Turbo Pascal), and he is the lead architect of C# at Microsoft. I have ported the code to run on the RC700 and you can now run the demo program for computing sine and cosine tables on the RC700 emulator. There is a manual in Danish, and a translation of it to English.


Tue, Mar 30, 2021

Besides my 5 1/4" floppy disks for the RC702, I also have a few 8" floppy disks which were used with a RC701 computer on my school. I can read the 5 1/4" disks with a 5 1/4" disk drive attached to a PC, but I did not have any way of reading the 8" floppies.

However, it turns out that Maurice Hamm from the Netherlands has a RC702 with two 8" floppy drives. His boot disk had stopped working after 30 year, so I sent my 8" floppies by mail to him, and he was able to boot the machine again using the RC700 CP/M Loader and CP/M System disk. He has also managed to hook up the 8" drive to a PC so he can read 8" floppy disks and turn them into IMD files which can be used in the RC700 emulator.

I now have disk images for booting RC700 CP/M 2.2 from 8" floppy disks in the emulator:

./rc700 -maxi CPMLOAD.IMD CPMSYS.IMD

After the boot loader has started, press F9 to swap the floppy disks, and press Enter. Then it will boot into "60k cp/m vers 2.2".

The CPMSYS.IMD disk image also contained a very early prototype of RC700 COMAL. There is no version number in COMAL.COM, but the disk label says "rev. 1.04", which makes it the earliest version of RC700 COMAL in my archive.