Some quick tests for the BBC Micro's 6845 CRTC chip.
This repo has submodules; clone with with git clone --recursive
.
Prerequisites: Python 2.x on PATH
Run snmake
from command prompt.
To manually provide path to Python, supply PYTHON=xxx
on the make
command line.
Prerequisites: Python 2.x on PATH, 64tass on PATH
Run make
from terminal.
To manually provide path to Python and/or 64tass, supply PYTHON=xxx
and/or TASS=xxx` on the make command line.
Using BeebLink, add beeb
in the working copy to the search path. The
volume name is 6845-tests
. Press Shift+BREAK to boot, and select
test of interest from the menu. *KEY10
is set to re-run the test on
BREAK, for quick iteration.
To run from SSD, use an SSD from ssds
folder, and boot with
Shift+BREAK. There's an ssd created for each individual test.
Undocumented tests are undocumented - I probably haven't decided what conclusion to draw.
Images best viewed in conjunction with the source code...
VL6845 only reads the value of R4 during CRTC row 0.
When changing R4 on the last CRTC row, the VL6845 starts a new frame immediately.
VL6845:
HD6845: (doesn't sync)
VL6845 updates the cursor flash timer when the vertical total (R4) is reached; HD6845 updates it when the vertical displayed (R6) is reached.
VL6845: (cursors appear steady)
HD6845: (cursors flash in sync)
VL6845 displays the first column when R1=0, and fails to update the address at the end of each displayed row. The first row is displayed repeatedly.
HD6845 displays nothing.
VL6845 displays the final displayed column - note the red block and the blue block to the left of the first column.
HD6845 hides the final displayed column - note that only the red block is visible. The blue block is hidden.
Both fail to update the address at the end of each displayed row. The first row is displayed repeatedly. (This isn't super obvious from the output! - but the code only puts data in the first character row.)
VL6845 shows an empty screen.
HD6845 shows 1 scanline.
(Goes with R1=255: additional odd behaviour in the last displayed column.)
VL6845 uses the cursor address for the first column for the final column, if the final column is visible. (Exact logic TBC...)
HD6845 never displays anything in the final column, so it's difficult to say.
(The cursor shown here is the undocumented cursor type, that has a hole in it - the hole is not an artefact!)
Simply change the background palette a couple of times.
Setting R6 to the current row number will stop the display immediately, even mid-scanline.
Check the vertical displayed counter is compared using ==.
Testbed for VL6845-friendly screen layout for Stunt Car Racer.
Show that R11 is inclusive.
Show that there's no per-row cursor enable latch. Looks like the cursor switches on when cursor is off and raster matches R10, and switches off when cursor is on and raster matches R11.