Product Specification For XEP80
                   80 Column and Parallel Printer Board






                Table of Contents

    1.0  General Description ....................
    2.0  Physical Interface .....................
    3.0  Software Interface .....................
    4.0  Communications Interface ...............
    Appendix A  Application Notes ...............
    Appendix B  Relocater Format ................
    Appendix C  Contents of System Disk .........






                   1.0 General Description

  1.1 Packaging Information

      The XEP80 package consists of the following parts:

         1. Owners Manual
         2. RCA type video cable assembly
         3. XEP80 System Diskette
         4. Warranty Card
         5. XEP80 Unit
         6. Two End Caps
         7. Power Adapter - 2600 Game Type
         8. Box for Power Adapter
         9. Gift Box

  1.2 Statistics

      XEP80 Current Draw 400mA

      Power Supply 500mA 9V DC

      Physical Dimensions - 40mmH 240mmL 142mmW

      Video Output - NTSC Composite Monochrome

      Video Display:
         Text - 80 columns by 25 lines
         Graphics - 320 dots by 200 lines

      Parallel Port:
         Pin information - 8 data bits, strobe, busy, ground
         Connector - DB25 female





  1.3 General Information

      The XEP80 is a video output device that also supports an 8 bit
  type parallel port. The video hardware generates an 80 column by 25 line
  text display through a video connector/cable plugged into a separately
  purchased monitor. The monitor can be any Composite Video input type,
  although for the best display a monochrome is strongly advised.
      Internally, the XEP80 is a 256 character wide by 25 line high storage
  device with an 80 column wide display window. Characters may be placed
  anywhere within the device independent of the window location. The window
  may be scrolled across the 256 column wide field.
      Optionally, the XEP80 may be placed into Pixel Graphics mode. This
  mode supports a bit mapped (pixel) screen of 320 dots (40 bytes) horizontal
  by 200 dots (lines) vertical. The output window displayed is approximately
  half the size of the text window.
      Communication to and from the XEP80 is established through a joystick
  type cable that extends from the back of the unit. This cable will plug
  into either joystick port (1 or 2) on all Atari 8 bit computers. Through
  this cable the XEP80 receives commands and data from the computer and
  sends them to either the screen or the printer.
      The 8 bit parallel port allows Epson, Centronics, etc. type printers
  to be connected to the XEP80, which means the Atari Computer may now
  output to these printers. The parallel connector is a female 25 pin D
  type.
      Audio may be supplied via a video cable from the Atari computer DIN
  plug to any suitable audio speaker input. This is required for any SOUND
  commands or keypresses.
      Software is provided on diskette in the form of a DOS binary file
  named AUTORUN.SYS. This file is automatically loaded into memory and
  initialized by the DOS at boot (power on) time.


      NOTE: The "*" character used throughout this document means that a 0
  or 1 may be substituted. In the case of an 8 bit value, the description
  "0 0 * * * * * *" will allow 00 through $3F as valid input.





                   2.0 Physical Interface

      The Joystick port will use two lines for interfacing. One PIA line for
  input from the XEP80 and one PIA line for output to XEP80. Both the XEP80
  and computer will share a common ground line. Either joystick port (1 or
  2) may be used with the supplied software.

      MALE (XE/XL/800/400) COMMUNICATION PORT PIN CONFIGURATIONS:

            JOYSTICK 1                  JOYSTICK 2
      ______________________      ______________________
      \  1   2   3   4   5 /      \ 10  11  12  13  14 /
       \                  /        \                  /
        \  6   7   8   9 /          \ 15  16  17  18 /
         \______________/            \______________/


        PIN      FUNCTION

         1       Data to XEP80
         2       Data from XEP80
         3-7     Not Used
         8       Common Ground
         9       Not Used
        10       Data to XEP80
        11       Data from XEP80
        12-16    Not Used
        17       Common Ground
        18       Not Used


      FEMALE (XEP80) PARALLEL PRINTER PORT PIN CONFIGURATION:

      __________________________________________
      \ 13 12 11 10  9  8  7  6  5  4  3  2  1 /
       \  25 24 23 22 21 20 19 18 17 16 15 14 /
        \____________________________________/


        PIN      FUNCTION

         1       Strobe
         2-9     Parallel Data
        10       Not Used
        11       Busy
        12-17    Not Used
        18-25    Ground





                   3.0 Software Interface

  3.1 General Description

      The software interface to the XEP80 on the 8 bit computer side
  is a disk booted handler. This handler replaces the E:, S:, and P:
  vectors in the Handler Address Table ($31A).
      Loading of the handler is as follows: A DOS disk containing the
  handler must be in drive 1. The computer is powered on, causing a
  disk boot. The DOS is loaded in and initialized. The DOS init code
  looks for the file AUTORUN.SYS on the boot disk and loads it. The
  XEP80 handler must be named AUTORUN.SYS to be loaded at boot time.
  The handler file is loaded into RAM at address $3000 and continuing
  upward approximately 1.5K bytes.
      The file consists of a relocater portion followed by the actual
  XEP80 handler. After the file is in memory, DOS causes the init code
  of the handler to execute. This init code is the relocater which
  uses a variable called MEMTOP ($2E5,2E6) to find the last address
  of user (non-system) RAM. MEMTOP is then decremented by the relocater
  to point to an address about 1.5K below its old value. This will make
  room for the handler portion to be moved to those addresses. This
  address space into which the handler will be loaded is just below the
  normal screen RAM and display list address space.
      While the relocater moves the handler to its proper location, it
  resolves all absolute address references within the handler code. Thus
  the handler code comes from disk in a relocating format (see Appendix
  B). After the handler has been moved, the relocater sets the DOSINI
  vector ($0C) to point to the handler init code, sets an address within
  the handler to point to the old DOSINI code, then jumps to the handler
  init code.
      The handler init sequence sets up the PIA registers to communicate
  to the XEP80, modifies the Handler Address Table (HATABS $31A), sets
  new screen margins, and determines whether the system is NTSC (60 Hz)
  or PAL (50 Hz). At this point the init code checks the position of the
  SHIFT key. If the key is pressed the code leaves the 40 column screen
  on and exits. If the key is not pressed the code then disables the ANTIC
  chip from display so that XEP80 I/O can begin.
      The handler now exits back to DOS, which then exits back to the
  OS, which then decides which application to run (for example the BASIC
  cartridge) and jumps to that code. As long as the application makes
  I/O calls for the screen and printer through the normal OS CIO calling
  conventions, the XEP80 handler will intercept them and pass data on
  to the XEP80 device.






  3.2 Functional Description

  3.2.1 Screen Operations

      The handler will monitor and communicate the following locations
  to the XEP80 and will update them if the XEP80 causes a change:

      $055     Cursor X Position COLCRS (low byte)
      $056     Cursor X Position (high) for range checking
      $054     Cursor Y Position ROWCRS

      The following locations will be monitored and communicated
  to the XEP80:
                                             Default:       Optional:

      $2FE     List Flag DSPFLG ............ $00 (OFF)      $01 (ON)
      $2F0     Cursor On/Off Flag CRSINH ... $00 (ON)       $01 (OFF)
      $052     Cursor Left Margin LMARGN ... $00 (XEP80)    $XX (ANY)
      $053     Cursor Right Margin RMARGN .. $4F (XEP80)    $XX (ANY)
      $2F4     Character Base CHBAS ........ $E0 (ATASCII)  $CC (ICM)


      The following locations will be monitored and acted upon by
  the handler to emulate screen editor operations:

      $2FF     Start/Stop Screen Output Flag
      Y Reg    EOF Status (CNTL 3 Keystroke) and BREAK Key

      Logical lines of text on the screen may encompass more than one
  physical line. The length of each physical line within a logical line
  is determined by the left and right margins. Up to 24 physical lines
  may be included within one logical line.

      Tabs are set at 2,7,15,23,31,39,47,55,63,71,79,87,95,103,111,119,
  127,135,143,151,159,167,175,183,191,199,207,215,223,231,239,247,255.
  These are the default settings and may be changed with the set and
  clear tab control characters. Tab values only apply to physical lines,
  thus a logical line of two or more physical lines will have its tab
  stops repeated on each physical line.

      The 40 column ANTIC screen may be enabled with a command in the
  event the user wishes color graphics, 40 column text, or has no 80
  column monitor. The parallel printer is still operational in this mode.

      Graphics is enabled by a special OPEN command to "S:". In this mode
  the screen is 320 dots (40 bytes) by 200 lines. The cursor will be in
  the upper left hand corner of the screen awaiting data transfer. Each
  character sent to the XEP80 will be displayed in sequence; all 8 bits
  will correspond to consecutive dots across a scan line. The MSB will
  be displayed first and the LSB is last.

      The status line is Y cursor value 24. This line may be used for
  input or output, however control characters do not edit, but only print
  in this line. One control is allowed, SHIFT DELETE. The line does not
  scroll. Be careful not to accidently POSITION or POKE the cursor into
  this line while the BASIC command line processor is active as it may
  require use of the Reset key to recover from a lockup that can occur 
  on this line.






  3.2.1.1 Editor Screen "E:" Handler

      The following functions will be supported by the supplied handler
  and will emulate the 8 bit screen handler (editor):

      Open        Assign edit handler to IOCB #N and clear screen. If
                  AUX1 is $2C screen will not be cleared.
      Close       Unassign handler from IOCB #N.
      Get Char    Get line of text until EOL (INPUT in Basic). The
                  special read mode (read a line of the screen without
                  keyboard input) is also supported by setting AUX1 of
                  calling IOCB to $0D.
      Put Char    Put a character to the screen or do editing functions
                  (PRINT or PUT in Basic). See chart below.
      Get Status  Return default "on line" status
      Special     Send commands to and receive status from XEP80.
                  (XIO in Basic). AUX1 byte must be $0C, AUX2 is code
                  to send, CMD below.

      Put Character Values

     ATASCII    FUNCTION

       $1B       Escape - Print next char even if a control char
       $1C       Cursor Up
       $1D       Cursor Down
       $1E       Cursor Left
       $1F       Cursor Right
       $7D       Clear Screen
       $7E       Backspace
       $7F       Tab
       $9B       Atari EOL (CR/LF)
       $9C       Delete Line
       $9D       Insert Line
       $9E       Clear Tab
       $9F       Set Tab
       $FD       Sound Bell - Not Available (See item 6 below)
       $FE       Delete Character
       $FF       Insert Character

   Items: 1) Put Char will advance cursor.
          2) Get Char will advance cursor.
          3) At logical end of line a new line will be inserted.
          4) At non EOL put will overwrite characters.
          5) The XEP80 E: handler may be disabled by pressing the
             SHIFT key at power on or during RESET.
          6) The bell sound has been disabled by the handler to
             improve the speed of character output to the XEP80.
             An application may, however, use any of the SOUND
             statements (or the assembly language equivalents) to
             generate noise, notes, etc.


    Special Commands to "E:"

      CMD AUX1  AUX2   Function

      $14  $0C  CMD  - send command ($00-BF,D0-DF) to XEP80 (see 4.3.2)
      $15  $0C   00  - set normal character transmit mode
      $15  $0C   01  - set burst character transmit mode
      $16  $0C  CMD  - send input command ($C1-C6) to XEP80 (see 4.3.4)
                       response is stored in location $2EB
      $18  $0C   00  - exit 40 col screen, enter and clear XEP80 screen
      $18  $2C   00  - exit 40 col screen, enter 80 with no clear screen
      $19  $0C   00  - exit XEP80 screen, enter 40 col screen




  3.2.1.2  Static Screen "S:" Handler

      Open        Assign screen handler to IOCB #N (Graphics see below)
      Close       Unassign handler from IOCB #N
      Get Char    Get a character and advance cursor (Basic LOCATE)
      Put Char    Put a character to the screen - no editing functions
      Get Status  Return default "on line" status
      Special     No action


  Items: 1) Put char will advance cursor and possibly insert lines.
         2) Get char will advance cursor but not insert lines.
         3) Get char over blank will return $20 (SPACE).
         4) Put EOL ($9B) will move cursor to left margin of next line.
         5) A GRAPHICS 8+16 will set graphics mode on the XEP80.
            Or if IOCB #N is opened with AUX1=$1C and AUX2=08.
         6) When in graphics mode on the XEP80 the cursor is initially
            in the upper left hand corner of the graphics window. Each
            byte sent to the XEP80 will be placed on the screen as a
            series of 8 dots (MSB to LSB) corresponding to the binary
            value of the byte or ATASCII value of the character. The
            cursor then moves over 8 dots to the right to show where
            the next byte will be placed. When the cursor reaches the
            right edge of the window it moves to the left edge and down
            one line.
         7) Currently Put char sends ESC followed by the character.
            This will give two bytes per put in graphics mode. Therefore
            use Put char through E: when transmitting graphics data.
         8) The graphics mode command automatically sets burst mode.
         9) The handler will support standard ANTIC graphics calls while
            in 40 col mode, provided enough room has been allocated in
            RAM. For normal boot environments this means GRAPHICS 1,2,
            3,4 only.





  3.2.2 Printer Operations

      The XEP80 will also output single characters to the printer port
  through a 2K internal buffer. Data presented to the printer by the handler
  may be interpreted in one of three ways:

      No Translation - All 8 data bits of character information will be
  passed to the printer port.

      Light Translation - ATASCII EOL ($9B) is translated by the printer
  handler to the CR and LF characters before transmission to the printer.
  This is the default printer mode. Optionally, only the CR may be sent for
  EOL.

      Heavy Translation - Light translation plus ASCII characters below $20
  will be translated to a "^" character (for CONTROL) followed by the
  corresponding letter before being sent to the printer. The MSB will be set
  to 0.

      The printer output may be directed to either the XEP80 (parallel) or
  serial ports or both. The unit number (such as P2:) may be kept or altered
  depending upon the need. See chart below.


    Calls to "P:"

      Open        Assign printer handler to IOCB #N and issue status
                  request to printer. AUX1 must be 08 (Write only).
      Close       unassign handler from IOCB #N
      Get Char    Not supported
      Put Char    Send a character to the printer port
      Get Status  Returns status of printer BUSY line, 1=available,
                  139=busy or off line.
      Special     Configure printers and select translate mode (see
                  chart below). Do before OPEN to printer.




    Special Configuration Command to P:  Command byte =$17

    Configuration Byte Assignments for AUX1

      +-+-+-+-+-+-+-+-+
      |7|6|5|4|3|2|1|0|    Bit positions
      +-+-+-+-+-+-+-+-+

       0 0 0 0 0 * * 0     P1: - Parallel Port
       0 0 0 0 0 * * 1     P1: - Serial Port as P1:
       0 0 0 0 0 0 0 *     P2: - Serial Port as P2:
       0 0 0 0 0 0 1 *     P2: - Serial Port as P1:
       0 0 0 0 0 1 0 *     Reserved
       0 0 0 0 0 1 1 *     P2: - Parallel Port
       0 0 0 0 1 * * *     Reserved
       0 0 0 1 * * * *     "
       0 0 1 * * * * *     "
       0 1 * * * * * *     "
       1 * * * * * * *     "

    Configuration Byte Assignments for AUX2

       0 0 0 0 0 0 0 0     Light translation - EOL to CR/LF
       0 0 0 0 0 0 0 1     No translation
       0 0 0 0 0 0 1 0     Heavy translation - EOL to CR/LF
       0 0 0 0 0 0 1 1     Reserved
       0 0 0 0 0 1 0 0     Light translation - EOL to CR
       0 0 0 0 0 1 0 1     No translation
       0 0 0 0 0 1 1 0     Heavy translation - EOL to CR
       0 0 0 0 0 1 1 1     Reserved
       0 0 0 0 1 * * *     "
       0 0 0 1 * * * *     "
       0 0 1 * * * * *     "
       0 1 * * * * * *     "
       1 * * * * * * *     "

      Note - P3 through P15 are not alterable; they remain unaffected
  by the handler and are directed only over the serial bus.





                   4.0 Communications Interface

  4.1 Communication Fundamentals

      Communication with the XEP80 will be handled by sending serialized
  data over bit 0 or 4 (JOY0,JOY1) and receiving serialized data over bit
  1 or 5 (JOY0,JOY1) of the PIA A I/O register. Data will be shifted at
  15.7KB. Transmitted and received data will each contain 9 bits of infor-
  mation . Data will be shifted out as follows: a start bit of value zero,
  followed by bits D0 through D7, followed next by a control bit to indicate
  whether data (0) or command (1) information has been sent, then terminated
  with a stop bit of value 1. Currently the supplied handler will provide
  data shifting on the computer end. Any applications that do not use the
  handler or drive the XEP80 at a different baud rate must provide code for
  this. It must be understood that this code is time critical in operation,
  so all 6502/ANTIC cycles must be accounted for during data shifting.

      An alternate transmit/receive mode, "burst mode", allows faster transmit
  times. The XEP80 to computer data line (receive line) is high (1) when
  characters may be sent and it is a low (0) when the XEP80 is busy. Thus
  no cursor information is returned. This mode applies only to characters to
  be sent to the screen (including control characters) and characters sent
  to the printer (the only mode for the printer). Burst mode does not apply to
  commands of any sort.

      Any custom handler that sets burst mode must be aware of how to handle
  communication from that point.
      When waiting for a cursor or character (non burst mode) monitor the
  data-in line immediately after transmitting a byte.
      When in burst mode wait at least 90 usec before testing the data-in
  line for 0 (busy) or 1 (ready).
      Do not allow any 6502 interrupts when transmitting or receiving the
  serialized data, as this will modify the baud rate timings.
      Interrupts may be allowed while waiting for the XEP80 to go ready in
  burst mode. Thus other interrupt driven processes such as a modem handler
  will not lose characters.






  4.2 Communication Protocol

      Characters sent to the XEP80 will cause a 1 or 2 byte cursor
       to be returned - see 4.3.1 and 4.3.6
      Commands are subdivided into three groups:
       1) Stand alone commands - no response expected - see 4.3.2
       2) Get Character - character and cursor returned - see 4.3.3
       3) Get Data commands - data byte only returned - see 4.3.4
      Cursor values returned from XEP80 are determined by following logic:
       1) If only Y cursor has changed, only Y is returned
       2) If only X cursor has changed, only X is returned
       3) If both have changed both are returned (X is returned first)
       4) If neither changes only X is returned

     COMPUTER    XEP80

     1  CMD-->               Stand alone command


     2  CMD-->               Get data command
              <--CHAR        Return value


     3  CMD-->               Get character command
              <--CHAR        Return character
              <--CURSOR X    and X cursor


     4  CMD-->               Get character command
              <--CHAR        Return character
              <--CURSOR Y    and Y cursor


     5  CMD-->               Get character command
              <--CHAR        Return character
              <--CURSOR X    and X and Y cursor
              <--CURSOR Y


     6  CHAR->               Output character
              <--CURSOR X    Return X cursor


     7  CHAR->               Output character
              <--CURSOR Y    Return Y cursor


     8  CHAR->               Output character
              <--CURSOR X    Return X and Y cursor
              <--CURSOR Y

     9  CHAR->               Burst Mode - send character
            ___.     .___    High (1) Ready
               |_____|       Low (0) Busy






  4.3 Command/Data Values

  4.3.1 Data Output - Return Cursor

      +-+-+-+-+-+-+-+-+-+
      |8|7|6|5|4|3|2|1|0|
      +-+-+-+-+-+-+-+-+-+

       0 * * * * * * * *    Character to be output ($00-FF) (3.2.1.1, 3.2.2)


  4.3.2 Stand Alone Command - No Information Returned

      +-+-+-+-+-+-+-+-+-+
      |8|7|6|5|4|3|2|1|0|
      +-+-+-+-+-+-+-+-+-+

       1 0 0 * * * * * *    Horizontal Cursor Position ($00-3F)
       1 0 1 0 0 * * * *    Horizontal Cursor Position ($40-4F)
       1 0 1 0 1 * * * *    Horiz Curs Pos High Nibble - for wide screen
       1 0 1 1 0 * * * *    Left Margin Low Nibble - sets high nibble to 00
       1 0 1 1 1 * * * *    Left Margin High Nibble
       1 1 0 0 0 * * * *    Vertical Cursor Position ($00-0F)
       1 1 0 0 1 0 * * *    Vertical Cursor Position ($10-17)
       1 1 0 0 1 1 0 0 0    Set Cursor to Status Row ($18) See caution, Pg. 6
       1 1 0 0 1 1 0 0 1    Set Graphics to 60 Hz
       1 1 0 0 1 1 0 1 0    Modify Graphics to 50 Hz
       1 1 0 0 1 1 0 1 1    Reserved
       1 1 0 0 1 1 1 * *    Reserved
       1 1 0 1 0 * * * *    Right Margin Low Nibble - sets high nibble to 04
       1 1 0 1 1 * * * *    Right Margin High Nibble
       1 1 1 0 1 0 0 0 0    Clear List Flag
       1 1 1 0 1 0 0 0 1    Set List Flag
       1 1 1 0 1 0 0 1 0    Set Screen Normal Mode - cursor returned each char
       1 1 1 0 1 0 0 1 1    Set Screen Burst Mode - no cursor returned
       1 1 1 0 1 0 1 0 0    Select Character Set A - Atari graphics (ATASCII)
       1 1 1 0 1 0 1 0 1    Select Character Set B - Atari international
       1 1 1 0 1 0 1 1 0    Select XEP80 Internal Character Set
       1 1 1 0 1 0 1 1 1    Modify Text to 50 Hz Operation
       1 1 1 0 1 1 0 0 0    Cursor Off
       1 1 1 0 1 1 0 0 1    Cursor On Continuous
       1 1 1 0 1 1 0 1 0    Cursor On Blink
       1 1 1 0 1 1 0 1 1    Move Cursor to Start of Logical Line
       1 1 1 0 1 1 1 0 0    Set Scroll Window to Cursor X Value
       1 1 1 0 1 1 1 0 1    Set Printer Output
       1 1 1 0 1 1 1 1 0    Select White Characters on Black Background
       1 1 1 0 1 1 1 1 1    Select Black Characters on White Background
       1 1 1 1 * * * * *    Reserved





  4.3.3 Get Character Command - Data byte and cursor returned (4.3.5, 4.3.6)

      +-+-+-+-+-+-+-+-+-+
      |8|7|6|5|4|3|2|1|0|
      +-+-+-+-+-+-+-+-+-+

       1 1 1 0 0 0 0 0 0    Get Character from XEP80 at cursor (and advance)


  4.3.4 Get Data Command - Data byte returned (4.3.5)

      +-+-+-+-+-+-+-+-+-+
      |8|7|6|5|4|3|2|1|0|
      +-+-+-+-+-+-+-+-+-+   Command Function for XEP80     Byte Returned

       1 1 1 0 0 0 0 0 1    Request Horizontal Cursor     X Cursor Value
       1 1 1 0 0 0 0 1 0    Master Reset                  01
       1 1 1 0 0 0 0 1 1    Printer Port Status           00=busy 01=on line
       1 1 1 0 0 0 1 0 0    Fill RAM with previous char   01
       1 1 1 0 0 0 1 0 1    Fill RAM with space ($20)     01
       1 1 1 0 0 0 1 1 0    Fill RAM with EOL ($9B)       01
       1 1 1 0 0 0 1 1 1    Reserved
       1 1 1 0 0 1 * * *    "




  4.3.5 Received Data - Normal Communication Mode

      +-+-+-+-+-+-+-+-+-+
      |8|7|6|5|4|3|2|1|0|
      +-+-+-+-+-+-+-+-+-+

       0 * * * * * * * *    Character from Screen or H. Cursor if requested

  4.3.6 Received Cursor - Normal Communication Mode

      +-+-+-+-+-+-+-+-+-+
      |8|7|6|5|4|3|2|1|0|
      +-+-+-+-+-+-+-+-+-+

       1 0 0 * * * * * *    H. Cursor Position ($00-3F) Vert does not follow
       1 0 1 0 0 * * * *    H. Cursor Position ($40-4F) Vert does not follow
       1 0 1 0 1 0 0 0 0    H. Curs Pos >4F No Vert Follows - see note
       1 0 1 0 1 0 0 0 1    Reserved
       1 0 1 0 1 0 0 1 *    Reserved
       1 0 1 0 1 0 1 * *    Reserved
       1 0 1 0 1 1 * * *    Reserved
       1 0 1 1 * * * * *    Reserved
       1 1 0 * * * * * *    H. Cursor Position ($00-3F) Vert follows
       1 1 1 0 0 * * * *    H. Cursor Position ($40-4F) Vert follows
       1 1 1 0 1 0 0 0 0    H. Curs Pos >4F Vert Follows - see note
       1 1 1 0 1 0 0 0 1    Reserved
       1 1 1 0 1 0 0 1 *    Reserved
       1 1 1 0 1 0 1 * *    Reserved
       1 1 1 0 1 1 * * *    Reserved
       1 1 1 1 0 * * * *    V. Cursor Position ($00-0F)
       1 1 1 1 1 0 * * *    V. Cursor Position ($10-17)
       1 1 1 1 1 1 0 0 0    V. Cursor Position for Status Line ($18)
       1 1 1 1 1 1 0 0 1    Reserved
       1 1 1 1 1 1 0 1 *    Reserved
       1 1 1 1 1 1 1 * *    Reserved

      Note - when "Horizontal Cursor Position Greater Than $4F" byte is
  received, the computer may obtain the actual value with the "Request
  Horizontal Cursor from XEP80" command.





       Appendix A   Application Notes

    1) Characters may be printed over EOLs in the right margin column without
  causing insert lines to occur by setting the right margin at least one more
  column to the right.

    2) The firmware of the XEP80 uses just under 2K of the available address
  space - thus allowing rom replacements to incorporate additional features.

    3) Debug mode allows reading of the parallel port so with the addition of
  a latch on the XEP80 board the port becomes bidirectional.

    4) If large text screen (greater than 80 columns wide) needs to be erased
  use the Fill XEP80 RAM with EOL command rather than the Clear Screen char.
  Clear Screen only clears the current 80 column 24 line high window.

    5) X Cursor > $4F is handled by the handler. The handler automatically
  sends the Request Horizontal Cursor command to the XEP80 whenever a $50
  cursor X value is returned.

    6) When using the XEP80 Internal Character Set issue the Fill XEP80 RAM
  with Space command to blank the screen. However, when sending characters to
  the XEP80 screen, either precede each one with an ESC character or set the
  LIST flag so that screen edits do not occur.

    7) Graphics 8 screen dumps will require a short discussion. Since the OS
  requires 8K RAM to set up a mode 8 screen the handler cannot reside in its
  standard address space. An appended AUTORUN.SYS file must first set the
  MEMTOP pointer to 8K below the top of RAM (check actual mode 8 value). Then
  the relocater will move the handler below this point. After entering 40 col
  mode the GRAPHICS 8 call may be made. Plotting etc. to the screen is through
  the normal S: interface of the OS. When done the application will set XEP80
  mode then set XEP80 graphics, then read from the ANTIC screen RAM and output
  to the XEP80.

    8) Changing default printer configuration at boot time is shown by disk
  program PRINTER.BAS on the system diskette.





       Appendix B   Relocater Format for XEP80 Handler

      Values in Boxes are in HEX Format

      AUTORUN.SYS File Format            Relocating Format of Handler

      +-------+                          +----+
      | FF,FF | DOS Load File         +--| XX | Link byte to first
      +-------+                       |  +----+   Relocate byte
      | 00,30 | Start Address=$3000   |  :    :
      +-------+                       |  :    : Valid 6502 Code
      | LO,HI | End Address           |  +----+
      +-------+                       +->| XX | High Byte to relocate
      :       : Relocater                +----+   add offset
      :       :   Code                +--| XX | Link byte to second
      +-------+                       |  +----+   Relocate byte
      | LO,HI | Handler Length        |  :    :
      +-------+                       |  :    : Valid 6502 Code
      |  20   | JSR Instruction       |  +----+
      +-------+ for DOSINI set        +->| XX | High Byte to relocate
      | LO,HI | by Relocater             +----+   add offset
      +-------+                       +--| 00 | Example Link of 0
      |  4C   | JMP Instruction       |  +----+   following byte is
      +-------+ to INIT code          +->| XX | High byte to relocate
      | LO,HI | set by Relocater         +----+
      +-------+                       +--| 80 | Special Case 80 means
      | 00,00 | Printer Aux bytes     |  +----+   skip 127 data bytes
      +-------+                       |  :    :   then treat byte 128
      :       : XEP 80 Handler        |  :    :   as the next link
      :       :   Code in             +->+----+
      :       : Relocating Format     +--| XX | Link
      +-------+                       |  +----+
      | E2,02 | INIT Vector           |  |    | Valid 6502 Code
      +-------+                       |  +----+
      | E3,02 | for DOS               +->| 00 | Dummy byte to Relocate
      +-------+                          +----+   to maintain links
      | 00,30 | RUN Address              | FF | Special Case FF means
      +-------+                          +----+   end of File




       Appendix C   Contents of System Diskette

       DOS.SYS             DOS 2.5
       DUP.SYS

       AUTORUN.SYS         XEP80 Relocater and Handler

       XEP80.DOC           This Document

       XEP80HAN.SRC        Handler in assembly source
       RELOC.SRC           Relocater in assembly source
       MAKER.BAS           Program to generate AUTORUN.SYS

       WINDOW.BAS          Examples for Owners Manual
       EIGHTY.BAS
       PRINTER.BAS
       GRAPHICS.BAS

       DEMO80.BAS          Demonstration program for XEP80