eBay Oddity: Silver Reed EB-50

Silver Reed EB-50 PrinterToday I present to you the Silver Reed EB-50. Made in 1985, this thing has a bit of an identity crisis. It’s a printer, a plotter and a typewriter all in one. The reason I got it was because it uses the same tiny ball-point pens that the Commodore 1520 printer/plotter uses. However, this prints on normal 8.5″ wide paper. It’s also very portable, has a lid that covers the keyboard and a flip out handle. It can run on batteries (5 x D cells OMG heavy) or on DC 7.5V power (center negative in case you want to know). For $9.99 it was a bargain curiosity that I couldn’t pass up.


In normal typewriter mode, you press a key and it will “draw” that character in one of 3 sizes, styles or directions in one of 4 colors. You can position the print head anywhere you’d like to print text. In addition, there are function keys to create graphs, right on the typewriter. Pie charts, bar graphs and line graphs are simple– select the type, enter the data points and it prints a graph at the print head position. Pretty clever for something that works sans computer.

Switch it to printer mode and now a computer takes over via the parallel port. This is where things got weird. I found reference to someone that wrote a program to convert HPGL plotter files to ones that printed on this one. This was key since there was no manual and I ran out of internets. But the file was locked up in a “drivers” ad supported nightmare of a website that had me install some bullshit driver manager on Windows to “install” a C code source file. What-fucking-ever. It’s included below in you want it.


A quick Processing sketch later and I’ve produced some output on it from my Mac using an old PowerPrint serial to parallel adapter via a KeySpan USB to serial adapter. Lots of adaptation, but what do you expect from a nearly 26 year old printer.


# hp2eb50.c
#include <stdio.h>

#define SCAL(x) (((x)+halfscale)/scale)
#define NUMV(x) ((x)=='-' || ((x) <= '9' && (x) >= '0'))
#define SP ('S'<<8)+'P'
#define PU ('P'<<8)+'U'
#define PD ('P'<<8)+'D'
#define PA ('P'<<8)+'A'
#define IW ('I'<<8)+'W'
#define SC ('S'<<8)+'C'
#define LB ('L'<<8)+'B'

FILE *source, *plotter;
short c,i,j,pen,scale,x1,x2,y1,y2,hx,hy,halfscale;
short befehl,ende,rot, colour[] = {0,1,2,3,0,1,2,3};
char param[100], *output;

void upcase(s)
   char *s;
  {
   register char c;
   register int  i=0;

   while ((c = *(s++)) && i<99)
     {
      param[i++] = (c>='a' && c<='z')? c-'a'+'A' : c;
     }
   param[i] = 0;
  }

short get_num()
  {
   register short c,x=0;
   short s;

   if (ende) return(0);
   else
     {
      while(((c = getc(source)) & 0x1ff) <= ' ');
      if (c == '-')  
        {
         s=-1;
         c = getc(source);
        }
      else s=1;
      while (c >= '0' && c <= '9')
	{
	 x = x*10+c-'0';
         while(((c = getc(source)) & 0x1ff) <= ' ');
	}
      if (c == ';') ende = -1;
      return(x*s);
     }
  }

void rotate()
  {
   register short h;

   if (rot)
     {
      y2 = y1;
      h = x1; x1 = y1; y1 = -h;
     }
  }

main(argc,argv)
   int argc;
   char *argv[];
  {
   if (argc<2)
     {
      printf("Usage: %s <hpgl-file> [SCALE <scale>] [ROT] [COLOUR <n1..n8>] [TO <output filename>]n",argv[0]);
      exit(0);
     }

   rot = 0;
   output = "par:";
   for (i=2;i<argc;i++)
     {
      upcase(argv[i]);
      if (!strcmp(param,"ROT")) rot=1;
      if (!strcmp(param,"SCALE") && i<argc-1)
	{
	 scale = atol(argv[++i]);
	 if (scale == 0) scale = 1;
	}
      if (!strcmp(param,"TO") && i<argc-1) output = argv[++i];
      if (!strcmp(param,"COLOUR") && i<argc-1)
	{
	 for (i++,j=0;j<8;j++) colour[j]=(argv[i][j]-'0') & 0x03;
	}
     }
   halfscale = scale/2;

   if (!(source = fopen(argv[1],"r")))
     {
      puts("Sorry - Can't open file!");
      exit(0);
     }
   if (!(plotter = fopen(output,"w")))
     {
      puts("Sorry - Can't open output file");
      fclose(source);
      exit(0);
     }

   pen = 0;
   fputc(18,plotter);  
   puts(" Command no.:");
   j = 1;
   do
     {
      i = ende = 0;

      do
	{
	 c = getc(source);
	} while (((c < 'A') || (c > 'Z')) && (c != -1));
      befehl = (c==-1)? 0 : (c & 0xff)<<8 | (getc(source) & 0xff);

      printf("2331A23313C %5dn",j++);   

      switch(befehl)
        {
         case SP : {
		    x1 = get_num();
		    if (x1)
                      fprintf(plotter,"C%d;n",colour[(x1-1)&7]);
                    break;
		   }
         case PU : {
         	    pen = 0;
		    break;
		   }
         case PD : {
		    pen = 1;
		    break;
		   }
         case PA : {
		    while (!ende)
		      {
		       x1 = SCAL(get_num());
		       if (!ende)
			{
		  	 y1 = SCAL(get_num());
			 rotate();
		         if (pen==1) 
                             fprintf(plotter,"D%d,%d;n",x1,y1);
		           else 
                             fprintf(plotter,"M%d,%d;n",x1,y1);
			}
		      }
		    break;
		   }
	 case LB : {
		    fputc('P',plotter);
	            while((c = getc(source)) >= 32) 
		      putc(c,plotter);
		    putc(13,plotter);
		    putc(10,plotter);
		    break;
		   }
         case SC : {
		    x1 = get_num();
		    if (ende) break; 
		    x2 = get_num();
		    y1 = get_num(); y2 = get_num();		    
		   }
         case IW : {
		    if (befehl==IW)
		      {
		       x1 = get_num(); y1 = get_num();
		       y2 = get_num(); y2 = get_num();
		      }
		    hx = (x2-x1+999)/1000;
		    hy = (y2-y1+999)/1000;
		    hx = (hx>hy)? hx : hy;
		    if (scale<hx)
		      {
		       scale = hx;
		       halfscale = scale/2;
		       printf("New scale: %dn2331A",scale);
		      }
		    rotate();
		    fprintf(plotter,"M%d,%d;nI;n",SCAL(-x1),SCAL(-y2));
		   }
        }
     } while (c!=-1);
   fputc(17,plotter);
   fclose(source);
   fclose(plotter);
   puts("nReady.n");
  }

 

