Tue Jun 29 20:22:39 CEST 1999
   o Implemented the files from AmiDog (-> AMIGA port!).
     He has:
        + implemented new joystick support
        + rewritten the keyboard stuff
        + implemented audio stuff - seems write the audio data to a file
        + updated display stuff (now with OpenGL!)
        + implemented fps counter for AMIGA OpenGL
     AmiDog: I could not figure out what you have changed in N64/rdp.c
     and display/output/gl_renderer.h.
     I have changed too much! Please try to get it work again!
     The strcture is much cleaner now.
   o Fixed big endian warning in N64/rsp.c - thanks AmiDog!
   o Implemented a hack in N64/rdp.c to run lcars.bin.



Mon Jun 28 13:12:18 CEST 1999
   o Fixed bugs in N64/cpu.c:
     DSLLV, DSRLV, DSRAV
     The shift bits were anded with 0x1f instead of 0x3f.
     Thanks Gil!



Mon Jun 28 03:37:29 CEST 1999
   Too late again!

   o Implenented new texture caching from FiRES.
   o Created new files:
     N64/hle_uc.h
     N64/hle_uc00.h
     N64/hle_uc01.h
     N64/hle_uc02.h
     to make N64/rdp.c nicer.
     Currently the ucode is hardwired to a define in N64/rdp.c.
     A ucode detection routine will come!
   o Implemented SETCOMBINE...
     ... there is still a lot of work to do with this!
   o Changed the texturing detection stuff.
     Now it depends on SETCOMBINE.
     Currently it is a hack and just modulate textures are implemented.
     This will change soon!



Thu Jun 24 03:04:34 CEST 1999
   Too late!

   o Implemented lightning stuff (does not work properly).
   o Moved display/sw_renderer.[ch] -> display/warp_resolution_and_depth.[ch].
   o Moved all OpenGL dependend stuff from N64/rdp.c to output/display/gl_renderer.h.
   o Most 3D sw rendering stuff is now in display/sw_renderer.h.
   o Removed some obsolete directories from output/display/ like:
     mesa, opengl, glide.
   o Have written: Documentation/README-TLB

   Now TR is really ready for an DirectX implementation.
   Maybe few minor things have to be changed.
   Create a file called display/dx_renderer.h and start!



Sun Jun 20 12:46:54 CEST 1999
   This is TrueReality version 0.1.3 (= developer version 1999062000).
   The memory system seems to work stable and fast now.
   OpenGL works great (the only platform independent way!).
   TrueReality is open to implement other 3d gfx stuff like DirectX.

   o Removed the old memory access routines
        static char *phys_read_addr(uWORD virtualaddr)
        static char *phys_write_addr(uWORD virtualaddr)
     from N64/memory.c and the makefile option FAST_MEMORY.
     The 16kb function pointers
        phys_read_fast
        phys_write_fast
     now do that job.
     I think that the additional 32kb ram are really useful because i
     see no faster way to do the mem access.
   o Moved all stuff from N64/memory_fast.h into N64/memory.h
     and removed N64/memory_fast.h compleately.
   o Changed the size of rd_reg from 1MB to 0x28 (40) bytes.
     I had implmented 1MB previously because there is access to
        0xa3f04004, 0xa3f80004, 0xa3f80008,
        0xa3f8000c, 0xa3f80014
     in all demos i can remember.
     If we return just zeros it seems to work too.
   o Updated Documentation/DeveloperTeam.
   o Implemented FPS counter for Linux in OpenGL mode.
     It could possibly be that that work on other machines - please tell me.

   Version 0.1.4 should contain the Amiga, Windows and Mac port.
   Maybe a dynamic compiler will be implemented then.



Fri Jun 18 21:01:47 CEST 1999
   o Fixed the TLB error.
     It was a stupid bit problem in the new TLB stuff of cpu.c.



Fri Jun 18 13:46:09 CEST 1999
   o Okay - TLB is implemented.
     But there must be an error somewhere.



Wed Jun 16 02:47:35 CEST 1999
   o Implemented new clean fast memory routines.
     Every memory access is now handled by a function pointer.
     So the memory routines are ready for TLB.

   I am not ready for TLB right now because it is too late
   - hmmm, well - to early!



Tue Jun 15 18:26:46 CEST 1999
   o Modified CopyTextureIxx() routines in gl_renderer.c.
     Now FOGWORLD works near perfect (still no fog).
   o Implemented clean TLB exceptions!



Mon Jun 14 19:08:55 CEST 1999
   o Changed all WORD -> uWORD, HWORD -> uHWORD, etc.
   o Implemented texture stuff from Gil.

   TLB will come soon!



Wed Jun  9 03:03:38 CEST 1999
   o Implemented texture stuff.
   o Implemented texture caching.

   Fuck - it got too late/early.
   I am not able to write more ...



Thu Jun  3 19:45:06 CEST 1999
   I'd like to welcome Icepir8 to the TR developer team.
   He wants to implement glide and (windows) joystick stuff.

   At this point i want to say a big
      T H A N K   Y O U
   to all who helped me with TrueReality.
   Look into the files
      Documentation/DeveloperTeam
   and
      Documentation/GREETINGS
   for all the guys who helped me.

   This state of TrueReality is just possible because of your
   great help! Thanks a lot - Niki.



Tue Jun  1 23:22:34 CEST 1999
   o Added speedup stuff from Explorer.
     Changed many '+' into '|'.



Tue May 25 20:21:48 CEST 1999
   o Changed the defines in include/type_sizes.h to typedefs.
   o Implemented uXXXX in include/type_sizes.h.
     So you can say
     WORD i; /* or */ uWORD j;
   o Removed unused DOUBLEWORD/HALFWORD in include/type_sizes.h.



Tue May 18 22:21:56 CEST 1999
   o The cpu stuff i fixed before was wrong!!!
     Gil - this is the reason why BIKE98_2 is not running.
     The MULT/U instructions are pretty tricky.
     See the VR4300 manual for details.
   o Improved/Fixed x11 keyboard.
   o Started implementing OpenGL texturing.
     Major thanx: FiRES
   o Removed obsolete routines in x11.c.



Tue May 18 13:34:16 CEST 1999
   o Fixed endian stuff in rsp.c.
   o Fixed stuff in cpu.c.
   o Have begun to implement OPENGL && !JUST3D: OPENGL display with 2D stuff.
     This does not work correct for now (currently it seg faults) so don't use
     it.
   
   The major thanx go to Gil Pedersen for all of the 3 above topics.



Mon May 17 23:30:54 CEST 1999
   BIKE98_2 seems to work - look at the shots!

   o Fixed some stuff in controller.c.
     Now the default is not to have an EEPROM in the ROM.
     For older comm roms you might have to use this.
     It is your part to test this!
   o Implemented some hacks in rdp.c which can be compiled in or not.
   o Fixed some stuff in display/x11/x11.c.

   Ready to start with textures!

   I still want to improve the RSP stuff.
   But unfortunately i don't know much more about the vector instructions.
   I want to implement the fixed point maths as real fixed point math.
   This is much faster then converting all the values to float and then
   doing floating point maths.
   Unfort i do not know how to multiply and divide s15.16 fixed point numbers
   in c.
   ... maybe someone can help me with this.



Mon May 17 12:49:13 CEST 1999
   Because the feedback i get is always fantastic i release this version.
   I wanted to wait til tomorrow ... but ...
   o Updated Documentation/README.os2.
     Now TrueReality can be used with MESA3.0 (OpenGL) on the OS2/X11 port.
     Great work explorer!
   o Worked on RSP (not HLE-RSP!) again.
     I reworked VRSPL/H with the help from an anonymous person.
     ... it seems not to work correct.



Fri May 14 21:14:38 CEST 1999
   o Improved x11 keyboard stuff.
     Now you can use [nm,.] and [yuio] to simulate the joystick too.
     [nm,.] ... 25% joy move
     [yuio] ... 75% joy move
     ... the keys work like [hjkl] in vi style (of course ;-).
     Now it makes much fun to play PONG without joystick!
   o Fixed x11 display.
     Compiles without HLE, OPENGL and JUST3D now.



