Return to main page

Jack Bresenham's Line Drawing Algorithm

Added August 22, 2023, scans from Robert Garner
- PLOTS_Input_Bresenham_1962.pdf
- PLOTS_CodingSheetsC_Bresenham_1962.pdf
- PLOTS_CodingSheetsB_Bresenham_1962.pdf
- PLOTS_CodingSheetsA_Bresenham_1962.pdf
- GeneralPurposeIncrementalPlotting_1401Autocoder_Bresenham_1962.pdf
- PrintWithBufferedPlotting_Report_IE263_Bresenham_1962.pdf
- PLOTS-GeneralPurposeIncrementalPlotting_Bresenham_1962-1.pdf

This is a collection of e-mails concerning software in an IBM 1401 that could drive a Calcomp plotter.

Table of Contents
- from Brenda Make, to IBM, Nov 25, 2022, at 11:01 PM
- from Robert Garner, to Brenda, 11/26/2022 10:11 PM
- from Brenda Make, to Robert, Nov 27, 2022, at 12:14 PM
- from Robert Garner, to Brenda, Nov 27, 2022, at 7:59 PM
- from Brenda Make, to Robert, Nov 28, 2022, at 8:56 AM
- from Robert Garner, to Brenda, Nov 28, 2022, at 9:32 AM
- from Ken Shirriff, to Brenda, Nov 28, 2022, at 12:02 PM
- from Brenda Make, to many, Nov 28, 2022, at 3:41 PM
- from Jack Besenham, Robert, Nov 28, 2022, at 1:45 PM
- from Robert Garner, to Brenda, Nov 28, 2022, at 5:26 PM
- from Brenda Make, to many, Nov 28, 2022, at 8:29 PM
- from Robert Garner, to Brenda, Nov 28, 2022, at 10:08 PM

Not included are some e-mails
- looking for a CalComp plotter ("rare as hen's teeth")
- a document (11 megabyte) history of IBM from Bill Worthington

Added documents not linked below
- 1964-IBM-Technical-report-Circle-algorithm-original-TR.docx
- 1964-IBM-Technical-report-Circle-algorithm-original-TR.pages (duplicate of above)
- ACM-Circle-Drawing-Algorithm-paper-from-Internet--b-laiddca-77.pdf
- Bresenham-woman-figure
- Bresenham-ListingA 01, 02, 03, 04
- Bresenham ACM. Aug 27-30, 1963 01, 02, 03, 04, 05, 06, 07,
- Bresenham Publications
- Stanford Centennial and Landsdown Computer Bulletin Interviews
- Moscow State University -Bresenham visit -1983 article -Moscow -USSR
- 11 April 2022 ABQ Journal Outlook Bresenham Distinguished Contributor award 66 person cohort March 2022


from Brenda Make, to IBM, Nov 25, 2022, at 11:01 PM
...

Recently, it has came to my attention that IBM's own, Dr. Jack Bresenham used a IBM 1401, a 1407 typewriter inquiry console (which the museum lacks, and no one seems to have seen) and a Calcomp plotter, and when he created his line famous algorithm, which is still in use today.**

Though, I am not an official liaison of the museum and perhaps I have forgotten my place, yet I do wonder if IBM has any particulars about the backstory of how Bresenham's line algorithm was created? Was it indeed done on a 1401? Are there any photos of the first plots, or the equipment?

...

And if a punch-card copy of Bresenham's algorithm exists, like art, it should hang proudly on a wall.

...

Sincerely,
Brenda Ellen Make

**Ref: https://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm

- from Robert Garner, to Brenda, 11/26/2022 10:11 PM
To whom did you address it at IBM? If you like to send again, the IBM Archivist is
     Jamie Martin < jamielm@us.ibm.com >
and another of our long time and expert contacts in the archives there is
     Max Campbell < Archive1@us.ibm.com >.

- from Brenda Make, to Robert, Nov Nov 27, 2022, at 12:14 PM
Hi,

I just tried it from the only form I could find.

I resent it. The first email address you had went through, the other: Archive1@us.ibm.com bounced. The second attempt returned and out-of-office.
At least one went through. : )

Thank you for your understanding,
Brenda

- from Robert Garner, to Brenda, Nov 27, 2022, at 7:59 PM
Brenda,

Great — glad you forwarded your wonderful email about Bresenham to Jamie and Max (re: his algorithm for drawing lines, first done on a Calcomp connected to a 1401) !

Cheers,

— Robert
p.s. This may be Jack Elton Bresenham (from TruePeopleSearch. I’ll try calling tmrw).

Jamie and Max are thoughtful and engaging folks!! Jamie was actually new to computers when she took over the IBM archive directorship in 2014.
Here’s a 2016 photo of the Jamie, Max (and/Dave Bennet, of the CHM RAMAC demo team) visiting the RAMAC disk stack unit (350) on display at IBM Almaden Research, where I worked 2001 - 2018.)