13 thoughts on “eBay Oddity: Silver Reed EB-50

  1. Permalink  ⋅ Reply

    George

    September 7, 2011 at 10:36am

    I love it. My father bought one new for me in 1986 while in sixth grade (I know, I was a geek). I would love to acquire one of these again some day (I’ve been looking). Thanks for the memory!

  2. Permalink  ⋅ Reply

    Andy Scott

    June 8, 2012 at 4:08am

    Same here. My Dad bought me one in 1986 and I’ve still got it! Currently it’s in the attic covered in years of dust. Think I’ll dig it out. Wonder if you can still get the pens?

    • Permalink  ⋅ Reply

      admin

      June 8, 2012 at 8:20am

      Pens are hard to come by. There’s a company in Germany that makes new (rather expensive) pens that fit this machine (along with several small plotters for 8-bit machines like the Commodore 1520, Atari 1020 and the Sharp CE-150). Old stock is possible but are also expensive on eBay when they appear. I think the last I saw was a pack of three pens for $15.

      I’ve had some success in soaking the tips of old pens in very small amount of water. Sometimes that’s enough to get them going again.

  3. Permalink  ⋅ Reply

    B Hooton

    August 27, 2012 at 4:46am

    I have one of these machines, including many ‘pens’. Do not know if the pens are any good though.
    Surprisingly I was looking at it this afternoon as I wanted to show it at a meeting. The code will be usefull, thanks.
    I also have Sharp Computer Projection Panel, model QA-25, which I also intend to show at the same event.

    • Permalink  ⋅ Reply

      admin

      August 27, 2012 at 9:06am

      It’s a great piece of tech and mesmerizing to watch it plot. Glad you’ll be able to use the code. You have a 50/50 chance of the pens being usable if they were capped properly.

  4. Permalink  ⋅ Reply

    Ronny

    March 13, 2014 at 9:25pm

    I have one with swedish keyboard. What I did to resurrect the pens was this: heat the metal end with a cigarette lighter until it “crackles” then drop the pen into a glass of water. The temperature difference sucks water in, and the next day the pen is working. you fingers will be miscolored by ink escaping when you heat the pen.

    • Permalink  ⋅ Reply

      paulrickards

      March 16, 2014 at 1:46pm

      @Ronny That’s a great tip, I’ll have to give it a try. Thanks for sharing!

  5. Permalink  ⋅ Reply

    ronn

    August 6, 2014 at 11:40pm

    My method above dilutes the ink left in the pen, the ywork nice but draw a lighter line after the second and third filling… best would be to get new ink and refill ethem, I found it’s posible to pull the plastic part out of the metal and there is a sponge for ink and a small tube leading to the tip.
    I am going to try ink from a technical pen (unixline) when more retroputing time bacomes available to me 🙂

    • Permalink  ⋅ Reply

      ronny

      August 7, 2014 at 8:39pm

      Tried yesterday to cut the inner piece of a standard ballpoint pen to length and shim it with sticky tape to fit into the steel end of a dead pen. It works, but gives about thrice the linewidth, making less readable text in small mode and loss of detail when plotting dots and short lines. nevertheless this will be my test/play pen for now. Will buy stanrdard black ink and try refilling the sponge in the next few days. I also had to rebuild the plottermechanism since the small spring that tensions the wire broke. I cut off a ballpoint pen spring to length and rewound the machanism. it take a few tries to decide how far to wind the wire in each end.

  6. Permalink  ⋅ Reply

    Ronny

    August 29, 2014 at 8:52pm

    I made a improvised messy video of the EB50 plotting from applesoft basic running on an emulated appleIIe on my raspberry PI, over a usb->parallel dongle. Thanks a lot for the sample code above, it got me started. watch it at the web address above

  7. Permalink  ⋅ Reply

    Mark Blair, NF6X

    September 21, 2014 at 8:38pm

    Neat! I don’t think I’ve seen these before.

    Back in the day, I had a Radio Shack CGP-115 printer/plotter for my Color Computer. I think it used the same little ballpoint pens. I’m not sure if I still have the plotter in a box somewhere.

Leave a Reply

Your email will not be published. Name and Email fields are required.