Re: Introducing uniengine technology

From: William Overington (
Date: Tue Feb 27 2001 - 07:50:38 EST

The uniengine technology that I am developing has 45 instruction commands
and 1024 data commands.

These 1069 commands are expressed using unicode code points in a part of the
unicode private use area, namely within U+EB80 to U+EBFF for the instruction
commands, and using all of U+EC00 to U+EFFF for the data commands.

The uniengine has a number of registers consisting of an accumulator and
registers X0, X1, Y0, Y1, Z0, Z1, T0, T1 for points in space-time, ZH0, ZH1,
ZL0, ZL1 for range limits in the Z direction, TT0, TT1 to specify a time

C0 is used to specify a colour number for the current colour, in the range 0
to 1023.

R0, G0, B0 are used to specify red, green, blue values to use in defining a
specified colour, using values from 0 to 255.

H0, H1, H2 are used to specify a hypercode character in the range H+110000
to H+3FFFFFFF and could also be used to specify a unicode character in the
range U+0000 to U+10FFFF.

There are HA, AA, WA registers to mean the actual height, ascender and width
of a character cell for use when drawing a character from a previously
specified character pattern written in uniengine software, which pattern may
be either in the current document or in a font document.

There are HF, AF, WF registers to mean the formal height, ascender and width
of a character cell for use when specifying a character pattern, either in
the current document or in a font document.

The 1024 data commands all have the effect of loading their 10 least
significant bits into the accumulator.

An overview of the 45 instruction commands is as follows.

One is used to initialize or reinitialize the uniengine registers, if
desired, as it is not always necessary to do so.

Twenty-four are used to copy the contents of the accumulator to a register.
That is, one for each of the above registers except for HA, AA, WA.

One is used to define the nominated colour, that is colour C0 using R0, G0
and B0.

One is Movepen.

One is Drawline.

One is Fill a rectangle.

One is Prepare to start drawing a filled polygon.

One is Complete the drawing of the filled polygon.

Four are ligatures of copy from accumulator and movepen or drawline to save

Two are used to start and end a character definition.

One is to draw a hypercode character from an external font.

One is to draw a character by obeying the uniengine software in a
previously defined hypercode character.

One is to return to the main character stream from obeying a previously
defined hypercode character.

Four are used to gather cell actual height and ascender from the renderer
and to compute the cell actual width from those and the formal height and
width and a ligature to save coding.

One is used to send a value back to the renderer indicating the number of
pixels to add to the renderer's horizontal position. This is not used if a
character in a non-uniengine external font is drawn as the renderer should
obtain the width from the font metrics.

A total of forty five commands.

The only output from the uniengine is a number sent to the renderer to say
how many pixels to the right to move the start point for the next cell and
drawing commands to change the colour of the pen being used to draw,
drawline commands and commands to draw a filled rectangle and a filled
polygon. I may place a limit on the number of points that can be drawn in
any one polygon, maybe 20 points.

Any renderer software that recognizes and uses uniengine software will need
to accept the drawline commands and rectangle and polygon drawing commands
and add in the horizontal position incremental value where provided.

It is possible that I may add a few more commands as research proceeds. The
possibility exists of having compare instructions and conditionally obeyed
instructions, so that a character may be defined so as to be drawn in a
different manner if it is large from the way it is drawn if it is small.
This is envisaged as being implemented by having a flag set to reflect the
result of a compare instruction and having some additional instructions that
are only obeyed if the flag is set, such as a conditional drawline command.
This means that conditional execution may take place without the need to
have jump instructions, which uniengine software specifically does not have.


I presently envisage the following uses for uniengine technology.

Including images that are effectively raster scan images in a unicode file, with a visual effect as if a gif file had been embedded.

Including images that are vector drawn images in a unicode file.

Accessing hypercode characters in the range H+110000 to H+3FFFFFFF in a unicode format file, including in a 16 bit character format file.

Adding a local character glyph to the repertoire of a font for a particular file.

Defining uniengine format fonts for drawing characters.

Assisting the specification of characters in the hypercode area by supporting a specification procedure that requires a registration application to be accompanied by a uniengine file that defines the way that the character should be drawn.


The system is designed to be able to produce useful results in a straightforward manner yet to be built with strong foundations so that the uniengine may be extended to other formats later if so desired.

William Overington

27 February 2001

This archive was generated by hypermail 2.1.2 : Tue Jul 10 2001 - 17:21:19 EDT