April 2012 - Release of the PC based T414 Transputer emulator (jserver version 5.2). This release removes the
Wdesc register from within link interfaces and use the link channel
control words only. As recently identified by Mike (see
comp.sys.transputer - but this is to aid analysing only). Also added testhardchan Instruction. Removes a debug message incorrectly left in when integrating LCM. Also adds the feature in the 'in', 'out', 'outbyte' and 'outword'
instructions for swapping the direction of the data sent by the Link
Engine, depending on the link addresses used. See comp.sys.transputer (An underhanded programming problem.). Added multiprocessor support (i.e. multiple jservers running on single PC
or networked PCs) using /sn option. Updated the Occam itools collection to run under Win 7 64bit. New .exe files added within release zip file (see 'Emulator Files' attachment). March 2012 - Spent the last few months adding multiprocessor support (i.e. multiple jservers running on single PC or networked PCs) which is now fully working. Well it's been tested with multiple jservers running on single PC at least! Removes the Wdesc register from within link interfaces and use the link channel control words only. As recently identified by Mike (see comp.sys.transputer - but this is to aid analysing only). Added testhardchan Instruction. Added the feature in the 'in', 'out', 'outbyte' and 'outword' instructions for swapping the direction of the data sent by the link interface, depending on the link addresses used. See comp.sys.transputer (An underhanded programming problem.). A jserver beta release including all these changes is available on the 'Beta code' tab. November 2011 - Release of the PC based T414 Transputer emulator (jserver version 5.1). Added the "start" #1FF instruction. Keeping the existing "return" support in the instruction when /sv is used (for Mike's validation support). Added link boot strapping support (i.e. peek, poke and code loading and executing) on all four external links. Started adding multiprocessor support (i.e. multiple jservers running on single PC or networked PCs). I plan to allow multiple jserver applications to communicate via their external links (using the proposed /sn number , where n for network switch enable, number is process id). I'm going to use Lightweight Communications and Marshalling (LCM) for this purpose, but I've not integrated LCM in this release. Existing host server (/sb) is fully operational (all timing unchanged from version 5.0). However the current version does not support any data in or out on the link to/from outside jserver (in next version - I promise when LCM integrated). In the meantime, as a bonus link 2 is connected to link 3 to support debugging, so have a play. Minor changes to banner. Attempting to run jserver /sn 1 will simply hang. Its expected! October 2011 - Release of the PC based T414 Transputer emulator (jserver version 5.0). Added full emulation of fpunoround instruction and its effects on the fpadd instruction (in particular its handling of the INT64 to REAL32 conversions). Minor changes to banner. Thanks again to Mike for his help with his fpu instruction validation tool. August 2011 - Release of the PC based T414 Transputer emulator (jserver version 4.9). Removed all x87 fpu support and integrated SoftFloat package (written by John R. Hauser), to provides better portability and full realization using c to VHDL converter tools (such as Altium). Removed all occurrences of RetypeReal32 and RetypeReal64 function, in fpldnlsni, fpldnlsn, fpldnladdsn, fpldnlmulsn, fpldnldbi, fpldnldb, fpldnladddb and fpldnlmuldb instructions. Changes to fpusqrtlast, fpur32tor64, fpur64tor32, fpuexpdec32, fpuexpinc32, fpunoround, fpudivby2, fpumulby2, fpremfirst, fpgt, fpeq, fpstnli32, fpldnladddb, fpldnlmuldb, fpldnladdsn, fpldnlmulsn instructions. Changes made to AddIEEE, SubIEEE, MulIEEE and DivIEEE functions. The savage benchmark now produces the answer 1.1778e-09, which is only 1 lsb difference in the fraction part of the IEEE-754 answer compared with the real T800. The main bulk of the emulator development over the past couple of months has been testing of the T800 fpu instructions using the T800 validation testsuite (program written by Mike at Transputer.net). A final 'thank you' goes to Mike for his help with supplying the T800 validation testsuite and the new fpstnli32 instruction implementation. June 2011 - Release of the PC based T414 Transputer emulator (jserver version 4.8). Bug fix in AddIEEE, SubIEEE, MulIEEE, DivIEEE and fpusqrtlast instructions to change to _PC _53 for DB. Same for fpstnli32 and fpint instructions, BUT kept fpur64tor32 using only 24bit precision (always). Bug fix to fpur64tor32 and fpunoround instructions to add missing FTempReg.length = DB assignments. Made correction in fpu.h to the wrongly defined SN_MIN_REAL32 and DB_MIN_REAL64. Added missing ‘if’ statement in fpstnlsn and fpstnldb instructions. Added the undocumented fpsttest instruction. Also corrected rounding mode constant definitions (in line with fpsttest instruction findings). Added new /SW command line option to display instruction warnings. Mainly added to suppress the warnings being generated by some of the standard T4xx instructions. Added warnings messages in fpu.c to monitor any instructions run with wrong SN or DB in FAReg (and FBReg). Bug fix to fpuexpinc32 and fpuexpdec32 instructions. Rewote rint function to support all four rounding modes (n, p, m and z). Added FP_RoundMode = ROUND_TO_NEAREST in fpremfirst to ensure the correct rounding method is always used, regardless of what happen in pre-seeding instruction. Made change to fpusqrtlast instruction to ensure square root of -0.0 returns -0.0. Added new rintf function (for float parameters), based on the existing rint function. Made change to fpi32tor32 instruction, to use rintf function. Got email from Mike at transputer.net and he explained that there is a bug in the Microsoft modff, since it uses a macro. I added workaround (Thanks Mike!). Using rintf in the fpint function. Minor bug fixed in fpusqrtlast instruction by adding (float) cast in front of sqrt (FAReg.sn). Updated fpuchki32 and fpuchki64 instructions. Made minor changes to fpur64tor32 and fpunoround instructions, to use .bit64 = instead of previous inaccurate float to double casting. Minor updates to fpu.h constants. Minor tidy update to fpstnli32 instruction. Finished testing all remaining fpu instruction test programs on real T800. Made change to fpi32tor32 instruction to add _controlfp () prior to casting of long to float. May 2011 - All T800 fpu instruction test benches have been written. This has allowed me to identify a number of minor errors in the jserver emulator, which I am currently fixing. The news is there are only a few instructions which are not implemented correctly (i.e. give different test bench results compared with the real T800). One other good bit of news is that the latest beta release now runs the rayshade program, ported to run on the T800 transputer by Mike at transputer.net (see www.transputer.net/sw/sw.asp) and generates the complete wine cup image. Planned next jserver release is still aimed to be the middle of June. May 2011 - I've spent the last couple of months (with a small holiday break in between!) writing fpu instruction test benches in Occam (with embedded ASM). It's quite a slow process but it will allow me to check if the fpu emulator support is the same as the real T800. I'm about half way through the fpu instructions. I've found a few errors so far and made changes to the beta versions of jserver. I plan to complete all the fpu instruction test benches and then release the next jserver update sometime around the middle of June. March 2011 - Release of the PC based T414 Transputer emulator (jserver version 4.7). Added the remaining 13-off unimplemented T800 FPU instuctions. Update fpudivby2 and fpumulby2 to make more readable. Fixed bugs in fpuchki32, fpuchki64 and fpstnli32 instructions. Fixed bugs in fpadd and fpmul instructions based on Mike's comments (thanks!). Sorted handling of rounding mode in the code which switches x87 rounding mode. Fixed bugs in fpremfirst, fpldnladddb, fpldnlmuldb, fpur32tor64, fpunoround, fpgt and fgeq instructions. Added missing T800 inclusion in wsubdb instruction (in p.c). Feburary 2011 - Release of the PC based T414 Transputer emulator (jserver version 4.6). Added T800 transputer support (/sh 800). All apart from 13 of the T800 instructions have been implemented in this release. If the unimplemented instructions are executed (nop) they display [fpu instruction]. Many thanks to Mike at transputer.net for his help in the integration of the T800 fpu code. Feburary 2011 - I've spent the last month starting to add T800 support in the emulator. The basic shells for all instructions are now done and some FPU instructions completed. Thanks again to Mike at transputer.net for his help with basic arithmetic support. January 2011 - Release of the PC based T414 Transputer emulator (jserver version 4.5). Added T400 transputer support. Corrected DRAM memory wrapping to fix a bug where previously higher memory addresses wrongly accesses the internal SRAM. December 2010 - Release of the PC based T414 Transputer emulator (jserver version 4.4). Updated implementation of stnl and sb instructions (further ERB). Removed the clearing of 0x8000002C (i.e. WdescIntSaveLoc) on returning to interrupted low priority process, since not required (see comp.sys.transputer for justification). Made correction to start_process() to ensure 0x8000002C (i.e. WdescIntSaveLoc) is set to 0x80000001, when starting a high priority process after processor being either idle or at low priority. Added extra process debug pmonitor (/sm) to identify when transputer idle. Added new constants byte_select_mask and word_select_mask. November 2010 - Release of the PC based T414 Transputer emulator (jserver version 4.3). Updated dist instruction to finally complete all CReg Transputer Extended Register Behaviour. November 2010 - Release of the PC based T414 Transputer emulator (jserver version 4.2). Fixed bug which was causing the .btl files generated by icollect to have a few different bytes than when generated on a real transputer. The jserver now generates identical output as the real transputer running the Inmos Occam and C toolsets. Note: MUST have same transputer type and same environment variables. Included environment variable JSERVERARG support (e.g. set JSERVERARG=/sh 425). Minor changes to BreakHandler. Added Idle_p constant. Made changes to scheduler operation to not require location 0x8000002C (i.e. WdescIntSaveLoc) to be initialised at power-up. It is believed that this method is used in the real transputer. I have also streamlined the scheduler operation inline with the real transputer. Added the displaying of boot file size when using /sz, as per Inmos iserver. November 2010 - Release of the PC based T414 Transputer emulator (jserver version 4.1). Add #1FF (start) instruction to support instruction validation used by Mike. Corrected sp.gets and sp.puts as per Inmos iserver. Minor correction to sp.flush. Made changes to server.c and p.c (enbc & disc) to support ALT construct on Link0In. Updated in, out, outbyte and outword instructions (missing writes to wp offset -3). October 2010 - Release of the PC based T414 Transputer emulator (jserver version 4.0). This release contains some major changes and product improvements. Corrected bug in wcnt instruction. Updated xdble, xword, cword, csngl and ldiv instructions (various unsigned integer comparision problems and incorrect instruction implementations). Added power-up values for AReg and BReg. Updated implementations of fmul, rem, sb, postnormsn, mul, roundsn, unpacksn, bitrevnbits, call, wcnt and div instructions. Made changes in server.c to correct the amount of date returned by host server (now same as Inmos iserver). It was previously 8 minimum which was wrong. Added transputer validation test suite support for Mike at transputer.net. Added missing PIC in alt instruction. Improved coding flow in p.c part 2 of 2. Added simulation of 10Mbps serial link transfer time, pseudo host (PC) processing time when handling iserver sp messages between T414 and iserver (This change involved some hairy code changes!!! ) New constants added in processor.h. Improved implementations of alt, altwt, altend, talt, taltwt, enbs, diss, enbc, disc, enbt and dist instructions. Made change to update_time (), schedule () and insert () effected by the altercation changes. Updated tin instruction implementation. A big 'thank you' to Mike at transputer.net for his help with the altercation code changes and other helpful code observations throughout beta testing. September 2010 - Release of the PC based T414 Transputer emulator (jserver version 3.9). Added missing Halt on Error mechanism (note: added /so to override halt on error). Corrected an overflow bug in the mul instruction. Minor code indentation corrections. Added corrections and some missing /sz debug statements (compared to Inmos iserver) in various server commands. Corrected bug in sp_error constant. Change to banner. Added new /s? for more help. Made changes to the div and rem instructions to correctly handle error conditions and CReg post instruction behaviour (based on real T414 operation - thanks again to Mike at transputer.net for his help). Added clearing of halt on error flag if a high priority process interrupts a running low priority task (a feature in the real T414). July 2010 - Release of the PC based T414 Transputer emulator (jserver version 3.8). Sorted a silly uninitialised variable bug (CopyFileName in main.c) which was causing a windows fault violation to occur when executing jserver with just options: /si or /si /sz or /sh 414 or /sh 425. July 2010 - Release of the PC based T414 Transputer emulator (jserver version 3.7). Added automatic IBOARDSIZE initialization, if not defined. In source code replaced tabs with spaces and sorted code indentation. Removed 'inline' code references. Removed duplicate core assignment. Some considerable tidying of source code. Added missing Processor Instruction Cycles (PIC) in ldnlp instruction. Added correct MemStart usage in p.c. Correction to stoperr instruction. Corrected and updated endp instruction. Removed HiTimer and LoTimer and used correct ClockReg0 and ClockReg1. Added workspace, loop end and parallel process symbolic constants in p.c. Corrected PIC in lshl and lshr instructions. Added waiting.p in tin instruction. Corrected instruction byte read. Added the remaining T425 breakpoint and debugging instructions. Corrected row variable placement in T425 block move instructions. Added StatusReg. StatusReg now emulates ErrorFlag, HaltOnErrorFlag and GotoSNPBit. StatusReg and EReg now stored in memory when a high priority interrupt of a low priority task occurs. Added missing round to nearest part of fmul instruction. Replaced interrupt variable with correctly used WdescIntSaveLoc. Deleted the TptrLoc0 and TptrLoc1 registers and mapped them correctly to use memory locations 0x80000024 and 0x80000028 (as with actual transputer). A big 'thank you' goes to Mike at transputer.net for his helpful source code review comments and suggested improvements of version 3.6 which has lead to version 3.7. June 2010 - Release of the PC based T414 Transputer emulator (jserver version 3.6). Mainly tidying up code prior to first release of source code. Minor bug fixes. Minor change to start-up banner. Source code made available on the website. May 2010 - Release of the PC based T414 Transputer emulator (jserver version 3.5). Added iserver 1024 byte block transfer (getblock and putblock) protocol support. Added CReg post instruction behaviour (source Inmos - Transputer Extended Register Behaviour) for div. Still to add fmul and dist. Increased external memory to 4Mbytes. Added DRAM wrapping (i.e. ghost memory) common when simple memory map decoding used on external memory. Fixed bug so Minix bootloader now sees the correct 4M+4K bytes of memory when run as T425 and 4M+2Kbytes of memory when run as T414. April 2010 - Release of the PC based T414 Transputer emulator (jserver version 3.4). Re-enabled verbose switch when /SB selected in command line. It was wrongly commented out whilst debugging another problem and I forgot to add it back. Standardized all bad icode warnings. Deleted the previously used shadow OReg register and changed the code to disable interrupts (i.e. links and timers) during the execution of Pfix and Nfix instructions within a low priority process. Added 'p' option in the ctrl-c to allow the monitoring of processes. Corrected minor bugs in some of the DEBUG messages. Corrected bug in server sp.seek command. Added extra processor cycles to account for accessing external 3 cycle multiplexed DRAM memory. Added correct processor cycle emulation for the T425 2dmove instructions (previously it was fixed at 1 cycle, now its (2p+23)*r as per datasheet). March 2010 - Release of the PC based T414 Transputer emulator (jserver version 3.3). Added ctrl-c support as in the Inmos iserver. March 2010 - Release of the PC based T414 Transputer emulator (jserver version 3.2). Added remainder of DEBUG () and INFO () message outputs as the Inmos iserver. Added the ABORT () macro to provide exit errors. The jserver.exe now returns error codes the same as the Inmos iserver. Earlier versions always returned 0. March 2010 - Release of the PC based T414 Transputer emulator (jserver version 3.1). Fixed a bug which caused a windows violation error. For some reason it did not show up during testing on a Windows 7 platform but did show up on Windows XP platforms (running jserver /si). March 2010 - Release of the PC based T414 Transputer emulator (jserver version 3.0). Added CReg post instruction behaviour (source Inmos - Transputer Extended Register Behaviour) for outword, outbyte, rem and move. Still to add fmul, div, rem and dist. I've now switched my focus onto the server side of the code. I've added the /SI and /SZ options as per the real Inmos Iserver. For thoses familar with iserver source code, its the DEBUG() and INFO() message outputs. February 2010 - Release of the PC based T414 Transputer emulator (jserver version 2.9). Fixed bugs in T425 instructions crcword and crcbyte. February 2010 - Release of the PC based T414 Transputer emulator (jserver version 2.8). Added /SH 425 emulator support for T425 Transputer. All T425 instructions emulated except for debugger support codes (at present). Added the undocumented test instructions: testldd, teststd, testlde, testste, testlds and teststs. The actual new registers Dreg, Ereg and StatusReg are currently not used by the emulator (a job to do later!). February 2010 - Release of the PC based T414 Transputer emulator (jserver version 2.7). Fixed another very subtle bug associated with the ALT instruction sequence. Added the remaining processor cycle timing for 'in' and 'out' instructions (all now complete!). Added CReg post instruction behaviour (source Inmos - Transputer Extended Register Behaviour) for in and out. Still to add fmul, div, rem, move, outword, outbyte and dist. Corrected bug in host server, to correctly respond to a non supported sp function request. Added correct implementation of gajw instruction (includes proc priority toggle trick if lsb of AReg =1), as per real T414/T800 silicon. January 2010 - Release of the PC based T414 Transputer emulator (jserver version 2.6). Minor change to banner. Changed existing variable named CurPri to ProcPriority inline with transputer documentation [R4]. Corrected bug in resetch instruction. Replaced existing variables Wprt with Wdesc and created new functions to extract Wprt and ProcPriority from Wdesc. Code also changed to use 0x80000001 in Wdesc as idle state. Fixed yet another bug (which I introduced!) when adding the high priority interrupt mechanism. Found two more very subtle bugs associated with the high priority interrupt mechanism (Hopefully now all fixed!). As a result idebug.btl runs on the emulator and displays the start-up banner. December 2009 - Release of the PC based T414 Transputer emulator (jserver version 2.5). Finished adding real instruction cycle timing and high and low timer processing to correctly emulate a 20MHz T414 device. All done, except in and out instructions which still are fixed at 18 cycles (instead of 20 or 2w+18). Various other minor bug fixes and feature improvements (in particular fix to sp_pollkey to fix isim problem). Started adding CReg post instruction behaviour (source Inmos - Transputer Extended Register Behaviour) - have added lmul, ldiv, lshl, lshr, sb and lend. Still to add fmul, div, rem, move, in, out, outword, outbyte and dist. December 2009 - Release of the PC based T414 Transputer emulator (jserver version 2.4). Added real instruction cycle timing and high and low timer processing to correctly emulate a 20MHz T414 device. Various other minor bug fixes and feature improvements whilst trying to get Minix OS to run. The high priority interrupt mechanism is now fully working. October 2009 - Release of the PC based T414 Transputer emulator (jserver version 2.3). Corrected memory size to reflect the T414 2K internal memory plus 2Mbyte external memory. September 2009 - Release of the PC based T414 Transputer emulator (jserver version 2.2). Corrected a memory accessing bug if trying to read or write outside the external 2Mbyte memory address space. September 2009 - Release of the PC based T414 Transputer emulator (jserver version 2.1). Corrected a bug associated with command line arguments, which has previously meant that some switch order combinations did not work. Now fixed! August 2009 - Release of the PC based T414 Transputer emulator (jserver version 2.0). Command line arguments can now be entered in both upper and lower case (or combination). June 2009 - Release of the PC based T414 Transputer emulator (jserver version 1.9). I've spent the last two years on and off debugging the software and now I'm happy with the basic emulation behaviour and the operation of the Inmos Occam Toolset running on the emulator. To celebrate, I've setup this website for anyone intrested in having a play with a 20 year old parallel relic! (which was years ahead of its time). November 2006 - Downloaded the source code from Julian Highfield's website. Compiled it for Win32 command console (after some minor code tweaks) and then started debugging to get it running various btl files and the Occam and C Inmos toolset. |