[Hosted by Floodgap Systems]

The WorkSlate WorkSpace @ Floodgap Retrobits

Convergent Technologies, founded in Silicon Valley in 1979, made their mark on the market by building workstations and midrange machines for everyone else, preferring to be the OEM of choice rather than market their own hardware to customers directly. But in 1983, the Advanced Information Products division unveiled Convergent's only consumer product, the Convergent Technologies WorkSlate: a portable machine where instead of everything being a BASIC program, everything instead is a spreadsheet. Despite this unusual limitation, it's possible, even if not necessarily practical, to do many general-purpose computing tasks with it. If you're as crazy as I am, then this is your webpage.

Last updated 3 September 2024.

Are you getting rid of Convergent Technologies equipment or peripherals? Please don't throw it away! E-mail me and let's see if we can give it a new home! Let me know your desired arrangements, and it goes without saying that I will gladly cover any shipping, time and inconvenience.

[Portrait of the WorkSlate.]

What's a WorkSlate? What happened to it?

The WorkSlate is a handheld slab portable computer intended as an executive companion. It has built-in ROM support for a calculator, terminal program and an extensive spreadsheet based substantially on Microsoft Multiplan, along with special functions for date-and-time alarms, telecommunications and primitive charting, but no other programming capabilities. A 300bps modem and microcassette deck under computer control are built-in. It was intentionally dimensioned to the length and width of a US Letter size page (8.5" x 11" or 215.9 by 279.4 mm), measuring 1" thick. Without batteries installed it weighs 1175g, or about two pounds and 9.5 ounces. It was produced for a short seven months and no more than 67,000 units could have ever existed based on known PCB production volumes, though the number that were fully assembled and sold was likely only a few thousand total and they exist in very small numbers today.

The WorkSlate was the only released model from Convergent's planned "Ultra" line of consumer portables and its only product sold directly at retail under its own name. Convergent had developed a hard-charging reputation in the very early 1980s for producing advanced workstation and midrange systems for sale by partner companies. For example, their 8086-based IWS and AWS systems were widely rebadged, particularly by Burroughs (one of the ancestors of Unisys), who sold them as part of the Burroughs B20 line. Some of these systems could run MS-DOS but were primarily intended to run CTOS, Convergent's custom modular multitasking operating system (which Burroughs rebadged as BTOS). They also produced multiuser systems such as the MegaFrame and MiniFrame, which ran Convergent's UNIX derivative, CTIX. Convergent started exploring the portables market in 1982 but their customary partners were not interested in Ultra, and Convergent management decided to try selling it themselves.

The first Ultra unit, what would become the WorkSlate, was targetted to executives who were regarded as likely buyers. From multiple focus groups in New York City, Chicago and San Francisco emerged the idea of making spreadsheets the central interface, since this would be most familiar to an audience unfamiliar with or uninterested in programming. A microcassette deck capable of dictation and built-in telecommunication support (with a 300bps modem, speakerphone and automatic dialer) were added, plus a real-time clock with multiple alarms.

The unit was first sold exclusively through the American Express Christmas 1983 catalogue for $895 (in 2024 about $2800) alongside a battery-powered printer/plotter called the MicroPrinter. In November it hit national retail through ComputerLand and Businessland stores and in January 1984 Convergent introduced a second peripheral, a combination serial/parallel port expansion box called the CommPort. However, initial demand for the WorkSlate was so large and manufacturing costs so high that Convergent quickly increased the base price to $1195 ($3600) in spring 1984. This, plus the wildly successful introduction of competing portables like the TRS-80 Model 100, rapidly eroded sales. Convergent cancelled further systems in the Ultra line, paused production of the WorkSlate in July and subsequently terminated it completely, provoking a lawsuit from OEM partner Oki and requiring deep discounts to as low as $300 in liquidation to sell remaining stock. The company eventually took an $8.4 million ($25.5m) loss as a result.

