# Programma 101

The Olivetti Programma 101, also known as Perottina or P101, is one of the first "all in one" commercial desktop programmable calculators, although not the first. Produced by Italian manufacturer Olivetti, based in Ivrea, Piedmont, and invented by the Italian engineer Pier Giorgio Perotto, the P101 used many features of large computers of that period. It was launched at the 1964 New York World's Fair; volume production started in 1965. A futuristic design for its time, the Programma 101 was priced at $3,200 (equivalent to $31,900 in 2024). About 44,000 units were sold, primarily in the US.
It is usually called a printing programmable calculator or desktop calculator because its arithmetic instructions correspond to calculator operations, while its instruction set (which allows for conditional jump) and structure qualifies it as a stored-program computer.

## Design

The Programma 101 was designed by Olivetti engineer Pier Giorgio Perotto in Ivrea. The styling, attributed to Marco Zanuso but in reality by Mario Bellini, was ergonomical and innovative for the time. Some of the design was based on a 1961 Olivetti computer co-developed by Federico Faggin that served as a model for the programmable calculator.
The computational hardware consisted of standard (for its time) discrete devices (transistors, diodes, resistors and capacitors mounted on phenolic resin circuit card assemblies). The design predated microprocessors, and no integrated circuits were used since they were in their infancy.
A total of 240 bytes of information were electrically stored in magnetostrictive delay-line memory, which had a cycle time of 2.2 milliseconds.

### Ergonomics

The focus of the engineering team was to deliver a very simple product, something that anyone could use. To take care of the ergonomics and aesthetics of a product that did not exist before, Roberto Olivetti called Mario Bellini, a young Italian architect:
   I remember that one day I received a call from Roberto Olivetti: "I want to see you for a complex project I'm building". It involved the design not of a box containing mechanisms and stamped circuits, but a personal object, something that had to live with a person, a person with his chair sitting at a table or desktop and that had to start a relationship of comprehension, of interaction, something quite new because before then computers were as big as a wardrobe. With a wardrobe we don't have any relationship: in fact the most beautiful wardrobes disappear in the wall. But this wasn't a wardrobe or a box, this was a machine designed to be part of your personal entourage.
One of the direct results of the Programma 101 team focus on human-centered objectives was the invention of a removable magnetic card to store programmed calculation, a revolutionary item for that time, allowing anyone to just insert it and execute any program in a few seconds.
The Programma 101's design would earn the Mario Bellini the Compasso d'Oro Industrial Design Award.

### Technical characteristics

* Size: 275 mm ( A ) x 465 mm ( L ) x 610 mm ( P )
* Weight: 35.5 kg
* Consumption: 0.35 kW
* Output device: 30 column printer on 9 cm paper
* Accuracy: 22 digits and up to 15 decimal places
* Operations: add, subtract, multiply, divide, square root and absolute value
* Total memory: 240 bytes in the ALU (estimated) [AP 10]
* Keyboard: 36 keys.
* Archive: Magnetic card reader

## Operation

