Connecting the SA-20 to the
  Parallel Port
  **Note: did not work 100%, I suggest using a db9 to db25 null
  serial modem cable**
  
  Next I connected the programmer with a
  parallel cable (printer cable) to another desktop I had since my primary
  desktop didn't have a printer port.  It's amazing how many computers
  don't have printer ports nowadays!!  Actually it's really really
  annoying.  But to be fair, USB is much nicer and faster.  It just
  sucks when you're trying to connect something older and have to go scavenging
  for "rare" computers with parallel ports.
So with everything connected I turned the
  SA-20 on and... no go.  Didn't expect it to be easy!  Found out that
  under Windows XP direct access to the i/o ports (like the parallel port) are
  protected.  So you have to grab a program called UserPort
  (http://hem.passagen.se/tomasf/UserPort/)
  in order to open up direct access to these ports.  You take the .sys file
  included with the UserPort zip and put that in your
  c:\windows\system32\drivers directory.  Then just run UserPort.exe (you
  may need to check the port address ranges against your parallel printer port
  but the defaults are the common port ranges).
  
  After installing UserPort and exiting & restarting the SA.exe software
  several times I was able to connect to the SA-20!  Not saying it was
  easy, but I expected to have to fight with getting this thing to work. 
  And.... as it turns out, that's exactly what it was headed towards.
  
  I put in a 2716 eprom and tried reading it on the SA-20 -- success. 
  Checked the device checksum, it gave me "34511".  Set the file
  input/output parameters on the SA-20 (filename, file pointers, file type). 
  I then tried sending the file to the computer and was able to transfer it
  successfully.  Checked the checksum via the hex editor and it matched the
  original checksum of the eprom on the SA-20!  Awesome!
  
  Next I tried sending the same file back from the PC.  Checked the
  checksum of the memory buffer on the SA-20 (when it receives a file it stores
  the data in the memory buffer... it also does this when you read an eprom on
  the device) -- it didn't match.  BUMMER!!
  I'm Losing My Bytes!
  It was clear something was happening to the data when sending the file to the
  SA-20 via the parallel port.  So I sent the "bad" data back to
  the computer to look at in more detail.  Again the checksum of the bad
  data on the programmer matched the checksum of the file that was transferred
  (that's a good thing).  So the data's only getting messed up when sending
  a file to the SA-20.
  
  Opened up the original file & the "bad data" file sent back from
  the SA-20.  The data in the files looked pretty close.  But
  obviously something was changing cause the checksums didn't match.  Turns
  out, there were only a few bytes of data changing -- and it appeared to happen
  just about every 256th character sent from the original file.
  
  Say the original hex looked like this (the "38" on the far right of
  the top line being the 256th character):
  
  <<bunch of lines representing first 256 characters in file>>
  11 38 11 38 11 38 11 38 11 38 11 38 11 38 11 38 <--256th character
  00 55 00 55 00 55 00 55 00 55 00 55 00 55 00 55
  
  A lot of times this happens:
  11 38 11 38 11 38 11 38 11 38 11 38 11 38 11 00
  55 00 55 00 55 00 55 00 55 00 55 00 55 00 55 FF
  
  Notice the 38 on the far right of the top line is removed and rest of the data
  is moved up and at the end there's an FF (which is just what the memory buffer
  on the SA-20 blanks the addresses to).
  
  So it's dropping the 256th characters from the original file a lot of times
  (say original file was 1024 characters, it would drop the 256th, 512th, 768th
  & 1024th characters) -- and the end of the data sent would have just as
  many blank "FF" bits as those that were dropped.  Essentially
  it's like sending "ABDEF" instead of "ABCDEF". 
  NOT GOOD when you're programming chips.  The data needs to be *EXACTLY*
  the same as the original file (ie. matching checksums), otherwise the chip
  won't work.
  
  
  So, I tried figuring out why it was dropping bytes..