==============================================================================
 Release Notes
==============================================================================

Release 004
-----------
 -- New assembler features.  (See the assembler docs for full details)

     -- IMASM Macro facility.  This release integrates Joe Fisher's
        macro facility, allowing for line-oriented and argument-oriented
        macros.  This release offerse both a standalone utility (imasm)
        as well as the version integrated into AS1600. 

        Example:

        MACRO disp_ptr(r, c)
              ($200 + (%r$)*20 + (%c%))
        ENDM

              MVII #disp_ptr(3, 6), R4   ; R4 points to row #3, col #6

        Example:

        MACRO COPY@ s, t, d
              MVI@ %s%, %t%
              MVO@ %t%, %d%
        ENDM
              COPY@ R4, R0, R5

     -- REPEAT blocks:  These cause a section of code to be repeated
        in an object file.  This is essentially assembly-time loop  
        unrolling.  The shorthand "RPT" is a synonym for "REPEAT"

        Example:

        ; Copy 8 words
        REPEAT 8
        MVI@ R4, R0
        MVO@ R0, R5
        ENDR

     -- ERR keyword:  Causes a user-defined assembly error.  This is
        useful in the context of conditional assembly directives. 

        Example:
        IF label > value
           ERR "Value of label is out of range"
        ELSE
           ; do something with label
        END

     -- LISTING directive:  Allows programmer to control what portions
        of the source code are copied to the listing file.  This makes
        it easier to make "quiet" macros that don't clutter up the 
        listing file too badly.
      
     -- STRLEN() and ASC() operators:  These allow you to pick apart a
        string at assembly time.  These are useful inside macros, for
        generating a data set from a string.

 -- New ROM_MERGE utility allows merging multiple .ROM files into one.

 -- New examples and library routines:

     -- Intellivoice driver routines
     -- Tag Along Todd #2 with VOICE!
     -- "Sky" simple color-cycling demo
     -- "Geese" demo
     -- Utility macro packages
     
 -- Minor assembler bug fixes.

 -- Fixed bug in BIN2ROM's handling of 'default' configurations.

 -- Cleaned up MiniEXEC, MiniGROM.  Added Arnauld Chevallier's font
    to MiniGROM.  (Thanks Arnauld!)

Release 003
-----------
 -- Minor assembler tweaks to allow assembler to reassemble most output
    coming from DASM1600.  Specifically, added support for BEXT, support
    for a label on NOPP, and support for specifying ,2 on NOP and SIN.

 -- Added a bunch of new examples (MOB Test, MemTest and BankTest,
    Hello World).  

 -- Added Intellicart Bank Switching code to examples/library

 -- Added ECScable documentation and support routines

 -- Added a bunch of oddball utility functions, including "rom2bin".

 -- Changed Makefile structure to jzIntv-like top-level Makefile.

 -- Fixed a number of minor "timing error" bugs, such as initializing
    the color stack from the title-fixup routine rather than from an
    interrupt handler.  This causes the title to look ok on a 
    standard NTSC Inty, but wrong on a Sears SVA.

 -- Wrote QuickStart guide.

 -- Added support for .ROM and BIN+CFG output formats to assembler

 -- Modified examples to include common routines like RAND, HEX16,
    etc. from library rather than placing them inline.  This process
    exposed a few hidden bugs (such as a missing TSTR in RAND, and
    an alignment issue in mem_test).

 -- Replaced DRAWSTRINGx with less-confusing PRINT.xxx names.  The
    functionality is the same and the code is almost identical. 
    The new names should be much more mnemonic, though.

 -- Added INCLUDE-path support to AS1600.  This allows you to set up
    an environment variable and/or use commandline flags to specify
    where to search for INCLUDE files.  This should make it easier
    to use the "library" routines w/ your various projects.  See
    "doc/as1600.txt" for more details.

 -- Added a bunch of new programming documentation for the Intellivision,
    including details on the STIC, on interrupts, and a detailed memory
    map description.  All of this lives under "doc/programming".
    The Intro to CP-1600 doc has also been moved to that directory.

 -- Added my "tech info" pages under "doc/tech".

 -- Most of the text files are now in DOS format, although source files
    remain in Unix format due to compiler issues.  See src/README.txt
    for an explanation.

 -- Fixed a number of minor as1600 bugs, including weirdness with
    memory attributes and missing support for "<>" (not-equal)
    operator.

Release 002
-----------
 -- More minor assembler fixes.  (Fixes the "unimplemented width" error
    that came up intermittently.)

 -- Add new "STRUCT" and "ENDS" directives.  These allow you to define
    a structure in memory like so (using EQU's mind you!):

        PSG         STRUCT $1F0      ; PSG is at $1F0 in memory map
        @@per_a_lo  EQU  $ + 0
        @@per_a_hi  EQU  $ + 4

        @@per_b_lo  EQU  $ + 1
        @@per_b_hi  EQU  $ + 5

        @@per_c_lo  EQU  $ + 2
        @@per_c_hi  EQU  $ + 6
                    ENDS

    Don't put anything that actually allocates storage into a STRUCT
    just yet.  It's very alpha.

 -- Added "gimini.asm" file which describes the GIMINI memory map
    and peripherals (eg. PSG, STIC, GROM, VOICE), and provides a ton
    of default symbols you can use in your application.

 -- Added "routines.asm" file which contains some useful routines.

Release 001
-----------
 -- This release fixes some issues with the assembler that thankfully hadn't
    caused programs to misbehave, but were problems nonetheless.

     -- The internal location counter was not being maintained properly in
        some places, which caused some weirdness in the listing file.  Also, 
        there were some problems with PC-relative constant generation 
        (eg. '$ - foo' or 'foo - $') that resulted in unnecessary SDBDs in 
        certain cases

     -- 'BYTE' and 'DECLE' directives have been made more strict, with
        'BYTE' allowing only 8-bit quantities and 'DECLE' allowing quantities
        up to the defined rom-width (as specified in a ROMW directive).

 -- The "large.asm" example had some stupid bugs that have been fixed.  
    These bugs caused the rotating globe to shear.

 -- A "mini-EXEC" and "mini-GROM" have been included which contain NO
    Mattel/Intellivision code.  These are in the "bin" directory and
    are named "miniexec.bin" and "minigrom.bin".  The source for these
    is in the "Examples" directory.

     -- The "mini-EXEC" contains only a simple interrupt dispatcher and
        some code to jump to the "START" entry in a ROM header.  It is
        sufficient for running the existing examples, although perhaps
        not to their fullest extent. (eg. there's no title screen,
        for instance.)  This enables users to run these examples under
        jzIntv without requiring an official EXEC.BIN.

     -- The "mini-GROM" contains a variant of the IBM-style Extended ASCII
        character set and font.  The font has been shifted 32 positions
        so that code written to work with the Intellivision GROM will 
        work with this "mini-GROM", at least for alpha-numerics and 
        punctuation.

Release 000
-----------

 -- This was the initial 'alpha' release which includes the assembler and
    disassembler, and a very small handful of examples.

