WARNING: This program has absolutely NO practical value. At best, it's sort of interesting to watch. For maybe 30 seconds; then you get bored. I wrote it to demonstrate an obscure technical detail to someone (see techie stuff below). I have no other excuse. For Kaypro 2/4/10 with graphics ONLY. All it does is draw an "elevator shaft" down the center of the screen; and the cursor moves down and up. Instead of jumping one TEXT line at a time, the cursor floats in vertical increments of one SCAN line (1/16 of a text line). Techie stuff: This program manipulates registers 10 and 11 (Cursor Start/End) on the 6545/6845 CRT controller. As the names imply, these registers control cursor size and vertical placement within the line. They also control blink rates: fast/slow/non-blinking. Register 10 (Cursor Start) Bits: 7 6 5 4 3 2 1 0 | | | \Bits 0-3 = FIRST scan line for cursor (0=top, 15=bottom) | | \Bit 4, if on, makes cursor invisible | |-Bits 5-6 affect cursor blink rate: 0 0 = Non-blinking 1 0 = Fast blink 0 1 = Slow blink Register 11 (Cursor End) Bits: 7 6 5 4 3 2 1 0 \Bits 0-3 = LAST scan line for cursor (0=top, 15=bottom) I haven't documented other bit functions; these do all I need. Setting these registers on the Kaypro requires two OUT commands: OUT 28,register (tells the status port [28] which register to use) OUT 29,value (tells the control port [29] what value to use) In other words, the first command answers the question "What register is to be set?" and the second answers "What value do we set it to?" "SHAFT.BAS" uses simple NEXT loops to increment and decrement the values sent to the registers. These make the cursor appear as a thin bar, moving one scan-line at a time. Each step is actually TWO register changes: Cursor Start (register 10) and Cursor End (register 11). Since each register change requires TWO "OUT" statments, each step is a total of FOUR "OUT" statements. Line 1130 is a simple example of these four OUT statements. This line re-iterates 368 times (16*23) as the cursor moves down the shaft. The rest of the OUT statments (the rest of the program lines, really) are "housekeeping." The cursor is turned off between loops (lines 1160 and 1260), to reduce flicker when registers values are reversed. When the program exits, the cursor is turned ON as a non-blinking underscore (line 1300). If reading all this hasn't bored you to sleep/tears/death/whatever yet, it's about time you got in there and started experimenting with these things yourself. I've had enough!