|Publication number||USRE30671 E|
|Application number||US 06/055,888|
|Publication date||Jul 7, 1981|
|Filing date||Jul 9, 1979|
|Priority date||Jul 9, 1979|
|Publication number||055888, 06055888, US RE30671 E, US RE30671E, US-E-RE30671, USRE30671 E, USRE30671E|
|Inventors||Sydney W. Poland|
|Original Assignee||Texas Instruments Incorporated|
|Export Citation||BiBTeX, EndNote, RefMan|
|Patent Citations (6), Non-Patent Citations (1), Referenced by (8), Classifications (8)|
|External Links: USPTO, USPTO Assignment, Espacenet|
This application is a continuation-in-part of Ser. No. 714,464 filed Aug. 16, 1976.
This invention relates to microprocessor systems and more specifically to electronic calculators having the capability of solving higher order or complex mathematic problems. It should become evident, moreover, that my invention has utility in other applications making use of microprocessor technology, such as video games, to increase the level of sophistication of the functions performed by the microprocessor.
Electronic calculators have evolved from comparatively simple machines which add, subtract, multiply and divide the data entered into the calculator to machines which can perform sophisticated financial and mathematical operations such as, for example, changing polar coordinates to rectangular coordinates or solving compound or annuity interest problems. The calculator systems developed to date have had a single or multiple read-only-memory (ROM's) in which groups of instruction words are stored as microcode. The different groups of instruction words stored in the ROM cause the calculator's arithmetic unit, memory and display to cooperate to perform desired mathematical operations when instruction words are read out of the ROM. The ROM is addressed or controlled by a keyboard or other input means associated with the electronic calculator or microprocessor system. Thus, the depression of a key causes a selected group of instruction words to be read out of the ROM and these instruction words are provided to circuits controlling the inputting of data, the storage of data and the manipulation of data to perform the operation or function invoked by the key depressed. Thus, the instruction words generated by the ROM cause data to be entered, stored, and manipulated using, for instance, an arithmetic unit to perform such functions as adding, subtracting, multiplying dividing or performing higher order or complex mathematical operations on the data.
Each instruction word typically has a length of eight to sixteen binary bits, although microprocessors having longer or shorter instruction words are well within the state of the art. The performance of even a relatively simple operation, such as adding two floating point numbers, requires a group of many instruction words. For instance, the addition of two floating point numbers may require as many as 75 instruction words having thirteen bits each, thus absorbing 975 bits of ROM area to be able of performing such a simple operation. Similarly, the subtraction operation has a comparable set of instruction words and so on for other operations and functions. Of course, portions of such sets may be shared for certain operations.
Modern electronic calculators now perform sophisticated arithmetic and financial computations such as, for example, squaring, taking square roots, converting from polar to rectangular coordinates, computing logorithms and trigometric relationships, compounding interest, and other such computations. These computations have typically been implemented into the electronic calculator by increasing the size of the ROM to accommodate the larger number of instruction words associated with these higher order computations. While the size of commercially available ROM's has increased during the past several years, the library of computational programs desired to be implemented in an electronic calculator has grown at even a faster rate. For example, it is desirable to have an electronic calculator capable of performing an entire library of computations related to electrical engineering, mechanical engineering, surveying, or the like. However, an electronic engineering library of computations could comprise, for instance, 45 computational programs or more, each of which require as many as 600 instruction words implemented in a read-only-memory. Thus an entire computational library would include for example, on the order of 27,000 instruction words of thirteen bits each which would require many conventional chips to implement the electrical engineering library in a conventional calculator. Of course, using a large number of chips can significantly increase the cost of an electronic calculator as well as making the packaging for hand-held use more difficult and unduly increasing power consumption.
In the prior art it is also known that an electronic calculator may be provided with the ability to perform higher order calculators by making the calculator programmable and storing the program in a Random Access Memory (RAM) or on a magnetic tape or card. But, in this case, the program is not permanently stored in the calculator, but must be read into the calculator's memories at least each separate time the calculator is energized; thus, such a program is not directly accessible from the calculator's keyboard.
It is an object, therefore, of this invention to improve electronic calculators and microprocessors.
It is another object of this invention to increase the number of computational programs stored in an electronic calculator without correspondingly increasing the size of the ROM(s) implemented in the electronic calculator.
It is a further object of this invention to make such computational programs directly accessible from the calculator's keyboard.
It is another object of this invention to store a large number of computational programs in the hand-held electronic calculator using a small number of chips.
It is yet another object of this invention to selectively equip an electronic calculator or microprocessor with different libraries of higher order function, which functions may be accessed from the calculator's keyboard and/or from a program stored in a programmable calculator.
It is still another object of this invention that the particular library with which a calculator is equipped may be changed by the end user thereof.
The aforementioned objects are satisfied as is now described. Generally, and in accordance with the preferred embodiment of the invention, an electronic calculator is equipped with first and second ROM's. The first ROM stores a plurality of groups of instruction words, each group effective for controlling an arithmetic unit to perform basic arithmetic operations such as adding, subtracting, multiplying and dividing, taking square roots, forming logarithmic and trigonometric operations and so forth in response to the operation of the first set of keys on a calculator keyboard. Each of these groups of these instruction words contains on the order of 75 to 200 instruction words. Thus, the first ROM is used as a main ROM as in a conventional calculator microprocessor. The second ROM stores a plurality of sets of program codes. Each set of program codes are capable of performing a higher order mathematical program and are read out of the second ROM in response to operation of a second set of keys on the calculator keyboard. Each program code (which comprises eight binary bits in the embodiment disclosed) is effective for addressing a group of instruction words stored in the first ROM in much the same manner as depression of a key in the first set of keys. Thus, a set of program codes may mimic the depression of a plurality of keys in the first set of keys. Therefore, each higher order mathematical program is preferably a series of the basic arithmetic operations stored in the first ROM combined with operations for entry of data and/or constants. The second ROM reads out program codes which serve to address the groups of instruction words stored in the first ROM. By using the second ROM to store such higher order calculational programs, a second set of keys can be used to input commands triggering a long chain of basic arithmetic operations, including data entry operations, without the chance of human error and at a much greater speed than a human operator. Thus, the second ROM, in the preferred embodiment, stores sets of program codes, each program code effective for addressing the first ROM in much the same manner as a single depression of a key in the first set of keys; therefore, a set of such program codes may be advantageously utilized for a large number of higher order calculational programs in an electronic calculator. Since the second ROM must only store on the order of eight bits, or so, to select or address an entire group of instruction words, it should be evident to one trained in the art by utilizing the second ROM herein disclosed that great economies can be effected in total ROM area, when compared with prior art techniques. While I have referred to first and second sets of keys on the calculator keyboard, it is well known that a single physical key may be used to perform several functions and therefore the keys referred to in the first and second sets may be physically the same keys.
In a further aspect, the second ROM is preferably provided by a chip or chips which may be temporarily plugged into the calculator or mocroprocessor system by the end user thereof. Preferably, the calculator or microprocessor system is operated with one or more such second ROM chips, which chips are selected from a group of chips for operation in the calculator or microprocessor system by the end user thereof, according to the end user's particular needs at any given time. In the embodiment disclosed, a major portion of the second ROM is provided by a plugged-in chip and minor portion is provided by a permanently wired-in chip. Thus, in the embodiment disclosed, the end user may select which higher order functions are performable according to which particular second ROM chip is plugged into the calculator while a few high order functions stored in the permanently wired chip is inherently a part of the calculator system disclosed. The second ROM is disposed in a module for ease of handling by the end user of the calculator or microprocessor.
While a calculator system is disclosed herein in detail, it should be evident to those skilled in the art that my invention may also be used in applications other than calculators where a microprocessor with high order capability may be advantageously utilized.
The novel features believed characteristic of the invention are set forth in the appended claims. The invention itself, however, as well as further objects and advantages thereof, will be best understood by reference to the following detailed description of an illustrative embodiment, when read in conjunction with the drawings, wherein:
FIG. 1 is a pictorial view of an electronic portable calculator of the type which may embody the invention;
FIG. 2 is a simplified block diagram of a multi-chip calculator system which may be utilized in practicing the present invention;
FIGS. 3a-3b are detailed block diagrams of the arithmetic chip featured in FIG. 2;
FIG. 4 is a detailed block diagram of the SCOM chip featured in FIG. 2;
FIGS. 5a-5e depict in representative form the instruction words decoded by the arithmetic and SCOM chips;
FIG. 5f depicts the originization of the EXT signal;
FIG. 5g depicts the first ROM address as stored in the address register;
FIG. 5h depicts the instruction words decoded on the second ROM chip and selected instruction words decoded on the arithmetic chip, but which may be conveniently employed in connection with the utilization of second ROM chip;
FIGS. 6a-6b are timing diagrams showing the timing of various parts of the multi-chip system;
FIG. 7 is a representation of the keyboard input matrix;
FIGS. 8a-8d are a composite schematic diagram of the arithmetic chip of FIG. 2;
FIGS. 9a-9e are a composite schematic diagram of the SCOM chip of FIG. 2;
FIGS. 10a-10r are schematics of certain circuits used in FIGS. 8a-8d and 9a-9e;
FIG. 11 is a block diagram of a modern electronic calculator equipped with one embodiment of the invention;
FIG. 12 is a block diagram of another embodiment of the invention which may be utilized with a modern electronic calculator of the type depicted in FIG. 11;
FIG. 13 is a pictorial view of an electronic calculator having an opening for removeably receiving a packaged second second ROM chip;
FIG. 14 is a simplified block diagram of a multi-chip calculator system utilizing the present invention;
FIG. 15 is a function diagram of the logical organization of data stored in the second ROM;
FIG. 16 depicts the variable boundary between data and program steps in the calculator's memory;
FIG. 17 is a block diagram of the second ROM chip;
FIGS. 18a-18i form a composite schematic diagram of the second ROM chip; and
FIG. 19 is a representation of data stored in the memory registers on the double SCOM chips.
FIGS. 1, 5h, 7, and 11-19 accompany this patent. FIGS. 2, 3a-3b, 4, 5a-5g, 6a-6b, 8a-8d, 9a-9e and 10a-10r are hereby incorporated by reference from U.S. Pat. No. 3,900,722, entitled "Multi-Chip Calculator System Having Cycle and Subcycle Timing Generators", which issued on Aug. 19, 1975 to Michael J. Cochran and Charles P. Grant, Jr. and which is assigned to the assignee of this invention.
Referring to FIG. 1, an electronic portable calculator of the type which may employ features of this invention is shown in pictorial form. The calculator 1 comprises the keyboard 2 and the display 3. The display 3, in one embodiment, consists of twelve digits or characters, each provided by an array of light emitting diodes or characters, such provided by an array of light emitting diodes, a liquid crystal display, gas discharge tube or other display means. The display is preferably implemented to having eight mantissa digits, two exponent digits, and two character places for negative signs, etc., (one for the mantissa and one for the exponent), thereby permitting outputting the data in scientific notation for instance. Of course, the type of display and the number of digits displayed is a design choice. Ordinarily, the diplay would be of the seven segment or eight segment variety, with provisions for indicating a decimal point for each digit. The display 2 includes a number of keys (0-9), a decimal point key, the conventional plus (+), minus (-), multiply (×), divide (÷), and equal (=) keys. Further the keyboard perferably includes keys for exponentation (Yx and inverse Yx) and trigonometric relationships (Sine X, Cosine X, and Tangent X). The calculator is further provided with OP Code Keys for performing special functions such as slope, intercept, plotting operations, alphanumeric operations and the like. Further, the calculator may be provided with keys for storing (STO) and recalling (RCL) data from memory, for clearing the calculator (CLR) and for clearing the last entry (CE). The keys used to access higher order functions will be described subsequently.
In FIG. 11, there is shown in block diagram form, the basic elements of a modern electronic calculator implemented on one or more semiconductor chips. It is to be understood that the block diagram of FIG. 11 is not intended to represent the block diagram of a detailed representation of electronic calculators, but is merely intended to indicate how the additional elements of an electronic calculator system having higher order capability are incorporated into a typical electronic calculator. Subsequently, it will be explained in detail how my invention may be praticed with the multi-chip calculator system depicted in FIGS. 2-19. The calculator of FIG. 11, is shown with a clock 40 which provides clocking signals for transferring data throughout the electronic calculator and provides scanning signals for scanning the display 3 and keyboard 2 or other data entry means. The inputs for the keyboard 2 are provided to keyboard logic 41 which provides an address in response to the depression of a particular key to program counter 23. It should be evident to one skilled in the art that keyboard logic 41, as well as other logic circuitry, may be implemented in the calculator as the elements described or may be implemented as a part of read only memory 20 and instruction word decoder logic 96.
The address received from keyboard logic 41 is inserted into program counter 23 and is utilized in addressing the First Read-Only-Memory (ROM) 20. First ROM 20 contains the microcode for performing basic arithmetic operations and outputs an instruction word in response to the address contained in program counter 23. Program counter typically includes an add-one circuit for incrementing the address in program counter 23. Thus, program counter 23 causes a group of instruction words to be read out of First ROM 20 in response to the incrementing of program counter 23, each instruction word being read out during an instruction cycle. The group of instruction words read out of First ROM 20 corresponds to the address received from keyboard logic 41.
The instruction words read out of First ROM 20 are decoded by instruction word decoder logic 96 to provide instruction commands to program counter 23, arithmetic unit 45 and data control 44. The instruction commands provide to program counter 23 enable branches to be executed by inserting a new address into program counter 23 in response to a branch instruction command stored in First ROM 20. Instruction commands provided to data control 44 and arithmetic unit 45 control the manipulation of numeric data in the calculator. Instruction word decoder 96 is also interconnected with a counter 47 and a latch 46 in my electronic calculator system having higher order math capability.
Data control 44 is interconnected with display register 49, operational registers 43 and with the arithmetic unit 45. Display register 49 stores the number displayed by the display 3 and has associated therewith a plurality of operational registers 43 which are used in conjunction with arithmetic unit 45 to perform arithmetic operations in response to particular instruction commands. Output drivers 42, interconnect display register 49 with a display 3 for decoding the electrical signal, stored in display register 49 and for driving display 3. Data control 44 comprises a series of selector gates for interconnecting the appropriate operational registers 43 and display register 49 with the arithmetic unit 45, with portions of instruction words, (if need be), or with logic signals from keyboard 2 (if need be).
Numeric data is inputted into display register 49 from keyboard 2 either by a data path from keyboard logic 41 via data control 44 under the control of appropriate instruction commands or by inputting selected portions of an appropriate instruction word in response to selected instruction commands. The electronic calculator system hereinbefore described, that being the portion shown within the reference a dashed line in FIG. 11, basically corresponds to the type of electronic calculators known in the prior art. Exemplary of the prior art calculators systems is the calculator system depicted in FIGS. 2-10.
Also in FIG. 11, there is shown a counter 47 and a latch 46 which is responsive to outputs from instruction word decoder logic 96. The counter 47 has an output for addressing a Second ROM 48. Second ROM 48 outputs a program code in response to the inputted address, the program codes being outputted via latch 46 to program counter 23. When keyboard logic 41 decodes keyboard outputs indicating that a higher order math calculation is to be executed, the higher order math calculation being preferably a series of basis arithmetic functions and operations of the type implemented in first ROM 20, keyboard 41 preferably input an address into program counter 23 which causes First ROM 20 to branch to a location therein for calling a program from Second ROM 48. When a program is called from Second ROM 48, instruction word decoder logic 96 first sets latch 46 to permit the program codes outputted by Second ROM 48 to be inputted into program counter 23. The program codes outputted by Second ROM 48 effectively transmit an address into program counter 23 for addressing First ROM 20. The first such code preferably causes the First ROM 20 to branch to a location for performing the first basic arithmetic operation or function required by the Second ROM 48 program. The program codes may take the same logical format, for instance, as the output from keyboard logic 41. When calling a program from Second ROM 48, instruction word decoder logic 96 also transmits an address into counter 47, the address being the first location in Second ROM 48 of the called program. It should be evident, moreover, that counter 47 could be loaded with an address directly from keyboard logic 41 in lieu of from instruction decoder logic 96, this being essentially a design choice.
After the first program code is read out of Second ROM 48 via latch 46 and loaded into program counter 23 then First ROM 20 cycles through a group of instruction words to accomplish the indicated basic arithmetic operation or function. Of course, the number of instruction cycles required to accomplish the indicated operation or function depends on, for instance, a number of instructions contained for that basic operation or function in First ROM 20. As is well known, those operations or functions which are accessible via keyboard logic 41 from keyboard 2, usually contain instruction words for causing the display to be enabled at the end of the function or operation addressed in First ROM 20. Since, however, another program code is to be read from Second ROM 48 and inserted into program 23 upon accomplishment of the indicated function or operation, counter 47 includes an add-one circuit which is responsive to, for instance, a display command or other such commands located near or at the end of a group of instruction words in First ROM 20 for accomplishing a basic arithmetic operation or a function. When the display command or other such command is decoded by instruction word decoder logic 96, the add-one circuit in counter 47 increments and causes Second ROM 48 to read out the next program code of the called program via the set latch 46 to program counter 23, which in turn causes First ROM 20 to cycle through another group of instructions to accomplish the function or operation indicated by the outputted program code. Again, towards the end of this next basic arithmetic function or operation, a display code or other such code will be decoded in instruction word decoder logic 96 causing the add-one circuit in counter 47 to increment counter 47, the cycle repeating itself.
The advantages of Second ROM 48 and associated counter 47 and latch 45 should be evident to one trained in the art. This system permits equipping an electronic calculator with the capability of performing higher order calculation programs: for instance, changing polar coordinates to rectangular coordinates, doing financial calculations or solving complex engineering equations using significantly less total ROM area than would be required if such programs were implemented only in First ROM 20. Additionally, it should be evident that while the foregoing discussion has suggested that a program code read from Second ROM 48 mimics keyboard logic outputs from keyboard logic 41, the program codes read from Second ROM 48 could, in lieu thereof or in addition thereto, have codes which do not mimic the outputs from keyboard logic 41, but rather, for instance, would cause the program counter 23 to branch to locations in First ROM 20 which are not directly accessible from the keyboard. Thus an output from Second ROM 48 may cause program counter 23 to branch to a location in First ROM 20 which could not be accessed directly from the keyboard 2 via keyboard logic 41. One purpose for such a program code would be a program code in a called program to indicate that the end of the program had been reached. This program code, which I shall refer to as the "return" program code, preferably causes program counter 23 to branch to an address location in First ROM 20 which would contain a group of instructions for resetting latch 46 and for displaying the contents of display register 49. The display instruction preferably follows the reset latch instruction, so that when the display command causes counter 47 to increment (if so used), no branching will occur in response thereto at program counter 23. Also latch 46 inhibits outputs from Second ROM 48 from being inserted into program counter 23 whenever a display instruction or other such instruction is decoded by instruction word decoder logic 96 incrementing the add-one circuit in counter 47 when the calculator has not called a program from Second ROM 48. Referring now to FIG. 12, there is shown a partial block diagram of a second embodiment of my calculator system having higher math capability. The latch 46 and counter 47 are interconnected with program counter 23 and instruction word decoder 96 as done in the embodiment shown in FIG. 11. In fact, this embodiment is similar to the embodiment in FIG. 11, except that a superroutine stack register 91 and an associated superroutine latch 92 have been interconnected with counter 23; stack 91 is responsive to outputs from instruction word decoder logic 96. Thus, the program codes outputted from Second ROM 48 are passed to program counter 23 via latch 46; counter 47 is used to address Second ROM 18 and is responsive to instruction word decoder logic 96 for inserting an initial address therein and for incrementing that address in response to decoded display commands, for instance. The superroutine stack 91 functions to either receive an address from counter 47 or to output an address to counter 47, both functions being in response to outputs from instruction word decoder logic 96. Superroutine stack 91 is a multi-level stack and functions in normal last-in-first-out mode. Superroutine stack 91 may be advantageously utilized in calculator systems with higher math capability so that the program codes stored in Second ROM 48, in addition to prescribing addresses for performing basic arithmetic operations and functions according to microcode stored in First ROM 20, may also use First ROM 20 for addressing Second ROM 48 itself. The advantages of this superroutine stack 91 may be best seen by example. For instance, Second ROM 48 may be implemented with program codes to perform the factorial function, and during the calculation of statistical programs, such as combinations and permutations, it is often advantageious to be able to use the factorial function. If a factorial function and the statistical combination function are both implemented in Second ROM 48, then the combination function program may call the factorial function, if a superroutine stack 91 is utilized. The point of exit from the combination function program must be stored so that the program can return thereafter accomplishing the factorial function. Thus, the address in counter 47 to which the program must return in Second ROM 48 after accomplishing the factorial function is stored in superroutine stack 91 because a new set of addresses will be loaded into counter 47 when the factorial function is executed. Whenever an address has been stored in superroutine stack 91, superroutine latch 92 is set. Further, as aforementioned, the factorial program will preferably have a "return" program code loaded in Second ROM 48 at the end thereof. This return code normally causes latch 46 to be reset. However, the return code is inhibited from setting latch 46 when superroutine latch 92 has been set. Latch 46 is not reset at this time because the program codes being read from the Second ROM 48 must continue to be inserted in program counter 23 to carry out the main program, eg, the combination function program in the aforementioned example. Although the return code is not used to reset latch 16 if superroutine latch 92 is set, the return code is used to "pop" the address in the stack back into counter 47. Since stack 91 is a multi-level stack, several levels of "superroutines" may be utilized.
Preferably, the second ROM 48 is implemented by a ROM chip which is provided with a package permitting it to be plugged into the aforementioned electronic calculator. The second ROM chip is preferably packaged in a form to facilitate handling by the end user of the calculator to permit easy installation of that chip into the electronic calculator. Preferably, the electronic calculator system of this invention receives, at any given time, one second ROM chip, but the operator thereof selects which particular second ROM chip is plugged into the calculator system. The operator ROM chips each programmed to perform different types of high order functions. For instance, one or a plurality of second ROM chips may be provided for performing statistical problems while another ROM chip or chips is provided for performing surveying problems; still yet another second ROM chip or chips may be provided for performing aviation or navigational problems, for instance. Thus the end user of the calculator can configure a basic calculator to perform many different types of high order functions depending upon the particular library available in the particular second ROM chip or chips plugged into the electronic calculator of this invention.
Referring to FIG. 13, there is shown an electronic calculator having an opening 4 for exposing contacts 5, which are connected to the electronics of the calculator. Opening 4 is preferably provided on the rear side of the calculator case 1 as shown in the FIG. 1 and forms, with contact 5, a receptacle for receiving module 48a. Opening 4 is adapted to removably receive the second ROM 48, which is not shown in FIG. 13, but which is disposed in module 48a. Second ROM chip module 48a has contacts (not shown) which mate with contacts 5 for connecting the second ROM 48 therein to the electronic calculator. Door 6 may be closed to retain module 48a in opening 4 during normal operation.
Having described how the second ROM is advantageously used with an electronic calculator, a particular embodiment of the second ROM in a particular calculator is now described.
Referring now to FIG. 14, there is shown a detailed block diagram of an specific embodiment of a programmable electronic calculator employing the second ROM 48 of this invention. In FIG. 14, there is shown a plurality of chips (48', 10, 12a, 12b, 13, 14a-d and 18). Chips 10, 12a, 12b, 13, and 18 have heretofore been described in some detail in prior U.S. Patents and Patent Applications and therefore reference will be made to U.S. Patents or U.S. Patent Applications, as the case may be, for a detailed description of these chips. The following discussion will basicly relate to how chips 10, 12a, 12b and 13 cooperate with a second ROM chip 48'; which is described hereafter in detail, to implement a calculator having high order capability.
The calculator's arithmetic chip 10 has a plurality of Registers 50a-50e for storing numeric data, an Arithmetic Unit 55 for performing arithmetic operations on the data stored in Registers 50a-e, Flag Registers 53a-b for storing a plurality of flags, a keyboard register 54 which is (1) loadable with a decoded keyboard address derived from the calculator's keyboard, (2) loadable from a subroutine register or (3) loadable from the second ROM chip 48'. Arithmetic chip 10 is described in detail in aforementioned U.S. Pat. No. 3,900,722 which issued to Michael J. Cochran and Charles P. Grant, Jr. on Aug. 19, 1975 and which is assigned to the assignee of this invention. Line 21, column 4 through line 31, column 44 of U.S. Pat. No. 3,900,722 is hereby incorporated herein by reference.
U.S. Pat. No. 3,900,722 discloses a multiple chip calculator system employing the aforementioned arithmetic chip 10 and a scanning and read-only-memory (SCOM) chip. U.S. Pat. No. 3,900,722 discloses that eight SCOM chips may be utilized in a single calculator system. Referring again to FIG. 14, chips 12a and 12b are each double SCOM chips; a double SCOM chip is the equivalent to two SCOM chips of the type disclosed in U.S. Pat. No. 3,900,722 implemented on a single chip of silicon, with the F and G registers thereof replaced by a single eight register memory of the type disclosed in U.S. Patent Application Ser. No. 745,157 which was filed Nov. 26, 1976 and which is assigned to the assignee of this invention.
External ROM chip 13 provides for increased instruction word storage capacity. The ROMs 20a and 20b on double SCOM chips 12a and 12b and the ROM 20c on chip 13 provide the first ROM 20 for storing the microcode which controls the operation of the calculator system. The microcode stored in ROM's 20a-20c is listed in Tables IIa-IIc, respectively. ROM 20c is a 1 K×13 bit ROM while ROMs 20a-20b are each 2.5 K×13 bit ROMs.
Referring briefly to Tables IIa-IIc, the first column thereof is the hexidecimal address of the microcode instruction word appearing in the third column. The second column identifies the chip in which the microcode is stored. TMC-582 and TMC-583 are the two double SCOM chips 12a and 12b; TMC-571 is the external ROM chip 13. The fourth through nineteenth columns contain instruction words whose addresses are incremented by one for each column, reading from left to right. Thus, in Table IIa, the seventeen instruction words in the first row, columns three through nineteen are located at hexidecimal addresses 0000 through 0010. The instruction words are in hexidecimal format also and correspond to the instruction words identified in FIGS. 5a-5h.
As explained in U.S. Pat. No. 3,900,722, the arithmetic chip 10 and the double SCOM chips 12a and 12b are interconnected by lines for exchanging the following control signals: external (EXT), input/output (I/O), instruction words (IRG), and IDLE. External is a serial data channel which may be used, for instance, for addressing ROMs 20a-20c using an address stored in the keyboard register 54 when the PREG bit thereof is a logical one or for inputting or outputting serial data depending on the instruction word outputted on IRG (when the PREG bit is a logical zero). I/O is a four bit parallel data channel for transferring data in bit parallel, digit serial fashion under control of construction words outputted from ROMs 20a-20c. IRG is a serial channel for transmitting the instruction word from the particular ROM 20a-20c controlling the oeration of the system.
In FIG. 14, there are shown four multi-register chips 14a-14d which are connected to the I/O, IRG, and IDLE lines. These multi-register chips are essentially random access memory (RAM) chips which are utilized for storing the data used by the calculator system and programmed functions. It should be evident that the numbers of such chips as well as the size of the RAMS thereon is a design choice.
The magnetic card reader chip 35 is responsive to EXT, IRG and IDLE for inputting digital information to the calculator system from magnetic cards or outputting digital information from the calculator system to magnetic cards. Chip 35 is described in greater detail in U.S. Pat. Application 622,288 filed Oct. 10, 1975 and now U.S. Pat. No. 4,006,455. Of course, the use of a card reader is a design choice. If chip 35 is not utilized, the diode and switch 7 shown in FIG. 7 should be omitted. Switch 7 closes in response to a card being inserted into the card reading mechanism associated with chip 35.
Printer chip 18 may be used to provide the calculator of this invention with printing capability. It should be evident that the utilization of printer chip 18 is a design choice and further this chip may be either permanently installed in a printer calculator or may be installed in a print cradle, such as the PC 100a cradle manufactured by Texas Instruments Incorporated of Dallas, Texas which print cradle may be interfaced with a hand-held calculator provided with printing capability. Chip 18 is described in greater detail in U.S. Pat. Application Ser. No. 428,492 filed Dec. 26, 1973 and now U.S. Pat. No. 4,020,465.
The second ROM chip 48' is interconnected with the calculator system via external, IRG and IDLE. Chip 48' includes a second ROM 48 of the type heretofore discussed plus various control circuits for interfacing it with the remainder of the calculator system disclosed. As previously mentioned, second ROM chip 48' is preferably removable from the calculator of this invention and therefore a plug assembly 43 is provided for ease of removal and insertion. Preferably, the calculator of this invention is provided with a plurality of such second ROM chips 48', at least any one of which may be connected into the calculator system at any given time. This plurality of ROM chips 48' are programmed to provide different types of problem solving capabilities. For instance, one chip 48' might be implemented with programs for solving statistical problems while another might solve financial, surveying, navigation, medical, mechanical or electrical engineering problems, or the like. Moreover, it should become evident to those skilled in the art, that a plurality of such chips 48' might be interfaced with a calculator at one time if such chips were provided with a chip selection means for identifying which second ROM chip 48' is being addressed at any given time. Such chip selection circuits, while not used in the embodiment herein disclosed, are well known in the art.
While the second ROM of this invention is described as a read-only-memory, it should be evident to those skilled in the art that second ROM might be an electrically alterable device, such as an EPROM, or the like. Similarly, a bubble memory or other such non-volatile memory means could also be utilized as a second ROM.
In Table VIII there is a listing of program codes used in a general purpose second ROM chip 48' to perform such operations as: performing a diagnostic checks, complex math operations, matrix math operations, matrix inversion, annuity and compound interest operations, permutation and combination calculations and the like. The program codes are listed in columns 3-19 of Table VII. The address of the program code in column three is given in column one and the addresses of the other program codes on the same line increment by one for each column reading from left to right.
As it has been previously discussed, the second ROM stores a plurality of program codes for performing high order functions. The organization of these program codes on chip 48' is now described in detail. In this embodiment, the program codes comprise a pair of four bit binary coded decimal (BCD) digits. Therefore, these codes may be any number between 00 and 99.
Referring now to FIG. 15, there is shown a functional diagram of how the program codes are organized on the second ROM of chip 48' and preferably a second ROM implemented in a pluggable package. In this embodiment ROM 48 stores on the order of 5,000 eight bit program codes. Referring now to FIG. 15, a rectangle thereon represents an eight bit code outputtable from ROM 48 in response to an address. Second ROM 48 stores a plurality of programs, which are for ease of addressing, arranged on "pages". Several programs are preferably allocated to each page. When a program is second ROM 48 is to be accessed from the calculator's keyboard, the operator depresses the "2ND" key and the "program" key (PGM) in this embodiment. The operator next enters a two digit number indicating the page upon which the program he or she wishes to access exists. For instance, if he or she wishes to access a program on page twelve, he or she would depress the one and two number keys. The operator knows upon which page the desired program exists because a program directory is preferably supplied along with a pluggable second ROM chip 48'. The operator then preferably enters a label to uniquely identify the particular program which is desired on the page previously entered. This is done by depressing either a particular label key A--E or A'--E' or the subroutine key (SBR) followed by a non-number key (e.g., SBR,=; or SBR, X2 ; or the like). Depressing the subroutine key and entering a three digit address preferably causes a branch to the location equal to the sum of the inputted address plus the address of the first program code on the inputted page.
The calculator is preferably permanently programmed to first read out the program code at location 0000 which indicates the number of pages stored on that particular second ROM 48. This number is compared with the inputting page number to assure that the inputted page number exists in second ROM 48. Next the security code at location 0001 is preferably outputted for examination, the function of which will be later described. The next step is to address second ROM 48 with the entered page location, the address being derived by multiplying the inputted page number by two. For example, if page 02 is entered, then the address to be used is 0004. At address 0004 is a top half of the address (the thousands and hundreds digits) for the beginning point of the second page. At address 0005 is the bottom half of the address (the tens and units digits). The program codes at locations 0004 and 0005 define the address where the second page begins in second ROM 48. Locations 0006 and 0007 will also be read out to provide the address of the beginning point of the third page, which is indicative of the ending point of the programs stored on the second page. Thus the address of the second page derived from locations 0004 and 0005 is used as the starting point for a label search and the address of a third page is used to define the ending point of that search.
The program in second ROM 48 is caused to branch to the program code which occurs at the starting point of page two. At page two in second ROM 48, the label search is commenced by reading out program codes sequentially until either the label being searched for is detected or the beginning point of page three is encountered, indicating that the label being searched for does not exist on the page selected. The label being searched for is either a particular label program code (Table III code 10-19) or the label program code (Table III, code 76) followed by a particular non-numeral program code. When the last page is selected, then the address of the last page, as well as the last address on that page are read out to fulfill the function of reading out the addresses of pages 2 and 3 in the foregoing example. This sequence of events is also diagrammatically depicted in FIG. 15.
Referring now to Table III, there is shown a list of the program codes 00-99 preferably used in the calculator system of this invention along with the corresponding functions performed by these codes and the key sequences used to generate the codes when generated from the keyboard. As can be seen, certain program codes may not be directly generated from the calculator's keyboard. The functions performed by the program codes listed in Table III should be evident to those skilled in the art based on the description set forth in Table III. By way of further clarification, however, the inverse function key (INV) is used to perform the inverse of the function indicated for selected keys. For instance, the inverse function key when combined with the LNx key causes the calculator to take the number ex in lieu of taking the natural logorithm of the number x. The indirect addressing key (IND, which must be used in combination with the 2ND key, of course) is used with the memory operation keys and "go to" or "conditional go to" keys (GTO, X×T or X≧T) to indicate that the number following the program code does not describe either the memory used (if a memory operation) or the branching location (if a go to or conditional go to operation), but rather identifies the particular memory whose contents define either the particular memory to be used (if a memory operation) or the branch address (if a go to type instruction).
Referring again to Table III, program codes 00-09 define the ten numeral keys and the remaining program codes are defined according to the following convention. The first number thereof identifies the keyboard row in which the key is located and the second number defines the keyboard column in which the key is located, for the basic functions which may be accessed by a single key push. For functions accessed by multiple key push sequences, selected merged program codes are utilized. For instance, when the 2ND key is combined with another key to perform the operations indicated, the number 5 is added to the basic program code (without a carry) to generate the merged program code. Thus, for example, the label A is stored as a program code "11" whereas the label A', which requires the 2ND key to be actuated before the A key, is stored as program code "16". Program codes which otherwise would define those keys performing the numeral functions (eg, 0-9), are reserved for selected merged program codes or for program code not directly generated at the keyboard. For example, program codes 62, 63, 64, 72, 73, 74, 83 and 84 are used for merged program codes wherein the IND key is used. Program codes 82 and 92, which are not defined according to the foregoing convention, define a heirarchy address function and the "return" function. The "return" function has already been mentioned and the heirarchy address function is used to address the eight registers on one of the double SCOM chips, which are set aside for heirarchy control purposes. This calculator system utilizes the algebraic operating system disclosed in U.S. Patent Application Ser. No. 708,958 filed July 26, 1976, for heirarchy control purposes. The heirarchy address code (82) is followed by another program code to define the heirarchy register and operation involved or to define a conditional return, whose function will be mentioned later. The meaning of the program code following the heirarchy address code is set forth in Table IV.
The use of such codes which are not directly accessible from the keyboard permit the accomplishment to special functions or entry in to date areas which are normally isolated from the operator.
The operation code (OP) is used with a following program code for calling the special functions identified in Table V. These routines are implemented in this calculator either in microcode alone or by using second ROM addressing techniques. The second ROM are for such operation code functions is located in the constant ROM areas of double SCOM chips 12a and 12b. Approximately half of the constant ROM in double SCOM chip 12a is used for storing constants in the manner contemplated by U.S. Pat. No. 3,900,722 while the other half of that constant ROM and all of the constant ROM in double SCOM 12b is used for storing program codes, as defined in Table III, in the manner generally set forth in U.S. Patent Application Ser. No. 714,464, filed Aug. 16, 1976. The contents of the constant ROMs are listed in Table VI hereof. Eight two digit program codes are stored in each constant storage area in the constant ROMs. The codes are stored from right to left; thus the first program code in constant area sixteen is an 82. The addresses of these program codes for discussion purposes will be: Constant number hyphen one of eight locations. Thus, the address of the first program code on constant area sixteen (82) is 16-0, while the third program doce in constant area eighteen (43) is 18-2. Locations 16-0 through 24-2 contain a slope-intercept routine. The other routines in the constant ROM area are defined in Table VIa. As can be seen, the functions stored in the constant ROM areas are accessed either by OP codes or by normal keyboard entries; for example, the polar to rectangular conversion function is stored in the constant ROM areas and is accessed by depressing the P→R key on the keyboard.
The program codes in Table VI make use of the conditional return program code (82 followed by 20). The conditional return evokes a return function only when all the program codes for the accessed function have been read out. For instance, if the variance is being calculated, the conditional return stored at locations 26-2 and 26-3 is ignored so that after having found the mean according to the program codes at locations 24-3 through 29-2 is performed. The hierarchy address function (program codes 82,-) used with several routines to address the hierarchy registers in order to maximize the addressable storage area available in RAM chips 14a-14d.
When the operator desires to utilize his or her own program in lieu of a program stored in the first or second ROM's, he or she may do so by an appropriate key sequence for storing keyboard enterable program codes of Table III in RAMs 14a-14d. RAMs 14a-14d may also be used for storage of numeric data, i.e., the results of the calculations performed by this electronic calculator. Normally, RAMs 14a-14d provide a storage for storing 480 program codes while RAMs 14c and 14d provide 60 addressable memory locations for storing numeric data. By depressing 2ND, OP, 1, 6, the operator may determine which data configuration RAMs 14a-14d are in; in this case, the number 479.59 would be outputted. The number to the left of the decimal point is the maximum address in RAMs 14a-14d for program steps, while the number to the right is the maximum address in RAMs 14a-14d of memory registers.
By inputting a number between one and ten, 2ND, OP, 1, 7; the inputted number is used as the number of decodes of memory registers set aside in RAMs 14a-14d and the resulting configuration is displayed in the aforementioned manner. For example, inputting 7, 2ND, OP, 1, 7 results in RAMs 14a-14d being repartitioned with seventy memory registers and 400 program step locations; also 399.69 would appear in the display.
RAMs 14a-14d can store up to 120 sixteen digit words and can be partitioned to store as many as 960 program codes with no addressable memory registers to as few as 160 program codes with 100 addressable memories in this embodiment. As can be seen from FIG. 16, the addressable memory locations may be traded at the rate of 10 for 80 program step locations when repartitioning takes place. Of course, the precise number of memories as well as the range of possible data configurations is a design choice.
The partitioning data is stored in digits 3-8 of register 13 on double SCOM chip 14b (see FIG. 19). Digits 8-6 holds the actual address in RAMs 14a-14d defining the location of memory 00 while digits 5--5 hold the largest number assigned to a memory. Thus, in the normal 479.59 configuration, 060 is stored in digits 8-6 while 059 is stored in digits 5-3. Attempting to branch to a program location equal to or greater than the contents of digits 8-6 causes an error condition, as does addressing a memory greater than the number in digits 5-3 of register 13.
Referring again briefly to FIG. 14, the down load operational code may be utilized to permit a page in second ROM 48 to be loaded into the program code storage area of RAMs 14a-14d. The security code in the second ROM 48 to be down loaded must be a 00 to permit the down loading to occur. A 01 security code inhibits the down loading operation, thereby helping to maintain the secrecy of the programs stored in second ROM 48 should that be desired. If the security code bit is set, then the programs in the second ROM may be utilized to perform the function indicated but the series of program codes may not be read out of the calculator to the operator. After a program is down loaded into RAMs 14a-14d, the operator has free access for examining the program and altering it as he or she sees fit.
Operational (OP) codes 00-07 are used for alphanumeric printing operations when the calculator of this invention includes a printer. For example, a thermal printer in combination with printing chip 18, such as that provided by the PC-100a disk unit manufactured by Texas Instruments Incorporated of Dallas, Tex. may be used. The twenty character position PC-100a printer may be utilized for printing a line of alphanumeric characters chosen by the operator by loading five two-digit character codes from the display register into four printing buffers. These two-digit alphanumeric character codes are listed in Table VII. The display register is first loaded with five two-digit codes from the keyboard, which are transferred to one of the buffers by OP01-OP04 codes; of course, each buffer stores one fourth of a line of characters.
The contents of the buffers are printed by a 2ND, OP, 0, 5 key sequence or by encountering 69, 05 program codes from either the RAMs 14a-14d or second ROM 48.
OP code 06 causes the printing of the contents of one buffer and the numeric contents of the display register. OP code 07 prints an asterisk in the column corresponding to the interger portion of the number then in the display register, provided that number is in the range of 0-19. Thus, OP code 07 is preferably used for plotting a series of answers obtained by the calculator. Of course, the range 0 to 19 is a design choice and, of course, to make better use of this plotting capability, the answers to be plotted are preferably first normalized to occur within the range 0 to 19.
Referring now to FIG. 17, there is shown a block diagram of second ROM chip 48'. The second ROM 48 implemented thereon, is provided by binary coded decimal (BCD) ROM 600. The output of BCD ROM 600, which outputs the program codes listed in TABLE III, for instance, is connected to serializers 605 and 606. Serializer 605 converts both the high digit and low digit of the program code to serial format and supplies it to a digit selector. The serializer 606 converts only the high digit of the program code to serial and also supplies it to digit selector 607. Digit selector 607 provides the output of serializer 605 to external output control 608 in response to a decoded FETCH instruction or supplies the output of serializer 606 to external output control 608 in response to a decoded FETCH HIGH instruction.
BCD ROM 600 is addressed by an address in program counter 601. The address in program counter 601 preferably is a BCD four digit numeral. The address in program counter 601 is incremented each time a FETCH (but not a FETCH HIGH) instruction is decoded and is maintained in BCD format by an one bit/BCD corrector 604. Program counter 601 may be loaded one digit at a time with a digit appearing on External (EXT) via digit controls 602a-602d. Digit strobe 603 controls which one of the digit control 602a-602d is enabled; digit strobe 603 sequentially enables digit controls 602a-602d in response to a decoded UNLOAD PC (unload program counter) or a LOAD PC (load program counter) instruction. Digit strobe 603 is reset by a decoded FETCH instruction. The digit control 602a-602d enabled by digit strobe 603 inputs a single digit (four bits) of the four digit number from the EXT bus in response to a decoded LOAD PC instruction, the number being obtained from the bits occurring during state times S3-S6 on the EXT bus. Also, the enabled digit control 602a-602d outputs a digit from program counter 601 to the EXT bus in response to a decoded UNLOAD PC instruction.
State time generator 609 outputs an indication to state time PLA 610 of which one of the 16 possible state times of an instruction cycle the calculator is in. State time generator 609 is responsive to IDLE for maintaining the state times generated thereby in phase with state times generator on the arithmetic chip 10 or double SCOM chips 12a and 12b, for instance. State time PLA 610 outputs selected timing signals to the various logic circuits and also to serial instruction decode 611. Serial instruction decode 611 is also responsive to the serial instruction words appearing on IRG. Serial instruction decode 611 decodes the aforementioned FETCH, FETCH HIGH, UNLOAD PC and LOAD PC instructions.
External output control 608 outputs the serialized low and high program code digits or the serialized high digit alone from digit selector 607 in response to the FETCH and FETCH HIGH instruction, respectively, and outputs the digit from the enabled digit control 602a-602d in response to an UNLOAD PC instruction, the output from external output control being provided to the EXTERNAL bus.
Considering FIGS. 3a and 3b with FIG. 17, the following discussion examines the flow of data between second ROM chips 48', arithmetic chip 10 and the main ROMs 20a-20c. When a program is to be called from second ROM chip 48' according to the aforementioned 2ND, PGM, page number and label key sequence, the location 0000 is first loaded into the program 601. This may be done for instance by (1) zeroing a selected register 50a-50e, which loads the zero in register R5 65. As disclosed in the incorporated by reference U.S. Pat. No. 3,900,722, register R5 65 is automatically loaded with the least significant digit after some arithmetic operation involving the arithmetic unit and Register R5 65 may be loaded with the least significant digit in keyboard board register 54 in response to a KRR5 instruction. Also the least significant digit of keyboard register 54 may be loaded with the contents of register R5 65 in response to a R5KR instruction. Now, the zero digit in register R5 65 is loaded into the least significant digit position of keyboard register 54. After having reset digit strobe with a FETCH instruction, the zero is loaded into each of the four digits of program counter 601 by four sequential LOAD PC instructions, thereby transferring the zero in the LSD of the keyboard register into all digit positions of program counter 601. Then a FETCH HIGH instruction is issued followed by a load keyboard with EXTERNAL (EXTKR) instruction for loading high digit of the program code outputted from ROM 600 into the keyboard register. The contents of keyboard register 54 is then loaded into register R5 65 and thence into a register 50a-50e using an R5→Adder instruction (FIG. 5b). This high digit may then be shifted in its register to the next more sigificant digit position by register shift instructions (FIG. 5b). A FETCH instruction then follows, which is followed by a EXTKR, KRR5 and R5→Adder instructions to load the low digit into the register in which the high digit had been previously loaded, thereby providing the high and low digits in one of the operational registers 50a-50e. This number may then be subtracted with the inputted page number to determine whether the inputted page number is available in ROM 600.
As can be seen, having an R5 register of a single digit length complicates the transferring of the low and high order digits of the program code into an operational register 50a-50e. It should be evident that an eight bit register R5 65 would simplify this process; the method herein described is used because register R5 in the pre-existing arithmetic chip 10 only has four bit positions. Modification to the above described instruction sequence for a calculator system having an eight bit R5 register 54 should be evident to those skilled in the art.
It should be also evident to those skilled in the art that this addressing sequence could be simplified if the I/O bus were used in lieu of EXT. Then, however, additional connections would be necessary to interface the second ROM chip 48' with the rest of the calculator system, thereby complicating the plug assembly for interfacing chip 48' with the remainder of the calculator system.
Assuming that the inputted page number is available in ROM 600, the inputted page number is multiplied by two and the resulting address is loaded one digit at a time into program counter 601 via register R5 65, keyboard register 54 and the EXT bus. As has been previously discussed, the two program codes at that location and the following location in ROM 600 are read out thereof one digit at a time using a sequence of FETCH HIGH, EXTKR, KRR5, KR→Adder, SHIFT, FETCH, EXTKR, KRR5, R5→Adder, SHIFT instructions and so forth in the manner previously set forth for four digits. At this time, the four digit address of the first program code for the inputted page number has been loaded into a selected register 50a-50e. This process is then repeated for the next two program codes, which are loaded into another register, this address defining the first program code on the page immediately following the inputted page number. The difference of these two numbers is taken and stored and the address of the program code on the inputted page is then loaded one digit at a time into program counter 601 by generally reversing the above sequence and substituting the FETCH and FETCH HIGH instructions with LOAD PC instructions, thereby loading program counter 601 with the address of the first program code on the inputted page number. The program codes are then read out sequencially and compared with the inputted label, the calculator testing for a match thereof. For each FETCH operation accomplished during this label search, the aforementioned difference is decremented by one. If the decrementing difference becomes equal to zero before a match is found, the calculator generates an error condition inasmuch as the label being searched for does not exist on the particular page inputted by the operator. Once the inputted label is detected, the outputted program codes are loaded into program counter 54 which in turn is used to address main ROMs 20a-20c when a PREG instruction is generated telling main ROMs 20a-20c to branch on the address being outputted on EXT. The microcode at that address is then read out in the usual manner to accomplish the function indicated by the outputted program code, that sequence of events taking between fifty and several thousand instruction cycles, for instance. At the end of this sequence of instructions, a flag is tested to determine whether another program code is to be read from second ROM 48, or whether a program code is to be read from the program code storage area in RAMs 14a-14c, whether a program code is to be read from the aforementioned constant ROM area in double SCOM chips 12a or 12b or whether the calculator is simply to await another keyboard input by the operator. This flag is a memory on one of the double SCOM chips; the control of which the above-mentioned elements control calculator operation will be subsequently discussed. Assuming control is to be directed back to second ROM 48, FETCH and PREG instructions will again be issued to cause the calculator to branch to the location defined by the subsequent program code in second ROM 48. This process will be repeated until a RETURN program code is loaded into keyboard register 54, and main ROM 20a-20c branches to the location defined thereby; there instructions transfer control back to normal keyboard inputs and the display is activated with the contents of register A, unless of course, the above-mentioned 2ND, PRGM, page number, label key sequence occurred as a separate chain in a user inputted program in RAMs 14a-14d, in which case, control would be then returned to the program thereat.
It has previously been indicated that after the page number has been inputted, a label search is commenced on that page by inputting an appropriate label, i.e. either the labels A-E or A'-E' or the subroutine key (SBR) combined with a non-numeric key (indicating that such key is being used as a label) or a three digit number (which is treated as a relative address, as aformentioned). It should be appreciated that data may be entered into the memories, including the display register, after the page number is inputted and before the label or relative address is inputted. In fact, many of the programs in the embodiment of second ROM 48 programmed according to Table VIII assume that the number in the display at the time the label is inputted is to be used during the execution of the program identified by the label.
Referring now briefly to FIG. 19, there is set out the utilization of the sixteen registers on the two double SCOM chips 12a and 12b. Each register can store up to sixteen digits, each of which has four bits, of course.
Registers 1-8 and 12, as well as digits 1 and 2 in register 13 are reserved for heirarchy control, although registers 1-8 may be addressed from the second ROM using the aforementioned heirarchy address program code.
Register 0 is reserved for: (1) ten user flags, (2) the RAM/Constant ROM Program Counter and Program Source Flag, (3) last key entry and (4) a fixed point display indicator. The Program Source Flag in digit 3 and the digit 15 flag in Register B 53b (FIG. 3a) define where calculator control is to be passed after the present set of instruction words from first ROM 20 are executed. If flag B 15 is set, then the calculator is under control of a program either in (1) RAM's 14a-d, (2) second ROM 48 or (3) the second ROM portion of the constant ROMs on double SCOM chips 12a or 12b. If flag B 15 is reset, the calculator is under normal keyboard control. The program Source Flag is a 0 if control is to be returned to RAM 14d-d area; a 1 through 7 of control is to be passed to second ROM chip 48'; or an 8 or 9 if control is to be passed to the constant ROM area.
Registers 14 and 15 are utilized to permit superroutining of the programs in RAMs 14a-d or in second ROM chip 48'. Thus after control passes to the element specified by the current program control flag, the stack implemented by registers 14 and 15 is popped and the location and new program control flag previously in level one thereof is inserted into digits 7-3 of register 0. Of course, when the number of superroutine levels in the stack is one or greater, as indicated by the number in digit 0 of register 15. The stack is pushed (i.e., another level of superroutining is added) when (1) a function stored in the constant ROM area (e.g. P→R) is encountered; (2) a label is encountered (e.g. A-E or A'E'); (3) a subroutine program code or key depression followed by either a three digit address or a non-numeral label address (which initiates either a branch or a label search in the element presently controlling operation and if the second ROM chip 48' is the controlling element, the label search is limited to the present page); or (4) program codes or key depressions for 2ND, PGM, and then A-E' or SBR and label (e.g. SBR X2 or SBR=) or SBR and a three digit relative address (initiating either a label search on the indicated page or a branch to a specific program code on that page whose address is determined by adding the relative address to the address of the first program code on that page). As can be seen, six levels of such routines may be employed in this embodiment, with digit 0 of Register 15 indicating the number of levels actually being utilized at any given time.
Register 13 stores the addresses of the useable data storage area in RAMs 14a-d, which may be varied or reconfigured by the operator inputting appropriate OP codes, as previously mentioned. Digit 0 of register 13 contains a flag indicating whether angular results are to be provided in degrees, radians or grads.
Register 11 is used as the T register, for the comparisons made in the "conditional go to" program codes, while register 10 stores eight program codes during operations under RAM 14a-d or constant ROM control, at which time the eight programs stored in a constant area or register in RAM being accessed are temporarily stored in register 10 to simplify the extraction of the program code to be used to address first ROM 20.
Register 9 contains the old and new page numbers which allows the user to change pages easily. Register 9 also contains information about the program size, size of the RAM and also the program's security flag, which may be stored in second ROM 48, if desired, as forementioned.
Referring now to composite FIGS. 18a-18i, there is shown a detailed logic diagram of second ROM chip 48'. BCD ROM 600 is implemented as a conventional virtual ground type ROM of the type disclosed in U.S. Pat. No. 3,934,233, entitled "Read-Only-Memory For Electronic Calculator", which issued Jan. 20, 1976 and is assigned to the assignee of this invention. Decoders 620 and 621 used in addressing ROM 600 are important features of this invention which permit ROM 600 to be addressed using BCD data without wasted space within ROM 600. The decoders heretofore known in the prior art, such as those exemplified by U.S. Pat. No. 3,934,233, decode either binary, octal, or hexadecimal data, as the case may be. These decoders may be used with a ROM to decode BCD data, of course; however, in that case, large portions of the ROM would go unused inasmuch as hexadecimal numbers 11 through 16 would be decodable, but have no need to be decoded. Using the addressing scheme herein disclosed, permits the addressing of ROM 600 with BCD data without the wasted space within the ROM which would otherwise result with conventional decoders.
ROM 600 is implemented as a 5000×8 bit array for storing 5000 eight bit program codes, the addresses thereof being the BCD encoded numerals 0000-4999. These four numerals are stored in program counter 601. Decoders 620 and 621 are able to decode these 5000 addresses without decoding the non-BCD codes often seen in the binary data contained in a register such as program counter 601. As will be seen, the ROM metal line decoder 620 uniquely decodes the one of 125 metal lines while the ROM difusion line decoder 621 decodes one out of forty difusion lines for each bit in a program code. Inasmuch as 125×40 equals 5000, 5000 program codes in ROM 600 will be uniquely identified by metal decoder 620 and difusion decoder 621.
Metal decoder 620 comprises a plurality of one of five decoders. These one of five decoders are provided in a three level cascaded arrangement inashuch as 5×5×5 equals 125. Referring to dashed lines B1-B5, it can be seen that the dashed line B1 encompasses a one of five decoder, as do references dashed lines B2-B5. The inputs of one of five decoders B1-B5 are connected to the outputs of one of five decoder C1, all of which are used to perform a one out of twenty-five decode. One of five decoders C2-C5 are identical to one of five decoders B1-B5. The five outputs from one of five decoders C2-C5 are each coupled to one of five decoders like B1-B5 (not shown) for providing the decoding of metal lines 26-125. The inputs of one of five decoders C1-C5 are connected to the output of a third level one of five decoder identified by a reference line D. The B level decoders (e.g. B1-B5) are responsive to the A1-A3 bits outputted from program counter 601, while the C level decoders are responsive to the A7-A5 bits and the D level decoder is responsive to the A9-A11 bits from program counter 601. The remaining bits, (e.g. A0, A4, A8, A12, A13, and A14) are decoded by diffusion decoder 621, for providing a one out of forty decode. Diffusion decoder 621 is divided into eight sections 621a-621h for addressing the eight bits of the addressed program code. As can be seen decoder section 621a has one output line (Po) one ground line and 39 intermediate diffusions, inasmuch as ROM 600 is of the virtual ground type. Decoder sections 621b-621h are identical to section 621a, but output the P1 -P7 bits of the program code.
It should be evident that decoder 621 performs a one out of two decode for address lines A0, A4 and A8 and performs a one out of five decode for address lines A12-A14. It should be evident to one skilled in the art, moreover, that other configurations of decoders 620 and 621 could be utilized. For instance, metal decoder 620 could be arranged to perform a one out of 250 decode by doubling the size of that decoder and adding a one out of two decoder of line A0, for instance, in front of the D level decoders, while diffusion decoder 621 would perform a one of twenty decode by deleting the A0 address line 0 and collapsing the size thereof by deleting the odd numbered diffusion lines.
It should further be evident to those skilled in the art that similar BCD only addressing schemes may be used with other sizes of ROMs. For instance, a 7000 word ROM may be BCD addressed with an one out of 250 metal decoder (2×5×5×5) and an one out of twenty-eight difusion decoder (2×2×7). As can be seen; the numbers in the parenthesis are the prime number factors of 7000.
Diffusion decoders sections 621a-621h output the P0 -P7 bits of the program, respectively. The P0 -P7 bits are outputted serially on external during state times S3 -S10 in response to a decoded FETCH instruction while bits P4 -P7 are to be outputted serially on external during S3 -S6 in response to decoder FETCH HIGH instruction, as aforementioned. The P0 -P7 bits from decoder 621 are connected to bus 623 when strobed by shift register 622 beginning at S2φ2 for the P0 bit and when enabled by logic 607a in response to a decoded FETCH instruction. Bits P4 -P7 are conducted to bus 623 starting at state time S2φ2 when strobed by shift register 622 provided logic 607b receives a FETCH HIGH command. Bus 623 is coupled to the EXT line via external output buffer 624 when enabled by external output control 608. Control 608, in combination with logic 625, couples bus 623 to buffer 624 in response to either a FETCH or FETCH HIGH command. The data on bus 623 is one-half bit early due to a one-half bit delay in buffer 624.
Program counter 601 is provided by a 151/2 bit shift register, comprising thirty-one inverters. The other half bit a delay occurs in the one bit adder/BCD corrector 604, thereby providing sixteen bits of storage for storing four BCD numerals. The least significant digit in program counter 601 is loadable from a four bit serial numeral appearing on EXT during state times S3 -S6 via digit control 602a in response to a LOAD PC command. As can be seen from FIG. 18, digit control 602a inserts a new digit in the least significant digit position in program counter 601 by coupling the data on EXT to inverter 626 and open-circuiting transfer gate 627 connecting inverter 628 to inverter 626. Inverters 626 and 628 are two of the thirty-one inverters in program counter 601. Digit control 602a also outputs to bus 629 serial data stored in program counter 601 when enabled by digit strobe 603, the digit appearing on line 629 being one-half bit early compared to the time at which it will be outputted on EXT in response to a decoded UNLOAD PC instruction.
Digit controls 602b-602d are identical to digit control 602a, except that they are connected to program counter 601 at appropriate places in the shift register therein to interface with the next to the least significant digit through most significant digit positions during the S3 -S6 state time period. Bus 629 is connected to external output control 608 which functions in combination with logic 630 for conducting the BCD digit outputted from the enabled digit control 602a-602d through to EXT during S3 -S6 in response to a decoded UNLOAD PC instruction. Bus 629 is one-half bit early compared to the data on EXT, because of the one-half bit delay associated with output buffer 624.
Digit strobe 603 is comprised of a four bit ring shift register counter for sequentially enabling one of the digit controls 602a-602d. Shift register 603 advances in response to a LOAD PC or UNLOAD PC command by logic 631; shift register 603 for enabling the LSD digit decoder 602a in response to a decoded FETCH instruction by a logic 632.
The four digit BCD number stored in program counter 601 shifts through program counter 601 and from the output thereof back to the input thereof via the one bit adder/BCD corrector 604 each instruction cycle. The contents of shift register 601 is coupled to thirty ROM address buffers 633 during S15.φ2 through S0.φ1. The output of the thirty address buffers 633 provide the A0 -A14 and A0 -A14 outputs to the metal decoder 620 and difusion decoder 621. Only fifteen stages of the shift register in program counter 601 are outputted to ROM 600 via buffers 633 and decoders 620 and 621, inasmuch as the most significant bit of the most significant digit in program counter 601 need not be decoded when the largest address is 4999. It should be evident to one trained in the art, however, to utilize the outputs of all stages and to increase the size of the aforementioned decoder 620 or 621 to accomodate extra address lines for using larger addresses than 4999.
One bit adder/BCD corrector 604 is a single bit, serial adder that adds one to the stream of for BCD digits circulating through it from program counter 601 in response to a decoded FETCH instruction. During NON-FETCH (including FETCH HIGH) instructions, the four BCD digits circulate through one bit adder/BCD corrector 604 without the add one operation being performed. The one bit adder/BCD corrector 604 does a "look ahead" at the serial stream of data exiting from program counter 601 in order to determine if BCD correction is necessary when an add one operation is to be accomplished. When corrector 604 receives the least significant bit of a digit, it is also provided with the most significant bit of that digit for the "look ahead" operation. Corrector 604 is also provided with a clock signal, BCD CORRECT, for indicating to corrector 604 when the least significant bit of a digit is being received thereby. If during this time period the least significant digit is being inputted and a FETCH instruction has been decoded, one will be simply added to the least significant digit unless the first and last bits of that digit are both a logical one, (i.e., a decimal nine has been outputted), then in lieu of adding one, which would form the illegal BCD code 1010, a 0000 is outputted from corrector 604 in the corresponding four state times and an add one operation is accomplished on the next more significant digit via carry circuit 633 in corrector 604. Should that digit contain a nine, the above operation repeats and, if not, a one is added to that digit.
In one bit adder/BCD corrector 604, adder gates 634 perform the add operation when a one is outputted from add one insertion gate 635 unless inhibited by gate 636. Gate 635 is responsive to a decoded FETCH instruction and state time S15φ2 for inserting a logical one into adder 634 in the least significant bit of the least significant digit or for inserting a one in the least significant bit when enabled by carry circuit 633. Gate 636 is responsive to a decoded FETCH instruction, the A0 and A3 bits from program counter 601 and the output of gate 635 for generating four logical zeros when a BCD nine is to be incremented during a FETCH instruction. Gate 636 is enabled by timing signal BCD correct at S4 φ1, S8 φ1, S12 φ1 and S0 φ1, the BCD correct signal being delayed 11/2 state times by a logic 637. Thus once gate 636 outputs a logical zero disabling the output from adder 634, that condition remains for four state times until the BCD correct signal is again generated from PLA 610. Carry circuit 633 is responsive to adder 634 for generating carries within a digit and to gate 636 for generating carries between digits.
The state time generator 609 comprises sixteen state time drivers, the first of which is responsive to a timing signal on IDLE for sequencing the state times generated thereby with the state times generated on the other chips in the calculator system. The outputs from the sixteen state time drivers are supplied to a PLA 610 for providing various timing signals used, for instance, for outputting the program code during S3-S10, receiving and outputting single digit addresses during S3-S6 and the like. PLA 610 also outputs in serial fashion four serial trains of digits mimicking the LOAD PC, UNLOAD PC, FETCH HIGH and FETCH instructions which are outputted from main ROM 20a-20c or IRG. Of course, IRG also transmits many instructions which are not decoded on chip 48'.
These four serial bit trains are supplied to four serial instruction decoder circuits E1-E4 in decoder 611, along with the instruction words appearing on IRG. Each decoder in serial instruction decoder 611 performs an exclusive OR function on the data from IRG and one of the bit trains from PLA 610. If the exclusive OR function is satisfied for all bit positions of the instruction word (indicating that there was a match between the instruction word outputted and the bit train from PLA 610), then either a LOAD PC, UNLOAD PC, FETCH HIGH or FETCH instruction has been decoded, depending, of course, on which bit train is provided to the particular decoder for which the exclusive OR function was satisfied. Cross-coupled gates 638 perform exclusive OR function and discharge NODE 639 when a mismatch occurs anytime during the exclusive OR operation. The decoder circuitry encompassed by reference lines E2-E4.
It should be remembered that in the calculator system disclosed, an instruction is normally decoded during one instruction cycle and performed during the following instruction cycle. Inasmuch as the UNLOAD PC, FETCH HIGH AND FETCH operations output data on EXT and considering that the keyboard register 54 in arithmetic chip 10 must be sensitized to input this data by a EXTKR instruction, the data to appear on EXT from chip 48' must appear one instruction cycle later than the normal instruction cycle for executing decoded instructions. That is, the FETCH, FETCH HIGH and UNLOAD PC instructions result in data being outputted on external during the second instruction cycle following decoding. ROM 600 is a relatively large ROM, so for FETCH, or FETCH HIGH instructions the precharge cycle begins during the beginning of the instruction cycle immediately following the decoding of the instruction (by the FETCH M1 and FETCH HIGH M1 signals) whereas the conditional discharge occurs about one instruction cycle later. Thus ROM percharge circuitry 640 is responsive to FETCH M1 and FETCH HIGH M1 whereas the logic 625, 607a, 607b, add one/BCD corrector 604, logic 632 and the like are sensitized to delayed FETCH instructions FETCH M2 or FETCH M10.
I have described my invention in connection with certain specific embodiments thereof. It is to be understood that modification may now suggest itself to those skilled in the art and that this invention is not limited to the specific embodiment disclosed, except as set forth in the appended claims. ##SPC1## ##SPC2##
TABLE III______________________________________PROGRAM CODE FUNCTION KEY(s)______________________________________00 0 001 1 102 2 203 3 304 4 405 5 506 6 607 7 708 8 809 9 910 E1 2nd, E11 A A12 B B13 C C14 D D15 E E16 A1 2nd, A17 B1 2nd, B18 C1 2nd, C19 D1 2nd, D20 Clear 2ND, CLR21 2nd 2nd22 Inverse Function INV23 LNX LNX24 Clear Entry CE25 Clear CLR26 2nd 2nd, 2nd27 Inverse Function 2nd, INV28 log 2nd, log29 Clear Program 2nd, CP30 Tangent 2nd, TAN31 Learn LRN32 Exchange display and X ⃡ T T register33 X2 X234 ##STR1## ##STR2##35 1/X 1/X36 Program Page 2nd, PGM37 Polar to Rectangular 2nd, P → R38 Sine 2nd, Sin39 Cosine 2nd, COS40 Indirect Addressing 2nd, IND41 Single Step SST42 Store in Memory # STO43 Recall from Memory # RCL44 Sum into Memory # SUM45 Yx Yx46 Insert Program Code 2nd, INS47 Clear Memories 2nd, CMs48 Exchange Display and 2nd, EXC Memory #49 Multiply Display into 2nd, prod Memory #50 Absolute Value 2nd, |x|51 Back Step BST52 Exponent Entry EE53 ( (54 ) )55 ÷ ÷56 Delete Program Code 2nd, DEL57 Engineering Notation 2nd, ENG58 Fixed Point Notation 2nd, FIX59 Integer 2nd, INT60 Degree 2nd, DEG61 Go To GTO62 Indirect Program Page # 2ND, PGM 2ND, IND63 Exchange Indirect Memory 2ND, EXC # with display 2ND, IND64 Multiply Display Into 2ND, PROD Indirect Memory # 2ND, IND65 Multiply X66 Pause 2nd, PAUSE67 Go To # if x = t 2nd, x = t68 No Operation 2nd, NOP69 Operation Code # 2nd, OP70 Radians 2nd, RAD71 Subroutine Call SBR72 Store in Indirect STO, 2ND, Memory # IND73 Recall Indirect RCL, 2ND Memory # IND74 Add Display into SUM, 2ND Indirect Memory # IND75 Minus -76 Lable Key 2nd, LBL77 Go To # if x ≧ t 2nd, x ≧ t78 Insert Data Point 2nd, Σ +79 Mean 2nd, --X80 Grad GRD81 Reset RST82 Hierarchy Address Not directly accessible83 Go to Indirect Address GTO, 2ND IND84 Operation Code Indirect # 2ND, OP 2ND, IND85 Plus +86 Set Flag # 2nd, ST FLG87 If Flag # Set, Go To # 2nd, IF FLG88 Degrees, Minutes, Seconds 2nd, DMS89 π 2nd, π90 List Program 2nd, LIST91 Run/Stop R/S92 Return INV, SBR93 Decimal Point .94 Change Sign +/-95 Equals =96 Write 2nd, Write97 Decrement Register # 2nd, DSZ and Go To # when zero98 Advance Paper 2nd, PAP99 Print 2nd, PRT______________________________________
TABLE IV______________________________________Program codes following an heirarchy address code (82)FIRST DIGIT FUNCTION______________________________________0 store1 recall2 conditional return (second digit is ignored)3 sum into4 multiply into5 subtract from6 divide into7 "8 "9 "______________________________________SECOND DIGIT HEIRARCHY REGISTER0 no operation1 12 23 34 45 56 67 78 89 no operation______________________________________
TABLE V______________________________________Codes Following OP Code (69)CODE MEANING______________________________________ Initialize for alphanumeric printing01 Fill far left quarter of print buffer02 Fill next to left quarter of print buffer03 Fill next to right quarter of print buffer04 Fill far right quarter of print buffer05 Print the buffer as filled with OPS 01-0406 Print display plus contents of OP 0407 Plot asterisk in column number contained in display register (0-19)08 List labels09 Download page10 Signum11 Variance12 Slope, intercept13 Correlation14 y'15 x'16 See current partition RAM17 Repartition RAM18 If not error - Set flag 719 If error - Set flag 720' Increment memory 0-92930'' Decrement memory 0-939______________________________________ ##SPC3##
TABLE VIa______________________________________LOCATIONS ROUTINE______________________________________16-0-21-6 m,b21-7-23-1 X123-2-24-2 Y124-3-26-3 mean26-4-29-2 variance29-3-34-4 standard deviation34-5-39-7 correlation coefficient(R)40-0-42-3 Σ+42-4-47-1 Σ-47-2-51-2 R → P51-3-53-6 P → R53-7-58-4 D.MS (degrees, decimal point, minutes and seconds)58-5-63-3 D.d (degrees, decimal point, fractional degree)______________________________________
TABLE VII______________________________________ ALPHANUMERICALPHANUMERIC CHARACTER CODE______________________________________A 13B 14C 15D 16E 17F 21G 22H 23I 24J 25K 26L 27M 30N 31O 32P 33Q 34R 35S 36T 37U 41V 42W 43X 44Y 45Z 460 011 022 033 044 055 066 077 108 119 12blank 00- 20. 40+ 47x 50* 51√ 52π 53e 54( 55) 56' 57↑ 60% 61< 62/ 63= 64' 65 --× 66x 672 70? 71÷ 72! 73][ 74Δ 75II 76Σ 77______________________________________ ##SPC4## ##SPC5##
|Cited Patent||Filing date||Publication date||Applicant||Title|
|US3593313 *||Dec 15, 1969||Jul 13, 1971||Computer Design Corp||Calculator apparatus|
|US3760171 *||Jan 12, 1971||Sep 18, 1973||Wang Laboratories||Programmable calculators having display means and multiple memories|
|US3859636 *||Mar 22, 1973||Jan 7, 1975||Bell Telephone Labor Inc||Microprogram controlled data processor for executing microprogram instructions from microprogram memory or main memory|
|US3942156 *||Dec 17, 1973||Mar 2, 1976||Xerox Corporation||Indirect arithmetic control|
|US3953833 *||Aug 21, 1974||Apr 27, 1976||Technology Marketing Incorporated||Microprogrammable computer having a dual function secondary storage element|
|US3971925 *||Jun 6, 1974||Jul 27, 1976||Hewlett-Packard Company||Adaptable programmed calculator having provision for plug-in keyboard and memory modules|
|1||*||"National's Scientific Calculator has Long-Term All-Semi-Conductor Memory", Electronics, Jun. 10, 1976, pp. 29-30.|
|Citing Patent||Filing date||Publication date||Applicant||Title|
|US5117379 *||Jul 19, 1990||May 26, 1992||Sharp Kabushiki Kaisha||Data processing device for use in statistic calculation|
|US5644756 *||Apr 7, 1995||Jul 1, 1997||Motorola, Inc.||Integrated circuit data processor with selectable routing of data accesses|
|US7139591||Jun 15, 2004||Nov 21, 2006||Dataquill Limited||Hand held telecommunications and data entry device|
|US7505785||Aug 31, 2006||Mar 17, 2009||Dataquill Limited||Data entry systems|
|US7920898||Jan 2, 2009||Apr 5, 2011||Dataquill Limited||Data entry systems|
|US8290538||Feb 28, 2011||Oct 16, 2012||Dataquill Limited||Data entry systems|
|US9024283||Feb 5, 2013||May 5, 2015||Micron Technology, Inc.||Horizontally oriented and vertically stacked memory cells|
|EP0099666A2 *||Jun 28, 1983||Feb 1, 1984||Pitney Bowes, Inc.||Method and apparatus for individualised postage value computing|
|U.S. Classification||708/130, 711/115|
|International Classification||G06F15/02, G06F9/24|
|Cooperative Classification||G06F15/02, G06F9/24|
|European Classification||G06F9/24, G06F15/02|