04 April 2018

Floppy-to-RS232 microcontroller

This was a complete hardware design and embedded software project that was completed by me from the start to the end in ~8 months.

The idea of the device was to create autonomous and cheap microcomputer that would read a data file containing plotter commands in HP-GL language from a 3'5 inch floppy disk and send it to a RS-232 serial port, buffering the transmission. The need for this device was shaped by the state of the CAD technology then when plotters were quite slow and output of a drawing could take several precious computer time hours. Yes, there was no multitasking back then! This device allowed to write the CAD drawing on a 3'5 inch floppy disk, insert it into the device, press a button and leave it to output the graphics without a computer.

Hardware

The hardware of the device is based on Zilog Z80 processor and support architecture and contains:

  • Zilog Z80 processor
  • ROM with firmware
  • RAM
  • RS-232 I/O controller on a chip
  • Floppy drive controller on a chip
  • a START button :)

The principal circuit is shown on the image below (P-CAD .sch drawing):

controller P-cad curcuit

The print board was designed in P-CAD and produced to the order. The layout is shown on this image (P-CAD .pcb drawing):

board layout

Software - firmware

The firmware of the device organises the work of all the components, specifically:

  • device initialisation and I/O systems setup;
  • locate the data file in the FAT file system on the floppy disk;
  • read the file into the RAM memory in a loop buffer;
  • buffered output to the RS-232 port with control management ("busy"/"ready" etc)

The firmware was developed using assembler language and compiled with the assembler command line tool, also developed by me. Here is the firmware code in the GitHub repository.

Software - HP-GL viewer and editor

As a part of this project I also created a utility for viewing and editing of key elements of HP-GL files. The utility allows:

  • set origin point;
  • assign colours and numbers to pens;
  • transcode arcs (command ARC) into set of chords (commands PU,PD,PA);
  • change size and position of the user-defined output window and scaling;
  • path correction for output on old cutter models;

The source code for this utility is in this GitHub repository.