Convergent never sold another consumer product again. The company was further damaged by similarly poor sales of the 7300 UNIX PC, manufactured for AT&T under contract in 1985 based on their MiniFrame 68K system; only 10,000 of the 50,000 units Convergent made were ever sold. After an attempt to enter the networking market by buying out 3Com failed in 1986, they were eventually acquired by Unisys (the successor of their former partner Burroughs) in 1988.

What's inside the WorkSlate?

There is only one known version of the WorkSlate (model WK-100). Its primary CPU is an 8-bit Hitachi HD63B03RF, an enhanced version of the Motorola 6803 microcontroller and a member of the Motorola 6800 family (not the 6809). The 6303 has the additional instructions introduced in the 6801 plus a faster multiplication instruction, additional memory-to-memory operations, power saving instructions and a register swap instruction, plus a standby mode and the ability to trap illegal or undefined opcodes. It contains 128 bytes of internal RAM and uses external ROM, and has an on-chip timer and 13 GPIO pins divided into a 5-pin serial port (used for modem, peripheral and tape data) and an 8-pin port (for modem control lines and ROM banking). Its nominal clock speed is 1.2288MHz (from a 4.9152MHz crystal), but in practice it is usually in a power-saving mode between keystrokes where its effective clock speed is as low as 125kHz. All I/O is memory mapped into its 64K addressing range, though the registers for its ports and its 128 bytes of built-in RAM are provided on-chip.

The WorkSlate contains 16K of RAM, but about 4K of it is dedicated as a system work area and for screen memory. The screen memory is read directly by its HD61830 LCD controller which uses a small sidecar ROM containing 6x8 glyphs to draw the screen. The non-backlit LCD screen is 46x16 characters and 276x128 gapless pixels, but the firmware does not support running the LCD as a traditional bitmap display. The WorkSlate contains 64K of ROM in two 32K 23256-type ROMs, bankswitched separately into the upper 32K of the 6303's address space. It is possible to expand the WorkSlate to 32K of RAM and 96K of ROM, and the hardware directly supports this likely as a holdover from plans for other Ultra systems, but no WorkSlate ever shipped with either configuration. Only one version of the system ROMs is known. [Default view of the WorkSlate spreadsheet.]

How do you use the WorkSlate? (Related: What batteries do I need?)

The WorkSlate was intended for people unfamiliar with computers, and as a result uses a custom keyboard and on-screen menus since it was never meant to act like a contemporary PC. The unit comes up into a display resembling Microsoft Multiplan, which is the spreadsheet it is most similar to due to Microsoft licensing it to Convergent in 1982 to develop a CTOS port.

The system can be powered by a 6 volt AC adapter (tip negative, 5.5mm barrel jack) sold as the WK-102 -- check the adaptor's voltage before using it, they were poorly made and may be no longer in spec -- or by four AA (LR6) batteries or a 4-cell NiCad pack, which came with the system and can be charged by the adapter. Alkaline batteries can run the system continuously up to ten hours, and two optional lithium coin cell backup batteries (186 or LR43) will maintain the contents of memory for roughly a week. System power is controlled by the On/Off button, while the dial on the left side of the system adjusts screen contrast. (See later on in this document for if the screen is not showing anything.)

Function keys have either yellow or green labels. A yellow label on a key indicates a function accessible by pressing that key alone. A green label on a key indicates a function or character accessible by holding the green Special key and pressing it. Many typographical characters can only be accessed by Special key combinations. Several typical keys have been renamed for clarity: Escape is called Cancel, and Enter/Return is called Do It. Cursor control is done using a diamond pad.

The five function keys under the screen serve a dual purpose. When a menu is open, such as by pressing the Options key at the lower left, they select the menu option above them. The Options key opens a global system menu which can be paged through by pressing it repeatedly or closed by pressing Cancel. When there is no menu open, or when the Special key is held down, pressing the function keys open the special menu marked next to them in green (in the case of Calc, the Calculator desk accessory).

