home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 8 Other / 08-Other.zip / uaexfr86.zip / ChangeLog next >
Text File  |  1996-06-23  |  49KB  |  810 lines

  1. 960622 More work on AGA code.
  2.        Removed 2-bit display routines from custom.c. Ian: please use dithering
  3.        code.
  4.        Make slowmem and chipmem sizes run-time configurable.
  5.        Mask out the high bits in BLT?PTH().
  6.        Add exception 3 checks to Bcc/BSR instructions. Seems to be not quite
  7.        correct yet.
  8.        Completely rewrote the disk emulation. We now create a big track buffer
  9.        full of MFM data, used in a cyclic fashion by DSKBYTR() and friends. 
  10.        The current position in the buffer is determined by the cycle counter.
  11.        DMA reads are now done in one piece. Two new event types: ev_diskblk 
  12.        and ev_diskindex.
  13.        ARRGGHH! The RSI demo has _completely_ broken disk loading routines.
  14.        They start disk DMA on a block while the blitter is still working on 
  15.        the same memory region.
  16.        In zfile.c, unlink() the temporary file directly after opening it so
  17.        it will be freed by the OS as soon as we close it (or crash... :)
  18. 960621 Merge pfield_sprite_h() and pfield_sprite_l() into one function.
  19.        Split off new files blitter.c and blitter.h from custom.c.
  20.        Fixed null-pointer dereference in zfile.c when filename has no
  21.        extension.
  22.        Add new field maxline to gfxvidinfo that prevents writing past the
  23.        screen buffer if it has less lines than expected.
  24.        Modify the 256 color allocation routine to set nb_cols to the same
  25.        value first for r,g and b; allocate everything as usual and fill the
  26.        lost colors afterwards with those that have the greatest difference.
  27. 960620 For some extremely weird reason, it is faster to simply call the
  28.        assembly-optimized pfield_linetoscr_full routines _twice_ to double the
  29.        line than calling the new (also assembly-optimized)
  30.        pfield_linetoscr_full_double routines, at least when writing directly 
  31.        into the framebuffer. If someone has a good theory why, let me know 
  32.        about it.
  33.        Drawing into memory is faster with the _double routines, but not
  34.        noticeably (about 1%).
  35.        Consequence: Removed the new pfield_linetoscr_full_double assembly
  36.        routines again.
  37.        Add a "--disable-gui" option to configure.
  38.        Add Samuel Devulder's dithering code. Provide support for mono and
  39.        16 color X servers.
  40.        Put an assembly version of DitherLine() in X86.S.
  41.        New color mode (3) available, tells UAE to use 256 colors and dither
  42.        the image. This is meant for people who have only a 256 color X server
  43.        available, but it works with the SVGA version, too. It's much slower
  44.        than normal 256 color mode, though.
  45.        Use the color allocation algorithm from the dither code in
  46.        alloc_colors256(), too.
  47. 960619 New files: zfile.c and zfile.h, from Samuel Devulder. These provide
  48.        transparent decompression of various compressed file formats. Enabled
  49.        by configure only for Unix systems.
  50.        Eliminate dont_want_aspect. New option "-C", sets correct_aspect. Make
  51.        video mode 3 640x480, video mode 4 800x600. Honor correct_aspect in
  52.        320x400, 640x480 and 800x600 mode with SVGAlib.
  53.        Add fields maxlinetoscr and x_adjust to gfxvidinfo.
  54.        Rename pfield_slow_linetoscr() to pfield_do_linetoscr(). Use new fields
  55.        in gfxvidinfo to enable writing directly to the framebuffer in
  56.        resolutions with <800 horizontal pixels.
  57.        New function pfield_do_linetoscr_full(), called when sure that full
  58.        line update is being done.
  59.        Move some of the usage() information into some target_specific_usage() 
  60.        functions, defined in the various system-specific files.
  61.        Support lower resolutions with LOW_BANDWIDTH, too.
  62.        memcpy() within screen memory is dog slow. Prevent some common cases:
  63.        1. Use fill_line() to double a line in the border.
  64.        2. Add a parameter to pfield_do_linetoscr_full() to indicate whether 
  65.           the line has to be doubled. New functions
  66.           pfield_linetoscr_*_double_slow() that simply do a memcpy(), plus 
  67.       optimized ones in X86.S that are much faster by avoiding the copy.
  68.        Smart update code could get confused by lores modes when
  69.        prev_max_diwstop changed from one frame to the next. New variable
  70.        frame_redraw_necessary, which acts as a counter. It's initialized to
  71.        2 in interlace mode to handle that case properly, too.
  72.        Move sprite priority checks into pfield_sprite_?(), move HAM
  73.        calculations into new function decode_ham6() to simplify the various
  74.        linetoscr functions.
  75.        Fixed a bug that would cause sprites could get deformed in some cases
  76.        when they overlapped (never seen it).
  77. 960618 New file: dos-snd.c, from Gustavo.
  78.  
  79. 960617 Release 0.6.0
  80. 960617 Fix memory clobber in X86.S when diwfirstword==0. Eliminate double test
  81.        for HAVE_SYS_MOUNT_H in sysdeps.h.
  82. 960616 Handle programs that don't wait for the blitter by finishing a pending
  83.        blit as soon as a blitter register is written to (regardless of DMACON,
  84.        to be safe).
  85.        Call gui_led only if the LED changed.
  86. 960615 Fixed dual playfield sprite priorities. Optimized dual playfield code
  87.        in X86.S. More work on AGA code. Get joystick status only in
  88.        vsync_handler to speed things up.
  89.        Make blitter fill more intelligent with table lookups instead of loop.
  90. 960614 DOS update from Gustavo. Pass real bitplane pointer to
  91.        bpl_data_differs(), don't calculate it again.
  92. 960610 Fixed silly INTEL_FLAG_OPT bug: The new __asm__ expressions use
  93.        regflags, which is of course _regflags on a.out...
  94.        More BeBox fixes from Christian.
  95.        Make the CIA bank bigger (A0..BF) and relax the CIA A/B selection
  96.        checks to make broken software (Kingsoft's Emerald Mine, reportedly)
  97.        happy.
  98.        Default framerate is now 1.
  99. 960603 New BeBox code from Christian. Fix test for ELF in configure.in.
  100. 960529 genblitter.c: generate blitfunc as a function taking ULONGs and
  101.        returning an ULONG. This makes custom.o about 4500 bytes smaller on the
  102.        x86 by removing worthless size prefixes, and should increase
  103.        performance (better for the cache, and the P6 reportedly doesn't like 
  104.        16 bit instructions anyway).
  105.        memory.c: Load Kickstart in one block and swap bytes after that if
  106.        necessary (eliminates the need for the special bebox load routine)
  107.        custom.c: Some preliminary work for AGA support.
  108. 960528 Saw a real awful piece of code that detects the right mouse button by
  109.        reading a value from POT0DAT, counting up to 25, reading from POT0DAT
  110.        again, and deciding the button is pressed if the value changed. Urgl!
  111.        Added POT0DAT() in custom.c ...
  112.        Gustavo's latest patches.
  113. 960525 Do index pulse handling in CIA_hsync_handler(). Make sure bit 12 in 
  114.        INTREQ gets set on an index pulse. Don't call DISK_Index() for now,
  115.        since this breaks the Workbench.
  116.        The CIA code should _probably_ not be resetting the bits in INTREQ.
  117.        Disable this as an experiment, let's see what breaks.
  118. 960524 Z flag handling for ABCD/SBCD/ADDX/SUBX was wrong (must be clear if not
  119.        zero, was set if zero). Some other flag bugs in these functions fixed.
  120. 960523 gfxlib.c update from Christian Schmitt. Some new Mac code from Ernesto,
  121.        still not all of it, though. Italian keyboard from Alessandro Bissacco.
  122. 960522 Fix the CHK instruction. Implement middle mouse button.
  123. 960515 Fix some Nextstep problems in configure.in.
  124. 960513 New Makefile target "streifenfrei" to remove all output from configure.
  125.        Use autoconf 2.7; 2.9 is buggy.
  126. 960512 Remove BIG_ALIGNMENT hack. Remove superfluous pfield_fetchdata() call
  127.        in pfield_doline_slow_l() that resulted in garbage on the screen.
  128.        Move blttbl array from custom.h to genblitter.c
  129.        Use new lookup tables imm8_table and areg_byteinc in CPU emulation
  130.        instead of ?: expressions.
  131.        GCC appears to generate better code if the opcode is passed as ULONG to
  132.        the CPU emulation functions instead of as UWORD.
  133.        Modify some of the flag emulation __asm__ statements so that GCC uses
  134.        less registers for them.
  135. 960510 Cast malloc() results to char *, for C++ compilers.
  136. 960509 Use test for GCC and __i386__ in options.h to decide whether to use
  137.        intel flag optimization.
  138.        Use test for wish4.0 to decide whether to use the GUI.
  139. 960507 New bebox.cpp from Christian. AF sound patches from Marcus Sundberg.
  140. 960505 Fix the configuration stuff so it works. Fix some bugs in gfxlib.c
  141. 960504 Use GNU autoconf scripts to generate Makefile and sysconfig.h. Add new
  142.        files sysdeps.h that includes the right system header files. Remove
  143.        amiga.h and Makefile.
  144. 960502 More Next code from Ian (new Uae.app directory, 2 bit drawing for
  145.        custom.c).
  146. 960501 Allow the sound driver to set the frequency to a value that is slightly
  147.        different from the requested one.
  148. 960430 Added AmigaOS port from Olaf Barthel.
  149. 960427 Fixed single playfield sprite priorities in X86.S.
  150. 960426 Added new NeXTwin.m from Ian.
  151.        Turn off the blitter delay in line mode.
  152.        Added a CPU optimization from Olivier Raoul: gencpu now reads a file
  153.        "insncount" that can be generated by UAE during execution and generates
  154.        specific functions for the most common opcodes. Not documented yet.
  155. 960414 Reimplemented the fast disk emulation in a more sane way. Also it's
  156.        only done for reads now. (Plus, it no longer works :-/ Need to work
  157.        some more on this).
  158.        In blitter emulation, defer not only the setting of the bltfinish bit,
  159.        but actually defer the whole blit for the number of cycles it will
  160.        take. This makes programs the clear the screen while it is still being
  161.        displayed look much better.
  162.        Changed supervisor mode handling around a bit (was messy).
  163.        New DOS code from Gustavo.
  164. 960412 Removed smart update method 2. Added Alessandro Bissacco's blitter
  165.        optimization patch.
  166.        Fixed some sprite problems: during hysnc, clear sprpos and sprctl, and
  167.        don't do_sprites() in line 0.
  168. 960409 Be a little more intelligent about when to call pfield_linetoscr() from
  169.        pfield_doline_slow(). It's only necessary if a color register changed.
  170.        If it can be deferred to the end of the line, use the the _full
  171.        variants.
  172.        Some CIA TOD fixes.
  173.        Better transdisk, accepts first/last track parameters.
  174. 960405 New function memcmpy(), inline assembler for the i386. Compares two
  175.        memory blocks and copies them at the same time. Used in
  176.        bpl_data_differs.
  177. 960404 French keyboard from Tristan Cavelier. Parallel port emulation from
  178.        Stefan Reinauer.
  179.        Turn bpl?pt and r_bpl?pt into arrays, simplify some code using them.
  180. 960401 Some parts of Ernesto's new Mac sources.
  181. 960331 filesys.c: Close filedescriptors in free_key(). get_path() sometimes
  182.        read uninitialized bytes.
  183.        Minor cleanups all over the place.
  184.        unchain_mnn() leaves sibling intact, but clobbers next. customreset()
  185.        didn't care about that and crashed.
  186.        Use the __asm__("intel_flag_lookup") magic not only for DOS.
  187.        Support 320x300 for X (without LOW_BANDWIDTH).
  188.        Add new function fast_memcmp(), defined as memcmp if __i386__ is
  189.        undefined, otherwise a slightly optimized inline assembly function.
  190. 960329 Some bug fixes in gencpu.c
  191. 960328 Stupid programs write odd playfield modulos into the hw registers...
  192.        Eek! Sometimes, linedescr[] was indexed with a negative value... Add a
  193.        vpos >= minfirstline check to pfield_may_need_update(). I really need
  194.        to rewrite this in Oberon...
  195.        Don't turn off SHM when LOW_BANDWIDTH is selected.
  196.        Keep the nextpos and linepos variables from pfield_doline_slow_?() as
  197.        globals and initialize them in pfield_may_need_udpate().
  198.        Modified alloc_colors256() some more.
  199.        Try to make sprite DMA follow the Amiga DMA slots more closely by
  200.        adding a currhp parameter to do_sprites() and calling it at the end
  201.        of a scanline or in pfield_may_need_update().
  202. 960327 Added Gustavo's latest DOS code, as far as possible. Modified X86.S to
  203.        use a macro SYM() to create symbol names either with underscore or
  204.        without.
  205.        Fixed some very silly SVGAlib lores bugs. Move screen 8 pixels up in
  206.        low resolution.
  207.        Use diwstop instead of diwstart to caclulate the DIW for 320x200 modes.
  208.        Reset it not only in calcdiw(), but also in init_frame().
  209.        Speed up 256 color allocation a little bit.
  210. 960326 New function flush_block() in xwin.c and svga.c. Called from
  211.        do_flush_line() and (new function) do_flush_screen(). Modify struct
  212.        vidbuf_description, new member maxblocklines that records the maximum
  213.        number of scanlines that do_flush_line() should collect before calling
  214.        flush_block(). If it is zero, then flush_line() is used as before.
  215.        This makes the special case stuff for SHM unnecessary, so it's removed.
  216.        Fixed a stupid bug in events code: Put ev_hsync in front of ev_copper,
  217.        so that do_copper gets called with hpos == 0 instead of hpos == 227 at
  218.        the beginning of the line.
  219.        New function init_frame() that sets up some variables, called from 
  220.        customreset() and vsync_handler().
  221.        Move smart update code to pfield_doline() from pfield_doline_h() and 
  222.        ..._l(). Clean up these two with a macro DO_ONE_PLANE, removing
  223.        duplicate code.
  224.        Implement big blits and ECS chip ids. New configuration options
  225.        ECS_AGNUS and ECS_DENISE.
  226.        Implement MOVEP.
  227. 960325 Before calling pfield_may_need_update(), make sure the value that was
  228.        written to a register actually differs from the previous one.
  229.        New expansion code from Stefan Reinauer.
  230.        Modify struct mem_notify_node to contain a pointer to a valid bit 
  231.        instead of the valid bit itself, so that the playfield code has to
  232.        check only one flag to decide whether to draw the line (SU method 2)
  233. 960324 The chip_flags approach has several problems. A flag may cover an area
  234.        in memory that spans two scanlines, or several scanlines may use the
  235.        same area in memory.
  236.        Provide two other, different methods for the smart update:
  237.        1. Save all the bitplane data for each line and compare the chipmem
  238.           with the saved data to decide whether an update is necessary.
  239.        2. Use a chain of memory_notify_node structs instead of a single bit
  240.           for flags. Each scanline owns a set of these structs and chains them
  241.       into the right place, and the chipmem_?put routines walk the chains
  242.       and set the modified bit for each element.
  243.        Unfortunately, both methods are slower than the old one. Especially the
  244.        first one has some advantages though: it speeds up programs that clear
  245.        the screen each update and write the same contents back, and it
  246.        can speed up double-buffering programs at full framerate, since it does
  247.        not have to check whether the bitplane pointers have changed.
  248.        Remember the first and last drawn line for each frame, and pass them to
  249.        flush_screen. Use this in xwin.c for SHM. Modify SHM logic: if smart
  250.        update is selected, call XShmPutImage() from flush_line() instead of 
  251.        from flush_screen(). But gather blocks of consecutive lines to avoid
  252.        calling XShmPutImage() too often.
  253. 960323 "Smart update" method, based very loosely on Alessandro Bissacco's
  254.        work, implemented:
  255.        Add an array chip_flags that records any change made to specific words
  256.        in chip memory.
  257.        Move all the hardware registers relevant to playfield display into a
  258.        new structure bplinfo. Remember the contents of this structure in
  259.        struct line_description for every line on the screen. Avoid redrawing
  260.        in pfield_doline if the screen memory has not been modified for the
  261.        line to be drawn and if the information from the last frame matches
  262.        that in the current frame.
  263. 960322 Duplicate all functions responsible for drawing (pfield_doline,
  264.        pfield_doline_slow, pfield_sprite, pfield_*word_*res) and append _h
  265.        or _l (ah, the golden C++ days, when we had templates... which never
  266.        worked). Modify the *_l functions to support drawing in low resolution
  267.        (i.e. 320x200). Change the options -d and -H to support selecting color
  268.        mode and resolution, thereby getting rid of some SVGALIB_* options.
  269.        Get rid of the old pfield_*word_*res functions.
  270.        Collect information about the minimum diwstart value during the
  271.        previous frame and use that in case 320x200 was selected to fit the
  272.        image on the screen.
  273.        Get rid of HAVE_JOYSTICK (breaks the "-J" option)
  274. 960321 Give up in op_illg() if opcode is 0x4e7b and the exception handler for
  275.        it is NULL. In that case, it's a 68020 Kickstart.
  276. 960319 New Next code from Ian. SunOS target was still screwed (two CFLAGS).
  277.        Turn -x option into a "hair cursor" option. Support multiple mounts,
  278.        but warn if more than one is seen (still does not work with Kick 1.3).
  279.        Integrated Samuel Devulder's new LOW_BANDWIDTH patch.
  280. 960318 Integrated the start of Markus Gietzen's gfx library replacement.
  281.        Changed the interface between custom.c and the graphics code. There has
  282.        to be a buffer holding the data of all the lines on the screen. For
  283.        linear SVGAlib modes, this is the video memory. Eliminated -x option,
  284.        prepare_line(), DrawPixel() and the X_?BIT_SCREEN options, replace with
  285.        3 versions of pfield_linetoscr for different datatypes. Implement
  286.        proper handling of the borders above and below the DIW in custom.c
  287.        instead of in flush_screen().
  288.        Move common code (color allocation) from all the graphics files to new 
  289.        file gfxutil.c.
  290.        Swedish keyboard from Per Olofsson.
  291.  
  292. 960315 Release 0.5.0
  293. 960315 Newest DOS port from Gustavo. New sgi-gcc target.
  294. 960314 Add -lXext to osf target. Use "rb" for fopen() in main.c
  295. 960310 Play a bit with the __asm__ constraints. Implement CHK.
  296. 960307 Fix some stupid Makefile errors. Call parse_cmdline() if no init file
  297.        is found.
  298.        First round of NextStep patches; new file NeXTwin.m
  299.        Stupid bug in custom.c: The #define is called NO_FAST_DISK, not
  300.        NO_FAST_FLOPPY.
  301.        Fix one of the problems the Deform demo had with the blitter: The
  302.        line texture wasn't rotated to the right position in blitter_init().
  303. 960306 Use some black GCC __asm__ magic to calculate flags more quickly
  304.        (config INTEL_FLAG_OPT)
  305.        HAM was broken by pfield_linetoscr changes. Fixed.
  306.        LOW_BANDWIDTH sometimes got confused when the display window changed.
  307. 960305 BCD instructions work well enough for Locomotive Basic on CPE.
  308.        New function parse_cmdline_and_init_file() that reads ~/.uaerc or
  309.        ./.uaerc and adds the options found in those files to those in argv[].
  310.        Patch from Denis Sablic to make disk image filenames runtime 
  311.        configurable. Extend it for the ROM filename.
  312.        Remove some of the run-time configurable stuff from config.h.
  313.        More X keysym fixes (I finally got a proper .Xmodmap ...)
  314.        for SVGAlib: Delete key, and PgUp/PgDn as Amiga keys.
  315.        The sound driver can now handle 22050 Hz and/or 8 bit samples. Both of
  316.        these are the default with LINUX_SOUND_SLOW_MACHINE.
  317.        Also use the SNDCTL_DSP_GETBLKSIZE ioctl and write the buffer when 
  318.        there is enough data.
  319.        Abuse keybuf.c to provide a fake joystick emulation with the numeric
  320.        pad (enable with -J)
  321. 960304 bebox.cpp from Christian.
  322.        Rename pfield_linetoscr_full to pfield_linetoscr_full8.
  323.        More x86 assembly: pfield_linetoscr_full16.
  324. 960303 SunOS target from Dirk Vangestel. Put some not-so-superfluous includes
  325.        back in. Added the DOS specific patches to filesys.c.
  326.        Started x86 assembly optimizations. New file X86.S, includes an
  327.        optimized version of pfield_linetoscr (for 8 bit screens only).
  328.        Don't use SA_RESTART if it isn't defined.
  329.        prepare_line() wasn't called often enough (again...), leading to memory
  330.        corruption and "hit the reset button" bugs when using SVGAlib.
  331. 960226 Get rid of bool, true and false in amiga.h and everywhere else.
  332.        Copy yesterdays code to AF_SOUND code, too.
  333.        Include first round of Christian Bauer's BeBox patches. Add AIX fix
  334.        from Samuel Mackrill.
  335.        Add #include <string.h> and #include <stdlib.h> in some more places.
  336.        Modify gencpu.c and readcpu.c so that immediate types j and J (0..15
  337.        and 1..8) can be merged. Replace HAVE_ONE_GIG... option with a new
  338.        CPU_EMU_SIZE option that can be set to a value in the range 0..5,
  339.        where 0 is minimum size and 5 is equivalent to HAVE_ONE_GIG...
  340. 960225 Remove multiplications in sound code, use a big lookup table.
  341. 960222 Go back to having only one memory bank table of type addrbank instead
  342.        of several function pointer arrays. Eliminate the HAVE_BROKEN_SOFTWARE 
  343.        define by extending the memory bank table to 65536 entries.
  344.        Remove remaining DUALCPU code. Allow BTST src,imm instructions in
  345.        table68k.
  346. 960220 Back out filesys.c change from Stefan Reinauer: don't call V36 specific
  347.        functions in expansion.library.
  348.        Better fix for the filesys.c assign problems by Oliver Moehrke.
  349.        Make new playfield code conditional on EXPERIMENTAL_SCREEN_UPDATE.
  350.        Improve the 64bit variant of said code. Try to get alignment for
  351.        apixels by putting it into a union with a long.
  352.        Kill the child in gui_exit(). Make graphics_init() return a value and
  353.        check it in main.c to see whether graphics were initialized. If not,
  354.        call gui_exit() anyway.
  355.        Use new 256 color allocation routine from svga.c in xwin.c, too.
  356.        Make LOW_BANDWIDTH compile _and_ work (wow...).
  357. 960219 Fix bug in memory.c: When loading 256K Kickstart, copy 256K, not 128K.
  358. 960218 Finished the rest of the UI: reset, debug and quit buttons as well as
  359.        drive LEDs. New target linux-gui; all others use dummy file nogui.c
  360.        for now.
  361. 960217 The GUI now supports inserting and ejecting diskfiles and displays
  362.        their names. Two pipes are used now, one for reading and one for
  363.        writing. Properly wait for the process to start up.
  364.        Use sigaction() instead of signal() in debug.c.
  365.        More fixes for the new display routines: Need to do a final call to
  366.        pfield_*word_*res with the data shifted right from the last fetched
  367.        word.
  368. 960216 Copper & sprite bugfixes from Marco Nelissen. Better X keyboard support
  369.        from Bruno Coste.
  370.        Move my_strdup() from filesys.c to options.h
  371.        New files xui.c, uae-ui (shell script) and uae-ui.tk (wish script).
  372.        These create a GUI for the X version of the emulator. So far, the
  373.        power LED works.
  374. 960215 Don't rely on SVGAlib headers defining any keycodes at all.
  375.        Include Thorsten Frueauf's NetBSD patch. Apparently, the devname
  376.        variable in hardfile.c caused a namespace collision, so rename it to
  377.        uaedevname. Fastmem fixes, debugger help, and ConfigDev allocation in
  378.        hardfile and filesys from Stefan Reinauer.
  379.        xwin.c: Give the window a title.
  380.        Half-implemented the DIVU.L, DIVS.L, MULU.L and MULS.L instructions.
  381. 960213 AF sound system support from Marcus Sundberg. Win95 keyboard support
  382.        for SVGAlib from Thierry Lescot. Added most of Gustavo Goedert's MS-DOS
  383.        port.
  384.        When using the old pfield_*word_*res functions, the gen_pfield_tables()
  385.        function was undefined.
  386.        Hmmm, /dev/brain must have been unmounted when I wrote the new pfield_*
  387.        functions. Now they make sure they access the apixels array only with
  388.        addresses that are multiples of 16 bytes.
  389. 960212 Fix copy&paste bug in cia.c found by Marco Nelissen: Need to call
  390.        RethinkICRB() instead of RethinkICRA() for CIA B timers.
  391.        Added Stefan Reinauers autoconfig area/fastmem support. Added run-time
  392.        options for use_slow_mem and use_fast_mem.
  393.        Oops, the pfield_*word_*res() optimizations break completely on HPs and
  394.        Sparcs. Now use this optimization only if we are using GCC 2.7.
  395.        HPUX fixes in the Makefile. New target hpux-gcc.
  396.        The code for clearing the areas above and below the DIW was trying to
  397.        be a little too clever selecting the color. Just use the current 
  398.        background color.
  399.        Added channel attachment to the sound code. Untested.
  400. 960211 Found some flag setting bugs in the rotate/shift instructions and in
  401.        addx/subx (which I thought I had already fixed) by reimplementing 
  402.        DUALCPU mode to work with Ed's e68k.
  403.        Argh! The copper is completely disabled during DDF in Hires 4 bitplane
  404.        mode - so copper positions 0x30 and 0x34 are about 640 pixels apart.
  405.        The Kickstart uses FF39FFFE to wait for the end of line 256 instead of
  406.        FFDFFFFE as in all the other modes. This is implemented now, but
  407.        probably not 100% correct.
  408.        Added check whether SVGAlib doesn't support our mode.
  409.        If using GCC >= 2.7, define __attribute__((aligned(16))) as
  410.        BIG_ALIGNMENT in config.h. Use it for the apixels array to prevent
  411.        potential problems on the Alpha.
  412.        Tried to make the color selection routine produce better results in 256
  413.        color mode.
  414. 960210 readdisk didn't work at all for large files - fixed.
  415.        In pfield_doline(), clear the apixels array if playfield DMA is off.
  416.        In SPRxCTL(), reset sprite mode when sprpos==sprctl==0
  417.        Rewrite pfield_orword_hires() and friends to use lookup tables. No
  418.        noticeable improvement on my machine, but might be different on other
  419.        machines. Two versions of this code: one using 64bit longs on the Alpha.
  420.        New targets linux-debug and linux-prof.
  421.        Use 1MB slow mem.
  422.        -funroll-loops is a little excessive. Remove it.
  423.        Add support for linear addressing modes for SVGAlib version. Speedup
  424.        is 20-30% on my old 486 VLB. Now, would someone please fix SVGAlib to
  425.        support that for the S3-864 as well?
  426.        Set SVGAlib keyboard mode to DONT_CATCH_CTRLC.
  427.        Change custom.c, xwin.c and svga.c to keep track of the display window 
  428.        and background color and to clear the areas above and below the display
  429.        window if necessary to remove garbage images from previous frames.
  430.        Set the LOF bit in the Kickstart replacement init routine. Also
  431.        initialize CIAs to Kick 1.3-like values.
  432. 960209 Some more -DHAVE_xxx_H options in the Makefile and filesys.c. DEC Alpha
  433.        fixes for filesys.c from Ed and Marcus. HPUX fixes.
  434.        New field in table68k for CPU type, parsed by readcpu and compared to
  435.        CPU_LEVEL which is defined in config.h. New instructions MOVE2C, MOVEC2
  436.        and CAS. Also a new field for priviledge level that is used by gencpu to
  437.        generate tests for regs.s and Exception(8) calls if necessary.
  438.        Move parsing of table68k into a new file build68k.c. Generate a file
  439.        called cpudefs.c containing the information from table68k in 
  440.        machine-readable form. Change readcpu.c to use the array found in 
  441.        cpudefs.c.
  442.        Don't generate the d8(An,Dn) addressing mode in-line. Generate a call to
  443.        get_disp_ea(), which is an inline function in newcpu.h if UAE is
  444.        configured for 68000 emulation; for 68020 emulation, it is defined in
  445.        newcpu.c.
  446.        Debugger could crash on illegals because there was no mnemonic defined
  447.        in lookuptab[].
  448.        Return zero for SERDATR.
  449. 960207 It seems that the copper stops completely if an attempt to write to a
  450.        specific register fails because of COPDANG. Apparently, the Kickstarts
  451.        use this to stop the copper with a 0x00000000 longword. This leaves the
  452.        question why they don't do 0xFFFFFFFE like everybody else.
  453.        Enable 512K slow memory by default.
  454.        Integrate Stefan Reinauers battclock patch that makes it work with
  455.        newer Kickstarts.
  456.        In cia.c, do the little index pulse hack even if dskdmaen==1, because
  457.        DMA is only enabled when dskdmaen==2 (Helps the "Mad Decision" demo).
  458.        Add solaris entry to Makefile (GCC, Openwin, -DHAVE_STATFS_H)
  459.        Define HAVE_STRINGS_H for SGIs, change filesys.c accordingly.
  460. 960206 Build a smaller table instead of cputbl.c. Use readcpu and the smaller
  461.        table to build the cpufunctbl array at run-time.
  462.        Nuked the other half of the old CPU emulator. Reimplemented debugger to
  463.        use the information generated by readcpu.
  464.        Define HAVE_STATFS_H for SGIs in the Makefile, and use that as a test
  465.        in filesys.c instead of #ifndef __linux.
  466.        Hack filesys.c, get_path() to support the assign command.
  467.        Add -fstrength-reduce and -funroll-loops in Makefile to make people
  468.        nervous.
  469.        Rewrite Sam Devulder's LOW_BANDWIDTH patch and add it to xwin.c.
  470. 960205 Forgot some PC-relative bit instructions in table68k.
  471.        Nuked half of the old CPU emulator.
  472.        Split gencpu.c into two parts, new one is called readcpu.c and just
  473.        parses the table68k file. Link it to the main program.
  474.  
  475. 960205 Release 0.4
  476. 960203 filesys.c, action_read(): Slightly more efficient code (translate Amiga
  477.        address to real pointer).
  478.        Moved some common code in the generate_* functions in gencpu.c to a
  479.        separate function.
  480. 960202 Added an experimental fast disk option. Currently turned off by
  481.        default (it's not such a big win).
  482.        Attached sprite fixes (overlapping att. sprites looked bad, Katakis).
  483.        Add sleep(1) before resetting the console to text mode when using
  484.        SVGAlib: this might fix some screen corruption problems.
  485.        Add sprite/playfield priority checking to the most important case
  486.        (single playfield, no HAM).
  487.        In filesys.c, do_find(): open() returns -1 on error, not zero.
  488.        Return ERROR_OBJECT_WRONG_TYPE if do_find() is called for a directory
  489.        (fixes Champions of Krynn harddisk installation).
  490. 960201 Don't abort if sound driver not present, just set produce_sound to 0.
  491.        New files keybuf.c and keybuf.h to record keypresses in the right
  492.        order and without losing any. In cia.c, force 15 scanlines between
  493.        keypresses, just to be sure.
  494.        unixfs.device _does_ work with Kick 1.3: just don't trust what Kick 1.3 
  495.        sends in the startup packet. For now, disable more than one mount per 
  496.        command line.
  497.        Started integrating Ernesto's new Mac sources.
  498.        Remove superfluous includes from some files.
  499. 960131 Added Ed's unixfs.device (great stuff).
  500.        Adding ULONGs to pointers is a bad idea on the Alpha if the ULONG value
  501.        really is signed. Add some casts to LONG in (pc_p + src) expressions
  502.        in genpu.c.
  503.        If DMACON is written and copper DMA is enabled, do a COPJMP1 at once.
  504.        Helps the "Interference" demo.
  505. 960129 More SGI fixes from Ed. Bugfixes and transdisk improvements from Marcus 
  506.        Sundberg.
  507.        Remove EXTRA_DEFINES from Makefile. Breaks some systems.
  508.        Move common sprite code from pfield_doline() and pfield_doline_slow()
  509.        to new function pfield_sprite(). The same sprite may appear more than
  510.        once on the same line, so don't shift out the bits of sprdata[] and
  511.        sprdatb[] while displaying it (Turrican I).
  512.        In xwin.c and svga.c, barf if LINUX_SVGALIB doesn't match the file 
  513.        being compiled.
  514.        Make all .o files depend on config.h in the Makefile.
  515.        No need to exit if sound driver unavailable, but -S given.
  516.        Small debugger fix: Missing space in output.
  517.        Fix for the sprite logic: Specifically, use a state variable indicating
  518.        whether the sprite has been restarted after a VSYNC. Fixes most
  519.        Turrican problems.
  520. 960124 Added Denis Sablic's patch for sound run-time option.
  521.        Added Ed Hanway's patch for better Makefile, X mouse cursor blanking 
  522.        and more SGI compilation fixes.
  523. 960123 Include options.h everywhere.
  524.        Handle 8 bit GrayScale visuals like PseudoColor.
  525.        Remove C++ leftovers from joystick code.
  526. 960122 When using the joystick driver, the button test must come after
  527.        handle_events() in vsync_handler().
  528. 960118 Removed all the remaining C++ comments. Changed all inline keywords to
  529.        __inline__. Define __inline__ if not using gcc.
  530.        Make proper prototypes for everything. Compile with maximum warnings +
  531.        -ansi + -pedantic.
  532.        Remove CIA_cycle(), obsolete.
  533.        Reimplemented the STOP optimization in newcpu.c. Removed DualCPU
  534.        support in CPU emulator.
  535.        Real nasty bug in pfield_doline() fixed: sprxpos could be evaluated as
  536.        negative, with not-so-amusing results. (Need to rewrite this in 
  537.        Oberon to get array bounds checking :-)       
  538. 960117 Heroic effort: Rewrote the thing in C. This might help fix some
  539.        problems with users being unable to compile it.
  540.        Fixed a problem in hsync_handler(): Only call flush_line() for lines
  541.        in the display window, i.e. when we did a prepare_line() before.
  542.        Better code for relative branches: Don't use setpc(getpc()+x) calls,
  543.        increment regs.pc_p instead.
  544. 960116 Reimplemented the function to load the Kickstart ROM. Use stdio instead
  545.        of fstreams since this apparently does not work on the Mac. Detect 256K
  546.        Kickstarts. Detect corrupt ROM images (calculate checksum).
  547.        Added Ernesto Corvi's Mac port. Changed it around a bit, so it
  548.        probably won't compile.
  549. 960115 Reinstate config.h options for X screen depth, so that DrawPixel() can
  550.        be inlined in custom.cc for speed. xlinebuffer is now incremented in
  551.        each call to DrawPixel() (for both X and SVGAlib) to get rid of some
  552.        address calculations.
  553. 960114 Fixed X generic pixel drawing routine for SHM.
  554.        Still trying to fix the harddisk emulation.
  555.        uae.device no longer breaks the debugger (can step through uae.device
  556.        functions now)
  557.        Bugs affecting performance: SPCFLAG_STOP never got reset, and DSKLEN() 
  558.        would set SPCFLAG_DISK even if DMA was being turned off.
  559.        Made slow memory a run-time option.
  560.        Defer interrupts by one CPU instruction to give programs a chance to
  561.        read INTREQR ("Seeing is Believing" and "Substance" demos)
  562.        Added ScrollLock hack for X, too.
  563. 960113 SVGAlib version compiles again. Fixed SVGAlib mouse bug.
  564.        Fixed SHM bug: Maximum scanline is 313, not 312.
  565.        Sometimes, disk.cc missed a side change and would read the wrong data.
  566.        Fixed. Apparently, this was the worst compatibility problem.
  567.        Implemented trace mode.
  568. 960112 Changed layout of class amigamemory a little so that gcc can generate
  569.        better addressing modes.
  570.        Finally wrote functions in gencpu to generate MOVEMs.
  571. 960109 Integrated Ed Hanway's patches for better X support and run-time
  572.        configuration of some options. 
  573.        Got rid of the direct VGA memory access. (Need to do this differently).
  574.        Changed the method of drawing lines: custom.cc now tells the graphics
  575.        code the line number and whether it needs to be doubleed before drawing
  576.        it.
  577.        Added Andre Beck's MIT-SHM patch.
  578.        Remove warnings for newcpu.cc.
  579. 960108 Fixed exceptions in op_illg(): Need to decrement PC.
  580. 960107 Added an "uae.device" resident module at 0xF00000. This emulates a hard
  581.        disk (fixed size 8MB for now).
  582. 960106 Moved some common code from pfield_doline() and pfield_doline_slow() to
  583.        a separate function. This fixes a potential HAM bug (two static vars
  584.        for the same value).
  585.        Sound support for Linux. Works only with graphics off and the CPU
  586.        slowed down.
  587.        Better SVGAlib keyboard support.
  588. 960105 Added AvailMem(), AllocMem(), AllocAbs() and FreeMem() dummies.
  589.        The Hardwired demo times the multiplication instructions and prints
  590.        "This demo don't like Axel" if they are too fast. Apparently, Axel has
  591.        a 68040. Added a WANT_SLOW_MULTIPLY option to config.h.
  592.        Fixed the fast blitter emulation (seems to work now).
  593. 960104 Fixed all the ChangeLog entries from 95 that said 96 (oops??!)
  594.        pfield_may_need_update() should check whether bitplane DMA is on.
  595.        Added ersatz.cc and ersatz.h. The purpose of these files is to
  596.        implement one or two Kickstart functions that are commonly called from
  597.        bootblocks. This should help support some games and demos that only use
  598.        the Kickstart as an initial track loader. So far, it's only good enough
  599.        for one program.
  600. 951223 More intelligent event handling in the CPU emulator. Slightly faster.
  601. 951222 Optimize CPU emulation by inlining cctrue(). Also, the real PC no
  602.        longer needs to be incremented each instruction. The real PC value
  603.        now has to be fetched by m68k_getpc().
  604.        Added direct screen access for SVGAlib, but it didn't help much. I'll
  605.        probably remove it again.
  606.        The gencpu executable is 2M smaller if it allocates memory
  607.        dynamically.
  608. 951216 custom_bput() enhanced a little. Now remembers the value that was 
  609.        written in the other half of the register.
  610.        Apparently, the USEx bits of BLTCON0 are ignored in line draw mode.
  611.        (Silents-Demo)
  612.  
  613. 951212 Release 0.3
  614. 951212 Included Alessandro's battclock patch.
  615.        Fixed mouse autocalibration for wrong-aspect screens.
  616. 951210 Joystick support for Linux.
  617.        Better color matching for 256 color modes.
  618.        Rewrote most of the memory management in plain C, mainly to avoid the
  619.        various template bugs in some compilers, but also because gcc can't
  620.        handle the regparm attribute for virtual functions yet.
  621. 951209 Added Alessandro's patches for automatic mouse calibration.
  622.        Tried to optimize the blitter loop a bit. Doesn't work.
  623. 951205 Added Hannu's patches for diskfile write support.
  624. 951201 More portability fixes, especially for weird compilers that workstation
  625.        vendors ship.
  626. 951125 More keys for X, some keyboard support for SVGAlib (slightly 
  627.        dangerous); beginnings of US keyboard support.
  628. 951124 256 color mode support for SVGAlib. FAST!
  629. 951123 Tiny tweak to central loops in playfield code results in much better
  630.        assembly. Apparently, GCC does not feel too good about optimizing 
  631.        reference variables.
  632. 951113 Bug fix in the events code (nextevent must not be changed while events
  633.        are being processed).
  634. 951112 The playfield can now be drawn with the right aspect (i.e., every line
  635.        twice). Slower, but looks nicer and supports interlaced mode
  636.        (flickerfree!). The first 29 lines (blanking interval) are omitted
  637.        now to fit everything in 800x600.
  638.        Oops, disk drive identification did not work. Fixed, all four drives
  639.        appear now.
  640.        Oops, CIA_reset() was there all the time but never got called.
  641.        Optimized the planar->chunky conversion in pfield_doline() a little.
  642.        This really is time critical.
  643. 951111 If colors change on a line, we might still be able to use the full 
  644.        line update, if the change occurred outside the DIW. Have to be a 
  645.        little careful, though.
  646.        Playfield code now uses real pointers again, but makes sure it can
  647.        read enough bytes to complete the current line without segfaulting.
  648.        Oops, my "better estimate" (see below) was a mistake. Restored the
  649.        original 4 hw cycles per instruction relation. This slows down the
  650.        emulator while booting (more screen refreshs), but speeds up many
  651.        demos that otherwise spend most of their time waiting for a specific
  652.        raster position.
  653.        Playfield modulos must be added immediately when DDF stops. (WOC demo)
  654.        Portability fixes in disk.cc (null pointers).
  655.        Implemented average frame rate calculation ('c' in the debugger).
  656.        Debugger fixes.
  657.        Sprite fixes (height was wrong, wrong priorities in fast update)
  658.        Added an AutoConfig expansion RAM device. The OS seems to recognize
  659.        it, but breaks sometime later (seems to be the same bug that kills
  660.        the emulator when there's RAM at 0xC00000).
  661.        SVGAlib now has mouse support, too.
  662.        HAM mode implemented.
  663. 951110 Implemented fast complete line playfield update. Switches back if
  664.        necessary. Fixed attached sprites bug.
  665.        Copper wait no longer slows down the CPU emulation. (there were
  666.        lots of new copper bugs because of this, but I hope I fixed all
  667.        of them).
  668.        Changed cia?t? from UWORD to ULONG, since there were overflows in
  669.        the assertion (because of 65535+1 == 0).
  670. 951108 The DIVS remainder could have the wrong sign.
  671.        New HAVE_BROKEN_SOFTWARE define in config.h that makes the emulator
  672.        mask out the high byte of all addresses.
  673.        Wrote genblitter.cc and replaced the awful code in blitter_blit()
  674.        and blitter_line() with calls to the generated function.
  675. 951107 Implemented ?BCD. These don't really work yet.
  676.  
  677. 951106 Release 0.2
  678. 951105 Fixed a bug in the new CIA timer code.
  679.        Fixed flag settings for some cases of ADDX/SUBX
  680. 951104 Changed the main loop a bit - call all the *cycle() functions only if
  681.        it is really necessary. I hope everything still works - at least it is
  682.        twice as fast now :-D
  683.        Improved mouse emulation - avoid overflows, permit "wraparound".
  684.        Added debugger 'g' command.
  685.        Removed some useless casts from the CPU emulator.
  686.        Added a configuration option to prevent checks for odd addresses. Only
  687.        very bad programs need this check.
  688. 951103 The sprite emulation sometimes did not work too well, especially with
  689.        dual playfield mode. Hopefully fixed.
  690. 951102 The 10 cycle counter is more like a 5 cycle counter in this
  691.        implementation. (Fine, that makes floppy loading even faster :-)
  692.        Implemented mouse movement. Totally out of sync with the X pointer,
  693.        but at least something.
  694.        Found out about the XAutoRepeatOff() function. Real useful.
  695.        DualCPU mode works again.
  696.        Corrected flag settings for CMPA.W.
  697.        Fixed DIV instructions: Don't change dest in case of overflow.
  698. 951031 The PC is now converted to a real pointer. This is safe (much safer
  699.        than converting bitplane pointers, since the PC always has to be valid)
  700.        and should speed things up a little.
  701. 951029 Some primitive event handling: 2 mouse buttons and 1 joystick button
  702.        are emulated, as well as parts of the keyboard (only german mapping).
  703.        Fixes: Delay values and sprite widths are always LoRes. Playfield 2
  704.        uses colors 9..15.
  705.        Implemented a frame rate configuration option that can speed up the
  706.        emulation quite a bit.
  707. 951028 A-ha. The 68000 has one strange feature after all. MOVEM.W to Dn sign 
  708.        extends the value to a longword.
  709.        Katakis expects that accessing odd addresses causes exception 3, so 
  710.        we have to emulate this. *Sigh*
  711.        Do at least something with the index pulse bit. It's more or less a 
  712.        toggle now.
  713.        Implemented sprites & dual playfields, both with small glitches.
  714. 951027 When LOF is set, the frame is one line longer.
  715. 951026 Implemented a preliminary diskfile type for special formats. Turrican
  716.        boots up correctly (crashes if I want to play a game, though).
  717.        Implemented EHB and added a few missing masking operations in the color
  718.        handling.
  719.        Fixed the absw addressing mode - need to sign extend here as well.
  720. 951025 Fixed another extremely stupid bug, this time in the playfield code.
  721.        Each pixel was calculated four times...
  722.        Increased the size of the apixels array - this was being overrun.
  723. 951024 Fixed an extremely stupid bug in flag settings for byte and word
  724.        operations.
  725.        The "sectors until gap" field must be in the range 1..11 instead of
  726.        0..10, or very bad things will happen if it is used to calculate a
  727.        blit size.
  728. 951021 Don't use real pointers to fetch bitplane data - too many segfaults.
  729.        Delay the copper after executing an instruction, or wait sequences like
  730.        FFDF FFFE 0200 FFFE won't work.
  731.        Some programs expect that the CPU is completely turned off if the
  732.        blitter nasty bit is set. So be it.
  733.        The RSI Megademo chokes when disk DMA fetches two syncs. Leave one out.
  734.        The LOF bit wasn't set correctly.
  735. 951020 Blitter fixes: Load fill carry from FCI each line; keep the masked
  736.        value of bltadat in bltolda
  737.        Give the CPU twice as many "cycles" - this still is not even remotely
  738.        correct, but a better estimate.
  739. 951017 Added SVGAlib support. Unfortunately, my graphics card isn't fully
  740.        supported by the current SVGAlib version.
  741. 951015 More small optimizations to memory.h and custom.cc.
  742.        Added code for 256 color screens. The type of screen has to be
  743.        selected at compile time.
  744. 951014 Modified the memory management to be (hopefully) a little more
  745.        efficient.
  746.        Changed gencpu.cc to generate functions and a big function pointer
  747.        array instead of the old case labels. The generated C++ files now
  748.        compile a lot faster, and the code should be better as well.
  749. 951013 Implemented pseudo POTGOR to keep the RMB from being detected as
  750.        pressed all the time.
  751.        GenerateDecTab() generated TRAP incorrectly.
  752.        Made some more instructions (MOVE.B A0,D0 etc) illegal in gencpu.cc.
  753.        Fixed X colors. Fixed data fetching for HiRes screens.
  754. 951011 EXT.WL instructions set the flags.
  755.        Implemented second CPU emulator, plus "DualCPU" option. The new CPU
  756.        emulator is generated automatically from a file called table68k by
  757.        a program called gencpu.
  758. 951002 Removed version information from the file headers.
  759.        Removed some sillinesses in custom.cc. 
  760.        DSKLEN bug fixed (mask out 0xC000).
  761.        Playfield code rewritten. Now supports horizontal scrolling. Implemented
  762.        some primitive color support.
  763. 950927 Fixed predecrement/postincrement addressing with byte size for the
  764.        stack pointer.
  765. 950926 Fixes to the disk code: Terminate disk DMA, flip disk side, read more
  766.        than just two sectors during disk DMA, fix checksum calculation.
  767.        Fixed copper comparison bugs.
  768.        
  769. 950901 Release 0.1
  770. 950826 bugfix in GenerateDecTab(): LEA.W instructions were generated.
  771. 950312 New file disk.cc, for (guess what) disk support. Doesn't work yet.
  772. 950311 Multiplication instructions were generating 16 bit results.
  773.        Sign extension was wrong in some places.
  774.        Removed bugs in the blitter (one word width: ALWM & AFWM and line mode)
  775.        The Kickstart logo looks perfect now.
  776.        Playfield routine should check BPLCON0 instead of BLTCON0
  777. 950309 ASR D8,D0 is not a valid instruction.
  778.        Bitplane pointers were not incremented.
  779.        Copper comparison didn't work. COP2LC and bitplane pointers were written
  780.        incorrectly. Fixed.
  781.        Something that bears a striking resemblance to the familiar Kickstart
  782.        logo now appears in my X window!
  783. 950306 ROR used to set the X flag. Bug fixes in GenerateDecTab.
  784.        More bug fixes in several 68000 instructions.
  785.        Improved blitter. ?????? KS1.3 doesn't seem to set BLTDMOD on a 
  786.        line draw. What is this??
  787.        Fixed stupid bugs in playfield code.
  788. 950305 fixed bugs in opcode generation and interrupt handling. Implemented 
  789.        STOP. Fixed flag settings: Result wasn't masked. Ooops!!
  790.        ADDQ #imm,An doesn't set flags.
  791.        One-shot timer mode didn't work.
  792.        Implemented blitter, doesn't work.
  793.        Some primitive and slow playfield support, only to make the things that
  794.        hopefully will soon appear visible.
  795. 950304 CIA timers ought to work OK. Copper is emulated.
  796.        Emulator loops infinitely when trying to initialize the console.device
  797. 950303 experiments with X, figured out how to open a window and draw pixels.
  798.        No graphics emulation yet, though.
  799. 950301 Nearly all instructions work.
  800.        Fixed supervisor mode stack.
  801.        The memory manager now handles CIA chips.
  802. 950228 Bug fixes in 68000 code, exceptions and more instructions implemented
  803.        Memory management extended to handle custom chips as well.
  804.        Debugger improved.
  805.        Kickstart passes memory & CPU type test, builds up some system
  806.        structures.
  807. 950227 MC68000 & little debugger for tracing. It can execute the first couple
  808.        of KS1.3 instructions, but doesn't get past the memory test.
  809. 950225 Work begun
  810.