- from Brenda Make, to Robert, Nov 28, 2022, at 8:56 AM
Hi,

I found a copy of Bresenham's original paper (but not the original source code,) following the breadcrumbs....

There's a page dedicated to the line drawing algorithm.
https://www.markwrobel.dk/post/amiga-machine-code-letter12-linedraw/

Which has an interview with Bresenham :
https://www.youtube.com/watch?v=fR6npND-0rw

Which was likely the likely the front source connecting it to the 1401, the National Institute of Standards and Technology, and mentions that
https://xlinux.nist.gov/dads/HTML/bresenham.html

It also leads me here, to a PDF that's pay-walled, that might contain details :
https://ieeexplore.ieee.org/document/5388473

Which leads me around it to find Bresenham's original paper but not the code, but it does mention 1401!
https://www.cse.iitb.ac.in/~paragc/files/bresenham_line.pdf

"The algorithm can be programmed without the use of multi- plication or division. It was found that 333 core locations were sufficient for an IBM 1401 program (used to control an IBM 1627). The average computation time between successive incrementations was approximately 1.5 milliseconds."

Which seems to change the branding of the Calcomp plotter to the identical one with the IBM logo, which perhaps was just done to keep it all IBM, back then, but apparently IBM also sold the plotters with their name, the IBM 1627
https://en.wikipedia.org/wiki/IBM_1627

Which also leads us back to the NIST page, which states "Calcomp (Jim Newland and Calvin Hefte) had copies"

Which will lead me here:
https://www.calcompgs.com/

Take Care,
Brenda

- from Robert Garner, to Brenda, Nov 28, 2022, at 9:32 AM
Brenda,

Awesome research (!) into Bresenham’s algorithm and its reported deployment on an IBM 1627 (aka Calcomp drum plotter) attached to a 1401.

It’s interesting that IBM OEM’ed the Calcomp drum plotters (models 565 and 563) as IBM 1620 peripherals:

  • IBM 1627 Model 1 — Calcomp 565 — Plotting area: 11 inches by 120 feet, 1/100 inch incremental-step size, up to 18,000 steps/minute.

  • IBM 1627 Model 2 — Calcomp 563 — Plotting area: 29-½ inches by 120 feet, 1/100 inch incremental-step size, up to 12,000 steps/minute.
I’ve cc’d Dave Babcock, our 1620 expert and aficionado.

Bob,

> I have some Calcomp drum plotters. ...
> Just picked up a Calcomp 563. It's pretty clean but with a badly dented drum. I have to figure out a way to fix that.

Is one of those the smaller Calcomp model 565? :)

Interesting & fun history,

— Robert

- from Ken Shirriff, to Brenda, Nov 28, 2022, at 12:02 PM
Hi Brenda,
I've attached a copy of Bresenham's paper in case you couldn't find a copy.

Ken

- from Brenda Make, to many, Nov 28, 2022, at 3:41 PM
Hi,

Some of the original code is found!!!!
I don't know if it's all there, it seem a small even for something that is only supposed to use 33 word locations. There is indeed an END statement, but I don't know if there were other routines.
(I tried a google search on some of the code, but nothing else, yet.)

"Jack Bresenham sent me code to drive a CalComp plotter attached via an RPQ to a 1407 console typewriter. It shows the four directional commands. I don't know what the "pen up" and "pen down" commands were. Do you?"

http://www.bitsavers.org/1401/progs/bresenham/bresenham.s

For some reason, the web maintainer also had a variation too.
Ref: http://www.bitsavers.org/1401/1401-progs.html

