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****************************