ChangeLog
=========

------------------------------------------------------------------------------
 10/27/2003 (jzbiciak)
------------------------------------------------------------------------------
 -- Wow, it's been a long, long, LONG time.  Far too long between ChangeLog
    entries.  In the past few months I have:
     -- Implemented full STIC
     -- Implemented nearly full ECS
     -- Implemented full paged-ROM support
     -- Implemented full BIN+CFG support
     -- Made some minor optimizations to the PSG support
     -- Rewrote the rate control
     -- Rewrote the options parsing
     -- Fixed lots of bugs     

 -- In the past 3 years, I have:
     -- Added Intellivoice support
     -- Added Intellicart support
     -- Split off the development kit as SDK-1600, periodically remerging it
        back in.
     -- Started work on a second game, LunarMP, which will become part of
        the jzIntv package.


------------------------------------------------------------------------------
 ..... many months pass .....
------------------------------------------------------------------------------

------------------------------------------------------------------------------
 02/02/2000 (tlindner)
------------------------------------------------------------------------------
 -- Fixed bug in snd_macos.c where I was not keeping track of the
    samplesProcessed correctly. Thanks to the quick work of Joe, its
    all better now.
 
 -- I have as1600 compiling under the Macintosh. The changes I made to the
    were very subtle. The biggest change I made was to comment out mktemp.
    I _should_ write a mktemp function but decided that it would not cause
    a problem in the temp file always had the same name.

------------------------------------------------------------------------------
 10/09/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Implemented new periph methods that I've been meaning to implement
    for awhile:  "peek" and "poke".  PEEK is a side-effect-free read
    which is useful for reading hardware registers without triggering
    side-effect (STIC ColorStack/FGBG register needs this).  POKE 
    allows writing to ROM.

 -- Updates to dasm1600b:

     -- New "skip xxxx xxxx" directive allows specifying holes in ROM
        image.  Disassembly includes "RMB" directive at appropriate
        point to cause PC to skip.

     -- "data" directive accepts ranges.

     -- New "dbdata" directive works like data, although it specifies
        that the data is in DBD format.  Disassembly issues "BIDECLE" 
        directives instead of "DECLE", and warns if bits get truncated.

     -- Instructions which overlap data/dbdata, or which extend
        outside defined ROM area are automagically converted to 
        DECLEs.

 -- Overhauled how breakpoints and the debugger works.  It works much
    more closely to "how I had intended it to".  Although the debugger
    code itself is still very hackish, the manner in which it is invoked
    is much cleaner.  For instance, now F4 actually interrupts the
    emulation and drops into the debugger (if debugging is enabled).
    Also, the debugger runs with rate-control enabled.  Also of note:
    Running the debugger now doesn't slow the whole thing down very much
    (unlike before).

------------------------------------------------------------------------------
 10/08/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Had a bit of a break from jzIntv for a little while as I caught up
    on other stuff.  Modified the main program to accept an Exec image
    from either an Inty 1 or an Inty 2.  The Inty 2 has an extra 256
    words from $0400-$04FF that implement the routines that are packed
    in GROM on the Inty 1, as well as the protection check.  Interesting,
    for sure.

------------------------------------------------------------------------------
 09/25/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Retargeted "Frankenstein Assembler" to the CP-1600.  Seems to work so 
    far.
 
------------------------------------------------------------------------------
 09/19/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Fixed noise generation problem.  Output was essentially off by an 
    octave. 

 -- Added a cheesy screen-shot facility.

 -- Allow sound to play while copying to raw file.

------------------------------------------------------------------------------
 09/17/1999 (jzbiciak)  release_010a
