- Notifications
You must be signed in to change notification settings - Fork3
C library (Z88DK) for VTI graphics board for S100 computers (IMSAI, Altair, Poly88,...). Made for CP/M projects.
License
sblendorio/vti-lib
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
C library (forZ88DK) for VTI graphics board for S100 computers (IMSAI, Altair, Poly88,...). Made for CP/M projects.
VTI is a S100 "graphics" board, made for "Poly88" system, but it works also with other S100 machines like Altair 8800, IMSAI 8080, ...
Here is the board description:http://www.s100computers.com/Hardware%20Folder/PolyMorphic/Video%20Board/Video%20Board.htm
It uses a memory-mapped I/O so writing a single byte to memory would make a character appear on screen. It has a 64x16 chars resolution, and it has a set of "2x3" block characters, so it can reach a 128x48 "pixels" resolution.
Starting address is $F800 by default, but it can be changed using dip-switches. In the IMSAI 8080 in this video it has been changed to $E800 and has some glitches due to a broken RAM chip, which has to be replaced.
Here is sort of "hello world":
#include "vti.h"void main(void) { vti_set_start(0xf800); // optional since 0xf800 is the default vti_clear_screen(); vti_setmode(VTI_MODE_SET); // "1" (or VTI_MODE_SET) means "draw" vti_line(0, 0, 120, 45); // segment with coords (0,0)-(120,45). vti_setmode(VTI_MODE_SET); // "1" (or VTI_MODE_SET) means "draw" vti_boxfill(2, 3, 25, 25); // box filled with edges (2,3) and (25, 25). vti_setmode(VTI_MODE_RESET); // "0" (or VTI_MODE_RESET) means "erase" vti_boxfill(3, 4, 25, 25); // as above, but "0" means "erase" vti_setmode(VTI_MODE_INVERT); // "2" (or VTI_MODE_INVERT) means "XOR" for each pixel vti_boxfill(1, 1, 10, 10); // box filled with edges (1,1)-(10,10). }
Main function of the library isvti_plot
in conjunction withvti_setmode
which have the following prototypes:
void vti_setmode(char mode);void vti_plot(int x, int y);
...wherex andy are cartesian coordinates with (0,0) as top-left origin and max values equal to (127,47).The parametermode represents the way the dot is drawn, and can have the following values:
- 0 = VTI_MODE_RESET. It erases the dot at specified coordinates, making itblack.
- 1 = VTI_MODE_SET. It draws the dot, making itwhite.
- 2 = VTI_MODE_INVERT. It draws the dot if it's currently off (=black), and erases it if it's currently on (=white)
- vti_set_start(<start address>)
- vti_setmode(<mode>)
- vti_print_at(<x>,<y>,"string")
- vti_clear_screen()
- vti_fill_screen(<char>)
- vti_save_screen(<buffer address>)
- vti_restore_screen(<buffer address>)
- vti_rawchar_at(<x>,<y>,<char>)
- vti_plot(<x>,<y>)
- vti_line(<x0>,<y0>,<x1>,<y1>)
- vti_ellipse_rect(<x0>,<y0>,<x1>,<y1>)
- vti_box(<x0>,<y0>,<x1>,<y1>)
- vti_boxfill(<x0>,<y0>,<x1>,<y1>)
- vti_scroll_up(<number-of-rows>)
- vti_scroll_down(<number-of-rows>)
- vti_put_shape(<x>,<y>, char*,<width>,<height>)
- <pixel> = vti_read_pixel(<x>,<y>)
- <ch> = vti_read_char(<x>,<y>)
There is abuild.bat file which does all the work withZ88DK, this is a sample line:
$ zcc +cpm -clib=8080 demo.c vti.c -o demo.com
By default, the start address is$F800. To use another address, pass it as argument in decimal notation:
$ demo 59392
This will make the demo use $E800 (59392) as start address for the graphics card.
There are the following demos (launch each of them eventually with the start address as parameter):
- ttt.com: tic-tac-toe, inspired byWar Games
- demo.com: a bunch of sample of most functions available in the library
- ball.com: abouncing ball across the screen
- pong.com: the famous game, using a keyboard connected to the VTI's special slot
- bezier.com: drawing of the G-clef, using bezier curves
- fonts.com: draw text with big letters
- lenna.com: drawing of the famous test imagehttps://en.wikipedia.org/wiki/Lenna
Thanks to:
- Alois Zingl for implementation of Bresenham's Algorithms (lines and curves drawing)
- Andrea Matteucci for hardware providing and fixing
- Antonino Porcino for a lot of code optimizazions and demoslenna,fonts
- Brian W. Howell for Tic-Tac-Toe's AI logic
- Andy Glenn for "reverse engineering" of some WarGames screenshots
- Paul Smith for list of WOPR nuclear war scenarios
- George Philips for ASCII-art drawing of USA and USSR resembling WarGames' scene
About
C library (Z88DK) for VTI graphics board for S100 computers (IMSAI, Altair, Poly88,...). Made for CP/M projects.
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Packages0
Contributors2
Uh oh!
There was an error while loading.Please reload this page.