Abstract:
An intelligent, stand alone print buffer having switch-selectable series and parallel input and output ports. Data transfers between the input and output ports occur under microprocessor control. Control panel switches initiate control functions such as clearing the buffer memory, starting a print cycle, holding further input from the input port, and pausing further output to the output port. Page skipping and page reprinting are controlled by the microprocessor which scans the data stored in the buffer&#39;s internal memory to locate page boundries in accordance with operator entered page definition data.

Description:
BACKGROUND OF THE INVENTION 
     This invention relates to electronic computing systems and, more particularly, to stand-alone print file buffer memory systems. 
     Stand-alone print buffers have found widespread acceptance, particularly in personal and small-business computer systems which use serial printers that operate at relatively low speeds. Connected between the computer and the printer, the buffer accepts data at high speed from the computer, stores the data temporarily in its memory, and then relays the data to the printer at a lower rate. Once the data has been trasmitted to the buffer, the computer is free for other operations. When used in connection with an 80 character-per-second printer, for example, a stand-alone buffer can typically save one minute of computer time for every page of material to be printed. 
     A stand-alone print buffer has its own internal memory and a control processor. Unlike software print spooling programs (which also permit concurrent printing and processing), the stand-alone buffer does not &#34;borrow&#34; memory space or processing time from the computer. Moreover, the more &#34;intelligent&#34; stand-alone buffers include operator controls for clearing the buffer&#39;s internal memory, resetting the print cycle to beginning of the document stored, halting the print operation temporarily, and making multiple copies of the stored document (all without further processing by the computer). Such intelligent buffers are typically connected between an industry-standard printer output port (a RS-232 serial or a Centronics parallel port) and the similarly conventional input port to the printer by means of standard cables and jacks, permitting installation by the user without technical assistance. 
     SUMMARY OF THE PRESENT INVENTION 
     The present invention is an improved stand-alone intelligent buffer which is capable of operating in a page control mode, allowing the operator to selectively print and reprint selected pages in a multiple page document. Operator accessible PAGE SKIP and PAGE REPRINT keys on the buffer&#39;s control panel allow the operator to select the page or pages to be reprinted or skipped without interrupting the normal operation of the computer. Switch settings on the buffer further allow the operator to vary the number of lines-per-page recognized by the buffer (including one-line-per-page for line-at-a-time control), and to specify whether or not form-feed characters in the data stream are to be treated as end-of-page marks for page control purposes. 
     In accordance with the invention, the control processor within the processor scans the printfile stored in the buffer to detect page boundries by counting print lines and comparing the count with a predetermined line-per-page count and/or by detecting form-feed characters in the printfile. 
     According to a further feature of the invention, the printfile may be scanned backwards (toward the beginning of the printfile) to locate prior page boundries to permit selected pages to be reprinted, or the printfile may be scanned in a forward direction from the current print position to permit pages to be skipped without being printed. 
     According to still another feature of the invention, means responsive to the detection of page boundries may be employed to cause the printer to stop printing (pause) at each page boundry, or to reprint an operator-selected number of pages before pausing. 
     In accordance with still another feature of the invention, the buffer is capable of counting lines based upon the occurrence of line feed characters or, at the option of the operator, based on the occurrence of carriage return characters. 
     Advantageously, the buffer is capable of responding to or ignoring form feed characters in its process for detecting page boundries. By ignoring form feed characters and determining page boundries solely on the basis of line count, the buffer is capable of producing pages of a different length from those created by the original application program, the new line-per-page value being switch selected on the buffer control panel. 
     These and other features and advantages of the present invention will become more apparent through a consideration of the following description of a preferred embodiment of the invention. 
    
    
     DESCRIPTION OF THE DRAWINGS 
     FIG. 1 illustrates the layout of the operator control panel of the buffer, including the function keys and the status display lamps used by the operator to select desired functions. 
     FIGS. 2, 2a, 2b, 2c, 2d, 2e and 2f are a schematic drawing of a stand-alone print buffer showing how the various integrated circuits which make up the buffer are interconnected. 
    
    
     DESCRIPTION OF THE PREFERRED EMBODIMENT 
     The buffer to be described is connected between the computer and the printer by means of standard cables. Personal and small business computers typically transmit data to serial printers in one of two ways: serially (one bit at a time) via a standard RS-232 interface, or in parallel (8 bits at a time) over a &#34;Centronics&#34; interface (so named after the printer manufacturer which popularized its use). The buffer which will be described permits data to be received from the computer and relayed to the printer over either interface. Both of these interfaces may operate at different data rates. Generally, the computer is capable of transmitting data to the printer at a much higher rate than the printer can print. 
     Switch settings on the buffer&#39;s control panel allow the operator to select the appropriate interconnection method and transmission rates for the particular computer and printer to be used. These switches take the form of three 8-position DIP switches forming a total of 24 single-pole single-throw switches. These switches also allow the user to select serial or parallel ports; the input and output data rates from the computer and to the printer; whether the parity bit is present (and whether odd or even parity is used); and whether 8-bit or 7-bit (e.g., graphics or text) data is being handled. Finally, four of the switches permit the operator to specify the number of lines which are to comprise a &#34;page&#34; for the buffer&#39;s page control system. These 24 switches are conveniently located behind a hinged lid on the control panel seen in FIG. 1 of the drawings. 
     This control panel also includes 8 membrane key switches labeled as follows: CLEAR; COPY; PAGE SKIP; PAGE RE-PRINT; FUNC.; SECOND FUNC.; HOLD and PAUSE. The layout of these keys on the control panel is shown in FIG. 1 which also shows the positions of six light-emitting diodes (LEDs) D1 through D6 which act as status indicators. The basic functions which can be initiated by the operator during and after printing by pressing these control keys will first be explained from the operator&#39;s standpoint, followed by the description of the hardware and software which executes those functions. 
     PAUSE KEY 
     Pressing Pause suspends transmission of data to the printer. 
     HOLD KEY 
     Pressing HOLD suspends reception of data from the computer. 
     CLEAR KEY 
     The CLEAR key clears all data in the buffer. 
     COPY KEY 
     The COPY key produces a copy of all data in the buffer. 
     PAGE SKIP KEY 
     The Page Skip key causes the remainder of the current page to be skipped and printing begins from the beginning of the next page. PAGE SKIP is only available when the buffer is in Page Mode (to be described). In order to skip more than one page, the operator presses PAGE SKIP repeatedly, once for each page to be skipped. LEDs, D2, D3, D4 display the relative number of pages which may be used to verify the number of skips. 
     PAGE REPRINT KEY 
     The Page Reprint key causes printing to be restarted from the beginning of the current page; or, if already at the beginning of a page, to reprint the preceding page. PAGE RE-PRINT is only available when the buffer is in Page Mode. The operator may reprint from more than one page back by pressing PAGE RE-PRINT repeatedly, once for each page to be reprinted. After keying in the desired number, the operator presses PAUSE to release the PAUSE condition. 
     PAGE MODE 
     In PAGE MODE, the buffer detects and controls the page formation of data, and provides the operator with access to page-based print controls. 
     In order for the buffer to function in PAGE MODE, the operator must first establish the Page Definition. Page Definition may be switch-selected from the upper 4 bits (positions 5 to 8) of the Device Type Switch, Switch SW1 (to be described) on the control panel. Before power-on, one of 16 possible predefined page definitions is selected. The selection determines the number of lines per page and/or the form-feed character, as well as the default status of PAGE MODE, PAGE-PAUSE MODE and SPACE COMPRESSION MODE. 
     The settings of the upper 4 bits(positions 5 to 8) of Switch SW1 are selected from one of the 16 combinations shown in TABLE 1 below. This selection determines the Page Definition as well as the default status of the SPACE COMPRESSION, PAGE and PAGE-PAUSE MODES. Alterations to the selection take effect only during a power-up or Soft-Reset. 
     
                                           TABLE 1__________________________________________________________________________Page Definitions And Default Status of Modes              Page                  LinesSW1        Space          Page              Pause                  per Form5    6 7 8 Comp          Mode              Mode                  Page                      Feed                          Notes__________________________________________________________________________0  1 1 1 1 OFF OFF OFF 66  NO  Default1  0 1 1 1 OFF OFF OFF 44  NO2  1 0 1 1 OFF OFF OFF 72  NO3  0 0 1 1 OFF OFF OFF NO  (OC)*4  1 1 0 1 OFF OFF OFF 66  (OC)*5  0 1 0 1 ON  OFF OFF 66  (OC)*6  1 0 0 1 OFF OFF OFF 66  NO  Auto-LF7  0 0 0 1 --  --  --  --  --  (Reserved)8  1 1 1 0 OFF ON  OFF 66  (OC)*                          Page Mode9  0 1 1 0 OFF ON  OFF 44  (OC)*10 1 0 1 0 OFF ON  OFF 88  (OC)*11 0 0 1 0 OFF ON  ON  66  (OC)*12 1 1 0 0 OFF ON  OFF  1  NO  Line Mode13 0 1 0 0 ON  ON  OFF 66  (OC)*14 1 0 0 0 OFF ON  OFF NO  (OC)*15 0 0 0 0 OFF ON  OFF 66  (OC)*                          Auto-LF__________________________________________________________________________ 1 SW1 switch position ON 0 SW1 switch position OFF *The FormFeed character is (OC) HEX or ASCII Code 12. 
    
     The modes, including PAGE MODE, will be enabled or disabled at power-up according to the switch-selected page definition. 
     The status of the PAGE MODE may be confirmed at any time by pressing the FUNC and 2ND FUNC keys simultaneously. If the 2nd LED (D3) lights up, the PAGE MODE is currently enabled. 
     When the PAGE MODE is enabled, the data LED&#39;s D2, D3, D4 display the relative page number. This provides a convenient means of verifying the page number in real time. 
     Once the page definition has been established, PAGE MODE may be disabled, if enabled, or enabled, if disabled, by placing the buffer in the PAUSE condition, and then pressing the FUNC and CLEAR keys. The following commands are available to the operator when the buffer is in PAGE MODE: PAGE SKIP (skip to next page); PAGE RE-PRINT (reprint the previous page); and PAGE-PAUSE (pause at each page-end). 
     After Power-up, the pre-set PAGE MODE, PAGE-PAUSE MODE and SPACE COMPRESSION MODE selections may be altered by activating the key-controlled mode change commands. The number of lines per page may also be altered by activating the page definition command. These additional commands will be described in more detail below. 
     PAGE-PAUSE MODE 
     In the PAGE-PAUSE MODE, the buffer suspends transmission of data at each page-end. The printer stops printing to allow for the insertion of single sheets of paper. Once the paper has been inserted, the operator presses PAUSE to resume printing. 
     The PAGE-PAUSE MODE is available only when the PAGE MODE is enabled. Depending on the switch-set Page Definition selection, the PAGE-PAUSE MODE may, be default, be unabled at power-up. 
     SPACE COMPRESSION 
     The SPACE COMPRESSION MODE may be activated so the buffer will accept and retain data which would otherwise exceed the 64 Kbyte buffer capacity. The data in the buffer is condensed, and the effective buffer capacity extended. 
     The printed characters in an average computer printout occupy only part of the area of the paper. Most of the non-printed area is occupied by &#34;space&#34;  characters, each of which consumes the same amount of memory as a print character. 
     When the buffer&#39;s SPACE COMPRESSION is applied, up to 127 continuous &#34;space&#34; characters may be compressed into one memory location, reserving a substantial number of locations for more print characters. A 128 Kbyte report may possibly be compressed into 64K, effectively extending the buffer&#39;s capacity. 
     Depending on the switch-selected Page Definition setting, the SPACE COMPRESSION MODE may, by default, be enabled at power-up. To determine at any time the status of this mode, press FUNC and 2ND FUNC simultaneously. If the 1st data LED (D2) lights up, the SPACE COMPRESSION mode is currently enabled. 
     COMMAND SUMMARY 
     There are 8 key-controls on the buffer keyboard: 
     HOLD controls the reception of data; 
     PAUSE controls the transmission of data to the printer, and permits multi-key commands; 
     CLEAR, COPY, PAGE SKIP and PAGE RE-PRINT are action keys and; 
     FUNC and 2nd FUNC are keys used in conjunction with the action keys to extend the number of available commands. The function keys when pressed alone will not affect the flow of data. 
     Before multi-key commands are activated, the buffer must first be put in the PAUSE condition. To activate multi-key commands, the operator should: 
     Press PAUSE; 
     Press and hold FUNC and/or 2ND FUNC; 
     Press the appropriate action key (CLEAR, COPY PAGE SKIP, or PAGE REPRINT); 
     Release the action key; and, finally, 
     Release FUNC and/or 2ND FUNC. 
     The multi-key commands are individually described below. 
     MULTI-KEY FUNCTIONS 
     FUNC; CLEAR 
     This command will enable Page Mode if disabled, or disable if enabled. The status of the mode is displayed (D3) when FUNC and 2ND Enable/FUNC are pressed. It is recommended that Page Mode Disable changed Disable only after power-up or CLEAR, and only Page Mode when the appropriate page definition has been selected. 
     FUNC; COPY 
     Multi-Copy. After activating (FUNC and COPY keys simultaneously), release both keys and 
     (a) Press the FUNC key repeatedly, once for each desired copy; or, 
     (b) Press 2ND FUNC to increase the number of desired copies by 10&#39;s or; 
     (c) Press FUNC and 2ND FUNC simultaneously to increase the number of copies by 100&#39;s. Press COPY again to execute. To cancel this function press 2ND FUNC near the end of the printing of a copy. 
     FUNC; PAGE SKIP 
     Enable/Disable Mode. This command will enable the Page-Pause Mode if disabled, or diable if enabled. The status of mode is displayed (D4) when FUNC and 2ND FUNC are pressed. Page-Pause is only available when the buffer is in the Page Mode. 
     FUNC; PAGE RE-PRINT 
     Multi-Page Re-Print. After activating (FUNC, PAGE RE-PRINT simultaneously), release both keys and 
     (a) Press FUNC repeatedly, once for each page to be re-printed. 
     (b) Press 2ND FUNC repeatedly to increase the number of pages of 10&#39;s. Press PAGE RE-PRINT again to execute. 
     2ND FUNC; CLEAR 
     Enable/Disable Space-Comp. This command will enable the Space Compression Mode if disabled, or diable if enabled. The current status of the mode is displayed (D2) when FUNC and 2ND FUNC are pressed. It is recommended that the mode be enabled only after power-up or CLEAR, and when valid data is in 7 bit ASCII Code. 
     2ND FUNC; COPY 
     Continuous Copy. The buffer goes into an infinite copy loop. To cancel the function, hold 2ND FUNC near the end of a copy until the printing is cancelled. 2ND FUNC; PAGE SKIP 
     Skip Data. This command differs from CLEAR in that the remaining data in the buffer is skipped and the data is left intact (buffer pointer skips all data). To retrieve and print data, press COPY or see Function 12 next. 
     2ND FUNC; PAGE RE-PRINT 
     Restore Buffer. Restores buffer to the beginning of all recoverable data in the buffer. When PAUSE is pressed, data is then transmitted to the printer. This function has the same effect as COPY yet allows the use of PAGE and PAGE PAUSE. This command is also used before Hex-Dump to dump the entire buffer. 
     FUNC; 2ND FUNC; CLEAR 
     Soft-Reset. This command activates a software reset that simulates a power-up, while leaving data in the buffer intact. It may be used to change device selection or to gain access to commands available during the Power-up. 
     FUNC; 2ND FUNC; COPY 
     Hex-Dump. Prints the remaining buffer in hexadecimal and ASCII Code. To cancel this function, press 2ND FUNC. Execute Restore Buffer (Function 12) first to Hex-Dump from the beginning of the buffer. 
     FUNC; 2ND FUNC; PAGE SKIP 
     Page Definition. Press HOLD key to put the buffer in a HOLD state and key-in the number of lines per page using the FUNC and 2ND FUNC keys as in the Multi-Copy function. After keying the desired number, press PAGE SKIP again to execute. 
     LED ACTIVITY 
     Buffer activities and command status are displayed by means of the 6 LED&#39;s (D1-D6 shown in FIG. 1). 
     LED D1 indicates power-on. After power-up and the brief internal self-test, D1 should come ON and remain on as long as power is supplied. 
     LEDS D2, D3 and D4 are Data LEDs which together display the position of the buffer pointer, the status of all modes, and the number of pages or copies keyed-in-during multi-key commands. 
     LED D5 displays the buffer receive status. The LED is ON only if the buffer is busy; i.e., the receiver is on HOLD, or the buffer is full or almost full. 
     LED D6 displays the buffer transmit status. During operations other than self-test, D6 displays the BUSY signal from the printer, and is ON only if the printer is BUSY (off-line, in ERROR, or not READY), of if the buffer has been put in the PAUSE state. 
     BUFFER HARDWARE 
     FIG. 2 of the drawings is a schematic diagram of a stand-alone intelligent buffer which performs the functions described above. 
     The buffer hardware is composed of standard &#34;off the shelf&#34; integrated circuit components whose pins are interconnected as shown. The numerals at each pin location on FIG. 2 correspond to the pin numbers used by the manufacturer of each component. For example, at the upper edge of IC U23 as shown in FIG. 2, it can be seen the pin 9 of U23 is connected though a capacitor C23 to a source of +5 volt power. 
     In the description which follows, no attempt will be made to describe the details of the buffer hardware. It is assumed that the reader is acquainted with integrated circuit digital logic design practices in general and can refer to the manufacturer&#39;s product literature for more detailed information on the operation of the individual components. See, for example, TTL DATA BOOK, FAIRCHILD CAMERA AND INSTRUMENT CORPORATION, MOUNTAIN VIEW, CA 94042 (1978). Such a detailed understanding is unnecessary, however, in order to make and use the specific embodiment of the buffer disclosed here. If the specified integrated circuit components are interconnected as shown, and if the buffer&#39;s read-only memory contains the program defined by the assembly language listing which appears at the conclusion of this specification, the buffer will perform the functions which have been described. 
     The integrated circuit components employed to implement the specific embodiment shown in FIG. 2 are listed below. 
     
         ______________________________________REFERENCE     DESCRIPTION______________________________________RSI, RSU      25 Pin RS232 ConnectorPI, PU        Molex PC Connector 6770-10R1, R4        39K 1/4 W ResistorR2, R3, R5    3.3K 1/4 W ResistorC16, C17      .001UF 16 V CapacitorC14, C15      390PF CapacitorC23           1UF 16 V Tant. CapacitorC20, C21      20PF CapacitorSW1, 2, 3     16 Pin DIP Switch (8 position)Y1            7.3728 MHz crystalU23           INTEL 8031 CPU or equivalent         MicroprocessorU18           74LS04 Standard TTL HEX InverterU15, 27, 28   74LS244 Standard TTL Octal         Buffer/Line-driverU17, U21      74LS373 Standard TTL Octal         Transparent LatchU11, U24      74LS374 Standard TTL Octal D-         TYPE Flip-flopU25, 26, 29   74LS151 Standard TTL 8 Input         MultiplexorU6            74LS174 Standard TTL HEX D Flip-         flopU12, U20      74LS258 Standard TTL Standard         TTL Quad 2-input MultiplexorU16           74LS393 Standard TTL Dual         Modulo-16 CounterU19           74LS08 Standard TTL Quad 2-input         AND GateU4            1488 RS232 DriverU5            1489 RS232 ReceiverU1, 2, 3, 8, 9, 10, 13, 14         4164 64K bit Dynamic Memory         ChipU22           2732 EPROMD2-D7         TIL 220 red diffused LEDCN2           Membrane Switch (8 position)______________________________________ 
    
     The hardware architecture of the buffer is uncomplicated and may be summarized as follows: 
     Input data from the computer is supplied to the microcomputer U23 from either the serial RS-232 input port shown at the upper left corner of FIG. 1, or from the parallel input port at the lower left. The ICs U4 and U5 connected between the input port and the DIP switch SW3 convert signals from RS-232 levels to the TTL levels needed by the 8031 microprocessor IC U23, and the reverse. U11 and U24 are data latches for the data flowing over the parallel output and input ports respectively. Switch SW3 allows the user to select either a parallel or serial input. A UART (on the microcomputer chip U23) provides the necessary parallel to serial conversion if the user wishes to employ parallel input and serial output modes. 
     The eight switch positions of SW3 (numbered from bottom to top as seen in FIG. 2) are set as follows. Position 1-4 select the serial or the parallel output port (to the printer) and positions 5 to 8 select the serial or the parallel input port (from the computer). The appropriate settings are: 
     
         ______________________________________  Switch positions                Switch SW3  1    2      3      4    5    6    7    8______________________________________parallel ON     ON     OFF  OFF  --   --   --   --outputserial output    OFF    OFF    ON   ON   --   --   --   --parallel input    --     --     --   --   ON   ON   OFF  OFFserial input    --     --     --   --   OFF  OFF  ON   ON______________________________________ 
    
     Switch SW2 seen in FIG. 2 selects the input and output data rates. Switch positions 1 to 4 (the top four as seen in FIG. 2) set the output band rate and the lower four switches set the input data rate. 
     Switch SW1 sets the page definition by means of the lower four positions 5-8 as discussed earlier in connection with TABLE I. The upper four positions control parity ON or OFF, parity ODD or EVEN, 7 or 8 bits received and transmitted, and 7 or 8 bits stored in the buffer. (To employ space compression as discussed earlier, the eighth bit is forced zero and only the lower seven bits are stored, permitting the eighth bit to be available as a space compression flag. 
     The seven IC&#39;s U1-U3, U8-10, and U13-U14 make up the buffer&#39;s 64 Kbyte internal &#34;user&#34; memory. U22 is a read-only memory which stores the program executed by the microcomputer U23, as well as constants needed by the program as defined in the assembly language listing that follows. The Intel 8031 microprocessor U23 includes its own internal scratchpad memory used for temporary read/write storage, allowing the full 64K capacity of the user memory to be available for print file storage. 
     The DIP switches SW1 and SW2, as well as the function control keys (indicated at CN2 in FIG. 2) are memory mapped (that is, the microcomputer evaluates their settings by addressing predetermined locations in its scratchpad memory for the byte values which the switch settings determine). These addressable byte values are initialized at power-up time (or upon system reset) by reading the switch settings themselves. (See the routine READSW at LOC 0478 in the program listing). During operation, the default values set by the switches may be altered by the control keys (shown at CN in FIG. 2) under operator control as discussed earlier. The LEDs D1-D6 are turned ON or OFF selectively under program control to provide status information to the operator. The settings of switches SW1, SW2 and CN are read, and the LED&#39;s D1-D6 are controlled, by means of IC&#39;s U6 (a data latch for the LEDs); U25, U26 and U29 (multiplexors which read the switches). 
     The IC U28 (a data buffer) is connected to pins 1-7 of the microprocessor U23, these pins being the lower-seven bit positions of the microprocessors output port P1 (pins 1-8) which also serves as the data port to the parallel input and output data latches U24 and U11 respectivley. Pins 32-29 and 21-28 of the microprocessor U23 serve as a 16-bit address bus and an 8-bit data bus for accessing the 64K user memory. IC&#39;s U12, U20, U16, U17 and U19 constitute a refresh circuit for the user RAM memory. U21 latches the lower 8 address bits for use by the 64K memory chips and the 4K read-only memory chip U22 which stores the program (to be described). U27 is a data buffer for data flowing from the eight memory chips in the user RAM. The 40-pin edge-connector at the top and center of FIG. 2 provides an expansion bus for adding additional user memory. 
     BUFFER SOFTWARE 
     The program which is executed by the Intel 8031 microprocessor U23 is set forth in the assembly language listing which appears at the end of the specification and before the claims. The listing is expressed in standard Intel 8051 Assembly language and familiarity with this language is assumed. The instruction set for the 8051 family of microprocessors is described in the publication &#34;8031/8051/8751 SINGLE COMPONENT 8-BIT MICROCOMPUTER&#34;; Intel Corporation publication No. AFN-01462B-01 (1980). Similarly, the 8051 assembler language is described in Intel software support publications relating to the ASM51 absolute macro assembler for the 8051. The program listing set forth here was prepared using the AVOCET Systems XASM51 cross-assembler (which may be run under the Digital Research CP/M operating system) and is described in the AVOCET XASM51 MANUAL, AVOCET SYSTEMS, INC., DOVER, DEL. 
     Although the complete program for implementing an intelligent buffer is reproduced below, only those portions which relate to the page mode operations which are the subject of the present invention will be summarized here. In the course of this summary, references to particular assembly language statements and routines will include their location numbers in the form (LOC mmmm) where mmmm corresponds to the hexadecimal location value in the left-hand column of the assembly language listing. 
     The program begins execution (at power up) by a hardware forced branch to the instruction at absolute memory location 0 which contains a jump to the location START (LOC 0BAF). The program then performs certain diagnostics and initialization procedures. It may be noted that, during initialization, the routine GPARAM (LOC 0BCA) calls the subroutines READSW (LOC 0478) and S$DEV (LOC 05B2) which save images of the DIP switch settings of SW1 and SW2 in the microprocessor&#39;s internal data memory. The 64K buffer memory (external to the microprocessor U23) is then zeroed (filled with predetermined values) by the subroutine FILRAM (LOC 0573) and any diagnostic errors which are encountered are handled. 
     After initialization, the MAINLOOP (LOC 0C1D) is entered. The MAINLOOP Routine is responsible for sensing the depression of control keys in order to provide the operator-requested functions which have been discussed above. Actual data transfers between the computer and the buffer and between the buffer and the printer are initiated in part by the microprocessor&#39;s vectored interrupt system in conventional fashion. The serial and parallel input/output interrupt handling routines are listed at LOC 0361-0404. The interrupt vector values are listed in the equate statements at the beginning of the program listing. 
     In the main loop, a check is made (at LOC 0C86) to determine if the buffer is in the page mode by checking the bit status flag F8PAGE (the fourth bit of the V$FLAG Byte) which is set to a default value by the DIP switch SW1, or which is enabled (or disabled if enabled) by simultaneously pressing FUNC and PAGE SKIP (as noted earlier), during the pause state. In the main loop, during the pause condition, J$EXC is called to get multikey commands from the console which allow the operator to place the terminal in page mode. Thereafter, when the page mode flag is checked at LOC 0C86, the existence of the page mode calls the routine F$XMT (LOC 0B4C), which in turn calls the procedure F$SCAN (LOC 09A6). 
     The FORWARD SCAN routine (LOC 09A6) sequentially evaluates each buffer character location in a forward sequence until either (1) the end of the data in the buffer (pointed to by F$STOP) is reached, (2) a form-feed character is detected, or (3) the number of lines, which are counted during the forward scan by detecting end-of-line character(s), becomes equal to the lines-per-page count LPP. 
     The BACKWARD PAGE SCAN routine B$SCAN (Line 0A26) operates in a similar fashion to locate the next prior page start position in the buffer, except that it scans the buffer data in a reverse direction (toward the beginning of the print file). 
     The buffer contemplated by the present invention accordingly detects page breaks in several ways. 
     First, it detects the presence of form feed characters in the data stream. Normally, by convention, the ASCII form feed character (HEX OC) is inserted in the printfile at the end of each page to instruct the printer to move the paper to the next top of form position without requiring the transmission of further data or line feed characters. The buffer can, however, be instructed by the operator to ignore form feed characters by setting the switch SW1 (See Table I, supra). In the forward scanning procedure, when the form feed character is to indicate the start of a new page, the test at LOC 09E2 jumps to F8PAGE (LOD 0A1F), the page count in register R6 is incremented, and the line counter R7 is set to zero. 
     The forward and backward scanning routines are also able to detect page breaks by counting print lines. The LPP (line-per-page) value is originally created by the default settings of switch SW1 (See Table I), set to a particular value by the operator by means of a new page definition multi-key command as previously described. This LPP value is compared with the line count in register R7 until coincidence is reached. As seen at LOC 0A14, if LPP is set to zero, no line counting is performed and only form feed characters are interpreted as page breaks. When the current line count maintained in R7 reaches LPP, a page boundry condition is detected and a jump is made to F8PAGE (LOC 0A1F) from the F$LINE routine (LOC 0A11). 
     Line counting can occur in two ways. Some printing devices can be set to automatically advance the paper one line when each ASCII carriage return character (HEX 0D) is received, and do not require a separate line feed character (HEX 0A) to be in the data stream. The routines F$SC5 and F$SC6 in the Forward SCAN Routine (at LOC 09E8-09F8) handle this distinction based on the option select by the operator (Table 1, supra). 
     The forward scanning and backward scanning routines make it possible for the buffer, when in the page mode, to scan the data in the buffer in either direction and to locate the next page boundry to make page skipping and page reprinting possible. 
     When a page boundry is detected and the buffer is operating in the PAGE PAUSE mode, the buffer sets the X$STOP flag (in the main loop at LOC 0C91). X$STOP is a system status flag which forces a stop in transmission to the printer (See LOC 015D in the Transmit Interrupt Handler). This allows the operator to insert a new sheet of paper into printer at the end of each page as detected by the buffer. 
     ASSEMBLY LANGUAGE LISTING ##SPC1##