Next is the address generator/graphics instruction engine.
Here are the targeted controls/capable features: (We want to make 1 identical algorithm which will be used 4 times.)
1) Enable/disable. Requires 1 bit.
2) The base/beginning of a memory address which contains either the screen text data, font data, graphics data and sprite data. (This eats 20 bits since we can address 1 megabyte for this address)
3) Vertical memory increment size. When beginning a new line, this is the amount added every time to the base address. (16 bits is fair, maximum 64kb wide picture.)
4) Pixel type. 1bit=8 pixels wide per byte 2 colors per pixel,
2bit=4 pixels per byte 4 colors per pixel,
4bit=2 pixels per byte 16 colors,
8bit=1 pixel per byte, 256 colors,
16bit=2 bytes per pixel, 65k true-color
= 5 settings possible meaning requires 3 bits for this setting.
5) X scale. Counts the number of pixels wide each bitmap image pixel will occupy. 1 through 16 (4 bits)
6) Y scale. Counts the number of lines each bitmap image line will occupy. 1 through 16 (4 bits)
7) Sub-pixel starting X&Y coordinates. This setting vertically & horizontally shifts the image up and to the left by single pixels in text mode and 4/2/1 bit color modes. IE, smooth scrolling of text horizontally by up to 7/8th of 1 character, then you can change the base memory address by 1 character and reset this setting back to 0 allowing you to move the text pixel by pixel horizontally and vertically. The shift 16 pixels x by 16 pixels y , or 8 bits total.
8 ) Special control for font size. 8x8 pixel bitmap to 16x16 bitmap. 4 bit control.
9) Total number of video lines to render before loading a new set of the above controls. This will allow you to switch video modes mid screen, EG: have a window of 40 column text for half the screen, then switch to 80 column text for the bottom half.
Have I missed anything. The total here is around 14 control bytes, or, we will reserve 16 bytes per address generator and call it safe.
Extra Note: The horizontal and vertical windows and enables for the 16 sprites will be stored separately. 10bit X 10 bit Y.
Palettes also have a dedicated separate set of registers. A programmable interrupt generator based on a selected line of video will also be added for smooth animation apps.