From: "Philipp Hachtmann" <hachti at
hachti.de>
 Sent: Thursday, December 18, 2008 11:00 PM
   Since the
shift registers move quite fast, it completely
 swamps the lamps' ability to change brightness.  Unlike the VGA display,
 I haven't observed any "beat frequency" artifacts. 
 I know the VGA
problem... Happens only if I restrict the update to the
 blanking period...
 If I don't restrict, I get a slight stranger image, but the real
 blinkenlight effect :-) 
 
 I have had the VGA and the incandescent lamps running side-by-side, so I
 can see how "wrong" the VGA stuff looks :-).  There is stuff flashing on
 and off in the VGA display that should just be "on dimly", all over the
 place.  It gives a misleading impression that things are happening on
 a human timescale that just aren't.  Of course, for single stepping,
 the VGA display is OK, since the display is "static" until you press
 a switch (or a key on the keyboard, in the case of my VGA display).
 The VGA display is *way* better than no lights, though :-).
    Vince
  
An emulator I am developing for a machine (Wang 3300) with a front panel would suffer the
same problem too.  It is really an aliasing problem.  You are attempting to sample a 1 MHz
signal at 60 Hz, so what do you expect?
My solution in the emulator is to compute the ratio of on/off over that 1/60th of a second
and then use that to display an image of a lamp.  Actually, I go one better than that.  I
have a simple first order time constant model of the lamp so that it doesn't go from
0->100% in 1/60th of a second.  new_intensity = K*old_intensity + (1-K)*new_duty_cycle.
Pick K to approximate the thermal inertia of the lamp.
Oh, to keep from having to compute a tally of all the lamps after each instruction
simulation cycle, I have an array of 256 counters for each byte of address or data bus.
So for a given byte, after each instruction I just do:  histo[byte_value]++.  At the time
it comes to display each lamp, I look at all the buckets and figure out the average duty
cycle for each of the 8 lamps in the group.
Those two solve the sampling problem to a sufficient degree that I'm done tweaking
with it.