DMDX Help.
DMDX History.
This is the history of DMDX's development. It was
written by Jonathan
C. Forster at the University of Arizona
and continues to be maintained by him however it is the most recent
incarnation of DMASTR, originally developed on a PDP-11 (hence the 6
character name, D as in display, master)
in macro assembler by Kenneth Forster and Rod Dickinson in 1975 at Monash University, Victoria, Australia.
After that DM, the DOS C version was
written by Kenneth Forster and Mike Durham
in 1983 with additional assistance from Kevin Ackley. And then the Turbo Graphic and Enhanced Experimenter's Display
version called DMTG was
written by Jonathan C. Forster in 1988 at the University of Arizona using
TurboC.
After those three earlier versions the Windows version DMDX
was created targeting Win32 and DirectX in 1997 using the Borland C
compiler with the Direct3D renderer in 2014 and DirectShow VMR9 support in 2016 by Jonathan C. Forster
using various flavors of MSVC.
Version numbers
(current version number is
here) and dates
below indicate major milestones in DMDX's development. Largely from version 3
onwards there were hundreds of other releases, some more minor than others
and I'm sure I'm overlooking some major things (like the introduction of
<inst>
in version 4.0.1.0
which was a revelation for certain people) but so be it.
Version 0 begun on 10/17/97 from initial TimeDX work using the Borland
compiler after I noticed the announcements that DirectX was going to allow
direct access to the hardware under Windows and I'm like That's
the future of DMASTR.
Version 1 on 05/04/99 worked on 486 class machines,
the first generally usable release. Version 1.1 on 06/02/99 added
DirectSoundCapture support for the
DigitalVOX and RecordVocal input devices. More work on the audio
side of things followed in version 1.2 on 02/01/00.
Version 2
on 07/07/00 dropped support for 486 class machines allowing much more
accurate timing using the high performance counter present on Pentium grade
CPUs and generally cleaned up a lot of stuff like
multi-monitor
support. Version 2.1 on 09/07/00 switched to the DirectX 7 SDK (we
had been using a combination of 2 and 3); version 2.2 on 10/13/00 added
counters and the ability to
branch on them; version 2.3 on 10/24/00 added support for
JPEG images; version 2.4 on 01/27/01
added variable grouping to
the scramble routines and shortly after
that multi-scrambling
was introduced. Version 2.5 on 10/01/01 added the
skip display item CR indicator
to facilitate sophisticated branching paradigms; version 2.6 on 02/14/02
added CALC.C support to evaluate expressions in
counter arithmetic blowing the
door wide open on branching and version 2.7 on 02/14/02 added the ability
to chain item files. Version 2.8
on 04/15/02 added the InstaCal
interface for Measurement Computing interface cards (direct I/O was
getting a little challenging by then) and version 2.9 on 04/29/02 added
the first few test modes.
Version 3
on 07/31/02 switched to the MS Visual C compiler, cut support for Windows 95, radically restructured the
Audio Input and introduced the DMDX installer and .CHM help files.
Version 3.1 on 10/11/04 added 2D
input devices and version 3.2 on 09/13/06 added various options to
those 2D devices like
datalogging. Version 3.3 on 03/06/09 added the first cut of the
Unicode option to support someone with
Tamil in their item file that was otherwise unusable.
Version 4
on 05/13/09 added macro support to the Unicode
option (a very deep and distressful thing to do) and addressed the long
standing trouble DMDX had with other applications
stealing it's focus.
In addition version 4 also introduced Auto Mode that allows DMDX to operate
without the use of TimeDX (all but essential
for remote testing); version
4.1 was largely internal research into using DevIL for image loading (that
has been left inactive as it suffered from the same memory leak that our
libjpeg solution suffers from) and a compiler update; version 4.2 on
02/05/13 expanded the
support for millisecond (as opposed to tick) display durations and added
macro push and pop
string manipulation options. Version 4.3 on 07/26/13
introduced variable length macro
names making their use much more readable.
Version 5
on 01/10/14 added a Direct3D rendering path
using DirectX 9 that is
required for Windows 8 and later operating systems as DirectDraw (the original rendering
API) is now emulated. Version 5 also dispenses with operating systems earlier than
Windows XP. Version 5.1 on 06/17/14 added support for
NVidia 3D shutter glasses and that
would have been it for DMDX as my position was terminated shortly
thereafter however retirement boredom set in and version 5.2
on 03/27/18 added support for AMD FreeSync
and NVidia G-Sync displays (simply so I could stop thinking about the
changes needed to do so) allowing DMDX to have a variable retrace rate
and arbitrary display durations not tied to the raster interval.
Interestingly almost a decade later with modern OS interfaces no longer
providing the necessary functions to track the raster this code may wind
up being the only way future machines can sync DMDX's display to the
raster (at least until 480 Hz monitors become commonly available
regardless of whether they're adaptive sync monitors or not where the
retrace rate almost effectively becomes millisecond timing and by the time
1 kHz devices are available it's literally millisecond timing) what to speak of machines that overheat when DMDX hammers the
raster status. After
that version 5.3 on 10/30/18
significantly tightened up DMDX's parsing of keyword parameters and added
an Introduction button that
runs a built in item file introducing DMDX's features and exposes some
test modes so one doesn't need an item file to quickly test if a machine
is going to run DMDX at all well (it wasn't fully blocked out for about
another 18 months and still receives periodic updates, it's text is
included here).
Version 6
on 02/27/19 dispensed with support for
Windows XP (and Vista I suspect but who ever used that?) with the addition
of support for Windows Touch touch screen devices (the ones built into
Windows tablets and so on). Actually I
suspect version 5.1.3.4 was the last version that XP could execute as
there was a compiler update in there (actually a complete new development
system on account of me "retiring") that I only post facto
realized produced binaries that XP chokes on, oops. Version 6.1 on
10/03/19 added
support for eye trackers such as those made by Gazepoint and other devices
controlled over a TCP/IP
connection (not necessarily limited to eye trackers, for instance
<id
tcpip> will let DMDX send codes to EEG and other machines
without the need for an interface card and cables and so on as long as the
EEG machine has a network interface and you can figure out how to connect
to it). Version 6.2 on 06/11/21 added global support for non-Roman character
sets in file names using UTF-8, be it in item
file names or in resource file names and version 6.3 on 07/11/21 added support for named
counters in addition to the
classic numbered ones matching the variable length macro names from
version 4.3.
As of version 6.4 on 02/28/24 DMDX now parses Unicode outside quotes to UTF-8 in item files
(prior to that Unicode was only preserved inside quotes and even then it
was a form of UTF-16, outside quotes it was simply eliminated) which
means file names and other names that used to have to be quoted if they
weren't using Roman characters no longer need to be quoted†.
6.4's modifications also add support for Unicode in counter and macro
names (including emoticons!)
and should end the decade plus long odyssey of Unicode development in DMDX
because if there's another place that could possibly be tripped up by
Unicode characters I sure can't imagine where it is. This involved
tearing apart DMDX's recursive macro code (originally added in DMTG in the
late 80's) and I realized having done that much I might as well take a
crack at in place
macros and after much
thought (and extensive use of the modern debugger that runs rings around
what I was using back when DMDX was created) now with version 6.5 on
04/11/24 when a back tick ` is
used for a lead in to a macro instead of the legacy tilde you don't have to make sure your
macros are defined
before the item they're used in -- something that's pissed me off for
decades but was never prepared to address because it was such a daunting
thing to try and do, shows you how boring retirement can be...
†There are some exceptions
to this rule, notably if the characters you're using are in the code page the
machine is using you could probably get away without quotes before version
6.4. OTOH if your file name has spaces in them quotes are likely to still be
needed...
DMDX Index.