Weird Science - Tales from the
Vectrex Academy Lab
Vectrex
Project Title
Project
Status
Synopsis
- Digital Archeology - An investigation of the
Vectrex BIOS versions
- Some interesting, yet probably utterly useless
findings...
An
Analysis of the official 0xb796,0x7931 0x7adb BIOS
versions
- As far as I know, there are three "official"
Vectrex BIOS versions which came in
manufactured consoles. From what I read, those are
commonly distinguished by their checksums and
called:
- 0xb796: rev_a BIOS (GCE)
- 0x7931: rev_b BIOS (MB)
- 0x7adb: rev_c BIOS (MB)
-
The MB versions contain the same bugfixed
version of Mine Storm which is different from the
GCE BIOS Mine Storm.
-
Here is a detailed analysis of the differences
between the three versions, listing the patches
applied to the rev_a source code. Please not that
my labelling of the patches (for a good) reason is
slightly diffrent compared to the labelling in the
rev_c source code (more on that later).
PATCH
address comment
rev_a
GCE base version
rev_b_0 0xff9f alternate
version of Draw_Grid_VL
rev_b_1 0xffd3 zeros
instead of KARSOFT...
rev_b_2 0xf01C abort
intro on button press
0xefe7
subroutine for about on button press
rev_MB
0xf024 MB version patch, also lots of
patches in Mine Storm code
rev_b1 0xf216
Joy_Digital patch
this is labelled as rev
b1 change in the rev_c source
code, but does not
appear in the official rev_b BIOS 0x7931,
but in the official
rev_c BIOS 0x7adb!
rev_c 0xf4f6
change to height handling in Print_Str_d
0xffd3
minor pad bytes change
0xf024
minor pad bytes change
0xffee
minor pad bytes change
0xedd8
minor pad bytes change
rev_d 0xf4b3
delay cycles change in Print_Str_d
this appears in the
rev_c source code, but not
in the official rev_c
BIOS 0x7adb!
-
The Print_Str() patch of rev_c causes
a slight incompatibility. In rev_a and rev_b,
Vec_Text_Height is a signed value indicating the
y offset between the raster lines. Printing the
text start with the top line, and a negative
value of Vec_Text_Height (-1 to -128) causes the
text to displayed "correctly". The more
negative, the more the text is stretched in y
direction. A positive value (+1 to +127) causes
the text to "stand on its head".
In rev_c, the patch leads to the text being
displayed "correctly" for negative values (-1 to
-32). All other values (-33 to -127, and +1 to
+127) cause the text to stand upside down. As
the texts are essentially unreadable for such
values, this incompatibility is a minor issue.
Except maybe for the fancy text effects.
But also, the timing is slightly altered, so
that texts with Vec_Text_Height values from (-1
to -32) appear minutely more stretched in y
direction (taller) in rev_c than in rev_a and
rev_b. This can be seen with the bare eye: Just
compare the heights of the "Mine Storm" title
text (or any other cartridge title) in 0xb796
and 0xb7931 to the height in 0x7adb. I have no
idea why the Print_Str() patch was added, as it
does not improve or change the overall
performance of the routine. The total number of
cycles for displaying the same text stays
exactly the same. The comment says "chance to
RASTER, recommended by Marc Indictor".
- The code of the rev_c PDF also
contains a section (right at the beginning of
the character data table) that has been
commented out, showing vector data for a 7
segment display of hexadecimal numbers. In
indication that this has actually been used at
some point is the description of the checksum
test on page
21 of the Vectrex Service Manual,
displaying the checksum value in exactly that 7
segment vector style.
- I do by now have a BIOS source code with compile
time switches that can be configured to assemble
exactly the three "official" BIOS versions 0xb796,
0x7931 and 0x7adb, and I have thus verified the
above details.
- Please contact me if you know of any other BIOS
or source code versions.
Author
Latest modification on 01/07/2023,
11:30
|