The WorkSlate can support up to 128x128 (128 rows, 128 columns labeled A-Z and AA-DX) cells in each sheet limited by available memory; the percentage of memory remaining is shown in the top status row near the date and time. The Worksheet key brings up a menu with the five sheet slots supported by the firmware. The first two, by default called "empty," are general sheets; the last three are generated for you on first access and give you a primitive memopad for either entry of text data into large cells or recording voice memos; a phone list; or a calendar. In each of these modes the appropriate menu is automatically shown to control the tape deck, dial the phone or set the clock or a datebook alarm, or those menus can be manually entered via the function keys as described above.

In addition to the Calculator desk accessory, the WorkSlate has a Terminal desk accessory that acts like a dummy terminal (with some support for Device Control characters). I refer to these as "desk accessories" because you can still move around in the current sheet and, with the CHANGE option under the Options global menu, continue to work in the current sheet. The Calculator is accessed by the Calc function key; the Terminal is accessed by the Terminal option under the Phone menu. If you have a peripheral connected and powered on, the WorkSlate will open a Terminal connection to that device instead of through the modem. You can send and receive data over the Terminal, or exit it by pressing Hang Up (serial connections via the GPIO port are not terminated, just phone connections). If you need to enter control characters in the Terminal, press Special-C, and then press the key (for example, to send ^Z, press Special-C, release the keys, and then press Z).

See below for how formulas work and the special functions that can be used to do limited programming on the WorkSlate.

[Portrait of the MicroPrinter.]

What can you connect to a WorkSlate?

The WorkSlate has several ports. On the right side are microphone and earphone ports for the microcassette deck, if you choose not to use the built-in mic and speaker. They use regular 1/8" mono jacks. They only work for voice recording, not data recording; it is only possible to record voice or data, not both, to one side of a microcassette tape.

On the top are four ports. The AC adapter connects to the barrel jack. The two RJ-11 phone jacks are for connecting an analogue phone line and an optional telephone handset, which can be used in place of the speakerphone. You can connect either one to either jack. The hardware supports pulse and tone dialing and the speakerphone and modem will dial out through these jacks.

The other top port is the GPIO port, labeled "Peripherals." This uses an 8-conductor cable that resembles RJ-45 but an RJ-45 connector will not fit. The GPIO port carries power and data, allowing the WorkSlate and a connected device to share a power source. With the GPIO port connected, the A/C adapter, if you are using it, can be connected to either the peripheral or the WorkSlate to power both. Only one device can be connected at a time, and only two devices were ever commercially made for this port:

You can also connect another WorkSlate using the GPIO cable directly and each unit will detect the other. They will share power like any other connected device. [Building a cable for the WorkSlate GPIO port.

I don't have a CommPort. Can I connect the WorkSlate to my computer? (Related: I lost the GPIO cable!)

The CommPort was introduced later in the WorkSlate's lifetime and is comparatively rare. Fortunately there are alternatives.

If you have a modem, and many modern USB modems will generally work, you can connect your WorkSlate to your computer's modem using RJ-11 phone wiring. This requires whistling or playing back a signal tone into the speakerphone; see this YouTube video for an example of the audio. Because this method uses the internal modem, the connection is limited to 300bps. Use ASCII transfers and XON/XOFF flow control in your Terminal program.

A faster means is to connect your computer to the GPIO port and exchange data directly. In this mode you are limited to 9600bps, 8N1 and there is no hardware flow control, but this is still more than sufficient for most tasks.

The jack is 8P8C, but will not admit an RJ-45 or Ethernet cable, as these are too wide. (Likewise, the GPIO cables cannot be used in an RJ-45 jack because they have a small plastic flange acting as a lockout.) Sandman sells a telecom banjo set with a special narrow "universal modular" cable (part #TOO6G) that is the right width, but requires also machining out a key divot. The necessary modification is shown at right: use a Dremel or similar rotary tool at medium RPM and remove about a millimeter or two-thick strip of plastic on the bottom left corner (looking at the cable head on), back to a parallel point just past the wide part of the lock snag. The lockout flange is not necessary and this only needs to be done on one side of the connector for the WorkSlate (the other connector does not need to be modified). To verify your connection, once the cable fits into the WorkSlate (do not force it; it should enter easily and lock if you've removed enough) connect it to the banjo, power on the WorkSlate and check for 6V on pins 1 (ground) and 2 (power). When the proper voltage is confirmed, using alligator clip jumpers or similar, connect pin 1 to ground, pin 4 to receive and pin 5 to transmit on a TTL-to-RS232 adapter (any of the USB-TTL converters work fine if they can accept 5V) and connect it to your computer. Do not connect pin 2 or pin 8, as they carry up to six volts, and do not connect any GPIO pins to 3V3 electronics.

In your terminal program, set up ASCII transfers and XON/XOFF flow control. To enter the Terminal, start the Terminal on the WorkSlate side and then immediately send a linefeed (e.g., press ENTER/RETURN) on your computer within three seconds. The Terminal will open. A recommended command line for Linux or macOS hosts using picocom (available in most package managers and Homebrew) is picocom -b9600 /path/to/your/serial/port --send-cmd "ascii-xfr -snv -c3" --receive-cmd "ascii-xfr -rnv" (adjust accordingly for other terminal programs like minicom). If you don't have ascii-xfr, it is often included with minicom. The ascii-xfr options preserve line feeds and, on uploads to the WorkSlate, use a three-millisecond intercharacter delay to prevent overruns. While this diminishes the effective upload speed to roughly 2400bps, it also makes sending sheets to the WorkSlate much more reliable.

If you need a GPIO cable to actually connect a real device, you need to wire the replacement cable straight-thru except pins 4 and 5, which are swapped. Although only pins 1, 2, 4, 5 and 8 are known to be active, the GPIO cables sold by Convergent had all lines wired. If you prefer not to build or crimp your own, you can most easily simulate it with two narrow universal modular cables like the one above. Machine out one end of each cable as described above and make sure they fit the WorkSlate and the device. If you have two banjos, you can use alligator clips to connect each line (1 to 1, 2 to 2, etc.), ensuring you connect 4 to 5 and 5 to 4. Alternatively, you could use two modular-to-DE-9 ("DB-9") connectors, one male and one female, and do the 4-5 and 5-4 swap on one side only (not both since it will undo the swap). Then plug the modular serial converters into each other and connect the non-modified plug from each cable into each side.

How do values and formulas work in the spreadsheet?

The spreadsheet supports three primitive types, namely numbers, strings and formulas. Numbers are always floating point, even whole integer quantities. The internal representation is similar to IEEE 754 double precision in range and accuracy. Dates and times are special representations of numbers and support limited math. Formulas are limited to 108 characters or less, and all cells are limited to 128 characters or less.

During entry, you can simply type in a string or number and the WorkSlate will assign it an appropriate type. By default numbers are right justified and strings are left justified. It is not possible to enter a number as a string, but by changing the justification it's possible to make it look like a string. This is accessed from Options-FORMAT along with other cell formatting options such as rounding and overlapping multiple cells.

If a cell is not wide enough to hold its contents, it will be replaced with # characters and an error may be shown on the top status row, but its contents are not erased. Width, except for cells marked as overlapping, is per column. By default column A has a width of 13 and all others have a width of 9. This can be changed from Options-WIDTH.

Dates are accepted in M(M)/D(D)/(YY)YY format and times as 12-hour (H)H:MM followed by am or pm. If the century is omitted, then the 20th century is assumed (i.e., 19YY). Dates from 1/1/0001 to 12/31/9999 can be accurately represented internally, and leap year logic is correct, though all dates are treated as Gregorian. However, a bug makes it impossible to enter years ending in 00: entering 1/1/2000 comes out as 1/1/20, and 1/1/1900 comes out as 1/1/19.

Like Multiplan, formulas start with an equals sign (=). Math operators and parentheses are supported, except that for multiplication and division the WorkSlate uses "proper" × and ÷ symbols instead of * and /. Similarly, inequality is expressed with ≠, not != or <>. Other cells are referred to with A1 references (such as B1, AA5, etc.), not Multiplan R1C1 references, e.g. =(A2+35)÷A6. Cell ranges use VisiCalc's three-dot operator, e.g. A1...C3. If you cut and paste a formula with references to another part of the sheet, they will be adjusted relative to the new location unless you make them absolute by prepending the cell reference with an @. If a cell is used in a number expression that is not a number, its value is treated as zero.

An expression generally consists of any number of constants or cell references and/or the result of built-in function operations or arithmetic operators upon them. Boolean expressions such as (A1>5) may be used in conditional expressions and Boolean logic, but can only be performed on numbers. String comparisons, although they are accepted and don't cause an error, will never evaluate to true.

If a circular reference (a formula referring to the result of a formula referring back to this formula) is encountered, an error will occur, but the WorkSlate will work the formulas for three iterations total to see if the values will settle. This is not adjustable, though you can manually force further recalculation with Special-Recalc (the N key).

Here are tables of all the built-in functions, divided into three groups (Standard, Time Management and Communications). Although these appear in the WorkSlate Reference Guide, the Reference Guide is very terse and is missing important parts of their syntax. Everything listed here was tested and verified on two WorkSlates for comparison.

Standard Functions
These work generally anywhere, and have no specific side-effect with their use.

Abs(expression) Return the absolute value of the number expression.
And(Boolean list) Return the Boolean value True if all elements in the list are true, or otherwise False.
Average(list of expressions) Given a list of expressions, return the average. Mixed constructs like =Average(A1,B1...C12,47.2) are valid.
Count(list of expressions) Counts the number of expressions in the list given that evaluate to a number, date or time. Mixed constructs like =Count(A1,B1...C12,47.2) are valid, though not highly useful for constants, since numeric (date, time) constants will always count and string constants never will.
Decline(periods,percent rate,book value,salvage value,period number) Compute a declining balance depreciation value over the given number of periods, percentage rate per period, book value and salvage value at the specified period number (typically period is a year), which may be expressions. Percentage rate is out of 100 (not out of 1). To examine depreciation value at mulitple points, use multiple formulas in multiple cells with different period numbers.
False The Boolean constant for a false comparison. It is a constant, not a function, and does not take arguments.
FutrValu(periods,percent rate,present value,payment) Compute the future value of a loan after the given number of periods, percentage rate per period, present value and payment per period (typically period is a year), which may be expressions. Percentage rate is out of 100 (not out of 1).
If(Boolean expression,then value[, false value]) Evaluate the given Boolean expression, which may also be one of the constants True or False or a combination of comparisons with And(), Not() and/or Or(), and then if true return the then-value. If the false-value is given, return that if the expression is not true; if the false-value is not given, return a blank cell if the expression is not true. The then- and false-values may be number expressions, quoted strings, or another If() expression to chain comparisons.
Index(range,expression[,expression]) Given the specified range of cells, return the cell indexed by the first expression, and if the cell range is two-dimensional (i.e., not just a single column or row), subindexed by the second. If you include the second argument for a one-dimensional range, you will get an error. In a two-dimensional range, the first argument is the row and the second is the column (i.e., (Y,X) coordinates).
Int(expression) Returns the value of the number expression with any decimal portion truncated.
IsNA(cell reference) Acts as a Boolean expression and is valid in If() statements. If the cell evaluates to a valid number (which includes dates and times, or formulas that evaluate to numbers, dates or times), return True. Otherwise, return False. Blank cells, strings and formulas that evaluate to blank cells or strings return False.
IsErr(cell reference) Acts as a Boolean expression and is valid in If() statements. If the formula in that cell evaluated to an error (such as divide by zero), return True. Otherwise, return False.
Line("character",expression) Repeat the given character (or the first character in the string, if more than one character) by the expression given. Used for simple charts and returns a string. If character is actually a number or cell reference, a garbage character is used. The expression is treated like an unsigned value. If the expression is greater than 128 (or, by extension, less than 1), it is truncated to 128. If character is the null string (""), or the expression evaluates to zero, then nothing appears.
LookUp(expression,range) Given a table defined by the specific range, which may be two-dimensional, find either the value of the expression or the nearest lowest value to it. Tables that are squares or longer than wide are searched vertically first, while tables that are wider than long are searched horizontally first, and then in the other direction.
Max(list of expressions) Given a list of expressions, return the highest value present. Mixed constructs like =Max(A1,B2...B6,35) are valid.
Min(list of expressions) Given a list of expressions, return the lowest value present. Mixed constructs like =Min(A1,B2...B6,35) are valid.
Mod(expression, expression) Return the remainder of the first expression divided by the second.
Not(Boolean expression) Invert the result of the Boolean expression (i.e., True to False and False to True).
NPV(percent rate,list of expressions) Given a list of expressions representing a series of periodic future receipts, compute the series' net present value at the given discount rate. Mixed constructs are valid. Percentage rate is out of 100 (not out of 1).
Or(Boolean list) Return the Boolean value True if any element in the list is true, or otherwise False.
Payment(periods,percent rate,present value,future value) Compute the payment amount on a loan given the number of periods, percentage rate, present value and future value (typically period is a year), which may be expressions. Percentage value is out of 100 (not out of 1).
Power(expression,expression) Return the value of the first expression to the power of the second. The exponent is rounded to the closest integer in terms of Round() (q.v.), so you can't get a square root this way, but negative exponents are valid.
PresValu(periods,percent rate,future value,payment) Compute the present value of a loan with the given number of periods, percentage rate per period, present value and payment per period (typically period is a year), which may be expressions. Percentage rate is out of 100 (not out of 1).
Round(expression[,expression]) Return the first expression rounded to the number of decimal places given by the second, or no decimal places (i.e., an integer) if not specified. This uses rounding half up (so 23.5 is rounded to 24, and -23.5 is rounded to -23).
Straight(periods,book value,salvage value) Compute the straight-line depreciation of an asset given its book and salvage value after the given number of periods (typically period is a year), which may be expressions.
SumYears(periods,book value,salvage value,period number) Compute the sum-of-the-years'-digits depreciation on an asset given the number of periods and book and salvage value at the given period number (typically period is a year), which may be expressions. To examine depreciation value at mulitple points, use multiple formulas in multiple cells with different period numbers.
Total(list of expressions) Given a list of expressions, return the total. Mixed constructs like =Total(A1,B1...C12,47.2) are valid.
True The Boolean constant for a true comparison. It is a constant, not a function, and does not take arguments.

Time Management Functions
These work generally anywhere, but may use the real-time clock or set alarms.

Alarm(date,time) Sets an alarm for the specified date and time. This is the same built-in function used by the Calendar sheet. You must specify both a date and time; you cannot have a recurring alarm at the same time every day. The date and time must both be constants and cannot be expressions or the result of a formula. A bell character appears in the cell. If this function is "added" to a quoted string (e.g., ="One minute mark"+Alarm(9/26/83,8:01am)), the string is used as the label for the cell and in the status row when the alarm is hit. The string cannot be a cell reference or an expression that evaluates to a string. When the alarm triggers, the WorkSlate turns on (if not on already), beeps and flashes the message in the status bar until you press Cancel. The number of alarms is limited only by memory.
Date(0) Returns the current system date (as shown in the status row) at the time the spreadsheet was last recalculated.
Time(0) Returns the current system time (as shown in the status row) at the time the spreadsheet was last recalculated. Seconds are not returned.

Communications Functions

Functions in this list are deferred and do not execute when entered (however, any strings or other functions they are added to are immediately evaluated). In mathematical operations they always evaluate to zero on recalculation. Formulas using communications functions must be manually started by going to the cell and pressing Special-Do It. Most functions cause a key icon to appear in the cell as a marker; see list for exceptions.

Except for GoTo(), these functions generally require or may attempt to establish an active Terminal connection, either through the GPIO port or the built-in modem. If you are connecting your WorkSlate to another WorkSlate, either via modem or the GPIO port, this will "just work." If you are connecting your WorkSlate to a computer directly via the GPIO port, your computer or script should respond to an ENQ (ASCII 5, ^E) character sent by the WorkSlate with a line feed (ASCII 10, ^J) within three seconds, or the WorkSlate will conclude nothing is connected and execution will stop.

In general these were the least well tested functions in the WorkSlate and have several critical bugs.

Delay(expression) Wait the specified number of seconds, between 1 and 256. Yes, this will try to establish a connection too even though it doesn't do anything but wait.
Dial("number"[,Data]) Dial the given string of digits. This is the same built-in function used by the Phone List sheet. The string must be a quoted constant string and cannot be a cell reference or an expression that evaluates to a string. Pulse or touch tone dialing is configured from Options-SET UP. Non-numeric characters like "*" and "#" can appear, and are dialed, while others are ignored. The special ,Data tag tells the dialer to treat the call as a data call; otherwise a voice call is made, using either a connected handset or the speakerphone. A telephone receiver icon appears in the cell. This function only uses the modem and does not establish connections via the GPIO port. If a dial tone is not received within three seconds, the WorkSlate will conclude a phone line has not been connected and execution will stop.
GoTo(cell reference) Moves the active cell pointer to the given cell reference. This is how more complex login scripts can be implemented. This example, modified from the manual, will dial a number, log on, enter a password, wait for a prompt and send a command, then hang up. As written it will do so at the specified date and time, but it can also be started at any time by going to cell A2 and pressing Special-Do It.
A1="Wake Up"+Alarm(9/5/2024,1:00am)+GoTo(A2)
A2="LOGIN"+Dial("5551212",Data)+GoTo(A3)
A3=Delay(2)+WaitFor("ENTER ID: ")+GoTo(A4)
A4=Send("JOECR")+GoTo(A5)
A5=WaitFor("ENTER PASSWORD: ")+GoTo(A6)
A6=Send("793AZY702CR")+GoTo(A7)
A7=WaitFor("! ")+GoTo(A8)
A8=Send("START PROGRAMCR")+GoTo(A9)
A9=HangUp(0)
The CR is a graphics character representing a carriage return. It and other control characters like line feeds can be entered in a formula using Options-CHANGE and selecting Control. It is translated to a literal carriage return on execution.

It is possible to use GoTo() in a loop, but that usually isn't very practical, because doing so doesn't force any kind of recalculation or iteration other than running other communications functions again.

HangUp(0) Disconnect the current Terminal session, regardless of source, as if the Hang Up menu option had been selected (if connected by phone, the modem is commanded to hang up; if connected by the GPIO port, the Terminal desk accessory is closed but the connection remains available).
Keep(range,start line,start column,line width) This function has critical bugs. If space-delimited, CRLF separated ASCII text is received, attempt to parse it starting from the given line number starting at the given character position for the number of characters in the line width. This function will continue to process all data received in the same way until the Cancel key is pressed or it times out after 90 seconds. This may make it unsuitable for interactive use.

However, if the connected system sends formatted spreadsheet data instead of plain text, the entire contents of the current sheet regardless of the range will be replaced, including any currently executing script or formula and causing data loss. The incoming sheet is filtered for formulas; only strings and numbers are inserted.

Send("string") Sends the string to the remote system. The string must be a quoted constant string and cannot be a cell reference or an expression that evaluates to a string.
SheetIn(0) This function will crash the WorkSlate and all data will be lost. Do not use. Its documented use is to replace the current worksheet with one received from the remote system. The receive operation will complete, but the machine will immediately crash and power off. On powering the system back up, all memory will be cleared.
SheetOut(0) Sends the current worksheet to the remote system (see how to load and save sheets below).
WaitFor("string") Waits for the given string until the Cancel key is pressed or it times out after 90 seconds. The string must be a quoted constant string and cannot be a cell reference or an expression that evaluates to a string.

How do I exchange sheets with another computer or another WorkSlate?

Once you have the systems connected (see notes above), the Terminal has Send and Receive options accessed by the function key menu while the Terminal is live.

On a pair of real WorkSlates, start the Receive process on the receiving machine and select the destination sheet. When the display shows the receiving WorkSlate is ready and waiting, start the Send process on the sending WorkSlate and select the sheet to send. Flow control is handled automatically and the operation will terminate after all rows in the spreadsheet are sent.

On a connected computer, either via modem or (recommended) the GPIO port:

Help! My microcassette drive doesn't work!

Failures in the microcassette drive are the most common defect in surviving WorkSlates. They are difficult to repair, and can be worked around by using a serial connection to load and save worksheets. However, you will not be able to use any of the voice dictation features or record or playback audio.

Typical failures include the eject button failing to open the tape door (or requiring substantial force), usually due to a small pin controlling the head fracturing; failure to read tapes (the WorkSlate may turn the tape reels but then indicate the tape is empty or has no data), often also due to a malfunctioning head; or failure to run the tape motor. One potential repair for the head is in this YouTube video, but requires technical expertise and the ability to machine and install a small part.

Help! The screen doesn't turn on!

If you pressed the On/Off key and nothing happened, make sure you have the correct polarity on the A/C adapter (it's negative tip, unlike many A/C adapters) and good main batteries. You don't need the backup batteries installed. Assuming those are correct, next make sure that the contrast is properly adjusted. This is the dial on the left side of the computer (with the keyboard up). Consider pressing On/Off a few times just in case the contact is dirty.

If you pressed the On/Off key and the tape drive made a noise, but there's still nothing on the screen, the electronics are likely okay and the issue is the LCD. First verify the contrast setting. A second recommendation is to wait a few minutes; some LCDs have become defective and only work properly after power has been applied, sometimes taking many minutes to "warm up." If you see faint shapes on the screen after a minute or two, try powering it down and back up again, waiting a couple more minutes, and repeating. While this will still need the LCD to be replaced eventually, this may allow you to still use the machine.

The sealing on the LCD is generally excellent, but if your WorkSlate has a completely dark screen even with the power disconnected, then the crystals have dehydrated and there is no other alternative but to replace it. Remainder panels have turned up on eBay from time to time.

Help! I removed the stand on the bottom and it snapped putting it back in!

There is no need to remove the stand; the battery compartments and even the screws to open the case are accessible without taking it off. If you did this accidentally and it broke, as many of them do, high strength cyanoacrylate such as light-cured JBWeld will repair it. The part is under tension, so don't use the cheap stuff.

How can I write my own sheets from my own computer?

You can "cross-assemble" cell data into a sheet you can upload to your WorkSlate using the WorkSlate Spreadsheet Crossassembler tool, which is written in Perl and should run anywhere Perl does. It will take a text file (see the Github project for the format) and emit a sheet with the proper control characters and header lines that can be directly sent using the process above.

Where can I find out more about the WorkSlate?

For a discussion of the sample programs that come with WSSC, plus some additional photography, see the original blog post.

Bitsavers has a partial copy of the service manual and the original WorkSlate press release.


Cameron Kaiser