======================================================================== v0.2 ------------------------------------------------------------------------ Changed zone management code to allocate between 2Mb and 6Mb instead of always 6Mb. ADoom should now work on Amigas with less memory. Check result of allocation. Previous version crashed if 6Mb malloc failed. ------------------------------------------------------------------------ Changed handling of HOME environment variable in d_main.c ------------------------------------------------------------------------ The Amiga doesn't have F11 and F12 keys. Changed amiga_video.c to map the '[' and ']' keys to F11 and F12. Now gamma correction works. Also fixed keypad '+'. ------------------------------------------------------------------------ Added joystick code using gameport device in amiga_video.c. Changed m_misc.c to enable usejoystick. ------------------------------------------------------------------------ Added AmiTCP networking support by writing a new version of amiga_net.c based on i_net.c for Linux. Successfully worked to a PC running Linux with DOOM compiled from the released DOOM sources. Performance was really bad, with lots of jerking, even on ethernet. Tried improving performance by making sends non-blocking as well as recvs. AmiTCP 4.3 appears to return errno==EINVAL instead of errno=EWOULDBLOCK for non-blocking recvfrom() and non-blocking sendto() --- seems pretty weird to me, or have I done something wrong? ======================================================================== v0.1 30 Dec 97 ------------------------------------------------------------------------ Open audio.device on 4 channels and play sound effects in amiga_sound.c. Cache up to 12 sound effects in chipmem at a time. All other sound effects are cached in fastmem. Audio period is still not calculated correctly from pitch. Separation (balance) is ignored, so 3D sound effects are not right. Changed s_sound.c to pass channel number (cnum) to I_PlaySound(). Changed m_misc.c to set 4 channels instead of 3. ------------------------------------------------------------------------ Deleted calls to I_UpdateSound() and I_SubmitSound() in d_main.c ------------------------------------------------------------------------ Stripped 68040-optimised AGA and ECS(EHB) C2P routines out of Flick v1.5 and linked them into amiga_video.c. Changed "dirty_list" mechanism to a comparison buffer instead. Added amiga_median.c for calculating best EHB palette and 8-bit -> 6-bit colour xlate table. Changed EHB C2P routine to handle colour translate table (probably not entirely efficiently). These routines are not quite state-of-the-art (e.g, old merge macro) but they are not bad either. Linked in 68020- and Akiko-optimised routines too, but they are not called yet. ------------------------------------------------------------------------ Made a minor optimisation speedup to R_DrawColumn(). ======================================================================== v0.0 28 Dec 97 ------------------------------------------------------------------------ Wrote amiga_main.c, amiga_system, amiga_sound.c, amiga_video.c, amiga_net.c and smakefile to replace i_main.c, i_system, i_sound.c, i_video.c, i_net.c and Makefile respectively. The amiga_sound and amiga_net routines are dummies. ------------------------------------------------------------------------ Amiga is big-endian. Compiled with DEFINE=__BIG_ENDIAN__. It looks like the code hasn't been tested with __BIG_ENDIAN__ for a while. The test in m_swap.c for whether swap routines should be included was around the wrong way. SwapSHORT() returned an int instead of an unsigned short. ------------------------------------------------------------------------ Fixed point arithmetic routines in m_fixed.c used (long long) 64-bit datatype not available in SAS/C. Replaced with assembly routines in amiga_fixed.s. Added check for divide by 0 in FixedDiv() because Amiga crashes on divide by 0. ------------------------------------------------------------------------ The Unix function alloca() was called from r_data.c, w_wad.c and some other files. I replaced with calls to malloc() and added calls to free() where each routine returns. ------------------------------------------------------------------------ Changed the cache routines in w_wad.c to use the more efficient fopen(), fread(), fseek(), fclose() instead of open(), read(), lseek(), close(). Changed handles from (int) to (FILE *) everywhere including lumpinfo_t structure in w_wad.h. Fixed the filelength() function to align stat structure on 4-byte boundary. Used SAS/C fileno() function to get file number from (FILE *). ------------------------------------------------------------------------ In d_main.c, changed the handling of slashes and double-dots in filenames to Amiga conventions. ------------------------------------------------------------------------ Moved definition of RANGECHECK from doomdef.h to smakefile. Disabled SNDSERV and SNDINTR in doomdef.h. ------------------------------------------------------------------------ SAS/C 6.58 appeared to generate bad code for the line: offsetangle = abs(rw_normalangle-rw_angle1); in r_segs.c, resulting in corrupted graphics. This took me hours to track down. Putting printf() instructions before and after, the code calulated abs(1073741824-1927746431)=1073741824 instead of the correct answer of 854004607. As far as I could see, it was using the stdlib.h definition of abs(), which looks fine. As a workaround, I changed abs() to iabs() (SAS/C function) throughout in all sources. ------------------------------------------------------------------------ Got READ enforcer hits in p_enemy.c at the line: ld = spechit[numspechit]; Crashed badly shortly afterwards if Enforcer was not running. As far as I can tell, the variable numspechit should be in the range 0..7. Somehow numspechit gets the value 149551680 (0x8e9fa40). Without really knowing what I was doing, I attempted to fix the problem by changing the line: if (ld->special) in p_map.c to: if (ld->special && numspechit < MAXSPECIALCROSS) So far it seems to work. ------------------------------------------------------------------------ Disassembled R_DrawColumn() and R_DrawSpan() with OMD, created amiga_draw.s and hand-optimised a bit. ------------------------------------------------------------------------ Program still often crashes on exit :( ------------------------------------------------------------------------