Take Care,
Brenda

     000       JOB  ENTER PLOT POINTS FROM 1407
               CTL  4411
               ORG  501
     *
     *                          TRAVEL SUBROUTINE
     *
     TRAVEL    SBR  LEAVE&3
               ZA   ZEROA,ALPHA
               ZA   XTRGT,DELX
               ZA                  YTRGT,DELY
               S    XPR,DELX
               S                   YPR,DELY
               MCW  XTRGT,XPR
               MCW                 YTRGT,YPR
               ZA   DELX,DELA
               ZA                  DELY,DELB
               MZ   *&8,DELA                 NEED MAGNITUDE SO  A B BITS
               MZ   *&1,DELB
     *                          DETERMINE OCTANT
               C    DELA,DELB
               BM   DELXN,DELX
               BM   DELYN,DELY
               MN   PXPY,D45
               BH   D00PY
     D00PX     MN   PX,D00
     SETDEL    ZS   DELA,DEL
               A    DELA           DELA NOW DOUBLED-SEE DRIVING LOOP
               A                   DELB NOW DOUBLED-SEE DRIVING LOOP
               B    TALPHA
     DELXN     BM   DELXYN,DELY
               MN   NXPY,D45
               BH   D00PY
     D00NX     MN   NX,D00
               B    SETDEL
     DELYN     MN   PXNY,D45
               BL   D00PX
     D00NY     MN   NY,D00
               B    DELAY
     D00PY     MN   PY,D00
     DELAY     MN   DELY,DELA                DELA S/B DELY  SAVE PLUS
               MCW
               MN   DELX,DELB                DELB S/B DELX
               MCW
               B    SETDEL
     DELXYN    MN   NXNY,D45
               BL   D00NX
               B    D00NY
     *                          PLOTTER DRIVING LOOP
     D00GO     MCW  %T0,D00,S                MOVE RELATIVE ZERO DEGREES
     TALPHA    C    ALPHA,DELA
     LEAVE     BE   0                        0 DUMMY
               A    TWOA,ALPHA        NOTE   DELA HAS BEEN DOUBLED
               A    DELB,DEL          NOTE   DELB PREVIOUSLY DOUBLED
               BM   D00GO,DEL
               MCW  %T0,D45,S
               S    DELA,DEL          NOTE   DELA PREVIOUSLY DOUBLED
               B    TALPHA
     *                          CONSTANTS
     ALPHA     DCW  #6
     YTRGT     DCW  #6                  DESIRED Y COORDINATE
     XTRGT     DCW  #6                  DESIRED X COORDINATE
     DELY      DCW  #6                  Y2 MINUS Y1
     DELX      DCW  #6                  X2 MINUS X1
     YPR       DCW  #6                  PRESENT Y COORDINATE
     XPR       DCW  #6                  PRESENT X COORDINATE
     DELB      DCW  #6                  DEPENDENT VARIABLE DIFF
     DELA      DCW  #6                  INDEPENDENT VARIABLE DIFF
     DEL       DCW  #6                  DECISION DIFFERENCE
     D00       DA   1X1,G               RELATIVE 0 DEGREE MOVE
     D45       DA   1X1,G               RELATIVE 45 DEGREE MOVE
     PX        DCW  @3@                   0  DEGREE CODE
     PXPY      DCW  @2@                  45  DEGREE CODE
     PY        DCW  @1@                  90  DEGREE CODE
     NXPY      DCW  @8@                 135  DEGREE CODE
     NX        DCW  @7@                 180  DEGREE CODE
     NXNY      DCW  @6@                 225  DEGREE CODE
     NY        DCW  @5@                 270  DEGREE CODE
     PXNY      DCW  @4@                 315  DEGREE CODE
     ZEROA     DCW  &0
     TWOA      DCW  &2
     *      
     *                          END OF TRAVEL SUBROUTINE
     *      
     *                                  --CALLING SEQUENCE--
     *                               1.   ZA   DESIRED X COORDINATE, XTRGT
     *                               2.   ZA   DESIRED Y COORDINATE, YTRGT
     *                               3.   B    TRAVEL
     *      
     *                          XPR,YPR ARE UPDATED
     *                          TRAVEL EXECUTED
     *                          CONTROL RETURNED TO INSTR AFTER *B TRAVEL*
     BEGINX    LCA  MXGX,47
               SW   27,MSGX-1
               MCE  XPR,33
               MCW  &XTRGT,PLACE&6
     TYPE      LCA  @}@,48
               MCW  %T0,21,W
               CS   8
               LCA  @}@,8
               BIN  VIN,Q
               B    *-8
     VIN       MCW  %T0,1,R
               SBR  PLACE&3
               BIN  TYPE,*
               BCE  PLACE&7,1,}
               MA   @I9H@,PLACE&3
               BM   VMINUS,1
               MCW  @?@,PLACE
               BWZ  VPLUS,1,B
               SW   1
     PLACE     ZA   0,0
               BW   BEGINY,MSGX-1
               B    TRAVEL
               B    BEGINX
     VMINUS    MCW  @!@,PLACE
     VPLUS     SW   2
               B    PLACE
     BEGINY    LCA  MSGY,47
               SW   27
               CW   MXGX-1
               MCE  YPR,33
               MCW  &YTRGT,PLACE&6
               B    TYPE
     MSGX      DCW  @X NOW     0 -, ENTER NEXT X@
     MSGY      DCW  @Y NOW     0 -, ENTER NEXT Y@
               END  BEGINX

- from Jack Besenham, to Robert, Nov 28, 2022, at 1:45 PM
Hi Robert,

Enjoyed chatting with you this morning. Brought back many good memories of my time working in Dr. Eugene Lindstrom’s comp lab at IBM San Jose from 1962-1967.

