Programming NICK                                    84.1.17 ET1/1 



                  PROGRAMMING THE NICK CHIP 
                  ************************* 

In  contrast to the majority of video display devices which allow 
the  user various modes for the whole display,  NICK allows  many 
different modes in the same display frame. 
Principal features of NICK are:- 
    * Mixed mode displays 
    * User definable characters from fonts of 64, 128 and 256 
    * 8-bit colour output (256 colours) 
    * 2,4,16 and 256 colours per line chosen from 256 
    * Maximum resolution (using interlace) 672 x 512 
    * Cell based graphics, bitmap and characters 
    * Characters any hight from l to 256 scanlines 
    * Choice of 256 border colours 
    * User defined screen width and height 
    * External colour input (unlimited sprites or TV camera) 
    * Efficient use of RAM (can work with < 1K of RAM) 
    * 4 colour-pairs in 84 column text mode 
    * Special use of bits to increase colour options 
    * Pointer-based memory mapping, for flexibility and speed 


                    CONTROL REGISTERS 
                    ***************** 
Input-output  addresses  080H  to  08FH  are  reserved  for  NICK 
registers although only 080H to 083H are used at present.   These 
registers are write-only. 
080H     /FIXBIAS 
          d7             VC1 output used to kill external colour 
          (d6,d5)        (PRIOR1,PRIOR0)      external    colour 
                        priority, working in conjunction with an 
                        external 4-bit (16 colour-value) input 
                        on EC0-EC3 
                  =00    EC0-EC3   select  corresponding  palette 
                        colour whenever the display  is  active 
                        and /EXTC is low 
                  =01    The external colour on EC0-EC3 selects 
                        the corresponding palette colour if 
                        /EXTC is low and the internal display 
                        is generating a palette colour in the 
                        range COL8-COL15. 
                  =10    The external colour on EC0-EC3 selects 
                        the corresponding palette colour if 
                        /EXTC is low and the internal display 
                        is generating a palette colour in the 
                        range C0L8-C0L15 OR the external colour 
                        is in the range COL0-C0L7 (EC3 low) 
                  =11    The external colour on EC0-EC3 selects 
                        the corresponding palette colour if 
                        /EXTC is low and the internal display 
                        is generating a palette colour in the 
                        range COL8-COL15 OR the external colour 
                        is in the ranges COL0-COL3 or COL8- 
                        COL11 (EC2 low) 
        (d4..d0)        colour bias for palette colours 8-15 
081H     /BORDER 
        (d7..d0)         8 bit border colour 
082H     /LPL 
        (d7..d0)         (a11 ..a4) of pointer to line parameter 
                        table in video RAM. The index into an 
                        entry of 16 bytes,(a3..a0), is generated 
                        by the hardware. 
083H     /LPH 
        d7              (load line parameter base) normally 1 
        d6              (clock in line parameter base) 
        (d3..d0)        (a15..a12) or pointer to the line 
                        parameter table in video RAM. 