Tue May 11 12:54:00 CEST 1999
   o Dominique Bongard has started porting to Solaris.
     Have done some changes reported by him.
     There are still some problems:
      - Shared memory
      - Endian stuff (sparc cpus are big endians!)
   o Fixed stupid copy/paste big endian bug (thanx Dominique!).
   o TR now runs in OS2 with OpenGL too.
     Still few compile troubles.
     Do not use ASM display routines yet!
   o Added initialisation of OpenGL.
   o Added OpenGL - alpha on/off stuff via F5/F6 keys.
     Turn it off for better speed if sw rendering is used.
   o MSDOS updates - sorry - this took very long.
     I forgot the file on a floppy disk :(.
   o Huge MACOS updates from Gil.
     Now TR should compile clean on a mac too.
   o Improved OpenGL.



Sun May  9 13:00:26 CEST 1999
   Huh ... much has happened!
   o Cleaned controller stuff (X11 dependend).
   o Implemented OpenGL!!!!
     Just few VERY BASIC stuff ... but ...
     it works great! Look at the screenshots!
     I use Mesa-3.0. I have just ported some stuff i got from FiRES.
     (I have to admit that i know compleatly nothing about OpenGL).
     I've done very less - but the demos look much better!!!
     FiRES, GREAT WORK!
     This is slow (all is done by software) but it looks very nice.
   o Fixed audio HLE (interrupt stuff).
   o Fixed READ_CPU_INSTRUCTION.
     Now some comm games should show more. Go for testing!

   Currently no textures are used.
   I have to implement TEXRECT for OpenGL.

   I think that i should work on the OpenGL stuff.
   This is the only portable way in 3D.

   ... somehow we have to get the 2D stuff into the OpenGL.
   I dont know how yet. If someone out there has an idea so
   let me know! (i want to play PONG!)

   Use: HLE, JUST3D and OPENGL for now.



Tue May  4 22:15:20 CEST 1999
   o Fixed controller (cleaned debugging stuff)



Tue May  4 02:35:38 CEST 1999
   o Fixed controller stuff (thanx LaC).
   o Implemented EEPROM stuff (thanx LaC).



Sun May  2 23:00:02 CEST 1999
   o Implemented RDP audio table and empty audio routines in rdp.c.
   o Implemented correct big endian stuff in cpu.c (FPU).
     Again: Thanks Gil!
   o Implemented LOOKATX, LOOKATY (currently not used).
   o Improved keyboard.
     Now keyboard system keys are ckecked in each VI interrupt (not
     just if the controller is read - which it was before).
     So you can press ...
      + ESC: exit
      + F8:  display refresh (we don't need this anymore)
      + F2:  set window size to 320x240
      + F3:  set window size to 640x480
      + F4:  stop execution (halt the cpu and go into debug mode)
     ... all the time (every VI interrupt (625000 instructions)).
     Nice - isn't it?
   o Fixed width/height bug in various routines (i don't know if
     everything is correct!).
   o Fixed keyboard bug: R & L buttons were swapped (for a long time ;-).

   This version works better in JUST3D mode then the last. Now you can play
   DEMOT in that mode too :-).
   In the other mode (2d AND 3d) i have removed some things currently.
   So please don't complain about that. I have to implement it more proper
   then it was before.



Fri Apr 30 19:24:52 CEST 1999
   o Fixed vertices bug.
     Huh! Thanx to Gil. He found the bug. I had swapped the matrices.
     This is another example why open source is great.
     Such fast/nice things are not possible with closed source projects!

   Gil has written some additional routines.
   I will implement them tomorrow.
   Now i've to go to the karate training...

   Hey! ULTRA1, PIPPONG, CONGRATS, etc look great now.



Fri Apr 30 01:53:54 CEST 1999
   I have tested Nemu a bit.
   ! ! !   G R E A T   W O R K   ! ! !
   C O N G R A T S
   I am really impressed of it (mainly the speed).
   Unfortunately there is no source code ... so it is impossible to work together :(
   There are some demos which work/do more on Nemu but not on TR ...

   TR and Nemu work better then PUR04-1 in some cases.
   It would be great to combine our knowledge to beam our emus to the stage of
   UltraHLE.
   I know that TR is more compatible then UltraHLE and i think so about Nemu!

   o Added FPS counter for JUST3D.
     -> ULTRA1: 20 - 28 fps
     -> TRON:   60 - 10 fps (it becomes slower if you change the direction often)
     -> FISH:    1 - 1.5 fps
   o Made CPU speedup choosable (Makefile.tmpl: SPEED_HACK)
   o Fixed a bug that caused FISH to stop after 1 frame and TRON to stop after 20
     direction changes.
     That happened because SPEED_HACK has to be disabled if RSP (or HLE) is running.
     The main thanx go to FiRES. He was not compleatly correct but
     without his ideas i would have worked on that much more longer.
     Such nice things can happen if you release the source code.
     If not ... you ALWAYS have to work on your own :-(

   The vertices calculation is still a problem. I hope that i can fix that soon.
   
   I will not release a new version until everything works as in version 0.1.2.
   Currently just JUST3D mode works correct (better then in 0.1.2: you can resize
   the window).
   I have to do much additional stuff in the display code.
   A lot of things from rdp.c have to be moved to the display driver itself.
   That is the only way to stay portable and to implement hardware acceleration
   later.



Wed Apr 28 00:25:54 CEST 1999
   o Implemented variable window width/height in JUST3D mode of the X11 display.
     It is fun to play TRON on a 1280x1024 sceen!

   I searched hard for the offset bug of the vertices.
   It has sthg to do with the calculation of the projection or modelview matrices
   in the CPU.
   There must be a error in the FPU emulation!
   I've seen that double and single precision of the FPU are mixed when calculating
   the matrices. So it could have sthg to do with endian stuff.

   Such stupid bugs really make developing slow... :-(



Mon Apr 26 21:51:37 CEST 1999
   o Improved FAST_MEMORY code.
     The function table is now allocated dynamically.
     This make the TrueReality binary much smaller!
   o Fixed seg fault problem in FISH and TEXLIGHT.
     Unfortunately they do not work correct.
     HLE stops correct but then 
     the CPU loops forever.



Thu Apr 22 00:48:18 CEST 1999
   o Implemented FAST_MEMORY (uses funktion pointer instead of switch/case).
     FIREDEMO: 1.50fps -> 1.92fps
     Nice speedup - isn't it?
     Well - I've just implemented it for RDMEM access.
     All other memory access uses the old method.
     It would be no problem to implement the other parts of the memory.
     But - as you know - I've no time!



Mon Apr 12 02:41:20 CEST 1999
   Some RDP things have to be changed!
   Prev we did not load tiles/blocks into the 4k tmem RDP buffer.
   I think that for compatibitily we have to do this.
   Later (if this works in al cases) we can add a faster way (like
   it was before.
   o Removed 4k tmem buffer from rdp.c.
   o Added 4k tmem buffer in memory.c (this is much nicer!).
   o Figured out / implemented LOADBLOCK compleatly (hope that there
     are no bugs ;-).
   o Implemented cleaner (slower;( RDP drawing.
   I will get DEMOT run with the new RDP stuff.
   The textured recangles should be drawn with a native display command.
   Have to add standard textured rectangle and tile routines to the
   display core (i'll do it in X).



Tue Apr  6 20:24:12 CEST 1999
   o Implemented clean RDP (HLE) MOVEMEM VIEWPORT.
   o Speed up matrix multiplication and loading.



Mon Apr  5 18:51:39 CEST 1999
   I've improved so much! So i don't know where to start.

   o Official version: 0.1.2 (developer version #: 1999040500)
   o Minor bugfixes in cpu.c (instructions).
   o Changed:
        output/display/display.h
        output/display/x11/x11.c
     to make HLE with 3D sw rendering work.
     The new routine:
        DrawVisualTriangle()
     is neccessary.
     We need this is the DOS, AMIGA and MAC port too (-> TR v 0.1.3) !!!!!
   o Makefile.tmpl: HLE is the default for now.
     All cpu based demos will still run with it.
     It is more compatible then normal RCP code because lack of
     information (VMULF/Q VMUD? VMAD? VRCP/H/L VCH/L ... ??? !!!).
   o Updated Documentation/StatusROMS.
   o Updated Documentation/README-RSP with HLE info.
   o Improved interrupt stuff (should be faster now).
   o New draw2d_sw.[ch] in Source/N64.
     This is needed to speed 2D drawing for some RDP commands.
   o Much more HLE stuff:
      + You can do just 3D (like in UltraHLE) (very fast in X!) or
      + you can do 2D and 3D (which slows thing down in X)
        (this isn't possible in UltraHLE, is it? ;-)
      - Currently there is no 3D acceleration :-(
        Just wireframes are drawn (but you can play TRON!)
      - There must be sthg wrong with the projection stuff or with
        the calculation of the matrices or verices.
        Lockes demo (ULTRA1) works great is the text is not rotating.
        This could be a sign or precision problem.
        It looks as if there is an offset to the origin of the screen.
        Any ideas!? - Jeff?

   I also tried to downgrade to from 64bit to 32bit (for speed reasons).
   The suggestion came from Jeff: Just do 64bit operations when
   they are needed (dadd, dsub, etc).
   I started with that. But while I was implementing it i saw that
   much more instructions are using 64bit then I thought. For example
   all branch and jump instructions.
   That would make things more complicated/slower in 32bit then in 64bit
   if we want to stay compleatly compatible.
   It might be that most demos would run without 64bit... but in this
   stage of TR I will have an eye on compatibility!
   Everything I did is still in the source and you can activate it via
   ANSI_64 in Makefile.tmpl.
   ATTENSION: TR will not compile with that! Experiment with it if you want.

   Windows DirectX (6.0) Port from Jeff:
   :-) this might interest everyone who like UltraHLE :-)
   :-) this can interest everyone who likes developing emulators :-)
   ... so I think I have to say some words about it:
   Jeff (a great windows programmer) comes from the "old fashoned emu scene".
   He took TR and had success running it in windows.
   Jeff had to change/and add a lot of things (ie a windowed debugger).
   Jeff says that his stuff is still based on TR and so he want to call it a
   port (which is correct in my opinion).
   I want to remember all of you that TR is developed under the terms of the
   GNU GPL (GNU General Public License) which says (in few words):
   "You can copy, distribute or modify the source if you document your code
   and if you put your project under the terms of the GNU GPL too (this
   also means to publish the source code)"!!!
   So (to answer any open questions) - yes, the source will be available soon.
   Jeff just has to document and to change some things before.
   Please don't ask me or him when this will happen exacly.
   We don't know. We (me and him) are very busy at work (yeah, we are important
   persons ;-) !!!

   So - well - I think this is enough. Will try finding out why the hell this
   fuc**** offset occurs in 3D wireframe mode.

   Oh, happy easter!



Tue Mar 23 22:01:01 CET 1999
   o Implemented new MAC stuff from Eric.
      + Improved display (double pixel blitter, more speed)
      - Windowed mode is still not working yet.
      - FIREDEMO still crashes.
      + Various bugfixes.
      + Smaller MacTrueRealityProj.sit.hqx file.



Tue Mar 23 01:08:18 CET 1999
   I've began to implement High Level Emulation (HLE).
   HLE was first implemented by Epsilon and RealityMan - the authors of
   UltraHLE.
   HLE is off by default in TR. I've implemented it to figure out how the RSP
   works (mainly the missing vector instructions).
   You can switch it on in Makefile.tmpl.
   o Fixed the RDP instruction table (it was fucking wrong!).
   o Implemented HLE. Currently it stops the cpu compleatly but it works for
     testing.
     Oh, there are just few instructions implemented.
     You cannot play Mario64 (yet ;-).
   I hope that X will support 3D cards soon.
   Without standard routines it will be very difficult to implement the 3D
   stuff in X.



Sat Mar 20 12:49:58 CET 1999
   Unfortunately the SP_STATUS_SIGNAL2 bug i fixed yesterday did not clean
   the DEMOT bug.
   You can still play just up to the first three columns :-(
   o Fixed endian stuff in dma.c:
     There was a bug on little endians when dma transfer was not aligned to a
     4 byte boundary.
     With this the minor gfx error in DEMOT vanished.
   o Fixed DMEM/IMEM load and store in dma.c:
     The last byte was always missing.
   o Minor changes in rsp.c (JAL, JALR):
     The IMEM indicator bit is handled correct now.



Fri Mar 19 21:22:04 CET 1999
   o Fixed the last (i hope so) DEMOT bug.
     The RSP also sets bit 9 (SP_STATUS_SIGNAL2) when it reaches the BREAK
     instruction.
     Thanks a lot Jeff for sending the email (after you have gone to bed :-)
   o Fixed opcode debugging bug (SA was displayed as a register) in mnemonic.c
     and rsp_mnemonic.c.
   o Fixed SP_DMA bug in dma.c:
     There was one byte missing in each transfer.
   o Completed the display list pointer array.
     So we will be able to execute displaylists directly in future (like UltraHLE!).



Tue Mar 16 22:09:23 CET 1999
   DEMOT draws the correct playfield!!!
   Hey, this is the first running RDP demo in TR!!!
   Okay - it runs just until the first 3 tetris "cubes?" (fuck sometimes i
   hate english).
   Then the RSP is not started again.
   The CPU loops in the VI interrupt.

   o Fixed alpha bug in RDP (rgba: 'a' is now used!)
     This makes DEMOT drawing the playfield.
     A big thanks goes to that mac porters (gil, eric).
     The tip came from them.
   o New 'Status-1999031600'.
   o Updated 'README'.

   I'm not able to figure out new stuff (RSP VECTOR OPCODES)

      WITHOUT A BACKUP UNIT

   . So no new demos/games will run.
   There must be someone out there who can organize such a backup unit for me!



Tue Mar  9 23:15:39 CET 1999
   o I updated most files in the 'Documentation' directory.
   o New 'README.os2'.
   o New 'FAQ.roms'.
   o New 'GREETINGS'.
   o Developer -> DeveloperTeam

   There are no news about DEMOT.
   It shows the 3 text lines.
   I just have found out that it draws the playfield correct in the background.
   But it is hidden because of doublebuffering and before it swaps the screens
   the playfield is cleared - no idea why.

   I've decided to post this news more often.
   Sometimes if there are no improvements - without source.
   I'm thinking of including patch files then.
   But they might be a problem on non UNIX platforms.

   Mac porters: Start testing my implementation

   Hey! I've to mention that I love 'vi'.
   I've just implemented 'vim' in my office (where I work with WindowsNT) and
   it works great!!!
   Burn 'notepad.exe' - install 'vi'!!!!!!!!!!!!!!!!!



Sun Mar  7 15:22:49 CET 1999
   o Changed debugger command: 'R' -> 'Reset'.
     That was while debugging DEMOT i ofter pressed 'R' instead of 'r'.
   o Updated 'Documentation/debugger'.



Sat Mar  6 13:15:38 CET 1999
   o MacOS port is included!
     The files are not from Gil Pedersen nor from Richard Bannister.
     It does not seem that there is any RAVE support in the display stuff
     (i ment Gil has done the port using RAVE).
     I'm a bit confused...
     Is this another MacOS port?
     Anyway - it is included. Test it if you have a Mac.
   o I changed the VI interrupt stuff.
     The display is now refreshed every 0x98968 (625000) instructions
     (that value comes from PUR).
     This makes LINE.V64 work.
     The old method (refreshing display when VI regs are accessed) is
     still available via an compatibility option in Makefile.tmpl.
   o Corrected JAL and JALR in cpu.c.
     They've not done a sign extension.

   Is there any way to make the Mac .hqx files smaller or to leave them?

   Turning on optimizing and asm display and turning off debugging brings
   the following speed increases:
    PONG:     + 193% - about 21 fps on my iP133
    LINE:     +  64%
    FIREDEMO: +  72%
    FZOOM:    +  60% (while calcing/drawing the fractal)
   This is still slower then in PUR4.0A but it is pure C and not ASM as in pur.



Thu Mar  4 20:54:21 CET 1999
   o Minor output/display/msdos.c update.
     -> support for RDP in future.



Thu Mar  4 01:18:33 CET 1999
   o I removed the (old) "optimizing" bug.
     I added 2 defines in N64/cpu.c which handle the integer overflow
     exception now.
     It is save to use -O2 or -O3.
     In PONG it gave me a speed increase of 2 (-O3 in gcc 2.7.2.3)!!!
     That might be because there are many loops in PONG.
   Now I've to get some sleep!



Tue Mar  2 23:33:11 CET 1999
   First of all:
   I'M VERY SORRY THAT I CANNOT UPDATE MORE OFTEN!!!
   I've just started to work (it has nothing to do with emulation, N64,
   Nintendo or SGI) and currently I'm a bit stressed up.

   o The AMIGA port now supports sound and joystick (I'm waiting for the files).
   o AMIGA display updates.
   o I'm still unable to read the MAC files. Can anyone help me?
   o I've found the optimizing bug:
     If you've turned on optimizing (-Ox) then the emulation jumped to
     0x80000180 without any reason.
     ... So I've played a bit with gdb and ddd.
     Wow! ddd is a powerful tool!
     It took me just about 30 minutes to find the bug.
     For me it seems that there is a bug in the gcc optimizer.
     It appears in cpu.c: rs4300i_addi() (the if() is true for 0x1f3f).
     ... Currently there is no workaround except not optimizing the code.
     Sorry, but I'll have a closer look at it soon.

   I really hope that I've more time in the future to code.
   RDP is very interesting!

   There are still about 50% of the vector opcodes missing in the rsp!
   Has anyone out there found out how the multiplication instructions and
   how the flags work (anarko, zilmar) ???

   Here I've to add a statement about UltraHLE because I got lotsa emails
   asking me about it:
        UltraHLE is a great piece of emulation work/code!
         + fast (asm code)
         + dyn recompiler
         + sound
         + 3D gfx (do I have to buy a Voodoo card and throw away my Mystiqe?)
        There are some disadvantages in a emulation programmers point of
        view I want to mention here:
         + There is no documentation how it works exactly.
         + A lot of people will use it to play comm ROMs.
         + Not portable (asm code).
         + I'm not sure about this: It includes N64 lib functions.
           This might be a law problem in some countries.
         + Depends on the above: If ROM coders use other libs it is
           incompatible.
         + NO SOURCE CODE!!!
           That is because I come from the UNIX world and I really like to see
           how sthg is done.
         + No 2D stuff - no demo works (as far as I know).
         + No updates (as it looks like).
        But the coders said that UltraHLE will not play all ROM titles.
        The mentioned that it will run the best ones.
        Okay, they have reached their goal.

        So what about help the whole emulation comunity and show how it works?
        REMOVE ALL NINTENDO OR SGI RELATED STUFF AND OPEN THE SOURCE!!!
        (No matter if the code looks bad ;-)

        I hope that I will see what they have done one time.



Tue Feb 16 20:58:04 MET 1999
   o Corrected AMIGA stuff. Hope that it compiles clean now.

   Now news about rdp stuff.
   Things are too bad around UltraHLE.
   If there is a guy around who understands the laws - so please tell me what
   is legal and what is not!



Wed Feb  3 00:29:05 MET 1999
   o Includes tons of comments and stuff in 'rdp.c'.
     All of it is from "BWG".
     For now he wants to stay anonymous.
   o Added a commented define in 'rdp.c' to choose weather you want to use my
     version of getting RDP commands or BWG's.
   o Fixed bugs: RDP/NATIVE debugging msg.
   o Fixed missing routines in display ports.
     You have to implement them correct!

   We have to wait a bit for the MacOS port.
   BWG will continue working on RDP during that time.

   DEMOT seems to be the first game/demo (which uses RDP) which will run.



Tue Feb  2 00:03:08 MET 1999
   o Fixed native debugging messages.



Mon Feb  1 00:03:08 MET 1999
   o Changed RDP command execution because of request.
     But now it looks for me that was not correct.
   o Implemented (in table) the following 8 RDP commands:
      + TRIFILL
      + TRISHADE
      + TRITXTR
      + TRISHADETXTR
      + TRIFILLZ
      + TRISHADEZ
      + TRITXTRZ
      + TRISHADETXTRZ
              



Sun Jan 31 18:34:41 MET 1999
   o Fixed bugs in debugger related to the debugging messages.



Sat Jan 30 18:04:43 MET 1999
   o Included AmigaDOS port from Mathias Roslund ("AmiDog").
   Hey, you did a great job! Now you have to test.
   I'm waiting for the MAC port (I could not extract the files :( ).



Sat Jan 30 13:41:28 MET 1999
   o Implemented lots of RDP commands:
       SPNOOP :)
      + NOOP :)
      + TEXRECT
        draws a rect in primcolor - this is not correct but you see sthg.
      + LOADSYNC - ignored
      + PIPESYNC - ignored
      + FULLSYNC -> DP interrupt
      + SETSCISSOR - should work
      + SETOTHERMODE - ignored
      + SETTILESIZE - ignored
      + LOADBLOCK - ignored
      + SETTILE - ignored
      + FILLRECT - should work
      + SETFILLCOLOR - shold work
      + SETFOGCOLOR - should work 
      + SETBLENDCOLOR - should work
      + SETPRIMCOLOR - should work
      + SETENVCOLOR - should work
      + SETCOMBINE - ignored
      + SETTEXTUREIMAGE - ignored
      + SETDEPTHIMAGE - ignored
      + SETCOLORIMAGE - ignored



Wed Jan 27 13:15:08 MET 1999
   Huhh, that was a huge change again yesterday (today :).
   Now the code looks much nicer!
   o Implemented symbol table (file) support.
     Option: -sym file
      + load_n64_files() -> load_files()
      + romimage.[ch] -> file_loader.[ch]



Tue Jan 26 14:24:36 MET 1999
   o Started native code support.
     I begin with FIREDEMO.
     The first native routine will be set_sr() (set status register).
   I've to change cpu.c and cop*.c.
   There is too much unreadable stuff in these files.
   This are the changes:
    + rs4300i_Reset() -> cpu_reset()
    + rs4300i_doCode() -> cpu_step()
    + cop0.c, cop1.c, cop2.c -> cpu.c
    + added reserved instruction exception
    + cleaned invalid instruction handling (do nothing :-)
    + all instructions are static now
    + fixed 8 spaces style in code (i do not use tabs!)
    + fixed instruction printing
    + rs4300i_printCPUreg() -> cpu_print_gpr()
    + rs4300i_printCP0reg() -> cpu_print_cp0()
    + rs4300i_printCP1reg() -> cpu_print_cp1()
    + rs4300i_printCP2reg() -> cpu_print_cp2()
   Native code support seem to become difficult - self modifying code?


Mon Jan 25 19:37:06 MET 1999
   o Added MSDOS audio port.



Tue Jan 19 15:22:37 MET 1999
   o Fixed bugs in VEQ, VNE, VLT and VGE.
   o Updated RSP documentation.



Mon Jan 18 12:38:24 MET 1999
   o Implemented asm stuff from Guenther Sohler.
     CPU and MEMORY asm are in an alpha stage.
     DISPLAY asm stuff works correct for i386.
   o Cleaned interrupt stuff.
   o Added AI & DP interrupts. AI is currently not used.
   o Implemented VSUBC.



Sat Jan 16 12:52:58 MET 1999
   o I've began to implement the first RDP command (SetScissor).



Fri Jan 15 14:50:58 MET 1999
   o I removed the complicated DEBUG_XXX stuff in the makefiles and anywhere
     else.
     Now you just can choose to compile a version with debugger or without.
   o Figured out VMRG.
   o Implemented VMRG.
   o Could not find out what VCH, VCL and VCR do :(



Thu Jan 14 13:05:01 MET 1999
   o Cleaned audio stuff.
     Audio is now choosable via command line if compiled in.
     The quality (sample freq) and a downsample value cannot be chosen
     via command line right now.
     For all who have ported the audio stuff (Gil Pedersen?) please have a look
     and send me comments.
   o Fixed bug in LTV.
   o Figured out SRV, SPV, SUV, SHV, SFV, STV.
   o Implemented SRV, SPV, SUV, SHV, SFV, STV.
   o Figured out LWV, SWV.
   o Implemented LWV, SWV.



Wed Jan 13 12:44:50 MET 1999
   RSP:
   o Fixed MFC2 (sign problem).
   o Figured out how SBV, SSV, SLV, SDV, SQV work.
     Have implemented them.
   o Fixed/implemented clean LQV.
   o Implemented VSUB, VABS.
   o Figured out how LUV, LHV, LFV, LTV work.
     The first 3 always do a bit shift (>>1) in some way.
     Too complicated to explain here.
     LTV loads one element to 8? vectors.
   o Implemented LUV, LHV, LFV, LTV.
   o Implemented VMOV (it took me just 1 minute :-) ).
   LWT seems to be powerful and complicated (loads 16x16byte?).
   But maybe it is not stranger than LQV (as I thought yesterday).



Tue Jan 12 13:20:33 MET 1999
   o Fixed bug in the floating point registers (thanx to: Guenther Sohler!)
     (64/32 bit stuff)
   
   All of the following stuff is related to the RSP:
   o Added few RDP stuff (does not work yet).
   o Fixed bugs in LxV and SxV instructions.
      - I used wrong opocode field.
      - The offset is signed!
   o Figured out what various RSP flags mean (I'm not sure about everything).
   o Fixed element list.
   o Fixed VADD instruction.
   o Added some dependencies in Makefile.deps.
   o Figured out how VEQ, VNE, VGE, VLT work.
   o Fixed VEQ. The COMP FLAGS (bits 7-0 of flag[0]) were reversed!
   o Changed RSP general purpose registers from 64bit to 32bit.
     It seems that there are no instructions which use the 64bit registers.
     So I assume that the registers are 32bit wide.
   o Fixed VNE, VGE, VLT.
   o Removed all useless exception stuff from the RSP core.
   o Fixed ADD, ADDI, ADDUI, ADDU, SUB.
   o Fixed VAND, VNAND, VOR, VNOR, VXOR, VXNOR.
   o Figured out how LBV, LSV, LLV, LDV, LRV, LPV work.
     Have implemented them.
   I could not figure out LQV comleatly.
   There is sthg strange.



Tue Dec 29 18:17:46 MET 1998
   o I implemented READLINE/HISTORY support for Linux.
     I don't know if that works on other operating systems.
     You need 'ncurses' and 'readline'.



Mon Dec 28 22:00:38 MET 1998
   o Found bug in N64/memory.c:
     update_vi_reg() updated the mi memory instead of vi memory.
     Fixed!
   o New directory: sound_player
     This dir should include all external players for audio.
     Currently there is just linux.c.
     "make player" builds "play" in linux.
     "play" will be in the same directory as "TrueReality".
     On all other platforms a message is printed.



Sun Dec 27 19:03:14 MET 1998
   o I've modified the play prg.
     Now you can choose a downsample rate (0, 2, 4, 8, ...) in the source.
     The prg plays the file until it's end then it loops the last x sec.
     x can be specified in the source too.
     TODO: All the parameter should be given via command line!
   o I've figured out that the sound files are stereo.
     Implemented.



Thu Dec 24 21:10:48 MET 1998
   MERRY XMAS TO EVERYONE
   !!! Make peace not war !!!

   o I've fixed the RSP "break" instruction again.
     It did not stop the RSP before.
     Hope that "break" is clean now.



Wed Dec 23 02:13:05 MET 1998
   o Added primitive audio support for linux.
     Sounds as in PUR40A.
   o I've written a simple audio player.
     Now you can compile TR to write audio into a file.
     Look into the source (output/audio/linux.c).



Mon Dec 21 12:25:11 MET 1998
   I played the first level of TombRaiderIII (The Jungle).
   Wow, that was very difficult!
   I played about 2 hours and found just 2 secrets (of 6)!
   I need a new graphic card!

   o Fixed VRCPL opcode - it should work like in PUR.



Wed Dec 16 18:34:44 MET 1998
   o Implemented ANSI color support for color consoles.
   o Implemented VRCPL/VRCPH opcodes.



Wed Dec 16 03:37:47 MET 1998
   o Implemented the following RSP opcodes:
      - all R4000 related opcodes
      - MTC0 MFC0
      - MTC2 MFC2 CTC2 CFC2
      - LWC2 (LBV, LSV, LLV, LDV, LQV) SWC2 (SBV, SSV, SLV, SDV, SQV)
      - VADD VSUB ... do not clip to 0x8000/0x7fff
      - VLT VEQ VNEQ VGE
      - VAND VNAND VOR VNOR VXOR VNXOR
      - VNOOP :-)
      - VMADL VMADM VMADN VMADH
      - VMUDL VMUDM VMUDN VMUDH

   The demos are waiting for VRCPL/VRCPH.



Sun Dec 13 16:02:26 MET 1998
   o Implemented new version of MSDOS port from Diego Rozensztejn: Boca Juniors <boca_jrs@hotmail.com>
     The MSDOS display now supports the FPS counter.
     Great work Diego!!!

     Such things are just possible with FREE software!



Tue Dec  8 19:24:18 MET 1998
   o Corrected RSP load and store stuff.
     LW r1, 1(r0)
     should work now.
   o The
     LWC2      : r31, 2003(r00)
     problem is more difficult than I thought.
     LWC2 splits into 12 LxV (Load xxx Vector) opcodes.
   o Fixed the RSP break instruction.
   o Implemented all of the vector operations.
     That does not mean that I've coded all of them!
   o Implemented the vector registers and the accumulators.
   
   I'm working on the LxV instructions.
   Unfortunately I don't know the complete opcode encoding.
   What do the RS RD RT SA Func fields in LxV mean????



Mon Dec  7 02:45:54 MET 1998
   o I've implemented the RSP core.
     All instructions - except the vectorinstr. - are implemented.
   o COP1 of RSP is done.
   o I also have hacked out a RSP disasm which is in the 'N64/rcp' dir.
   o I've changed the debugging/mnemonic stuff in the rsp.
     That should be done in the cpu core too!
     All of that is based on suggestions of John Jannotti.
   o Guenther Sohler started Linux audio implementation.

   Currently all demos (which use the RSP) do
   "LWC2      : r31, 2003(r00)"
   once.
   Hex 2003 is out of dmem!!!???



Tue Dec  1 22:20:42 MET 1998
   o I've added joystick support for Linux-2.1.x kernels.
     I do not know if it works on Linux-2.0.x.



Tue Dec  1 01:15:28 MET 1998
   o The DIRECTORY STRUCTURE has CHANGED again.
     Huhhh, that was hard work.
   o I've implemented some I386 ASSEMPLER stuff from Guenther.
     It does display rendering in x11.
     It can also be used with svgalib and ncurses.
   o I've implemented SVGALIB support from Guenther. Not tested!
   o I've implemented NCURSES support from Guenther (it uses svga keyboard).
     Not tested!
   o I've just implemented the MSDOS PORT and played pong for a while (with a
     precompiled binary from Diego) in the DOS box of Win95. Unfurtunately I've
     no msdos compiler and so I could not test if my implementation compiles
     properly. If not, please email.



Tue Nov 24 21:17:13 MET 1998
   o Implemented most important SP registers in 'memory.c'.
   o Implemented better VI_CURRENT_REG.
     -> SP_CRAP shows the circle scroller.
     Wwwwwwoooowwwwww! That demo does not work in PUR04A but in TR!!!
   o I've gone through 'n64/memory.c' correcting some minor bugs.

   TrueReality is waiting for RSP/RDP stuff now.



Mon Nov 23 21:02:17 MET 1998
   o Fixed PI interrupt.
   o Fixed bug in the frame counter.
     It should work correct now.
   o I've implemented the last 8 CPU instructions.
     All instructions are implemented from now on!
     The "SYNC" and "CACHE" instructions are ignored.
     It seems that they are not important for emulation.
     Hope that everything works properly.
   o I've implemented the missing fpu instructions ("ABS.fmt", "SQRT.fmt", ...).
     Some of the "C.cond.fmt" instructions are still missing.
     The NaN (Not a Number) stuff seems difficult to implement.
   o TLB instructions of cop0 has been rewritten.
     It works in 32bit address mode from now on.
     Previously TLB was 64bit (which is incorrect!).



Sun Nov 22 03:07:12 MET 1998
   o Fixed bug in memory.c: SP_IBIST_REG



Sun Nov 15 20:02:12 MET 1998
   o Corrected "bc1xx" instructions (now FZOOM & PAUSE work correct)
   o Implemented full integer overflow exception
   o Implemented syscall exception
   o Implemented all trap instructions and trap exception

   -> Just 8 opcodes left in CPU core:
       - ldl, ldr
       - sdl, sdr
       - ll,  sc
       - lld, scd

   -> 15 fpu opcodes are missing



Sat Nov 14 04:31:57 MET 1998
   o I added a frame counter like in PUR.
     It displays the frames per second every second.
     If more than one frame is drawn per sec it calculates the average.
   o I started implementing
      - integer overflow exception
      - floating point exception
     I hope that the fractal of FZOOM will be displayed with that!
     It seems that RSP/RDP isn't used in the demos I have.



Thu Nov 12 02:05:12 MET 1998
   Huh, it was hard work to implement proper fpu regs.
   PAUSE displays sthg - not compleately correct, FZOOM still doesn't show the fractal.



Wed Nov 11 02:47:38 MET 1998
   I've hacked out why FZOOM does not display the fractal:
      I've had not implemented the FR bit (bit 26) in the STATUS reg.
      It indicates weather 16 fpu regs are used (0) or
      32 (1).
      16: Fpu regs are 32 bit wide. If they are accessed (only even numbers are
          allowed) then 2 regs are combined to one reg. So you still can use 64 bit
          operations.
      32: You can access the regs as expected. They are 64 bit wide.
      It will take a while to change all routines properly.
   
   I've removed a very old bug. After CPU reset I wrote 0x511 into
   fpu CONTROL/STATUS reg instead of fpu IMPLEMENTATION/REVISION reg.



Sun Nov  8 02:40:00 MET 1998
   YIPPIIIIIIIIIIEEEEEEEEEEEEEEEEEEEEEE!!!!!
   It's very late, but:
      I've found the FZOOM bug!!!!!!
   The START button did not work.
   It was a real stupid and VERY old bug. It was in TR since I included the 'nor' instruction.
   I did a
      result = !(x | y)
   instead of a correct
      result = ~(x | y)
   !!!!!
   The code that checks the button state uses that instruction.
   Time to sleep now /->



Tue Nov  3 22:12:41 MET 1998
   - I changed my stupid 2MB IDE HD.
     Now I use UW SCSI (8.5GB)! WOW! F@*?ing fast!!!
     I had some troubles (win95/nt on ide and unix on scsi) but no everything works great :-)
   - I'll go on searching the 'START button' bug (PONG works - FZOOM not).
     It would be nice if the authors of PONG and FZOOM could tell me the difference between their "START button check".



Mon Oct 26 15:08:44 MET 1998
   - FIREDEMO, PONG, ROTATE & SP_CRAP work as in PUR03A.
     Controller stuff is implemented (not compleatly - but it works in PONG (analog stick too!)).
     Strange that the START button ('q') work in PONG but not in FZOOM!?!? 
     Display stuff should show correct colors in 5/5/5/3 mode of the N64 on 8, 15, 16, 24 and 32 bit X displays.
     
     So I think it's the right time to call this version (TrueReality-1998102600) 0.1.1.
     
   - Aims for 0.1.2:
      o 8/8/8/8 N64 display mode. I NEED A DEMO!
      o More than 1 controller.
        Currently controller is just checked if the SI interrupt occurs.
        It should be possible to recognize button presses / analog moves everytime.
      o MacOS stuff has to be implemented.
      o RSP/RDP basics.



Thu Oct 22 19:35:11 MET DST 1998
   - Support for 15, 24 and 32 bit displays added.
     So displays of 8, 15, 16, 24 and 32 bit are supported in 5/5/5/3 ("16bit") mode of the N64.
     The 8/8/8/8 (32bit) mode stuff of the N64 will come when I find a demo to test it.
   - I've a idea how to correct the keyboard autorepeat stuff.



Wed Oct 21 23:02:10 MET DST 1998
   - I've fixed the color / display endianness problem for 8bit X displays.
     It works quite fine.
   - 8/8/8/8 mode from the n64 is not done because I've no demo to test it.
     Has someone information where the r/g/b info in the 32bit value is?
     What the hell do the other 8 bit mean?
     What does the 1 bit in 5/5/5/3 mode which is not r/g/b stand for? transparency?
     ???
     
   Can someone out there send me some info about the differences between
    o Truecolor
    o Pseudocolor
    o ???color
   displays?



Tue Oct 20 23:25:37 MET DST 1998
   - I've found the color problem. This will take me some time to fix.
     I've made a quick fix for truecolor 16bit X displays to shoot snaps.
   - I've implemented a copyright message which appears everytime when TR is executed.
   - The makefiles have come to a state in which porting should be easy.
     I've stolen some make ideas from:
      o the Linux kernel (linux-2.1.125) ... thanks, Linus Torvalds
      o the X Multi Emulation Super System (xmess-0.2b4.1) ... thanks, Hans de Goede
      o and various VERY helpful people who told me what/how to improve things ... THANK YOU!
   - I'm thinking of implementing the multithreading support.
   - Controller (keyboard) has still a "repeat" problem - currently I don't
     know how to solve it in a nice way.
   - I've made new screenshots. Look at it! (FZOOM has still a refresh problem -> press F8)
      


Mon Oct 19 22:05:38 MET DST 1998
   - Changed the names of some routines which conflicted with MacOS.
   - Still doing changes in the makefiles.
   - I've implemented analog stick emulation via keyboard (h, j, k, l):
     Now the paddle of PONG can be moved up AND!!! down >:->.
     Strange that that is not possible in PUR03 and PUR04-1.



Mon Oct 12 10:59:33 MET DST 1998
   My email addr changed ... look into sources!
   Gil Pedersen - a MacOS porter - told me that WAVERACE64 shows the starting N-logo in his MacOS port.
   Hope that the same happens in UNIX.
   Huge changes in the makefiles have been done again to make TR portable.
   KhTh compiled TR on OS2 using XFree86 ... look into Makefile.



Thu Sep 10 00:26:09 MET DST 1998
   I've included new X display stuff from Guenther Sohler.
   Now the shared memory seg fault is fixed!
   You can resize the display with or without shared mem to whatever size you like :)



Mon Sep  7 20:49:55 MET DST 1998
   Wow! I tried various demos. Many of them display something.
   Look at the screenshots!
   Yes, there is a color problem but it should not be major (maybe it has sthg to do with the endianness).
   I'll work on the controller stuff (it's bad implemented right now).
   BTW: I've forgotten to implement the PI stuff ;-). FIXED!!!
   I've improved the debugger (no history yet - if someone has experience in that stuff - mail!).



Sat Sep  5 19:50:18 MET DST 1998
   I've done a lot of huge changes.
      Directory structure
      Global vars
      Memory map
      ...


   
Sun Aug  2 00:56:52 MET DST 1998
   From now on TrueReality is being developed under the terms of the GNU General Public Licence.
   This is had to be done because GPL free software gives the highest learning effect while protecting the author against "bad guys".



Mon Jul 20 22:23:34 MET DST 1998
   I changed memory.c.
      SI regs are implemented now. 
      Real DMA transfers are not implemented (read of SI_STATUS_REG always returns zero). 
      If someone out there knows how to do that under UNIX ... please, let me know!
   


Sun Jul 19 11:08:37 MET DST 1998
   I added a new define: PUR03A_COMPATIBLE
      This was done because I've included more (mostly interrupt stuff) in TrueReality then pur03a is able to do.
      So it's easier to compare the results of the emulators.
   I removed bugs in the following instructions:
      mult
      multu
      div
      divu
      dmult
      dmultu
      divu
      ddivu
      dsrl
      dsrlv
      dsrl32
   I added the following instructions:
      ldc1
      ldc2
      swc1
      swc2
      sdc1
      sdc2
   TrueReality executes 0x165a91d (23,439,645) instructions of pong (they seem to be correct).
      After that a SI (serial interface) or PI (periphal interface) interrupt should occur.
      That's not implemented yet. Will come in next version!



Wed Jul 15 20:17:43 MET DST 1998
   - ROTATE works!!! Look at screenshot!
   - Changed ROM information output when TrueReality is started.
   Now: compression, country code, manufacturer id & rom name are printed correct.
   - Changed memory.c
   A correct read of the header is done now.
   Header & bootcode are writeprotected (hope that that is ok).
   - Changed display stuff from Guenther Sohler.
   UNIX - X display does "backing_store" now.
   A 'RefreshVisual()' is done at the end of 'OpenVisual()'. So information is printed in the window now.
   - Less display refreshes are done now.
   Display is just refreshed when VI_BASE_REG, VI_ORIGIN_REG or VI_WIDTH_REG are written AND (this is new) at least one register has changed.
   - Found 2 bugs (not fixed yet):
     o 'J' command of the debugger works correct once. Next 'J's (after CTRL+C) can be ok or not.
     o When using shared memory you must not resize the (Unix - X) window. It can cause a 'BadAccess' error.
   I'll try to fix that as soon as possible.

   

Tue Jul 14 23:17:32 MET DST 1998
   - Changed all 'make's in the Makefiles into $(MAKE).
   MAKE can be assigned in 'Makefile.tmpl'.
   Can anyone out there test if my Makefile is compatible to 'make' (I use 'gmake')?
   - I've done a rewrite of the exception/interrupt stuff.
   There was a bug when the exceptions occured after a brunch instruction (delay slot problem).



Mon Jul 13 02:14:40 MET DST 1998
   - Included UNIX - X display stuff from Guenther Sohler.
   If the window is resized then the graphic output is spawn.
   The depth of the window is checked automatically (no defines are needed).
   Currently 8 & 16 bit displays are supported.
   Others will come!



Mon Jul  6 00:48:31 MET DST 1998
   - Worked a bit on configuration/Makefile stuff.
   - Searched hard to find the bug why PONG is reading from 0x000000003c1a8000.
   Couldn't figure it out yet.
   - Found/changed 'big endian' bug.
   TrueReality always read 0x00000000 (sll r00, r00, 0) as instruction.
   Fixed now.


   
Sun Jun 28 21:54:27 MET DST 1998
   - Changed the configuration stuff compleatly.
     Now everything has to be configured in 'Makefile.tmpl'.
   - TrueReality supports ZLIB now.
     Compressed images (by gzip & pkzip) can be used like uncompressed images.
     Just activate support in 'Makefile.tmpl' :)
     


