Skip to content
Tech News
← Back to articles

VisiCalc Reconstructed

read original more articles
Why This Matters

VisiCalc revolutionized the tech industry by popularizing the spreadsheet paradigm, laying the foundation for modern data analysis and business tools. Rebuilding a minimal version highlights the core principles that continue to influence user experience and software design today, emphasizing the importance of simplicity and usability for consumers and developers alike.

Key Takeaways

VisiCalc reconstructed

VisiCalc

Spreadsheets rule the world for almost half of a century. I strongly believe that it’s one of the best UXs ever created. Being fairly minimal and easy to learn, it allows users to quickly manipulate data, describe logic, visualise results, or even create art and run GameBoy games.

It all started in 1979 when Dan Bricklin and Bob Frankston created VisiCalc, the first spreadsheet software. With a few thousand lines of hand-written 6502 assembly, VisiCalc could successfully run on 16K RAM machines. It quickly became a “killer app” for Apple ][, selling over 1 million copies and turning early personal computers into serious business tools.

I thought it would be an interesting exercise trying to rebuild minimal VisiCalc clone from scratch. All we need is a data model, formula evaluator, and a simple UI to display the cells. At the end we’ll have something like this:

Cells

Like almost everything in life, a spreadsheet is made of cells. Each cell can contain a value, a formula, or be empty. Values can be numbers or text. Formulas are basic mathematical expressions that can reference other cells. You all know it from Excel, but in VisiCalc formula prefix was usually + instead of = , for example +A1+A2*B1 is a formula, while A1 is a text value.

#define MAXIN 128 // max cell input length enum { EMPTY , NUM , LABEL , FORMULA }; // cell types struct cell { int type ; float val ; char text [ MAXIN ]; // raw user input };

This should be sufficient to represent the cells in our spreadsheet. A spreadsheet itself is a grid of cells. Excel has limits of 1,048,576 rows and 16,384 columns, VisiCalc had 256 rows and 64 columns. We can start even smaller:

#define NCOL 26 // max number of columns (A..Z) #define NROW 50 // max number of rows struct grid { struct cell cells [ NCOL ][ NROW ]; };

... continue reading