Description:
BACKGROUND OF THE INVENTION
This invention relates to typewriters and more particularly to a typewriter system including a typewriter, recording media and control means therefor.
Many different automatic and revision typewriters have been developed over the years. All of these products have had one thing in common. They were designed for either light-duty word processing applications, such as those found in general correspondence typing, or for heavy-duty word processing applications, such as the preparation of manuals, extensive reports, legal briefs and patent applications, for example.
Light-duty word processing applications mainly consist of the frequent preparation of documents that are generally no longer than one, two or at the most three pages. Here, a good portion of the operator's time is spent inserting and removing paper, loading and unloading the recording media, and setting tabs and margins before the document is recorded and when the document is played back. The completion of the rough draft usually indicates that the document is one step away from completion.
Heavy-duty word processing applications are different from light-weight applications in that the documents that are being prepared usually consist of more than two or three pages and that the completion of the rough draft does not indicate that the letter-perfect copy is only one step away, but that only the first step has been completed. Extensive text editing including insertions and deletions of text almost always follows.
Because of the diverse nature of these requirements it has heretofore been considered not passible to develop a word processing typewriter that enables an operator quickly and conveniently to record short but frequent documents, and also enables an operator to accomplish the heavy text editing requirements as well.
BRIEF SUMMARY OF THE INVENTION
It is an object of the present invention to provide a typewriter system ideally suited for light word processing requirements because of several important features. For instance, tabs and margins can be learned and recorded as part of the rough draft, so that when a document is later played back, the tabs and margins are automatically reset. Also, as the rough draft is being recorded, the operations of centering headings, tabulating columns of numbers, or even indenting sections of the text can be performed automatically.
It is another object of the present invention to provide a typewriter system ideally suited for heavy-duty word processing applications. Primarily this is made possible by an ability to search to any line in a document to make extensive text editing, for the first time, really practical on something less than a large-scale computer terminal. Also, an encompassing repertoire of page control commands makes the use of continuous form paper not only practical, but desirable for many lengthy and repetitive applications.
These and other objects of the invention are accomplished, in one aspect of the invention, by providing a line searching typewriter system capable of indexing to a desired line solely by reference to the alpha-numeric symbols thereof. The system comprises a keyboard with a plurality of symbol printing keys providing alpha-numeric printing signals, line end signal means providing line end signals, and search function means providing a search signal. The system further provides type means having a plurality of corresponding alpha-numeric printing symbols, the type means being operable in response to the printing signals to print the symbols in a line, and a platen rotatable to provide for printing a plurality of lines of symbols; recording means for recording the symbol and line signals; and control logic means responsive to the search function signal and the alpha-numeric symbol printing signals upon printing at least a portion of the symbols of a desired line to index the recording means to the desired line solely by reference to its symbols. The line is then available to control operation of the type means to print the line of symbols.
In another aspect of the invention, there is provided a column tabulating typewriter system capable of aligning a column of numbers with respect to the virtual decimal points (real or assumed) therein; the system comprises a keyboard with a plurality of symbol printing keys providing alpha-numeric and decimal point printing signals, instruction key means providing a tabulation instruction signal and a decimal point alignment instruction signal, and column setting means providing a signal for setting the desired position of the decimal points of the numbers. The system further comprises type means having a plurality of corresponding alpha-numeric and decimal point printing symbols; the symbol printing keys are initially operated to print the initial symbol of a number in alignment with the desired position. There is further provided recording means for recording the symbol signals, and control logic means responsive to the decimal point alignment signal, tabulation instruction signal, decimal point printing signal, and column setting signal, to record the symbol and decimal point signals on the recording means with the decimal point aligned with the desired position; the type means is operable in response to the recorded signals to print the numbers and decimal points so aligned.
In still another aspect of the invention, there is provided a line centering typewriter system capable of printing lines of symbols centered with respect to selected margins in response to uncentered input lines, comprising a keyboard with a plurality of symbol printing keys providing alpha-numeric printing signals and function keys providing function signals, line end signal means providing a line end signal defining a line, left and right margin setting means providing margin setting signals defining left and right margins, and centering key means providing a centering instruction signal. The system further comprises type means having a plurality of corresponding alpha-numeric printing symbols, the type means being operable in response to the printing and function signals; recording means for recording the symbol signals, line end signal and centering instruction signal; playback request means for initiating operation of said type means in response to said recorded symbol and function signals; storage means for storage of the recorded signals and the margin setting signals; and control logic means. The control logic means is responsive to the playback request means to transfer a line of recorded signals from the recording means to the storage means, and to the stored centering instruction signal and the stored line end signal to provide a count signal of the total spaces to be occupied by the line of symbols when typed; it is responsive to the count signal and the left and right margin setting signals to derive an initial positioning signal, and to the stored centering instruction signal, initial positioning signal and symbol and function signals to operate the type means to print the line of symbols centered with respect to the left and right margin settings.
Other objects, features and advantages will appear from the following description of a preferred embodiment of the invention, taken together with the attached drawings in which:
BRIEF DESCRIPTION OF THE DRAWINGS
FIG. 1 is an external view of the editing typewriter system of the invention;
FIG. 2 shows the keyboard of the editing typewriter system of FIG. 1;
FIG. 3 shows a portion of the keyboard in more detail;
FIG. 4 is a schematic view of the keyboard, control logic and recording means of the system;
FIG. 5 is a schematic view of the read only memory portion of the system;
FIG. 6 is a schematic view of the fields of a control word;
FIG. 7 is a schematic view of a portion of the control logic;
FIG. 8 is a schematic view of the storage means;
FIGS. 9 and 10 are flow charts illustrating the operation of the system; and
FIGS. 11 through 42 are a complete listing of the control words used in the embodiment hereof.
GENERAL DESCRIPTION
Referring to FIGS. 1 through 4, the editing typewriter system 11 of the invention includes a typewriter 10, which is in the present embodiment the typewriter manufactured by IBM under the trademark "Selectric" and described in various widely distributed IBM publications; control logic 100, to be described; and recording means in the form of a tape unit 12, shown schematically in more detail in FIG. 4, holding two conventional tape cassettes providing left tape 232 and right tape 234. The tapes are driven by tape drive units 236 and 238 respectively. Tape head 240 reads or writes onto tape 232; head 240 has two positions, in and out. The head must be in for reading and writing, and out for rewind and fast forward motions of tape 232, as well as for inserting and removing the cassette. Photocells 242 distinguish the clear leading portion of the tape from the opaque portion used for recording. Right tape 234 is provided with similar tape head 244 and photocells 246.
Power for editing typewriter 11 and tape drives 236 and 238 is controlled by on/off button 13.
Keyboard 14, shown in more detail in FIG. 2, includes the standard Selectric keyboard 16 providing alpha-numeric symbol printing keys and additional function keys and lights. On the left portion of keyboard 14 is a group of buttons and indicator lights chiefly related to the operation of tape unit 12. In the upper left corner are two interlocked pushbuttons 18 and 20 that select the left or right tapes (232, 234) in tape unit 12, respectively, to be operated on. Three interlocked pushbuttons 22, 24 and 26 select the Transfer, Play and Record modes respectively. In the Record mode, numerical values in the form of sequences of binary bits, associated with typed characters or functions, are recorded onto the tape selected by botton 18 or 20. In Play mode, numerical values previously recorded on the selected tape are used to control typewriter 10 and to cause it to type corresponding text. In Transfer mode, bit sequences previously recorded on one selected tape together with corrections are recorded onto the other tape.
Below these tape control buttons are three tape indicator lights 28 (Tape moving, for left tape 232), 30 (Record) and 32 (Tape Moving, for right tape 234). Below these lights is a slide switch 34 for selecting single or double block recording, and below switch 34 is a vertical row of tape control buttons 36 (Rewind) to rewind the selected tape, 38 (Forward) to wind the selected tape, and 40 (Reset). Reset button 40 is used to restore the status quo after certain erroneous entries, such as attempting to read or record when no tape is present.
To the right of buttons 36-40 are two buttons not controlling tape operations. Line Back button 42 will be discussed later. Code key 44 is used in combination with other keys to generate special numerical values, as will be explained in what follows.
To the right of Selectric keyboard 16 are pushbuttons and indicator lights related to the special playback and editing functions of the editing typewriter system 11 of the invention. In the upper right corner are three interlocked switches 46, 48 and 50, determining the mode of right margin control, which may be unaltered from the input (button 46, "Same"), adjusted within a selected range of spaces (button 48, "Adjust") or rightjustified by the insertion of spaces (button 50, "Justify"). Signal light 52 indicates the No Adjust mode; this light is on when a document is played back in the "No Adjust" mode, which will be explained, or when a document is played back in the "Adjust" mode and a recorded word is reached that, if played back, would start before the adjust zone and end after it.
Signal light 54 (End of Document) lights when an End of Document code is reached on the tape in the "Play", "Transfer", or "Search" mode; or when Memo (Out) button 66 is touched (or Code, Memo Out) and an EOD code is reached before the memo or format is found.
The pushbuttons 56, 58, 60 and 62 (vertical row) generate numerical values that are used to set an internal status register (D) as will be explained in what follows, and are used in cooperation with other control pushbuttons to play selected portions of recorded material, or to control the search procedure.
Auto Start key 64 is used to initiate playback of an entire recorded document. Memo (Out) key 66 is used to initiate playback of a selected portion of stored text, identified by a memo tag, without playing back other portions. Search key 68 generates a search function signal that is used to cause the typewriter to locate a specific portion of stored text. Skip key 70 is used to omit portions of recorded text during playback or transfer.
The editing typewriter of the invention further provides (FIG. 4) a control logic unit 100, which includes computation means in the form of a central processing unit 102, a read-only memory 104 containing control words, and storage means in the form of a memory 106 including a tape input buffer 230 (FIG. 8). The keys of keyboard 14, when depressed, operate the typewriter 10, and additionally generate printing and function signals in the form of numerical values called codes, uniquely representing the operations of the typewriter. The codes are input to control logic unit 100 and are used to determine the accessing of the control words within read-only memory 104; the control words in turn determine the operation of control logic 100 in storing the codes in memory 106, recording them on tape, or other operation of control logic 100 in storing the codes in memory 106, recording them on tape, or otherwise operating in response to them. Codes may also be input to control logic 100 from tape unit 12, and may be transmitted to typewriter 10 to direct its typing operations.
OPERATIONAL FEATURES
As text is typed, using the Record mode of the typewriter (set by depressing button 26), each line of typed text (including up to 100 characters) is temporarily stored in tape input buffer 230 of memory 106. When a carriage return is typed at the end of the line by depressing Return key 214, a line end signal is provided and the entire line is transferred from the buffer to one of the tapes. If there are fewer than 100 characters, "padding" characters are added to form a 100-character block. In Play mode, set by depressing button 24, recorded text is transferred from tape to buffer, one line at a time, and is played out. In Transfer mode, set by depressing button 22, recorded text is transferred from a first tape to the buffer 230, providing an opportunity to record changes and corrections in the text which is then transferred to a second tape.
The editing typewriter, by means of the tapes, tape buffer, and extra keys described, together with the normal Selectric keys, can be used to provide a variety of editing and playback functions. As each line is typed, before the carriage return key is depressed, corrections may be made within the line by backspacing to the error and either striking over it with the correct character, or depressing code key 44 followed by Xx key 212. This combination causes the incorrect character to be deleted. The remainder of the line need not be retyped, but may be merely spaced over to the end, where the carriage return key is struck. Alternatively, the entire line may be deleted using Line Back key 42.
If the text to be altered is in a previously recorded line, either the Line Back function or the Search function allows this text to be accessed for corrections in the same manner.
Insertions or deletions may be made during playback of recorded text using Play button 24 or Skip key 70, together with Paragraph, Line, Word and Character keys 56, 58, 60 and 62. Using two tapes, these keys may be used to produce a corrected tape by transferring correct portions from the first tape to the second, deleting, inserting or correcting during the transfer. This may be accomplished with or without playing out the entire recorded text.
Lines to be centered in the played back text are recorded with an initial Center code but without centering the line, providing an uncentered inpput line. The line will be automatically centered in the played back text, with respect to the margins then set. The margins need not be those in use when the centered line was recorded in uncentered form.
During playback of recorded text, the right margin may be changed from its position during recording. Using the Adjust feature of the editing typewriter, the lines of played back text will be altered to conform to the new margin. The Adjust feature also permits the user to select the size of a region within which all lines should end. The playback of text will then be interrupted whenever a word cannot be ended within this region; the user then plays out the word character by character, inserting a hyphen or carriage return and line feed where desired. The remaining text is then automatically played back.
The recorded text may be made to conform exactly to a right margin, using the Justify mode. In this mode, spaces are inserted automatically between words to cause each line of text to end at the margin.
The selection of tab stops and right margin, with the adjust zone, may be recorded on tape with the text for later use. In addition, the tab stop settings may be used, with the No Adjust and Required Tab features, to enable a user to type in decimal figures without aligning the decimal points, and to have them played back with virtual decimal points (real or assumed) aligned in tabular form.
Underlined text is typed by backspacing and typing the underscore character, either one letter at a time or a word or line at a time. Each character in the underlined text is automatically stored together with its underscore, and corrections may be easily made in such text.
CODES
Each typed character and function of the editing typewriter is represented by a numerical code. Since the internal operation of the control logic is carried out in the binary number system, the basic unit of information within the logic and the memory is a bit, which may be either zero or one. Eight bits make a byte, divided for convenience into two half bytes of four bits each:
0000 0000.
The decimal equivalent of the binary value of each half-byte can range from 0 to 15 in decimal notation. For convenience these decimal numbers may be represented in hexidecimal notation, that is, with a base of 16 instead of 10; to do this, the letters A through F are used to represent the numbers 10 through 15. We thus have the table of equivalents (Table 1):
Table 1 ______________________________________ binary decimal hexidecimal ______________________________________ 0000 0 0 0001 1 1 0010 2 2 0011 3 3 0100 4 4 0101 5 5 0110 6 6 0111 7 7 1000 8 8 1001 9 9 1010 10 A 1011 11 B 1100 12 C 1101 13 D 1110 14 E 1111 15 F ______________________________________
Referring now especially to FIG. 3, Selectric keyboard 16 provides the usual alpha-numeric and function keys keys controlling letter selection, shifting, spacing and other functions. Each of these keys operates mechanically to control typewriter operations and additionally generates an alpha-numeric or function signal in the form of a two-digit hexidecimal code uniquely representing the associated alpha-numeric symbol or function. Additionally, certain of the keys may be used in cooperation with Code key 44 to generate special codes representative of the special functions performed by the editing typewriter of the invention.
All the codes employed in the operation of the editing typewriter, in numerical order, are presented with the corresponding alpha-numeric symbol or function of each in Table 2. The symbol (u) means that the character is underscored. When a character is upper case, the fourth bit of the high-order digit is one; thus all upper case codes have an upper digit from "8" to "F".
Table of codes for all symbols and functions. (Those marked * are standard Selectric codes.)
Table 2 ______________________________________ *00 - *30 9 *01 y *31 0 02 Required Space 32 Required Carrier Return 03 Space 33 Carrier Return *04 q *34 6 *05 p *35 5 *06 = *36 2 *07 j *37 z 08 Required Hyphen 38 Rewind *09 / *39 4 0A (EOD) End of Document 3A Switch Read 0B Stop 3B Line Space/Page *0C , *3C 8 *0D ; *3D 7 *0E f *3E 3 *0F g *3F ] *10 w 40 -(u) *11 s 41 y(u) 12 Required Backspace 42 Load Search Buffer 13 Backspace 43 Upper Case Shift *14 i 44 Q(61) *15 ' 45 p(u) *16 . (lower case) 46 =(u) *17 ! 47 j(u) 18 Rewind and Stop 48 Search and Play (Card Reader) *19 o 49 /(u) 1A Center 4A (not used) 1B Memo 4B (not used) *1C a 4C ,(u) *1D r 4D :(u) *1E v 4E f(u) *1F m 4F g(u) *20 f 50 w(u) *21 h 51 s(u) 22 Required Tab 52 Search 23 Tab 53 Lower Case Shift *24 k 54 i(u) *25 e 55 '(u) *26 n 56 .(lower case, u) *27 t 57 !(u) 28 Write Format Block 58 Rewind Control *29 l 59 o(u) 2A Learn 5A (not used) 2B Delete 5B (not used) *2C c 5C a(u) *2D d 5D r(u) *2E u 5E v(u) *2F x 5F m(u) 60 b(u) *90 W 61 h(u) *91 S 62 Read Format Block 92 Set Tab 63 Read Memo Block 93 (not used) 64 k(u) *94 I 65 e(u) *95 " 66 n(u) *96 . 67 t(u) *97 ° 68 (not used) 98 (not used) 69 l(u) *99 O 6A (not used) 9A (not used) 6B (not used) 9B (not used) 6C c(u) *9C A 6D d(u) *9D R 6E u(u) *9E V 6F x(u) *9F M 70 9(u) *A0 B(not used) 71 0 (zero)(u) *A1 H(not used) 72 Block Link A2 Clear Tab 73 Line Return A3 (not used) 74 6(u) *A4 K 75 f(u) *A5 E 76 2(u) *A6 N 77 z(u) *A7 T 78 (not used) A8 (not used) 79 4(u) *A9 L 7A (not used) AA Tape Pad 7B (not used) AB (not used) 7C 8(u) *AC C 7D 7(u) *AD D 7E 3(u) *AE U 7F ](u) *AF X *80 *B0( *81 Y *B1 ) 82 Index B2 (not used) 83 (not used) B3 (not used) *84 Q *B4 ¢ *85 P *B5 % *86 + *B6 *87 J *B7 Z 88 (not used) B8 (not used) *89 ? *B9 $ 8A (not used) BA (not used) 8B (not used) BB (not used) *8C , *BC * *8S : *BD & *8E F *BE # *8F G *BF [ C0 (u) EO B(u) C1 Y(u) E1 H(u) C2 (not used) E2 (not used) C3 (not used) E3 (not used) C4 Q(u) E4 K(u) C5 P(u) E5 E(u) C6 +(u) E6 N(u) C7 J(u) E7 T(u) C8 (not used) E8 (not used) C9 ?(u) E9 L(u) CA (not used) EA (not used) CB (not used) EB (not used) CC ,(u) EC C(u) CD :(u) ED D(u) CE F(u) EE U(u) CF G(u) EF X(u) D0 W(u) F0 ((u) D1 S(u) F1 )(u) D2 (not used) F2 (not used) D3 (not used) F3 (not used) D4 I(u) F4 ¢(u) D5 "(u) F5 %(u) D6 .(u) F6 (u) D7 °(u) F7 Z(u) D8 (not used) F8 (not used) D9 O(u) F9 $(u) DA (not used) FA (not used) DB (not used) FB (not used) DC A(u) FC *(u) DD R(u) FD &(u) DE V(u) FE #(u) DF M(u) FF [(u) ______________________________________
Special codes are generated using Code key 44 in combination with another key in the following manner. Code key 44 is first depressed, followed by the selected second key. When the second key has been depressed, its corresponding twodigit (hexidecimal) code is entered into the KA, KB registers 108 and 110 (to be described below) in control logic 100. The upper two bits in KA register 108 are forced to zero, leaving the lower two bits as the first (high-order) digit; the new second (low-order) digit is determined from Table 3:
Table 3 ______________________________________ Old second digit = 3 new second digit = 2 0 8 9 A F B ______________________________________
For example to get the Rewind code "38", Code key 44 is depressed. Key 216 (C9) is then depressed, causing the code for 9, "30", to be set into KA, KB. Since the two high-order bits are already zero, "3" is unaltered, while "0" is replaced by "8".
In particular, space bar 190 generates a space code "03" when used alone, or, following depression of Code key 44, it generates a required space code "02", which is used when it is desired to have some words or characters appear in the final typed copy with specified spacings, not altered during justification.
Similarly, hyphen key 192, following depression of Code key 44, generates required hyphen code "08". An ordinary hyphen may be interpreted by the control logic as unnecessary when adjusting or justifying a recorded text; to retain a hyphen in a word such as "mother-in-law", the hyphen is typed as a required hyphen.
Key 194 (?/) is used with Code key 44 to generate end of document code OA. This code ends every recorded document.
Key 196 (Gg ) is used with Code key 44 to generate stop code "OB". This code is recorded when it is desired to be able to insert material into the played back text, as in the case of playing back "Dear Mr. [stop]" and inserting an appropriate name. A required backspace code "12" is generated by Code key 44 together with backspace key 198, while an ordinary backspace code "13" is generated by backspace key 198 alone. The required backspace code is used to produce a composite character such as ≠ or φ. In general, when one character is struck over another, the original character is erased from the memory 106; to prevent this, a required backspace code "12" is used in place of the usual code "13".
The rewind and stop code "18" is generated by Code key 44 and key 200 (Ww). This code is employed when a recorded document such as a form letter is to be played out several times; the code causes the tape to be automatically rewound after each playback, followed by a stop to allow insertion of clean paper. The center line code "1A" is generated by Code key 44 and key 202 (Oo); when this code is entered before a typed line of characters, the line will be centered automatically when the text is played back.
The memo in code "1B" is generated by Code key 44 and key 204 (Mm). Recorded text that is preceded by this code can be selectively accessed on a tape without playing out the other contents of the tape. A required tab code "22" is generated by Code key 44 with tab key 206, while an ordinary tab code "23" is generated by tab key 206 alone. The required tab code "22" is used to provide indented portions of typed text without typing an ordinary tab code "23" before each indented line, and to permit decimal alignment of numbers.
Code key 44 and key 208 (Bb) are used to generate a write format block code "28". This code is used in the Learn mode to cause a format (tabs and right margin) to be recorded on tape. A learn code "2A" is generated by Code key 44 and key 210 (Ll). In response to this code, the typewriter types out the characters "earn(" and prepares to receive instructions. This code may be followed by a number of possible codes. For example, if the typist types "f", the typewriter types out "ormat" and prepares to learn tab settings and right margin. This function will be described in greater detail in what follows.
A delete code "2B" is generated by Code key 44 together with key 212 (Xx). This code, typed over a previously typed character in a current line (not yet transferred from buffer to tape), deletes that character without replacing it by another.
A required carrier return code "32" is generated by Code key 44 and return key 214, while key 214 alone generates an ordinary return code "33". Both define the end of a line.
The ordinary return code initiates the transfer of a line of characters from a buffer in memory 106 to the tape. The required carrier return code ends an indented section initiated by the required tab code. This required carrier return is also used to prevent adjusting of lines such as the name and address at the beginning of a letter.
A rewind code is generated by Code key 44 with key 216 ((9) This code causes a tape to be rewound.
A switch read code "3A" is generated by Code key 44 with key 218 ($4). This code directs the typewriter to cease reading one tape and begin reading the other.
A "load search buffer" code "42" is generated by a first depression of search key 68 (FIG. 2). The user then types in the initial characters or words of the text to be found on the tape, and again depresses the Search key to generate a code "52", for "Search". This function will be described in more detail in what follows. A read format block code "62" is generated by Code key 44 and Memo Out key 66 (FIG. 2), while a read memo block code "63" is generated by Memo Out key 66 alone. These codes control readout from tape. A block link code "72" is generated by Code key 44 and Line Back key 42 (FIG. 2), while a Line Back code "73" is generated by key 42 alone. The Line Back code has alternative functions depending on the mode of operation of the typewriter system and the position of the type head carrier. In Play mode, Line Back code causes the contents of buffer 230 to be cleared, and the tape to back up one line. In Record mode, if the type head is at the left margin, this code causes the tape to back up one line; if the type head is in the middle of a line, the buffer contents are cleared. In Transfer mode, if the type head is at the left margin, the left tape is backed up one line; if the type head is in the middle of a line, the buffer is cleared of characters already typed. Key 222 generates an "Attention" signal for use only when the typewriter is used as an on-line terminal. A set tab code "92" or a clear tab code "A2" is generated by the set/clear rocker key 224.
These special function codes and the keys used to generate them are presented in Table 4.
Table of Function Codes & Keys
Table 4 ____________________________________________________________
______________ CODE CHARACTER KEY(S) ____________________________________________________________
______________ 1 02 Required Space Code Key + Space Bar 2 03 Space Space Bar 3 08 Required Hyphen Code Key + Hyphen Key 4 0A End of Document Code Key + '/' Key 5 0B Stop Code Key + 'G' Key 6 12 Required Backspace Code Key + Backspace Key 7 13 Backspace Backspace Key 8 18 Rewind and Stop Code Key + 'W' Key 9 1A Center Code Key + 'O' Key 10 1B Memo Code Key + 'M' Key 11 22 Required Tab Code Key + Tab Key 12 23 Tab Tab Key 13 28 Write Format Block Code Key + 'B' Key 14 2A Learn Code Key + 'L' Key 15 2B Delete Code Key + 'X' Key 16 32 Required Carrier Return Code Key + Carrier Return 17 33 Carrier Return Carrier Return Key 18 38 Rewind Go Code Key + '9' Key 19 3A Switch Read Code Key + '4' Key 20 3B Line Space/Page Eject Code Key + ']' Key 21 42 Load Search Buffer Search Key 22 43 Upper Case Shift 23 52 Search Search Key 24 53 Lower Case Shift 25 62 Read Format Block Code Key + Memo Out Key 26 63 Read Memo Block Memo Out Key 27 72 Block Link Code Key + Line Back Key 28 73 Line Back Line Back Key 29 82 Index Index Key 30 92 Set Tab Set Tab Rocker Switch 31 A2 Clear Tab Clear Tab Rocker Switch 32 AA Tape Pad ____________________________________________________________
______________
CONTROL LOGIC
Read-only memory 104, whose construction is described in U.S. Pat. appln. Ser. No. 74,369, filed Sept. 22, 1970, now U.S. Pat. No. 3,727,201, issued Apr. 10, 1973 and assigned to the same assignee as this application, contains prewired instructions in the form of control words, controlling the operations of central processor 102 and other parts of the typewriter system 11. The control logic 100 has the capacity to access these stored instructions non-sequentially in response to codes entered through keyboard 14 or tape unit 12, permitting varied and complex operations, involving decisions determining the sequence of instructions, to be performed automatically. Each control word contains 42 bits and is divided into 13 fields (FIG. 6). Fields within a word, to be more fully described in what follows, direct the various internal operations of the typewriter to permit the carrying out of the command. A command is entered as a two-digit code, which is decoded within the control logic and causes branching to the addresses of a sequence of appropriate control words within read only memory 104, in a manner to be described.
Central processing unit 102, which includes an arithmetic logic unit 103 and several registers, is shown in FIG. 7. All registers are four bits wide, as are all transfer lines.
Input and output between typewriter 10 (including keyboard 14) or tape unit 12 and central processor 102 are through the external communication registers KA (108) and KB (110). The T, U, and V registers (112, 114 and 116) are address arithmetic registers. The M and N registers (120 and 122) are memory access address registers, and may be set by the parallel transfer of the contents of U and V or by transfer of the contents of V to N and of a constant value to M, as will be described. All memory access selection is performed by using the contents of M and N to select a byte in memory 106.
Registers CA and CB (124, 126) are memory communication registers. Data can be sent to these registers from the address in core memory 106 specified by the contents of MN registers 120 and 122, or data can be sent from registers 124 and 126 to that address.
S register 128 is an internal status register, containing four status bits in the arrangement S3, S2, S1, S0. These may be set in response to the status field (stat) in the current control word, or may be set with the output of ALU 103.
Registers D1 and D2 (130, 132) are set by switches on keyboard 14 as follows:
Table 5 ______________________________________ D1 3 2 1 0 Switch Function ______________________________________ 0 18 Select left 1 20 Select right 0 34 Single block recording 1 34 Double block recording 0 0 24 Play 0 1 26 Record 1 0 22 Transfer D2 3 2 1 0 Switch Function ______________________________________ 1 64 Auto 1 56 Paragraph 1 1 58 Line 1 1 60 Word 1 1 1 62 Char/Stop 1 1 70, 56 Skip, Paragraph 1 1 1 70, 58 Skip, Line 1 1 1 70, 60 Skip, Word 1 1 1 1 70, 62 Skip, Character ______________________________________
The D registers internally represent modes of operation selected externally by the user, and are termed external status registers.
The contents of registers S (128), TUV (112, 114, and 116), KA and KB (108 and 110), and CA and CB (124 and 126) can be transferred via the A-bus 134 to arithmetic logic unit 103 through pass-through inhibit switch 136, under the control of a control word in read-only memory 104, as will be described.
The contents of registers D1 and D2 (130, 132), CA and CB (124 and 126), KA and KB (108 and 110), or a constant value specified by the current control word in a manner to be described, can be sent via the B-bus (138) to ALU 108 through add/subtract selection switch 140.
Other inputs to ALU 103 are the saved carry value (SC) (1410) and a plus one source (P1) (142). The KBD bit 145 is a status bit which may be set and tested by the control logic; it is set on when a key on keyboard 14 is depressed.
Output from ALU 103 via the Z-bus 144 may be to the S (128), TUV (112, 114, 116), KA and KB (108 and 110), or CA and CB (124 and 126) registers.
Further details of the type of logic incorporated in portions of this typewriter system may be had by referring to U.S. Pat. No. 3,509,329, issued Apr. 28, 1970, to An Wang et al.
The operations of central processor 102 and memory 106 are controlled by the control words hard-wired in the read-only memory 104. The control word format 152 is shown in FIG. 6.
Each control word is 42 bits in length, broken into 13 fields and laid out as shown in FIG. 6. Each field will control some portion of the circuitry as described in detail below. For definition of functional fields, there are used herein underlined lower case mnemonics (e.g., ai will represent the A-bus input field); for definitions of the permissible values of each field, underlined lower case mnemonics contained within quotation marks will be used (e.g., the ai field value of "t" will cause the contents of register T to be gated into the A-bus). The fields of a control word are generally divided into computation means control fields (ai, bi, zo, aop, ac, bc, mop, kk, stat, and sub) and a further field (divided into jad, jh and jl) for determining the next control word to be accessed.
The 3-bit ai (A input) field 154 determines the source of input to A-bus 134. The ai field values and the resulting sources for the A-bus may be any of the following:
Table 6 ______________________________________ A-Bus Input and Z-Bus Output Binary value Decimal value Source ______________________________________ 000 0 S register 128 001 1 T register 112 010 2 U register 114 011 3 V register 116 100 4 KA register 108 101 5 KB register 110 110 6 CA register 124 111 7 CB register 126 ______________________________________
The 3-bit bi (B input) field 156 determines the source of input to B-bus 138. The bi field values and resulting sources may be any of the following:
Table 7 ______________________________________ B-Bus Input Binary value Decimal value Source ______________________________________ 000 0 none 001 1 constant field in control word 010 2 D1 register 130 011 3 D2 register 132 100 4 KA register 108 101 5 KB register 110 110 6 CA register 124 111 7 CB register 126 ______________________________________
The 3-bit zo (Z output) field 158 determines the destination of data transmitted from ALU 103 on z-bus 144, and has the same values and corresponding registers as ai field 154.
The 3-bit aop field 160 determines ALU operations; it has the following possible values and corresponding operations:
Table 8 ______________________________________ Arithmetic Operations Binary Hexidecimal value value Operation ______________________________________ 000 0 Add/Subtract A-bus and B-bus inputs 001 1 Add/Subtract the A-bus and B-bus inputs and the Plus One generator output 010 2 Add/Subtract the A and B bus inputs and save the resulting carry (if any) in SC 011 3 Add/Subtract the A and B bus inputs and the contents of SC (the previous saved carry); save resulting carry in SC 100 4 Add/Subtract the A and B bus inputs and the plus one generator output; save resulting carry in SC 101 5 Logical AND of the A and B bus inputs 110 6 Logical inclusive OR of the A and B bus inputs if bc field is set to "add"; logical exclusive OR if bc field is set to "subtract". 111 7 not used. ______________________________________
The one-bit ac field 162 controls input on A bus 134 to ALU 103; a value of "0" inhibits inputs on this line; a value of "1" permits input.
The one-bit bc field 164 selects addition or subtraction by the ALU 103 in response to aop field 160.
The four-bit mop field 166 controls the transfer of signals between central processor 102 and memory 106 by controlling the loading of the MN address selection registers 120 and 122, and reading from and writing into the selected registers, it further controls transfer of data between typewriter 10 and tape unit 12. This field may have the following values and corresponding operations:
Table 9 ______________________________________ Memory Operations Hexidecimal value Function ______________________________________ 0 No memory access operation. 1 Transfer the contents of UV to MN; then transfer the contents of CA, CB to the byte of storage pointed to by MN. 2 Transfer constant field value to register M, V to register N. Then transfer the contents of CA, CB to the byte of storage pointed to by MN. 3 Transfer a hexidecimal `F` to register M, constant field to register N. The transfer contents of CA, CB to byte of storage pointed to by MN. 4 Transfer the contents of UV to MN; then transfer the contents of the byte of storage pointed to by MN to registers CA and CB; storage readout is non destructive. 5 Transfer the contents of the CS constant field (kk) to register M; transfer the contents of register V to register N; then transfer the contents of the byte of storage pointed to by MN to registers CA and CB; readout is non desctructive. 6 Transfer a hexidecimal `F` to register M, CS constant field (KK) to N. Then transfer contents of the byte of storage pointed to by MN to register CA, CB. Storage readout is non destructive. 7 Set external indicators according to interpretation of kk field and bi field. 8 Set external controls according to interpretation of kk field and bi field. 9 Set registers KA, KB according to setting of Adjust, Justify, Same buttons. A Accept data from tape into registers KA and KB according to interpretation of kk field. B Transmit data to tape from registers KA and KB according to interpretation of kk field. C Transfer typewriter tape status to registers KA and KB according to inter- pretation of kk field. D Turn on tape according to interpretation of kk field and bi field. E Turn off tape according to interpretation of kk field and bi field. F not used. ______________________________________
The prewired four-bit constant kk field 168 may have any four-bit configuration (any value up to hexidecimal "F").
Of the possible values of the mop field, the values "7", "8", "A", "B", "C", "E" and "F" are concerned with external devices. In more detail, when the value of the mop field in the current control word is "7", the values of the bi and kk fields are used to control the external indicator lights as follows:
Table 10 ______________________________________ MOP 7 - EXTERNAL INDICATOR ______________________________________ MOP `KK` `BI` 7 1(0001) 0 Playback light off (char/stop key) 7 1 1 Playback light on 7 2(0010) 0 End Light off 7 2 1 End light on 7 4(0100) 0 Record light off 7 4 1 Record light on 7 8(1000) 0 No adjust light off 7 8 1 No Adjust Light On ______________________________________
Any combination of these functions may be obtained according to the value of the kk field.
When the value of mop is 8, the values of the bi and kk fields set various controls of the typewriter as follows:
Table 11 ______________________________________ MOP 8 -- SET EXTERNAL CONTROLS ______________________________________ MOP `KK` `BI` 8 1 0 Unlock Typewriter Keyboard 8 1 1 Lock Typewriter Keyboard 8 2 Ring Bell 8 4 0 Send KA 1 , KA 0 , KB 3 , KB 2 , KB 1 , KB 0 to Selectric (Inner Group) 8 4 1 Send to Selectric the following codes (Outer Group) KA KB Space 0 3 Bk space 1 3 Tab 2 3 Index 8 4 Carrier Return 3 3 Shift Up 4 3 Shift Down 5 3 Set Tab 9 2 Clear Tab A 2 ______________________________________
When the value of mop is "A", the four bits of KB register 110 are set in response to signals from the tape:
Table 12 ______________________________________ MOP A -- TAPE INPUT ______________________________________ Set KB 0 = 1 if flux change on tape track 1 Set KB 1 = 1 if flux change on tape track 0 Set KB 2 = 1 if left photocell sees opaque tape Set KB 3 = 1 if right photocell sees opaque tape ______________________________________
When the value of mop is "B", data is read onto the tape as follows:
TABLE 13
MOP B -- TAPE OUTPUT
Change recording current level of track 0 according to bit KB 0 .
Change recording current level of track 1 according to bit KA 0 .
When the value of mop is "C", bits representative of the status of tape or typewriter are input to KB register 110:
TABLE 14
MOP C -- DEVICE STATUS INPUT
1 to KB 0 if typewriter is set for double spacing
1 to KB 1 if typewriter is ready
1 to KB 2 if left tape head is out
1 to KB 3 if right tape head is out
The values of mop of "D" and "E" control the left and right tape motors and the recording current according to the values of the "bi" and "kk" fields in the current control word:
Table 15 ______________________________________ MOP D -- Tape motor ON controls MOP E -- Tape motor OFF controls bi = 1:recording current on bi = 0:recording current off bit 0 `KK` = 0:left tape unit bit 0 `KK` = 1:right tape unit bit 1 `KK` = 0:forward bit 1 `KK` = 1:reverse bit 2 `KK` = 1:head out bit 2 `KK` = 0:head in bit 3 `KK` = 0:low speed bit 3 `KK` = 1:high speed ______________________________________
These values of mop ("D" or "E"), bi and kk permit the following control combinations:
Table 16 ____________________________________________________________
______________ MOP KK BI D 0 0 On/Left/Forward/Head In/71/2 "-sec/Recording Off D 0 1 On/Left/Forward/Head In/71/2"-sec/Recording On D 1 0 On/Right/Forward/Head In/71/2"-sec/Recording Off D 1 1 On/Right/Forward/Head In/71/2"-sec/Recording On D 2 0 On/Left/Reverse/Head In/71/2"-sec/Recording Off D 3 0 On/Right/Reverse/Head In/71/2"-sec/Recording Off D C 0 On/Left/Forward/Head Out/60"-sec/Recording Off D D 0 On/Right/Forward/Head Out/α"-sec/Recording Off D E 0 On/Left/Reverse/Head Out/60"-sec/Recording Off D F 0 On/Right/Reverse/Head Out/60"-sec/Recording Off MOP KK BI E 0 0 Off/Left/(Forward)/Head In/(71/2"-sec)/Recording Off E 0 1 Off/Left/(Forward)/Head In/(71/2"-sec)/Recording On E 1 0 Off/Right/(Forward)/Head In/(71/2"-sec)/Recording Off E 1 1 Off/Right/(Forward)/Head In/(71/2"-sec)/Recording On E 2 0 Off/Left/(Reverse)/Head In/(71/2"-sec)/Recording Off E 3 0 Off/Right/(Reverse)/Head In/(71/2"-sec)/Recording Off E C 0 Off/Left/(Forward)/Head Out/(60"-sec)/Recording Off E D 0 Off/Right/(Forward)/Head Out/(60"-sec)/Recording Off E E 0 Off/Left/(Reverse)/Head Out/(60"-sec)/Recording Off E F 0 Off/Right/(Reverse)/Head Out/(60"-sec)/Recording ____________________________________________________________
______________ Off
The value "F" in the mop field is not used in this machine.
The four-bit stat field 170 determines the setting of five status bits, four in Status register 128 together with the KBD bit 145. The possible values of this field together with the resulting operations are:
Table 17 - Status Field ______________________________________ Value Function ______________________________________ 0 Do not set status bits. 1 bit 0 2 1 Set the appropriate bit of register 3 2 S on unconditionally. 4 3 5 bit 0 6 1 Set the appropriate bit of register 7 2 S off unconditionally. 8 3 9 Set the KBD bit off. A Set SO on if the ALU output is non-zero. B Set S1 on if the output of the ALU is zero. C Set S1 on if the output of the ALU is zero. D Set all the bits of registers S off unconditionally. E not used. F Allow z-bus transfer to S register. ______________________________________
The one-bit subr field 172 has two possible values: zero, with the function, "Do not save the current control word address," and one, with the function, "Save the ten high order bits of the current control word address field". This saved address goes to the lower position of a two-level stack; any previously saved address goes to the higher level of the stack.
The last three fields, jad, jh and jl (174, 176 and 178) are used to determine the address of the next control word to be accessed in read-only memory 104. (The letter "j" stands for "jump", "ad" for "address", "h" for "high order", and "l" for "low order".) The nine-bit jad field 174 contains the high-order jump address, and the two 3-bit fields 176 and 178 are interpreted to provide the last two bits of the address.
FIG. 5 shows schematically the read-only memory 104 and its 11-bit Control Storage Address register 180, which contains three fields, bad, bh, and bl (182, 184, 186). The jad field 174 in the currently accessed word is loaded into the bad field 182 of storage address register 180, while the three-bit jh and jl fields must be evaluated to determine the one-bit inputs to bh (184) and bl (186).
The possible values of these address fields and the resulting values set into the bh and bl fields are:
Table 18 - Jump Address Fields ______________________________________ jh: 000 set "0" into bh unconditionally 001 set "1" into bh unconditionally 010 set S register bit S1 into bh responsive to stat field 011 set S register bit S3 into bh 100 not used 101 if the current ALU output had a carry, set bh to "1"; otherwise set to "0" 110 set contents of KBD bit into bh 111 if current ALU output =o, set bh="1"; otherwise set it to "0" jl: 000 set "0" into bl unconditionally 001 set "1" into bl unconditionally 010 set S register bit SO into bl 011 set S register bit S2 into bl 100 if the ALU output is zero, set bl to "1"; - otherwise set it to "0" 101 if current ALU output had a carry, set bh to "1"; otherwise set to "0" 110 set contents of SC bit into bl 111 Subroutine setting: restore saved ten high-order bits of the control word address (bad & bh) from the lower level of the stack and place a "1" in the bl field. The higher saved address (if any) will move to the lower position. ______________________________________
FIGS. 11-42 show in binary notation the fields of the entire contents of read-only memory 104 in one preferred embodiment of the invention.
A single control word may specify several different functions to be performed by the hardward. Therefore an order must be specified in which these functions will be performed. This sequence is follows:
1. Set the memory access address registers MN 120, 122) if required by mop field 166.
2. Select A-bus (134) and B-bus (138) sources and Z-bus (144) destination according to the ai, bi, and zo fields respectively (154, 156, 156).
3. Perform A and B input controls as specified by the ac and bc fields (162, 164).
4. Select the operation to be performed on the inputs as specified in aop field 160, and pass the A and B inputs through to ALU 103.
5. Save subroutine address if required.
6. Calculate the jump address from the jad, jh, and jl fields (174, 176, 178).
7. Pass the output of ALU 103 along Z-bus 144 to its destination.
8. Save the carry if aop field 160 requires it.
9. Set the status according to stat field 170.
10. Perform operation specified by the mop field.
11. Fetch the next control storage word.
MEMORY AND BUFFER
The random access memory 106 is shown schematically in FIG. 8. It comprises 16 registers each including 16 bytes, or 256 bytes in all. Each byte comprises eight bits, divided into upper and lower order half-bytes.
Bytes 00 through C7, shown as region 230 in FIG. 8, are the portion of memory 106 used as the tape buffer. Characters typed on typewriter 10 are stored here, beginning in byte 00, before being transferred to a tape, or are read into these registers from tape before being typed. Bytes C8 through CE are used for tab stop settings; byte CF contains the number of required tabs active (upper half byte) and number of tabs set (lower half byte).
Register D is the typewriter input buffer and contains, in bytes DO-DE, characters input from the typewriter. The lower half-byte of DF contains the number of characters in the buffer. The upper half-byte is not used.
Byte E0 contains a 2-bit number representative of the "endpage action status", or action to be taken at end of a page. The possible values and corresponding actions are:
00 Continue playback 01 Stop playback 10 Page eject and continue (for continuous printout paper) 11 (not used)
The remaining 6 bits of E0 are not used.
Byte E1 contains a binary number that specifies the number of lines to be typed per page.
Byte E2 contains the number of lines that constitute a physical page; this number is automatically set to 66 (hexidecimal 42) when the power is turned on. Byte E3 contains the number of lines typed thus far on a current page. Bytes E4 through EB are not used.
Byte EC is the justify start pointer; this number indicates the first space at which a new space will be inserted in justification.
Bytes ED-EE are not used. The low order half byte of EF contains a number indicating the number of further attempts to read a tape that will be made if an error occurs during the current attempt.
Byte F0 contains the adjust zone start pointer, representing the location of the first column of the adjust zone relative to the left margin.
Byte F1 contains the right margin pointer.
Byte F2 is a work byte.
Byte F3 is the "character status" stack. Possible values of each half-byte are:
0 Character end character
1 word end character
2 line end character
4 paragraph end character
8 auto end character.
Byte F4, upper half byte, contains parameters representing the same, adjust or justify modes, and advance, skip or wait instructions. The third and fourth bits of this half-byte have the following possible values:
11 Justify
00 Same
01 Adjust
The lower half byte of byte F4 has the possible values:
0 advance/skip 1 character
1 advance/skip to word end
2 advance/skip to line end
4 advance/skip to paragraph end
8 advance in auto mode.
Bytes F5 and F6 contain status bits that are used in keeping track of the operation of the tape and typewriter, specifically left/right tape selection, keyboard locked/unlocked, upper/lower case, read format/memo flag, tape backup flag, centered/memo line flag, no-adjust recording flag, search flag, line spacing flag and other status bits. Those related to the special functions of the editing typewriter herein described will be explained in detail in connection with the description of the functions in what follows.
Byte F7 is the "current character byte" and contains the code currently being processed by the control logic; such a code may, for example, represent a character being moved to or from a buffer.
Bytes F8-FB are work bytes, whose particular use depends upon the procedure being executed. Byte FC contains the position of the Selectric type head carrier relative to the left margin. Byte FD contains the number of backspaces of the carrier from the rightmost typed character in the current line. Byte FE, the current tape buffer pointer, indicates the next character in the buffer to be processed.
Byte FF contains a pointer PL; PL-1 indicates the last character contained in the tape buffer.
POWER TURNED ON
FIGS. 9 and 10 are flow charts, schematically showing the various modes of operation of the editing typewriter.
When power is turned on at on/off button 13 (FIGS. 1 and 9), a series of initializing steps (box 300, FIG. 9) are automatically performed under the direction of control logic 100. All the contents of memory 106 are set to zero, and certain parameters are then automatically set with initial values. A physical page length of (decimal) 66 (the number of lines that make up a standard 11 inches page) is read into byte E2 of memory 106: the right margin pointer in byte F1 is set to (decimal) 66; and a page size of 50 (the standard number of typed lines on an 11 inches long page) is set to (decimal) 50 in byte E1. Byte F0 contains the adjust zone start pointer, which is the location of the last column of the adjust zone relative to the left margin; this number is initially set to 01.
The "endpage action" in byte E0, specifying the action to be taken when the end of the page is reached, is set to "00" ("continue playback"). Further steps, performed automatically after the power is turned on, include setting the required tab counter in byte CF to zero, setting the buffer pointer in byte DF to zero, and setting on the upper case flag in byte F5. The typewriter 10 then returns the print head carriage to the left margin and stores a zero in byte FC, the location of the carrier position from the left margin. Relevant portions of memory 106 now have this format:
0123456789ABCDEF 0 0000000000000000 beginning of tape buffer 0000000000000000 . . . D 0000000000000000 typewriter input buffer and 0000000000000000 counter E 0340000000000000 1220000000000000 F 04F0000000000000 1200000000000000
After power is turned on and the initializing steps have been performed as described, if there is no input, the machine is in the CYCLE condition (box 302, FIG. 9), during which control logic 100 automatically and repeatedly accesses a sequence of control words 152 in read-only memory 104, and under the control of these words, status indicators are continually tested. The condition of KBD bit 145 is tested by the following automatically accessed control word:
ai bi zo aop ac bc mop kk st sbr jad jh jl 4241: 7 0 0 0 1 0 0 0 F 0 172 6 0
(the number "4241" represents the number of this word in a listing of all control words and has no operational significance.) The numerical values of these fields, as will be seen by referring to tables 6 through 19, have the following significance: The A-bus source is CB register 126; there is no B-bus source; the Z-bus destination is S register 128; the arithmetic operation is addition (aop = 0 and bc = 0); and the result is that the contents of CB register 126 are transferred to S register 128. The value "F" of the status field 170 allows transfer to the S register. There is no memory operation (mop = 0) and the branch to the next control word 152 to be executed is determined by jh field 176: the value "6" in this field means that the contents of KBD bit 146 will be set into bh field 184 of the address to be accessed next.
If KBD bit 145 is off (value of zero), no input code is found, and the next accessed control word determines further repeated testing of status indicators as the CYCLE condition continues. When a character key is depressed on keyboard 14, the corresponding code is input to keyboard registers 108 and 110 and at the same time, KBD bit 145 is set on, this condition is detected (box 304, FIG. 9) and the control word next accessed as a result initiates an appropriate sequence of operations.
STORAGE OF TYPED CHARACTERS: UNDERLINING
As an example of the way in which the control logic 100 controls the temporary storage of typed characters before they are transferred to tape, as well as an example of the way in which underlined characters are handled, the entry of the line of characters
ss
(followed by a carriage return) will now be described.
The codes for this line of characters, as will be seen by referring to Tables 2 and 4, are
11, 11, 13, 80, 33
representing the successive operations
type "s", type "s", backspace, underscore, carriage return.
When the first lower case "s" is typed, the code "11" is entered from keyboard 14 into KA, KB registers 108 and 110. The lower half-byte DF is then set to "1", representing the number of characters in the typewriter buffer; and the code "11" is stored in the left-most position in the buffer, in byte D0. These steps are accomplished in the following manner.
When the first lower case "s" is typed, the code "11" is entered from the keyboard into KA, KB registers 108 and 110 and KBD bit 146 is set on; as a consequence, the next control word executed after 4241 is 4245:
ai bi zo aop ac bc mop kk st sbr jad jh jl 4245: 7 0 7 1 1 0 0 0 9 0 172 5 1
Again referring to tables 6 through 19, the A-bus source is CB register 126, there is no B-bus source, the Z-bus destination is also the CB register, the arithmetic operation is addition with the output of plus-one generator 142. There is no memory operation; the status field value of "9" results in setting off KBD bit 145. The CB register, as a result of an earlier executed control word, contains the value stored in byte DF of memory 106, which is the counter for the typewriter input buffer, and records the number of characters in that buffer. This value is now incremented by one; the value of "5" for jh means that the next control word to be accessed depends upon whether or not a carry resulted from adding the one to the counter value. If a carry resulted, then too many characters have been input, and a subroutine is executed that locks the keyboard to prevent further input until the characters already input can be processed. When no carry results, the next control word accessed is 4248:
4248: 0 0 3 0 1 0 2 D 0 0 19C 0 0
The value of "2" in the memory operation field causes the constant field value of "D" to be set into M register 120, and the contents of V register 116 into the N register 122. The V register at this time contains the value "F", set there by a previously executed control word. The value of "2" in memory operation field 166 then causes the contents of CA, CB registers 124 and 126 to be transfered to the byte whose address is in MN, specifically to byte DF. The CA, CB registers contain the incremented count of characters in the typewriter buffer, which is thus read into byte DF, replacing the previous value. The contents of S register 128 (ai = "0") are then transferred to V register 116 (zo = "3", aop = "0" and ac = "1").
The next two control words are accessed unconditionally:
4252: 4 0 6 0 1 0 0 0 0 0 --- - -
The contents of KA register 108 are transferred to CA register 124; there is no memory operation. KA register 108 contains the upper half byte of the input code, which is thus transferred to the CA register.
4253: 5 0 7 0 1 0 2 D 0 0 --- - -
The memory operation field value of "2" causes the MN registers to be set with "D" (from the constant field) and "0" (from the V register) respectively. The contents of KB register 110 (that is the lower half byte of the code) are then transferred to CB register 126; the contents of the CA and CB registers are then transferred together to byte DO of memory 106. Thus, the code "11" is temporarily stored in the left-most position in the buffer. The relevant portions of memory 106 now have this format:
0123456789ABCDEF ______________________________________ 0 0000000000000000 beginning of tape buffer 0000000000000000 . . . D 1000000000000000 Typewriter input buffer 1000000000000001 code "11" counter E 0340000000000000 1220000000000000 F 04F000000F000000 1200000000000000
The code "11" is then read into current character byte F7, and a series of decoding steps (box 306, FIG. 9) are performed to determine the way in which the character code should be handled. The typewriter buffer counter in DF is set to zero.
These steps are accomplished by the following operations. Control word 4255 is accessed unconditionally after word 4253.
4255: 0 0 5 0 0 0 6 9 0 0 --- - -
The values of the fields determine that the A-bus source is inhibited, there is no B-bus source, the Z-bus destination is KB register 110, and the arithmetic operation is addition. This results in setting a zero into the KB register. The memory operation field value of "6" results in setting M to "F" and setting "9" (from the constant field) into N. Thus the contents of byte F9 are read out to the CA, CB registers 124 and 126. This results in restoring a value that was stored at byte F9 before execution of word 4241. The next word is also accessed uunconditionally:
4256: 6 0 4 0 1 0 C A 0 0 --- - -
The value previously read into CA register 124 is now transferred to KA register 108, while the status of particular external devices is read into KB register 110. The particular value read in this case is "0", or in binary form "0000", representing that the typewriter is set for single space, that the typewriter is not ready for input, and that both tape heads are in.
The next word is also accessed unconditionally:
4257: 7 0 3 2 1 0 6 E D 0 000 0 7
This results in transferring the contents of CB register 126 to the V register, saving the carry (if any), and setting all status bits off (Status field = D). The memory operation is reading out the contents of FE to the CA, CB registers 124 and 126. The jl value of "7" determines a return from the subroutine and restoring of the previously stored address, with the result that the next word accessed is "CY5B", part of the "CYCLE" routine of words that was being executed when the input code was detected.
CY5B: 0 1 2 0 0 0 0 3 0 0 --- - -
(the characters "CY5B" are a mnemonic tag for this control word in a listing of all such words and have no operational significance.)
Execution of this word results in setting "3" from constant field 168 into U Register 114. The next word is accessed unconditionally,
CY5C: 0 1 1 0 0 0 0 4 0 1 1A4 1 1
Execution of this word sets "4" from constant field 168 into T register 112. A subroutine to read the status registers for any new playback requests is then accessed unconditionally. During this subroutine, the contents of D2 register 132 and D1 register 130 are successively tested, and if necessary, the playback status request flag in byte F4 is altered. Play and record lights are also set in accordance with the playback request status.
The most recently input code "11" is then read into current character byte F7 by the execution of these two control words:
4282: 0 1 2 0 0 0 5 D 0 0 --- - -
(read out contents of byte D0 to CA, CB registers 124, 126).
4283: 3 0 3 4 1 0 3 7 0 0 14C 1 0
(store contents of CA, CB registers in byte F7, the current character byte.) A subroutine is then unconditionally accessed and executed that causes readout of the entire typewriter input buffer (bytes D0 through DE of memory 106) to check for any saved characters. The counter in byte DF is moved to byte DE, and the contents of byte DF are reset to zero. Finally the code "11" stored in the current character byte F7 is read into the CA, CB registers, the stored address of the command that preceded the subroutine is restored, and the next command in the CYCLE routine is accessed. This control word tests the S register contents for indication of the presence of an input character, and finding one, branches to a decode routine. This comprises a series of steps in which the lower half byte of the input code is exclusive-or'd with a succession of constant field values. As a result, the input code is identified as a normal Selectric alpha-numeric character code, rather than, for example, a backspace, underscore, space, or carriage return. Consequently the next control word accessed initiates a subroutine for inserting the input character in the tape storage buffer (bytes 00 through C7 of memory 106).
The relevant portions of memory 106 at this time have the format:
0123456789ABCDEF ______________________________________ 0 0000000000000000 beginning of tape buffer 0000000000000000 . . . D 0000000000000000 typewriter input buffer 0000000000000010 E 0340000000000000 1220000000000000 F 04F000010F000000 1200000100000000
Storing the input character in the tape buffer involves a series of steps in which the counters in bytes FF and FE are tested to determine the location at which the code should be stored. When these counters are found to be both zero, the code "11" is stored in byte 00, and the counter in FF is incremented to "01". The counter in FE is incremented to "01", the address of the next character in the tape buffer to be processed. Finally the page pointer in byte FC, indicating the location of the type head carrier from the left margin, is set to "01". These steps are the result of execution of the following control words.
The first control word is accessed as a result of the identification of the code "11" as a normal Selectric character code:
4356: 0 0 0 0 0 0 6 E 0 0 --- - -
The contents of byte FE, representing the address of the next character in the tape buffer, are read out to CA, CB registers 124 and 126. In the present instance the tape buffer is empty, and the value in byte FE is "00". The next word is accessed unconditionally:
4357: 6 1 6 6 1 1 0 6 0 0 --- - -
Execution of this word causes the constant field value "6" to be exclusive-or'd with the content of register CA, and the result replaced into register CA.
The next word is accessed unconditionaloy:
4358: 7 1 7 6 1 1 0 3 0 0 --- - -
Execution of this word causes the constant field value "3" to be exclusive-or'd with the contents of register CB, and the result replaced into register CB. Again, the next word is accessed unconditionally:
4359: 6 7 0 6 1 0 6 F 0 0 14E 0 4
Execution of this word causes the inclusive or'ing of the contents of the CA and CB registers. The result of this arithmetic operation is used to determine what control word will be accessed next. The contents of byte FF, containing the counter PL, is read out to the CA, CB registers; in the present instance, the contents of byte FF are zero.
The effect of execution of control words 4356, 4357, 4358 and 4359 has been to inquire whether the next address in the tape buffer is less than or equal to hexidecimal 63, or decimal 99. If the next address is less than 99, the result of the arithmetic operation of word 4359 is non-zero, while if the next address is 99, the result is zero; the branch to the next control word is determined by this, since jl = "4".
In the present instance, the next address is "00", and accordingly the next control word executed is
4362: 6 1 6 6 1 1 0 C 0 0 19E 1 0
which causes the contents of the CA register (containing the upper half-byte of the counter PL in byte FF, PL-1 representing the address of the last character in the tape buffer) to be exclusive-or'd with the constant field value "C". The result in the present instance is "C", which is replaced into register CA. The next word is unconditionally accessed:
4365: 7 1 7 6 1 1 0 7 0 0 --- - -
Execution of this word causes the contents of the CB register to be exclusive-or'd with the constant field value "7", and the result (in this case "7") is replaced into register CB. The next word is
4366: 6 7 0 6 1 0 6 E 0 0 14E 1 4
which causes the contents of CA and CB registers to be inclusive-or'd together, and the non-zero result is used to determine further branching. These operations have determined that the number of characters in the tape buffer is less than 99.
A similar sequence of control words determines whether or not the number of characters in the buffer is hexidecimal 59 (decimal 89). If it is, the next control word accessed is
4375: 0 0 0 0 0 0 8 2 0 0 14F 0 0
whose memory operation results in ringing typewriter bell 55. If the number is not 59, this word is by-passed; in either case, the next control word accessed is
4374: 0 0 0 0 0 0 6 D 0 0 19F 0 0
which causes the backspace counter to be read out of byte FD into the CA, CB registers.
The next sequence of words tests the backspace counter; if this is found to be zero, as in the present instance, the counter in byte FF is read out to the CA, CB registers, and the lowest order bit in the S register is set off (stat field 170 = 5). The counter PL in byte FF is then incremented to "01" and restored. Similarly, the counter (address of next character in tape buffer to be processed) in byte FE is read out and incremented to "01". Finally, the code "11" is read out of current character byte F7 and into byte 00 of memory 106, and the carrier position from left margin, stored in byte FC, is incremented to "01". The next word accessed is part of the CYCLE routine, which is then repeated as before until another code is input through the keyboard.
The relevant portions of memory 106 now have this format:
0123456789ABCDEF ______________________________________ stored code "s" 0 1000000000000000 1000000000000000 . . . D 0000000000000000 0000000000000010 E 0340000000000000 1220000000000000 F 04F000010F000000 1200000100001011 carrier position next address
A second lower case "s" is then typed, and the code "11" is similarly stored in the typewriter buffer at DO. The lower half-byte DF is set to "1":
0123456789ABCDEF ______________________________________ 0 1000000000000000 1000000000000000 . . . input "s" D 1000000000000000 1000000000000011 E 0340000000000000 1220000000000000 04F0000104000000 1200000100001011
The counter PL, in byte FF, is then incremented to "02", and the code "11"is read into byte 01 of the tape buffer. The address of the next character, in byte FE, is incremented to "02", as is the page pointer in FC.
______________________________________ 0123456789ABCDEF ______________________________________ 0 1100000000000000 1100000000000000 . . . D 0000000000000000 0000000000000110 E 0340000000000000 1220000000000000 F 04F0000104000000 1200000100002022 ______________________________________
A back space is then typed, causing the backspace code "13" to be read into the KA, KB registers; this code is then stored in the typewriter input buffer at byte DO, and the counter at DF is set to "01". The contents of various status registers are tested for any new playback request, and no change is found.
______________________________________ 0123456789ABCDEF ______________________________________ ss 0 1100000000000000 1100000000000000 . . . backspace D 1000000000000000 3000000000000111 E 0340000000000000 1220000000000000 F 04F0000104000000 1200000101002022 ______________________________________
The input code "13" is then stored in the current character byte F7, and read into the CA, CB registers for decoding.
First, the following word
CY25D: 6 0 0 0 1 0 0 0 F 0 001 0 1
causes the CA register, containing the high-order half byte of the code, to be read into the S register (ai = "6", ac = "1", stat = "F"). The next word is accessed unconditionally:
DECOD: 7 1 0 6 1 1 0 0 0 0 ODC 1 4
The contents of CB (low-order half-byte of the input code) are exclusive-or'd with the constant field value "0". Since this half-byte is not equal to zero, the next word accessed is
DE5A: 7 1 0 6 1 1 0 3 0 0 0DD 0 4
which causes the contents of CB to be exclusive-or'd with the constant field value of "3". Since the result of this operation is zero, the next word accessed is
DE15B: 7 0 3 1 1 0 0 0 6 0 010 2 2
which increments the contents of CB and sets the result into V register 116. The next branch is determined by the contents of the S register 128, which contains the high order half byte of the backspace code, or "1". The word next accessed specifies no arithmetic or memory operation, but is accessed only when the input code is identified as a backspace; it leads unconditionally to a subroutine to update various counters appropriately for backspace (box 308).
The relevant portions of memory 106 now have the format:
0123456789ABCDEF ______________________________________ 0 1100000000000000 1100000000000000 . . . D 0000000000000000 0000000000001110 E 0340000000000000 1220000000000000 F 04F0000104000000 1200000301002022 backspace
The counter in byte FE (address of next character in tape buffer to process, at present "02") is read out, decremented to "01", and restored. The backspace counter in byte FD (at present "00") is read out, incremented to "01", and restored. The counter in byte FC (carrier position from left margin, at present "02") is read out, decremented to "01", and restored. The relevant portions of memory 106 now have this format:
0123456789ABCDEF ______________________________________ 0 1100000000000000 1100000000000000 . . . D 0000000000000000 0000000000001110 E 0340000000000000 1220000000000000 F 04F0000104000000 carrier position 1200000301001112 backspace counter
An underline is then typed, setting the code "80" into registers KA, KB. This code is then stored in the typewriter buffer at DO and the counter in DF is incremented to "01".
______________________________________ 0123456789ABCDEF ______________________________________ 0 1100000000000000 1100000000000000 . . . D 8000000000000000 underline 0000000000001111 E 0340000000000000 1220000000000000 F 04F0000104000000 1200000304001112 backspace ______________________________________
The code "80" is then read into current character byte F7, decoded and identified as the code for the "underscore" command.
______________________________________ 0123456789ABCDEF ______________________________________ 0 1100000000000000 1100000000000000 . . . D 0000000000000000 0000000000011110 E 0340000000000000 1220000000000000 F 04F0000804000000 1200000004001112 ______________________________________
As a result of this identification, a subroutine (box 310, FIG. 9) is executed that recalls the most recently input code from the tape buffer register; the code "11" is read out of byte 01 and numerically converted to the code "51", representing an underlined lower case "s"; this new code is then read into current character byte F7.
______________________________________ 0123456789ABCDEF ______________________________________ 0 1100000000000000 1100000000000000 . . . D 0000000000000000 0000000000011110 E 0340000000000000 1220000000000000 F 04F0000504000000 1200000104001112 s ______________________________________
Using the counter PL stored in byte FF, the new code "51" is then read from byte F7 into byte 01 of the tape buffer, replacing the code "11" previously stored there.
______________________________________ 0123456789ABCDE ______________________________________ ss 0 1500000000000000 1100000000000000 . . . F 04F0000504000000 1200000104001112 ______________________________________
The carriage return code "33"[is next read into registers KA, KB from the keyboard. This code is first read into the typewriter buffer byte DO, then into current character byte F7, and finally into the tape buffer at byte 02. The current tape buffer pointer in byte FE is incremented to "03".
______________________________________ 0123456789ABCDEF ______________________________________ 0 1530000000000000 1130000000000000 ______________________________________
As a result of decoding steps (box 312, FIG. 9) performed on the carriage return code "33", a subroutine is executed to write onto tape the stored contents of the tape buffer.
When the tape is played back, these stored codes are decoded (boxes 313 and 314, FIG. 10) and used to direct the operation of the typewriter in typing ss followed by a carriage return.
SEARCH
The search operation is used in making corrections to recorded material. In summary, the user depresses Search button 68 once, then types in the initial word or words of the line to be found, and again depresses Search button 68. The contents of the tape are then read into tape buffer 230, one block of 100 alpha-numeric characters at a time, and the input alpha-numeric characters to be matched are compared with the corresponding initial alpha-numeric characters appearing in the buffer. If these characters do not correspond, the next block on the tape is read in and similarly compared. If a matching line is found, the typewriter stops reading the tape, types a carriage return, backs the tape up to the beginning of the matching block and waits for further input. If an End of Document code is reached before a matching line is found, the EOD light 54 is lit and the typewriter waits for further input.
In greater detail, the first depression of search button 68 generates a code "42", "Load search buffer". This code is read into current character byte F7 and decoded by a procedure essentially similar to that already described in previous examples. In response to identification of this code, a series of control words (box 316, FIG. 9) is accessed whose execution causes control logic 100 to prepare to receive input from the keyboard and to load it into the search buffer.
In the example to be described, the user wishes to search for the line beginning
abcd in a tape containing the lines:
ab
abc
abccd
End of Document
ABCD
a bcd
(tab) abcde.
In the present case, the input comparand is the string of codes
1C 20 2C 2D
which is input preceded by four spaces (code "03") to demonstrate the way in which initial positioning codes are ignored in the search.
Before control logic 100 accepts input, the contents of byte F4, upper half-byte, are tested to determine whether the machine is in Adjust or Justify mode with Transfer button 22 down. If it is in either mode, searching cannot be performed in Transfer mode. The typewriter bell 55 will ring and No Adjust light 52 will flash to alert the user. If the Adjust/Justify flag is zero, the machine is in Same mode, and the next command accessed is part of a subroutine to fetch an input character from keyboard 16.
As each code is fetched from the keyboard, it is stored in current character byte F7, and is tested to determine whether the second digit (in register CB) is "2" by execution of the following control word:
SL 25B: 7 1 0 6 1 1 0 D 0 04C 0 4
Codes ending in the digit "2" are the following:
02 Required space
12 Required backspace
22 Required tab
32 Required carriage return
42 Load search
52 Search
62 Read format block
72 Block link
82 Index
92 Set tab
A2 Clear tab
Higher combinations ending in 2 are not used.
If the input code proves to be one of these combinations, control branches to appropriate subroutines to handle the code. If the ALU output is non-zero, indicating that the second digit of the code is not equal to 2, the next word accessed is:
SL30A: 7 1 0 6 1 1 0 3 0 0 04C 1 4
Execution of this word determines whether the second digit is "3".
Codes ending in the digit "3" are the following:
03 Space
13 Backspace
23 Tab
33 Carriage return
43 Upper shift
53 Lower shift
63 Read memo
73 Line return.
Higher combinations ending in 3 are not used.
If the lower digit is not equal to 3, it will be successively tested to see if it is A, B or 8. It will be noted by reference to Table 4 (Function codes and keys) that all function codes end in one of these 5 digits. If the input code does not end in one of these digits, therefore, it is a regular Selectric code.
In the present instance, the second digit is identified as a 3. Execution of the next control word determines that the first digit is not equal to 1 (code "13" is the backspace code), and control branches to a subroutine that tests for buffer overflow, increments the counters in bytes FE and FF, and writes the input code "03" into the tape buffer at byte 00.
This procedure is repeated for the next three input codes, since each one is a space, whose code is "03".
The next input code is "1C", and is tested successively to determine whether the second digit is 2, 3, A, B or 8. Since it is none of these, the code is determined to be a regular Selectric code. After a test for buffer overflow, the counters in FE and FF are incremented and the code "1C" is stored in tape buffer 230 at byte 04. The next three input codes are treated in the same way.
After the codes for "abcd" have been input, the user depresses Search button 68 a second time. This generates the code "52", which appears in the CA, CB registers. Codes "42" and "52" together providing a search signal. Control word SL25B is again accessed to test the second digit; when this digit is found to be "2", the first digit is tested and found to be "5". As a result, execution of the next word
SL40B: 0 0 0 0 0 0 6 6 D 0 052 1 1
causes the search flag in byte F6 to be read out, and execution of the next word (unconditionally accessed)
SL65D: 7 1 7 5 1 0 0 D 0 0 061 1 0
sets this flag to zero and branches to the "SFIND" routine (box 318, FIG. 9).
The condition of the search flag determines whether, after the desired block is found on the tape, the typewriter stops or automatically plays out or transfers the tape contents.
The relevant portions of memory 106 now have the following configuration:
0123456789ABCDEF ______________________________________ comparand 0 0000122200000000 beginning of the tape 3333000D00000000 buffer . . . D 0000000000000000 typewriter input buffer 0000011111111110 E 0340000000000000 4220000000000000 F 040F000500000000 11FF000207000088 buffer counters "Search"
The SFIND routine moves the input comparand from the beginning of the tape buffer to the section of the tape buffer used as a search buffer. Leading positioning characters (spaces, tabs) are dropped during the transfer. The tape is then searched until a block that begins with the characters of the comparand is found or until an End of Document code is found. In the latter case, the End of Document light 54 is turned on and the machine waits for further input from the user.
In performing the SFIND routine, the value "65" is set into byte F8 for later use as a search buffer counter, and the first character in tape buffer 230 is read out to the CA, CB registers. Execution of control words
XL10A: 7 1 7 5 1 0 0 E 0 0 --- - -
and
XL10B: 7 1 7 6 1 1 0 2 0 0 055 1 4
first causes the digit in the CB register to be logically And'd with the value "E", and then determines whether the result has the value "2". Note that either the digit 3 or the digit 2 will give 2 as a result: 3: 0010 2: 0010 E: 1110 1110 0010 = 2 0010 = 2
This combination of steps thus identifies codes for positioning functions. When the code is found to be such a positioning code, the value of "4" in the jl field of word XL10B determines a branch to the routine to read out the next character from the tape buffer. This character is similarly tested to determine whether it is a positioning character. In the present instance, the four "03" codes, representing four initial spaces, are read out in turn. Next, the code "1C" is read out, and tested by execution of the above two words; this code is found not to be a positioning character. The F register of memory 106 now contains:
0123456789ABCDEF ______________________________________ F 040F04016000C000 Search buffer counter (F8) 11FF000C57500058 Number of codes in tape buffer-1 current character byte (F7) address of next code in tape buffer to be processed.
The codes "1C", "20", "2C" and "2D" are successively read out of bytes 04 - 07 and into bytes 65 - 68. The counters in FE and FF are restored to "08" and "00", and the value of "69" (next address in search buffer) is read into byte F8. Relevant portions of memory 106 now have the contents:
0123456789ABCDEF ______________________________________ 0 0000122200000000 beginning of tape buffer 3333000D00000000 . . . 6 0000012220000000 beginning of search buffer 00000C0CD0000000 (at byte 65) . . . E 0340000000000000 4220000000000000 F 040F240260000000 11FF000D97800080 search buffer counter
The first block on the tape, containing a line of symbols terminated by a carriage return (line end) code, is then read in to tape buffer 230. ("AA" is a tape pad character used to pad out the block to 100 characters.)
______________________________________ 0123456789ABCDEF ______________________________________ 0 13AAAAAAAAAAAAAA first block: "a return" C3AAAAAAAAAAAAAA . . . 6 AAAA012220000000 "abcd" AAAA0C0CD0000000 search comparand . . . E 0340000000000002 4220000000000000 F 040F241D6000C000 11FF000593F50082 ______________________________________
When the first block to be compared has been read into tape buffer 230 from the tape, the contents of byte F6 are read out to test for the memo/center flag.
In the present instance, this flag is not on; therefore control branches to a subroutine to fetch the first character in the tape buffer. This code "1C" is read into the CA, CB registers and the lower digit is tested to determine whether it is "3" or "2" (indicating a positioning character). An initial positioning character will be disregarded in comparing the strings of codes. This test is not performed after a first non-positioning character has been found. When the digit is found to be neither of these values, the code is next tested to determine whether it is an End of Document code. Since this code always appears in the initial position in a block, the first code in every block is tested to determine whether it is an EOD code before any comparison is performed. Since "1C" is not the EOD code, it is transferred to the KA, KB registers and the first code in the search buffer is read out to the CA, CB registers. The following control words: TSTEQ: 7 5 5 6 1 1 0 0 0 0 4783: 6 4 4 6 1 1 0 0 0 0 4784: 4 5 0 6 1 0 0 0 A 0 000 0 7
comprise a subroutine to compare the contents of the K registers and the C registers and to set status bit S0 to "0" if the contents are equal or to "1" if the contents are unequal. The condition of status bit S0 is then used to determine whether to compare the next characters in the tape buffer and search buffer, by determining the jump to one of the following words:
SF47C: 0 0 0 0 0 0 6 E 0 0 153 1 1 SF47D: 0 0 7 1 1 0 3 F 0 0 060 0 0
The first word branches to a routine to test the next character; the second word branches to a routine to reset the search buffer counter and read in the next block. In the present instance, as the first characters in tape buffer and search buffer are identical, the word SF47C is executed, and a comparison of the second code in the tape buffer ("33" ) with the second code in the search buffer ("20" ) is performed. Since these codes are not identical, the S0 status bit is set on, causing a branch to word SF 47D. The search buffer counter in FE is reset to "64", and a second block is read into the tape buffer from the tape.
The relevant portions of memory 106 now have the configuration:
0123456789ABCDEF 0 123AAAAAAAAAAAAA Second Block: C03AAAAAAAAAAAAA "ab return" . . . 6 AAAA012220000000 "abcd" AAAA0C0D00000000 search comparand . . . E 0340000000000002 4220000000000000 F 040F241D6000C060 11FF000594F50043
The first character from the tape, "1C", is first tested to determine whether it is an End of Document code. Since it is not, the code "1C" is moved to the K registers, and the first code in the search buffer ("1C") is read into the C registers. The three control words TSTEQ, 4783 and 4784 are used as before to test for identity of the contents of the C and K registers. Since the contents are identical, the S0 status bit is not set on, and control branches to subroutines to fetch the next characters from tape buffer and search buffer for comparison. These codes are both "20", and the process is therefore repeated.
The third code in the tape buffer, "33", is read into the K registers, and the third code in the search buffer, "2C", is read into the C registers. The comparison subroutine detects the inequality and sets on the S0 status bit. As a result, the search buffer counter in FE is reset to 64 and the third block is read in from the tape. The contents of memory 106 now have the configuration:
0123456789ABCDEF ______________________________________ 0 1223AAAAAAAAAAAA Third block COC3AAAAAAAAAAAA "abc return" . . . 6 AAAA012220000000 AAAA0C0CD0000000 . . . E 0340000000000002 4220000000000000 F 040F241D6000C060 11FF000595F50044
Again, the first code from the tape is fetched, tested for the End of Document code, and compared with the first code in the search buffer. The first three codes are found to be identical; the fourth code from the tape, "33", is compared with the fourth code from the search buffer, "2D", and found to be non-identical. As a result, the search buffer counter is reset and the fourth block from the tape is read in.
______________________________________ 0123456789SBCDEF ______________________________________ 0 122223AAAAAAAAAA fourth block: CCCCD3AAAAAAAAAA "abccd return" . . . . F C4CF241D60CCC060 11FF000597F50046 ______________________________________
A code-by-code comparison between this block and the comparand in the search buffer detects the inequality between the fourth code on the tape, "2C", and the fourth code in the search comparand, "2D", and sets on the S0 status bit to determine a branch to read in the next block.
The fifth and last block on this tape is an End of Document code:
EOD 0 0AAAAAAAAAAAAAAA beginning of tape buffer AAAAAAAAAAAAAAAA
The initial test for an End of Document code detects this code, and sets status bit S0 to zero. This condition determines a branch to a subroutine that turns on the End of Document light 54 and types a carriage return. Control then branches to CYCLE, the series of control words that are executed while the typewriter waits for further instructions.
If the user again keys the Search button, followed by the same input as before, and again keys the Search button, the typewriter control logic 100 will continue the search beyond the End of Document code. After the same preliminary steps as before, the next block is read into tape buffer 230:
0 AAAA3AAAAAAAAAAA next block: C0CD3AAAAAAAAAAA "ABCD return" . . . 6 AAAA012220000000 comparand AAAA0C0CD0000000 "abcd"
The first code in the tape buffer, "9C", is first tested (as before) to determine whether the second digit is "2" or "3" and thus whether the code is a positioning code, which would be ignored. When the code is found not to be a positioning code, it is tested to determine whether it is an End of Document code, and when it is found not be be, it is placed in the K registers, while the first code in the search buffer, "1C", is read out to the C registers. These two codes differ only in the upper case bit:
a = 0001 1100 = 1C
A = 1001 1100 = 9C
but the comparison subroutine (words TSTEQ, 4783 and 4784) detects the inequality and sets the status bit SO to 1, determining a branch to a routine to read in the next block.
______________________________________ 0 102223AAAAAAAAAA C30CD3AAAAAAAAAA "abcd return" ______________________________________
This block contains the same letters in the same order as the search comparand, but the first and second are separated by a space. In actual typing, such a situation might occur when the letters formed words, separated by a space. The code-by-code comparison detects the inequality between the second code in the tape buffer "03" and the second code in the search buffer "20", and as before, determines a branch to read in the next block on the tape. The next block is:
0 212222AAAAAAAAAA "tab abcd return" 3C0CD5AAAAAAAAAA . . . 6 AAAAC12220000000 "abcd" AAAA0CCCD0000000
In this block, the searched-for letters appear in the correct order, but preceded by a tab code "23". This initial code is read out to the CA, CB registers, as in preceding examples, and execution of the control words XL10A and XL10B identifies the second digit as either "2" or "3". Thus, the code is identified as an initial positioning character. As a result, execution of the next control word causes the next character in the tape buffer to be read out to the C registers, instead of comparing the first code "23" with the first code in the search buffer. The next code in the tape buffer after "23" is "1C", which when tested is found to be identical with "1C" from the search comparand. Further code-by-code comparison finds that the first four (non-positioning) characters in the tape buffer are identical with the four characters in the search comparand.
The last character in the tape buffer is a lower case "e", whose code is "25". This code is read out to the KA, KB registers. However, since the search counters PC (address of next character in search buffer) and PL (number of characters in search buffer) are found to be equal, it is determined that there are no more characters in the search buffer to be compared. This determines a branch to a subroutine whose execution causes a carriage return to be typed. The search is terminated and the typewriter waits for further instructions in CYCLE mode (box 302).
TABULATION OF DECIMAL NUMBERS
Decimal numbers will be played out in columns with the virtual decimal points (either a typed period or an assumed decimal point) aligned at the tab stop, if they are recorded in the "no-adjust" mode and a "required tab" code precedes each number (group of digits). This is accomplished in the following manner.
The format is first set. To do this, the user types "code, 1" which generates the code "2A", indicating "learn". The paper then shows
Code "2A" is read into current character byte F7 for decoding (box 306, FIG. 9), which causes a branch to control word LRNIN (in box 320): LRNIN: 0 0 7 0 0 0 3 4 D 1 1BB 0 0
This word determines an unconditional branch to the TSTBF subroutine, which tests whether the tape buffer is empty and the carrier is at the left margin. If these conditions are not met, the typewriter backspaces and rings bell 55, and awaits (in CYCLE mode) further instructions. If the conditions are met, a subroutine is next executed to type out "earn(". The paper now shows
learn(
control logic 100 then waits in CYCLE mode (box 302, FIG. 9) for further keyboard input.
The user then types the F/f key 211, generating the code "OE". Decoding of this code in the usual manner causes a branch to the FORMT routine of control words. The typewriter types out "ormat" and then returns, tabs and clears, returns, types " " and waits. The paper now shows:
learn(format
The tab counter in byte CF is reset to zero, and control logic 100 awaits tab setting by the user. Only certain characters are acceptable input: "space", "set tab", " " and ")".
The user now sets a suitable format. In the present example, he types in four spaces and then depresses Set Tab key 224, generating a column setting signal. In response to each space code "03", the carrier position from left margin, stored in byte FC, is incremented. The "Set Tab" code "92" is decoded, and determines a test of the tab counter in byte CF; if there are seven tabs already set, the tab setting is ignored. If fewer than seven tabs have been set, the current carrier position is read out and stored at the tab setting into the first available byte after C7 (the end of tape buffer portion 230 of memory 106).
In this case, "05" is stored in byte C8 as the first tab stop setting, providing a desired position for the decimal points of the numbers to be aligned. The next control word sets the contents of byte CF to "01", representing the number of tabs set. The typewriter types a "T" to indicate the tab setting. The user types four more spaces and sets a second tab, and after four more spaces types ")", indicating the right margin. The typewriter executes a carriage return and the paper now shows:
learn(format
T T )
Two tabs have been set. This information is stored in memory 106 in the lower half byte of byte CF as the digit "2". The right margin is set 15 spaces from the left margin; this information is stored in byte F1, lower half byte, as the digit "F". The tab settings at 5 and 10 spaces from the left margin are stored in the lower half bytes of bytes C8 and C9. The relevant portions of memory 106 contain:
C 0123456789ABCDEF 00000000 (tape 5A000002 number of tabs set buffer) tab settings . . . F 0123456789ABCDEF 0000000B3F000000 1FD000013F0F0000 right margin ")"
Bytes C8 through CE provide storage for seven tab settings. No more can be stored.
The user now types "code, 1" again generating the Learn code "2A". The typewriter again types out "earn(", and the user types "n" (code "26"). The input code "26" is decoded in the usual manner and in response to this code, control word LR35B is accessed (in box 320, FIG. 9):
LR35B 0 0 1 1 0 0 6 6 1 0 146 0 0,
whose execution causes the lower half-byte of byte F6 to be set to "1". This is the "no-adjust recording flag". A subroutine is next executed to type the characters "aj)" and to perform a carriage return, after which control logic 100 repeatedly executed the CYCLE routine while awaiting further input.
Depression of Nn key 209 when the typewriter system is in the LEARN mode generates a decimal point alignment instruction signal. The "no-adjust flag" in byte F6 is a corresponding alignment signal, set by control logic 100 in response to the decimal point alignment instruction signal.
The user next types in two decimal numbers to be aligned: 9000.00 and 9.0. These are each preceded by a required tab code (tabulation instruction signal), so that the sequence of input codes as stored in the typewriter buffer is:
D 0123456789ABCDEF 2333313323133000 201116112061301D required tab carriage return 9000.00 9.0 required tab
The required tab code "22" is first input and decoded. In response to this code, the value "02" in byte CF is read out (box 322, FIG. 9). The lower half byte "2" represents the number of tabs that were set; the upper half byte represents the number of required tabs. This upper digit is now reset to "1" and the value "12" is read back into byte CF. A subroutine is now executed to update the counter in byte FC, representing the carrier position from the left margin, by the number of spaces represented by the first tab, which is 5 in this case. The value "05" is then stored back into byte FC.
A subroutine is next accessed to insert the required tab code "22" into tape buffer 230. This procedure is similar to that already described for storing characters in the buffer. At the end of this procedure the relevant portions of memory 106 contain:
0 0123456789ABCDEF 2 2 required tab . . . C 00000001 tab settings at 5 and 10 5A000002 number required tabs number tabs set D 3333133231330000 typewriter buffer 01116112061301DC input characters . . . F 02 0000 carrier position from left margin 12 5011 buffer counters no adjust flag current character
The next characters are stored into the tape buffer until the next required tab code "22" is reached. This is decoded, and in response the number of required tabs in byte CF is incremented to "2". The carrier position from left margin "OC" is read out, and compared with the tab setting. Since the carrier is already to the right of the tab setting, the carrier position is restored unaltered to byte FC. The code "22" is then written into the tape buffer at the next byte, 08. The codes for "9.0" are then stored into the tape buffer in the usual manner.
The carrier return code "33" is decoded, and in response the control word DE20D is accessed:
DE20D 0 1 5 1 0 0 6 6 1 0 013 0 3
Execution of this word causes the no-adjust flag in byte F6 to be read out; it is tested by the next word,
DE25A 0 7 0 5 1 0 6 7 D 0 15A 1 4
and the value "1" in the lower half byte determines that the next word executed is OC15A,
OC15A 6 0 7 1 1 1 3 7 D 0 1F0 0 0 whose execution causes the carrier return code "33" to be altered to the required carrier return code "32", which is then stored in the next byte in the tape buffer in the usual manner. The required tab counter in the upper half byte of CF is reset to "0".
Before the contents of the tape buffer can be stored on tape, they must be edited. Editing includes deleting spaces that are followed by tab or carriage return codes; deleting tab codes that are followed by carriage return codes; and special treatment for hyphens. In addition, in the no-adjust record mode, editing includes the insertion of the necessary required backspace codes to align the decimal points in decimal numbers (or other characters) at the tab stop.
This is accomplished by the following steps. The no-adjust flag is tested and found to be "1". The buffer counter in FE is stored in FB. The characters in the tape buffer are then read out one by one and tested to determine whether the code represents a required tab. In this example, the code in byte 00 is "22", a required tab code, and identification of this code determines the execution of control word STB1D,
STB1D 3 0 7 0 1 0 3 E 0 0 163 0 1
which causes the address of the next character to be stored in byte FE. The succeeding codes "30, 31, 31, 31" are tested to determine whether they are either required tab codes or periods, and are found to be neither. The next code is "16", a period.
In response to identification of the code in byte 05 as a period ("16"), control words STB6D, STB7C and STB8B are accessed:
STB6D: 0 0 0 0 0 0 6 E D 0 ODF 1 2 STB7C: 3 7 7 2 1 1 0 0 0 0 DEO 0 1 STB8B: 2 6 6 3 1 1 3 A 0 0 OEO 7 4
The execution of these words causes read-out of the value stored in byte FE, the address of the character following the previously detected required tab code; this address is "01". This value is subtracted from the address ("05") of the "16" code, and the resulting number of spaces ("04") between the two codes is stored into FA and then decremented by one.
A subroutine to insert a required backspace code is next executed. Beginning with the final code in the buffer, "32", all codes are moved on one space; thus "32" is moved from byte OC to byte OD, and so on. After each code is moved, the address to which it is moved is compared with the address stored in FE. When the two addresses are equal (namely "01"), the equality determines a branch to a group of control words:
CS04 0 0 0 0 0 0 6 E 1 0 139 1 0 CS29 7 0 3 4 1 1 0 0 0 0 -- - - 4733 6 0 2 3 1 1 0 0 0 0 -- - - 4734 7 0 7 4 1 0 0 0 0 0 -- - - 4735 6 0 6 3 1 0 0 0 0 0 180 0 2
Execution of these words increments the address stored in byte FE to "02", which serves as the address in which the next required backspace will be inserted. The next control word
CS31D 0 0 0 0 0 0 1 0 0 0 000 0 7
causes the required backspace code "12", read out from current character byte F7 by the preceding control word, to be read into byte 01 of the tape buffer.
The buffer counter in byte FB is next incremented and tested to be certain there are not more than 99 characters in the buffer.
The process is repeated from the point at which the value stored in FA is decremented. All codes in the tape buffer, beginning with "32", are moved on one byte until the address to which a code is moved is found to be equal to the value stored in byte FE ("02"). This value is incremented to "03", a required backspace code is inserted at byte 02, the counter in FB (number of characters in buffer) is incremented to "OF", and the value in byte FA is decremented to "01".
The process is repeated twice more; at the end of this process, the value in FA is "OF", indicating that enough backspaces have been inserted to make the period coincide with the tab stop setting.
The contents of the buffer are now:
0 0123456789ABCDEF 2111133331332313 2222201116112061 required backspaces period 1 0123456789ABCDEF 3 2 required carriage return
The value in FE, which is the address at which the last backspace was inserted (04) is now used as a starting address to continue reading out the characters in the tape buffer for testing. Each code is tested to determine whether it is a required tab. The code "22" in byte OC is decoded as a required tab, and the address of the next byte, "OD", is stored in byte FE as before. Further codes are tested for required backspace or period codes, and the code "16" is detected in byte OE.
The procedure already described is repeated, but only one complete cycle is required, since only one required backspace code must be inserted (at byte OD) to make the period and the second tab stop setting coincide.
The remainder of the codes in the tape buffer are tested without finding any further required tab codes, until the final code "32" has been tested. The contents of the buffer are now:
0123456789ABCDEF 0 2111133331332131 2222201116112206 1 33 12
These codes are now recorded on tape, and during playback, the decimal numbers will be typed with their decimal points aligned at the tab stop.
If groups of digits or letters are typed in, separated by required tab codes but without decimal points, a "virtual" decimal point will be presumed at the end of each group of digits, and the group will be aligned with the space after the final digit on the tab stop. This is accomplished in the following way.
Assume that the input codes are
0 0123456789ABCDEF 2112113 2112112
representing "required tab, s, s, required tab, s, s, required return". Before this line is written onto tape, the buffer contents are edited as in the preceding example, by finding the carriage return code, and then reading out the no-adjust flag from byte F6. As before, this flag causes a branch to statistical editing, in which the codes are read out one at a time from the first byte, and tested. The initial code is tested to determine whether it is a required tab code, and when it is so identified, the address of the next character is stored in byte FE for later use in inserting required backspace codes if needed. The next two codes are successively read out and tested to determine whether each is a required tab, a required backspace, or a period. Neither of them is any of these codes. The fourth code is read out and identified as a required tab code. Identification of this code causes a branch to control word STB7A:
STB7A: 6 7 0 6 1 1 6 E 0 0 1F6 0 4
which causes the contents of byte FE to be read out; this is the address of the previous required tab code identified (if any). Since the contents of this byte are found to be non-zero, the next control word accessed is ST71B, whose only function is to provide a branch to the control word STB7C, which is the control word normally accessed after a period is detected. Thus the presence of a second required tab is taken to indicate an implied period. From this point on the operation is the same as previously described for the decimal number case; the distance between the tab stop and the implied period is stored, the codes are moved on one space in the buffer, a required backspace code is inserted, and the process will be repeated until the space following the group of letters or digits is aligned on the tab stop.
Spaces within groups of letters or digits are treated as letters or digits.
CENTERING
A line will be centered during playback, with respect to whatever margins have been selected for the playback, if the line is input at the left margin uncentered but preceded by a CENTER code "1A".
Suppose that a 100-character block is read in from the tape to tape buffer 230 containing the line:
0 0123456789ABCDEF 1A22221220A1223A AC5675D5D394653A
These codes represent
(center code) centered (space) line (carriage return)
The last code in the register, "AA", is a tape pad character, not part of the line of characters to be centered.
The right margin for playback has been set at "14" or 20 spaces:
F 0123456789ABCDEF 1 0 0 4 0 1
In playback, when the line of characters is read into tape buffer 230, the first code in the tape buffer is decoded and found to be a CENTER code (centering instruction signal). Identification of this code causes a branch to a subroutine series of control words that causes the content of the buffer to be scanned word by word to its final character; a count is kept during the scan representing the carrier position as it would be while typing the line from the left margin, taking account of backspaces; thus, this count is not necessarily the same as the number of characters or codes in the buffer.
Before the scan begins, two scanning counters are set. The address of the next character in the buffer to be accessed, stored in byte FE, is read into byte FB to serve as a scanning buffer pointer. The carrier position from the left margin, stored in byte FC, is read into byte F9 to serve as a scanning page pointer.
The codes representing the word "centered" are each in turn read out to registers 124 and 126, and tested to determine whether each is a backspace, a space or a carriage return. The scanning counters are incremented or decremented appropriately as each code is tested. The "space" code "03" in byte 08 is decoded and causes status register 128 to be set to correspond to a space code; this setting is used to determine that the scan should continue to the word beyond the space.
The second word is then scanned until the final code "33" (line end signal) is reached. This code is used to set the status register, and this setting is used to terminate the scan subroutine at this character.
When the scan has been completed, the final content of the scanning page pointer ("OD") in byte F9, representing the final position of the carrier from the left margin if the line were typed beginning at the left margin, is compared with the right margin ("14") by control words SC10B and AA6C:
SC10B: 3 7 5 4 1 1 0 0 0 0 085 1 0 AA6C: 2 6 4 3 1 1 6 0 0 0 19C 5 1
When the line is found to fall within the margin, the resulting difference ("07") is divided by two (any remainder from dividing an odd number of spaces is dropped), and the half difference ("03") is read into U, V registers 114 and 116 by control words CN35D and CN40A:
CN35D: 5 0 3 0 1 0 0 0 0 0 15E 1 0 CN40A: 4 0 2 0 1 0 0 0 0 0 09F 0 1 (If the line does not fall within the margins, the line is typed from the left margin and the right margin is overridden.) The difference is then used as a counter in spacing the carrier from the left margin. After the appropriate number of spaces (three in this example) have been typed, the line of characters is typed out.
It will be noted that this process does not depend on the margins in use when the line was recorded; thus a centered line will remain centered even though the margins may be shifted.