The Programma 101 can calculate the four basic arithmetic functions (addition, subtraction, multiplication, and division), plus square root, absolute value, and fractional part. It is equipped with memory registers with features such as clear, transfer, and exchange, plus printing and halt for input.
Programming is a kind of assembly language, simpler than the assembly of the contemporary computers, as there are fewer options and allowed to use directly arithmetic functions. It directs the exchange between memory registers and calculation registers, and operations in the registers. There are 16 jump instructions and 16 conditional jump instructions. Thirty-two label statements were available as destinations for the jump instructions and/or the four start keys (V, W, Y, Z).
While not stated in the General Manual and only in some Programming Manual, it is possible to perform a "modified jump", which allows to go back to different part of the program from the same subroutine.
There are 10 memory registers: three for operations (M, A, R); two for storage (B, C); three for storage and/or program (assignable as needed: D, E, F); and two for program only (p1, p2). Each full register holds a 22-digit number with sign and decimal point or 24 instructions each consisting of a letter and a symbol. Five of the registers (B, C, D, E, F) can be subdivided into half-registers, each containing an 11-digit number with sign and decimal point. It uses a kind of Modified Harvard architecture where data registers and instruction register are clearly separated, but it allows for some data to be written in the instruction registers under some conditions. That was a common feature in the 1960s desktop computer/programmable calculator and only HP provided a true Von Neumann architecture which allowed for self-modifying code, similarly to the contemporary general-purpose mainframes and minicomputers.
The stored programs can be recorded onto plastic cards approximately 5 cm × 20 cm that have a magnetic coating on one side and an area for writing on the other. Each card can be recorded on two stripes, enabling it to store two programs. Five registers are stored on the card; two registers are dedicated to the program code, the other three registers (D, E, F) can be used for code and/or numbers. Instructions occupy one byte, and a magnetic card can hold 120 instructions. The cards use a simple machine language.
The instructions or digits occupy eight bits, codified in binary-coded decimal. In instructions the left nibble stores the affected register and the right nibble the instruction, while in digits the first nibble stores information about the number, such as the sign or the decimal place, and the last nibble stores the actual digit.
It prints programs and results onto a roll of paper tape, similar to calculator or cash register paper.

### Instruction set

| Instruction | Opcode | Operation |
| Sum | + | A = A + Chosen Register (hereinafter "CR") |
| Subtraction | - | A = A - CR |
| Multiplication | x | A = A * CR |
| Division | : | A = A : CR |
| Square root | √ | A = sqrt(CR) |
| Absolute value | A ↕ | A = abs(A) |
| Transfer from M | ↑ | CR = M |
| Transfer in A | ↓ | A = CR |
| Exchange with A | ↕ | A = CR CR = A |
| Decimal part of A in M | / ↕ | M = A - abs(A) |
| Clear | * | CR = 0 |
| Print | ♢ | Print the chosen register |
| Vertical spacing | /♢ | Print a blank line |
| Stop | S | Stop the computer to let the user introduce data in the M register or to use the machine manually as a calculator |
| D-R exchange | RS | Store the D register temporarily in the R register; this is a special instruction used in multi-card program to save data from the deletion that happens while reading a new card |

## Sales history

The Programma 101 was launched at the 1964 New York World's Fair, attracting major interest. A total of 40,000 units were sold; 90% of them in the United States where the sale price was $3,200 (increasing to about $3,500 in 1968.)
About 10 Programma 101 were sold to NASA and used to plan the Apollo 11 landing on the Moon.
   By Apollo 11 we had a desktop computer, sort of, kind of, called an Olivetti Programma 101. It was a kind of supercalculator. It was probably a foot and a half square, and about maybe eight inches tall. It would add, subtract, multiply, and divide, but it would remember a sequence of these things, and it would record that sequence on a magnetic card, a magnetic strip that was about a foot long and two inches wide. So you could write a sequence, a programming sequence, and load it in there, and then if you would – the Lunar Module high-gain antenna was not very smart, it didn't know where Earth was. [...] We would have to run four separate programs on this Programma 101 [...]
The P101 is mentioned as part of the system used by the US Air Force to compute coordinates for ground-directed bombing of B-52 Stratofortress targets during the Vietnam War.

## Simulators

Many simulators for the Programma 101's function have developed over the years:
* 1976 - Translator to map Programma 101 code to BASIC was written by Steven DeRose at The Prairie School, used to teach programming before students moved on to BASIC
* 1995 – Programma 101 simulator written by E.H. Dooijes of the University of Amsterdam for the local Computer Museum in Turbo Pascal (only worked in batch mode)
* 2005 – Simulator written by Eng. Claudio Larini, which had some contact with Gastone Garziera, another of the P101 engineers
* 2016 – simulator of the Programma 101 developed at the Department of Information Engineering and Electrical Engineering of University of Cassino, supervision of Eng. Giovanni De Sandre
* The Tecnologicamente Museum in Ivrea has a Java simulator of the Programma 101 written by Giuliano Gaiti, one of Perotto's collaborators.
* The former Olivetti employee Marco Galeotti created a full integrated development environment (IDE) for the Programma 101, which allows for a simpler programming and some debug functions.