Sun Jun 28 16:11:16 MET DST 1998
   I've rewritten the interrupt system.
   Few changes were made in Unix X local display -> now the size of FIREDEMO is correct.
   More changes in the X display should be done, because display output is just done in 16bit truecolor. (You have to define DIRECTCOLOR in config.h - this enables 16bit mode)
   Added the following instructions (for sp_crap & pong):
      lwl  ... currently not tested
      lwr  ... currently not tested
      swl  ... currently not tested
      swr  ... currently not tested
      tlbp ... does nothing (currently)
      tlbr ... does nothing (currently)
   Changed/added some debugger functions -> TrueReality/Documentation/Debugger
   Changed/added a lot of '#define's to make porting easier -> send email for suggestions (if you are doing/will do a port).
   
   I'm sorry that I couldn't post this earlier. I was in hospital (there was no inet connection there ;) ) and I really felt not very well.
   But now everything in my body should work correct (I've to take some medicine the next weeks).



Mon Jun 22 05:06:21 MET DST 1998
   Yes, it's true. It is 5 o'clock in the morning!
   But that doesn't matter.

      ! ! !   F I R E D E M O   W O R K S    ! ! !

   It is not perfect working but that is a display problem.
   
   There are screenshuts included in the source.

   This is version 0.1.0 of TrueReality.

   Future plans:
      In version 0.1.1 it should be possible to run PONG and SP_CRAP.
      In version 0.2.0 all the controllers have to work.
      Version 0.3.0 or 0.4.0 should be able to do simple audio.

   
   
Mon Jun 22 03:18:20 MET DST 1998
   GREAT SPEED NEWS!!!
      I did some (a lot of!) changes in 'memory.c' & 'mnemonic.h'.
      The result: TrueReality is TWICE as fast as PUR03a !!!!!!!!!
      Without any assembler (just pure C).
      To be more specific:
         The first 6,239,865 (0x5f3679) instructions of FIREDEMO
         (after that a vertical retrace interrupt occurs) are emulated in 6sec by TrueReality.
         PUR03a needs 13,5sec to do the same amount of instructions.
      The changes were made because the memory was written/read in a bad way by:
         doWriteMemByte()         doReadMemByte()
         doWriteMemHalfWord()     doReadMemHalfWord()
         doWriteMemDoubleWord()   doReadMemDoubleWord()
         ... now the mem should be written/read correct (on big and little endians).
   Now all memory is set to zero after allocation.
   Debugger:
      Added 'xm' -> prints MI, VI, AI, ... regs.
      Changed 'r' -> 'R' (display refresh).
      Changed 'e' -> 'rb', 'rh', 'rw' and 'rd'.
      Changed 'w' -> 'wb', 'wh', 'ww' and 'wd'.



Sun Jun 21 00:14:11 MET DST 1998
   I've fully implemented the MI regs.
   Huge changes in rs4300i_doCode() -> 6,239,865 (0x5f3679) instructions of FIREDEMO are emulated in 18sec now.
   The vertical retrace interrupt is implemented and should work.
   But FIREDEMO is not displaying anything useful.
   I've to find out why - seems difficult to find out why.
   


Fri Jun 19 10:51:12 MET DST 1998
   F*?!ing i got ill :((((((((((((



Fri Jun 19 00:10:36 MET DST 1998
   I changed the endian stuff.
   Also the mnemonic definitions had to be changed.
   Now the first 6,239,865 (0x5f3679) instructions of FIREDEMO are executed in 25sec!
   I hope that there will be no problem in future because the bytes in "real" memory are not in correct order (on little endian machines).
   If you just use the doReadMemX() routines there can't be a problem.
   But if you display mem there will be a problem.

   I included more #defines in various files because of porting reasons.

   '#define USE_DISPLAY' has been added in 'config.h'.
   If defined display stuff will be in code, if not display stuff will not be included.



Thu Jun 18 21:02:15 MET DST 1998
   I'll do changes on the endian stuff.
   Currently on little endians (x86, ...) a huge amount of shift operations are done every instruction.
   When this is done just the ld/lw/lh/lb/sd/sw/sh/sb instructions will slow (making shift ops) TrueReality a bit.
   But not more then before!



Tue Jun 16 23:39:55 MET DST 1998
   I've found out that the exception that occurs is an interrupt.
   Interrupts (and other gerneral exceptions) are serviced by an interrupt handler at address 0xffffffff80000180. (Why does pur jump to 0x80000184?)
   Now the question is: What is the reason of that interrupt.
   The cause register says 0x400.
   I'll find out what that means!
   Yep, I'm back. That means that it was interrupt #2 (#0..#7 are possible).

   ... and what does that mean?????
   I've studied the R4000 manual & the header files of the n64 developer tools but there are more questions than before.



Tue Jun 16 21:48:59 MET DST 1998
   I really need information about exceptions/interrupts/contoller.
   I hope that I was wrong when I thought that I would get no information of the coders of Project Unreality.
   
   I'll check out FIREDEMO with pur03a this night.
   Maybe I'll find the reason why (after the 6,239,865th instruction) the PC jumps to 0x80000184 instead of doing "sll V1, V0, 0x01", although there is no jump (just a "lw A2, 0xec4(A2)") instruction before.

   Maybe someone out there can help me!?!?

   If I find nothing I'll play TombRaiderII. (Bettina is not here so I'll play with Lara >:-> )
   


Tue Jun 16 00:13:29 MET DST 1998
   A lot of time has gone and a lot of new code has developed.
   I got an email from a guy who ported the first version I released to MacOS.
   He told me that it had been impossible to port my newer version.
   So I decided to rewrite a lot of code to make it possible to do ports.
   I hope that I have done that in a good way if not -> email.
   The directory structure of TrueReality has changed.
   
   TrueReality/Source/:
   *                         : general emulation code
   IPC/*                     : general (hope that I'm right) process comunication header file
   IPC/UNIX/*                : UNIX inter process comunication code
   Display/*                 : genersl display header file
   Display/local/*           : operating system specific local display routines
   Display/local/X/*         : UNIX - X local display routines
   Display/local_process/*   : operating system specific local display routines (that use a seperte process/thread)
   Display/local_process/X/* : UNIX - X local display routines (that use a seperte process/thread)
   Display/remote/*          : operating system specific remote display server (not well tested/supported right now)
   Display/remote/X/*        : remote display routines (not well tested/supported right now !!!!)
   
   main.c got new general routines for opening/closeing/checking/sending io.
   main.c now parses the command line.

   Routines:
      int  OpenVisual()
      int  CloseVisual()
      void RefreshVisual()
      void CheckVisual()
      void GetVisualName(char *, int *n)
   are standard for local displays now.
   CheckVisual() should check the N64 controller (your keyboard/mouse/joysick) in a later state.
   The UNIX - X version currently uses that to process the windowevents.
   
   The debugger has a new command.
   'r': refreshes the display.

   New #defines has been added (mainly to make porting more friendly ;) )

   I need some sleep now.
  


Thu Jun 11 14:18:20 MET DST 1998
   - 6,239,865 (0x5f3679) instructions of FIREDEMO are executed correct (compared with pur03a).
     My iP133 / 32MB / Linux 2.0.29 does that within 35 seconds (compiled with gcc 2.7.2.1 option '-O3').
     It seems that after that an exception occurs. Exceptions are not emulated right now :(
   - I have made a lot of "#define" changes.
     Now you can choose in "config.h" which debugging code should be compiled in.
     But this is not perfect right now (like many :) other things).
     It took me about 2 hours to change all 'if(...)' to '#ifdef' :( .
     There is also a new extern global variable ('debug') in debug.h.
     If it is '0' then debugging messages should be hidden.
   - Additional information for X display:
     If you press the 'r' key, the display is refreshed.
     '!' key ends the display server and sends 'QUIT' via IPC.
     This should be changed to 'DIED'. Because the emulator should not quit if the display is killed.
     It should be possible also to start a display server when the emulator is running.
   - There is a bug (or some bytes of missing code) in 'IPC/comm.c'
        When all IPC connections are removed it is impossible to 'bind' a new server to a socket.
        After 30sec - 1min the socket is compleatly removed from the system and a new display server can be started.
        There is a note in the manual page of 'bind' that sockets have to be removed via 'unlock'.
        I've no idea how that should work (a socket has no path!?!).
        If anyone knows how to do that send me an email, thanx.
   - The debugger can deal with breakpoints now ('b').



Wed Jun 10 00:35:57 MET DST 1998
   - I've made main.c much nicer (more comments, new routines - have a look at it)
   - I changed the initial IPC display server protocol:
        emu          display server       comment
        8037         3780                 like before
        SHMIDS 2                          this is new. 2 is the number of ids (currently not checked)!
        id1                               the 2 ids are sent by the client (emu)
        id2
        DISPLAYNAME  name of display      the name of the display is sent by the display server (currently 'X std')
                     ....                 like before
   - The endianness has to be defined in 'config.h' now because of speed reasons.
     So mnemonic.h had to be changed a bit
     and various other files.
   - I changed debugging ... it is done via defines instead of variables (because of speed)
   - I have been removing a bug in the x display server.
     It determines if the width of the display is not between 320 & 640 pixels.
     If that happens the width is set to 640 pixels and a message is written into the display.
   - FIREDEMO's bootcode seems to work correct,
     the videomode is set, but no flames appear.
     I've to check out why ... there must be a bug in a opcode :(
   - I've to mention here that in the current stage of the X display server it is not possible that the colors are correct. The memory is just put into the window. No depth check/conversion is done right now.
     I hope that a friend of mine will do that.
     So I can go on coding emulation.
   Go to bed now. My girlfriend (bettina) is waiting ...



Tue Jun  9 00:01:26 MET DST 1998
   "TrueReality" has a graphical output now!!!
   There is a directory (Display) where all (at the moment just X related) display code is in.
   I've coded a prg (n64displayd) which opens an IPC port (n64display) (defined in config.h) and waits for a connection (hopefully from "TrueReality").
   "TrueReality" ends at the beginning if no n64display port is open (this should be changed - it should be possible to start "TrueReality" without a (or maybe just with a text) display).
   "TrueReality" sends '8037' and waits for '3780'. This is for synchronisation and to check if the right server is contacted.
   2 shared memory IDs are sent now.
   "TrueReality" forks now into emulator (parent) & IPC manager (child).
   All of the IPC is done by the IPC manager. If the emu needs to send IPC messages (maybe for RCP/RDP in future) this should be done by sending signals & messages from the emu to the IPC manager.
   IPC man waits for '....' ('....' is not checked right now)
   'QUIT' kills child, frees mem, removes IPC connection and exits.
   'DIED' kills child, frees mem, removes IPC connection and exits.

   The IPC server (this is the display prg (n64displayd)) does the following:
   - waits for a IPC connection on port n64display (specified in config.h)
   - waits for '8037'
   - sends '3780'
   - waits for 2 shared memory IDs and stores them
   - the prg forks into IPC manager (parent) and window manager (child)
   - shared mem is attached by the window manager
   - '....' is sent by the IPC manager
   - on 'QUIT' it sends SIGQUIT to child, sends 'DIED' over IPC and sends SIGQUIT to itself
   - on 'DISP' it sends SIGUSR1 to child (display refresh)
   
   I've to get some sleep now!



Sun Jun  7 01:11:23 MET DST 1998
   I compleatly changed everything!

   o I've coded an emulator (instead of a disassembler like before).
   o I named the emulator: "TrueReality".
   o All code is written in "C".
   o I have got and I will get no help from the coders of "Project UnReality".
     I have written emails to "Michael Tedder" <bpoint@bpoint.ml.org>.
     I think that I'll get the same answers from the other guy.
     ... so I'll have to develope on my own.
   o "Project UnReality" includes no debugger in pur04-1 and there will be none in all following versions.
   o I've found "Project Reality" on the internet (now known as NSFE "Nintendo Sixty Four Emulator").
   o I'll post my source on the website of "Gorden Hollingworth" <gordon.hollingworth@cableinet.co.uk> at:
     http://wkweb5.cableinet.co.uk/gordon.hollingworth/
     now it's on:
     http://www.snes9x.com/n64emulators



====================================================================================================================================



Fri Apr 10 03:18:20 MET DST 1998
   following registers added:
      pc           program counter           (64bit)
      r0 ... r31   general purpose registers (64bit)
      hi, lo       multiply/divide registers (64bit)

      there are 153 cpu instructions (when i've counted them correct (@ Fri Apr 10 02:22:37 MET DST 1998 /-) )
      currently i have 9 instruction implemented (5.88%)
      


Thu Apr  9 17:23:32 MET DST 1998
   - i will add registers to the disasm class to do little/slow emulating


   
Sun Apr  5 20:45:11 MET DST 1998
   - port of pascal program is done
     it seems that it works ... but i cannot test it because i have compleatly no information of an RS4300i :(



Sat Apr  4 00:44:11 MET DST 1998
   - a few days ago i found "Project UnReality" in the internet (http://projunreality.ml.org (now: http://projunreality.blackbag.org))
     so i tested the N64 emulator
     i saw that the members of "Project UnReality" did great work!!!
     except that they did their work under a commercial operating system (Win95)
        i prefer writing code that can be compiled for more computers than just PC's
        maybe one day i'll have a CRAY or a SUN ... so my software should run on them too
        that means that i will write code that runs on UNIX
        graphical output will be displayed on X ... a great alternative to micro$ofts GUI
     unfortunately i don't know:
      - how many people are involved in that project
      - if the sources are available
      - if the members of "Project UnReality" are allowed to give the sources to developers
   - because of that i wrote an email to
        bpoint@projunreality.ml.org
     i told them that i have experience in programming and i would port the "Project UnReality" to UNIX systems
     the answer was that until "Project UnReality" cannot run some commercial games they are not interested in allowing to port
        their "Project UnReality"
   - so my aim is to write such a software based N64 emulator (which uses a RS4300i cpu) on my own
   - i hope that soon i will get some help from the members of "Project UnReality"
     maybe when they see that i'm serious in writing an emulator for UNIX systems
   - just started developing an disassembler for the RS4300i cpu
     as reference i used the source (a pascal program) from
       Hartec@dextrose.com
     which i have downloded from
       www.dextrose.com
     i will port the pascal program to C++
     the port with no extensions (and with all of its bugs) will be version 0.1
     hope that i! will not implement bugs
     