------------------------------------------------------------------------------
 -- Added a README.w32 document, and split Makefile.mingw32 into two
    Makefiles:  Makefile.w32 and Makefile.w32x.

 -- Minor documentation tweaks.

 -- Sleep during startup to give jzIntv's window a chance to come up.
    This prevents emulation stutter right at the start of emulation,
    since the OS has a burst of activity right then as its bringing up
    the emulator's window, etc.

 -- Cleaned up most/all of the compiler warnings that I had allowed to
    creep in.  Fixed at least one logic bug along the way.  (It hadn't
    bitten me yet, but it would've as soon as I re-implemented breakpoints
    the way I'm planning to.)

------------------------------------------------------------------------------
 09/16/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Not much to report.  Made 'F10' actually reset the emulator.

 -- Fixed assembler bug for JSR R6, xxxx.

 -- Ugh, fix an "overflow by 2" error on full-volume audio that was 
    introduced by the "positive-swing-only" change mentioned below.
    Only effects programs which play audio at full volume on all three
    channels.

 -- Tweak the disassembly cache a little.

 -- Added "speed_resync()" to handle major preemptions.  If jzIntv
    gets more than one second behind in the simulation, it slips time
    so that it has a chance of recovering.

------------------------------------------------------------------------------
 09/14/1999 (tlindner)
------------------------------------------------------------------------------
 -- I have working keyboard code. The only problem is the modifer keys are
    not showing up as virtual key codes. I thought this might happen. I plan
    to switch over to Apple InputSproket by next week to fit this.
 
 -- Sound is working very well. We no longer need the -a0 switch.
 
 -- Added line in the README describing how to get the AsgardESS source.
 
------------------------------------------------------------------------------
 09/14/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Fix bug in 'pads' that was causing one controller's inputs to be
    mirrored on both controllers.

------------------------------------------------------------------------------
 09/13/1999 (tlindner)
------------------------------------------------------------------------------
 -- Updated the README.mac concerning some of the changes Joe made.
 
 -- I started an event_macos.c. It correctly handles events for menus and
    windows. It doesn't handle events for the keyboard yet. It does do
    key equivelents of the quit menu item.
 
 -- I made a slight change to cfg.c (added a typecast) in order for it
    to compile.

------------------------------------------------------------------------------
 09/13/1999 (jzbiciak)  release_010
------------------------------------------------------------------------------
 -- Fixed the otherwise utterly broken "disassembly cache".  It's much,
    much happier now.  Also, improved its handling of SDBD.

 -- Added a "change register" command ('G # ####') to the debugger. 
    I really need to reorganize my current debugger command set... :-)

 -- Made AY8910 samples unsigned, positive-swing-only again, to 
    reduce "popping" that happens if an audio buffer underrun happens.

------------------------------------------------------------------------------
 09/12/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Hooked up the event subsystem.  Suprisingly, there was only one real
    bug in "event.c" to speak of.  It works pretty well.  I just need
    to work out a sane keyboard mapping... :-)

 -- A happy consequence of hooking up the event subsystem is that clicking
    the little [X] in the corner of the window actually asks jzIntv to
    exit.

 -- Started merging in Tim Lindner's Mac port.  Note that I've placed 
    his ChangeLog entry in chronological order.... :-)

 -- Split of the platform-specific "shims" into plat/plat_lib.? and 
    plat/plat_XXX.?, where XXX is a specific platform.  For instance,
    I have a generic implementation of gettimeofday which is in
    'plat_lib', whereas Tim has a specific one for Mac that's in
    'plat_mac'.

 -- Added a disassemble command to the debugger.  Bound to 'u' for 
    'unassemble' (similar to DOS DEBUG).  With it comes a silly little
    instruction disassembly cache that's meant to speed up the 'S'
    step mode.

 -- More tweaks to controller pad handling.

 -- Modified to allow both 8-bit and 16-bit GROM images to work.  I 
    do a test at runtime and decide whether I need to fix the GROM
    image.  It's just a simple hack for usability.

 -- Changed 'periph_tick' semantics slightly so that a peripheral
    can ask for a tick to be cut short.  This will allow better
    support for breakpoints.

 -- Modified gfx to not do screen updates if window is minimized.

------------------------------------------------------------------------------
 09/07/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Got a fair amount of work done on the event subsystem.  I'm adopting
    a model where all events are translated to key-down/key-up events.
    (eg. I just convert joystick events into key events).  Whenever an
    event occurs, I use a pair of AND/OR masks to set/clear bits.

 -- Also did a bunch of work on breaking out "platform initialization",
    and "configuration", although the cfg stuff is still really not well
    thought out.

------------------------------------------------------------------------------
 09/07/1999 (tlindner)
------------------------------------------------------------------------------
 -- Started Macintosh Port.
  
 -- Created project file (.mcp) for the table generator.

 -- Created project file for the Emulator.

 -- Changed defined 'MACOS' to the more standard 'macintosh'.

 -- Added stdlib.h and string.h to disam1600.c becuase they were needed on
    on the Macintosh.

 -- Wrote a strdup function. It is in Macstardup.c

 -- Wrote a timeofday function. It is in Mactimeofday.c

 -- Ported gfx.c to gfx_macos.c. This is a first attempt. This source does
    not make a nice Macintosh application.

 -- Stubbed snd.c to snd_macos.c in order for this to compile.
    Note: your must use the -a0 switch to turn off sound, otherwise
    we crash and burn.

 -- I added a command to the debugger 'M [arg]'. It displays memory in
    a hex dump fashion.  The arg is a hexadecimal number pointing to
    the start of memory your want to dump to the screen. It will then
    dump 10 lines of 8 words of memory.  If you leave out the argument,
    it will display the next ten lines.

