--- uae/ChangeLog 2018/04/24 16:37:52 1.1 +++ uae/ChangeLog 2018/04/24 16:37:54 1.1.1.3 @@ -1,3 +1,692 @@ +960617 Fix memory clobber in X86.S when diwfirstword==0. +960616 Handle programs that don't wait for the blitter by finishing a pending + blit as soon as a blitter register is written to (regardless of DMACON, + to be safe). + Call gui_led only if the LED changed. +960615 Fixed dual playfield sprite priorities. Optimized dual playfield code + in X86.S. More work on AGA code. Get joystick status only in + vsync_handler to speed things up. + Make blitter fill more intelligent with table lookups instead of loop. +960614 DOS update from Gustavo. Pass real bitplane pointer to + bpl_data_differs(), don't calculate it again. +960610 Fixed silly INTEL_FLAG_OPT bug: The new __asm__ expressions use + regflags, which is of course _regflags on a.out... + More BeBox fixes from Christian. + Make the CIA bank bigger (A0..BF) and relax the CIA A/B selection + checks to make broken software (Kingsoft's Emerald Mine, reportedly) + happy. + Default framerate is now 1. +960603 New BeBox code from Christian. Fix test for ELF in configure.in. +960529 genblitter.c: generate blitfunc as a function taking ULONGs and + returning an ULONG. This makes custom.o about 4500 bytes smaller on the + x86 by removing worthless size prefixes, and should increase + performance (better for the cache, and the P6 reportedly doesn't like + 16 bit instructions anyway). + memory.c: Load Kickstart in one block and swap bytes after that if + necessary (eliminates the need for the special bebox load routine) + custom.c: Some preliminary work for AGA support. +960528 Saw a real awful piece of code that detects the right mouse button by + reading a value from POT0DAT, counting up to 25, reading from POT0DAT + again, and deciding the button is pressed if the value changed. Urgl! + Added POT0DAT() in custom.c ... + Gustavo's latest patches. +960525 Do index pulse handling in CIA_hsync_handler(). Make sure bit 12 in + INTREQ gets set on an index pulse. Don't call DISK_Index() for now, + since this breaks the Workbench. + The CIA code should _probably_ not be resetting the bits in INTREQ. + Disable this as an experiment, let's see what breaks. +960524 Z flag handling for ABCD/SBCD/ADDX/SUBX was wrong (must be clear if not + zero, was set if zero). Some other flag bugs in these functions fixed. +960523 gfxlib.c update from Christian Schmitt. Some new Mac code from Ernesto, + still not all of it, though. Italian keyboard from Alessandro Bissacco. +960522 Fix the CHK instruction. Implement middle mouse button. +960515 Fix some Nextstep problems in configure.in. +960513 New Makefile target "streifenfrei" to remove all output from configure. + Use autoconf 2.7; 2.9 is buggy. +960512 Remove BIG_ALIGNMENT hack. Remove superfluous pfield_fetchdata() call + in pfield_doline_slow_l() that resulted in garbage on the screen. + Move blttbl array from custom.h to genblitter.c + Use new lookup tables imm8_table and areg_byteinc in CPU emulation + instead of ?: expressions. + GCC appears to generate better code if the opcode is passed as ULONG to + the CPU emulation functions instead of as UWORD. + Modify some of the flag emulation __asm__ statements so that GCC uses + less registers for them. +960510 Cast malloc() results to char *, for C++ compilers. +960509 Use test for GCC and __i386__ in options.h to decide whether to use + intel flag optimization. + Use test for wish4.0 to decide whether to use the GUI. +960507 New bebox.cpp from Christian. AF sound patches from Marcus Sundberg. +960505 Fix the configuration stuff so it works. Fix some bugs in gfxlib.c +960504 Use GNU autoconf scripts to generate Makefile and sysconfig.h. Add new + files sysdeps.h that includes the right system header files. Remove + amiga.h and Makefile. +960502 More Next code from Ian (new Uae.app directory, 2 bit drawing for + custom.c). +960501 Allow the sound driver to set the frequency to a value that is slightly + different from the requested one. +960430 Added AmigaOS port from Olaf Barthel. +960427 Fixed single playfield sprite priorities in X86.S. +960426 Added new NeXTwin.m from Ian. + Turn off the blitter delay in line mode. + Added a CPU optimization from Olivier Raoul: gencpu now reads a file + "insncount" that can be generated by UAE during execution and generates + specific functions for the most common opcodes. Not documented yet. +960414 Reimplemented the fast disk emulation in a more sane way. Also it's + only done for reads now. (Plus, it no longer works :-/ Need to work + some more on this). + In blitter emulation, defer not only the setting of the bltfinish bit, + but actually defer the whole blit for the number of cycles it will + take. This makes programs the clear the screen while it is still being + displayed look much better. + Changed supervisor mode handling around a bit (was messy). + New DOS code from Gustavo. +960412 Removed smart update method 2. Added Alessandro Bissacco's blitter + optimization patch. + Fixed some sprite problems: during hysnc, clear sprpos and sprctl, and + don't do_sprites() in line 0. +960409 Be a little more intelligent about when to call pfield_linetoscr() from + pfield_doline_slow(). It's only necessary if a color register changed. + If it can be deferred to the end of the line, use the the _full + variants. + Some CIA TOD fixes. + Better transdisk, accepts first/last track parameters. +960405 New function memcmpy(), inline assembler for the i386. Compares two + memory blocks and copies them at the same time. Used in + bpl_data_differs. +960404 French keyboard from Tristan Cavelier. Parallel port emulation from + Stefan Reinauer. + Turn bpl?pt and r_bpl?pt into arrays, simplify some code using them. +960401 Some parts of Ernesto's new Mac sources. +960331 filesys.c: Close filedescriptors in free_key(). get_path() sometimes + read uninitialized bytes. + Minor cleanups all over the place. + unchain_mnn() leaves sibling intact, but clobbers next. customreset() + didn't care about that and crashed. + Use the __asm__("intel_flag_lookup") magic not only for DOS. + Support 320x300 for X (without LOW_BANDWIDTH). + Add new function fast_memcmp(), defined as memcmp if __i386__ is + undefined, otherwise a slightly optimized inline assembly function. +960329 Some bug fixes in gencpu.c +960328 Stupid programs write odd playfield modulos into the hw registers... + Eek! Sometimes, linedescr[] was indexed with a negative value... Add a + vpos >= minfirstline check to pfield_may_need_update(). I really need + to rewrite this in Oberon... + Don't turn off SHM when LOW_BANDWIDTH is selected. + Keep the nextpos and linepos variables from pfield_doline_slow_?() as + globals and initialize them in pfield_may_need_udpate(). + Modified alloc_colors256() some more. + Try to make sprite DMA follow the Amiga DMA slots more closely by + adding a currhp parameter to do_sprites() and calling it at the end + of a scanline or in pfield_may_need_update(). +960327 Added Gustavo's latest DOS code, as far as possible. Modified X86.S to + use a macro SYM() to create symbol names either with underscore or + without. + Fixed some very silly SVGAlib lores bugs. Move screen 8 pixels up in + low resolution. + Use diwstop instead of diwstart to caclulate the DIW for 320x200 modes. + Reset it not only in calcdiw(), but also in init_frame(). + Speed up 256 color allocation a little bit. +960326 New function flush_block() in xwin.c and svga.c. Called from + do_flush_line() and (new function) do_flush_screen(). Modify struct + vidbuf_description, new member maxblocklines that records the maximum + number of scanlines that do_flush_line() should collect before calling + flush_block(). If it is zero, then flush_line() is used as before. + This makes the special case stuff for SHM unnecessary, so it's removed. + Fixed a stupid bug in events code: Put ev_hsync in front of ev_copper, + so that do_copper gets called with hpos == 0 instead of hpos == 227 at + the beginning of the line. + New function init_frame() that sets up some variables, called from + customreset() and vsync_handler(). + Move smart update code to pfield_doline() from pfield_doline_h() and + ..._l(). Clean up these two with a macro DO_ONE_PLANE, removing + duplicate code. + Implement big blits and ECS chip ids. New configuration options + ECS_AGNUS and ECS_DENISE. + Implement MOVEP. +960325 Before calling pfield_may_need_update(), make sure the value that was + written to a register actually differs from the previous one. + New expansion code from Stefan Reinauer. + Modify struct mem_notify_node to contain a pointer to a valid bit + instead of the valid bit itself, so that the playfield code has to + check only one flag to decide whether to draw the line (SU method 2) +960324 The chip_flags approach has several problems. A flag may cover an area + in memory that spans two scanlines, or several scanlines may use the + same area in memory. + Provide two other, different methods for the smart update: + 1. Save all the bitplane data for each line and compare the chipmem + with the saved data to decide whether an update is necessary. + 2. Use a chain of memory_notify_node structs instead of a single bit + for flags. Each scanline owns a set of these structs and chains them + into the right place, and the chipmem_?put routines walk the chains + and set the modified bit for each element. + Unfortunately, both methods are slower than the old one. Especially the + first one has some advantages though: it speeds up programs that clear + the screen each update and write the same contents back, and it + can speed up double-buffering programs at full framerate, since it does + not have to check whether the bitplane pointers have changed. + Remember the first and last drawn line for each frame, and pass them to + flush_screen. Use this in xwin.c for SHM. Modify SHM logic: if smart + update is selected, call XShmPutImage() from flush_line() instead of + from flush_screen(). But gather blocks of consecutive lines to avoid + calling XShmPutImage() too often. +960323 "Smart update" method, based very loosely on Alessandro Bissacco's + work, implemented: + Add an array chip_flags that records any change made to specific words + in chip memory. + Move all the hardware registers relevant to playfield display into a + new structure bplinfo. Remember the contents of this structure in + struct line_description for every line on the screen. Avoid redrawing + in pfield_doline if the screen memory has not been modified for the + line to be drawn and if the information from the last frame matches + that in the current frame. +960322 Duplicate all functions responsible for drawing (pfield_doline, + pfield_doline_slow, pfield_sprite, pfield_*word_*res) and append _h + or _l (ah, the golden C++ days, when we had templates... which never + worked). Modify the *_l functions to support drawing in low resolution + (i.e. 320x200). Change the options -d and -H to support selecting color + mode and resolution, thereby getting rid of some SVGALIB_* options. + Get rid of the old pfield_*word_*res functions. + Collect information about the minimum diwstart value during the + previous frame and use that in case 320x200 was selected to fit the + image on the screen. + Get rid of HAVE_JOYSTICK (breaks the "-J" option) +960321 Give up in op_illg() if opcode is 0x4e7b and the exception handler for + it is NULL. In that case, it's a 68020 Kickstart. +960319 New Next code from Ian. SunOS target was still screwed (two CFLAGS). + Turn -x option into a "hair cursor" option. Support multiple mounts, + but warn if more than one is seen (still does not work with Kick 1.3). + Integrated Samuel Devulder's new LOW_BANDWIDTH patch. +960318 Integrated the start of Markus Gietzen's gfx library replacement. + Changed the interface between custom.c and the graphics code. There has + to be a buffer holding the data of all the lines on the screen. For + linear SVGAlib modes, this is the video memory. Eliminated -x option, + prepare_line(), DrawPixel() and the X_?BIT_SCREEN options, replace with + 3 versions of pfield_linetoscr for different datatypes. Implement + proper handling of the borders above and below the DIW in custom.c + instead of in flush_screen(). + Move common code (color allocation) from all the graphics files to new + file gfxutil.c. + Swedish keyboard from Per Olofsson. + +960315 Release 0.5.0 +960315 Newest DOS port from Gustavo. New sgi-gcc target. +960314 Add -lXext to osf target. Use "rb" for fopen() in main.c +960310 Play a bit with the __asm__ constraints. Implement CHK. +960307 Fix some stupid Makefile errors. Call parse_cmdline() if no init file + is found. + First round of NextStep patches; new file NeXTwin.m + Stupid bug in custom.c: The #define is called NO_FAST_DISK, not + NO_FAST_FLOPPY. + Fix one of the problems the Deform demo had with the blitter: The + line texture wasn't rotated to the right position in blitter_init(). +960306 Use some black GCC __asm__ magic to calculate flags more quickly + (config INTEL_FLAG_OPT) + HAM was broken by pfield_linetoscr changes. Fixed. + LOW_BANDWIDTH sometimes got confused when the display window changed. +960305 BCD instructions work well enough for Locomotive Basic on CPE. + New function parse_cmdline_and_init_file() that reads ~/.uaerc or + ./.uaerc and adds the options found in those files to those in argv[]. + Patch from Denis Sablic to make disk image filenames runtime + configurable. Extend it for the ROM filename. + Remove some of the run-time configurable stuff from config.h. + More X keysym fixes (I finally got a proper .Xmodmap ...) + for SVGAlib: Delete key, and PgUp/PgDn as Amiga keys. + The sound driver can now handle 22050 Hz and/or 8 bit samples. Both of + these are the default with LINUX_SOUND_SLOW_MACHINE. + Also use the SNDCTL_DSP_GETBLKSIZE ioctl and write the buffer when + there is enough data. + Abuse keybuf.c to provide a fake joystick emulation with the numeric + pad (enable with -J) +960304 bebox.cpp from Christian. + Rename pfield_linetoscr_full to pfield_linetoscr_full8. + More x86 assembly: pfield_linetoscr_full16. +960303 SunOS target from Dirk Vangestel. Put some not-so-superfluous includes + back in. Added the DOS specific patches to filesys.c. + Started x86 assembly optimizations. New file X86.S, includes an + optimized version of pfield_linetoscr (for 8 bit screens only). + Don't use SA_RESTART if it isn't defined. + prepare_line() wasn't called often enough (again...), leading to memory + corruption and "hit the reset button" bugs when using SVGAlib. +960226 Get rid of bool, true and false in amiga.h and everywhere else. + Copy yesterdays code to AF_SOUND code, too. + Include first round of Christian Bauer's BeBox patches. Add AIX fix + from Samuel Mackrill. + Add #include and #include in some more places. + Modify gencpu.c and readcpu.c so that immediate types j and J (0..15 + and 1..8) can be merged. Replace HAVE_ONE_GIG... option with a new + CPU_EMU_SIZE option that can be set to a value in the range 0..5, + where 0 is minimum size and 5 is equivalent to HAVE_ONE_GIG... +960225 Remove multiplications in sound code, use a big lookup table. +960222 Go back to having only one memory bank table of type addrbank instead + of several function pointer arrays. Eliminate the HAVE_BROKEN_SOFTWARE + define by extending the memory bank table to 65536 entries. + Remove remaining DUALCPU code. Allow BTST src,imm instructions in + table68k. +960220 Back out filesys.c change from Stefan Reinauer: don't call V36 specific + functions in expansion.library. + Better fix for the filesys.c assign problems by Oliver Moehrke. + Make new playfield code conditional on EXPERIMENTAL_SCREEN_UPDATE. + Improve the 64bit variant of said code. Try to get alignment for + apixels by putting it into a union with a long. + Kill the child in gui_exit(). Make graphics_init() return a value and + check it in main.c to see whether graphics were initialized. If not, + call gui_exit() anyway. + Use new 256 color allocation routine from svga.c in xwin.c, too. + Make LOW_BANDWIDTH compile _and_ work (wow...). +960219 Fix bug in memory.c: When loading 256K Kickstart, copy 256K, not 128K. +960218 Finished the rest of the UI: reset, debug and quit buttons as well as + drive LEDs. New target linux-gui; all others use dummy file nogui.c + for now. +960217 The GUI now supports inserting and ejecting diskfiles and displays + their names. Two pipes are used now, one for reading and one for + writing. Properly wait for the process to start up. + Use sigaction() instead of signal() in debug.c. + More fixes for the new display routines: Need to do a final call to + pfield_*word_*res with the data shifted right from the last fetched + word. +960216 Copper & sprite bugfixes from Marco Nelissen. Better X keyboard support + from Bruno Coste. + Move my_strdup() from filesys.c to options.h + New files xui.c, uae-ui (shell script) and uae-ui.tk (wish script). + These create a GUI for the X version of the emulator. So far, the + power LED works. +960215 Don't rely on SVGAlib headers defining any keycodes at all. + Include Thorsten Frueauf's NetBSD patch. Apparently, the devname + variable in hardfile.c caused a namespace collision, so rename it to + uaedevname. Fastmem fixes, debugger help, and ConfigDev allocation in + hardfile and filesys from Stefan Reinauer. + xwin.c: Give the window a title. + Half-implemented the DIVU.L, DIVS.L, MULU.L and MULS.L instructions. +960213 AF sound system support from Marcus Sundberg. Win95 keyboard support + for SVGAlib from Thierry Lescot. Added most of Gustavo Goedert's MS-DOS + port. + When using the old pfield_*word_*res functions, the gen_pfield_tables() + function was undefined. + Hmmm, /dev/brain must have been unmounted when I wrote the new pfield_* + functions. Now they make sure they access the apixels array only with + addresses that are multiples of 16 bytes. +960212 Fix copy&paste bug in cia.c found by Marco Nelissen: Need to call + RethinkICRB() instead of RethinkICRA() for CIA B timers. + Added Stefan Reinauers autoconfig area/fastmem support. Added run-time + options for use_slow_mem and use_fast_mem. + Oops, the pfield_*word_*res() optimizations break completely on HPs and + Sparcs. Now use this optimization only if we are using GCC 2.7. + HPUX fixes in the Makefile. New target hpux-gcc. + The code for clearing the areas above and below the DIW was trying to + be a little too clever selecting the color. Just use the current + background color. + Added channel attachment to the sound code. Untested. +960211 Found some flag setting bugs in the rotate/shift instructions and in + addx/subx (which I thought I had already fixed) by reimplementing + DUALCPU mode to work with Ed's e68k. + Argh! The copper is completely disabled during DDF in Hires 4 bitplane + mode - so copper positions 0x30 and 0x34 are about 640 pixels apart. + The Kickstart uses FF39FFFE to wait for the end of line 256 instead of + FFDFFFFE as in all the other modes. This is implemented now, but + probably not 100% correct. + Added check whether SVGAlib doesn't support our mode. + If using GCC >= 2.7, define __attribute__((aligned(16))) as + BIG_ALIGNMENT in config.h. Use it for the apixels array to prevent + potential problems on the Alpha. + Tried to make the color selection routine produce better results in 256 + color mode. +960210 readdisk didn't work at all for large files - fixed. + In pfield_doline(), clear the apixels array if playfield DMA is off. + In SPRxCTL(), reset sprite mode when sprpos==sprctl==0 + Rewrite pfield_orword_hires() and friends to use lookup tables. No + noticeable improvement on my machine, but might be different on other + machines. Two versions of this code: one using 64bit longs on the Alpha. + New targets linux-debug and linux-prof. + Use 1MB slow mem. + -funroll-loops is a little excessive. Remove it. + Add support for linear addressing modes for SVGAlib version. Speedup + is 20-30% on my old 486 VLB. Now, would someone please fix SVGAlib to + support that for the S3-864 as well? + Set SVGAlib keyboard mode to DONT_CATCH_CTRLC. + Change custom.c, xwin.c and svga.c to keep track of the display window + and background color and to clear the areas above and below the display + window if necessary to remove garbage images from previous frames. + Set the LOF bit in the Kickstart replacement init routine. Also + initialize CIAs to Kick 1.3-like values. +960209 Some more -DHAVE_xxx_H options in the Makefile and filesys.c. DEC Alpha + fixes for filesys.c from Ed and Marcus. HPUX fixes. + New field in table68k for CPU type, parsed by readcpu and compared to + CPU_LEVEL which is defined in config.h. New instructions MOVE2C, MOVEC2 + and CAS. Also a new field for priviledge level that is used by gencpu to + generate tests for regs.s and Exception(8) calls if necessary. + Move parsing of table68k into a new file build68k.c. Generate a file + called cpudefs.c containing the information from table68k in + machine-readable form. Change readcpu.c to use the array found in + cpudefs.c. + Don't generate the d8(An,Dn) addressing mode in-line. Generate a call to + get_disp_ea(), which is an inline function in newcpu.h if UAE is + configured for 68000 emulation; for 68020 emulation, it is defined in + newcpu.c. + Debugger could crash on illegals because there was no mnemonic defined + in lookuptab[]. + Return zero for SERDATR. +960207 It seems that the copper stops completely if an attempt to write to a + specific register fails because of COPDANG. Apparently, the Kickstarts + use this to stop the copper with a 0x00000000 longword. This leaves the + question why they don't do 0xFFFFFFFE like everybody else. + Enable 512K slow memory by default. + Integrate Stefan Reinauers battclock patch that makes it work with + newer Kickstarts. + In cia.c, do the little index pulse hack even if dskdmaen==1, because + DMA is only enabled when dskdmaen==2 (Helps the "Mad Decision" demo). + Add solaris entry to Makefile (GCC, Openwin, -DHAVE_STATFS_H) + Define HAVE_STRINGS_H for SGIs, change filesys.c accordingly. +960206 Build a smaller table instead of cputbl.c. Use readcpu and the smaller + table to build the cpufunctbl array at run-time. + Nuked the other half of the old CPU emulator. Reimplemented debugger to + use the information generated by readcpu. + Define HAVE_STATFS_H for SGIs in the Makefile, and use that as a test + in filesys.c instead of #ifndef __linux. + Hack filesys.c, get_path() to support the assign command. + Add -fstrength-reduce and -funroll-loops in Makefile to make people + nervous. + Rewrite Sam Devulder's LOW_BANDWIDTH patch and add it to xwin.c. +960205 Forgot some PC-relative bit instructions in table68k. + Nuked half of the old CPU emulator. + Split gencpu.c into two parts, new one is called readcpu.c and just + parses the table68k file. Link it to the main program. + +960205 Release 0.4 +960203 filesys.c, action_read(): Slightly more efficient code (translate Amiga + address to real pointer). + Moved some common code in the generate_* functions in gencpu.c to a + separate function. +960202 Added an experimental fast disk option. Currently turned off by + default (it's not such a big win). + Attached sprite fixes (overlapping att. sprites looked bad, Katakis). + Add sleep(1) before resetting the console to text mode when using + SVGAlib: this might fix some screen corruption problems. + Add sprite/playfield priority checking to the most important case + (single playfield, no HAM). + In filesys.c, do_find(): open() returns -1 on error, not zero. + Return ERROR_OBJECT_WRONG_TYPE if do_find() is called for a directory + (fixes Champions of Krynn harddisk installation). +960201 Don't abort if sound driver not present, just set produce_sound to 0. + New files keybuf.c and keybuf.h to record keypresses in the right + order and without losing any. In cia.c, force 15 scanlines between + keypresses, just to be sure. + unixfs.device _does_ work with Kick 1.3: just don't trust what Kick 1.3 + sends in the startup packet. For now, disable more than one mount per + command line. + Started integrating Ernesto's new Mac sources. + Remove superfluous includes from some files. +960131 Added Ed's unixfs.device (great stuff). + Adding ULONGs to pointers is a bad idea on the Alpha if the ULONG value + really is signed. Add some casts to LONG in (pc_p + src) expressions + in genpu.c. + If DMACON is written and copper DMA is enabled, do a COPJMP1 at once. + Helps the "Interference" demo. +960129 More SGI fixes from Ed. Bugfixes and transdisk improvements from Marcus + Sundberg. + Remove EXTRA_DEFINES from Makefile. Breaks some systems. + Move common sprite code from pfield_doline() and pfield_doline_slow() + to new function pfield_sprite(). The same sprite may appear more than + once on the same line, so don't shift out the bits of sprdata[] and + sprdatb[] while displaying it (Turrican I). + In xwin.c and svga.c, barf if LINUX_SVGALIB doesn't match the file + being compiled. + Make all .o files depend on config.h in the Makefile. + No need to exit if sound driver unavailable, but -S given. + Small debugger fix: Missing space in output. + Fix for the sprite logic: Specifically, use a state variable indicating + whether the sprite has been restarted after a VSYNC. Fixes most + Turrican problems. +960124 Added Denis Sablic's patch for sound run-time option. + Added Ed Hanway's patch for better Makefile, X mouse cursor blanking + and more SGI compilation fixes. +960123 Include options.h everywhere. + Handle 8 bit GrayScale visuals like PseudoColor. + Remove C++ leftovers from joystick code. +960122 When using the joystick driver, the button test must come after + handle_events() in vsync_handler(). +960118 Removed all the remaining C++ comments. Changed all inline keywords to + __inline__. Define __inline__ if not using gcc. + Make proper prototypes for everything. Compile with maximum warnings + + -ansi + -pedantic. + Remove CIA_cycle(), obsolete. + Reimplemented the STOP optimization in newcpu.c. Removed DualCPU + support in CPU emulator. + Real nasty bug in pfield_doline() fixed: sprxpos could be evaluated as + negative, with not-so-amusing results. (Need to rewrite this in + Oberon to get array bounds checking :-) +960117 Heroic effort: Rewrote the thing in C. This might help fix some + problems with users being unable to compile it. + Fixed a problem in hsync_handler(): Only call flush_line() for lines + in the display window, i.e. when we did a prepare_line() before. + Better code for relative branches: Don't use setpc(getpc()+x) calls, + increment regs.pc_p instead. +960116 Reimplemented the function to load the Kickstart ROM. Use stdio instead + of fstreams since this apparently does not work on the Mac. Detect 256K + Kickstarts. Detect corrupt ROM images (calculate checksum). + Added Ernesto Corvi's Mac port. Changed it around a bit, so it + probably won't compile. +960115 Reinstate config.h options for X screen depth, so that DrawPixel() can + be inlined in custom.cc for speed. xlinebuffer is now incremented in + each call to DrawPixel() (for both X and SVGAlib) to get rid of some + address calculations. +960114 Fixed X generic pixel drawing routine for SHM. + Still trying to fix the harddisk emulation. + uae.device no longer breaks the debugger (can step through uae.device + functions now) + Bugs affecting performance: SPCFLAG_STOP never got reset, and DSKLEN() + would set SPCFLAG_DISK even if DMA was being turned off. + Made slow memory a run-time option. + Defer interrupts by one CPU instruction to give programs a chance to + read INTREQR ("Seeing is Believing" and "Substance" demos) + Added ScrollLock hack for X, too. +960113 SVGAlib version compiles again. Fixed SVGAlib mouse bug. + Fixed SHM bug: Maximum scanline is 313, not 312. + Sometimes, disk.cc missed a side change and would read the wrong data. + Fixed. Apparently, this was the worst compatibility problem. + Implemented trace mode. +960112 Changed layout of class amigamemory a little so that gcc can generate + better addressing modes. + Finally wrote functions in gencpu to generate MOVEMs. +960109 Integrated Ed Hanway's patches for better X support and run-time + configuration of some options. + Got rid of the direct VGA memory access. (Need to do this differently). + Changed the method of drawing lines: custom.cc now tells the graphics + code the line number and whether it needs to be doubleed before drawing + it. + Added Andre Beck's MIT-SHM patch. + Remove warnings for newcpu.cc. +960108 Fixed exceptions in op_illg(): Need to decrement PC. +960107 Added an "uae.device" resident module at 0xF00000. This emulates a hard + disk (fixed size 8MB for now). +960106 Moved some common code from pfield_doline() and pfield_doline_slow() to + a separate function. This fixes a potential HAM bug (two static vars + for the same value). + Sound support for Linux. Works only with graphics off and the CPU + slowed down. + Better SVGAlib keyboard support. +960105 Added AvailMem(), AllocMem(), AllocAbs() and FreeMem() dummies. + The Hardwired demo times the multiplication instructions and prints + "This demo don't like Axel" if they are too fast. Apparently, Axel has + a 68040. Added a WANT_SLOW_MULTIPLY option to config.h. + Fixed the fast blitter emulation (seems to work now). +960104 Fixed all the ChangeLog entries from 95 that said 96 (oops??!) + pfield_may_need_update() should check whether bitplane DMA is on. + Added ersatz.cc and ersatz.h. The purpose of these files is to + implement one or two Kickstart functions that are commonly called from + bootblocks. This should help support some games and demos that only use + the Kickstart as an initial track loader. So far, it's only good enough + for one program. +951223 More intelligent event handling in the CPU emulator. Slightly faster. +951222 Optimize CPU emulation by inlining cctrue(). Also, the real PC no + longer needs to be incremented each instruction. The real PC value + now has to be fetched by m68k_getpc(). + Added direct screen access for SVGAlib, but it didn't help much. I'll + probably remove it again. + The gencpu executable is 2M smaller if it allocates memory + dynamically. +951216 custom_bput() enhanced a little. Now remembers the value that was + written in the other half of the register. + Apparently, the USEx bits of BLTCON0 are ignored in line draw mode. + (Silents-Demo) + +951212 Release 0.3 +951212 Included Alessandro's battclock patch. + Fixed mouse autocalibration for wrong-aspect screens. +951210 Joystick support for Linux. + Better color matching for 256 color modes. + Rewrote most of the memory management in plain C, mainly to avoid the + various template bugs in some compilers, but also because gcc can't + handle the regparm attribute for virtual functions yet. +951209 Added Alessandro's patches for automatic mouse calibration. + Tried to optimize the blitter loop a bit. Doesn't work. +951205 Added Hannu's patches for diskfile write support. +951201 More portability fixes, especially for weird compilers that workstation + vendors ship. +951125 More keys for X, some keyboard support for SVGAlib (slightly + dangerous); beginnings of US keyboard support. +951124 256 color mode support for SVGAlib. FAST! +951123 Tiny tweak to central loops in playfield code results in much better + assembly. Apparently, GCC does not feel too good about optimizing + reference variables. +951113 Bug fix in the events code (nextevent must not be changed while events + are being processed). +951112 The playfield can now be drawn with the right aspect (i.e., every line + twice). Slower, but looks nicer and supports interlaced mode + (flickerfree!). The first 29 lines (blanking interval) are omitted + now to fit everything in 800x600. + Oops, disk drive identification did not work. Fixed, all four drives + appear now. + Oops, CIA_reset() was there all the time but never got called. + Optimized the planar->chunky conversion in pfield_doline() a little. + This really is time critical. +951111 If colors change on a line, we might still be able to use the full + line update, if the change occurred outside the DIW. Have to be a + little careful, though. + Playfield code now uses real pointers again, but makes sure it can + read enough bytes to complete the current line without segfaulting. + Oops, my "better estimate" (see below) was a mistake. Restored the + original 4 hw cycles per instruction relation. This slows down the + emulator while booting (more screen refreshs), but speeds up many + demos that otherwise spend most of their time waiting for a specific + raster position. + Playfield modulos must be added immediately when DDF stops. (WOC demo) + Portability fixes in disk.cc (null pointers). + Implemented average frame rate calculation ('c' in the debugger). + Debugger fixes. + Sprite fixes (height was wrong, wrong priorities in fast update) + Added an AutoConfig expansion RAM device. The OS seems to recognize + it, but breaks sometime later (seems to be the same bug that kills + the emulator when there's RAM at 0xC00000). + SVGAlib now has mouse support, too. + HAM mode implemented. +951110 Implemented fast complete line playfield update. Switches back if + necessary. Fixed attached sprites bug. + Copper wait no longer slows down the CPU emulation. (there were + lots of new copper bugs because of this, but I hope I fixed all + of them). + Changed cia?t? from UWORD to ULONG, since there were overflows in + the assertion (because of 65535+1 == 0). +951108 The DIVS remainder could have the wrong sign. + New HAVE_BROKEN_SOFTWARE define in config.h that makes the emulator + mask out the high byte of all addresses. + Wrote genblitter.cc and replaced the awful code in blitter_blit() + and blitter_line() with calls to the generated function. +951107 Implemented ?BCD. These don't really work yet. + +951106 Release 0.2 +951105 Fixed a bug in the new CIA timer code. + Fixed flag settings for some cases of ADDX/SUBX +951104 Changed the main loop a bit - call all the *cycle() functions only if + it is really necessary. I hope everything still works - at least it is + twice as fast now :-D + Improved mouse emulation - avoid overflows, permit "wraparound". + Added debugger 'g' command. + Removed some useless casts from the CPU emulator. + Added a configuration option to prevent checks for odd addresses. Only + very bad programs need this check. +951103 The sprite emulation sometimes did not work too well, especially with + dual playfield mode. Hopefully fixed. +951102 The 10 cycle counter is more like a 5 cycle counter in this + implementation. (Fine, that makes floppy loading even faster :-) + Implemented mouse movement. Totally out of sync with the X pointer, + but at least something. + Found out about the XAutoRepeatOff() function. Real useful. + DualCPU mode works again. + Corrected flag settings for CMPA.W. + Fixed DIV instructions: Don't change dest in case of overflow. +951031 The PC is now converted to a real pointer. This is safe (much safer + than converting bitplane pointers, since the PC always has to be valid) + and should speed things up a little. +951029 Some primitive event handling: 2 mouse buttons and 1 joystick button + are emulated, as well as parts of the keyboard (only german mapping). + Fixes: Delay values and sprite widths are always LoRes. Playfield 2 + uses colors 9..15. + Implemented a frame rate configuration option that can speed up the + emulation quite a bit. +951028 A-ha. The 68000 has one strange feature after all. MOVEM.W to Dn sign + extends the value to a longword. + Katakis expects that accessing odd addresses causes exception 3, so + we have to emulate this. *Sigh* + Do at least something with the index pulse bit. It's more or less a + toggle now. + Implemented sprites & dual playfields, both with small glitches. +951027 When LOF is set, the frame is one line longer. +951026 Implemented a preliminary diskfile type for special formats. Turrican + boots up correctly (crashes if I want to play a game, though). + Implemented EHB and added a few missing masking operations in the color + handling. + Fixed the absw addressing mode - need to sign extend here as well. +951025 Fixed another extremely stupid bug, this time in the playfield code. + Each pixel was calculated four times... + Increased the size of the apixels array - this was being overrun. +951024 Fixed an extremely stupid bug in flag settings for byte and word + operations. + The "sectors until gap" field must be in the range 1..11 instead of + 0..10, or very bad things will happen if it is used to calculate a + blit size. +951021 Don't use real pointers to fetch bitplane data - too many segfaults. + Delay the copper after executing an instruction, or wait sequences like + FFDF FFFE 0200 FFFE won't work. + Some programs expect that the CPU is completely turned off if the + blitter nasty bit is set. So be it. + The RSI Megademo chokes when disk DMA fetches two syncs. Leave one out. + The LOF bit wasn't set correctly. +951020 Blitter fixes: Load fill carry from FCI each line; keep the masked + value of bltadat in bltolda + Give the CPU twice as many "cycles" - this still is not even remotely + correct, but a better estimate. +951017 Added SVGAlib support. Unfortunately, my graphics card isn't fully + supported by the current SVGAlib version. +951015 More small optimizations to memory.h and custom.cc. + Added code for 256 color screens. The type of screen has to be + selected at compile time. +951014 Modified the memory management to be (hopefully) a little more + efficient. + Changed gencpu.cc to generate functions and a big function pointer + array instead of the old case labels. The generated C++ files now + compile a lot faster, and the code should be better as well. +951013 Implemented pseudo POTGOR to keep the RMB from being detected as + pressed all the time. + GenerateDecTab() generated TRAP incorrectly. + Made some more instructions (MOVE.B A0,D0 etc) illegal in gencpu.cc. + Fixed X colors. Fixed data fetching for HiRes screens. +951011 EXT.WL instructions set the flags. + Implemented second CPU emulator, plus "DualCPU" option. The new CPU + emulator is generated automatically from a file called table68k by + a program called gencpu. +951002 Removed version information from the file headers. + Removed some sillinesses in custom.cc. + DSKLEN bug fixed (mask out 0xC000). + Playfield code rewritten. Now supports horizontal scrolling. Implemented + some primitive color support. +950927 Fixed predecrement/postincrement addressing with byte size for the + stack pointer. +950926 Fixes to the disk code: Terminate disk DMA, flip disk side, read more + than just two sectors during disk DMA, fix checksum calculation. + Fixed copper comparison bugs. + +950901 Release 0.1 950826 bugfix in GenerateDecTab(): LEA.W instructions were generated. 950312 New file disk.cc, for (guess what) disk support. Doesn't work yet. 950311 Multiplication instructions were generating 16 bit results.