Electronic accounting machine with split display4365314Abstract In an electronic accounting machine, a single line display shows both guiding messages entered by the programs of the machine and reply messages entered by an operator through a keyboard. The display is divided into a left part and a right part whose lengths are programmed by the machine. This latter enters a guiding message formed by a permanent part indicating the current work of the machine and a temporary part indicating the data required by the running program. These parts are displayed respectively on the left and the right part of the display. The keyboard reply message replaces the temporary part, whereby the reply message is displayed in the right part of the display simultaneously with the permanent part of the guiding message present on the left part. Claims We claim: Description BACKGROUND OF THE INVENTION
______________________________________
Phase AN1 . . . AN7
DSO-2
______________________________________
FSR - - - - - - -
- - -
FS1 0 0 0 0 0 0 0
0 0 0
FS2 1 1 1 1 1 1 1
1 0 0
FS3 1 0 0 0 0 0 1
0 1 0
FS4 1 0 0 0 0 0 1
1 1 0
FS5 1 0 0 0 0 0 1
0 0 1
FS6 1 1 1 1 1 1 1
1 0 1
FS7 0 0 0 0 0 0 0
0 1 1
______________________________________
This cycle (excluding the signal FSR) is repeated for the character "L" sent thereafter by DMA 6 on the data channel DBO-7, which, however, concerns the phases FS8-12 and then again the phases FS1-2. It is to be noted that the first and seventh columns of each character are not illuminated in order to form the space between the characters. They are used only by the marker code, that is the intermittent light signal indicating the position on which the operator is acting by means of the keyboard. The loading of the registers 20 and 25 takes place by means of the following instructions: DYL P, LL visually displays LL characters in the left zone of the display; DYR P, LL visually displays LL characters in the right zone of the display; K P, LL introduces from the keyboard and visually displays LL characters in the right zone of the display. The letter P indicates a pointer (not shown) stored in the zone 25 which contains the address of the messages (zones 21', 22' and 25') contained in the zone 29. The instruction DYL extracts the message 21' to be visually displayed and transfers it to the zone 21. More particularly (FIG. 7), the block A1 transfers the length LL to the register LUDYL (FIG. 4); the block A2 checks whether LL=0. It is to be noted that if LL=0 the block A3 reserves the whole display 60 less the last three positions for the instruction DYR, fixing CADISP=LDYS-3. On the other hand, if LL is greater than zero, the block A4 then transfers the message to the zone 21. The block A5 transfers a special code "III" formed by three fully illuminated columns (2 , 4 and 6 ), which has the function of separating the messages 21 and 22. The block A6 computes the length CADISP of the zone 22, while the block A7 computes the initial address BUDIRB of FIG. 4. The block A8 terminates the instruction, passing control to the interpreter. The instruction DYR extracts the message 22' to be visually displayed and transfers it to the zone 22 of the register 20. More particularly (FIG. 8), the block A10 loads the address of the zone 22' into the register INDYR (FIG. 4); the block A11 loads the length LL of the zone 22' into the register LUDYR. The block A12 checks whether LL=CADISP, that is whether the message is as long as the zone 22. If so, block A15 transfers it to the zone 22; on the other hand, if LL is greater than CADISP, only the first CADISP characters are transferred (block A14), while the remaining characters can be visually displayed by means of a command from the keyboard (MARKER backward key (.rarw.)). If, on the other hand, LL<CADISP, then LL characters are transferred (block A16) and space characters (blanks) are inserted in the remaining locations (block A17). From one of the blocks A14, A15 and A17 operation passes to the block A18, which loads address (BUDISP) and length (LDYS) of the register 20 to be visually displayed into the registers (not shown) of DMA 6. The block A19 selects and activates the display by means of a special address which is recognized by the comparator 7. In turn, the comparator 7 emits the signal HA, which activates the decoder 8 and deactivates the memory 4 via the wire 17. The decoder 8 decodes the address AD and emits the reset command REP and the selection command CSA which command the first visual display of the register 20. Visual display comprises a stage of loading of the address BUDISP and the length LDYS of the register 20 into two registers (not shown) of DMA 6 by the CPU 1 and then sequential transfer of the characters contained in the register 20 to the register 56. The block A20 enables interruption by the keyboard and display controller 9. The block A21 terminates the instruction DYR, passing control to the interpreter, which selects the following instruction of the program. At the end of the visual representation given in the display 60, DMA 6 sends the signals TEC and DMAK. The signal TEC indicates the end of the transfer of the characters to the register 56, while the signal DMAK is the normal "received" response to the signal DMR emitted by the AND gate 45. The signals DMAK and TEC are applied as input to the AND gate 54 which, in turn, generates the interrupt signal INR. The signal INR resets the signal SDAB (as explained hereinbefore) which in turn blocks the visual display. Moreover, the signal INR is sent to the interrupt controller 5 which causes execution of the block E1 of the routine of FIG. 9. The routine of FIG. 9 again sends (block E2) the contents of the register 20 to the display 10 by means of DMA 6. The remaining part of the routine of FIG. 9 is devoted to the extraction of the characters from the keyboard 11 and transfer to the register 25. More particularly, the block E3 extracts a keyboard state character and deposits it in the registers 3. The block E4 checks whether the address T1TAS or the address T2TAS is stored in the register FASET (FIG. 2). In the event of FASET=T1TAS, the block E5 is executed and, in the event of FASET=T2TAS, a jump is made to the block E29. It is necessary to note that initially, since FASET=T1TAS, the block E5 is executed immediately. The block E5 checks whether a character has been entered or keyed and, in the affirmative case, the block E6 loads it into the accumulator register ACC of the CPU 1. If a character has not been entered, the block E22 is executed after the block E5 and examines whether an error of synchronism, that is two keys struck simultaneously, is involved. In the affirmative case, the block E23 is executed and resets the keyboard and the accumulator, while in the negative case a jump is made to the block E16. From the block E6, the machine goes on to execute the block E7, which checks whether the character introduced can be repeated continuously (`space` characters, marker forward ".fwdarw.", and marker backward ".rarw."). In the affirmative case, the block E8 is executed and loads `20` into the register COINT (FIG. 2) used as an interrupt counter, and moreover loads the address T2TAS into the register FASET. From the block E7, E8 or E23 the routine goes on to the block E9, which loads the address ICABU into the register H, L of the CPU 1. The block E10 checks whether COCABU=16, that is whether the register BUFTAS 25 is full. In the affirmative case, the block E24 resets the character introduced into ACC; in the negative case, the block E11 increments H, L and COCABU. The block E12 checks whether H, L=BUFTAS+16, that is whether the character introduced occupies the last location in BUFTAS 25; in the affirmative case, the block E25 is executed and positions ICABU at the beginning of the register 25 (H, L=BUFTAS). From the block E24, E25 or E12 the routine goes on to execute the block E13. The block E13 deposits the character introduced from the keyboard in the register 25 and moreover stores the contents of the registers H, L in the register ICABU. The block E14 checks whether COCABU is greater than 12, that is whether BUFTAS has only four locations free. In the affirmative case, the block E15 is executed and loads into the location BUDISP+LDYS-2 the character `A`, which warns the operator of the fact that the register BUFTAS is almost full. In the negative case, the block E 26 is executed, which loads a `space` character into the location BUDISP+LDYS-2. From the block E26 or E15 the routine passes on to the block E16, which checks whether a character has been introduced from the keyboard. In the negative case, the block 21, which terminates the routine, is executed, in the affirmative case the block E17 is executed and tests whether COBLIN=5. In the negative case, the block E27 is executed, which increments COBLIN and jumps to the block E21; in the affirmative case, the block E18 is executed, which tests whether the switch register DEVBLK=1. DEVBLK=0 is obtained during five interrupt cycles in which there is visually displayed the graphic MARKER symbol, that is an indicator of the position on which the next introduction from the keyboard will act. With DEVBLK=1, the MARKER is replaced by the character stored in the register CHADIS. The character stored in the register CHADIS initially is a "space", which is replaced by the character identified by the marker in the event of action being taken from the keyboard to modify a character introduced previously. In short, the blocks E17-E20 and E27-28 command alternately visual representation on the display of the MARKER and of the character contained in the cell of the register BUDISP identified thereby. If, therefore, DEVBLK=1, the block E28 is executed, which replaces the character stored in the register CHADIS in the register BUDISP at the location identified by the MARKER and resets DEVBLK. If, on the other hand, DEVBLK=0 (block E19), the character identified by the MARKER is extracted from the register BUDISP and stored in the register CHADIS, the MARKER code is stored in the register BUDISP and, finally, DEVBLK is set (DEVBLK=1). It is to be noted that the operations identified by the blocks E19 and E28 use the cell DELMAR for identifying the position of the MARKER in the register BUDISP, while the cell MARKER identifies the current location of the user memory zone 29 in which the character introduced is to be stored. The block E20 is then executed and resets the counter COBLIN and, finally, the block E21 is executed, which terminates the interrupt routine. As has been said hereinbefore, the block E8 loads `20` into the register COINT, which is used as an interrupt counter, and moreover puts T2TAST into the register FASET. The block E8 is reached only in the event of the character struck or entered allowing repetition (block E7). Let us assume that during the current interrupt one of these keys has been struck. In the following interrupt cycle, the block E4 will find FASET=T2TAST and will go on to execute the block E29. The block E29 is similar to the block E5 and therefore checks whether there is a character ready. In the affirmative case, there is a fresh introduction from the keyboard and therefore a return is made to the block E6. In the negative case, the block E30 is executed, which checks whether two keys have been actuated simultaneously. In the affirmative case, a jump is made to the block E23 which has been mentioned, while in the negative case the block E31 is executed, which tests whether the key previously found by the block E7 is still actuated. In the negative case, the block E35 is executed, which loads T1TAST into the register FASET and then jumps to the block E16. In the affirmative case, the routine goes on to the block E32, which tests the contents of the register COINT. If COINT=0, a fresh character is introduced by means of the block E33, `6` is loaded into the register COINT (block E34) and then the blocks E9-E21 are executed as explained hereinbefore. If COINT is different from zero, the block E36 is executed, which decrements the register COINT and jumps to the block E16. From what has been said hereinbefore, it is clearly apparent that the functions performed by the display interrupt handling routine of FIG. 9 are as follows: Visual representation on the display 60 of the contents of the register BUDISP 20 by means of DMA 6; introduction of a character from the keyboard 11 into the register BUFTAS 25; introduction of other characters in the case of continuously recurring characters (characters: "Space"; Marker forward (.fwdarw.); Marker backward (.fwdarw.)); alternation of visual display of the "marker" and of the character identified by it; "Attention" signal for the operator (visual display of the character "A" in the location BUDISP+LDYS-2) in the event of the number of characters introduced into the register BUFTAS being at least 12. FIG. 10 is a flow diagram of the microprogram handling the instructions for introduction from the keyboard 11. These introduction instructions may be of various types: KA Introduction of an alphanumeric field into memory; KPM Introduction of an alphanumeric field into memory with printing; KP Print the characters introduced without introduction into memory; KN Introduction of a numeric field into memory; KS Introduction of a numeric field with sign into memory; KT Modify field of a pre-existing ememory field. These instructions comprise length LL and address II of the memory field concerned in the introduction. When the program in course of execution decodes an instruction for introduction from the keyboard (indicated generally by K in FIG. 10), it executes it starting from the block F1, which loads the address II into the register INDINT, the length LL into the register LINTRO and, moreover, compiles the register MODALI according to the type of instruction encountered. More particularly, the register MODALI assumes the following significances:
______________________________________
LOGICAL
BIT LEVEL SIGNIFICANCE
______________________________________
1 0 alphanumeric introduction;
1 numeric introduction;
6 0 introduction with storage in the
zone 29;
1 introduction without storage in
the zone 29;
5 not used;
4 0 reduced graphic set (only capital
characters);
1 extended graphic set (with small
characters);
3 not used
2 0 memory field initially empty;
1 memory field significant;
1 0 end of instruction by means of
end-of-introduction key;
1 end of introduction either by
means of end key or by means of
check on exhaustion of intro-
duction field (NUCARI = LINTRO);
0 not used
______________________________________
The block F2 checks whether the bit 6 of the register MODALI is equal to zero. In the affirmative case, it executes the block F3 and, in the negative case, it executes the block F5, which loads the register INDINT with the initial address of the zone 22 (BUDIRB). The block F3 examines the bit 2 of the register MODALI: if B2=1, it executes the block F4 which transfers to the zone 22 of the register 20 CADISP characters starting from the INDINT address, which corresponds to the zone 25' of FIG. 1b. If, on the other hand, B2=0, the block F3 executes the block F6, which resets the registers MASKA and NUCARI and loads the address INDYR into the register BUDIN. From the block F4 or F6, the program goes on to execute the block F7, which loads the register INDINT into the register POINTR, resets the register DELMAR and loads the character `K` into the penultimate cell of the register 20 (that is at the address BUDISP+LDYS-1). The block F8 transfers a character stored in the register 25 (FIG. 5) by the microprogram of FIG. 9 to the registers 3 of the CPU 1. The block F9 increments the address IPREBU and decrements the counter COCABU. The block F10 checks whether COCABU=0. In the affirmative case (that is, if the character transferred in F8 is the last present in BUFTAS 25), the block F36, which serves for other possible interrupts, is executed and returns to execute the block F8. If, on the other hand, COCABU is greater than zero, then the block F11 is executed, which checks whether the character being examined is a function code of the following types: END OF INTRODUCTION; INSERTION OF CHARACTER; DELETION OF CHARACTER; or CLEAR. In the negative case, the block F14 is executed, while in the positive case the block F12 is executed, which checks whether the function key has been previously enabled. The enabling of the function keys, together with other information, is stored in the register MASKA, which has the following contents:
______________________________________
BIT SIGNIFICANCE
______________________________________
is zero if the position of the
B00 DEVM, marker switch marker coincides with the
last character introduced
B10 DEVINT, introduction is zero for the first character
switch introduced
B20 Enabling of character insertion key
B30 Enabling of character deletion key
B40 Enabling of CLEAR key
B50 END OF INTRODUCTION
B60
not used
B70
______________________________________
In the case of a key not being enabled, a return is made to execute the block F8 and, in the case of a key being enabled, the program goes on to the block F13, which executes the required function. More particularly, if the END-OF-INTRODUCTION key is recognized, a jump is made to the block F47. From the block F13, the block F14 is then executed, which checks whether the Marker backward key (.rarw.) has been actuated. In the positive case, the block F15 is executed, while in the negative case the block F17 is executed. The block F15 checks whether characters have been previously introduced (NUCARI=0) and, in the negative case (NUCARI=0), a return is made to the block F8. In the positive case (NUCARI>0), the block F16 is executed, which sets the marker switch DEVM=1, decrements the displacement of the marker (DELMAR), decrements the addresser of the marker (MARKER) and, finally, returns to execute the block F8. If a negative response is obtained by the block F14, the block F17 is executed, which checks whether the Marker forward key (.fwdarw.) has been actuated; in the positive case the block F18 is executed, in the negative case the block F21 is executed. The block F18 checks whether the marker switch is reset DEVM=0); in the affirmative case, it returns to execute the block F8, in the negative case it executes the block F19, which increments DELMAR and MARKER. The block F20 is then executed, which checks whether the position of the marker (DELMAR) corresponds to the last character introduced (that is, DELMAR=NUCARI). In the affirmative case the block F50 is executed, which resets DEVM and returns to the block F8; in the negative case a return is made directly to execute the block F8. If the marker forward function key (.fwdarw.) has not been recogized by the block F17, the block F21 is executed, which checks whether DEVINT is reset. In the affirmative case, the block F22 is executed, which loads the initial address of the memory field 25' into the register BUDIN, resets the marker displacement register DELMAR, loads blank characters in the register 22 from BUDIRB and in the register CHADIS, sets the introduction switch DEVINT and goes on to execute the block F23. In the negative case, from the block F21, the block F23 is executed directly and checks whether the bit B7 of the register MODALI is set (that is, whether the introduction is numerical). In the affirmative case, the block F49 is executed, in the negative case the block F24 is executed. The block F49 checks whether the character examined is numerical and, in the negative case, the block F48 is executed, which loads an error signal (character E) in the last location of the register 20 (the location having the address BUDISP+BDYS) and returns to execute the block F8. In the positive case, a jump is made to the block F28. If the introduction is not numerical (bit B7 of MODALI=0), the program goes on from the block F23 to the block F24, which checks whether the introduction provides for a reduced graphic set (B4=0), that is a set formed by the capital letters only. In the positive case, the block F26 is executed, in the negative case the block F28 is executed. The block F26 checks whether the character examined is a small character and, in the positive case, makes it a capital by executing the block F27, which applies to the character introduced the logical AND function with the binary constant 0101.1111. This is due to the fact that the difference between the codes of the capital and small characters consists in the fact that while all the capital codes have the bits seven and five always at zero, the codes of the small characters do not have the bits seven and five at zero. By zeroizing the bits seven and five, the logical AND between the code of a small character and the binary constant "0101.1111" transforms it into the code of a capital character. From the block F27 the program goes on to execute the block F28, which checks whether the introduction requires storage in the field 25' of FIG. 1b by testing the state of the bit B6 of the register MODALI. If B6=0, the characters introduced are stored and block F29 is executed; on the other hand, if B6=1, block F39 is executed. The block F29 checks whether DEVM=0. In the affirmative case, the introduction of a fresh character is recognized and the block F38 is executed, while in the negative case it is recognized that the operator is changing a character introduced previously and the block F30 is therefore executed. The block F38 writes the character introduced into the zone 25' of the memory 4 at the address given by the register POINTR, then increments NICARI, DELMAR and POINTR and goes on to execute the block F39. The block F39 checks whether the number of characters introduced is equal to the length of the field 25', that is whether NUCARI=LINTRO. In the affirmative case, it goes on to the block F44, which deposits the current character in the zone 22 of the register 20 at the address specified by the register MARKER, while in the negative case the block F40 is executed. From the block F44 the program goes on to the block F45, which tests the state of the bit B1 of the register MODALI to establish whether the instruction can be terminated because of exhaustion of the programmed length (LINTRO). In the affirmative case (B1=1), the block F46 is executed, which resets DEVINT and terminates the instruction by means of the block F47. On the other hand, if B1=0, a return is made to the block F8. In the negative case, the program passes from the block F39 to the block F40, which checks whether the MARKER is loaded in the last cell of the zone 22 (prearranged for visually displaying the introduction) of the register 20. In the negative case, the program goes on to execute the block F43, which loads into the zone 22 the character introduced and increments the register MARKER. In the positive case, the program goes on the block F41, which increments the address of the first character of the zone 25' to be transferred to the zone 22, and the program then goes on to the block F42, which shifts the contents of the zone 22 of the register 20 by one character inasmuch as it transfers (CADISP- 1) characters from the zone 25' starting from the address BUDIN previously incremented. A return is then made from the block F42 to execute the block F8. If DEVM=0, the program goes on from the block F29 to execute the block F30, which loads into the registers H, L of the CPU 1 the address within the field 25' of the character to be changed identified by the register DELMAR (the address of this character is therefore given by INDINT+DELMAR), stores the character introduced by making the change, updates the register 20 by writing successively in the same location the character to be deleted (stored in CHADIS) and the character introduced, and the increments DELMAR. From the block F30 the block F31 is executed, which checks whether DELMAR=NUCARI, which corresponds to verifying whether the MARKER is positioned at the last character introduced. In the positive case, the block F32 is executed, which resets the marker switch DEVM. In the negative case, the block F34 is executed. From the block F32 the program goes on to execute the block F33, which checks whether the number of characters introduced is equal to the length of the introduction field 25' (NUCARI=LINTRO). In the positive case, the block F45 is executed, in the negative case the block F34 is executed. The block F34 checks whether the marker is positioned in the last cell of the zone 22 of the register 20. In the negative case, it deposits the character introduced in the zone 22 and returns to the block F8, in the positive case it executes the block F41, which has already been explained hereinbefore. From what has been said hereinbefore it is apparent that the functions performed by the microprogram of FIG. 10 are the following: if the bit B2 of the register MODALI is equal to one, it transfers at least part of the field 25' to the zone 22 of the register 20 to permit modification; it loads into the zone 23 of the register 20 the character "K" indicating a request for introduction from the keyboard; it recognizes and executes the functions commanded by the keys which act on the characters introduced (KEYS: END OF INTRODUCTION; INSERT; DELETE; CLEAR); it recognizes and executes the functions (.rarw.;.fwdarw.) which act by shifting the message visually displayed to the right or left in the memory fields 22' and 25'; if the bit B4 of the register MODALI is equal to zero (reduced graphic set with capital characters only) and if the character introduced has a code corresponding to a small character, it is transformed into a capital; it transfers the characters introduced to the field 25' of the memory 4 and loads them into the zone 22 of the register 20 to permit visual display; it modifies the characters previously introduced, both into the zone 22 and into the field 25'; it signals errors of introduction to the operator by means of the visual display of a character `E` in the last position of the display. The result is, therefore, that the combined action of the instructions DYL, DYR, K of the microprogram of FIG. 9 and the control of the microprocessor CPU 1 and the display controller of FIG. 6 produces the following results. The instruction DYL controls by means of the CPU 1 the loading of the first part 21 of the register 20 with the information contained in a first memory field 21'. The instruction DYR controls by means of the CPU 1 the loading of the second part 22 of the register 20 with the information contained in a second memory field 22' and activates the display controller 9 controlled by the microprogram of FIG. 9. The transfer of the individual characters from the register 20 to the register 56 of FIG. 6 takes place autonomously by means of the direct memory access controller DMA 6. It is to be noted that the joint use of the routine of FIG. 9 and the DMA 6 enables the complexity and, therefore, the cost of the display controller 9 to be considerably reduced. The instruction K controls by means of the CPU 1 the loading of the second part 22 of the register 20 with the information contained in a second register 25 or with the information contained in a third memory field 25'. The information contained in the register 25 is extracted from the keyboard as the operator actuates the keys by means of the microprogram of FIG. 9. Since the microprogram of FIG. 9 is activated by the controller 9 every 15 milliseconds, the result is that the register 25 contains at any instant all the characters entered on the keyboard, so that the operator sees the characters represented visually in the second part of the display (corresponding to the zone 22 of the register 20) as they are entered.
|
Same subclass Same class Consider this |
||||||||||