------------------------------------------------------------------------------
 09/06/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Fixed an embarassing typo in the "Intro to CP-1600" document, where
    I had some arrows pointing the wrong way.  Also, added a binary
    addition example.

 -- Tim Lindner has signed up to do a MacOS port.  He's already got it
    up and running, and in a very short time!  Currently, he's not
    using SDL, since SDL/Mac isn't there yet.

 -- Lots of cleanups to the source-code, particularly in config.h.
    This will make compiling for Windows, MacOS, Linux, Solaris, etc.
    much easier w/out having all these annoying tweaks to the code
    all over the place.  :-)

 -- Cleaned out all the C++ style comments.

 -- Improved the dynamic range on the AY-8910 output.  jzIntv is no longer
    quite so soft.  (It was way, way too quiet before.)

 -- Changed a few instances of 'unsigned' to 'uint_32'.

------------------------------------------------------------------------------
 09/05/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- More documentation in the ay8910 module.

 -- Hacked in some Hand-Controller Interface reading routines.  Requires
    'root' to run, which I dislike greatly....  A proper joystick-reading 
    interface should eventually materialize, though.

------------------------------------------------------------------------------
 09/04/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Spent a couple days cleaning thigns up here and there (mostly minor).

 -- Wrote a separate Makefile for cross-compiling to Win32.  Also made
    some source file tweaks.

 -- Fix SND to accept a variable snd_buf size from SDL.  This seems to
    be needed to support Win32.  ??

------------------------------------------------------------------------------
 08/30/1999 (jzbiciak)  release_009b
------------------------------------------------------------------------------
 -- Ooops:  Missed a few things!
    -- Sliding-window averaging was disabled in AY8910 emulation.  Re-enabled.
    -- Forgot to document "-w" and "-a" flags in the usage info.
    -- Fixed a typo in jzintv.c's opening comment block.
    -- Tweak sound buffering parameters.  Wait a block or so before unpausing
       audio.

 -- Automatically calculate averaging window size if window size is -1.
    Does a pretty good job all the way down to 8000Hz!  Note:  Default
    buffer size/buffer count is tuned for 44kHz audio though.  If you want
    to run at 8kHz, reduce the SND_BUF size.

 -- Fixed emulation error exposed by Dreadnaught Factor, where my $0102
    caching trick wasn't truncating the value to 8 bits.

 -- Added "play sound to raw file" option, "-f filename".

------------------------------------------------------------------------------
 08/29/1999 (jzbiciak)  release_009
------------------------------------------------------------------------------
 -- Cleaned up source code readying for Release 009.

 -- No longer build 'stic_dump' as part of 'stic'.

 -- At least for now, I will not be mirroring De Re Intellivision and
    the Dev Kit in jzIntv.

------------------------------------------------------------------------------
 08/27/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Fixed some sprite bounding-box calculations in the STIC.

------------------------------------------------------------------------------
 08/26/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Made some slight CPU timing tweaks for SDBD-prefixed instructions.

 -- Wrote a tiny little state machine to sequence inputs into the 
    controller pads so that I can get to other video games' audio, not
    just games which play music at the title screen.

 -- Rewrote the envelope waveform generator, since it was broken for 
    certain envelope settings.  The rewritten version should be marginally
    faster as well.

 -- Experimented with different channel counter behaviors.  The title
    music for 'Math Fun' now sounds reasonably close to how I remember it.

------------------------------------------------------------------------------
 08/26/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Made some slight refinements to the sound buffering.  I now allocate
    the buffers dynamically.  I could easily change the number of audio
    buffers now, and I could possibly even make it run-time selectable.
    It's a 'wishlist' item... :-)

 -- Playing sound without rate control is amusing.  :-)

 -- A nice side-effect of all of the buffering adaptations I've made to
    the sound emulation is that it coexists reasonably with the debugger,
    although without rate control, sound will not play very cleanly.