The  video display is controlled by values loaded into the  video 
RAM  segments (up to 64K at the top of the 4M space) by the  Z80. 
Once  this 'line parameter table' has been loaded in and the line 
parameter  base register has been loaded the display requires  no 
more action on the part of the Z80. 
The visible display is split up into 'video mode  lines'.   These 
'modelines'  are made up of 1 to 256 scanlines.   (A scanline  is 
one  scan of the electron beam across the CRT and takes about  64 
microseconds.) 
The  following  16 registers are loaded from the  line  parameter 
table before each modeline: 
    ------------------------------------------------------- 
    SC        scanlines in this modeline (two's complement) 
    MB        the MODEBYTE (defines video display mode) 
    LM        left display margin etc. 
    RM        right margin etc. 
    LD1L      (a7..a0) of line data pointer LD1 
    LD1H      (a8..a15) of line data pointer LD1 
    LD2L      (a7..a0) of line data pointer LD2 
    LD2H      (a8..a15) of line data pointer LD2 
    COL0      8 bit value of palette colour 0 
    COL1              "         "           l 
    COL2              "         "           2 
    COL3              "         "           3 
    COL4              "         "           4 
    COL5              "         "           5 
    COL6              "         "           6 
    COL7              "         "           7 
    -------------------------------------------------------- 

                BUS ACTIVITY FOR THE VARIOUS MODES 
                ********************************** 

The possible video modes are: 
VSYNC     no border colour and use margin information to control 
          positioning of the vertical sync pulse. This gives 
          considerable interlace flexibility. 
PIXEL     use information pointed to be LD1 as a bit mapped 
          display. 
ATTR      use information pointed to by LD2 as a 2-C bitmap 
          display and information pointed to by LD1 as cell- 
          based graphics attributes (i.e. to define paper and 
          ink colours in the cell). 
CH256     use information pointed to by LD1 as indices of 
          characters pointed to by LD2. These characters can 
          by any number of lines deep (up to 256). 
          NB: offsets in the font pointer define which line of 
          the character to start on. 
CH128     As above but assumes a font of 128 characters. 
CH64      As above but assumes a font of 64 characters. 
LPIXEL    As for pixel mode but with half the horizontal 
          resolution. 
Note that all these modes may be mixed on the same screen and 
one has the choice of 2-C,  4-C,  16-C and 256-C colour modes for 
the PIXEL,  LPIXEL,  CH256,  CH128 and CH64 modes.  Also note the 
special  interpretation of certain bits of display data described 
below. 
                        -------------- 

Details of bus use during a memory cycle in the various modes: 
PIXEL                     /VDC1               /VDC2 
Address             LD1 (15....0)       LD1 (15....0) 
Data into           BUF1 (7....0)       BUF2 (7....0) 
BUF1 and BUF2 are loaded sequentially into the shift register and 
clocked out MSB first, ie. both are display bytes.  The line data 
pointer  LD1 is incremented twice in each memory  cycle.   Screen 
data  is  fetched from memory and the LD1 counter is  incremented 
only in the active part of the display,  ie. between the left and 
right  margins of a scanline.   The scanline count loaded at  the 
beginning of the PIXEL modeline determines how many scanlines  in 
this scanline. 
ATTR                 /VDC1               /VDC2 
Address             LD1 (15....0)      LD2 (15....0) 
Data into           BUF1 (7....0)      BUF2 (7....0) 
Cell  based  (parallel  attribute) graphics.   LD1 is used  as  a 
pointer  to  the  colour array (paper and ink  colours)  and  LD2 
points  at  2-C  pixel data,  ie.  the  display  bytes.   LD2  is 
incremented  once every memory cycle while the display is  active 
and keeps incrementing up for all scanlines in the modeline.  LD1 
restarts  from  the same address for each scanline  so  attribute 
data  in BUF1 applies to cells which are 8 bits wide and  have  a 
depth of the number of scanlines in the modeline. 
The  character  modes involve indirection through  the  character 
font.  A different font may be defined for each modeline and line 
by line vertical scrolling is obtained by offsetting the original 
index. 
CH256            /VDC1                   /VDC2 
Address       LD1 (15....0)          LD2(7.... 0),BUF1(7....0) 
Data into     BUF1 (7....0)          BUF2 (7....0) 
LD1  is  reloaded  at the start of each scanline and  acts  as  a 
pointer  into  a  section of RAM containing the  indices  of  the 
characters  to  be displayed.   It is incremented  once  in  each 
memory  cycle.   LD2  is a pointer into the character font to  be 
used and is incremented at the start of each scanline (it  points 
to  a row of a character in the font.)  Thus the font consists of 
256  bytes  defining the first row  of each  character  and  then 
another 256 bytes for the next row of each character etc.  If the 
characters are 9 lines deep this requires 2304 bytes of character 
font  (256x9).   The  data  in  BUF2 is  loaded  into  the  shift 
register. 
CH128                  /VDC1                  /VDC2 
Address             LD1(15.... 0)        LD2 (8....0) BUF1(6....0) 
Data into           BUF1(7....0)         BUF2(7....0) 
This  is  basically the same as the 256 character font  mode  but 
note  that the font for 128 9 line deep characters only  requires 
1152 bytes of memory. 
CH64                   /VDC1                  /VDC2 
Address             LD1(15.... 0)        LD2(9....0) BUF1(5....0) 
Data into           BUF1(7.... 0)        BUF2(7.... 0) 
This  is  basically the same as the 256 character font  mode  but 
note  that the font for 64 9 line deep characters  only  requires 
576 bytes of memory. 
LPIXEL                   /VDC1                /VDC2 
Address             LD1(15....0)         LD1(15....0) 
Data into           BUF1(7....0)         BUF2(7....0) 
This  is  much  the same as the PIXEL mode except  that  the  LD1 
pointer  is  only incremented once in each memory cycle  and  the 
BUF2 data is not used.  This gives half the horizontal resolution 
of the PIXEL mode. 
VSYNC 
No  use  is made of the information loaded from  memory.   It  is 
equivalent to the LPIXEL mode. 



                  THE LINE PARAMETER REGISTERS 
                  **************************** 

SC  This is a two's complemented count of the number of scanlines 
    in the modeline, ie:  0FFH for one scanline in modeline. 
MB     d7       If set this takes the VIRQ interrupt line low for 
                the  duration of the  modeline.   In  conjunction 
                with the DAVE chip this causes an interrupt to be 
                generated at the beginning of the modeline. 
      (d6,d5)   Defines the colour mode: 
        00     2-C Two colour mode.   If a bit in the  byte  of 
                display  data is 1 a pixel of palette colour 1 
                is output and if 0 a pixel of palette colour 0. 
                The  bits  are  output  to  the  screen  in  the 
                following order: 
                    ----------------------------------------- 
                    :    :    :    :    :    :    :    :    : 
                    : d7 : d6 : d5 : d4 : d3 : d2 : d1 : d0 : 
                    :    :    :    :    :    :    :    :    : 
                    ----------------------------------------- 
        01     4-C Four colour mode.   Pairs of bits in the  byte 
                of display data define the colour of the pixel 
                displayed.   00  for  palette colour  0,  01  for 
                palette colour l, 10 for palette colour 2, and 
                11   for  palette  colour  3.    The  pixels  are 
                displayed in the following order: 
                    ----------------------------------------- 
                    :         :         :         :         : 
                    : (d7,d3) : (d6,d2) : (d5,d1) : (d4,d0) : 
                    :         :         :         :         : 
                    ----------------------------------------- 

        10     16-C Sixteen colour mode.  Groups of 4 bits in the 
                byte  of  display data define the  colour  of  the 
                pixel displayed.  0000 for palette colour 0 up to 
                1111  for  palette  colour 15.   The  pixels  are 
                displayed in the following order: 
                    ----------------------------------------- 
                    :                   :                   : 
                    :  (d7,d5,d3,d1)    :   (d6,d4,d2,d0)   : 
                    :                   :                   : 
                    ----------------------------------------- 

Note  that palette colours 0 to 7 have 8-bit values loaded from 
the  line parameter table at the start of each scanline but  that 
palette colours 8 to 15 have 8-bit values defined as follows:- 
    palette colour  8 = (f4,f3,f2,fl,f0,0,0,0) 
    palette colour  9 = (f4,f3,f2,fl,f0,0,0,1) 
          ...... 
    palette colour 15 = (f4,f3,f2,f1,f0,1,1,1) 
where  (f4,f3,f2,fl,f0)  are  the  low  5  bits  of  the  FIXBIAS 
register. 
11   256-C Two hundred and fifty six colour mode. 
    In this mode the byte of display data defines the colour  of 
    a single display pixel. 
    The actual colour produced is as follows:- 
    RED   = (b0)*(4/7) + (b3)*(2/7) + (b6)*(1/7) 
    GREEN = (b1)*(4/7) + (b4)*(2/7) + (b7)*(1/7) 
    BLUE  = (b2)*(2/3) + (b5)*(1/3) 
    (Note  that this specification of red,  green and blue  also 
    occurs when allocating a colour to the palette.) 
d4   =0 for /VRES.  The VRES mode the LD1 and LD2 data pointers 
    are reloaded at the start of each scanline and so the same 
    display  pattern  is  repeated  for  each  scanline  of  the 
    modeline. 
(d3,d2,d1)  defines the video display mode (see above): 
            000 VSYNC mode 
            001 PIXEL mode 
            010 ATTR mode 
            011 CH256 mode 
            100 CH128 mode 
            101 CH64 mode 
            110 unused at present 
            111 LPIXEL mode 
    d0     If 1 this forces a reload of the line parameter base 
            register.   This will normally be programmed to occur 
            at the end of each video frame. 
LM   d7     =1 for MSBALT, ie: if the top bit of the display byte 
            is  l  this  causes palette colours 2 and 3  to  be 
            selected  instead  of 0 and 1 in  the  2-C  display 
            mode.  If the top bit is 0 palette colours 0 and 1 
            are used as usual.  In both cases the top bit seen by 
            the  shift  register is forced to 0.   This  mode  is 
            useful in simulating an 80 column VDU in the PIXEL 
            mode.  Since the msb or LHS of any character is 0 for 
            character  spacing it can-be used to highlight  areas 
            of text. 
    d6     =1  for LSBALT ie:   if the bottom bit of the  display 
            byte is 1 this causes palette colours 4 and 5 to be 
            selected instead of 0 and 1 in the 2-C display mode. 
            If the top bit is 0 palette colours 0 and 1 are used 
            as usual.  In both cases the top bit seen by the shift 
            register is forced to 0.  This mode is useful in 
            simulating an 80 column VDU in the PIXEL mode, Since 
            the lsb or RHS of any character is 0 for character 
            spacing it can be used to highlight areas of text. 
  (d5...d0) define the left hand margin of the active display. 
            In practice this value will not be below 10 for the 
            left hand edge of the CRT.  The display changes from 
            being border colour at the left hand margin and the 
            display data counters start being incremented.  The 
            left hand margin defines the start of the vertical 
            sync pulse in the VSYNC video mode. 
RM    d7    ALTIND1 If a 2-C character mode is selected this will 
            cause characters with an index above 080H to have a 
            paper of palette colour 2 and an ink of palette colour 
            3 instead of 0 and 1. 
      d6    ALTIND0  If a 2-C character mode is selected this  will 
            cause   characters  which  have  their  next  to   most 
            significant   bit  set  to  swap  palette  colours   as 
            follows:- 
                          0 - > 4 
                          1 - > 5 
                          2 - > 6 
                          3 - > 7 
  (d5...d0) These  bits define the right hand side of  the  active 
            display.   The  maximum  value is normally 54  for  the 
            right hand edge of the CRT.  The display returns to the 
            border  colour  at the right hand margin and  the  line 
            data pointers are not incremented until the next left 
            hand margin.  In the VSYNC video mode the right hand 
            margin defines the end of the vertical sync pulse. 
LD1L        This 8-bit value defines the starting value of (a7..a0) 
            of the line data pointer LD1. 
LD1H        This  8-bit  value  defines  the  starting  value  of 
            (a8..a15) of the line data pointer LD1. 
            LD1 is used as a pointer to the next byte of display 
            data in the PIXEL and LPIXEL modes.  In the CH256, 
            CH128 and CH64 modes it is the index of a character 
            in the character font.  In the ATTR mode it points to 
            attribute information. 
LD2L        This 8-bit value defines the starting value of (a7..a0) 
            of the line data pointer LD2. 
LD2H        This  8-bit  value  defines  the  starting  value   of 
            (a8..a15) of the line data pointer LD2. 
            LD2 is used as a pointer for pixel information in the 
            ATTR  display  mode and as a pointer to  the  character 
            font in the CH256, CH128 and CH64 modes. 
            It is not at present used in the PIXEL and LPIXEL modes 
            but it is hoped that it will define vertical pixel 
            resolution at a later date. 
COL0        Palette  colour 0.   This is the paper colour  in  2C 
            modes though note the exceptions above. 
COL1        Palette colour E1.  This is the ink colour in 2C modes 
            though note the exceptions above. 
COL2        Palette colour 2 (Alternate paper) 
COL3        Palette colour 3 (Alternate ink) 
COL4        Palette colour 4 
COL5        Palette colour 5 
COL6        Palette colour 6 
COL7        Palette colour 7 



**********************END OF DOCUMENT****************************