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):
The print board was designed in P-CAD and produced to the order. The layout is shown on this image (P-CAD .pcb drawing):
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.