------------------------------------------------------------------------------
 08/25/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Spent yesterday and today sorting out sound issues.  It's really 
    quite stable now.

    -- Asynchronous writes are still handled asynchronously.  I don't
       queue up writes.  Instead, if a write happens to the PSD and
       I can't sim because my buffers are full, I trigger a drop.
       This alleviates the buffer saturation that caused the short 
       and allows sound to eventually recover (usually after a couple
       sound frames).

       Dropping audio frames is tricky because the drop affects all
       sound producers.  I handle this by dropping frames in the
       mixer, rather than in the sound producers.

    -- Added in some cheesy hacks for the case when there's only one
       sound-producer in the system (which is the case right now and
       for most Intellivision games).

------------------------------------------------------------------------------
 08/23/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Got the envelope problems sorted out, I'm pretty sure.  Sound sounds
    teriffic!  I think it almost sounds better than INTVPC.... <:-)
    (Of course, the sound of success is always sweet, and so I might just
    think it sounds good because I got it working at all.)

    -- That said, I have a big TO DO:  I need to handle asynchronous writes 
       to the sound device synchronously, by queueing them up and processing
       them at tick time.  Right now, if sound gets behind, it never 
       recovers.  (I'm losing "time" in ay8910_write, that's why...)

    -- I also should have more dynamic buffers, although I could get in
       trouble if I buffer too far ahead.

 -- Modified jzIntv's default cartridge configuration to support two 
    different memory maps SIMULTANEOUSLY, through the miracle of incomplete
    address decoding.  Now 'Deep Pockets' and 'DUNVOO' can run on the
    same config, allowing me to play with INTV releases as easily as
    Mattel.  One of these days I'll write a real CFG parser...

------------------------------------------------------------------------------
 08/22/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Geeze, August was as busy as July was!  I'm starting to break back into
    coding again:

     -- Modified the behavior of the shifts a little.

     -- Started writing some file I/O routines for reading various cartridge
        formats.

     -- Looking at sound, joystick, and the rest of video.

 -- Make exiting via Ctrl-C work better.  It still isn't great.

 -- Bit the bullet and wrote an AY-8910 emulation.  It's far from perfect,
    but it's surprisingly good for less that 24-hrs effort.  

     -- I did borrow one or two observations from the MAME code (namely,
        the PRN for the noise channel, and the equation for combining noise
        w/ tone in a given channel.)

     -- All of the code, though, is my own.

     -- Envelopes seem to be imperfect at the moment.

------------------------------------------------------------------------------
 07/27/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Dang, this has been a busy month.  Haven't had much time to work on
    jzIntv at all.  I did, however, build a cartridge ROM dumper, dumped
    a bunch of ROMs, had a vacation in there somewhere, and I move this
    coming Friday.  *whew*   Eventually, I'll check the QBasic program
    I wrote to do the dumping into CVS.

 -- Wrote a couple Intellivision programs over vacation, which I'll 
    eventually check in under a "demos" section or something.  These
    demos can run in without an EXEC present with minimal modification,
    so that the emulator would require no copyrighted ROMs to run them.

 -- Somewhere in the middle of it all, I chased down and stamped out an
    underflow bug in the threshold-decay calculation in the speed
    throttler device (speed_t).  This seemed to be causing some serious
    emulation runaway problems, usually at startup.  These were annoying
    because they only happened occasionally.  I think they're all stamped
    out now, but I can never be sure....

------------------------------------------------------------------------------
 06/27/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Added a little tweak to jzintv.c to grab the cartridge name out of
    a standard-header cartridge and place it in the title bar of the
    emulation window.

------------------------------------------------------------------------------
 06/22/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Made some final tweaks to "Intro to CP-1600" (mainly, I added
    glossary entries related to stacks), and checked it in as version 1.5.
    This version is being placed in an updated Dev Kit 3.

------------------------------------------------------------------------------
 06/14/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- I've made several more tweaks to the "Intro to CP-1600" document
    over the past couple days.  I've added truth tables to the boolean
    logic section, I've re-explained 2s complement arithmetic (this time,
    without using "modulo"), and I've cleaned up some formatting errors.
    Also, the boolean logic section is now named boolean logic, not
    boolean arithmetic.  :-)

------------------------------------------------------------------------------
 06/08/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Ack.  In my "Intro to CP-1600" doc, I totally flubbed up on my
    description of unsigned compares and branches.  I fixed that, and
    added some more info to the 2's complement section and fixed all
    sorts of little grammar nigglies.

------------------------------------------------------------------------------
 06/06/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Added sections on jumps and branches to "Intro to CP-1600" document.  
    Also, rewrote the BASIC descriptions of the conditional branches.
    Only thing missing is the Examples section. 

 -- Apparently, SDBD is not allowed w/ MVO.  For now, I've modified
    the MVO@ instruction to issue a warning whenever this pairing is
    encountered.  It'll act as though the SDBD were not there, though.
    I've also changed the "Intro.." doc accordingly.

 -- Added a rudimentary breakpoint command to the debugger.  Still more
    work to do there.

