dazzler
| Name | Last modified | Size |
|---|---|---|
| ../ | ||
| Cromemco Dazzler Games - Instruction Manual (1978).pdf | 03-Oct-2026 14:40 | 23.9 MB |
| dazzler.zip | 03-Oct-2026 14:40 | 22.1 MB |
| DZMBASIC-Manual.pdf | 03-Oct-2026 14:40 | 180.8 KB |
| DZMBASIC.DSK | 03-Oct-2026 14:40 | 329.8 KB |
| dzmbasic.toml | 03-Oct-2026 14:40 | 2.3 KB |
| GAMES.DSK | 03-Oct-2026 14:40 | 329.8 KB |
| games.toml | 03-Oct-2026 14:40 | 2.7 KB |
| GDEMO.HEX | 03-Oct-2026 14:40 | 6.3 KB |
| gdemo.toml | 03-Oct-2026 14:40 | 2.7 KB |
| KSCOPE.ASM | 03-Oct-2026 14:40 | 10.2 KB |
| KSCOPE.HEX | 03-Oct-2026 14:40 | 371 bytes |
| KSCOPE.PRN | 03-Oct-2026 14:40 | 14.2 KB |
| kscope.toml | 03-Oct-2026 14:40 | 2.4 KB |
| README.pdf | 03-Oct-2026 14:40 | 169.3 KB |
Color graphics on a Cromemco Dazzler
Four machines, each with a Cromemco Dazzler in an Altair:
| Machine file | What it is |
|---|---|
kscope.toml |
Li-Chen Wang's Kaleidoscope, an endless four-way-mirrored pattern. It comes up drawing. |
dzmbasic.toml |
DZMBASIC, Microsoft BASIC with Dazzler graphics, under CP/M 2.2. You draw with DZOP and DZF. See DZMBASIC under CP/M. |
games.toml |
The Dazzler games under CP/M 2.2, with a Cromemco D+7A for the joysticks and the sound. See The games under CP/M. |
gdemo.toml |
Cromemco's GDEMO, a demonstration of Dazzler graphics. It comes up drawing. See GDEMO. |
Kaleidoscope
Li-Chen Wang's Kaleidoscope (KSCOPE) — the classic Dazzler demo — drawing a
four-way-mirrored pattern that wanders and recolors forever.
cd examples/dazzler
altairsim kscope.toml
The machine comes up drawing: kscope.toml loads KSCOPE and RUNs it from its startup
list, on an Altair that has a Dazzler in it — a Z80 at 4 MHz, 64K of RAM, an 88-2SIO for
the console, and the Dazzler's two ports at 0E/0F. On a build with SDL3 a window opens
the moment the Dazzler turns on, and the kaleidoscope appears: a 2 KB, 64×64, 16-color picture.
The processor is a z80 board, at the 4 MHz a Cromemco Z-1 ran. KSCOPE itself is 8080 code
and does not care — a Z80 runs it unchanged — but it is the CPU the rest of the period Dazzler
software wants, and fitting one is a single line in the machine file.
KSCOPE never stops on its own (there is no HLT), so press STOP (Ctrl-E) at the terminal
to break back to the altairsim> prompt; RUN 0 starts it again. On a headless build the
machine runs exactly the same and simply draws nothing.
To start it by hand instead — for instance to watch it draw into memory — break out with STOP and re-run it yourself:
altairsim> LOAD KSCOPE.HEX
loaded 127 bytes (1 page) from KSCOPE.HEX (0000-007E)
altairsim> RUN 0
What KSCOPE does
The program (KSCOPE.ASM, with its assembler listing in KSCOPE.PRN) is tiny and assembles
at 0000, so it runs straight from a RUN 0:
- It turns the Dazzler on with a framebuffer at
0200(OUT 0EH=81h), and sets the format to 2 KB, 64×64, color (OUT 0FH=30h). - The 2 KB picture is four 512-byte quadrants tiled 2×2. KSCOPE draws one pixel and then mirrors it into all four quadrants by negating each axis — which is why the pattern is symmetric about both the horizontal and vertical center. It walks a pseudo-random path and cycles the color, so the figure is always moving.
Because the framebuffer starts as whatever the RAM powered up holding (random, like real static RAM), the picture emerges from a field of color noise as KSCOPE paints over it.
The Dazzler, briefly
The Dazzler reads its picture straight out of main memory — the framebuffer is ordinary
RAM (here at 0200), not on the card. Two OUT ports drive it:
OUT 0EH— control: bit 7 on/off, bits 6–0 the high address bits of the framebuffer (so the base is 512-byte aligned).OUT 0FH— format: resolution (32×32…128×128), size (512 B or 2 KB), color vs 16 greys.
IN 0EH reads two status bits (odd/even scan line, end-of-frame) a program can poll to pace
its drawing to the frame.
Try it yourself
- Watch it draw into memory. Break out (
Ctrl-E) andDUMP 0200— the framebuffer bytes KSCOPE has written are right there; each byte is two 4-bit color elements. - Change the colors. The picture is a palette machine: the same bytes look different under
a different
OUT 0FH.SET daz0shows the card; the format is set by the running program. - Slow it down or speed it up.
SET cpu0 clock_hz=2000000for a 2 MHz Altair, orclock_hz=0for flat out.
DZMBASIC under CP/M
dzmbasic.toml boots CP/M 2.2 off the 8" floppy in DZMBASIC.DSK. That disk holds
DZMBASIC.COM, a Microsoft BASIC with two additions for the Dazzler: the DZOP statement and the
DZF function. Launch it and start the program:
cd examples/dazzler
altairsim dzmbasic.toml
56K CP/M
Version 2.2mits (07/28/80)
A>DZMBASIC
BASIC-80 Rev. 5.21 (DZHT)
[CP/M Version]
Copyright 1977-1981 (C) by Microsoft
20251 Bytes free
Ok
The machine boots itself and comes up at A>. On a build with SDL3, a window opens the first
time a program touches the Dazzler. Try it:
DZOP "I"
DZOP "P",5,5
DZOP "L",50,50
DZOP "S","HI"
PRINT DZF(5,5)
DZOP "I" initializes the Dazzler, "P" moves the cursor, "L" draws a line to the point
you give, and "S" writes text. DZF(x,y) reads a dot back and gives its color code. The last line
prints 1 here, because the line starts at (5,5). SYSTEM leaves BASIC and returns to A>.
DZMBASIC-Manual.pdf in this directory lists every DZOP action: dots, lines, filled
rectangles, text, clear, wait, page flip and palette cycle.
When a statement draws, BASIC can miss the next key you type if you type very fast. Type at a normal pace and the keys are not lost.
The processor is a Z80. The graphics library in DZMBASIC uses Z80 instructions. On an 8080 the
first DZOP "I" hits an opcode the 8080 does not have, and the machine warm-boots back to A>.
dzmbasic.toml is the built-in default Altair with its 8080 replaced by a Z80, the 88-DCDD
holding DZMBASIC.DSK in drive 0, and a Dazzler at ports 0E/0F.
There is no undo. Drive 0 is read/write, so SAVE writes onto the image. Copy it first if you are about to
save programs you care about.
The games under CP/M
games.toml boots CP/M 2.2 off the 8" floppy in GAMES.DSK. That disk holds the Dazzler games.
cd examples/dazzler
altairsim games.toml
56K CP/M
Version 2.2mits (07/28/80)
Copyright 1980 by Burcon Inc.
A>DIR
A: 4DTICTAC COM : CHASE COM : DAZOFF COM : DAZON COM
A: CHESS COM : DMATION COM : DOGFIGHT COM : DOODLE COM
A: GOTCHA COM : KSCOPE COM : LIFE COM : SKETCH COM
A: SPACEWAR COM : TANKWAR COM : TRACK COM : WRITER COM
A: XLIFE COM : R COM : W COM : HDIR COM
A: LS COM
A>
To play a game:
- Type the name of a game at
A>, for exampleCHASE, and press Return. - Press STOP (
Ctrl-E) to go back to thealtairsim>prompt when the game has no exit. - Type
RUN FF00to boot CP/M again.
On a build with SDL3, a window opens the first time a game turns the Dazzler on.
Cromemco Dazzler Games - Instruction Manual (1978).pdf in this directory describes the
Cromemco games.
The joysticks are on a Cromemco D+7A. The games read two JS-1 joystick consoles through the
D+7A board at ports 18 to 1F. Each console has a joystick, four buttons and a speaker. Each
console takes a gamepad if the host has one, and the keyboard if not. At the altairsim> prompt,
SHOW d7a0 shows what each console and each speaker is connected to.
The processor is a Z80 at 2 MHz. The crystal gives the games a fixed speed. The speakers of the D+7A play only when the machine has a crystal.
games.toml is the built-in default Altair with three changes. The 8080 is replaced by the
Z80. The 88-DCDD holds GAMES.DSK in drive 0. A Dazzler at ports 0E/0F and the D+7A are added.
There is no undo. Drive 0 is read/write. Copy GAMES.DSK first if you are about to write
files onto it.
GDEMO
gdemo.toml loads Cromemco's GDEMO and RUNs it from its startup list. GDEMO is the
"Dazzler Graphics Demo Program for Z80 Interface" (1978, version 00.08).
cd examples/dazzler
altairsim gdemo.toml
startup> LOAD GDEMO.HEX
loaded 2691 bytes (12 pages) from GDEMO.HEX (0005-0B7F)
startup> RUN 100
The machine is the Kaleidoscope machine with two changes: the Z80 runs at 2 MHz, and the guest
is GDEMO.HEX. On a build with SDL3 the window opens and comes to the front.
Press STOP (Ctrl-E) to break back to the altairsim> prompt. RUN 100 starts GDEMO again.
GDEMO needs the Z80. The code at 0100 copies the program to 1000 with the Z80 instruction
LDIR and jumps there.
GDEMO prints nothing and reads no keys on this machine. GDEMO is a CP/M program, and this
machine has no CP/M. GDEMO prints its messages with a CALL to 0005, and GDEMO.HEX puts a
RET at 0005. GDEMO reads its Ctrl-S and Ctrl-C keys from a Cromemco console at ports
00/01, and this machine has no board there.
The files
| File | What it is |
|---|---|
kscope.toml |
The Kaleidoscope machine. |
KSCOPE.HEX, KSCOPE.ASM, KSCOPE.PRN |
The program as Intel HEX, its source, and the assembler listing. |
dzmbasic.toml |
The DZMBASIC machine. |
DZMBASIC.DSK |
The CP/M disk with DZMBASIC.COM. |
DZMBASIC-Manual.pdf |
The manual for the DZOP statement and DZF function. |
games.toml |
The games machine. |
GAMES.DSK |
The CP/M disk with the Dazzler games. |
Cromemco Dazzler Games - Instruction Manual (1978).pdf |
The instruction manual for the Cromemco games. |
gdemo.toml |
The GDEMO machine. |
GDEMO.HEX |
GDEMO as Intel HEX. |
README.md, README.pdf |
This file, and the PDF CI builds from it. |