Attached are several scanned images you may find of interest.
1, 1a, 2, 3, 4, 5, 6, 7

Having enjoyed celebrating my 85_th birthday last month, I do need to start thinking about what to do with mementos from my past. Among other items, I have examples of drawings and the 1403 printout of the full plotting program I wrote for use in Dr. Lindstrom’s lab. The 1401 program would use tape output from 7094 output tape with columns of numbers to plot curves from various engineering calculations. … and, somewhere, I have a box of punched cards with related, but now unknown content.

Ciao, Jack
j.bresenham@computer.org
1.505.896.7893
303 Palo Alto Dr. NE Rio Rancho, New Mexico 87124

- from Robert Garner, to Brenda, Nov 28, 2022, at 5:26 PM
Brenda,

I had a delightful 45-minute conversation with Jack Bresenham this morning.

He spoke of his background (Stanford PhD, numerical analysis, class assignments run on an IBM 650), the IBM San Jose work environment, including the computing resources (their 1401 was an I/O spooler for their 7090, the usual setup :), how he developed the algorithm, and so on.

They used the 11”-wide Calcomp 565 drum plotter (not the wider 30” version).
Bob —> Do you know if either of your 565’s are near operational, or potentially restorable? :)

Jack sent me the following email with a scanned period memo to his boss describing the plotting project, the program for the 1963 ACM National Conference (where he 1st presented the algorithm), a code listing, and some scans of some original plots (that he still has).
The last two sets of images are imbedded in Word docs.
I’ll confirm if he has the complete 330-memory location listing referred to in the IBM JR&D paper (he said he did).
Also, please accept my apologies if the plot of a woman’s outline, taken from Playboy magazine, is offensive. (Please let me know if so!)
Sample CalComp plots here - in .docx format, 6.1 megabytes

You are welcome to email or call him up! I’ve already introduced you by name. :)
His land line phone is (505) 896-7893.

Thanks for discovering this fun 1401-related history!

— Robert

- from Brenda Make, to many, Nov 28, 2022, at 8:29 PM
Hi,

Amazing, Robert! You totally found him, and in good health and spirits I hope as well.

The funny thing about this whole endeavor is: it was like 2 paths though the jungle that didn't quite meet, but were only separated by only a few paces.

I looked at the plots, and including the woman's outline, too, and well, maybe he invented the trucker's mudflap, too. : )
I liked the black-body radiation, as in a carbon cube, hot, with a little hole in it for the color/temperature.

Seeing the original printout is really cool, though, it likely isn't complete. Well, it seems that he sent more than that to someone else, and I posted it elsewhere here. It seems to validate that it's the right code, and there is a reasonable possibility that we have it all.

So, it's been quote a roller-coasted, because I found the code, but when I got to the house, I saw ORG 501. I thought to myself, they couldn't have been able to set the base address on a 1401, and back then : (
Then I started reading the autocoder docs, and well, they did have an ORG. : )

Then I saw instructions that I didn't see in the autocoder manual PDF, sigh.
But then I found them in another autocoder manual. : )

So, I spent at least an hour trying to look find 1401 op-codes comparing them to the program I downloaded. It does end with an END line.

Then, I had lingering doubts that we had the right code, because it could have been for another IBM, until I saw what you sent me.

Perhaps we can figure out some method to display the research paper, and maybe a printout of the algorithm, like either a 8.5x11 or something larger with Dr. Jack Besenham's Line algorithm on it
Perhaps he could sign a copy--err maybe a few, and I guess even one for the CHM for the 1401 room : )

Take Care,
Brenda

- from Robert Garner, to Brenda, Nov 28, 2022, at 10:08 PM
Brenda,

As you know, and experienced again here, computer archeology is fun! :))
(Btw, how did you first discover that Besenham first worked out his algorithm on a 1401+Calcomp?)

Jack is in good spirits, his memory is excellent, and he enjoys telling his stories and anecdotes.
You’ll enjoy talking with him, if/when you so decide. :)

He’ll likely get back to me tmrw regarding the entire set of 1401 plot code (and hopefully will be able to find the box of unknown 1410 programs).
I’ll be sure to cc you on the future email exchanges.

Cheers,

— Robert

p.s. An interesting tidbit Jack shared was that his younger brother Dick and Alvin Ray Smith* went to high school together in Clovis, New Mexico and their parents were close friends.
That region of New Mexico also inspired Smith’s close friend, Clyde Tombaugh, to look up at the heavens, later discovering Pluto at Lowell Observatory. (I’m on Lowell's board of advisors :).

* Alvin Ray Smith: Pixar founder, Toy Store fame and recently published his “A Biography of the Pixel” tome.
I enjoyed chatting with him last month at the CHM Fellows Award dinner.