------------------------------------------------------------------------------
 06/05/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- The "Introduction..." document is nearly complete.

 -- Tuned the rate control algorithm a bit, and cleaned things up
    slightly.

------------------------------------------------------------------------------
 06/04/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Started cleaning up my CP-1600 documentation a bit.  Also started
    writing an "Introduction to CP-1600 Assembly" that attempts to bridge
    between other programming and assembly languages and CP-1600.

 -- Added README files in doc, devkit, dasm1600 directories.

 -- (Re)implemented bus snooping on CP-1600 so that RAM areas may be 
    cached.  Will speed up CPU emulation on code which runs out of RAM.
    (Usually, that's just the initialization code in the EXEC that's 
    unpacked from the GROM at boot time.)

 -- Added "__attribute__ ((unused))" to some of the rcs_id's that were
    giving compile warnings.  (cosmetic change only)

 -- Noticed some possible emulation errors in Star Strike.  Current
    list of possible emulation problems includes that and the Football 
    sequence in the demo cart.

------------------------------------------------------------------------------
 06/03/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Tested jzIntv on a 5x86-133 machine.  Previously, this machine ran
    jzIntv at 35%-55% the speed of an Intellivision.  The frame dropping
    code I added a month ago works like a champ on this machine, bringing
    performance up to 99%.  Now to tweak those coefficients in my feedback
    loop.

------------------------------------------------------------------------------
 05/29/1999 (jzbiciak)  release_008
------------------------------------------------------------------------------
 -- Wrote a Hand-Controller Interface test program under the new "utils"
    directory based on the instructions given by Scott Nudds.  Seems to
    work pretty well, although it's rather slow because nanosleep()
    whacks me with a reschedule.  Will come up with a better plan for
    the actual emulator.

    At least something works right now.  :-)

------------------------------------------------------------------------------
 05/27/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Started writing an assembler for the CP-1610.  Some portions of the
    symbol table infrastructure are complete, but currently does not
    compile.

 -- While writing the assembler, I caught numerous minor typos in my
    cp1600.txt documentation -- fixed.

------------------------------------------------------------------------------
 05/05/1999 ... 05/25/1999
------------------------------------------------------------------------------
 -- The black hole:  I disappeared.  

    Actually, both my brother and fiancee graduated from college, so I 
    was travelling to see them both.  

    And, I got quite ill after being stuck out in the cold Michigan
    spring rain in Albion at my brother's graduation.

    And, I moved my fiancee to Texas.

    And, then I had to catch up on all the work I missed at my day job.

------------------------------------------------------------------------------
 05/04/1999 (jzbiciak)  
------------------------------------------------------------------------------
 -- Added adaptive rate control, including frame-dropping support.

    Sliding window support is utterly broken and I'm too tired to
    debug it.  It works great when window == 1 (eg. no window), so I'm
    considering not supporting sliding-window averages.  (I'm not even
    sure they make sense.)

    I tested jzintv running alongside rc5des at various nicenesses to 
    measure frame drop rates on my machine:

        No rc5des            Drops practically no frames.
        rc5des, nice 19      Drops ~0.25% of frames.
        rc5des, nice 10      Drops ~18% of frames.
        rc5des, nice 0       Drops ~30% of frames.

    As you can see, it's fairly sensitive to system scheduling effects,
    so I might need to tune it some.

 -- Wrote a description of what I plan to implement wrt. to dirty-rectangle
    updating, etc.  Basically, it's a plan-of-action for how I'm going
    to implement the STIC _correctly_.

------------------------------------------------------------------------------
 05/03/1999 (jzbiciak)  release_007a
------------------------------------------------------------------------------
 -- Fix minor error in "usage info".

 -- Add missing COPYING document.  We're under GPL 2.0 now.

 -- Add GPL messages to all of the source files.

 -- Remove stic_allegro.h file.

------------------------------------------------------------------------------
 05/03/1999 (jzbiciak)  release_007  (oops, skipped release_006.)
------------------------------------------------------------------------------
 -- Finally got it building and running with SDL.  Suffered a minor setback
    in that I haven't integrated the horiz/vert delay and blanking bit 
    support for the STIC yet, but that's only because I'm slowly redoing
    the STIC emulation the _right_ way.  :-)  

    (BTW, it took me this long only because I've only had about 8-9 hours to
    spend on that, over half of which were discarded as I toyed around with
    various ideas on how to structure my code.  SDL isn't that difficult to
    use.)

    TODO:  It appears that the Football demo in the demo-cart runs 
    incorrectly.  Must fix this!!!

------------------------------------------------------------------------------
 04/25/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Switching over to Sam Lantinga's SDL library instead of Allegro.
    Gearing up for first public release (010) by first of May.
    Not much development work has been going on in the last few weeks
    due to heavier workload at work.

------------------------------------------------------------------------------
 04/02/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Fixed some problems w/ horiz and vert. delay in STIC emulation.  

------------------------------------------------------------------------------
 03/30/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- FINALLY! FINALLY! FINALLY! I fixed the bug which was keeping Thin
    Ice from running correctly.  It turns out I was implementing subtracts
    and compares incorrectly, such that the divide routine was running
    improperly.

------------------------------------------------------------------------------
 03/29/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Removed wait-states throughout entire program.  Noticed that BDRDY
    is tied high in the schematics, and so wait-states can NEVER happen.
    At least, I think that's the case.... 

 -- Fixed SUBI mnemonic in dasm1600.  (Was outputting SUBT.)

 -- Added an experimental tweak to CP1600 simulator which intercepts 
    accesses to 0x0102.  There are alot of polling loops which poll waiting
    for this to change.  I avoid a call to periph_read() by storing a 
    copy in the CPU.  :-)

------------------------------------------------------------------------------
 03/28/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Added command line flag parsing (long overdue).  The current 
    instantiation is pretty much a hack, but it works.

 -- More tweaks to the tick model (basically, fixing bugs since the rewrite).

 -- Experimenting with having the STIC return waitstates for accesses to 
    GRAM during the active display period.  It _appears_ that this should
    happen.  Also adding 1 ws for accesses to GRAM during blanking.

------------------------------------------------------------------------------
 03/27/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Changed the peripheral bus tick model to be a little more sane and
    alot more documented.  The way it works now is it sorta load-balances
    between alot of different peripherals, allowing time to stagger
    forward in such a way so as to meet all of the peripheral's needs.
    This should work out really nicely for when I go to add proper sound
    and graphics support and time synchronization (so that I don't just
    run at any-old-rate).

 -- Started thinking about how the gfx module will work.  It'll basically
    be a lightweight wrapper around XWinAllegro that will also be
    responsible for taking the in-memory bitmap and shuttling it to
    the display.  Decided that the STIC _must_ recalculate the display
    at 60Hz (in order to preserve sprite collision calculation, etc),
    but that the actual display can be managed by GFX at whatever frame
    rate the hardware will allow.  In the spirit of everything being a
    peripheral, GFX will be a peripheral too, with a tick period of 60Hz
    (or whatever rate the user configures).  If the user picks faster
    than 60Hz, then some frames will be redisplayed -- similar to the
    3:2 pulldown that happens when 24Hz movies are shown on 30/60Hz TVs.

 -- Caught a couple more missing Makefile dependencies.

------------------------------------------------------------------------------
 03/22/1999 (jzbiciak) 
------------------------------------------------------------------------------
 -- Fix timing bug in STIC.

 -- Change to 8-bit color depth, get great speedup.  Fix some border-related
    bugs in the process.

 -- Fix colored-squares mode (duh).  Was completely broken before.

 -- Trial run on a Solaris box:  It worked nearly out of the box!  (Just had 
    to change an snprintf() to an sprintf().  Urgl.)
   
------------------------------------------------------------------------------
 03/21/1999 (jzbiciak) release_005
------------------------------------------------------------------------------
 -- Hacked in a simple XWinAllegro driver directly into the STIC module 
    so that I could have some near-realtime feedback on my screen.  This
    release pretty much requires Allegro in order to compile and run,
    although you can probably get by with .004's stic.c, stic.h if you
    still want to do batch PPM emulations... :-P

 -- With the XWinAllegro graphics, I've included a cheesy little "% Real
    Intellivision Speed" indicator.  It's usually over 100% on my crappy
    brute-force implementation, which is a good sign.  According to gprof,
    my bottlenecks are all in the brute-force graphics, which is good, 
    since I've just written something that works -- I haven't optimized
    the design at all.

 -- Split up the FG/BG and Color Stack routines into two new temporary
    routines.  Still not quite the way I'd like it, but I'm in inchin
    slowly in the right direction.

 -- jzIntv now accepts a single command line argument to toggle debugging
    mode.  "jzintv" alone runs w/out the debugger, "jzintv -" runs with the
    debugger.  Not real clever yet.  Running w/ the debugger disables the
    % realtime indicator.

 -- Couple Makefile tweaks (forgot a couple dependencies, wasn't cleaning
    up everything on a make clean... Ooops!)

 -- Added De Re Intellivision Chapter 6 to the docs.
 
------------------------------------------------------------------------------
 03/15/1999 (jzbiciak) release_004
------------------------------------------------------------------------------
 -- Fix a small bug in periph_tick() which was leading to infinite
    loops when not single-stepping.

 -- Fix a STIC FG/BG-mode bug (a shift amount was off-by-one) and properly
    implement FG/BG vs. Color Stack mode switching.  TODO:  Majorly
    clean up stick code.

 -- Added a small tweak to CP1600 model so I can see what instructions have
    been decoded or invalidated.  Nothing major.

 -- Modify the cartridge memory map to the Mattel default for 16K carts.
    0x5000-0x6FFF, 0xD000-0xDFFF, 0xF000-0xFFFF.

 -- Mark 0xD000-0xDFFF, 0xF000-0xFFFF as cacheable.

 -- Minor hack in debugger so I could drop into debug when a STIC event
    occurs.

 -- Add GRAM aliases from 0x3A00 - 0x3FFF.

 -- Add STIC aliases at 0x4000 and 0x8000.

 -- Added check in CP-1610 decoder to see if instrs w/ bits 10-15 are
    set, to abort simulation.  Helps catch when code has gone off in the
    weeds.

 -- I can now successfully view batch-generated "movies" of a number of
    cartridge intros.  No MOBs (sprites) have been implemented, so it's
    not greatly exciting.  Currently DUNVOO (Duncan's Thin Ice) crashes, 
    literally -- Duncan skates off the bottom of the screen and onto the
    stack, trashing it so that the CPU emulation goes off in the weeds.

------------------------------------------------------------------------------
 03/13/1999 (jzbiciak) release_003
------------------------------------------------------------------------------
 -- I've inched closer to a real STIC implementation.  Enough closer that
    I'm snapshotting and uploading this, at least as a patch.

 -- Gave up (for now) on trying to reverse engineer the AY-3-8915
    color set from the I/Q values given in its spec sheet.  They seem
    entirely bogus.

 -- Also fixed some typos in De Re Intellivision Volume 2.

------------------------------------------------------------------------------
 03/10/1999 (jzbiciak) 
------------------------------------------------------------------------------
 -- Added README files to 'bin' and 'src/cp1600/tbl' directories, since
    'cvs export' didn't see fit to provide these directories otherwise,
    and I was sick of manually adding them after every export.  :-P

 -- Started working on a "real" STIC implementation.  Whee.

------------------------------------------------------------------------------
 03/09/1999 (jzbiciak) release_002
------------------------------------------------------------------------------
 -- Fixed a major boo-boo in mem.c where I was allocating way too little
    memory.  Although the emulator mostly ran correctly on a Sun, it
    crashed mysteriously with corrupted instructions on my PC.  *doh*
    Changed "1 << width" to "1 << size".  *blush*

 -- Fixed bug in SWAP.  Status bits seem to get set based on lower byte.
    The EXEC's ISR now correctly dispatches to the various internal 
    routines.  (It was doing a SWAP, SWAP, BMI that expected the S bit to
    be set based on the lower byte of the initial register.)

 -- Made JD, JSRD non-interruptible.  Before, they would permit an
    interrupt to be taken the cycle after they were issued.  The sequence
    "EIS", "JD" will now never take an interrupt.  I'm not 100% sure this
    is correct, but it seems reasonable.

 -- Determined that the reason ASTROSMASH and UTOPIA weren't booting
    was not due to my bug, but rather to "copy protection" that had been
    placed on the ROM images I was using. Out of laziness, I was still
    using ROMs that I had unpacked out of VOL1.RES, rather than ROMs
    from the Intellivision Lives! CD-ROM.  The ROMs in VOL1.RES have
    been modified to work only with VOL1.EXE, it appears.  (I won't
    divulge the scheme being employed here.)

 -- Fixed a minor bug in stic_dump in which I was looking at the wrong
    bit for advancing the color stack.  Yay off-by-one errors.  :-P

 -- Modified the "debugger" output to output regs and disassembly all on
    one line.  Decided I didn't need to see the PC (since it's in R7
    in the reg dump) or the encoded instructions (since my instruction
    decoder is rather stable).  Also, implemented a set of simple
    single-character commands: 'R', 'S', 'D', and 'Q'. (Run, Step,
    Dump and Quit).  'R' and 'S' both require a single argument,
    # of instructions.  I really need to get around to writing an
    instruction parser.

 -- Top level Makefile now builds stic_dump.  (Although, stic_dump goes
    away as soon as I get a "real" STIC implemented.)
 
 -- Fixed a minor "cacheable" decoding bug which was exposed while playing
    with the cacheability bits.

------------------------------------------------------------------------------
 03/08/1999 (jzbiciak) release_001
------------------------------------------------------------------------------
 -- Fixed some more goofiness in the peripheral subsystem.

 -- Actually register the game cart in the address space (*doh*)

 -- Added simple interrupt generator to driver.

 -- Added "dump_state" to driver so I can analyze the state of the CPU
    "offline".

 -- Booted my first cartridge!  UTOPIA seems to make it to the title screen,
    although the title screen isn't complete.  It stops waiting for
    hand-controller input, it seems, which implies that something's
    not-quite-right.

 -- Wrote a quick-and-dirty STIC 'emulation' that takes a memory dump
    and generates a PPM of the display (based solely on the cards in
    BACKTAB and the graphics in GRAM/GROM.)  Generated my first two
    screen-shots this way!

 -- Chased some apparent SDBD bugs which turned out to be a red herring.
    Problem was really in the periph subsystem.

 -- Fixed some bugs in SARC,2 RRC,2 in terms of how they set the 'O' bit.

------------------------------------------------------------------------------
 03/07/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- Checked in some speech related docs.

 -- Broke tables out from op_decode into separate C files.  Added .prolog/
    .epilog directives to mk_tbl in order to do so.

 -- Wrote initial quick-and-dirty mem subsystem.

 -- Modified the peripheral bus "read" functionality to pass the current
    state of the "read" to each of the devices being read, to allow 
    implementing a bus sniffing device (eg. the debugger).

 -- Started implementing a simple debugger which simply allows 
    single-stepping the CPU and showing memory events.  It includes Frank P's
    dasm1600 code for disassembing the instruction at the current PC.

 -- Fixed the tick routines in periph to call ticks in the order that
    peripherals were registered, rather than in reverse order.

 -- Wrote a quick-and-dirty main() which loads up a bunch of ROM images
    and starts them running.  The simulator has run its first program in
    months (although it crashes w/ a HLT -- it's jumping off into the
    weeds).  But, it is progress.

------------------------------------------------------------------------------
 02/28/1999 (jzbiciak)
------------------------------------------------------------------------------
 -- A total of four months has passed since I've worked on jzintv seriously.
    Recent interest from Willy Moeller has gotten me motivated to actually
    do something.  I've included the ChangeLog from my last false-start 
    below.  Bear in mind, I'm importing this into CVS for a _third_ time.

 -- Decided to build fresh source tree and do some significant rearchitecting
    of the simulator.  Old CP1610 sim design was very limiting and overly
    complex.  Will reuse old code for now, but I plan to replace CP-1610
    simulator with a much simpler rewrite.

 -- Built a "peripheral subsystem" which will allow me to connect
    arbitrary peripherals together, including the CPU.  Running the emulator
    will amount to periodically calling the "periph_tick()" function on
    the main peripheral bus.


------------------------------------------------------------------------------
 12/27/1998 (jzbiciak)
------------------------------------------------------------------------------

 -- Re-imported into CVS after major hard-drive crash (bummer).

 -- Investigating MAME/MESS infrastructure.  With recent release of 
    "Intellivision Lives!" CD-ROM, beginning to consider public release
    of jzIntv as part of MESS project.

------------------------------------------------------------------------------
 12/06/1998 (jzbiciak)
------------------------------------------------------------------------------

 -- Downloaded and installed CVS.  Sources are now being placed under CVS.

 -- Continued to clean up and reorganize directory structure.  Eventually,
    this should be to the point where giving someone the code amounts to 
    "cvs export ...".

 -- Psyching up for writing the STIC emulator next.  Joysticks after that,
    and AY-891x last.  (Although the joysticks plug into the AY-8914
    electrically, they can actually be simulated completely separately.)

------------------------------------------------------------------------------
 12/02/1998 (jzbiciak)
------------------------------------------------------------------------------

 -- ChangeLog file started.

 -- INTV source made to build in new, segmented build format.  Considering
    moving from RCS to CVS (even though I just finally started using RCS.)

 -- Fixed remaining compilation warnings.

 -- Trying to get reacquainted with code after two month break.

